@hongmaple0820/scale-engine 0.25.0 → 0.26.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 (143) hide show
  1. package/LICENSE +15 -15
  2. package/README.en.md +368 -346
  3. package/README.md +548 -529
  4. package/dist/adapters/AiderAdapter.js +52 -52
  5. package/dist/adapters/AntigravityAdapter.d.ts +4 -0
  6. package/dist/adapters/AntigravityAdapter.js +21 -0
  7. package/dist/adapters/AntigravityAdapter.js.map +1 -0
  8. package/dist/adapters/ClaudeCodeAdapter.d.ts +4 -1
  9. package/dist/adapters/ClaudeCodeAdapter.js +34 -34
  10. package/dist/adapters/ClaudeCodeAdapter.js.map +1 -1
  11. package/dist/adapters/ClineAdapter.d.ts +4 -0
  12. package/dist/adapters/ClineAdapter.js +20 -0
  13. package/dist/adapters/ClineAdapter.js.map +1 -0
  14. package/dist/adapters/CodexAdapter.js +28 -28
  15. package/dist/adapters/CursorAdapter.js +26 -26
  16. package/dist/adapters/DeepSeekTuiAdapter.js +97 -97
  17. package/dist/adapters/DoubaoAdapter.js +33 -33
  18. package/dist/adapters/GeminiAdapter.js +26 -26
  19. package/dist/adapters/GenericProjectAgentAdapter.d.ts +29 -0
  20. package/dist/adapters/GenericProjectAgentAdapter.js +204 -0
  21. package/dist/adapters/GenericProjectAgentAdapter.js.map +1 -0
  22. package/dist/adapters/HermesAdapter.js +26 -26
  23. package/dist/adapters/JCodeAdapter.d.ts +4 -0
  24. package/dist/adapters/JCodeAdapter.js +19 -0
  25. package/dist/adapters/JCodeAdapter.js.map +1 -0
  26. package/dist/adapters/KiloCodeAdapter.d.ts +4 -0
  27. package/dist/adapters/KiloCodeAdapter.js +20 -0
  28. package/dist/adapters/KiloCodeAdapter.js.map +1 -0
  29. package/dist/adapters/KimiAdapter.js +32 -32
  30. package/dist/adapters/KiroAdapter.js +26 -26
  31. package/dist/adapters/OpenClawAdapter.js +26 -26
  32. package/dist/adapters/OpenCodeAdapter.js +26 -26
  33. package/dist/adapters/QCoderAdapter.js +26 -26
  34. package/dist/adapters/QoderAdapter.d.ts +4 -0
  35. package/dist/adapters/QoderAdapter.js +21 -0
  36. package/dist/adapters/QoderAdapter.js.map +1 -0
  37. package/dist/adapters/TraeAdapter.js +26 -26
  38. package/dist/adapters/VSCAdapter.js +26 -26
  39. package/dist/adapters/WindsurfAdapter.js +32 -32
  40. package/dist/adapters/WorkBuddyAdapter.js +26 -26
  41. package/dist/adapters/index.d.ts +5 -0
  42. package/dist/adapters/index.js +15 -0
  43. package/dist/adapters/index.js.map +1 -1
  44. package/dist/api/cli.js +133 -47
  45. package/dist/api/cli.js.map +1 -1
  46. package/dist/api/doctor.js +10 -3
  47. package/dist/api/doctor.js.map +1 -1
  48. package/dist/api/quickstart.js +7 -1
  49. package/dist/api/quickstart.js.map +1 -1
  50. package/dist/artifact/sqliteStore.js +89 -89
  51. package/dist/artifact/types.d.ts +1 -1
  52. package/dist/cli/phaseCommands.js +45 -45
  53. package/dist/context/AntiPatternRegistry.js +20 -20
  54. package/dist/context/ContextBuilder.js +155 -155
  55. package/dist/evolution/EvolutionEngine.js +31 -31
  56. package/dist/evolution/EvolutionEvaluator.d.ts +2 -0
  57. package/dist/evolution/EvolutionEvaluator.js +7 -1
  58. package/dist/evolution/EvolutionEvaluator.js.map +1 -1
  59. package/dist/fsm/FSMAgentBridge.js +11 -11
  60. package/dist/hooks/HookGeneratorEnhanced.js +218 -218
  61. package/dist/index.d.ts +1 -1
  62. package/dist/index.js +2 -2
  63. package/dist/index.js.map +1 -1
  64. package/dist/knowledge/SQLiteKnowledgeBase.js +28 -28
  65. package/dist/memory/MemoryBrain.js +52 -52
  66. package/dist/output/GovernanceDashboard.js +44 -44
  67. package/dist/output/HTMLArtifactLayer.js +31 -31
  68. package/dist/prompts/VibeTemplateGallery.js +121 -121
  69. package/dist/skills/SkillDiscovery.js +12 -1
  70. package/dist/skills/SkillDiscovery.js.map +1 -1
  71. package/dist/skills/routing/SkillPlanner.js +40 -40
  72. package/dist/workflow/EngineeringStandards.js +62 -62
  73. package/dist/workflow/GovernanceTemplatePacks.d.ts +1 -1
  74. package/dist/workflow/GovernanceTemplatePacks.js +1990 -162
  75. package/dist/workflow/GovernanceTemplatePacks.js.map +1 -1
  76. package/dist/workflow/GovernanceTemplates.d.ts +2 -0
  77. package/dist/workflow/GovernanceTemplates.js +1012 -1001
  78. package/dist/workflow/GovernanceTemplates.js.map +1 -1
  79. package/dist/workflow/ResourceGovernance.js +16 -16
  80. package/dist/workflow/TaskArtifactScaffolder.js +10 -10
  81. package/dist/workflow/UpgradeManager.d.ts +3 -2
  82. package/dist/workflow/UpgradeManager.js +134 -49
  83. package/dist/workflow/UpgradeManager.js.map +1 -1
  84. package/dist/workflow/WorkspaceTopology.js +18 -15
  85. package/dist/workflow/WorkspaceTopology.js.map +1 -1
  86. package/docs/ACTIVE_SECURITY_VISUAL_GATES.md +87 -87
  87. package/docs/BACKGROUND_HUNTER.md +62 -62
  88. package/docs/CODE_INTELLIGENCE.md +138 -138
  89. package/docs/CONTEXT_BUDGET.md +113 -113
  90. package/docs/DEPENDENCY_AUDIT.md +89 -89
  91. package/docs/EVOLUTION_SHADOW_MODE.md +63 -63
  92. package/docs/EXTERNAL_REFERENCES.md +63 -58
  93. package/docs/GITLAB_FLOW.md +125 -125
  94. package/docs/GOVERNANCE_DASHBOARD.md +85 -85
  95. package/docs/MEMORY_BRAIN.md +104 -104
  96. package/docs/MEMORY_FABRIC.md +134 -134
  97. package/docs/README.md +101 -92
  98. package/docs/RUNTIME_EVIDENCE.md +101 -101
  99. package/docs/SKILL-REPOSITORY.md +57 -57
  100. package/docs/SKILL_RADAR.md +122 -122
  101. package/docs/THIRD_PARTY_SKILLS.md +57 -57
  102. package/docs/WORKFLOW_EVAL.md +151 -151
  103. package/docs/guides/DEVELOPMENT_WORKFLOW.md +80 -0
  104. package/docs/guides/GETTING_STARTED.md +50 -0
  105. package/docs/start/README.md +78 -72
  106. package/docs/start/agent-governance-demo.md +107 -107
  107. package/docs/start/quickstart.md +137 -127
  108. package/docs/start/workflow-upgrade.md +32 -8
  109. package/docs/workflow/README.md +67 -0
  110. package/docs/workflow/node-library.md +52 -0
  111. package/docs/workflow/templates/api-contract.md +29 -0
  112. package/docs/workflow/templates/architecture-review.md +23 -0
  113. package/docs/workflow/templates/db-change-plan.md +20 -0
  114. package/docs/workflow/templates/docs-impact.md +17 -0
  115. package/docs/workflow/templates/e2e-plan.md +20 -0
  116. package/docs/workflow/templates/explore.md +16 -0
  117. package/docs/workflow/templates/github-actions-scale-preflight.yml +32 -0
  118. package/docs/workflow/templates/mini-prd.md +16 -0
  119. package/docs/workflow/templates/plan.md +37 -0
  120. package/docs/workflow/templates/pre-push-scale-preflight.sh +8 -0
  121. package/docs/workflow/templates/product-smoke.md +61 -0
  122. package/docs/workflow/templates/reality-check.md +28 -0
  123. package/docs/workflow/templates/resource-cleanup.md +17 -0
  124. package/docs/workflow/templates/resource-impact.md +25 -0
  125. package/docs/workflow/templates/review.md +12 -0
  126. package/docs/workflow/templates/runtime.md +23 -0
  127. package/docs/workflow/templates/security-review.md +26 -0
  128. package/docs/workflow/templates/skill-evidence.md +33 -0
  129. package/docs/workflow/templates/skill-plan.md +39 -0
  130. package/docs/workflow/templates/spec.md +17 -0
  131. package/docs/workflow/templates/standards-impact.md +28 -0
  132. package/docs/workflow/templates/summary.md +16 -0
  133. package/docs/workflow/templates/tasks.md +8 -0
  134. package/docs/workflow/templates/ui-spec.md +29 -0
  135. package/docs/workflow/templates/verification.md +20 -0
  136. package/docs/workflow/templates/visual-review.md +20 -0
  137. package/examples/demo-projects/agent-governance-demo/CONTEXT.md +14 -14
  138. package/examples/demo-projects/agent-governance-demo/README.md +48 -48
  139. package/examples/demo-projects/agent-governance-demo/docs/CONTEXT-MAP.md +14 -14
  140. package/examples/demo-projects/agent-governance-demo/package.json +22 -21
  141. package/examples/demo-projects/agent-governance-demo/src/oauth-state.ts +39 -39
  142. package/examples/demo-projects/agent-governance-demo/tests/oauth-state.test.ts +52 -52
  143. package/package.json +88 -78
