@hongmaple0820/scale-engine 0.18.0 → 0.20.0

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 (110) hide show
  1. package/README.en.md +310 -237
  2. package/README.md +255 -63
  3. package/dist/api/cli.js +2656 -1258
  4. package/dist/api/cli.js.map +1 -1
  5. package/dist/api/doctor.d.ts +4 -1
  6. package/dist/api/doctor.js +85 -1
  7. package/dist/api/doctor.js.map +1 -1
  8. package/dist/api/quickstart.d.ts +3 -0
  9. package/dist/api/quickstart.js +9 -4
  10. package/dist/api/quickstart.js.map +1 -1
  11. package/dist/cli/phaseCommands.js +7 -0
  12. package/dist/cli/phaseCommands.js.map +1 -1
  13. package/dist/codegraph/CodeIntelligence.d.ts +135 -0
  14. package/dist/codegraph/CodeIntelligence.js +460 -0
  15. package/dist/codegraph/CodeIntelligence.js.map +1 -0
  16. package/dist/context/ContextBudget.d.ts +90 -0
  17. package/dist/context/ContextBudget.js +322 -0
  18. package/dist/context/ContextBudget.js.map +1 -0
  19. package/dist/eval/WorkflowEval.d.ts +161 -0
  20. package/dist/eval/WorkflowEval.js +379 -0
  21. package/dist/eval/WorkflowEval.js.map +1 -0
  22. package/dist/governance/GovernanceRoi.d.ts +25 -0
  23. package/dist/governance/GovernanceRoi.js +70 -0
  24. package/dist/governance/GovernanceRoi.js.map +1 -0
  25. package/dist/governance/ProgressiveGovernance.d.ts +22 -0
  26. package/dist/governance/ProgressiveGovernance.js +159 -0
  27. package/dist/governance/ProgressiveGovernance.js.map +1 -0
  28. package/dist/index.d.ts +2 -0
  29. package/dist/index.js +4 -0
  30. package/dist/index.js.map +1 -1
  31. package/dist/memory/MemoryBrain.d.ts +135 -0
  32. package/dist/memory/MemoryBrain.js +635 -0
  33. package/dist/memory/MemoryBrain.js.map +1 -0
  34. package/dist/memory/MemoryFabric.d.ts +118 -0
  35. package/dist/memory/MemoryFabric.js +281 -0
  36. package/dist/memory/MemoryFabric.js.map +1 -0
  37. package/dist/memory/MemoryLearning.d.ts +61 -0
  38. package/dist/memory/MemoryLearning.js +203 -0
  39. package/dist/memory/MemoryLearning.js.map +1 -0
  40. package/dist/memory/index.d.ts +3 -0
  41. package/dist/memory/index.js +4 -0
  42. package/dist/memory/index.js.map +1 -0
  43. package/dist/output/GovernanceDashboard.d.ts +57 -0
  44. package/dist/output/GovernanceDashboard.js +250 -0
  45. package/dist/output/GovernanceDashboard.js.map +1 -0
  46. package/dist/output/HTMLArtifactLayer.js +31 -31
  47. package/dist/output/index.d.ts +2 -0
  48. package/dist/output/index.js +1 -0
  49. package/dist/output/index.js.map +1 -1
  50. package/dist/prompts/VibeTemplateGallery.js +121 -121
  51. package/dist/runtime/FinalReportGuard.d.ts +16 -0
  52. package/dist/runtime/FinalReportGuard.js +14 -0
  53. package/dist/runtime/FinalReportGuard.js.map +1 -0
  54. package/dist/runtime/RuntimeDoctor.d.ts +23 -0
  55. package/dist/runtime/RuntimeDoctor.js +151 -0
  56. package/dist/runtime/RuntimeDoctor.js.map +1 -0
  57. package/dist/runtime/RuntimeEvidenceLedger.d.ts +50 -0
  58. package/dist/runtime/RuntimeEvidenceLedger.js +89 -0
  59. package/dist/runtime/RuntimeEvidenceLedger.js.map +1 -0
  60. package/dist/runtime/SessionLedger.d.ts +53 -0
  61. package/dist/runtime/SessionLedger.js +104 -0
  62. package/dist/runtime/SessionLedger.js.map +1 -0
  63. package/dist/runtime/index.d.ts +4 -0
  64. package/dist/runtime/index.js +5 -0
  65. package/dist/runtime/index.js.map +1 -0
  66. package/dist/skills/SkillRadar.d.ts +83 -0
  67. package/dist/skills/SkillRadar.js +384 -0
  68. package/dist/skills/SkillRadar.js.map +1 -0
  69. package/dist/workflow/EngineeringStandards.js +69 -66
  70. package/dist/workflow/EngineeringStandards.js.map +1 -1
  71. package/dist/workflow/GovernanceTemplatePacks.js +126 -126
  72. package/dist/workflow/GovernanceTemplates.d.ts +1 -1
  73. package/dist/workflow/GovernanceTemplates.js +500 -229
  74. package/dist/workflow/GovernanceTemplates.js.map +1 -1
  75. package/dist/workflow/ResourceGovernance.js +27 -18
  76. package/dist/workflow/ResourceGovernance.js.map +1 -1
  77. package/dist/workflow/VerificationCommands.d.ts +11 -0
  78. package/dist/workflow/VerificationCommands.js +2 -0
  79. package/dist/workflow/VerificationCommands.js.map +1 -1
  80. package/dist/workflow/VerificationProfile.d.ts +2 -1
  81. package/dist/workflow/VerificationProfile.js +3 -0
  82. package/dist/workflow/VerificationProfile.js.map +1 -1
  83. package/dist/workflow/WorkflowArtifactWriter.js +2 -1
  84. package/dist/workflow/WorkflowArtifactWriter.js.map +1 -1
  85. package/dist/workflow/WorkflowEngine.js +4 -1
  86. package/dist/workflow/WorkflowEngine.js.map +1 -1
  87. package/dist/workflow/WorkspaceSafety.d.ts +9 -0
  88. package/dist/workflow/WorkspaceSafety.js +49 -0
  89. package/dist/workflow/WorkspaceSafety.js.map +1 -0
  90. package/dist/workflow/gates/GateSystem.d.ts +12 -1
  91. package/dist/workflow/gates/GateSystem.js +106 -0
  92. package/dist/workflow/gates/GateSystem.js.map +1 -1
  93. package/dist/workflow/types.d.ts +1 -1
  94. package/docs/CODE_INTELLIGENCE.md +138 -0
  95. package/docs/CONTEXT_BUDGET.md +87 -0
  96. package/docs/GOVERNANCE_DASHBOARD.md +69 -0
  97. package/docs/MEMORY_BRAIN.md +104 -0
  98. package/docs/MEMORY_FABRIC.md +107 -0
  99. package/docs/README.md +76 -0
  100. package/docs/RUNTIME_EVIDENCE.md +101 -0
  101. package/docs/SKILL_RADAR.md +115 -0
  102. package/docs/WORKFLOW_EVAL.md +151 -0
  103. package/docs/start/README.md +42 -0
  104. package/docs/start/agent-governance-demo.md +107 -0
  105. package/docs/start/quickstart.md +127 -0
  106. package/examples/demo-projects/agent-governance-demo/README.md +37 -0
  107. package/examples/demo-projects/agent-governance-demo/package.json +16 -0
  108. package/examples/demo-projects/agent-governance-demo/src/oauth-state.ts +39 -0
  109. package/examples/demo-projects/agent-governance-demo/tests/oauth-state.test.ts +52 -0
  110. package/package.json +14 -3
