@c956180462/awbs 0.0.1

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 (50) hide show
  1. package/AWBS_CORE_DESIGN.md +983 -0
  2. package/AWBS_CURRENT_FEATURES.md +463 -0
  3. package/LICENSE +21 -0
  4. package/README.md +265 -0
  5. package/TASK_001_VIEW_AUTHORITY.md +446 -0
  6. package/TASK_003_AUTHORITY_LEDGER_AND_DB_AUDIT.md +268 -0
  7. package/TASK_004_TRUSTED_AUTHORITY_LAYER.md +547 -0
  8. package/TASK_005_AUTHORITY_SESSION.md +218 -0
  9. package/TASK_006_TRUST_BOUNDARY_HARDENING.md +381 -0
  10. package/TASK_007_TRUSTED_OPERATION_ENTRY.md +129 -0
  11. package/bin/awbs.js +2 -0
  12. package/docs/DEVELOPMENT_LEARNING.md +319 -0
  13. package/docs/FULL_CHAIN.md +295 -0
  14. package/docs/PRODUCT.md +188 -0
  15. package/docs/USAGE.md +294 -0
  16. package/package.json +45 -0
  17. package/src/adapters/file-summary-store.ts +88 -0
  18. package/src/adapters/git-cli.ts +107 -0
  19. package/src/adapters/local-authority-session.ts +606 -0
  20. package/src/adapters/local-file-database.ts +199 -0
  21. package/src/adapters/sealed-authority.ts +725 -0
  22. package/src/adapters/session-authority-client.ts +176 -0
  23. package/src/adapters/sqlite-index-store.ts +176 -0
  24. package/src/cli.ts +491 -0
  25. package/src/domain/authority-types.ts +194 -0
  26. package/src/domain/constants.ts +11 -0
  27. package/src/domain/errors.ts +6 -0
  28. package/src/domain/hash.ts +27 -0
  29. package/src/domain/path-policy.ts +36 -0
  30. package/src/domain/paths.ts +65 -0
  31. package/src/domain/session-proof.ts +140 -0
  32. package/src/domain/session-types.ts +101 -0
  33. package/src/domain/types.ts +94 -0
  34. package/src/ports/authority-session.ts +8 -0
  35. package/src/ports/authority.ts +26 -0
  36. package/src/ports/file-database.ts +18 -0
  37. package/src/ports/git.ts +23 -0
  38. package/src/ports/index-store.ts +7 -0
  39. package/src/ports/summary-store.ts +16 -0
  40. package/src/runtime.ts +56 -0
  41. package/src/session-entry.ts +1 -0
  42. package/src/usecases/authority.ts +53 -0
  43. package/src/usecases/changeset.ts +437 -0
  44. package/src/usecases/db.ts +192 -0
  45. package/src/usecases/index.ts +136 -0
  46. package/src/usecases/init.ts +48 -0
  47. package/src/usecases/ledger.ts +146 -0
  48. package/src/usecases/session.ts +48 -0
  49. package/src/usecases/trusted-chain.ts +56 -0
  50. package/src/usecases/view.ts +166 -0
