moflo 4.8.21 → 4.8.22

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 (260) hide show
  1. package/.claude/agents/browser/browser-agent.yaml +182 -182
  2. package/.claude/agents/core/coder.md +265 -265
  3. package/.claude/agents/core/planner.md +167 -167
  4. package/.claude/agents/core/researcher.md +189 -189
  5. package/.claude/agents/core/reviewer.md +325 -325
  6. package/.claude/agents/core/tester.md +318 -318
  7. package/.claude/agents/database-specialist.yaml +21 -21
  8. package/.claude/agents/dual-mode/codex-coordinator.md +224 -224
  9. package/.claude/agents/dual-mode/codex-worker.md +211 -211
  10. package/.claude/agents/dual-mode/dual-orchestrator.md +291 -291
  11. package/.claude/agents/github/code-review-swarm.md +537 -537
  12. package/.claude/agents/github/github-modes.md +172 -172
  13. package/.claude/agents/github/issue-tracker.md +318 -318
  14. package/.claude/agents/github/multi-repo-swarm.md +552 -552
  15. package/.claude/agents/github/pr-manager.md +190 -190
  16. package/.claude/agents/github/project-board-sync.md +508 -508
  17. package/.claude/agents/github/release-manager.md +366 -366
  18. package/.claude/agents/github/release-swarm.md +582 -582
  19. package/.claude/agents/github/repo-architect.md +397 -397
  20. package/.claude/agents/github/swarm-issue.md +572 -572
  21. package/.claude/agents/github/swarm-pr.md +427 -427
  22. package/.claude/agents/github/sync-coordinator.md +451 -451
  23. package/.claude/agents/github/workflow-automation.md +634 -634
  24. package/.claude/agents/goal/code-goal-planner.md +445 -445
  25. package/.claude/agents/hive-mind/collective-intelligence-coordinator.md +129 -129
  26. package/.claude/agents/hive-mind/queen-coordinator.md +202 -202
  27. package/.claude/agents/hive-mind/scout-explorer.md +241 -241
  28. package/.claude/agents/hive-mind/swarm-memory-manager.md +192 -192
  29. package/.claude/agents/hive-mind/worker-specialist.md +216 -216
  30. package/.claude/agents/index.yaml +17 -17
  31. package/.claude/agents/neural/safla-neural.md +73 -73
  32. package/.claude/agents/project-coordinator.yaml +15 -15
  33. package/.claude/agents/python-specialist.yaml +21 -21
  34. package/.claude/agents/reasoning/goal-planner.md +72 -72
  35. package/.claude/agents/security-auditor.yaml +20 -20
  36. package/.claude/agents/swarm/adaptive-coordinator.md +395 -395
  37. package/.claude/agents/swarm/hierarchical-coordinator.md +326 -326
  38. package/.claude/agents/swarm/mesh-coordinator.md +391 -391
  39. package/.claude/agents/templates/migration-plan.md +745 -745
  40. package/.claude/agents/typescript-specialist.yaml +21 -21
  41. package/.claude/checkpoints/1767754460.json +8 -8
  42. package/.claude/commands/agents/agent-spawning.md +28 -28
  43. package/.claude/commands/github/github-modes.md +146 -146
  44. package/.claude/commands/github/github-swarm.md +121 -121
  45. package/.claude/commands/github/issue-tracker.md +291 -291
  46. package/.claude/commands/github/pr-manager.md +169 -169
  47. package/.claude/commands/github/release-manager.md +337 -337
  48. package/.claude/commands/github/repo-architect.md +366 -366
  49. package/.claude/commands/github/sync-coordinator.md +300 -300
  50. package/.claude/commands/memory/neural.md +47 -47
  51. package/.claude/commands/sparc/analyzer.md +51 -51
  52. package/.claude/commands/sparc/architect.md +53 -53
  53. package/.claude/commands/sparc/ask.md +97 -97
  54. package/.claude/commands/sparc/batch-executor.md +54 -54
  55. package/.claude/commands/sparc/code.md +89 -89
  56. package/.claude/commands/sparc/coder.md +54 -54
  57. package/.claude/commands/sparc/debug.md +83 -83
  58. package/.claude/commands/sparc/debugger.md +54 -54
  59. package/.claude/commands/sparc/designer.md +53 -53
  60. package/.claude/commands/sparc/devops.md +109 -109
  61. package/.claude/commands/sparc/docs-writer.md +80 -80
  62. package/.claude/commands/sparc/documenter.md +54 -54
  63. package/.claude/commands/sparc/innovator.md +54 -54
  64. package/.claude/commands/sparc/integration.md +83 -83
  65. package/.claude/commands/sparc/mcp.md +117 -117
  66. package/.claude/commands/sparc/memory-manager.md +54 -54
  67. package/.claude/commands/sparc/optimizer.md +54 -54
  68. package/.claude/commands/sparc/orchestrator.md +131 -131
  69. package/.claude/commands/sparc/post-deployment-monitoring-mode.md +83 -83
  70. package/.claude/commands/sparc/refinement-optimization-mode.md +83 -83
  71. package/.claude/commands/sparc/researcher.md +54 -54
  72. package/.claude/commands/sparc/reviewer.md +54 -54
  73. package/.claude/commands/sparc/security-review.md +80 -80
  74. package/.claude/commands/sparc/sparc-modes.md +174 -174
  75. package/.claude/commands/sparc/sparc.md +111 -111
  76. package/.claude/commands/sparc/spec-pseudocode.md +80 -80
  77. package/.claude/commands/sparc/supabase-admin.md +348 -348
  78. package/.claude/commands/sparc/swarm-coordinator.md +54 -54
  79. package/.claude/commands/sparc/tdd.md +54 -54
  80. package/.claude/commands/sparc/tester.md +54 -54
  81. package/.claude/commands/sparc/tutorial.md +79 -79
  82. package/.claude/commands/sparc/workflow-manager.md +54 -54
  83. package/.claude/commands/sparc.md +166 -166
  84. package/.claude/commands/swarm/analysis.md +95 -95
  85. package/.claude/commands/swarm/development.md +96 -96
  86. package/.claude/commands/swarm/examples.md +168 -168
  87. package/.claude/commands/swarm/maintenance.md +102 -102
  88. package/.claude/commands/swarm/optimization.md +117 -117
  89. package/.claude/commands/swarm/research.md +136 -136
  90. package/.claude/commands/swarm/testing.md +131 -131
  91. package/.claude/commands/workflows/development.md +77 -77
  92. package/.claude/commands/workflows/research.md +62 -62
  93. package/.claude/guidance/moflo-bootstrap.md +126 -126
  94. package/.claude/guidance/shipped/agent-bootstrap.md +126 -126
  95. package/.claude/guidance/shipped/guidance-memory-strategy.md +262 -262
  96. package/.claude/guidance/shipped/memory-strategy.md +204 -204
  97. package/.claude/guidance/shipped/moflo.md +668 -653
  98. package/.claude/guidance/shipped/task-swarm-integration.md +441 -441
  99. package/.claude/helpers/intelligence.cjs +207 -207
  100. package/.claude/helpers/statusline.cjs +851 -851
  101. package/.claude/settings.local.json +18 -0
  102. package/.claude/skills/fl/SKILL.md +583 -583
  103. package/.claude/skills/flo/SKILL.md +583 -583
  104. package/.claude/skills/github-code-review/SKILL.md +1140 -1140
  105. package/.claude/skills/github-multi-repo/SKILL.md +874 -874
  106. package/.claude/skills/github-project-management/SKILL.md +1277 -1277
  107. package/.claude/skills/github-release-management/SKILL.md +1081 -1081
  108. package/.claude/skills/github-workflow-automation/SKILL.md +1065 -1065
  109. package/.claude/skills/hive-mind-advanced/SKILL.md +712 -712
  110. package/.claude/skills/hooks-automation/SKILL.md +1201 -1201
  111. package/.claude/skills/performance-analysis/SKILL.md +563 -563
  112. package/.claude/skills/sparc-methodology/SKILL.md +1115 -1115
  113. package/.claude/skills/swarm-advanced/SKILL.md +973 -973
  114. package/.claude/workflow-state.json +4 -4
  115. package/LICENSE +21 -21
  116. package/README.md +685 -685
  117. package/bin/cli.js +0 -0
  118. package/bin/gate-hook.mjs +50 -50
  119. package/bin/gate.cjs +138 -138
  120. package/bin/generate-code-map.mjs +775 -775
  121. package/bin/hook-handler.cjs +83 -83
  122. package/bin/hooks.mjs +656 -656
  123. package/bin/index-guidance.mjs +892 -892
  124. package/bin/index-tests.mjs +709 -709
  125. package/bin/lib/process-manager.mjs +243 -243
  126. package/bin/lib/registry-cleanup.cjs +41 -41
  127. package/bin/prompt-hook.mjs +72 -72
  128. package/bin/semantic-search.mjs +472 -472
  129. package/bin/session-start-launcher.mjs +238 -238
  130. package/bin/setup-project.mjs +250 -250
  131. package/package.json +123 -123
  132. package/src/@claude-flow/cli/README.md +452 -452
  133. package/src/@claude-flow/cli/bin/cli.js +180 -180
  134. package/src/@claude-flow/cli/bin/preinstall.cjs +2 -2
  135. package/src/@claude-flow/cli/dist/src/commands/completions.js +409 -409
  136. package/src/@claude-flow/cli/dist/src/commands/doctor.js +5 -1
  137. package/src/@claude-flow/cli/dist/src/commands/embeddings.js +25 -25
  138. package/src/@claude-flow/cli/dist/src/commands/github.js +61 -61
  139. package/src/@claude-flow/cli/dist/src/commands/hive-mind.js +90 -90
  140. package/src/@claude-flow/cli/dist/src/commands/hooks.js +9 -9
  141. package/src/@claude-flow/cli/dist/src/commands/ruvector/import.js +14 -14
  142. package/src/@claude-flow/cli/dist/src/commands/ruvector/setup.js +624 -624
  143. package/src/@claude-flow/cli/dist/src/config/moflo-config.d.ts +3 -0
  144. package/src/@claude-flow/cli/dist/src/config/moflo-config.js +101 -91
  145. package/src/@claude-flow/cli/dist/src/index.d.ts +5 -0
  146. package/src/@claude-flow/cli/dist/src/index.js +44 -0
  147. package/src/@claude-flow/cli/dist/src/init/claudemd-generator.d.ts +29 -29
  148. package/src/@claude-flow/cli/dist/src/init/claudemd-generator.js +43 -43
  149. package/src/@claude-flow/cli/dist/src/init/executor.js +453 -453
  150. package/src/@claude-flow/cli/dist/src/init/helpers-generator.js +482 -482
  151. package/src/@claude-flow/cli/dist/src/init/moflo-init.d.ts +30 -30
  152. package/src/@claude-flow/cli/dist/src/init/moflo-init.js +140 -140
  153. package/src/@claude-flow/cli/dist/src/init/statusline-generator.js +876 -876
  154. package/src/@claude-flow/cli/dist/src/memory/memory-initializer.js +371 -371
  155. package/src/@claude-flow/cli/dist/src/runtime/headless.js +28 -28
  156. package/src/@claude-flow/cli/dist/src/services/container-worker-pool.d.ts +197 -0
  157. package/src/@claude-flow/cli/dist/src/services/container-worker-pool.js +584 -0
  158. package/src/@claude-flow/cli/dist/src/services/daemon-lock.d.ts +14 -0
  159. package/src/@claude-flow/cli/dist/src/services/daemon-lock.js +1 -1
  160. package/src/@claude-flow/cli/dist/src/services/headless-worker-executor.js +84 -84
  161. package/src/@claude-flow/cli/package.json +1 -1
  162. package/src/@claude-flow/guidance/README.md +1195 -1195
  163. package/src/@claude-flow/guidance/package.json +198 -198
  164. package/src/@claude-flow/memory/README.md +587 -587
  165. package/src/@claude-flow/memory/dist/agent-memory-scope.test.js +4 -7
  166. package/src/@claude-flow/memory/dist/agentdb-backend.d.ts +2 -0
  167. package/src/@claude-flow/memory/dist/agentdb-backend.js +28 -26
  168. package/src/@claude-flow/memory/dist/auto-memory-bridge.test.js +36 -39
  169. package/src/@claude-flow/memory/dist/benchmark.test.js +1 -1
  170. package/src/@claude-flow/memory/dist/controller-registry.test.js +43 -0
  171. package/src/@claude-flow/memory/dist/database-provider.d.ts +2 -2
  172. package/src/@claude-flow/memory/dist/database-provider.js +6 -3
  173. package/src/@claude-flow/memory/dist/database-provider.test.js +1 -3
  174. package/src/@claude-flow/memory/dist/hybrid-backend.d.ts +245 -0
  175. package/src/@claude-flow/memory/dist/hybrid-backend.js +569 -0
  176. package/src/@claude-flow/memory/dist/hybrid-backend.test.d.ts +8 -0
  177. package/src/@claude-flow/memory/dist/hybrid-backend.test.js +320 -0
  178. package/src/@claude-flow/memory/dist/index.d.ts +3 -0
  179. package/src/@claude-flow/memory/dist/index.js +3 -0
  180. package/src/@claude-flow/memory/dist/sqlite-backend.d.ts +121 -0
  181. package/src/@claude-flow/memory/dist/sqlite-backend.js +572 -0
  182. package/src/@claude-flow/memory/dist/sqljs-backend.d.ts +4 -3
  183. package/src/@claude-flow/memory/dist/sqljs-backend.js +31 -30
  184. package/src/@claude-flow/memory/package.json +44 -44
  185. package/src/@claude-flow/shared/README.md +323 -323
  186. package/src/@claude-flow/shared/dist/core/config/defaults.js +1 -1
  187. package/src/@claude-flow/shared/dist/core/config/loader.js +1 -1
  188. package/src/@claude-flow/shared/dist/core/config/schema.js +1 -1
  189. package/src/@claude-flow/shared/dist/events/event-store.js +34 -50
  190. package/src/@claude-flow/shared/dist/events/event-store.test.js +4 -8
  191. package/src/@claude-flow/shared/dist/hooks/executor.js +4 -7
  192. package/src/@claude-flow/shared/dist/hooks/safety/file-organization.js +1 -1
  193. package/src/@claude-flow/shared/dist/hooks/safety/git-commit.js +3 -3
  194. package/src/@claude-flow/shared/dist/hooks/verify-exports.test.js +6 -6
  195. package/src/@claude-flow/shared/dist/utils/secure-logger.js +1 -1
  196. package/src/README.md +493 -493
  197. package/src/@claude-flow/guidance/dist/adversarial.d.ts +0 -284
  198. package/src/@claude-flow/guidance/dist/adversarial.js +0 -572
  199. package/src/@claude-flow/guidance/dist/analyzer.d.ts +0 -530
  200. package/src/@claude-flow/guidance/dist/analyzer.js +0 -2518
  201. package/src/@claude-flow/guidance/dist/artifacts.d.ts +0 -283
  202. package/src/@claude-flow/guidance/dist/artifacts.js +0 -356
  203. package/src/@claude-flow/guidance/dist/authority.d.ts +0 -290
  204. package/src/@claude-flow/guidance/dist/authority.js +0 -558
  205. package/src/@claude-flow/guidance/dist/capabilities.d.ts +0 -209
  206. package/src/@claude-flow/guidance/dist/capabilities.js +0 -485
  207. package/src/@claude-flow/guidance/dist/coherence.d.ts +0 -233
  208. package/src/@claude-flow/guidance/dist/coherence.js +0 -372
  209. package/src/@claude-flow/guidance/dist/compiler.d.ts +0 -87
  210. package/src/@claude-flow/guidance/dist/compiler.js +0 -419
  211. package/src/@claude-flow/guidance/dist/conformance-kit.d.ts +0 -225
  212. package/src/@claude-flow/guidance/dist/conformance-kit.js +0 -629
  213. package/src/@claude-flow/guidance/dist/continue-gate.d.ts +0 -214
  214. package/src/@claude-flow/guidance/dist/continue-gate.js +0 -353
  215. package/src/@claude-flow/guidance/dist/crypto-utils.d.ts +0 -17
  216. package/src/@claude-flow/guidance/dist/crypto-utils.js +0 -24
  217. package/src/@claude-flow/guidance/dist/evolution.d.ts +0 -282
  218. package/src/@claude-flow/guidance/dist/evolution.js +0 -500
  219. package/src/@claude-flow/guidance/dist/gates.d.ts +0 -79
  220. package/src/@claude-flow/guidance/dist/gates.js +0 -302
  221. package/src/@claude-flow/guidance/dist/gateway.d.ts +0 -206
  222. package/src/@claude-flow/guidance/dist/gateway.js +0 -452
  223. package/src/@claude-flow/guidance/dist/generators.d.ts +0 -153
  224. package/src/@claude-flow/guidance/dist/generators.js +0 -682
  225. package/src/@claude-flow/guidance/dist/headless.d.ts +0 -177
  226. package/src/@claude-flow/guidance/dist/headless.js +0 -342
  227. package/src/@claude-flow/guidance/dist/hooks.d.ts +0 -109
  228. package/src/@claude-flow/guidance/dist/hooks.js +0 -347
  229. package/src/@claude-flow/guidance/dist/index.d.ts +0 -205
  230. package/src/@claude-flow/guidance/dist/index.js +0 -321
  231. package/src/@claude-flow/guidance/dist/ledger.d.ts +0 -162
  232. package/src/@claude-flow/guidance/dist/ledger.js +0 -375
  233. package/src/@claude-flow/guidance/dist/manifest-validator.d.ts +0 -289
  234. package/src/@claude-flow/guidance/dist/manifest-validator.js +0 -838
  235. package/src/@claude-flow/guidance/dist/memory-gate.d.ts +0 -222
  236. package/src/@claude-flow/guidance/dist/memory-gate.js +0 -382
  237. package/src/@claude-flow/guidance/dist/meta-governance.d.ts +0 -265
  238. package/src/@claude-flow/guidance/dist/meta-governance.js +0 -348
  239. package/src/@claude-flow/guidance/dist/optimizer.d.ts +0 -104
  240. package/src/@claude-flow/guidance/dist/optimizer.js +0 -329
  241. package/src/@claude-flow/guidance/dist/persistence.d.ts +0 -189
  242. package/src/@claude-flow/guidance/dist/persistence.js +0 -464
  243. package/src/@claude-flow/guidance/dist/proof.d.ts +0 -185
  244. package/src/@claude-flow/guidance/dist/proof.js +0 -238
  245. package/src/@claude-flow/guidance/dist/retriever.d.ts +0 -116
  246. package/src/@claude-flow/guidance/dist/retriever.js +0 -394
  247. package/src/@claude-flow/guidance/dist/ruvbot-integration.d.ts +0 -370
  248. package/src/@claude-flow/guidance/dist/ruvbot-integration.js +0 -738
  249. package/src/@claude-flow/guidance/dist/temporal.d.ts +0 -426
  250. package/src/@claude-flow/guidance/dist/temporal.js +0 -658
  251. package/src/@claude-flow/guidance/dist/trust.d.ts +0 -283
  252. package/src/@claude-flow/guidance/dist/trust.js +0 -473
  253. package/src/@claude-flow/guidance/dist/truth-anchors.d.ts +0 -276
  254. package/src/@claude-flow/guidance/dist/truth-anchors.js +0 -488
  255. package/src/@claude-flow/guidance/dist/types.d.ts +0 -378
  256. package/src/@claude-flow/guidance/dist/types.js +0 -10
  257. package/src/@claude-flow/guidance/dist/uncertainty.d.ts +0 -372
  258. package/src/@claude-flow/guidance/dist/uncertainty.js +0 -619
  259. package/src/@claude-flow/guidance/dist/wasm-kernel.d.ts +0 -48
  260. package/src/@claude-flow/guidance/dist/wasm-kernel.js +0 -158