@@ -0,0 +1,20 @@
1
+ # Visual Review
2
+
3
+ ## Screenshots Or Evidence
4
+
5
+ TBD
6
+
7
+ ## Layout And Responsiveness
8
+
9
+ TBD
10
+
11
+ ## Text Fit And Overlap
12
+
13
+ TBD
14
+
15
+ ## Accessibility Notes
16
+
17
+ TBD
18
+
19
+ ## Final Verdict
20
+ TBD
@@ -1,14 +1,14 @@
1
- # CONTEXT.md
2
-
3
- Project: Agent Governance Demo
4
-
5
- | Term | Definition | Examples | Aliases | Source |
6
- |------|------------|----------|---------|--------|
7
- | OAuth state | One-time callback correlation value that binds authorization return traffic to a user session | `state-123` | callback state | `src/oauth-state.ts` |
8
- | Consumed state | A state record that has already been used and must not be accepted again | `consumedAt: 900` | replayed state | `tests/oauth-state.test.ts` |
9
- | Evidence | A command result or artifact that proves what was verified | `npm test`, eval report, dashboard | verification proof | SCALE workflow |
10
-
11
- ## Rejected Meanings
12
-
13
- - Do not treat an expired state as recoverable without a new authorization flow.
14
- - Do not treat a dashboard or eval report as a substitute for the business test.
1
+ # CONTEXT.md
2
+
3
+ Project: Agent Governance Demo
4
+
5
+ | Term | Definition | Examples | Aliases | Source |
6
+ |------|------------|----------|---------|--------|
7
+ | OAuth state | One-time callback correlation value that binds authorization return traffic to a user session | `state-123` | callback state | `src/oauth-state.ts` |
8
+ | Consumed state | A state record that has already been used and must not be accepted again | `consumedAt: 900` | replayed state | `tests/oauth-state.test.ts` |
9
+ | Evidence | A command result or artifact that proves what was verified | `npm test`, eval report, dashboard | verification proof | SCALE workflow |
10
+
11
+ ## Rejected Meanings
12
+
13
+ - Do not treat an expired state as recoverable without a new authorization flow.
14
+ - Do not treat a dashboard or eval report as a substitute for the business test.
@@ -1,48 +1,48 @@
1
- # Agent Governance Demo
2
-
3
- 这是 SCALE Engine 的最小官方 demo 项目,用一个 OAuth state 校验场景展示 Agent 工程治理如何落到真实代码、测试、证据和报告里。
4
-
5
- 业务目标很小:OAuth callback 必须拒绝缺失、过期、已消费或不匹配的 state。
6
-
7
- 治理目标更重要:Agent 不能只说“我完成了”,必须留下可验证证据。
8
-
9
- ## 快速运行
10
-
11
- ```bash
12
- npm install
13
- npm test
14
- ```
15
-
16
- ## 一键治理烟测
17
-
18
- ```bash
19
- npm run workflow:smoke
20
- ```
21
-
22
- 这个命令会依次运行:
23
-
24
- - `npm test`:验证业务行为。
25
- - `scale eval run --dir .`:运行工作流基线评测。
26
- - `scale context budget --dir .`:检查上下文预算,避免无节制读取。
27
- - `scale artifact dashboard --dir . --lang zh`:生成本地治理 HTML 看板。
28
-
29
- ## 适合演示的 SCALE 命令
30
-
31
- ```bash
32
- scale governance mode --task "修复 OAuth state 校验绕过问题" --files "src/oauth-state.ts,tests/oauth-state.test.ts"
33
- scale skill radar --dir . --task "修复 OAuth state 校验绕过问题" --phase verify --level M --files "src/oauth-state.ts,tests/oauth-state.test.ts"
34
- scale codegraph status --dir .
35
- scale eval run --dir .
36
- scale artifact dashboard --dir . --lang zh
37
- ```
38
-
39
- ## 观察点
40
-
41
- - `src/oauth-state.ts` 保持很小,便于核对 Agent 是否过度设计。
42
- - `tests/oauth-state.test.ts` 覆盖成功、缺失、过期、已消费和不匹配 state。
43
- - `CONTEXT.md` 和 `docs/CONTEXT-MAP.md` 只提供必要上下文,避免 demo 自己变成 token 污染源。
44
- - `.scale/evals/suites/workflow-baseline.json` 可由 `scale eval init --dir .` 重新生成。
45
-
46
- ## 这不是业务模板
47
-
48
- 这个 demo 不是 OAuth 产品模板,而是治理闭环模板。真实项目接入时,应保留 SCALE 的证据、评测、上下文预算和看板机制,再替换成自己的业务代码、服务矩阵和验证脚本。
1
+ # Agent Governance Demo
2
+
3
+ 这是 SCALE Engine 的最小官方 demo 项目,用一个 OAuth state 校验场景展示 Agent 工程治理如何落到真实代码、测试、证据和报告里。
4
+
5
+ 业务目标很小:OAuth callback 必须拒绝缺失、过期、已消费或不匹配的 state。
6
+
7
+ 治理目标更重要:Agent 不能只说“我完成了”,必须留下可验证证据。
8
+
9
+ ## 快速运行
10
+
11
+ ```bash
12
+ npm install
13
+ npm test
14
+ ```
15
+
16
+ ## 一键治理烟测
17
+
18
+ ```bash
19
+ npm run workflow:smoke
20
+ ```
21
+
22
+ 这个命令会依次运行:
23
+
24
+ - `npm test`:验证业务行为。
25
+ - `scale eval run --dir .`:运行工作流基线评测。
26
+ - `scale context budget --dir .`:检查上下文预算,避免无节制读取。
27
+ - `scale artifact dashboard --dir . --lang zh`:生成本地治理 HTML 看板。
28
+
29
+ ## 适合演示的 SCALE 命令
30
+
31
+ ```bash
32
+ scale governance mode --task "修复 OAuth state 校验绕过问题" --files "src/oauth-state.ts,tests/oauth-state.test.ts"
33
+ scale skill radar --dir . --task "修复 OAuth state 校验绕过问题" --phase verify --level M --files "src/oauth-state.ts,tests/oauth-state.test.ts"
34
+ scale codegraph status --dir .
35
+ scale eval run --dir .
36
+ scale artifact dashboard --dir . --lang zh
37
+ ```
38
+
39
+ ## 观察点
40
+
41
+ - `src/oauth-state.ts` 保持很小,便于核对 Agent 是否过度设计。
42
+ - `tests/oauth-state.test.ts` 覆盖成功、缺失、过期、已消费和不匹配 state。
43
+ - `CONTEXT.md` 和 `docs/CONTEXT-MAP.md` 只提供必要上下文,避免 demo 自己变成 token 污染源。
44
+ - `.scale/evals/suites/workflow-baseline.json` 可由 `scale eval init --dir .` 重新生成。
45
+
46
+ ## 这不是业务模板
47
+
48
+ 这个 demo 不是 OAuth 产品模板,而是治理闭环模板。真实项目接入时,应保留 SCALE 的证据、评测、上下文预算和看板机制,再替换成自己的业务代码、服务矩阵和验证脚本。
@@ -1,14 +1,14 @@
1
- # CONTEXT-MAP.md
2
-
3
- Project: Agent Governance Demo
4
-
5
- | Module | Owner | Product Doc | Architecture Doc |
6
- | --- | --- | --- | --- |
7
- | OAuth state verifier | SCALE demo | `README.md` | `src/oauth-state.ts` |
8
- | Workflow evidence | SCALE demo | `README.md` | `.scale/evals/suites/workflow-baseline.json` |
9
-
10
- ## Cross-Module Rules
11
-
12
- - Behavior changes in `src/oauth-state.ts` must update `tests/oauth-state.test.ts`.
13
- - Workflow command changes must update `README.md`.
14
- - Generated reports under `.scale/reports/` are review artifacts, not source of truth.
1
+ # CONTEXT-MAP.md
2
+
3
+ Project: Agent Governance Demo
4
+
5
+ | Module | Owner | Product Doc | Architecture Doc |
6
+ | --- | --- | --- | --- |
7
+ | OAuth state verifier | SCALE demo | `README.md` | `src/oauth-state.ts` |
8
+ | Workflow evidence | SCALE demo | `README.md` | `.scale/evals/suites/workflow-baseline.json` |
9
+
10
+ ## Cross-Module Rules
11
+
12
+ - Behavior changes in `src/oauth-state.ts` must update `tests/oauth-state.test.ts`.
13
+ - Workflow command changes must update `README.md`.
14
+ - Generated reports under `.scale/reports/` are review artifacts, not source of truth.
@@ -1,21 +1,22 @@
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
- "scale:eval": "scale eval run --dir .",
11
- "scale:budget": "scale context budget --dir .",
12
- "scale:dashboard": "scale artifact dashboard --dir . --lang zh",
13
- "workflow:smoke": "npm test && npm run scale:eval && npm run scale:budget && npm run scale:dashboard"
14
- },
15
- "devDependencies": {
16
- "@hongmaple0820/scale-engine": "^0.20.0",
17
- "typescript": "^5.5.0",
18
- "vitest": "^2.1.9"
19
- }
20
- }
21
-
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
+ "scale:eval": "scale eval run --dir .",
11
+ "scale:budget": "scale context budget --dir .",
12
+ "scale:dashboard": "scale artifact dashboard --dir . --lang zh",
13
+ "workflow:smoke": "npm test && npm run scale:eval && npm run scale:budget && npm run scale:dashboard"
14
+ },
15
+ "devDependencies": {
16
+ "@hongmaple0820/scale-engine": "^0.20.0",
17
+ "@types/node": "^20.14.0",
18
+ "typescript": "^5.5.0",
19
+ "vitest": "^2.1.9"
20
+ }
21
+ }
22
+
@@ -1,39 +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
-
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
+
@@ -1,52 +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
-
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,78 +1,88 @@
1
- {
2
- "name": "@hongmaple0820/scale-engine",
3
- "version": "0.25.0",
4
- "description": "Executable AI agent governance with workflow gates, evidence, skill/tool orchestration, and traceable HTML artifacts",
5
- "type": "module",
6
- "bin": {
7
- "scale": "dist/api/cli.js"
8
- },
9
- "main": "./dist/index.js",
10
- "types": "./dist/index.d.ts",
11
- "exports": {
12
- ".": {
13
- "types": "./dist/index.d.ts",
14
- "import": "./dist/index.js"
15
- }
16
- },
17
- "files": [
18
- "dist",
19
- "docs/README.md",
20
- "docs/CODE_INTELLIGENCE.md",
21
- "docs/CONTEXT_BUDGET.md",
22
- "docs/BACKGROUND_HUNTER.md",
23
- "docs/DEPENDENCY_AUDIT.md",
24
- "docs/ACTIVE_SECURITY_VISUAL_GATES.md",
25
- "docs/EVOLUTION_SHADOW_MODE.md",
26
- "docs/WORKFLOW_EVAL.md",
27
- "docs/SKILL_RADAR.md",
28
- "docs/SKILL-REPOSITORY.md",
29
- "docs/THIRD_PARTY_SKILLS.md",
30
- "docs/EXTERNAL_REFERENCES.md",
31
- "docs/MEMORY_BRAIN.md",
32
- "docs/GOVERNANCE_DASHBOARD.md",
33
- "docs/GITLAB_FLOW.md",
34
- "docs/MEMORY_FABRIC.md",
35
- "docs/RUNTIME_EVIDENCE.md",
36
- "docs/RESOURCE_GOVERNANCE.md",
37
- "docs/start",
38
- "image",
39
- "examples/demo-projects/agent-governance-demo"
40
- ],
41
- "publishConfig": {
42
- "access": "public"
43
- },
44
- "scripts": {
45
- "build": "tsc",
46
- "dev": "bun --watch src/api/cli.ts",
47
- "test": "vitest run --reporter dot --pool=forks --poolOptions.forks.maxForks=1 --poolOptions.forks.minForks=1",
48
- "typecheck": "tsc --noEmit",
49
- "lint": "eslint src/**/*.ts",
50
- "mcp": "node dist/api/mcp.js",
51
- "serve": "node dist/api/http.js"
52
- },
53
- "dependencies": {
54
- "@modelcontextprotocol/sdk": "^1.0.0",
55
- "better-sqlite3": "^11.10.0",
56
- "chokidar": "^3.6.0",
57
- "citty": "^0.1.6",
58
- "execa": "^9.3.0",
59
- "hono": "^4.5.0",
60
- "js-yaml": "^4.1.0",
61
- "pino": "^9.3.0",
62
- "pino-pretty": "^11.2.0",
63
- "zod": "^3.23.0"
64
- },
65
- "devDependencies": {
66
- "@types/better-sqlite3": "^7.6.0",
67
- "@types/js-yaml": "^4.0.9",
68
- "@types/node": "^20.14.0",
69
- "@typescript-eslint/parser": "^8.59.3",
70
- "eslint": "^9.0.0",
71
- "tsx": "^4.21.0",
72
- "typescript": "^5.5.0",
73
- "vitest": "^2.0.0"
74
- },
75
- "engines": {
76
- "node": ">=20.0.0"
77
- }
78
- }
1
+ {
2
+ "name": "@hongmaple0820/scale-engine",
3
+ "version": "0.26.0",
4
+ "description": "Executable AI agent governance with workflow gates, evidence, skill/tool orchestration, and traceable HTML artifacts",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/hongmaple0820/scale-engine.git"
8
+ },
9
+ "bugs": {
10
+ "url": "https://github.com/hongmaple0820/scale-engine/issues"
11
+ },
12
+ "homepage": "https://github.com/hongmaple0820/scale-engine#readme",
13
+ "type": "module",
14
+ "bin": {
15
+ "scale": "dist/api/cli.js"
16
+ },
17
+ "main": "./dist/index.js",
18
+ "types": "./dist/index.d.ts",
19
+ "exports": {
20
+ ".": {
21
+ "types": "./dist/index.d.ts",
22
+ "import": "./dist/index.js"
23
+ }
24
+ },
25
+ "files": [
26
+ "dist",
27
+ "docs/README.md",
28
+ "docs/CODE_INTELLIGENCE.md",
29
+ "docs/CONTEXT_BUDGET.md",
30
+ "docs/BACKGROUND_HUNTER.md",
31
+ "docs/DEPENDENCY_AUDIT.md",
32
+ "docs/ACTIVE_SECURITY_VISUAL_GATES.md",
33
+ "docs/EVOLUTION_SHADOW_MODE.md",
34
+ "docs/WORKFLOW_EVAL.md",
35
+ "docs/SKILL_RADAR.md",
36
+ "docs/SKILL-REPOSITORY.md",
37
+ "docs/THIRD_PARTY_SKILLS.md",
38
+ "docs/EXTERNAL_REFERENCES.md",
39
+ "docs/MEMORY_BRAIN.md",
40
+ "docs/GOVERNANCE_DASHBOARD.md",
41
+ "docs/GITLAB_FLOW.md",
42
+ "docs/MEMORY_FABRIC.md",
43
+ "docs/RUNTIME_EVIDENCE.md",
44
+ "docs/RESOURCE_GOVERNANCE.md",
45
+ "docs/guides",
46
+ "docs/start",
47
+ "docs/workflow",
48
+ "image",
49
+ "examples/demo-projects/agent-governance-demo"
50
+ ],
51
+ "publishConfig": {
52
+ "access": "public"
53
+ },
54
+ "scripts": {
55
+ "build": "tsc",
56
+ "dev": "bun --watch src/api/cli.ts",
57
+ "test": "vitest run --reporter dot --pool=forks --poolOptions.forks.maxForks=1 --poolOptions.forks.minForks=1",
58
+ "typecheck": "tsc --noEmit",
59
+ "lint": "eslint src/**/*.ts",
60
+ "mcp": "node dist/api/mcp.js",
61
+ "serve": "node dist/api/http.js"
62
+ },
63
+ "dependencies": {
64
+ "@modelcontextprotocol/sdk": "^1.0.0",
65
+ "better-sqlite3": "^11.10.0",
66
+ "chokidar": "^3.6.0",
67
+ "citty": "^0.1.6",
68
+ "execa": "^9.3.0",
69
+ "hono": "^4.5.0",
70
+ "js-yaml": "^4.1.0",
71
+ "pino": "^9.3.0",
72
+ "pino-pretty": "^11.2.0",
73
+ "zod": "^3.23.0"
74
+ },
75
+ "devDependencies": {
76
+ "@types/better-sqlite3": "^7.6.0",
77
+ "@types/js-yaml": "^4.0.9",
78
+ "@types/node": "^20.14.0",
79
+ "@typescript-eslint/parser": "^8.59.3",
80
+ "eslint": "^9.0.0",
81
+ "tsx": "^4.21.0",
82
+ "typescript": "^5.5.0",
83
+ "vitest": "^2.0.0"
84
+ },
85
+ "engines": {
86
+ "node": ">=20.0.0"
87
+ }
88
+ }