chore: audit public exports — #276

Closed
opened 2026-05-16 06:35:39 +00:00 by xiaoju · 2 comments
Owner

背景

Bundle 全部自包含后(#270),审计各 package 的 public API,识别未被其他 package import 的符号。

未被使用 ≠ 应该删除。这些是收敛候选,需逐个判断:

  • 是否为外部 bundle 作者需要的公共 API
  • 是否只在包内部使用
  • 是否为冗余 re-export

统计

总 export 外部使用 未使用 使用率
24 12 12 50%

未被外部 import 的符号(候选)

备注

Merkle 内部构建细节(, , 等)不需要对外暴露。

操作

逐个检查上述符号,决定:

  1. 保留 — 属于公共 API 契约,外部 bundle 作者可能需要
  2. 内部化 — 从 移除 re-export,保留在包内部使用
  3. 删除 — 确认为死代码
## 背景 Bundle 全部自包含后(#270),审计各 package 的 public API,识别未被其他 package import 的符号。 未被使用 ≠ 应该删除。这些是收敛候选,需逐个判断: - 是否为外部 bundle 作者需要的公共 API - 是否只在包内部使用 - 是否为冗余 re-export ## 统计 | 总 export | 外部使用 | 未使用 | 使用率 | |----------|---------|--------|-------| | 24 | 12 | 12 | 50% | ## 未被外部 import 的符号(候选) - [ ] - [ ] - [ ] - [ ] - [ ] - [ ] - [ ] - [ ] - [ ] - [ ] - [ ] - [ ] ## 备注 Merkle 内部构建细节(, , 等)不需要对外暴露。 ## 操作 逐个检查上述符号,决定: 1. **保留** — 属于公共 API 契约,外部 bundle 作者可能需要 2. **内部化** — 从 移除 re-export,保留在包内部使用 3. **删除** — 确认为死代码
Author
Owner

\u53ef\u8fbe\u6027\u5206\u6790 \u2014 @uncaged/workflow-cas\n\n### \u5305\u804c\u8d23\n\nCAS \u5b58\u50a8\u5c42\u3002 Content-addressable storage \u7684\u8bfb\u5199\uff0cMerkle tree \u6784\u5efa\uff0cbundle hash \u8ba1\u7b97\u3002\n\n### \u53d7\u4f17\n\n**\u7cfb\u7edf\u5185\u90e8** \u2014 engine (execute) \u548c CLI \u4f7f\u7528\u3002bundle \u4f5c\u8005\u4e0d\u76f4\u63a5\u64cd\u4f5c CAS\uff08\u901a\u8fc7 ThreadContext \u95f4\u63a5\u4f7f\u7528\uff09\u3002\n\n\u4f46\u6709\u4e00\u4e2a\u4f8b\u5916\uff1abundle \u4f5c\u8005\u53ef\u80fd\u901a\u8fc7 ThreadContext.cas \u63a5\u89e6\u5230 CasStore \u7c7b\u578b\uff0c\u8fd9\u662f protocol \u5b9a\u4e49\u7684\uff0c\u4e0d\u662f cas \u5305 export \u7684\u3002\n\n### \u53ef\u8fbe\u6027\u5224\u5b9a\n\n**\u2705 \u88ab\u5176\u4ed6\u5305\u4f7f\u7528 \u2014 \u4fdd\u7559\uff1a**\n- createCasStore \u2014 CLI + execute + runtime + template\n- putContentNodeWithRefs \u2014 agent-cursor + execute + runtime + util-agent\n- parseCasThreadNode \u2014 CLI + execute + runtime\n- putStartNode, putStateNode \u2014 CLI + execute + runtime\n- getContentMerklePayload \u2014 CLI + execute + runtime\n- findReachableHashes \u2014 execute\uff08GC \u7528\uff09\n- hashWorkflowBundleBytes \u2014 CLI\uff08bundle \u6ce8\u518c\u7528\uff09\n- createContentMerkleNode, serializeMerkleNode, putContentMerkleNode \u2014 CLI\n\n**\u274c \u65e0\u8de8\u5305\u6d88\u8d39\u8005 \u2014 \u5185\u90e8\u5316\u5019\u9009\uff1a**\n- MerkleNode \u2014 Merkle \u5185\u90e8\u7c7b\u578b\n- MerkleNodeType \u2014 \u540c\u4e0a\n- ParsedCasThreadNode \u2014 \u7c7b\u578b\uff0c\u4f46\u65e0\u5916\u90e8 import\n- StepMerklePayload, ThreadMerklePayload \u2014 Merkle payload \u5185\u90e8\u7c7b\u578b\n- collectRefs \u2014 \u5185\u90e8\u5de5\u5177\n- hashString \u2014 \u5185\u90e8\u5de5\u5177\uff08\u5916\u90e8\u7528 hashWorkflowBundleBytes\uff09\n- isCasNodeYaml \u2014 \u5185\u90e8\u5224\u65ad\u51fd\u6570\n- parseMerkleNode \u2014 \u5185\u90e8\u89e3\u6790\n- putStepMerkleNode, putThreadMerkleNode \u2014 \u5185\u90e8 Merkle \u6784\u5efa\uff08\u5916\u90e8\u7528\u66f4\u9ad8\u5c42\u7684 putStartNode/putStateNode\uff09\n- serializeCasNode \u2014 \u5185\u90e8\u5e8f\u5217\u5316\n\n\u8fd9 12 \u4e2a\u5168\u90e8\u662f CAS \u7684\u5185\u90e8\u5b9e\u73b0\u7ec6\u8282\uff0c\u9ad8\u5c42 API\uff08putStartNode \u7b49\uff09\u5df2\u7ecf\u5c01\u88c5\u4e86\u8fd9\u4e9b\u64cd\u4f5c\u3002\n\n\u2014 \u5c0f\u6a58 \ud83c\udf4a\uff08NEKO Team\uff09

## \u53ef\u8fbe\u6027\u5206\u6790 \u2014 `@uncaged/workflow-cas`\n\n### \u5305\u804c\u8d23\n\n**CAS \u5b58\u50a8\u5c42\u3002** Content-addressable storage \u7684\u8bfb\u5199\uff0cMerkle tree \u6784\u5efa\uff0cbundle hash \u8ba1\u7b97\u3002\n\n### \u53d7\u4f17\n\n**\u7cfb\u7edf\u5185\u90e8** \u2014 engine (execute) \u548c CLI \u4f7f\u7528\u3002bundle \u4f5c\u8005\u4e0d\u76f4\u63a5\u64cd\u4f5c CAS\uff08\u901a\u8fc7 ThreadContext \u95f4\u63a5\u4f7f\u7528\uff09\u3002\n\n\u4f46\u6709\u4e00\u4e2a\u4f8b\u5916\uff1abundle \u4f5c\u8005\u53ef\u80fd\u901a\u8fc7 `ThreadContext.cas` \u63a5\u89e6\u5230 `CasStore` \u7c7b\u578b\uff0c\u8fd9\u662f protocol \u5b9a\u4e49\u7684\uff0c\u4e0d\u662f cas \u5305 export \u7684\u3002\n\n### \u53ef\u8fbe\u6027\u5224\u5b9a\n\n**\u2705 \u88ab\u5176\u4ed6\u5305\u4f7f\u7528 \u2014 \u4fdd\u7559\uff1a**\n- `createCasStore` \u2014 CLI + execute + runtime + template\n- `putContentNodeWithRefs` \u2014 agent-cursor + execute + runtime + util-agent\n- `parseCasThreadNode` \u2014 CLI + execute + runtime\n- `putStartNode`, `putStateNode` \u2014 CLI + execute + runtime\n- `getContentMerklePayload` \u2014 CLI + execute + runtime\n- `findReachableHashes` \u2014 execute\uff08GC \u7528\uff09\n- `hashWorkflowBundleBytes` \u2014 CLI\uff08bundle \u6ce8\u518c\u7528\uff09\n- `createContentMerkleNode`, `serializeMerkleNode`, `putContentMerkleNode` \u2014 CLI\n\n**\u274c \u65e0\u8de8\u5305\u6d88\u8d39\u8005 \u2014 \u5185\u90e8\u5316\u5019\u9009\uff1a**\n- `MerkleNode` \u2014 Merkle \u5185\u90e8\u7c7b\u578b\n- `MerkleNodeType` \u2014 \u540c\u4e0a\n- `ParsedCasThreadNode` \u2014 \u7c7b\u578b\uff0c\u4f46\u65e0\u5916\u90e8 import\n- `StepMerklePayload`, `ThreadMerklePayload` \u2014 Merkle payload \u5185\u90e8\u7c7b\u578b\n- `collectRefs` \u2014 \u5185\u90e8\u5de5\u5177\n- `hashString` \u2014 \u5185\u90e8\u5de5\u5177\uff08\u5916\u90e8\u7528 `hashWorkflowBundleBytes`\uff09\n- `isCasNodeYaml` \u2014 \u5185\u90e8\u5224\u65ad\u51fd\u6570\n- `parseMerkleNode` \u2014 \u5185\u90e8\u89e3\u6790\n- `putStepMerkleNode`, `putThreadMerkleNode` \u2014 \u5185\u90e8 Merkle \u6784\u5efa\uff08\u5916\u90e8\u7528\u66f4\u9ad8\u5c42\u7684 `putStartNode`/`putStateNode`\uff09\n- `serializeCasNode` \u2014 \u5185\u90e8\u5e8f\u5217\u5316\n\n\u8fd9 12 \u4e2a\u5168\u90e8\u662f CAS \u7684\u5185\u90e8\u5b9e\u73b0\u7ec6\u8282\uff0c\u9ad8\u5c42 API\uff08`putStartNode` \u7b49\uff09\u5df2\u7ecf\u5c01\u88c5\u4e86\u8fd9\u4e9b\u64cd\u4f5c\u3002\n\n\u2014 \u5c0f\u6a58 \ud83c\udf4a\uff08NEKO Team\uff09
Owner

Completed in PR #283 + #284.

Completed in PR #283 + #284.
xiaomo changed title from chore: audit public exports \u2014 `@uncaged/workflow-cas` to chore: audit public exports — 2026-05-16 10:34:16 +00:00
Sign in to join this conversation.
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: uncaged/workflow#276