@whispering233/ai-editor-db 0.0.20 → 0.0.26
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/dist/connection.js +2 -2
- package/dist/connection.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/migrations/002_event_timeline.js +1 -1
- package/dist/migrations/002_event_timeline.js.map +1 -1
- package/dist/migrations/003_timepoint.js +8 -8
- package/dist/migrations/003_timepoint.js.map +1 -1
- package/dist/migrations/004_setting_tags.js +2 -2
- package/dist/migrations/004_setting_tags.js.map +1 -1
- package/dist/migrations/005_reference.js +2 -2
- package/dist/migrations/005_reference.js.map +1 -1
- package/dist/migrations/index.d.ts +2 -2
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +7 -7
- package/dist/migrations/index.js.map +1 -1
- package/dist/queries/chat.d.ts +20 -20
- package/dist/queries/chat.d.ts.map +1 -1
- package/dist/queries/chat.js +105 -59
- package/dist/queries/chat.js.map +1 -1
- package/dist/queries/compute-state.d.ts +9 -9
- package/dist/queries/compute-state.d.ts.map +1 -1
- package/dist/queries/compute-state.js +22 -28
- package/dist/queries/compute-state.js.map +1 -1
- package/dist/queries/delta.d.ts +21 -21
- package/dist/queries/delta.d.ts.map +1 -1
- package/dist/queries/delta.js +110 -63
- package/dist/queries/delta.js.map +1 -1
- package/dist/queries/entity.d.ts +50 -46
- package/dist/queries/entity.d.ts.map +1 -1
- package/dist/queries/entity.js +226 -137
- package/dist/queries/entity.js.map +1 -1
- package/dist/queries/migration.d.ts +31 -31
- package/dist/queries/migration.d.ts.map +1 -1
- package/dist/queries/migration.js +43 -44
- package/dist/queries/migration.js.map +1 -1
- package/dist/queries/outline-ops.d.ts +22 -22
- package/dist/queries/outline-ops.d.ts.map +1 -1
- package/dist/queries/outline-ops.js +35 -42
- package/dist/queries/outline-ops.js.map +1 -1
- package/dist/queries/relation.d.ts +18 -18
- package/dist/queries/relation.d.ts.map +1 -1
- package/dist/queries/relation.js +115 -84
- package/dist/queries/relation.js.map +1 -1
- package/dist/queries/trash.d.ts +10 -10
- package/dist/queries/trash.d.ts.map +1 -1
- package/dist/queries/trash.js +75 -48
- package/dist/queries/trash.js.map +1 -1
- package/dist/query-db.d.ts +5 -0
- package/dist/query-db.d.ts.map +1 -0
- package/dist/query-db.js +22 -0
- package/dist/query-db.js.map +1 -0
- package/dist/schema.d.ts +8 -20
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +13 -85
- package/dist/schema.js.map +1 -1
- package/dist/storage/atomic.d.ts +8 -8
- package/dist/storage/atomic.d.ts.map +1 -1
- package/dist/storage/atomic.js +10 -11
- package/dist/storage/atomic.js.map +1 -1
- package/dist/storage/outline.d.ts +14 -14
- package/dist/storage/outline.d.ts.map +1 -1
- package/dist/storage/outline.js +17 -18
- package/dist/storage/outline.js.map +1 -1
- package/dist/storage/project.d.ts +11 -11
- package/dist/storage/project.d.ts.map +1 -1
- package/dist/storage/project.js +17 -18
- package/dist/storage/project.js.map +1 -1
- package/dist/tables.d.ts +718 -0
- package/dist/tables.d.ts.map +1 -0
- package/dist/tables.js +141 -0
- package/dist/tables.js.map +1 -0
- package/package.json +3 -2
package/dist/queries/entity.d.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import type { EntityRow, EntitySummary, EntityType, RelationRow } from "@whispering233/ai-editor-shared";
|
|
2
2
|
import { type Db } from "../connection.js";
|
|
3
|
-
/**
|
|
3
|
+
/** 列表查询参数(;缺省值语义与路由层对齐) */
|
|
4
4
|
export interface EntityListQuery {
|
|
5
5
|
type?: EntityType;
|
|
6
6
|
/** 搜索关键词(模糊匹配 name;LIKE 通配符 %/_ 原样透传——模糊搜索语义,注释明示) */
|
|
7
7
|
q?: string;
|
|
8
8
|
/**
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
* data 字段过滤(S6.3 工具 search_entities 下沉,「实体查询」filters):
|
|
10
|
+
* status 精确匹配 data.status;tags 要求 data.tags 数组包含全部指定 tags(AND)。
|
|
11
|
+
* 列表摘要不含 data(toSummary 只提取关键字段),故本过滤走「全行查询 + JS 层判定」。
|
|
12
|
+
*/
|
|
13
13
|
filters?: {
|
|
14
14
|
tags?: string[];
|
|
15
15
|
status?: string;
|
|
@@ -21,14 +21,14 @@ export interface EntityListQuery {
|
|
|
21
21
|
sort?: "name" | "created_at" | "updated_at";
|
|
22
22
|
order?: "asc" | "desc";
|
|
23
23
|
/**
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
* 上级设定筛选(2026-08,仅 setting):匹配 = 实体在设定层级树(belongs_to)中
|
|
25
|
+
* 直接或间接属于该上级(**递归子树,不含上级自身**)。复用既有 listSettingHierarchyEdges 全量边建
|
|
26
|
+
* childOf 邻接表 DFS 收集后代 id 集合后走 JS 过滤路径(见 listEntities 注释,total 为过滤后总数)。
|
|
27
|
+
* 指向不存在的设定(含已软删)→ 后代集合为空 → 空结果(宽松,同 tag 无匹配不 404)。
|
|
28
|
+
*/
|
|
29
29
|
parentId?: string;
|
|
30
30
|
}
|
|
31
|
-
/**
|
|
31
|
+
/** 列表结果(;items 为 API 形态 EntitySummary,与 chat.ts 同款风格) */
|
|
32
32
|
export interface EntityListResult {
|
|
33
33
|
items: EntitySummary[];
|
|
34
34
|
total: number;
|
|
@@ -36,22 +36,26 @@ export interface EntityListResult {
|
|
|
36
36
|
/** 行 → EntityRow(data 从 JSON 字符串解析为对象;坏行防御见 rowToEntityRow 注释) */
|
|
37
37
|
export declare function rowToEntityRow(row: Record<string, unknown>): EntityRow;
|
|
38
38
|
/**
|
|
39
|
-
* 实体列表(GET /api/v1/entity/:type
|
|
39
|
+
* 实体列表(GET /api/v1/entity/:type,):
|
|
40
40
|
* type 过滤 + q 模糊搜索(name LIKE)+ 排序(name/created_at/updated_at × asc/desc,
|
|
41
|
-
* 白名单防注入)+ 分页(limit clamp 1-200)+
|
|
41
|
+
* 白名单防注入)+ 分页(limit clamp 1-200)+ **默认过滤软删**。
|
|
42
42
|
* total 为过滤后总数(不含分页)。
|
|
43
43
|
* filters 语义(S6.3 下沉):data 字段 JS 过滤(列表摘要不含 data),此时 SQL 只做
|
|
44
44
|
* type/q/软删过滤,filters + 分页在 JS 层(MVP 数据量小,全行查询可接受);
|
|
45
|
-
* parentId
|
|
45
|
+
* parentId 语义( 上层筛选):同上——复用 listSettingHierarchyEdges 收集递归后代集合,
|
|
46
46
|
* 与 filters 同款 JS 过滤路径(两者可同时存在,AND 组合;SQL 路径保持 COUNT+LIMIT 行为不变)。
|
|
47
|
+
*
|
|
48
|
+
* drizzle 改造:where 动态条件 and 组合(顺序与旧 where.join 一致:
|
|
49
|
+
* 软删过滤恒为首条);排序白名单映射为**列对象**(asc/desc 包装,禁止字符串拼接;
|
|
50
|
+
* event/timepoint 固定 sql 模板排序 NULL 沉底)。
|
|
47
51
|
*/
|
|
48
52
|
export declare function listEntities(db: Db, query: EntityListQuery): EntityListResult;
|
|
49
|
-
/** 按 id 取实体详情(GET /api/v1/entity/:type/:id);不存在或已软删返回 null
|
|
53
|
+
/** 按 id 取实体详情(GET /api/v1/entity/:type/:id);不存在或已软删返回 null */
|
|
50
54
|
export declare function getEntity(db: Db, id: string): EntityRow | null;
|
|
51
|
-
/** 实体的 Delta 计数(详情响应 deltaCount
|
|
55
|
+
/** 实体的 Delta 计数(详情响应 deltaCount;目标实体软删的 Delta 不可见) */
|
|
52
56
|
export declare function countDeltasForEntity(db: Db, id: string): number;
|
|
53
57
|
/**
|
|
54
|
-
* 创建实体(POST /api/v1/entity/:type
|
|
58
|
+
* 创建实体(POST /api/v1/entity/:type,):
|
|
55
59
|
* id = shared generateEntityId(char-/set-/loc-/hook- 前缀)、created_at/updated_at 应用层 ISO、
|
|
56
60
|
* data 缺省 {}、type 必须 ∈ ENTITY_TYPES(非法抛错——路由层 schema 校验后一般不可达,防御)。
|
|
57
61
|
* @returns 新行(EntityRow,data 已解析)
|
|
@@ -62,9 +66,9 @@ export declare function createEntity(db: Db, input: {
|
|
|
62
66
|
data?: Record<string, unknown>;
|
|
63
67
|
}): EntityRow;
|
|
64
68
|
/**
|
|
65
|
-
* 部分更新实体(PUT /api/v1/entity/:type/:id
|
|
66
|
-
* 仅合并传入字段——name 直接替换;data
|
|
67
|
-
* updated_at
|
|
69
|
+
* 部分更新实体(PUT /api/v1/entity/:type/:id,):
|
|
70
|
+
* 仅合并传入字段——name 直接替换;data **浅合并**(未传字段保留,);
|
|
71
|
+
* updated_at 刷新( 提案快照比对)。软删实体不可更新(getEntity 过滤 → null,路由层 404)。
|
|
68
72
|
* 读后写包 withTransaction(oracle 审核建议 2):better-sqlite3 同步单连接下无竞态(安全),
|
|
69
73
|
* 包事务统一风格(与 softDeleteEntity 一致);返回行在事务内直接构造,无额外复杂度。
|
|
70
74
|
* @returns 更新后的行;实体不存在或已软删返回 null
|
|
@@ -74,12 +78,12 @@ export declare function updateEntity(db: Db, id: string, patch: {
|
|
|
74
78
|
data?: Record<string, unknown>;
|
|
75
79
|
}): EntityRow | null;
|
|
76
80
|
/**
|
|
77
|
-
* 移动时间轴事件(PUT /api/v1/entity/event/:id/move
|
|
81
|
+
* 移动时间轴事件(PUT /api/v1/entity/event/:id/move,,):
|
|
78
82
|
* 事件排序为**全局线性序**(跨所有事件,0-based)——
|
|
79
83
|
* 1. 读出全部未软删 event 行按 sort_order 升序(NULL 沉底,id 作稳定次序)排成数组
|
|
80
84
|
* 2. 目标 id 不存在或已软删 → 返回 null(路由层映射 404 ENTITY_NOT_FOUND)
|
|
81
85
|
* 3. 剔除自身后,order clamp 到 [0, 剩余数](负数→0、超总数→末尾),splice 插入——
|
|
82
|
-
*
|
|
86
|
+
* 与大纲 moveOutlineNode 的数组 splice 语义一致、可验证
|
|
83
87
|
* 4. 重写整个数组的 sort_order 为 0..n-1(事务内逐行 UPDATE),并刷新该行 updated_at
|
|
84
88
|
*
|
|
85
89
|
* 事务:withTransaction 包住读改写(better-sqlite3 同步单连接下无竞态,包事务统一风格,
|
|
@@ -96,14 +100,14 @@ export declare function moveEvent(db: Db, id: string, order: number, updatedAt:
|
|
|
96
100
|
*/
|
|
97
101
|
export declare function listTimepoints(db: Db): EntityRow[];
|
|
98
102
|
/**
|
|
99
|
-
* 移动时间标签点(PUT /api/v1/entity/timepoint/:id/move,G2
|
|
103
|
+
* 移动时间标签点(PUT /api/v1/entity/timepoint/:id/move,G2):
|
|
100
104
|
* 语义与 moveEvent 完全一致(timepoint 全局线性序 0..n-1)——
|
|
101
105
|
* 1. 读出全部未软删 timepoint 按 sort_order 升序(NULL 沉底,id 稳定次序)排成数组
|
|
102
106
|
* 2. 目标 id 不存在或已软删 → 返回 null(路由层映射 404)
|
|
103
107
|
* 3. 剔除自身后 order clamp 到 [0, 剩余数],splice 插入
|
|
104
|
-
* 4. 重写整个数组 sort_order 为 0..n-1,仅被移动行刷新 updated_at
|
|
108
|
+
* 4. 重写整个数组 sort_order 为 0..n-1,仅被移动行刷新 updated_at
|
|
105
109
|
*
|
|
106
|
-
* 注意:拖拽 timepoint
|
|
110
|
+
* 注意:拖拽 timepoint **不改其下事件序**(双独立线性序, G2 修订)——
|
|
107
111
|
* 本函数只碰 timepoint 行,event.sort_order 与 occurs_at 关系均不动。
|
|
108
112
|
* 事务:withTransaction 包住读改写(同 moveEvent,better-sqlite3 同步单连接无竞态)。
|
|
109
113
|
* @returns { moved: true };timepoint 不存在或已软删返回 null
|
|
@@ -112,17 +116,17 @@ export declare function moveTimepoint(db: Db, id: string, order: number, updated
|
|
|
112
116
|
moved: true;
|
|
113
117
|
} | null;
|
|
114
118
|
/**
|
|
115
|
-
* 移动设定(PUT /api/v1/entity/setting/:id/move
|
|
119
|
+
* 移动设定(PUT /api/v1/entity/setting/:id/move,;修订「设定无 sort_order 语义」):
|
|
116
120
|
* **复合写**——改父 + 同级重排一次事务提交(对齐 G2 event move_to 先例):
|
|
117
121
|
* 1. 存在性:目标设定不存在/已软删 → null(路由层映射 404)
|
|
118
|
-
* 2.
|
|
119
|
-
*
|
|
122
|
+
* 2. 防环(与 POST /relation 同级校验):目标父 = 自身 → 自指;
|
|
123
|
+
* 目标父的祖先链含该设定 → 成环——均抛 RelationError SETTING_CYCLE(路由层映射 400)
|
|
120
124
|
* 3. 改父(targetParentId ≠ 当前父)→ 事务内先建新 belongs_to 边(createRelation 校验
|
|
121
|
-
*
|
|
125
|
+
* 父端点存在性 → ENDPOINT_NOT_FOUND)后物理删旧边(先建后删防数据丢失,对齐 EntityDetail)
|
|
122
126
|
* 4. 同级重排:目标组 = 新父的子级组 / 根 = 无父设定组(改父后按新边计算);
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
127
|
+
* 组内按(sort_order NULL 沉底 → sort_order → name → id)排齐,剔除自身后按 order
|
|
128
|
+
* (0-based,缺省 = 组尾)splice 插入,重写组内 sort_order 0..n-1——
|
|
129
|
+
* 仅被移行刷新 updated_at,其余行时间戳不动
|
|
126
130
|
* @returns { moved: true };设定不存在/已软删返回 null
|
|
127
131
|
* @throws RelationError SETTING_CYCLE(自指/成环)/ ENDPOINT_NOT_FOUND(目标父不存在/已软删)
|
|
128
132
|
*/
|
|
@@ -141,7 +145,7 @@ export declare function moveSetting(db: Db, id: string, input: {
|
|
|
141
145
|
*/
|
|
142
146
|
export declare function eventOccursAt(db: Db, eventId: string): RelationRow | null;
|
|
143
147
|
/**
|
|
144
|
-
* occurs_at 1:n 挂载校验(G2
|
|
148
|
+
* occurs_at 1:n 挂载校验(G2,一个事件至多挂一个时间点):
|
|
145
149
|
* 建 occurs_at 前调用——事件已有未软删挂载 → 抛 RelationError(EVENT_ALREADY_MOUNTED,
|
|
146
150
|
* 与现有关系校验风格一致,G2.2 路由层 catch 映射 409)。
|
|
147
151
|
* 未挂载 → 无副作用(void),可继续建关系。
|
|
@@ -149,23 +153,23 @@ export declare function eventOccursAt(db: Db, eventId: string): RelationRow | nu
|
|
|
149
153
|
*/
|
|
150
154
|
export declare function assertEventSingleOccursAt(db: Db, eventId: string): void;
|
|
151
155
|
/**
|
|
152
|
-
* 批量重排时间标签点(G2
|
|
156
|
+
* 批量重排时间标签点(G2,注记:LLM 按时间点 name 语义排序 → 提案确认后执行):
|
|
153
157
|
* 1. 事务内读出当前全部未软删 timepoint id 集合(listTimepoints 同款序)
|
|
154
158
|
* 2. **校验 orderedIds 与当前集合完全相等**(缺/多/重复 → 抛错)——正常由提案 references
|
|
155
|
-
*
|
|
159
|
+
* 快照校验先拦截,此处为防御纵深(LLM 幻觉漏时间点 / 确认前用户已拖拽增删)
|
|
156
160
|
* 3. 按 orderedIds 序重写全部 timepoint sort_order 0..n-1
|
|
157
161
|
* 4. **全部时间点 updated_at 统一刷新为 nowIso**——批量重排是**全量变化**,与
|
|
158
|
-
*
|
|
162
|
+
* moveTimepoint 只刷被移单行区分
|
|
159
163
|
*
|
|
160
164
|
* @returns 重排时间点数(n)
|
|
161
165
|
*/
|
|
162
166
|
export declare function reorderTimepoints(db: Db, orderedIds: string[], nowIsoTimestamp: string): number;
|
|
163
167
|
/**
|
|
164
|
-
* 软删实体(DELETE /api/v1/entity/:type/:id
|
|
168
|
+
* 软删实体(DELETE /api/v1/entity/:type/:id):
|
|
165
169
|
* **级联软删关联关系与 Delta**(单库内事务保证原子性):
|
|
166
|
-
* - relation_records:source_id = id **或** target_id = id
|
|
167
|
-
* - delta_records:target_id = id
|
|
168
|
-
* - 自身:deleted_at 置位 + updated_at
|
|
170
|
+
* - relation_records:source_id = id **或** target_id = id(任一端点软删即不可见)
|
|
171
|
+
* - delta_records:target_id = id(目标实体软删即不可见)
|
|
172
|
+
* - 自身:deleted_at 置位 + updated_at 刷新(软删亦更新版本戳)
|
|
169
173
|
* 幂等:实体已软删(或不存在)→ 返回 null 且无任何副作用(级联 UPDATE 均带 deleted_at IS NULL 过滤)。
|
|
170
174
|
*
|
|
171
175
|
* @returns { relations, deltas } 实际级联行数;实体不存在/已软删返回 null
|
|
@@ -177,28 +181,28 @@ export declare function softDeleteEntity(db: Db, id: string, deletedAt: string):
|
|
|
177
181
|
/** 实体聚合统计结果:总数 + 类型专属分布(稀疏字段,仅出现对应类型的分布) */
|
|
178
182
|
export interface EntitySummaryStats {
|
|
179
183
|
type: EntityType;
|
|
180
|
-
/**
|
|
184
|
+
/** 非软删实体总数(回收站对象不计入) */
|
|
181
185
|
total: number;
|
|
182
186
|
/** character:data.role 分布 */
|
|
183
187
|
byRole?: Record<string, number>;
|
|
184
188
|
/** character / hook:data.status 分布 */
|
|
185
189
|
byStatus?: Record<string, number>;
|
|
186
|
-
/** setting:data.rules
|
|
190
|
+
/** setting:data.rules 标签分布(分类由 tags 承接,数组展平计数) */
|
|
187
191
|
byTags?: Record<string, number>;
|
|
188
192
|
/** location:data.type 分布 */
|
|
189
193
|
byType?: Record<string, number>;
|
|
190
194
|
/** hook:data.payoff_timing 分布 */
|
|
191
195
|
byPayoffTiming?: Record<string, number>;
|
|
192
|
-
/** character:data.abilities 频率(取前 10,防 token
|
|
196
|
+
/** character:data.abilities 频率(取前 10,防 token 爆炸) */
|
|
193
197
|
topAbilities?: {
|
|
194
198
|
ability: string;
|
|
195
199
|
count: number;
|
|
196
200
|
}[];
|
|
197
201
|
}
|
|
198
202
|
/**
|
|
199
|
-
* 实体聚合统计(S6.3 工具 get_entity_summary
|
|
200
|
-
* 指定类型实体的总数 +
|
|
201
|
-
* 分布字段按类型稀疏出现:character→byRole/byStatus/topAbilities、setting→byTags
|
|
203
|
+
* 实体聚合统计(S6.3 工具 get_entity_summary 下沉,「聚合分析」):
|
|
204
|
+
* 指定类型实体的总数 + 类型专属分布。仅统计非软删实体;
|
|
205
|
+
* 分布字段按类型稀疏出现:character→byRole/byStatus/topAbilities、setting→byTags、
|
|
202
206
|
* location→byType、hook→byStatus/byPayoffTiming;缺字段(data 未填)不报错、不计入。
|
|
203
207
|
*/
|
|
204
208
|
export declare function getEntitySummaryStats(db: Db, type: EntityType): EntitySummaryStats;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../src/queries/entity.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../src/queries/entity.ts"],"names":[],"mappings":"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"}
|