@@ -0,0 +1,463 @@
1
+ # AWBS 当前系统特性总览
2
+
3
+ 本文档记录 AWBS 当前已经具备的系统能力。它描述的是当前代码已经实现并由测试覆盖的能力,不把未来设想当成已完成特性。
4
+
5
+ 当前版本可以理解为:
6
+
7
+ ```text
8
+ v0/001/002/003/005/006/007 CLI prototype
9
+ ```
10
+
11
+ AWBS 当前不是沙箱系统,也不是传统 SQL 数据库。它是一个基于标准文件系统、Git、SQLite 索引、工作空间视图、changeset 和可信事实层的 agent 工作流文件系统数据库底座。
12
+
13
+ ## 1. 系统定位
14
+
15
+ AWBS 当前提供的是一套面向 agent 工作流的文件系统数据库能力:
16
+
17
+ - 用普通目录和文件保存业务事实。
18
+ - 用 Git 保存版本历史、文件差异和提交记录。
19
+ - 用 SQLite + FTS5 保存可重建索引。
20
+ - 用 copy-based workspace view 给 agent 提供独立工作目录。
21
+ - 用 changeset 表达一次工作对数据库提出的变更。
22
+ - 用 sealed authority contract 记录 view 的权限事实。
23
+ - 用 trusted chain 决定 AWBS 承认哪一个 Git tree 是认证数据库。
24
+ - 用 authority session 在运行期托管本地 key,并要求可信写入由 host controller 授权。
25
+
26
+ AWBS 不负责规定业务目录如何设计。业务文件怎么组织、产物写在哪里、摘要怎么生成,都由上层应用决定。
27
+
28
+ ## 2. 初始化与项目结构
29
+
30
+ 当前 `awbs init` 已实现:
31
+
32
+ - 如果当前目录不是 Git repo,自动执行 `git init`。
33
+ - 创建 `.awbs/` 基础结构。
34
+ - 创建 `.awbs/config.json`。
35
+ - 初始化 authority 材料。
36
+ - 创建 `.awbs/.gitignore`,忽略可重建或私有运行材料。
37
+
38
+ 典型 `.awbs/` 结构:
39
+
40
+ ```text
41
+ .awbs/
42
+ authority/
43
+ repo.json
44
+ catalog.seal.json
45
+ catalog.mirror.json
46
+ ledger.seal.json
47
+ ledger.mirror.json
48
+ view-events.jsonl
49
+ ledger-events.jsonl
50
+ views/<viewId>/
51
+ contract.seal.json
52
+ mirror.json
53
+ receipt.json
54
+ changesets/
55
+ index/
56
+ files.sqlite
57
+ private/
58
+ local.json
59
+ session.json
60
+ recovery.seal.json
61
+ summaries/
62
+ files.jsonl
63
+ views/
64
+ config.json
65
+ ```
66
+
67
+ 其中:
68
+
69
+ - `.awbs/authority/` 保存 AWBS 可信事实层材料。
70
+ - `.awbs/private/` 保存本机私有材料,继续被 Git 忽略。
71
+ - `.awbs/index/` 是可重建索引。
72
+ - `.awbs/views/` 和 `.awbs/changesets/` 是运行材料。
73
+ - `.awbs/summaries/files.jsonl` 是上层业务可写的摘要事实文件。
74
+
75
+ ## 3. 磁盘 SQLite 索引
76
+
77
+ 当前索引层已经从 JSONL 默认持久层升级为磁盘 SQLite:
78
+
79
+ ```text
80
+ .awbs/index/files.sqlite
81
+ ```
82
+
83
+ 已实现能力:
84
+
85
+ - `awbs index rebuild` 从当前 AWBS trusted commit 对应的 Git tree 重建索引。
86
+ - `awbs index query` 查询持久 SQLite,不把全量 JSONL 加载进内存。
87
+ - 使用 FTS5 查询 path 和 summary。
88
+ - 没有搜索词时按 status 查询。
89
+ - 搜索特殊字符时保留 LIKE fallback,避免 FTS 查询失败导致命令崩溃。
90
+ - 文件删除后,旧索引记录保留为 `removed`。
91
+
92
+ 索引条目保留原有 `IndexEntry` 结构,主要包含:
93
+
94
+ ```json
95
+ {
96
+ "path": "B/draft.md",
97
+ "kind": "file",
98
+ "sha256": "...",
99
+ "size": 123,
100
+ "mtime": "2026-05-22T00:00:00.000Z",
101
+ "commit": "git commit",
102
+ "status": "active",
103
+ "summary": "external or fallback summary",
104
+ "summarySource": "external | path-level | fallback",
105
+ "json": {}
106
+ }
107
+ ```
108
+
109
+ 索引不是事实源,可以删除和重建。
110
+
111
+ ## 4. 摘要接口
112
+
113
+ AWBS 当前提供摘要读写接口:
114
+
115
+ ```text
116
+ awbs summary set <path> (--text <summary> | --file <file>)
117
+ awbs summary get <path> [--json]
118
+ awbs summary list [--json]
119
+ ```
120
+
121
+ 已实现能力:
122
+
123
+ - 摘要写入 `.awbs/summaries/files.jsonl`。
124
+ - `index rebuild` 会优先使用外部摘要。
125
+ - 摘要可以被 FTS5 查询命中。
126
+
127
+ 硬边界:
128
+
129
+ - AWBS 永远不内置 AI 摘要模型。
130
+ - AWBS 不保存 AI API key。
131
+ - AWBS 不配置摘要模型、提示词或 provider。
132
+ - 摘要由上层业务、外部工具或人类生成后写入。
133
+
134
+ ## 5. 工作空间视图
135
+
136
+ 当前 view 采用 copy-based materialization:
137
+
138
+ ```text
139
+ awbs view create --out <workspace> [--read A] [--write B] --control-token-stdin
140
+ ```
141
+
142
+ 已实现能力:
143
+
144
+ - 从 AWBS trusted commit 对应的 Git tree 复制文件,不读取污染工作区。
145
+ - 保持原目录结构,不做路径重命名。
146
+ - 每个 view 有唯一 UUID。
147
+ - 创建 workspace 的 `.awbs-view.json`。
148
+ - 保存 baseline 到 `.awbs/views/<viewId>/baseline/`。
149
+ - 在 `.awbs/authority/views/<viewId>/contract.seal.json` 中写入 sealed view contract。
150
+ - `view inspect` 可以查看 view 契约和状态。
151
+ - `view revoke` 可以撤销 view。
152
+
153
+ view contract 主要包含:
154
+
155
+ ```json
156
+ {
157
+ "schemaVersion": 1,
158
+ "viewId": "uuid",
159
+ "baseCommit": "trusted commit",
160
+ "createdAt": "iso time",
161
+ "readPaths": ["A"],
162
+ "writePaths": ["B"],
163
+ "sources": [],
164
+ "ext": {
165
+ "workspacePath": "..."
166
+ }
167
+ }
168
+ ```
169
+
170
+ 权限事实源不是 workspace 里的 `.awbs-view.json`,而是 sealed authority contract。
171
+
172
+ ## 6. Changeset 变更包
173
+
174
+ 当前 changeset 能表达工作空间和 baseline 之间的文件变化:
175
+
176
+ ```text
177
+ awbs changeset collect --workspace <workspace>
178
+ awbs changeset inspect <changesetDir|id> [--json]
179
+ awbs changeset apply <changesetDir|id> --control-token-stdin
180
+ ```
181
+
182
+ 已实现能力:
183
+
184
+ - 比较 `.awbs/views/<viewId>/baseline/` 和 workspace 当前内容。
185
+ - 生成 `.awbs/changesets/<changesetId>/`。
186
+ - 写入 `manifest.json`。
187
+ - 写入 `diff.patch`。
188
+ - 对新增/修改文件保存 payload 到 `files/`。
189
+ - 标记 add / modify / delete。
190
+ - 根据 sealed contract 的 `writePaths` 判断是否允许写入。
191
+ - 修改只读路径时,changeset 仍生成,但 status 为 `invalid`。
192
+ - invalid changeset 永远不能 apply。
193
+ - stale view 不能 apply。
194
+ - v0 当前只支持 `same-path` 写回语义。
195
+
196
+ changeset manifest 主要包含:
197
+
198
+ ```json
199
+ {
200
+ "schemaVersion": 1,
201
+ "changesetId": "uuid",
202
+ "viewId": "uuid",
203
+ "baseCommit": "trusted commit",
204
+ "projectRoot": "...",
205
+ "workspacePath": "...",
206
+ "status": "valid",
207
+ "readPaths": ["A"],
208
+ "writePaths": ["B"],
209
+ "changes": [],
210
+ "violations": [],
211
+ "summary": {
212
+ "added": 0,
213
+ "modified": 1,
214
+ "deleted": 0,
215
+ "violations": 0
216
+ }
217
+ }
218
+ ```
219
+
220
+ ## 7. View Authority
221
+
222
+ 001 已实现 view authority:
223
+
224
+ - `.awbs/authority/repo.json` 保存公开仓库 authority 参数。
225
+ - `.awbs/authority/catalog.seal.json` 是 sealed 鉴权目录总账。
226
+ - `.awbs/authority/catalog.mirror.json` 是给人看的明文镜像,可自动重建。
227
+ - 每个 view 有 sealed contract。
228
+ - 每个 view 有 mirror 和 receipt。
229
+ - view 只允许创建和撤销,不提供普通修改。
230
+ - mirror 被改后可以从 seal 修复。
231
+ - sealed contract 被改后会导致解封失败,collect/apply 拒绝。
232
+ - revoked view 的新 collect/apply 会拒绝。
233
+
234
+ 已实现命令:
235
+
236
+ ```text
237
+ awbs view inspect <viewId> [--json]
238
+ awbs view revoke <viewId> --control-token-stdin
239
+ awbs authority verify [--json]
240
+ awbs authority repair-mirrors [--json]
241
+ ```
242
+
243
+ ## 8. Trusted Chain 可信数据链
244
+
245
+ 003 已实现 AWBS trusted chain:
246
+
247
+ - AWBS 认证数据库不是普通 Git `HEAD`。
248
+ - AWBS 认证数据库也不是当前工作区文件。
249
+ - AWBS 认证数据库等于 `refs/awbs/trusted` 指向的 Git tree。
250
+ - sealed ledger 记录 AWBS 承认的可信状态推进。
251
+
252
+ 已实现材料:
253
+
254
+ ```text
255
+ .awbs/authority/ledger.seal.json
256
+ .awbs/authority/ledger.mirror.json
257
+ .awbs/authority/ledger-events.jsonl
258
+ refs/awbs/trusted
259
+ ```
260
+
261
+ 已实现命令:
262
+
263
+ ```text
264
+ awbs ledger bootstrap --control-token-stdin
265
+ awbs ledger inspect [--json]
266
+ awbs ledger verify [--json]
267
+ ```
268
+
269
+ 可信链规则:
270
+
271
+ ```text
272
+ trustedCommit(Tn)
273
+ -> view projection 基于 Tn
274
+ -> changeset 声明基于 Tn
275
+ -> apply 只接受基于 Tn 的 valid changeset
276
+ -> 生成 trustedCommit(Tn+1)
277
+ ```
278
+
279
+ 外部 Git commit 可以存在,但不会自动进入 AWBS 认证数据库。
280
+
281
+ ## 9. 数据库审计与可信重建
282
+
283
+ 003 已实现:
284
+
285
+ ```text
286
+ awbs db audit [--json]
287
+ awbs db clean-rebuild [--json]
288
+ awbs db backups list [--json]
289
+ ```
290
+
291
+ `db audit` 能报告:
292
+
293
+ - 当前 Git `HEAD`。
294
+ - 当前 `refs/awbs/trusted`。
295
+ - HEAD 是否等于 trusted commit。
296
+ - HEAD 是否在 trusted chain 之上。
297
+ - 工作区是否 dirty。
298
+ - 是否存在外部 commit。
299
+ - authority/ledger 是否可验证。
300
+
301
+ `db clean-rebuild` 能:
302
+
303
+ - 从当前 trusted commit 克隆/检出干净数据库。
304
+ - 复制 `.awbs/private/` 私有材料。
305
+ - 把原数据库目录整体改名为 backup。
306
+ - 让干净目录接管原路径。
307
+ - 默认保留 backup,不自动删除。
308
+
309
+ 如果 session 正在运行,当前实现要求先停止 session,再执行 clean rebuild。
310
+
311
+ ## 10. A 模式 Authority Session
312
+
313
+ 005 已实现 A 模式:
314
+
315
+ ```text
316
+ awbs authority session start --control-stdin
317
+ awbs authority session status [--json]
318
+ awbs authority session stop --control-token-stdin
319
+ awbs authority session recover --recovery-secret-stdin
320
+ ```
321
+
322
+ `start --control-stdin` 读取:
323
+
324
+ ```json
325
+ {
326
+ "recoverySecret": "...",
327
+ "controllerToken": "..."
328
+ }
329
+ ```
330
+
331
+ 已实现行为:
332
+
333
+ - session start 读取 `.awbs/private/local.json`。
334
+ - 使用 recoverySecret 写入 `.awbs/private/recovery.seal.json`。
335
+ - 启动同用户后台 session daemon。
336
+ - 删除磁盘 `local.json`。
337
+ - session active 时 key 只存在于 daemon 内存中。
338
+ - `session.json` 只保存 pid、socketPath、repoId、startedAt、status,不保存 key/token/secret。
339
+ - 可信写入必须由 host controller 提供 `controllerToken`。
340
+ - controller token 不直接进入 session IPC;CLI 发送带 nonce 的 HMAC controller proof。
341
+ - session daemon 会拒绝重复 nonce,防止 controller proof 被重放。
342
+ - 可信写入的成功响应必须带 response proof,CLI 会拒绝未签回的伪成功响应。
343
+ - session daemon 只服务启动仓库及其同一 Git common dir 下的临时 worktree。
344
+ - session stop 写回 `local.json`,删除 recovery/session 状态。
345
+ - session 崩溃后,可以用 recoverySecret 显式 recover。
346
+ - 错误 recoverySecret 不能恢复。
347
+
348
+ 需要 controller token 的可信写入:
349
+
350
+ ```text
351
+ ledger bootstrap
352
+ view create
353
+ view revoke
354
+ changeset apply
355
+ ```
356
+
357
+ 当前 A 模式不实现:
358
+
359
+ - 独立 OS 用户。
360
+ - Windows DPAPI / Credential Manager。
361
+ - Linux keyring / Secret Service。
362
+ - 系统服务形式的 `awbsd`。
363
+ - remote signer。
364
+ - admin/root 防护。
365
+
366
+ ## 11. CLI 与 npm 包形态
367
+
368
+ 当前 AWBS 是 Node/TypeScript CLI 原型。
369
+
370
+ 运行要求:
371
+
372
+ ```text
373
+ Node.js >= 24.0.0
374
+ Git
375
+ ```
376
+
377
+ `package.json` 声明:
378
+
379
+ ```text
380
+ bin:
381
+ awbs -> ./src/cli.ts
382
+ ```
383
+
384
+ 本地可运行:
385
+
386
+ ```text
387
+ node src/cli.ts --help
388
+ npm run awbs -- --help
389
+ npm install -g .
390
+ awbs --help
391
+ ```
392
+
393
+ 当前 `npm pack --dry-run` 已能把运行源码和核心设计文档打入包。
394
+
395
+ ## 12. 架构分层
396
+
397
+ 当前代码保持四层结构:
398
+
399
+ ```text
400
+ CLI Adapter
401
+ 解析命令、读取 stdin、格式化输出。
402
+
403
+ Application Use Cases
404
+ 编排 init / index / view / changeset / ledger / db / session。
405
+
406
+ Domain Contracts
407
+ 定义 manifest、authority、session、index、错误和路径规则。
408
+
409
+ Infrastructure Adapters
410
+ Git CLI、文件系统、SQLite、sealed authority、session daemon。
411
+ ```
412
+
413
+ 当前关键端口:
414
+
415
+ - `GitPort`
416
+ - `FileDatabasePort`
417
+ - `IndexStorePort`
418
+ - `SummaryStorePort`
419
+ - `AuthorityPort`
420
+ - `AuthoritySessionPort`
421
+
422
+ ## 13. 当前测试覆盖
423
+
424
+ 当前 Node 内置测试覆盖:
425
+
426
+ - runtime 和 CLI 架构依赖方向。
427
+ - init / index / summary / view / changeset 的闭环。
428
+ - read-only violation。
429
+ - stale view 拒绝。
430
+ - SQLite 持久索引、FTS、removed 记录迁移。
431
+ - authority seal / mirror / revoke。
432
+ - trusted chain 和外部 commit 排除。
433
+ - clean rebuild。
434
+ - authority session start / stop。
435
+ - controller token 拒绝。
436
+ - session 崩溃恢复。
437
+
438
+ 当前验证命令:
439
+
440
+ ```text
441
+ npm test
442
+ node src\cli.ts --help
443
+ npm pack --dry-run
444
+ git diff --check
445
+ ```
446
+
447
+ ## 14. 明确未实现
448
+
449
+ 当前系统尚未实现:
450
+
451
+ - 操作系统只读属性。
452
+ - 文件级 ACL。
453
+ - 强安全沙箱。
454
+ - 独立 OS 用户运行的 B 模式 Authority Service。
455
+ - OS keychain / DPAPI / Secret Service。
456
+ - remote signer。
457
+ - 跨机器 authority key 迁移。
458
+ - workflow / run / step 完整记录层。
459
+ - backup purge。
460
+ - 自定义业务 adapter。
461
+ - AI 摘要生成。
462
+
463
+ 这些未实现项不是隐藏能力,也不应在上层宣传为已完成特性。
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 AWBS contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.