@@ -0,0 +1,42 @@
1
+ # SCALE Engine 入门路径
2
+
3
+ 这个目录只放面向新用户的上手内容。目标是让用户先跑通,再理解完整体系。
4
+
5
+ ## 推荐阅读顺序
6
+
7
+ 1. [3 分钟快速开始](quickstart.md)
8
+ 从空目录初始化治理工作流,看到 `.scale`、模板、验证 profile 和状态输出。
9
+
10
+ 2. [官方 Demo Walkthrough](agent-governance-demo.md)
11
+ 用一个 OAuth state 加固任务演示:上下文对齐、诊断计划、TDD 切片、HTML artifact、资源治理和工程规范扫描。
12
+
13
+ 3. 回到根目录 [README](../../README.md)
14
+ 理解 SCALE Engine 的核心能力和 governance pack 选择。
15
+
16
+ 4. 查看 [文档地图](../README.md)
17
+ 区分哪些文档是用户指南、哪些是参考资料、哪些是历史规划和过程记录。
18
+
19
+ ## 你应该先看到什么
20
+
21
+ 跑完 quickstart 后,至少应该能看到:
22
+
23
+ - `scale preflight --preflight-profile quick` 可以执行。
24
+ - `scale status` 能告诉你当前项目下一步该做什么。
25
+ - `.scale/verification.json` 存在,并描述本地验证 profile。
26
+ - `docs/workflow/templates/` 存在,并包含 Mini-PRD、plan、verification、review、summary 等模板。
27
+ - `scale artifact render` 可以把任务 Markdown 证据渲染成 HTML。
28
+
29
+ 如果其中任何一步失败,先看命令输出,不要假设是环境问题。SCALE 的原则是:没有真实命令结果,就不声称通过。
30
+
31
+ ## 场景选择
32
+
33
+ | 场景 | 推荐入口 |
34
+ | --- | --- |
35
+ | 第一次试用 | [3 分钟快速开始](quickstart.md) |
36
+ | 想看 Agent 治理闭环 | [官方 Demo Walkthrough](agent-governance-demo.md) |
37
+ | 前端项目 | `scale init --governance-pack frontend-app` |
38
+ | Node/TypeScript 包 | `scale init --governance-pack node-library` |
39
+ | Go 多服务后端 | `scale init --governance-pack go-service-matrix` |
40
+ | 多仓库/MOE 工作区 | `scale init --governance-pack moe-workspace` |
41
+ | 文档、报告、截图、脚本混乱 | `scale init --governance-pack resource-governance` |
42
+
@@ -0,0 +1,107 @@
1
+ # 官方 Demo Walkthrough:让 Agent 不再跳过工程纪律
2
+
3
+ 这个 demo 用一个很小的 OAuth state 校验任务,演示 SCALE 如何把“应该做”的工程动作变成可检查证据。
4
+
5
+ ## Demo 目标
6
+
7
+ 我们要实现并验证一个安全敏感行为:
8
+
9
+ > 当 OAuth callback 的 state 过期、被消费或不匹配时,系统必须拒绝请求,而不是返回模糊 500。
10
+
11
+ SCALE 关注的不是这段业务逻辑有多复杂,而是 Agent 是否:
12
+
13
+ - 先澄清上下文和验收标准。
14
+ - 先诊断失败模式,不盲修。
15
+ - 写出可检查的 TDD 切片。
16
+ - 运行验证命令并留下证据。
17
+ - 生成可评审的 Markdown 和 HTML artifact。
18
+ - 不把临时报告、截图、脚本、敏感信息乱提交。
19
+
20
+ ## 1. 准备 demo 项目
21
+
22
+ 从仓库复制官方 demo:
23
+
24
+ ```powershell
25
+ Copy-Item -Recurse E:\project\scale-engine\examples\demo-projects\agent-governance-demo .\scale-agent-demo
26
+ Set-Location .\scale-agent-demo
27
+ npm install
28
+ npm test
29
+ ```
30
+
31
+ macOS/Linux 可以用:
32
+
33
+ ```bash
34
+ cp -R /path/to/scale-engine/examples/demo-projects/agent-governance-demo ./scale-agent-demo
35
+ cd scale-agent-demo
36
+ npm install
37
+ npm test
38
+ ```
39
+
40
+ ## 2. 安装治理工作流
41
+
42
+ ```bash
43
+ scale init --governance-pack node-library
44
+ scale preflight --preflight-profile quick
45
+ scale status
46
+ ```
47
+
48
+ 你应该看到 SCALE 生成 `.scale`、`docs/workflow/templates` 和项目治理规则。
49
+
50
+ ## 3. 建立任务证据
51
+
52
+ ```bash
53
+ scale context init --name "Agent Governance Demo"
54
+ scale runtime start --session-id 2026-05-18-oauth-state --task-id 2026-05-18-oauth-state --level M --agent codex
55
+ scale context grill --task-id 2026-05-18-oauth-state --task "加固 OAuth state 校验"
56
+ scale diagnose plan --task-id 2026-05-18-oauth-state --symptom "OAuth callback 在 state 过期或不匹配时行为不明确"
57
+ scale tdd slice --task-id 2026-05-18-oauth-state --behavior "拒绝过期、已消费或不匹配的 OAuth state" --public-interface "verifyOAuthState(record, providedState, now)" --failing-test "expired, consumed, mismatched state should return ok=false" --test-file tests/oauth-state.test.ts --impl-files src/oauth-state.ts
58
+ ```
59
+
60
+ 这一步会在任务目录中沉淀探索、诊断和 TDD 证据。
61
+
62
+ ## 4. 运行真实验证
63
+
64
+ ```bash
65
+ npm test
66
+ scale standards scan --dir .
67
+ scale assets scan --dir .
68
+ scale runtime record --title "demo business tests" --kind command --status passed --command "npm test" --exit-code 0 --summary "official demo OAuth state tests passed"
69
+ scale runtime final-check --task-id 2026-05-18-oauth-state --session-id 2026-05-18-oauth-state --level M
70
+ ```
71
+
72
+ 验收标准:
73
+
74
+ - `npm test` 必须真实通过。
75
+ - `standards scan` 不能发现阻断级别问题。
76
+ - `assets scan` 应能识别长期维护文档、任务证据和生成产物分类。
77
+ - `runtime final-check` 必须确认当前任务范围内有通过证据,且没有失败证据。
78
+
79
+ ## 5. 生成记忆候选和 HTML artifact
80
+
81
+ ```bash
82
+ scale memory pack --task-id 2026-05-18-oauth-state --session-id 2026-05-18-oauth-state --task "加固 OAuth state 校验" --level M --budget 4000
83
+ scale memory settle --task-id 2026-05-18-oauth-state --session-id 2026-05-18-oauth-state --task "加固 OAuth state 校验" --level M
84
+ ```
85
+
86
+ `memory pack` 用于恢复上下文,`memory settle` 用于把本次真实验证沉淀成可审查学习候选。候选仍需要人审后才能进入长期知识库或工程规范。
87
+
88
+ ```bash
89
+ scale artifact render --task-id 2026-05-18-oauth-state --artifact-dir docs/worklog/tasks/2026-05-18-oauth-state
90
+ scale artifact doctor --artifact-dir docs/worklog/tasks/2026-05-18-oauth-state
91
+ scale artifact open --task-id 2026-05-18-oauth-state --artifact-dir docs/worklog/tasks/2026-05-18-oauth-state
92
+ ```
93
+
94
+ HTML artifact 的价值是让人类更快评审 Agent 的思考、证据和风险。Markdown 仍然是源文件,HTML 是交付视图。
95
+
96
+ ## 6. 对比没有 SCALE 的情况
97
+
98
+ 没有 SCALE 时,Agent 很容易出现这些行为:
99
+
100
+ - 直接改实现,不先说明验收标准。
101
+ - 修了 happy path,却漏掉过期、已消费、不匹配等异常路径。
102
+ - 说“测试通过”,但没有命令输出。
103
+ - 写了临时脚本、截图、报告,却不知道哪些应该提交。
104
+ - 发版前没有 review evidence 和风险记录。
105
+
106
+ 有 SCALE 后,这些行为会被命令、模板、门禁和证据文件显式化。它不能替代人类判断,但能让 Agent 的工作不再靠口头保证。
107
+
@@ -0,0 +1,127 @@
1
+ # 3 分钟快速开始
2
+
3
+ 目标:在一个空目录中安装 SCALE 治理工作流,并看到可验证的项目产物。
4
+
5
+ ## 前置条件
6
+
7
+ - Node.js 20 或更高版本。
8
+ - 已安装 npm。
9
+ - Windows PowerShell、Git Bash、macOS/Linux shell 都可以执行。
10
+
11
+ ## 1. 安装 CLI
12
+
13
+ ```bash
14
+ npm install -g @hongmaple0820/scale-engine
15
+ scale --version
16
+ ```
17
+
18
+ 如果你在开发 `scale-engine` 本仓库,也可以用本地构建后的命令:
19
+
20
+ ```bash
21
+ node E:/project/scale-engine/dist/api/cli.js --help
22
+ ```
23
+
24
+ ## 2. 初始化一个空项目
25
+
26
+ ```bash
27
+ mkdir scale-demo
28
+ cd scale-demo
29
+ scale init --governance-pack standard
30
+ ```
31
+
32
+ 这一步会生成:
33
+
34
+ ```text
35
+ .scale/
36
+ docs/
37
+ scripts/
38
+ AGENTS.md 或对应 Agent 入口文档
39
+ ```
40
+
41
+ 重点看这些文件:
42
+
43
+ | 文件 | 用途 |
44
+ | --- | --- |
45
+ | `.scale/verification.json` | 本地验证 profile 和服务矩阵 |
46
+ | `.scale/skills.json` | Agent 应该如何选择 skills,以及哪些需要证据 |
47
+ | `.scale/tools.json` | CLI、MCP、浏览器、桌面自动化等工具使用策略 |
48
+ | `.scale/resource-policy.json` | 文档、报告、截图、脚本、临时产物的生命周期规则 |
49
+ | `.scale/engineering-standards.json` | 日志、安全、ORM、框架、测试、部署等工程规范 |
50
+ | `docs/workflow/templates/` | M/L 任务使用的标准 artifact 模板 |
51
+
52
+ ## 3. 跑第一轮本地检查
53
+
54
+ ```bash
55
+ scale preflight --preflight-profile quick
56
+ scale status
57
+ scale assets scan --dir .
58
+ scale standards scan --dir .
59
+ scale runtime doctor --level S
60
+ ```
61
+
62
+ 预期效果:
63
+
64
+ - `preflight` 能说明当前治理文件是否完整。
65
+ - `status` 会告诉 Agent 下一步应该做什么。
66
+ - `assets scan` 会把文档、模板、脚本、报告等资源分类。
67
+ - `standards scan` 会扫描日志噪音、敏感信息、危险输入、测试和架构风险。
68
+ - `runtime doctor` 会检查本地运行时证据目录和最终交付证据状态。
69
+
70
+ ## 4. 建立第一个任务上下文
71
+
72
+ ```bash
73
+ scale context init --name "Scale Demo"
74
+ scale runtime start --session-id 2026-05-18-oauth-hardening --task-id 2026-05-18-oauth-hardening --level M --agent codex
75
+ scale context grill --task-id 2026-05-18-oauth-hardening --task "加固 OAuth callback"
76
+ scale diagnose plan --task-id 2026-05-18-oauth-hardening --symptom "callback 在 state 过期时返回 500"
77
+ scale tdd slice --task-id 2026-05-18-oauth-hardening --behavior "拒绝过期 OAuth state" --public-interface "GET /oauth/callback" --failing-test "expired state returns 401" --test-file tests/oauth.test.ts --impl-files src/oauth.ts
78
+ ```
79
+
80
+ 这些命令的目的不是替代人类判断,而是把 Agent 必须做的思考显式记录下来:
81
+
82
+ - `context grill`:逼 Agent 先澄清上下文、成功标准和风险。
83
+ - `diagnose plan`:遇到问题先诊断,不允许盲修。
84
+ - `tdd slice`:把行为、公共接口、失败测试和实现文件绑定成一个可检查切片。
85
+ - `runtime start`:建立会话 ledger,后续命令、工具和验证证据可以绑定到同一个任务。
86
+
87
+ 完成真实验证后记录运行时证据:
88
+
89
+ ```bash
90
+ scale runtime record --title "quick preflight" --kind command --status passed --command "scale preflight --preflight-profile quick" --exit-code 0 --summary "quick preflight passed"
91
+ scale runtime final-check --task-id 2026-05-18-oauth-hardening --session-id 2026-05-18-oauth-hardening --level M
92
+ scale memory pack --task-id 2026-05-18-oauth-hardening --session-id 2026-05-18-oauth-hardening --task "继续加固 OAuth callback" --level M --budget 4000
93
+ scale memory settle --task-id 2026-05-18-oauth-hardening --session-id 2026-05-18-oauth-hardening --task "继续加固 OAuth callback" --level M
94
+ ```
95
+
96
+ `memory pack` 用来恢复上下文,`memory settle` 用来在任务结束后生成学习候选。候选位于 `.scale/memory/learning-candidates/`,默认本地保留,确认稳定后再人工提升到知识库、规范或模块文档。
97
+
98
+ ## 5. 生成 HTML 交付视图
99
+
100
+ ```bash
101
+ scale artifact render --task-id 2026-05-18-oauth-hardening --artifact-dir docs/worklog/tasks/2026-05-18-oauth-hardening
102
+ scale artifact doctor --artifact-dir docs/worklog/tasks/2026-05-18-oauth-hardening
103
+ scale artifact open --task-id 2026-05-18-oauth-hardening --artifact-dir docs/worklog/tasks/2026-05-18-oauth-hardening
104
+ ```
105
+
106
+ 规则:
107
+
108
+ - Markdown 是长期维护源文件。
109
+ - HTML 是给评审、对比、状态汇报、交付和发版使用的可视化产物。
110
+ - `artifact doctor` 会检查 HTML 是否可追溯、是否引用远程资源、是否可能包含敏感信息。
111
+
112
+ ## 6. 下一步
113
+
114
+ 如果你只是试用,到这里已经能看到 SCALE 的价值:它把 Agent 的工作过程变成了可以审计的证据链。
115
+
116
+ 如果你要接入真实项目,按项目类型选择 governance pack:
117
+
118
+ ```bash
119
+ scale init --governance-pack node-library
120
+ scale init --governance-pack frontend-app
121
+ scale init --governance-pack go-service-matrix
122
+ scale init --governance-pack moe-workspace
123
+ scale init --governance-pack resource-governance
124
+ ```
125
+
126
+ 继续阅读 [官方 Demo Walkthrough](agent-governance-demo.md),看一个真实任务如何从需求到验证证据。
127
+
@@ -0,0 +1,37 @@
1
+ # Agent Governance Demo
2
+
3
+ 这是 SCALE Engine 的最小官方 demo 项目,用来演示 Agent 如何在治理工作流下完成一个安全敏感任务。
4
+
5
+ 业务场景:OAuth callback 必须拒绝过期、已消费或不匹配的 state。
6
+
7
+ ## 运行
8
+
9
+ ```bash
10
+ npm install
11
+ npm test
12
+ ```
13
+
14
+ ## 接入 SCALE
15
+
16
+ ```bash
17
+ scale init --governance-pack node-library
18
+ scale preflight --preflight-profile quick
19
+ scale context init --name "Agent Governance Demo"
20
+ scale runtime start --session-id 2026-05-18-oauth-state --task-id 2026-05-18-oauth-state --level M --agent codex
21
+ scale context grill --task-id 2026-05-18-oauth-state --task "加固 OAuth state 校验"
22
+ scale diagnose plan --task-id 2026-05-18-oauth-state --symptom "OAuth callback 在 state 过期或不匹配时行为不明确"
23
+ scale tdd slice --task-id 2026-05-18-oauth-state --behavior "拒绝过期、已消费或不匹配的 OAuth state" --public-interface "verifyOAuthState(record, providedState, now)" --failing-test "expired, consumed, mismatched state should return ok=false" --test-file tests/oauth-state.test.ts --impl-files src/oauth-state.ts
24
+ scale runtime record --title "demo business tests" --kind command --status passed --command "npm test" --exit-code 0 --summary "official demo OAuth state tests passed"
25
+ scale runtime final-check --task-id 2026-05-18-oauth-state --session-id 2026-05-18-oauth-state --level M
26
+ scale memory pack --task-id 2026-05-18-oauth-state --session-id 2026-05-18-oauth-state --task "加固 OAuth state 校验" --level M --budget 4000
27
+ scale memory settle --task-id 2026-05-18-oauth-state --session-id 2026-05-18-oauth-state --task "加固 OAuth state 校验" --level M
28
+ scale artifact render --task-id 2026-05-18-oauth-state --artifact-dir docs/worklog/tasks/2026-05-18-oauth-state
29
+ scale artifact doctor --artifact-dir docs/worklog/tasks/2026-05-18-oauth-state
30
+ ```
31
+
32
+ ## 看点
33
+
34
+ - 业务逻辑很小,但风险边界明确。
35
+ - 测试覆盖成功、过期、已消费、不匹配和缺失记录。
36
+ - SCALE 命令会生成任务证据、运行证据、记忆候选和 HTML 交付视图,避免 Agent 只口头说“已完成”。
37
+
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "scale-agent-governance-demo",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "scripts": {
7
+ "build": "tsc --noEmit --module NodeNext --moduleResolution NodeNext --target ES2022 src/oauth-state.ts tests/oauth-state.test.ts",
8
+ "lint": "tsc --noEmit --module NodeNext --moduleResolution NodeNext --target ES2022 src/oauth-state.ts tests/oauth-state.test.ts",
9
+ "test": "vitest run"
10
+ },
11
+ "devDependencies": {
12
+ "typescript": "^5.5.0",
13
+ "vitest": "^2.1.9"
14
+ }
15
+ }
16
+
@@ -0,0 +1,39 @@
1
+ export type OAuthStateFailure = 'missing-record' | 'state-mismatch' | 'state-expired' | 'state-consumed'
2
+
3
+ export interface OAuthStateRecord {
4
+ state: string
5
+ userId: string
6
+ expiresAt: number
7
+ consumedAt?: number
8
+ }
9
+
10
+ export interface OAuthStateVerification {
11
+ ok: boolean
12
+ userId?: string
13
+ reason?: OAuthStateFailure
14
+ }
15
+
16
+ export function verifyOAuthState(
17
+ record: OAuthStateRecord | undefined,
18
+ providedState: string,
19
+ now: number = Date.now()
20
+ ): OAuthStateVerification {
21
+ if (!record) {
22
+ return { ok: false, reason: 'missing-record' }
23
+ }
24
+
25
+ if (record.state !== providedState) {
26
+ return { ok: false, reason: 'state-mismatch' }
27
+ }
28
+
29
+ if (record.expiresAt <= now) {
30
+ return { ok: false, reason: 'state-expired' }
31
+ }
32
+
33
+ if (record.consumedAt !== undefined) {
34
+ return { ok: false, reason: 'state-consumed' }
35
+ }
36
+
37
+ return { ok: true, userId: record.userId }
38
+ }
39
+
@@ -0,0 +1,52 @@
1
+ import { describe, expect, it } from 'vitest'
2
+ import { verifyOAuthState, type OAuthStateRecord } from '../src/oauth-state.js'
3
+
4
+ const future = 2_000
5
+ const now = 1_000
6
+
7
+ function record(overrides: Partial<OAuthStateRecord> = {}): OAuthStateRecord {
8
+ return {
9
+ state: 'state-123',
10
+ userId: 'user-1',
11
+ expiresAt: future,
12
+ ...overrides
13
+ }
14
+ }
15
+
16
+ describe('verifyOAuthState', () => {
17
+ it('accepts a valid unexpired state', () => {
18
+ expect(verifyOAuthState(record(), 'state-123', now)).toEqual({
19
+ ok: true,
20
+ userId: 'user-1'
21
+ })
22
+ })
23
+
24
+ it('rejects a missing record', () => {
25
+ expect(verifyOAuthState(undefined, 'state-123', now)).toEqual({
26
+ ok: false,
27
+ reason: 'missing-record'
28
+ })
29
+ })
30
+
31
+ it('rejects a mismatched state', () => {
32
+ expect(verifyOAuthState(record(), 'other-state', now)).toEqual({
33
+ ok: false,
34
+ reason: 'state-mismatch'
35
+ })
36
+ })
37
+
38
+ it('rejects an expired state', () => {
39
+ expect(verifyOAuthState(record({ expiresAt: now }), 'state-123', now)).toEqual({
40
+ ok: false,
41
+ reason: 'state-expired'
42
+ })
43
+ })
44
+
45
+ it('rejects a consumed state', () => {
46
+ expect(verifyOAuthState(record({ consumedAt: 900 }), 'state-123', now)).toEqual({
47
+ ok: false,
48
+ reason: 'state-consumed'
49
+ })
50
+ })
51
+ })
52
+
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@hongmaple0820/scale-engine",
3
- "version": "0.18.0",
4
- "description": "SCALE Engine v0.18.0 - governed HTML artifacts, visual review reports, and traceable Markdown-to-HTML task outputs",
3
+ "version": "0.20.0",
4
+ "description": "Executable AI agent governance with workflow gates, evidence, skill/tool orchestration, and traceable HTML artifacts",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "scale": "dist/api/cli.js"
@@ -15,7 +15,18 @@
15
15
  }
16
16
  },
17
17
  "files": [
18
- "dist"
18
+ "dist",
19
+ "docs/README.md",
20
+ "docs/CODE_INTELLIGENCE.md",
21
+ "docs/CONTEXT_BUDGET.md",
22
+ "docs/WORKFLOW_EVAL.md",
23
+ "docs/SKILL_RADAR.md",
24
+ "docs/MEMORY_BRAIN.md",
25
+ "docs/GOVERNANCE_DASHBOARD.md",
26
+ "docs/MEMORY_FABRIC.md",
27
+ "docs/RUNTIME_EVIDENCE.md",
28
+ "docs/start",
29
+ "examples/demo-projects/agent-governance-demo"
19
30
  ],
20
31
  "publishConfig": {
21
32
  "access": "public"