@whispering233/ai-editor-server 0.0.21 → 0.0.29
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/client-dist/assets/index-0zEqGbv5.css +1 -0
- package/client-dist/assets/index-DMtHdMMq.js +521 -0
- package/client-dist/index.html +3 -3
- package/dist/backup.d.ts +78 -78
- package/dist/backup.d.ts.map +1 -1
- package/dist/backup.js +138 -139
- package/dist/backup.js.map +1 -1
- package/dist/consistency.d.ts +3 -3
- package/dist/consistency.d.ts.map +1 -1
- package/dist/consistency.js +4 -4
- package/dist/consistency.js.map +1 -1
- package/dist/debug.d.ts +1 -1
- package/dist/debug.js +7 -7
- package/dist/debug.js.map +1 -1
- package/dist/index.d.ts +9 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -37
- package/dist/index.js.map +1 -1
- package/dist/middleware/error.d.ts +4 -4
- package/dist/middleware/error.d.ts.map +1 -1
- package/dist/middleware/error.js +7 -9
- package/dist/middleware/error.js.map +1 -1
- package/dist/middleware/project.d.ts +9 -9
- package/dist/middleware/project.d.ts.map +1 -1
- package/dist/middleware/project.js +23 -23
- package/dist/middleware/project.js.map +1 -1
- package/dist/reference-files.d.ts +12 -12
- package/dist/reference-files.d.ts.map +1 -1
- package/dist/reference-files.js +20 -21
- package/dist/reference-files.js.map +1 -1
- package/dist/routes/chat.d.ts +18 -18
- package/dist/routes/chat.d.ts.map +1 -1
- package/dist/routes/chat.js +70 -83
- package/dist/routes/chat.js.map +1 -1
- package/dist/routes/delta.d.ts.map +1 -1
- package/dist/routes/delta.js +27 -28
- package/dist/routes/delta.js.map +1 -1
- package/dist/routes/entity.d.ts.map +1 -1
- package/dist/routes/entity.js +44 -45
- package/dist/routes/entity.js.map +1 -1
- package/dist/routes/names.d.ts.map +1 -1
- package/dist/routes/names.js +8 -9
- package/dist/routes/names.js.map +1 -1
- package/dist/routes/outline.d.ts +1 -1
- package/dist/routes/outline.d.ts.map +1 -1
- package/dist/routes/outline.js +23 -24
- package/dist/routes/outline.js.map +1 -1
- package/dist/routes/project.d.ts +6 -6
- package/dist/routes/project.d.ts.map +1 -1
- package/dist/routes/project.js +91 -95
- package/dist/routes/project.js.map +1 -1
- package/dist/routes/proposal.d.ts.map +1 -1
- package/dist/routes/proposal.js +40 -42
- package/dist/routes/proposal.js.map +1 -1
- package/dist/routes/reference.d.ts.map +1 -1
- package/dist/routes/reference.js +1 -2
- package/dist/routes/reference.js.map +1 -1
- package/dist/routes/relation.d.ts.map +1 -1
- package/dist/routes/relation.js +14 -15
- package/dist/routes/relation.js.map +1 -1
- package/dist/routes/settings.d.ts +35 -17
- package/dist/routes/settings.d.ts.map +1 -1
- package/dist/routes/settings.js +157 -52
- package/dist/routes/settings.js.map +1 -1
- package/dist/routes/trash.d.ts.map +1 -1
- package/dist/routes/trash.js +15 -16
- package/dist/routes/trash.js.map +1 -1
- package/package.json +7 -7
- package/client-dist/assets/index-B51Kcb1K.css +0 -1
- package/client-dist/assets/index-zgl3whdc.js +0 -104
package/dist/routes/proposal.js
CHANGED
|
@@ -1,24 +1,22 @@
|
|
|
1
1
|
// 提案路由(S7.5):POST /api/v1/proposal/:proposalId/confirm | reject
|
|
2
2
|
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
// 执行失败 → 500 INTERNAL_ERROR(契约未定义该错误码——执行失败属服务端状态异常/数据竞争,
|
|
12
|
-
// 前端按通用错误呈现)
|
|
3
|
+
// 错误映射(对照 错误码):
|
|
4
|
+
// 提案不存在/已过期 → 404 PROPOSAL_NOT_FOUND(store.get 与 peek 均不可见)
|
|
5
|
+
// 提案所属项目 ≠ 当前项目 → 409 PROPOSAL_PROJECT_MISMATCH(get 返回 null 后
|
|
6
|
+
// peek 仍可见 ⇒ 跨项目误操作;防御性——正常流程切换项目时提案已被清空)
|
|
7
|
+
// 快照重校验失败 → 409 PROPOSAL_STALE(引用对象不存在 **或** updated_at 不一致,
|
|
8
|
+
// 任一失败即 STALE;前端提示重新生成提案)
|
|
9
|
+
// 执行失败 → 500 INTERNAL_ERROR(未定义该错误码——执行失败属服务端状态异常/数据竞争,
|
|
10
|
+
// 前端按通用错误呈现)
|
|
13
11
|
//
|
|
14
12
|
// 消费方:defaultProposalStore(@whispering233/ai-editor-agent S7.4 提案仓,与调度同仓消费)+ executeProposal
|
|
15
|
-
//
|
|
13
|
+
// (@whispering233/ai-editor-tools S6.7 执行门面,按 proposal.type 映射执行函数,args 直接消费执行形态)。
|
|
16
14
|
//
|
|
17
|
-
//
|
|
18
|
-
//
|
|
19
|
-
//
|
|
20
|
-
//
|
|
21
|
-
//
|
|
15
|
+
// 提案移除语义(一次性消费,「提案是毫秒级交互对象、无跨会话恢复」落地):
|
|
16
|
+
// confirm/reject 任一动作到达即消费——确认成功、快照过期、执行失败、拒绝均为终态,
|
|
17
|
+
// 处理完立即 remove 出仓。残留只会造成两类问题:① 重复 confirm 同一无引用提案
|
|
18
|
+
// (如 propose_create_entity)会**重复执行**产生重复数据;② 已过期提案反复返回 409 无意义
|
|
19
|
+
// (前端按 PROPOSAL_STALE 引导重新生成,保留不提供任何重试价值)。故失败同样移除。
|
|
22
20
|
import { Hono } from "hono";
|
|
23
21
|
import { defaultProposalStore } from "@whispering233/ai-editor-agent";
|
|
24
22
|
import { executeProposal } from "@whispering233/ai-editor-tools";
|
|
@@ -27,24 +25,24 @@ import { HttpError, ok } from "../middleware/error.js";
|
|
|
27
25
|
import { requireCurrentProject } from "../middleware/project.js";
|
|
28
26
|
/** 提案路由(挂载于 /api/v1/proposal,index.ts) */
|
|
29
27
|
export const proposalRoutes = new Hono();
|
|
30
|
-
/** 快照校验失败统一映射 409 PROPOSAL_STALE
|
|
28
|
+
/** 快照校验失败统一映射 409 PROPOSAL_STALE(存在性 + updated_at 任一失败即 STALE) */
|
|
31
29
|
function throwProposalStale(ref) {
|
|
32
30
|
throw new HttpError(409, "PROPOSAL_STALE", `提案引用对象已变化或不存在: kind=${ref.kind} id=${ref.id}(请重新生成提案)`);
|
|
33
31
|
}
|
|
34
32
|
/**
|
|
35
|
-
*
|
|
36
|
-
* - kind=entity:getEntity 查 entities
|
|
37
|
-
*
|
|
38
|
-
* - kind=relation:getRelation(自身软删 +
|
|
39
|
-
*
|
|
33
|
+
* 单条引用快照重校验:
|
|
34
|
+
* - kind=entity:getEntity 查 entities(已过滤软删)——不存在/软删 → null → STALE;
|
|
35
|
+
* 存在则比对实体自身 updated_at(软删/还原亦刷新版本戳,,语义统一)
|
|
36
|
+
* - kind=relation:getRelation(自身软删 + 端点软删联动过滤)——不可见 → STALE;
|
|
37
|
+
* 存在则比对关系自身 updated_at
|
|
40
38
|
* - kind=delta:getDeltaRow(记录级:自身软删视为不存在)——不存在 → STALE;比对自身 updated_at
|
|
41
39
|
* - kind=outline_node:findOutlineNode 查**调用方预读的树**(S2:references 含多条 outline_node
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* - default(防静默,oracle S1):未知 kind 属上层调度/构造 bug
|
|
45
|
-
*
|
|
40
|
+
* 时不重复读文件;校验前同步读树一次,无间隙)——节点不存在或软删→ STALE;
|
|
41
|
+
* 存在则比对**节点级** updated_at
|
|
42
|
+
* - default(防静默,oracle S1):未知 kind 属上层调度/构造 bug( 仅 4 类引用),
|
|
43
|
+
* 跳过校验直接放行会让提案绕过快照重校验,按内部错误显式拒绝
|
|
46
44
|
* 三种 DB 引用不查大纲可见性联动(getRelation 例外——其 API 内置端点过滤):
|
|
47
|
-
* 提案引用的是记录本身,「存在性 + 自身 updated_at
|
|
45
|
+
* 提案引用的是记录本身,「存在性 + 自身 updated_at」即 字面语义。
|
|
48
46
|
*/
|
|
49
47
|
function assertReferenceFresh(project, tree, ref) {
|
|
50
48
|
switch (ref.kind) {
|
|
@@ -82,11 +80,11 @@ function assertReferenceFresh(project, tree, ref) {
|
|
|
82
80
|
}
|
|
83
81
|
}
|
|
84
82
|
/**
|
|
85
|
-
* 取当前项目提案(confirm/reject
|
|
83
|
+
* 取当前项目提案(confirm/reject 共用,项目绑定):
|
|
86
84
|
* store.get(id, projectId) 校验项目归属;返回 null 时 peek 区分两种不可见——
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
* 注意 peek
|
|
85
|
+
* peek 可见 ⇒ 提案属于其他项目 → 409 PROPOSAL_PROJECT_MISMATCH(不误报 404);
|
|
86
|
+
* peek 不可见 ⇒ 不存在或已过期 → 404 PROPOSAL_NOT_FOUND。
|
|
87
|
+
* 注意 peek 走仓内惰性过期清理( TTL),超期条目同样归入 404。
|
|
90
88
|
*/
|
|
91
89
|
function resolveProposal(proposalId, projectId) {
|
|
92
90
|
const proposal = defaultProposalStore.get(proposalId, projectId);
|
|
@@ -97,19 +95,19 @@ function resolveProposal(proposalId, projectId) {
|
|
|
97
95
|
}
|
|
98
96
|
throw new HttpError(404, "PROPOSAL_NOT_FOUND", `提案不存在或已过期: ${proposalId}`);
|
|
99
97
|
}
|
|
100
|
-
// POST /api/v1/proposal/:proposalId/confirm ——
|
|
98
|
+
// POST /api/v1/proposal/:proposalId/confirm —— 用户确认提案()
|
|
101
99
|
// 流程:项目归属解析(404/409)→ 快照逐条重校验(409 PROPOSAL_STALE)→
|
|
102
|
-
//
|
|
103
|
-
//
|
|
100
|
+
// executeProposal({ db, outlineDir: project.root, projectId }, proposal) →
|
|
101
|
+
// 200 { confirmed: true, result }(ok 包裹,result 为执行结果如新创建的 entity id)。
|
|
104
102
|
// 提案移除在 finally 中(一次性消费,见文件头注释):校验通过 / 快照过期 / 执行失败均为终态,
|
|
105
|
-
//
|
|
106
|
-
//
|
|
107
|
-
//
|
|
103
|
+
// 确认动作即消费;404/409 MISMATCH 由 resolveProposal 在 try 之前抛出,不进入本块
|
|
104
|
+
// (跨项目提案不消费)。executeProposal 为同步调用(withTransaction 包复合写),
|
|
105
|
+
// 单线程下「执行后移除」与「执行前移除」无竞态差异。
|
|
108
106
|
proposalRoutes.post("/:proposalId/confirm", (c) => {
|
|
109
107
|
const project = requireCurrentProject();
|
|
110
108
|
const proposal = resolveProposal(c.req.param("proposalId"), project.config.id);
|
|
111
109
|
try {
|
|
112
|
-
//
|
|
110
|
+
// 快照重校验(存在性 + updated_at 比对,任一失败 409 PROPOSAL_STALE);
|
|
113
111
|
// 树在校验前读一次(S2:多条 outline_node 引用不重复读文件,同步读取无间隙)
|
|
114
112
|
const tree = readOutlineFile(project.root);
|
|
115
113
|
for (const ref of proposal.references) {
|
|
@@ -120,20 +118,20 @@ proposalRoutes.post("/:proposalId/confirm", (c) => {
|
|
|
120
118
|
result = executeProposal({ db: project.db, outlineDir: project.root, projectId: project.config.id }, proposal);
|
|
121
119
|
}
|
|
122
120
|
catch (err) {
|
|
123
|
-
//
|
|
121
|
+
// 执行失败(幂等冲突/数据竞争/防御校验抛错):未定义该错误码,按 500 内部错误呈现;
|
|
124
122
|
// 前端按通用错误引导重新生成,不保留重试(重试仍会失败)
|
|
125
123
|
throw new HttpError(500, "INTERNAL_ERROR", err instanceof Error ? err.message : "提案执行失败");
|
|
126
124
|
}
|
|
127
125
|
return c.json(ok({ confirmed: true, result }));
|
|
128
126
|
}
|
|
129
127
|
finally {
|
|
130
|
-
//
|
|
128
|
+
// 一次性消费( 瞬态交互对象):终态即移除——残留只会让重复 confirm
|
|
131
129
|
// 对无引用提案(propose_create_entity)产生重复执行,或对过期提案反复返回 409
|
|
132
130
|
defaultProposalStore.remove(proposal.proposal_id);
|
|
133
131
|
}
|
|
134
132
|
});
|
|
135
|
-
// POST /api/v1/proposal/:proposalId/reject ——
|
|
136
|
-
// 项目归属校验与 confirm
|
|
133
|
+
// POST /api/v1/proposal/:proposalId/reject —— 用户拒绝提案()
|
|
134
|
+
// 项目归属校验与 confirm 同语义(原文「confirm/reject 时校验与当前项目一致」——
|
|
137
135
|
// 拒绝同样是不可逆消费动作,跨项目拒绝会误伤他项目待确认提案,故 404/409 MISMATCH 同 confirm)。
|
|
138
136
|
// 校验通过 → 移除(拒绝即消费)→ 200 { rejected: true }。
|
|
139
137
|
proposalRoutes.post("/:proposalId/reject", (c) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proposal.js","sourceRoot":"","sources":["../../src/routes/proposal.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"proposal.js","sourceRoot":"","sources":["../../src/routes/proposal.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../../src/routes/reference.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../../src/routes/reference.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAK5B,6CAA6C;AAC7C,eAAO,MAAM,eAAe,4EAAa,CAAC"}
|
package/dist/routes/reference.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
//
|
|
1
|
+
// 参考资料专属路由(批次十一):扫描重建索引端点
|
|
2
2
|
//
|
|
3
|
-
// 契约来源:doc/api/endpoints.md「POST /api/v1/reference/scan」、决策 43(文件 = 真相源,
|
|
4
3
|
// DB 索引 = 派生镜像;mtime 快照比对幂等全量)。实体 CRUD 走泛型 /api/v1/entity/reference
|
|
5
4
|
// (文件联动在 routes/entity.ts + routes/trash.ts 内部完成),本路由只承载参考资料专属端点。
|
|
6
5
|
import { Hono } from "hono";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference.js","sourceRoot":"","sources":["../../src/routes/reference.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"reference.js","sourceRoot":"","sources":["../../src/routes/reference.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,EAAE;AACF,oEAAoE;AACpE,kEAAkE;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,2BAA2B,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEpF,6CAA6C;AAC7C,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,IAAI,EAAE,CAAC;AAE1C,qDAAqD;AACrD,4EAA4E;AAC5E,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;IAClC,MAAM,OAAO,GAAG,qBAAqB,EAAE,CAAC;IACxC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC,CAAC,CAAC;AAEH,sEAAsE;AACtE,6CAA6C;AAC7C,eAAe,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE;IACxC,MAAM,OAAO,GAAG,qBAAqB,EAAE,CAAC;IACxC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,2BAA2B,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACzF,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relation.d.ts","sourceRoot":"","sources":["../../src/routes/relation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"relation.d.ts","sourceRoot":"","sources":["../../src/routes/relation.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAoB5B,0CAA0C;AAC1C,eAAO,MAAM,cAAc,4EAAa,CAAC;AA2HzC,2CAA2C;AAC3C,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CAcpD"}
|
package/dist/routes/relation.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
// 关系路由(S3.4):GET / 查询(k 跳遍历)、POST / 创建(判重)、DELETE /:id 物理删
|
|
2
2
|
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
// DELETE 0 影响行 → 404 RELATION_NOT_FOUND
|
|
3
|
+
// (可见性联动端点状态;手动删关系 = 物理删)。
|
|
4
|
+
// 错误映射(db RelationError → HttpError,对照 错误码):
|
|
5
|
+
// RELATION_EXISTS → 409 RELATION_EXISTS(同三元组已存在,)
|
|
6
|
+
// EVENT_ALREADY_MOUNTED → 409 EVENT_ALREADY_MOUNTED(occurs_at 1:n 重复挂载,G2)
|
|
7
|
+
// ENDPOINT_NOT_FOUND → 400 VALIDATION_ERROR(端点不存在/软删是参数问题)
|
|
8
|
+
// INVALID_RELATION_TYPE → 400 VALIDATION_ERROR(白名单外——schema 层 enum 已拦截,防御分支)
|
|
9
|
+
// DELETE 0 影响行 → 404 RELATION_NOT_FOUND
|
|
11
10
|
import { Hono } from "hono";
|
|
12
11
|
import { assertEventSingleOccursAt, createRelation, deleteRelation, eventOccursAt, listRelations, nowIso, RelationError, updateRelationMetadata, wouldCreateSettingCycle, } from "@whispering233/ai-editor-db";
|
|
13
12
|
import { relationCreateReqSchema, relationQuerySchema, relationUpdateMetaReqSchema, } from "@whispering233/ai-editor-shared/schemas";
|
|
@@ -39,7 +38,7 @@ relationRoutes.post("/", async (c) => {
|
|
|
39
38
|
const { source_type, source_id, target_type, target_id, relation_type, metadata } = parsed.data;
|
|
40
39
|
let row;
|
|
41
40
|
try {
|
|
42
|
-
// occurs_at 1:n 挂载校验(G2
|
|
41
|
+
// occurs_at 1:n 挂载校验(G2,一个事件至多挂一个时间点)。
|
|
43
42
|
// **判重先行语义**:同三元组重复(事件已挂载同一时间点)→ 由 createRelation 判重返回
|
|
44
43
|
// RELATION_EXISTS(与泛型创建语义一致);事件已挂载**其他**时间点 → 1:n 约束拦截
|
|
45
44
|
// (assertEventSingleOccursAt 抛 EVENT_ALREADY_MOUNTED → 409,跨组改挂载请走 move_to 复合端点)
|
|
@@ -49,7 +48,7 @@ relationRoutes.post("/", async (c) => {
|
|
|
49
48
|
assertEventSingleOccursAt(project.db, target_id); // 已挂载其他时间点 → 抛 EVENT_ALREADY_MOUNTED
|
|
50
49
|
}
|
|
51
50
|
}
|
|
52
|
-
//
|
|
51
|
+
// 设定层级校验(2026-08):belongs_to 且两端均为 setting(子 → 父)——
|
|
53
52
|
// 禁自指 + 防环(新父的祖先链不得含该子设定)。其余 belongs_to(人物→设定)不受影响。
|
|
54
53
|
if (relation_type === "belongs_to" && source_type === "setting" && target_type === "setting") {
|
|
55
54
|
if (source_id === target_id) {
|
|
@@ -82,7 +81,7 @@ relationRoutes.post("/", async (c) => {
|
|
|
82
81
|
},
|
|
83
82
|
}), 201);
|
|
84
83
|
});
|
|
85
|
-
// DELETE /api/v1/relation/:id ——
|
|
84
|
+
// DELETE /api/v1/relation/:id —— 物理删除(不进回收站)
|
|
86
85
|
relationRoutes.delete("/:id", (c) => {
|
|
87
86
|
const project = requireCurrentProject();
|
|
88
87
|
const id = c.req.param("id");
|
|
@@ -92,10 +91,10 @@ relationRoutes.delete("/:id", (c) => {
|
|
|
92
91
|
}
|
|
93
92
|
return c.json(ok({ deleted: true }));
|
|
94
93
|
});
|
|
95
|
-
// PUT /api/v1/relation/:id ——
|
|
94
|
+
// PUT /api/v1/relation/:id —— 更新关系元数据(「PUT /relation/:id」:
|
|
96
95
|
// metadata 整体替换(非浅合并),清空传 {};三元组不可变——要改连接请删后重建。
|
|
97
|
-
// 404
|
|
98
|
-
// label 首尾 trim
|
|
96
|
+
// 404 语义:不存在或已软删(软删关系不可编辑);db 层 null → 404。
|
|
97
|
+
// label 首尾 trim(与 POST 创建侧对称;trim 后为空串 → 删除该键,等价清空)
|
|
99
98
|
relationRoutes.put("/:id", async (c) => {
|
|
100
99
|
const project = requireCurrentProject();
|
|
101
100
|
const id = c.req.param("id");
|
|
@@ -129,7 +128,7 @@ export function mapRelationError(err) {
|
|
|
129
128
|
case "RELATION_EXISTS":
|
|
130
129
|
throw new HttpError(409, "RELATION_EXISTS", err.message);
|
|
131
130
|
case "EVENT_ALREADY_MOUNTED":
|
|
132
|
-
// occurs_at 1:n 重复挂载(G2
|
|
131
|
+
// occurs_at 1:n 重复挂载(G2)——409,与 RELATION_EXISTS 同冲突语义
|
|
133
132
|
throw new HttpError(409, "EVENT_ALREADY_MOUNTED", err.message);
|
|
134
133
|
case "ENDPOINT_NOT_FOUND":
|
|
135
134
|
case "INVALID_RELATION_TYPE":
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relation.js","sourceRoot":"","sources":["../../src/routes/relation.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"relation.js","sourceRoot":"","sources":["../../src/routes/relation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,39 +1,57 @@
|
|
|
1
1
|
import { Hono } from "hono";
|
|
2
2
|
import type { UserConfigFile } from "@whispering233/ai-editor-shared";
|
|
3
3
|
import { type ThinkingLevel } from "@whispering233/ai-editor-shared/schemas";
|
|
4
|
-
/** 默认模型名(
|
|
4
|
+
/** 默认模型名( settings 端点;两 provider 目录均含该模型——兜底/初始态稳定) */
|
|
5
5
|
export declare const DEFAULT_MODEL = "deepseek-v4-flash";
|
|
6
|
-
/**
|
|
6
|
+
/** 环境变量(各 provider 解析链第 ① 级;测试经 process.env 注入) */
|
|
7
7
|
export declare const DEEPSEEK_API_KEY_ENV = "DEEPSEEK_API_KEY";
|
|
8
|
-
|
|
8
|
+
export declare const OPENCODE_API_KEY_ENV = "OPENCODE_API_KEY";
|
|
9
|
+
/** 用户级配置文件相对 HOME 的路径(不入项目文件) */
|
|
9
10
|
export declare const USER_CONFIG_RELATIVE_PATH: string;
|
|
11
|
+
/** pi-agent 凭据文件相对 HOME 的路径(只读兜底;opencode-go 订阅 key 通常在此) */
|
|
12
|
+
export declare const PI_AGENT_AUTH_RELATIVE_PATH: string;
|
|
10
13
|
/** 缺省思考强度(与 SharedConfig 缺省一致,读侧兜底) */
|
|
11
14
|
export declare const DEFAULT_THINKING_LEVEL: ThinkingLevel;
|
|
12
15
|
/** 用户级配置文件绝对路径(os.homedir() 读 $HOME,测试设 HOME 即可隔离) */
|
|
13
16
|
export declare function userConfigPath(): string;
|
|
17
|
+
/** pi-agent auth.json 绝对路径(只读;测试设 HOME 即可隔离) */
|
|
18
|
+
export declare function piAgentAuthPath(): string;
|
|
14
19
|
/**
|
|
15
20
|
* 读取用户级配置;文件不存在 / JSON 损坏 / schema 不合法 → 返回空配置(默认值语义,不抛错)。
|
|
16
|
-
*
|
|
17
|
-
* 未来版本追加字段不使整份配置失效);v0
|
|
18
|
-
*
|
|
21
|
+
* schema 正式化(shared userConfigFileSchema,非 strict 宽松读取——用户自有文件,
|
|
22
|
+
* 未来版本追加字段不使整份配置失效);v0/v1 旧格式与 v2 同读侧兼容,不迁移不写回
|
|
23
|
+
* (用户下次在设置页保存时自然落新格式)。
|
|
19
24
|
*/
|
|
20
25
|
export declare function getUserConfig(): UserConfigFile;
|
|
26
|
+
/** 激活 provider:config.provider 已注册才采用;否则缺省 deepseek(配置漂移兜底) */
|
|
27
|
+
export declare function effectiveProvider(): string;
|
|
28
|
+
/** provider 展示名(错误文案/调试用);未知 provider → 原 id */
|
|
29
|
+
export declare function providerDisplayName(provider: string): string;
|
|
30
|
+
/** provider 环境变量名(错误文案用) */
|
|
31
|
+
export declare function providerEnvVar(provider: string): string | undefined;
|
|
21
32
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* 原子写:复用 @whispering233/ai-editor-db 的 writeJsonAtomic(决策 11 精神完整版:临时文件 wx 独占 +
|
|
25
|
-
* 文件 fsync + rename + 目录 fsync)。目标在 $HOME/.ai-editor/ 下,目录 fsync 在部分
|
|
26
|
-
* 平台/文件系统受限时由 db 实现静默忽略(主链路已保证文件内容完整)
|
|
33
|
+
* 计算某 provider 的有效 key 与掩码:环境变量 > config.json > pi-agent auth.json(只读兜底)
|
|
34
|
+
* 三级都无 → null(apiKeySet=false,无掩码)。缺省 provider = deepseek(旧单 provider 语义)。
|
|
27
35
|
*/
|
|
28
|
-
export declare function
|
|
29
|
-
/**
|
|
30
|
-
* 计算有效 key 与掩码:环境变量 > config.json(决策 17 来源优先级)
|
|
31
|
-
* 两者都没有 → null(apiKeySet=false,无掩码)
|
|
32
|
-
*/
|
|
33
|
-
export declare function effectiveApiKey(): {
|
|
36
|
+
export declare function effectiveApiKey(provider?: string): {
|
|
34
37
|
key: string | null;
|
|
35
38
|
masked: string | undefined;
|
|
36
39
|
};
|
|
40
|
+
/**
|
|
41
|
+
* 写入用户级配置(v2 合并语义:显式 undefined 字段不覆盖已有值)。
|
|
42
|
+
* - provider/model/thinking_level 顶层覆盖
|
|
43
|
+
* - api_keys 按键合并:提供即覆盖,空字符串 = 删除该键(清空 map 时整个字段移除)
|
|
44
|
+
* - 落盘 schema_version=2;v1 旧 api_key 字段保留不迁移(读侧兼容已覆盖)
|
|
45
|
+
* 原子写:复用 @whispering233/ai-editor-db 的 writeJsonAtomic(临时文件 wx 独占 +
|
|
46
|
+
* 文件 fsync + rename + 目录 fsync)。目标在 $HOME/.ai-editor/ 下,目录 fsync 在部分
|
|
47
|
+
* 平台/文件系统受限时由 db 实现静默忽略(主链路已保证文件内容完整)
|
|
48
|
+
*/
|
|
49
|
+
export declare function saveUserConfig(partial: {
|
|
50
|
+
provider?: string;
|
|
51
|
+
model?: string;
|
|
52
|
+
thinking_level?: ThinkingLevel;
|
|
53
|
+
api_keys?: Record<string, string>;
|
|
54
|
+
}): UserConfigFile;
|
|
37
55
|
/** 设置路由(挂载于 /api/v1/settings) */
|
|
38
56
|
export declare const settingsRoutes: Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
|
|
39
57
|
//# sourceMappingURL=settings.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/routes/settings.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/routes/settings.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,yCAAyC,CAAC;AAIjD,uDAAuD;AACvD,eAAO,MAAM,aAAa,sBAAsB,CAAC;AAEjD,mDAAmD;AACnD,eAAO,MAAM,oBAAoB,qBAAqB,CAAC;AACvD,eAAO,MAAM,oBAAoB,qBAAqB,CAAC;AAQvD,iCAAiC;AACjC,eAAO,MAAM,yBAAyB,QAAoC,CAAC;AAE3E,6DAA6D;AAC7D,eAAO,MAAM,2BAA2B,QAAoC,CAAC;AAE7E,uCAAuC;AACvC,eAAO,MAAM,sBAAsB,EAAE,aAAsB,CAAC;AAE5D,sDAAsD;AACtD,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,gDAAgD;AAChD,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,IAAI,cAAc,CAQ9C;AAED,+DAA+D;AAC/D,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C;AAyBD,gDAAgD;AAChD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,4BAA4B;AAC5B,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEnE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,GAAE,MAAyB,GAAG;IAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAMvH;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC,GAAG,cAAc,CAoBjB;AAED,iCAAiC;AACjC,eAAO,MAAM,cAAc,4EAAa,CAAC"}
|