@@ -1,375 +0,0 @@
1
- /**
2
- * Run Ledger + Evaluators
3
- *
4
- * Logs every run as an event with a minimum schema, then runs evaluators
5
- * to assess compliance and quality.
6
- *
7
- * Objective evaluators:
8
- * 1. Tests pass
9
- * 2. Lint pass
10
- * 3. Forbidden dependency scan
11
- * 4. Forbidden command scan
12
- * 5. Required sections present in plan
13
- *
14
- * Subjective evaluators:
15
- * 1. Reviewer rating (pass/fail)
16
- * 2. Architecture compliance (pass/fail)
17
- *
18
- * @module @claude-flow/guidance/ledger
19
- */
20
- import { randomUUID } from 'node:crypto';
21
- // ============================================================================
22
- // Built-in Evaluators
23
- // ============================================================================
24
- /**
25
- * Tests Pass evaluator - checks test results
26
- */
27
- export class TestsPassEvaluator {
28
- name = 'tests-pass';
29
- type = 'objective';
30
- async evaluate(event) {
31
- if (!event.testResults.ran) {
32
- return {
33
- name: this.name,
34
- passed: false,
35
- details: 'Tests were not run during this task',
36
- score: 0,
37
- };
38
- }
39
- const passed = event.testResults.failed === 0;
40
- const total = event.testResults.passed + event.testResults.failed + event.testResults.skipped;
41
- return {
42
- name: this.name,
43
- passed,
44
- details: passed
45
- ? `All ${event.testResults.passed} tests passed (${event.testResults.skipped} skipped)`
46
- : `${event.testResults.failed} of ${total} tests failed`,
47
- score: total > 0 ? event.testResults.passed / total : 0,
48
- };
49
- }
50
- }
51
- /**
52
- * Forbidden command scan evaluator
53
- */
54
- export class ForbiddenCommandEvaluator {
55
- name = 'forbidden-command-scan';
56
- type = 'objective';
57
- forbiddenPatterns;
58
- constructor(forbiddenPatterns) {
59
- this.forbiddenPatterns = forbiddenPatterns ?? [
60
- /\brm\s+-rf\s+\//,
61
- /\bgit\s+push\s+--force\s+origin\s+(?:main|master)\b/,
62
- /\bcurl\s+.*\|\s*(?:sh|bash)\b/,
63
- /\beval\s*\(/,
64
- /\bexec\s*\(/,
65
- ];
66
- }
67
- async evaluate(event) {
68
- const violations = [];
69
- for (const tool of event.toolsUsed) {
70
- for (const pattern of this.forbiddenPatterns) {
71
- if (pattern.test(tool)) {
72
- violations.push(`Forbidden command pattern: ${pattern.source} matched in "${tool}"`);
73
- }
74
- }
75
- }
76
- return {
77
- name: this.name,
78
- passed: violations.length === 0,
79
- details: violations.length === 0
80
- ? 'No forbidden commands detected'
81
- : `Found ${violations.length} forbidden command(s): ${violations.join('; ')}`,
82
- score: violations.length === 0 ? 1 : 0,
83
- };
84
- }
85
- }
86
- /**
87
- * Forbidden dependency scan evaluator
88
- */
89
- export class ForbiddenDependencyEvaluator {
90
- name = 'forbidden-dependency-scan';
91
- type = 'objective';
92
- forbiddenPackages;
93
- constructor(forbiddenPackages) {
94
- this.forbiddenPackages = forbiddenPackages ?? [];
95
- }
96
- async evaluate(event) {
97
- if (this.forbiddenPackages.length === 0) {
98
- return { name: this.name, passed: true, details: 'No forbidden dependencies configured', score: 1 };
99
- }
100
- // Check if any forbidden packages were introduced in touched files
101
- const packageFiles = event.filesTouched.filter(f => f.endsWith('package.json') || f.endsWith('package-lock.json'));
102
- return {
103
- name: this.name,
104
- passed: true,
105
- details: packageFiles.length > 0
106
- ? `Package files modified: ${packageFiles.join(', ')} - manual review recommended`
107
- : 'No package files modified',
108
- score: 1,
109
- };
110
- }
111
- }
112
- /**
113
- * Violation rate evaluator - checks violation count
114
- */
115
- export class ViolationRateEvaluator {
116
- name = 'violation-rate';
117
- type = 'objective';
118
- maxViolations;
119
- constructor(maxViolations = 0) {
120
- this.maxViolations = maxViolations;
121
- }
122
- async evaluate(event) {
123
- const count = event.violations.length;
124
- const passed = count <= this.maxViolations;
125
- return {
126
- name: this.name,
127
- passed,
128
- details: passed
129
- ? `${count} violation(s) within threshold (max: ${this.maxViolations})`
130
- : `${count} violation(s) exceeds threshold (max: ${this.maxViolations})`,
131
- score: Math.max(0, 1 - count / Math.max(this.maxViolations + 1, 1)),
132
- };
133
- }
134
- }
135
- /**
136
- * Diff quality evaluator - checks rework ratio
137
- */
138
- export class DiffQualityEvaluator {
139
- name = 'diff-quality';
140
- type = 'objective';
141
- maxReworkRatio;
142
- constructor(maxReworkRatio = 0.3) {
143
- this.maxReworkRatio = maxReworkRatio;
144
- }
145
- async evaluate(event) {
146
- const totalLines = event.diffSummary.linesAdded + event.diffSummary.linesRemoved;
147
- if (totalLines === 0) {
148
- return { name: this.name, passed: true, details: 'No diff produced', score: 1 };
149
- }
150
- const reworkRatio = event.reworkLines / totalLines;
151
- const passed = reworkRatio <= this.maxReworkRatio;
152
- return {
153
- name: this.name,
154
- passed,
155
- details: `Rework ratio: ${(reworkRatio * 100).toFixed(1)}% (${event.reworkLines}/${totalLines} lines). Threshold: ${(this.maxReworkRatio * 100).toFixed(0)}%`,
156
- score: Math.max(0, 1 - reworkRatio),
157
- };
158
- }
159
- }
160
- // ============================================================================
161
- // Run Ledger
162
- // ============================================================================
163
- export class RunLedger {
164
- events = [];
165
- evaluators = [];
166
- maxEvents;
167
- /**
168
- * @param maxEvents - Maximum events to retain in memory (0 = unlimited).
169
- * When the limit is exceeded the oldest events are evicted.
170
- */
171
- constructor(maxEvents = 0) {
172
- this.maxEvents = maxEvents;
173
- // Register default evaluators
174
- this.evaluators = [
175
- new TestsPassEvaluator(),
176
- new ForbiddenCommandEvaluator(),
177
- new ForbiddenDependencyEvaluator(),
178
- new ViolationRateEvaluator(),
179
- new DiffQualityEvaluator(),
180
- ];
181
- }
182
- /**
183
- * Add a custom evaluator
184
- */
185
- addEvaluator(evaluator) {
186
- this.evaluators.push(evaluator);
187
- }
188
- /**
189
- * Remove an evaluator by name
190
- */
191
- removeEvaluator(name) {
192
- this.evaluators = this.evaluators.filter(e => e.name !== name);
193
- }
194
- /**
195
- * Log a run event
196
- */
197
- logEvent(event) {
198
- const fullEvent = {
199
- ...event,
200
- eventId: randomUUID(),
201
- };
202
- this.events.push(fullEvent);
203
- this.evictIfNeeded();
204
- return fullEvent;
205
- }
206
- /**
207
- * Create a new run event with defaults
208
- */
209
- createEvent(taskId, intent, guidanceHash) {
210
- return {
211
- eventId: randomUUID(),
212
- taskId,
213
- guidanceHash,
214
- retrievedRuleIds: [],
215
- toolsUsed: [],
216
- filesTouched: [],
217
- diffSummary: { linesAdded: 0, linesRemoved: 0, filesChanged: 0 },
218
- testResults: { ran: false, passed: 0, failed: 0, skipped: 0 },
219
- violations: [],
220
- outcomeAccepted: null,
221
- reworkLines: 0,
222
- intent,
223
- timestamp: Date.now(),
224
- durationMs: 0,
225
- };
226
- }
227
- /**
228
- * Finalize and store an event
229
- */
230
- finalizeEvent(event) {
231
- event.durationMs = Date.now() - event.timestamp;
232
- this.events.push(event);
233
- this.evictIfNeeded();
234
- return event;
235
- }
236
- /**
237
- * Evict oldest events when maxEvents is exceeded.
238
- * Trims 10% in a batch to amortize the O(n) splice cost.
239
- */
240
- evictIfNeeded() {
241
- if (this.maxEvents > 0 && this.events.length > this.maxEvents) {
242
- const trimCount = Math.max(1, Math.floor(this.maxEvents * 0.1));
243
- this.events.splice(0, trimCount);
244
- }
245
- }
246
- /**
247
- * Run all evaluators against an event
248
- */
249
- async evaluate(event) {
250
- const results = [];
251
- for (const evaluator of this.evaluators) {
252
- const result = await evaluator.evaluate(event);
253
- results.push(result);
254
- }
255
- return results;
256
- }
257
- /**
258
- * Get all events
259
- */
260
- getEvents() {
261
- return [...this.events];
262
- }
263
- /**
264
- * Get events by task ID
265
- */
266
- getEventsByTask(taskId) {
267
- return this.events.filter(e => e.taskId === taskId);
268
- }
269
- /**
270
- * Get events within a time range
271
- */
272
- getEventsInRange(startMs, endMs) {
273
- return this.events.filter(e => e.timestamp >= startMs && e.timestamp <= endMs);
274
- }
275
- /**
276
- * Get recent events
277
- */
278
- getRecentEvents(count) {
279
- return this.events.slice(-count);
280
- }
281
- /**
282
- * Compute optimization metrics from events
283
- */
284
- computeMetrics(events) {
285
- const evts = events ?? this.events;
286
- if (evts.length === 0) {
287
- return {
288
- violationRate: 0,
289
- selfCorrectionRate: 0,
290
- reworkLines: 0,
291
- clarifyingQuestions: 0,
292
- taskCount: 0,
293
- };
294
- }
295
- // Violations per 10 tasks
296
- const totalViolations = evts.reduce((sum, e) => sum + e.violations.length, 0);
297
- const violationRate = evts.length > 0 ? (totalViolations / evts.length) * 10 : 0;
298
- // Self-correction rate: violations that were auto-corrected
299
- const totalCorrectable = evts.reduce((sum, e) => sum + e.violations.length, 0);
300
- const totalCorrected = evts.reduce((sum, e) => sum + e.violations.filter(v => v.autoCorrected).length, 0);
301
- const selfCorrectionRate = totalCorrectable > 0
302
- ? totalCorrected / totalCorrectable
303
- : 1;
304
- // Average rework lines
305
- const reworkLines = evts.reduce((sum, e) => sum + e.reworkLines, 0) / evts.length;
306
- // Clarifying questions are tracked in metadata (placeholder for now)
307
- const clarifyingQuestions = 0;
308
- return {
309
- violationRate,
310
- selfCorrectionRate,
311
- reworkLines,
312
- clarifyingQuestions,
313
- taskCount: evts.length,
314
- };
315
- }
316
- /**
317
- * Rank violations by frequency and cost (rework lines)
318
- */
319
- rankViolations(windowEvents) {
320
- const evts = windowEvents ?? this.events;
321
- const violationMap = new Map();
322
- for (const event of evts) {
323
- for (const violation of event.violations) {
324
- const existing = violationMap.get(violation.ruleId) ?? { frequency: 0, totalRework: 0 };
325
- existing.frequency++;
326
- existing.totalRework += event.reworkLines;
327
- violationMap.set(violation.ruleId, existing);
328
- }
329
- }
330
- const rankings = [];
331
- for (const [ruleId, stats] of violationMap) {
332
- const cost = stats.totalRework / stats.frequency;
333
- rankings.push({
334
- ruleId,
335
- frequency: stats.frequency,
336
- cost,
337
- score: stats.frequency * cost,
338
- });
339
- }
340
- return rankings.sort((a, b) => b.score - a.score);
341
- }
342
- /**
343
- * Get event count
344
- */
345
- get eventCount() {
346
- return this.events.length;
347
- }
348
- /**
349
- * Export events for persistence
350
- */
351
- exportEvents() {
352
- return [...this.events];
353
- }
354
- /**
355
- * Import events from persistence
356
- */
357
- importEvents(events) {
358
- this.events.push(...events);
359
- }
360
- /**
361
- * Clear all events
362
- */
363
- clear() {
364
- this.events = [];
365
- }
366
- }
367
- /**
368
- * Create a run ledger instance
369
- *
370
- * @param maxEvents - Maximum events to retain in memory (0 = unlimited).
371
- */
372
- export function createLedger(maxEvents = 0) {
373
- return new RunLedger(maxEvents);
374
- }
375
- //# sourceMappingURL=ledger.js.map
@@ -1,289 +0,0 @@
1
- /**
2
- * Manifest Validator & Conformance Suite
3
- *
4
- * Validates AgentCellManifest documents against the Agentic Container spec,
5
- * computes risk scores, selects execution lanes, and fails closed on any
6
- * validation error. The ConformanceSuite runs golden traces through an
7
- * evaluator to prove the platform behaves as specified.
8
- *
9
- * @module @claude-flow/guidance/manifest-validator
10
- */
11
- /** Data sensitivity levels ordered by severity */
12
- declare const DATA_SENSITIVITY_LEVELS: readonly ["public", "internal", "confidential", "restricted"];
13
- type DataSensitivity = typeof DATA_SENSITIVITY_LEVELS[number];
14
- /** Write modes for memory policy */
15
- declare const WRITE_MODES: readonly ["append", "overwrite", "merge"];
16
- type WriteMode = typeof WRITE_MODES[number];
17
- /** Authority scopes for memory policy */
18
- declare const AUTHORITY_SCOPES: readonly ["self", "team", "tenant", "global"];
19
- type AuthorityScope = typeof AUTHORITY_SCOPES[number];
20
- /** Trace levels for observability */
21
- declare const TRACE_LEVELS: readonly ["none", "errors", "decisions", "full"];
22
- /** Execution lanes ordered by privilege (lowest to highest) */
23
- declare const LANES: readonly ["wasm", "sandboxed", "native"];
24
- type Lane = typeof LANES[number];
25
- /**
26
- * The manifest describing an agent cell per the Agentic Container spec.
27
- */
28
- export interface AgentCellManifest {
29
- /** API version string (must be 'agentic_cells.v0_1') */
30
- apiVersion: string;
31
- /** Cell identity */
32
- cell: {
33
- name: string;
34
- purpose: string;
35
- ownerTenant: string;
36
- codeRef: {
37
- kind: string;
38
- digest: string;
39
- entry: string;
40
- };
41
- };
42
- /** Lane execution policy */
43
- lanePolicy: {
44
- portabilityRequired: boolean;
45
- needsNativeThreads: boolean;
46
- preferredLane: Lane;
47
- maxRiskScore: number;
48
- };
49
- /** Resource budgets */
50
- budgets: {
51
- maxWallClockSeconds: number;
52
- maxToolCalls: number;
53
- maxBytesEgress: number;
54
- maxTokensInMtok: number;
55
- maxTokensOutMtok: number;
56
- maxMemoryWrites: number;
57
- };
58
- /** Data handling policy */
59
- dataPolicy: {
60
- dataSensitivity: DataSensitivity;
61
- piiAllowed: boolean;
62
- retentionDays: number;
63
- exportControls: {
64
- allowedRegions: string[];
65
- blockedRegions: string[];
66
- };
67
- };
68
- /** Tool usage policy */
69
- toolPolicy: {
70
- toolsAllowed: string[];
71
- networkAllowlist: string[];
72
- writeActionsRequireConfirmation: boolean;
73
- };
74
- /** Memory system policy */
75
- memoryPolicy: {
76
- namespace: string;
77
- authorityScope: AuthorityScope;
78
- writeMode: WriteMode;
79
- requiresCoherenceGate: boolean;
80
- requiresAntiHallucinationGate: boolean;
81
- };
82
- /** Observability configuration */
83
- observability: {
84
- traceLevel: typeof TRACE_LEVELS[number];
85
- emitArtifacts: boolean;
86
- artifactBucket: string;
87
- };
88
- }
89
- /**
90
- * A single validation error or warning.
91
- */
92
- export interface ValidationError {
93
- /** Error code (e.g., 'MISSING_FIELD', 'INVALID_DIGEST', 'BUDGET_EXCEED') */
94
- code: string;
95
- /** JSON path to the problematic field */
96
- field: string;
97
- /** Human-readable description */
98
- message: string;
99
- /** Severity level */
100
- severity: 'error';
101
- }
102
- /**
103
- * A single validation warning.
104
- */
105
- export interface ValidationWarning {
106
- /** Warning code */
107
- code: string;
108
- /** JSON path to the problematic field */
109
- field: string;
110
- /** Human-readable description */
111
- message: string;
112
- /** Severity level */
113
- severity: 'warning';
114
- }
115
- /**
116
- * Complete validation result for a manifest.
117
- */
118
- export interface ValidationResult {
119
- /** Whether the manifest passed all validation checks */
120
- valid: boolean;
121
- /** Validation errors (each causes rejection) */
122
- errors: ValidationError[];
123
- /** Validation warnings (informational, do not block admission) */
124
- warnings: ValidationWarning[];
125
- /** Admission decision: admit, reject, or review */
126
- admissionDecision: 'admit' | 'reject' | 'review';
127
- /** Selected execution lane (null if rejected) */
128
- laneSelection: Lane | null;
129
- /** Computed risk score (0-100) */
130
- riskScore: number;
131
- }
132
- /**
133
- * Validates AgentCellManifest documents against the Agentic Container spec.
134
- *
135
- * Fails closed: any validation error results in a 'reject' decision.
136
- * Warnings alone do not block admission but may trigger a 'review' decision
137
- * when the risk score is between thresholds.
138
- */
139
- export declare class ManifestValidator {
140
- /** Risk score threshold: below this, admit. Above reject threshold, reject. Between, review. */
141
- private readonly admitThreshold;
142
- private readonly rejectThreshold;
143
- constructor(options?: {
144
- admitThreshold?: number;
145
- rejectThreshold?: number;
146
- });
147
- /**
148
- * Validate a manifest, compute its risk score, select a lane, and decide admission.
149
- *
150
- * FAILS CLOSED: any validation error leads to reject.
151
- */
152
- validate(manifest: AgentCellManifest): ValidationResult;
153
- /**
154
- * Compute a risk score (0-100) from tool risk, data sensitivity, and privilege surface.
155
- *
156
- * Components:
157
- * - tool_risk (0-40): based on tool types and network access
158
- * - data_sensitivity (0-30): based on sensitivity level and PII
159
- * - privilege_surface (0-30): based on memory scope, write mode, native threads
160
- */
161
- computeRiskScore(manifest: AgentCellManifest): number;
162
- /**
163
- * Select the execution lane based on risk score and manifest policy.
164
- *
165
- * Lane selection rules:
166
- * - If portabilityRequired or risk <= 30: wasm
167
- * - If needsNativeThreads and risk > 50: native
168
- * - Otherwise: sandboxed
169
- * - Always respect preferredLane if risk score allows it
170
- * - Risk exceeding maxRiskScore forces the most restrictive lane
171
- */
172
- selectLane(manifest: AgentCellManifest, riskScore: number): Lane;
173
- /**
174
- * Validate budget values: no negatives, within sanity limits.
175
- */
176
- validateBudgets(budgets: AgentCellManifest['budgets']): ValidationError[];
177
- /**
178
- * Validate tool policy: network allowlist must not contain wildcards
179
- * unless the cell explicitly has Bash (privileged).
180
- */
181
- validateToolPolicy(toolPolicy: AgentCellManifest['toolPolicy']): ValidationError[];
182
- /**
183
- * Validate data policy fields.
184
- */
185
- validateDataPolicy(dataPolicy: AgentCellManifest['dataPolicy']): ValidationError[];
186
- private validateRequiredFields;
187
- private validateApiVersion;
188
- private validateDigest;
189
- private validateWarnings;
190
- }
191
- /**
192
- * A single event within a golden trace.
193
- */
194
- export interface GoldenTraceEvent {
195
- /** Sequence number within the trace */
196
- seq: number;
197
- /** Type of event (e.g., 'command', 'tool-use', 'memory-write', 'budget-check') */
198
- eventType: string;
199
- /** Event payload */
200
- payload: Record<string, unknown>;
201
- /** Expected outcome from the platform */
202
- expectedOutcome: 'allow' | 'deny' | 'warn';
203
- }
204
- /**
205
- * A complete golden trace including events and expected decisions.
206
- */
207
- export interface GoldenTrace {
208
- /** Unique trace identifier */
209
- traceId: string;
210
- /** Human-readable name */
211
- name: string;
212
- /** Description of what the trace verifies */
213
- description: string;
214
- /** Ordered sequence of events */
215
- events: GoldenTraceEvent[];
216
- /** Map from event seq (as string) to expected decision string */
217
- expectedDecisions: Record<string, string>;
218
- /** Map from memory key to expected parent chain for lineage verification */
219
- expectedMemoryLineage: Record<string, string[]>;
220
- }
221
- /**
222
- * Result of running the conformance suite.
223
- */
224
- export interface ConformanceResult {
225
- /** Whether all events matched their expected outcomes */
226
- passed: boolean;
227
- /** Total number of events evaluated */
228
- totalEvents: number;
229
- /** Number of events that matched expectations */
230
- matchedEvents: number;
231
- /** Details of any mismatches */
232
- mismatches: Array<{
233
- traceId: string;
234
- seq: number;
235
- expected: string;
236
- actual: string;
237
- details: unknown;
238
- }>;
239
- }
240
- /**
241
- * Runs golden traces through an evaluator and reports conformance.
242
- *
243
- * Each trace contains events with expected outcomes. The suite feeds every
244
- * event to the evaluator and compares the actual decision to the expectation.
245
- */
246
- export declare class ConformanceSuite {
247
- private traces;
248
- /**
249
- * Add a golden trace to the suite.
250
- */
251
- addTrace(trace: GoldenTrace): void;
252
- /**
253
- * Run every event in every trace through the evaluator and compare
254
- * actual decisions against expected outcomes.
255
- */
256
- run(evaluator: (event: GoldenTraceEvent) => {
257
- decision: string;
258
- details: unknown;
259
- }): ConformanceResult;
260
- /**
261
- * Get all registered traces.
262
- */
263
- getTraces(): GoldenTrace[];
264
- /**
265
- * Create built-in default golden traces that verify core platform invariants:
266
- *
267
- * 1. Destructive command blocked
268
- * 2. Secret detected and blocked
269
- * 3. Budget exceeded and denied
270
- * 4. Memory write without evidence blocked
271
- * 5. Valid operation allowed
272
- */
273
- createDefaultTraces(): GoldenTrace[];
274
- }
275
- /**
276
- * Create a new ManifestValidator instance.
277
- */
278
- export declare function createManifestValidator(options?: {
279
- admitThreshold?: number;
280
- rejectThreshold?: number;
281
- }): ManifestValidator;
282
- /**
283
- * Create a new ConformanceSuite instance, optionally pre-loaded with default traces.
284
- */
285
- export declare function createConformanceSuite(options?: {
286
- includeDefaults?: boolean;
287
- }): ConformanceSuite;
288
- export {};
289
- //# sourceMappingURL=manifest-validator.d.ts.map