@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,547 @@
1
+ # AWBS 004:可信事实层与 Authority Service
2
+
3
+ ## Summary
4
+
5
+ 004 的目标是把 003 已经实现的 `sealed ledger + refs/awbs/trusted`,从“可用的可信链”提升为完整的 **AWBS Trusted Authority Layer / AWBS 可信事实层** 设计。
6
+
7
+ 核心定性是:
8
+
9
+ ```text
10
+ 文件系统保存开放内容。
11
+ Git 保存全部历史。
12
+ Trusted Authority Layer 决定 AWBS 承认哪条数据库事实链。
13
+ ```
14
+
15
+ AWBS 不靠隐藏算法可信。公开仓库意味着 agent 可以阅读源码、理解规则、知道 hash 如何计算、知道 ledger 如何验证。真正的设计目标不是“让 agent 不知道”,而是:
16
+
17
+ ```text
18
+ agent 知道规则,也不能仅凭 repo 文件和普通工作权限伪造 trusted chain。
19
+ ```
20
+
21
+ 004 要把普通 agent 绕过 AWBS 的行为,从“改一个文件、改一个 JSON、重算一段 hash”,提升为显式、高成本、可审计的 authority 攻击。
22
+
23
+ ## Design Position
24
+
25
+ AWBS 可信事实层不是沙箱系统,也不是操作系统权限系统。它回答的是一个更底层的问题:
26
+
27
+ ```text
28
+ AWBS 到底承认什么?
29
+ ```
30
+
31
+ 003 后,AWBS 已经有:
32
+
33
+ ```text
34
+ sealed view contract
35
+ sealed ledger
36
+ refs/awbs/trusted
37
+ db audit
38
+ clean-rebuild
39
+ ```
40
+
41
+ 004 要把它们统一成一个整体:
42
+
43
+ ```text
44
+ Trusted Authority Layer
45
+ = repo identity
46
+ + sealed view contracts
47
+ + hash-linked trusted ledger
48
+ + trusted head
49
+ + verified operation apply
50
+ + audit / rebuild rules
51
+ + signer / trust anchor
52
+ ```
53
+
54
+ 这层统一回答四个问题:
55
+
56
+ ```text
57
+ 1. 当前 AWBS 认证数据库是哪一个 trusted commit?
58
+ 2. 某个 workspace / view 是不是 AWBS 承认的?
59
+ 3. 某个 changeset / operation 能不能推进认证数据库?
60
+ 4. 当前目录偏离可信链后,如何回到 AWBS 承认的状态?
61
+ ```
62
+
63
+ ## Trusted State Model
64
+
65
+ AWBS 的认证数据库状态应当被理解为一条可信状态推进链:
66
+
67
+ ```text
68
+ Trusted State T0
69
+ -> apply verified operation O1
70
+ -> Trusted State T1
71
+ -> apply verified operation O2
72
+ -> Trusted State T2
73
+ ```
74
+
75
+ 在文件系统数据库中:
76
+
77
+ ```text
78
+ trusted state
79
+ = trusted commit 对应的 Git tree
80
+
81
+ verified operation
82
+ = 被 Authority 验证并接受的状态转换
83
+
84
+ ledger entry
85
+ = 对这次状态转换的认证记录
86
+ ```
87
+
88
+ 普通 Git `HEAD`、当前工作区、外部 commit、未提交文件,都不是 AWBS 认证数据库头。AWBS 当前认证数据库头由:
89
+
90
+ ```text
91
+ refs/awbs/trusted
92
+ sealed trusted ledger
93
+ ```
94
+
95
+ 共同确认。
96
+
97
+ ## Operation As The Trusted Unit
98
+
99
+ AWBS 可信链的最小推进单元不是文件,也不是普通 Git commit,而是:
100
+
101
+ ```text
102
+ verified operation
103
+ ```
104
+
105
+ 当前最主要的 operation 是:
106
+
107
+ ```text
108
+ data changeset apply
109
+ ```
110
+
111
+ 也就是说:
112
+
113
+ ```text
114
+ changeset
115
+ = 状态变化请求
116
+
117
+ apply
118
+ = 状态转换动作
119
+
120
+ trusted commit
121
+ = 转换后的数据库状态
122
+
123
+ ledger entry
124
+ = 对这次转换的认证记录
125
+ ```
126
+
127
+ 004 设计上允许未来扩展 operation 类型:
128
+
129
+ ```text
130
+ genesis
131
+ data changeset apply
132
+ authority update
133
+ view revoke
134
+ summary update
135
+ clean rebuild receipt
136
+ ```
137
+
138
+ 这些 operation 都应当进入同一条可信事实链,但它们的语义不同:
139
+
140
+ - `genesis`:创建初始 AWBS 认证数据库状态。
141
+ - `data changeset apply`:把业务文件变化写入可信数据库。
142
+ - `authority update`:更新 AWBS 自身的可信事实层。
143
+ - `view revoke`:撤销 view,使未来 collect / apply 拒绝该 view。
144
+ - `summary update`:记录上层业务写入的摘要变化。
145
+ - `clean rebuild receipt`:记录一次可信重建行为,但不把备份目录删除当作自动动作。
146
+
147
+ ## Hash-Linked Ledger
148
+
149
+ 003 的 ledger 已经能记录可信写入。004 要把它进一步设计成真正的 hash-linked ledger。
150
+
151
+ 每条 entry 应当包含:
152
+
153
+ ```text
154
+ entryId
155
+ entryType
156
+ previousEntryHash
157
+ entryHash
158
+ operationHash
159
+ parentTrustedCommit
160
+ currentTrustedCommit
161
+ createdAt
162
+ ```
163
+
164
+ 其中:
165
+
166
+ - `previousEntryHash` 指向上一条 ledger entry 的 hash。
167
+ - `entryHash` 是当前 entry 的 canonical hash。
168
+ - `operationHash` 是本次 operation 全部关键材料的 hash。
169
+ - `parentTrustedCommit` 是本次操作基于的上一个 trusted commit。
170
+ - `currentTrustedCommit` 是本次操作推进后的 trusted commit。
171
+
172
+ 链式关系是:
173
+
174
+ ```text
175
+ entryHash(Tn)
176
+ = hash(canonical entry at Tn)
177
+
178
+ entryHash(Tn+1)
179
+ = hash(canonical entry at Tn+1, previousEntryHash = entryHash(Tn))
180
+ ```
181
+
182
+ 这样,如果有人改了中间某条 entry,后续 entry 的 hash 链会断。AWBS 不能阻止别人乱改文件,但可以拒绝承认对不上的链。
183
+
184
+ ## Operation Hash
185
+
186
+ `operationHash` 不应只 hash 一个 changeset id,而应覆盖这次状态转换的全部关键材料。
187
+
188
+ 对于 `data changeset apply`,至少应覆盖:
189
+
190
+ ```text
191
+ view contract hash
192
+ changeset manifest hash
193
+ changeset payload hash
194
+ allowed applied paths
195
+ parentTrustedCommit
196
+ operation type
197
+ authority policy version
198
+ ```
199
+
200
+ Authority 验证 operation 时,必须重新计算这些 hash,而不是相信请求方提交的 hash。
201
+
202
+ ## Authority Service
203
+
204
+ 004 的主方向是引入 **AWBS Authority Service**。
205
+
206
+ 005 的实现选择先落 A 模式:同用户的 **Ephemeral Key Session / 运行期本地钥匙托管**。它不创建 OS 用户,不接系统 keychain,不实现独立系统服务。B 模式,也就是独立 OS 身份、系统级 key 存储和真正的 `awbsd` 服务,仍然是后续方向。
207
+
208
+ 它是一个独立运行的本地可信服务:
209
+
210
+ ```text
211
+ awbsd / AWBS Authority Service
212
+ 以独立 OS 身份运行
213
+ 持有 signer / trust anchor
214
+ 验证 operation
215
+ 写入 sealed ledger
216
+ 推进 refs/awbs/trusted
217
+ ```
218
+
219
+ agent、Codex、Claude Code 或普通 CLI 不持有根信任。它们只提交请求:
220
+
221
+ ```text
222
+ agent / CLI
223
+ -> create workspace
224
+ -> collect changeset
225
+ -> submit operation request
226
+
227
+ Authority Service
228
+ -> verify operation
229
+ -> sign operation
230
+ -> apply operation
231
+ -> advance trusted chain
232
+ ```
233
+
234
+ 关键规则:
235
+
236
+ ```text
237
+ Authority Service 不能提供 sign(rawHash)。
238
+ Authority Service 只能提供 applyVerifiedOperation / applyVerifiedChangeset。
239
+ ```
240
+
241
+ 也就是说,服务不能变成“给任意字符串盖章”的接口。它必须自己读取 sealed view contract、changeset manifest、payload、trusted head 和 policy,然后重新计算 operation hash。只有验证通过,才允许签名和推进可信链。
242
+
243
+ ## Authority Bootstrap
244
+
245
+ AWBS core 不应该在没有 authority session 的情况下进入可信写入状态。
246
+
247
+ 启动顺序应当是:
248
+
249
+ ```text
250
+ 1. 检测运行平台
251
+ Windows / Linux / unknown
252
+
253
+ 2. 检测 authority mode
254
+ repo-local sealed key
255
+ ephemeral key session
256
+ OS key store
257
+ local Authority Service
258
+ remote signer
259
+
260
+ 3. 建立 trust anchor
261
+ 获取解封能力、签名能力或 authority service session
262
+
263
+ 4. 验证 repo authority
264
+ repoId
265
+ sealed catalog
266
+ sealed ledger
267
+ refs/awbs/trusted
268
+
269
+ 5. 启动 AWBS core
270
+ 只有 authority ready 后,可信写入才允许执行
271
+ ```
272
+
273
+ 如果任一关键步骤失败,系统不能伪成功。它必须进入明确状态:
274
+
275
+ ```text
276
+ ready
277
+ 可以执行可信读写。
278
+
279
+ degraded-readonly
280
+ 可以读取、审计、诊断,但不能推进 trusted chain。
281
+
282
+ unavailable
283
+ 不能打开可信事实层,需要人工修复或重新建立 authority。
284
+ ```
285
+
286
+ 对应失败原因包括:
287
+
288
+ ```text
289
+ platform unsupported
290
+ authority mode unavailable
291
+ key file missing
292
+ key already checked out by another session
293
+ OS key store unavailable
294
+ Authority Service unreachable
295
+ ledger cannot be opened
296
+ trusted head cannot be verified
297
+ ```
298
+
299
+ 004 要把这个启动过程定义成 AWBS 核心的一部分,而不是某个外围工具命令。因为 AWBS 真正管理的是:
300
+
301
+ ```text
302
+ 输入如何变成 verified operation。
303
+ 输出如何永久记录进 trusted chain。
304
+ ```
305
+
306
+ 没有 authority session,就没有可信写入。
307
+
308
+ ## Independent OS Identity
309
+
310
+ Authority Service 应当支持以独立 OS 用户身份运行。
311
+
312
+ Windows 方向:
313
+
314
+ ```text
315
+ 本地用户:awbs-authority
316
+ 服务进程:awbsd
317
+ 密钥存储:DPAPI / Credential Manager / CNG KSP / TPM-backed provider
318
+ 通信方式:named pipe / localhost IPC
319
+ ```
320
+
321
+ Linux 方向:
322
+
323
+ ```text
324
+ system user:awbs
325
+ 服务进程:awbsd
326
+ 密钥存储:kernel keyring / Secret Service / TPM trusted key
327
+ 通信方式:Unix socket
328
+ ```
329
+
330
+ 这样,普通用户身份下运行的 agent 即使能读仓库、读源码、写 workspace,也不能直接读取 `awbs-authority` 身份下的 signer key。
331
+
332
+ 这不等于对 admin/root 绝对安全。它的目标是把普通 agent 的绕过成本提高到:
333
+
334
+ ```text
335
+ 攻击 Authority Service
336
+ 攻击 OS 用户边界
337
+ 攻击 signer / trust anchor
338
+ ```
339
+
340
+ 这已经明显不同于“改一个 JSON 就能绕过”。
341
+
342
+ ## Ephemeral Key Session
343
+
344
+ 004 还应当记录一个轻量但很有价值的模式:**Ephemeral Key Session / 运行期钥匙托管**。
345
+
346
+ 它的核心思路是:
347
+
348
+ ```text
349
+ 应用初始化时:
350
+ AWBS 生成或读取 key 文件。
351
+ 应用把 key 读入内存。
352
+ 应用立即删除磁盘上的 key 副本。
353
+
354
+ 应用运行中:
355
+ key 只存在于当前 AWBS authority session 的内存中。
356
+ agent 在自己的工作生命周期中无法通过文件系统直接读取 key。
357
+
358
+ 应用收尾时:
359
+ AWBS 停止接受新的可信写入。
360
+ authority session 把 key 写回持久位置。
361
+ 应用退出。
362
+ ```
363
+
364
+ 这个模式的价值不是对抗 admin/root,也不是替代 Authority Service。它解决的是一个非常实际的问题:
365
+
366
+ ```text
367
+ 不要让强 agent 在普通任务中顺手读到 repo 里的 key 文件。
368
+ ```
369
+
370
+ 如果 agent 的生命周期发生在 key 已经被读入内存、磁盘副本已经删除之后,那么对这个 agent 来说,key 在文件系统层面就是不可见的。它即使知道 AWBS 源码,也不能只靠搜索 repo 文件拿到 key。
371
+
372
+ 因此,运行期钥匙托管可以作为 004 的中间层:
373
+
374
+ ```text
375
+ Level 1: repo-local sealed key
376
+ Level 1.5: ephemeral key session
377
+ Level 2: OS secret store / OS keychain
378
+ Level 3: local Authority Service
379
+ ```
380
+
381
+ 这个模式的边界也必须写清:
382
+
383
+ - 它依赖应用正确管理生命周期。
384
+ - 它要求 key 装载后删除磁盘副本,退出前再写回。
385
+ - 如果进程崩溃,必须有恢复策略,例如人工恢复、备份密封包或重新建立 authority。
386
+ - 如果另一个不受控 agent 在 AWBS 应用未运行时扫整个机器并读取 key 文件,这不属于 AWBS 单独能解决的问题。
387
+ - 如果应用构建者让 agent 在整个文件系统中无边界乱跑,那属于上层应用的 agent 管理失败,不应由 AWBS 假装兜底。
388
+
389
+ 这不是放弃安全,而是明确职责边界:
390
+
391
+ ```text
392
+ AWBS 负责让自己的可信写入链路不暴露 key。
393
+ 上层应用负责约束自己启动的 agent 何时运行、能访问哪里、能不能在 AWBS 未托管 key 时乱扫文件。
394
+ ```
395
+
396
+ 在产品形态上,可以把它理解为:
397
+
398
+ ```text
399
+ awbs authority session start --control-stdin
400
+ -> load key into memory
401
+ -> remove persisted key copy
402
+ -> mark authority ready
403
+
404
+ awbs authority session stop --control-token-stdin
405
+ -> stop trusted writes
406
+ -> persist key
407
+ -> mark authority unavailable
408
+ ```
409
+
410
+ 005 已经实现了 A 模式的 session 生命周期。恢复因子由上层应用的非 AI 控制层通过 stdin 注入,不由 agent 工作流持有,也不默认要求人类在第一次运行时交互输入。
411
+
412
+ ## Trust Anchor Levels
413
+
414
+ 004 采用服务优先的路线,但设计上保留分级能力:
415
+
416
+ ```text
417
+ Level 0: Hash chain only
418
+ 只做 hash-linked ledger。
419
+ 防误改、防损坏、防低级伪造。
420
+ 不防强 agent 全量重算链。
421
+
422
+ Level 1: Repo-local sealed key
423
+ key 派生材料在本地 repo 或本机上下文中。
424
+ 提高绕过成本,但同用户强 agent 仍可能寻找材料。
425
+
426
+ Level 1.5: Ephemeral key session
427
+ 应用启动时把 key 读入内存并删除磁盘副本。
428
+ 应用结束时再把 key 写回持久位置。
429
+ 适合单应用会话,能阻止 agent 在任务生命周期中顺手读 key 文件。
430
+
431
+ Level 2: OS secret store / OS keychain
432
+ key 不明文落在 repo。
433
+ 使用 Windows DPAPI / Credential Manager,或 Linux keyring / Secret Service。
434
+
435
+ Level 3: Local Authority Service
436
+ 独立 OS 身份运行。
437
+ CLI 和 agent 只请求验证 operation,不持有 signer。
438
+
439
+ Level 4: Remote signer / external append-only checkpoint
440
+ 信任锚移出当前机器。
441
+ 用远程 signer、protected environment 或外部 append-only log 做 checkpoint。
442
+ ```
443
+
444
+ AWBS 不需要一开始就实现全部级别,但文档和接口设计不能把系统锁死在 Level 1。
445
+
446
+ ## Security Boundary
447
+
448
+ AWBS 可信事实层的承诺是:
449
+
450
+ ```text
451
+ 源码公开不破坏安全。
452
+ 普通权限 agent 不能仅凭 repo 文件伪造 trusted chain。
453
+ 绕过 trusted chain 的行为会变成显式、高成本、可审计的 authority 攻击。
454
+ ```
455
+
456
+ AWBS 不承诺:
457
+
458
+ ```text
459
+ 在 agent 拥有 admin/root 后仍然不可伪造。
460
+ ```
461
+
462
+ 拥有 admin/root 的 actor 理论上可以:
463
+
464
+ ```text
465
+ 替换服务程序
466
+ 读取服务进程内存
467
+ 修改服务配置
468
+ 切换到 authority 用户
469
+ 拦截 IPC
470
+ 调用 signer 帮它签
471
+ 修改系统策略
472
+ ```
473
+
474
+ 这属于主机最高信任边界被攻破。AWBS 的正确表述应当是:
475
+
476
+ ```text
477
+ AWBS trusted chain protects against untrusted workflow actors.
478
+ It does not protect against a fully compromised host administrator.
479
+ ```
480
+
481
+ 中文表述:
482
+
483
+ ```text
484
+ AWBS 可信链防的是不可信工作流执行者,
485
+ 不防已被完全攻破的主机管理员。
486
+ ```
487
+
488
+ ## Relation To Blockchain
489
+
490
+ 004 不引入币、共识、挖矿、P2P 网络、经济激励或链上资产。
491
+
492
+ AWBS 只借用区块链中最适合本系统的一部分:
493
+
494
+ ```text
495
+ 后一条记录承认前一条记录。
496
+ 任何人改了中间记录,后面的链都会对不上。
497
+ ```
498
+
499
+ 在 AWBS 中:
500
+
501
+ ```text
502
+ 区块链交易
503
+ -> AWBS verified operation / changeset
504
+
505
+ 区块链状态
506
+ -> AWBS trusted commit 对应的文件系统数据库状态
507
+
508
+ 区块链区块头
509
+ -> AWBS ledger entry hash
510
+ ```
511
+
512
+ AWBS 不需要全网共识,因为 AWBS 的问题不是“多人无中心共识”,而是“本地 agent 工作流中,哪些状态被 AWBS 承认”。
513
+
514
+ ## Summary Boundary
515
+
516
+ 摘要仍然永远由上层写入,AWBS 不内置 AI 摘要。
517
+
518
+ Trusted Authority Layer 可以记录 summary update 这种 operation,但它不负责生成摘要、不配置模型、不保存 API key、不理解业务语义。
519
+
520
+ 正确边界是:
521
+
522
+ ```text
523
+ 上层业务生成摘要。
524
+ AWBS 保存摘要记录。
525
+ Trusted Authority Layer 决定摘要记录是否进入可信链。
526
+ ```
527
+
528
+ ## Future Implementation Direction
529
+
530
+ 004 只写设计文档,不实现代码。
531
+
532
+ 后续实现可以拆成:
533
+
534
+ ```text
535
+ 005: hash-linked ledger schema
536
+ 006: AuthoritySignerPort
537
+ 007: local Authority Service prototype
538
+ 008: OS key store integration
539
+ 009: external checkpoint / remote signer
540
+ ```
541
+
542
+ 实现时应保持一个原则:
543
+
544
+ ```text
545
+ 不要让 CLI 成为事实上的 root authority。
546
+ CLI 是客户端;Authority Service 才是可信状态推进者。
547
+ ```