monomind 1.11.11 → 1.11.13

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 (227) hide show
  1. package/.claude/commands/mastermind/idea.md +1 -1
  2. package/.claude/commands/mastermind/master.md +1 -1
  3. package/.claude/skills/mastermind/_protocol.md +4 -4
  4. package/.claude/skills/mastermind/architect.md +7 -4
  5. package/.claude/skills/mastermind/autodev.md +4 -2
  6. package/.claude/skills/mastermind/build.md +3 -3
  7. package/.claude/skills/mastermind/content.md +3 -3
  8. package/.claude/skills/mastermind/createorg.md +2 -2
  9. package/.claude/skills/mastermind/finance.md +3 -3
  10. package/.claude/skills/mastermind/idea.md +8 -0
  11. package/.claude/skills/mastermind/marketing.md +3 -3
  12. package/.claude/skills/mastermind/ops.md +3 -3
  13. package/.claude/skills/mastermind/release.md +3 -3
  14. package/.claude/skills/mastermind/research.md +3 -3
  15. package/.claude/skills/mastermind/review.md +3 -3
  16. package/.claude/skills/mastermind/sales.md +3 -3
  17. package/package.json +1 -1
  18. package/packages/@monomind/cli/dist/src/index.js +19 -14
  19. package/packages/@monomind/cli/dist/src/init/statusline-generator.js +3 -3
  20. package/packages/@monomind/cli/dist/src/observability/replay-reader.d.ts +1 -1
  21. package/packages/@monomind/cli/dist/src/update/checker.js +24 -7
  22. package/packages/@monomind/cli/dist/src/update/index.d.ts +10 -0
  23. package/packages/@monomind/cli/dist/src/update/index.js +29 -2
  24. package/packages/@monomind/cli/package.json +1 -1
  25. package/packages/@monomind/cli/dist/src/agents/halt-signal.d.ts +0 -25
  26. package/packages/@monomind/cli/dist/src/agents/halt-signal.js +0 -76
  27. package/packages/@monomind/cli/dist/src/agents/index.d.ts +0 -18
  28. package/packages/@monomind/cli/dist/src/agents/index.js +0 -13
  29. package/packages/@monomind/cli/dist/src/agents/managed-agent.d.ts +0 -41
  30. package/packages/@monomind/cli/dist/src/agents/managed-agent.js +0 -69
  31. package/packages/@monomind/cli/dist/src/agents/prompt-experiment.d.ts +0 -23
  32. package/packages/@monomind/cli/dist/src/agents/prompt-experiment.js +0 -49
  33. package/packages/@monomind/cli/dist/src/agents/prompt-version-manager.d.ts +0 -22
  34. package/packages/@monomind/cli/dist/src/agents/prompt-version-manager.js +0 -80
  35. package/packages/@monomind/cli/dist/src/agents/registry-query.d.ts +0 -71
  36. package/packages/@monomind/cli/dist/src/agents/registry-query.js +0 -125
  37. package/packages/@monomind/cli/dist/src/agents/score-decay.d.ts +0 -19
  38. package/packages/@monomind/cli/dist/src/agents/score-decay.js +0 -22
  39. package/packages/@monomind/cli/dist/src/agents/shared-instructions-loader.d.ts +0 -13
  40. package/packages/@monomind/cli/dist/src/agents/shared-instructions-loader.js +0 -40
  41. package/packages/@monomind/cli/dist/src/agents/specialization-scorer.d.ts +0 -54
  42. package/packages/@monomind/cli/dist/src/agents/specialization-scorer.js +0 -212
  43. package/packages/@monomind/cli/dist/src/agents/termination-watcher.d.ts +0 -30
  44. package/packages/@monomind/cli/dist/src/agents/termination-watcher.js +0 -84
  45. package/packages/@monomind/cli/dist/src/agents/trigger-index.d.ts +0 -20
  46. package/packages/@monomind/cli/dist/src/agents/trigger-index.js +0 -38
  47. package/packages/@monomind/cli/dist/src/agents/trigger-scanner.d.ts +0 -64
  48. package/packages/@monomind/cli/dist/src/agents/trigger-scanner.js +0 -308
  49. package/packages/@monomind/cli/dist/src/agents/version-diff.d.ts +0 -18
  50. package/packages/@monomind/cli/dist/src/agents/version-diff.js +0 -64
  51. package/packages/@monomind/cli/dist/src/agents/version-store.d.ts +0 -60
  52. package/packages/@monomind/cli/dist/src/agents/version-store.js +0 -235
  53. package/packages/@monomind/cli/dist/src/benchmarks/pretrain/index.d.ts +0 -45
  54. package/packages/@monomind/cli/dist/src/benchmarks/pretrain/index.js +0 -404
  55. package/packages/@monomind/cli/dist/src/commands/agent-wasm.d.ts +0 -14
  56. package/packages/@monomind/cli/dist/src/commands/agent-wasm.js +0 -333
  57. package/packages/@monomind/cli/dist/src/commands/ui.js +0 -68
  58. package/packages/@monomind/cli/dist/src/consensus/index.d.ts +0 -7
  59. package/packages/@monomind/cli/dist/src/consensus/index.js +0 -6
  60. package/packages/@monomind/cli/dist/src/context/context-provider.d.ts +0 -44
  61. package/packages/@monomind/cli/dist/src/context/context-provider.js +0 -25
  62. package/packages/@monomind/cli/dist/src/context/git-state-provider.d.ts +0 -12
  63. package/packages/@monomind/cli/dist/src/context/git-state-provider.js +0 -34
  64. package/packages/@monomind/cli/dist/src/context/index.d.ts +0 -12
  65. package/packages/@monomind/cli/dist/src/context/index.js +0 -12
  66. package/packages/@monomind/cli/dist/src/context/project-conventions-provider.d.ts +0 -15
  67. package/packages/@monomind/cli/dist/src/context/project-conventions-provider.js +0 -19
  68. package/packages/@monomind/cli/dist/src/context/prompt-assembler.d.ts +0 -26
  69. package/packages/@monomind/cli/dist/src/context/prompt-assembler.js +0 -93
  70. package/packages/@monomind/cli/dist/src/context/task-history-provider.d.ts +0 -24
  71. package/packages/@monomind/cli/dist/src/context/task-history-provider.js +0 -32
  72. package/packages/@monomind/cli/dist/src/context/user-preferences-provider.d.ts +0 -14
  73. package/packages/@monomind/cli/dist/src/context/user-preferences-provider.js +0 -27
  74. package/packages/@monomind/cli/dist/src/dlq/dlq-reader.d.ts +0 -31
  75. package/packages/@monomind/cli/dist/src/dlq/dlq-reader.js +0 -81
  76. package/packages/@monomind/cli/dist/src/dlq/dlq-writer.d.ts +0 -24
  77. package/packages/@monomind/cli/dist/src/dlq/dlq-writer.js +0 -65
  78. package/packages/@monomind/cli/dist/src/dlq/index.d.ts +0 -10
  79. package/packages/@monomind/cli/dist/src/dlq/index.js +0 -7
  80. package/packages/@monomind/cli/dist/src/eval/dataset-manager.d.ts +0 -33
  81. package/packages/@monomind/cli/dist/src/eval/dataset-manager.js +0 -107
  82. package/packages/@monomind/cli/dist/src/eval/dataset-runner.d.ts +0 -23
  83. package/packages/@monomind/cli/dist/src/eval/dataset-runner.js +0 -59
  84. package/packages/@monomind/cli/dist/src/eval/index.d.ts +0 -10
  85. package/packages/@monomind/cli/dist/src/eval/index.js +0 -7
  86. package/packages/@monomind/cli/dist/src/eval/trace-collector.d.ts +0 -40
  87. package/packages/@monomind/cli/dist/src/eval/trace-collector.js +0 -102
  88. package/packages/@monomind/cli/dist/src/infrastructure/in-memory-repositories.d.ts +0 -68
  89. package/packages/@monomind/cli/dist/src/infrastructure/in-memory-repositories.js +0 -264
  90. package/packages/@monomind/cli/dist/src/interactive/interrupt.d.ts +0 -22
  91. package/packages/@monomind/cli/dist/src/interactive/interrupt.js +0 -71
  92. package/packages/@monomind/cli/dist/src/mcp/deprecation-injector.d.ts +0 -25
  93. package/packages/@monomind/cli/dist/src/mcp/deprecation-injector.js +0 -48
  94. package/packages/@monomind/cli/dist/src/mcp/tool-registry.d.ts +0 -61
  95. package/packages/@monomind/cli/dist/src/mcp/tool-registry.js +0 -246
  96. package/packages/@monomind/cli/dist/src/mcp-tools/wasm-agent-tools.d.ts +0 -9
  97. package/packages/@monomind/cli/dist/src/mcp-tools/wasm-agent-tools.js +0 -230
  98. package/packages/@monomind/cli/dist/src/model/complexity-scorer.d.ts +0 -21
  99. package/packages/@monomind/cli/dist/src/model/complexity-scorer.js +0 -106
  100. package/packages/@monomind/cli/dist/src/model/index.d.ts +0 -4
  101. package/packages/@monomind/cli/dist/src/model/index.js +0 -4
  102. package/packages/@monomind/cli/dist/src/model/model-settings.d.ts +0 -22
  103. package/packages/@monomind/cli/dist/src/model/model-settings.js +0 -33
  104. package/packages/@monomind/cli/dist/src/model/model-tier-resolver.d.ts +0 -24
  105. package/packages/@monomind/cli/dist/src/model/model-tier-resolver.js +0 -65
  106. package/packages/@monomind/cli/dist/src/monovector/capabilities.d.ts +0 -34
  107. package/packages/@monomind/cli/dist/src/monovector/capabilities.js +0 -37
  108. package/packages/@monomind/cli/dist/src/orchestration/index.d.ts +0 -7
  109. package/packages/@monomind/cli/dist/src/orchestration/index.js +0 -6
  110. package/packages/@monomind/cli/dist/src/orchestration/mode-dispatcher.d.ts +0 -11
  111. package/packages/@monomind/cli/dist/src/orchestration/mode-dispatcher.js +0 -31
  112. package/packages/@monomind/cli/dist/src/orchestration/routing-modes.d.ts +0 -68
  113. package/packages/@monomind/cli/dist/src/orchestration/routing-modes.js +0 -180
  114. package/packages/@monomind/cli/dist/src/plugins/tests/demo-plugin-store.d.ts +0 -7
  115. package/packages/@monomind/cli/dist/src/plugins/tests/demo-plugin-store.js +0 -126
  116. package/packages/@monomind/cli/dist/src/plugins/tests/standalone-test.d.ts +0 -12
  117. package/packages/@monomind/cli/dist/src/plugins/tests/standalone-test.js +0 -188
  118. package/packages/@monomind/cli/dist/src/plugins/tests/test-plugin-store.d.ts +0 -7
  119. package/packages/@monomind/cli/dist/src/plugins/tests/test-plugin-store.js +0 -206
  120. package/packages/@monomind/cli/dist/src/runtime/headless.d.ts +0 -60
  121. package/packages/@monomind/cli/dist/src/runtime/headless.js +0 -284
  122. package/packages/@monomind/cli/dist/src/services/agentic-flow-bridge.d.ts +0 -50
  123. package/packages/@monomind/cli/dist/src/services/agentic-flow-bridge.js +0 -95
  124. package/packages/@monomind/cli/dist/src/services/container-worker-pool.d.ts +0 -197
  125. package/packages/@monomind/cli/dist/src/services/container-worker-pool.js +0 -623
  126. package/packages/@monomind/cli/dist/src/services/index.d.ts +0 -13
  127. package/packages/@monomind/cli/dist/src/services/index.js +0 -11
  128. package/packages/@monomind/cli/dist/src/services/worker-queue.d.ts +0 -201
  129. package/packages/@monomind/cli/dist/src/services/worker-queue.js +0 -594
  130. package/packages/@monomind/cli/dist/src/swarm/communication-graph.d.ts +0 -25
  131. package/packages/@monomind/cli/dist/src/swarm/communication-graph.js +0 -77
  132. package/packages/@monomind/cli/dist/src/swarm/flow-enforcer.d.ts +0 -31
  133. package/packages/@monomind/cli/dist/src/swarm/flow-enforcer.js +0 -61
  134. package/packages/@monomind/cli/dist/src/swarm/flow-visualizer.d.ts +0 -19
  135. package/packages/@monomind/cli/dist/src/swarm/flow-visualizer.js +0 -68
  136. package/packages/@monomind/cli/dist/src/transfer/deploy-seraphine.d.ts +0 -13
  137. package/packages/@monomind/cli/dist/src/transfer/deploy-seraphine.js +0 -205
  138. package/packages/@monomind/cli/dist/src/transfer/store/tests/standalone-test.d.ts +0 -12
  139. package/packages/@monomind/cli/dist/src/transfer/store/tests/standalone-test.js +0 -190
  140. package/packages/@monomind/cli/dist/src/transfer/test-seraphine.d.ts +0 -6
  141. package/packages/@monomind/cli/dist/src/transfer/test-seraphine.js +0 -105
  142. package/packages/@monomind/cli/dist/src/transfer/tests/test-store.d.ts +0 -7
  143. package/packages/@monomind/cli/dist/src/transfer/tests/test-store.js +0 -214
  144. package/packages/@monomind/cli/dist/src/workflow/condition-evaluator.d.ts +0 -10
  145. package/packages/@monomind/cli/dist/src/workflow/condition-evaluator.js +0 -82
  146. package/packages/@monomind/cli/dist/src/workflow/context-resolver.d.ts +0 -12
  147. package/packages/@monomind/cli/dist/src/workflow/context-resolver.js +0 -23
  148. package/packages/@monomind/cli/dist/src/workflow/dag-builder.d.ts +0 -17
  149. package/packages/@monomind/cli/dist/src/workflow/dag-builder.js +0 -129
  150. package/packages/@monomind/cli/dist/src/workflow/dag-executor.d.ts +0 -9
  151. package/packages/@monomind/cli/dist/src/workflow/dag-executor.js +0 -116
  152. package/packages/@monomind/cli/dist/src/workflow/dag-types.d.ts +0 -41
  153. package/packages/@monomind/cli/dist/src/workflow/dag-types.js +0 -8
  154. package/packages/@monomind/cli/dist/src/workflow/dsl-parser.d.ts +0 -12
  155. package/packages/@monomind/cli/dist/src/workflow/dsl-parser.js +0 -20
  156. package/packages/@monomind/cli/dist/src/workflow/dsl-schema.d.ts +0 -165
  157. package/packages/@monomind/cli/dist/src/workflow/dsl-schema.js +0 -82
  158. package/packages/@monomind/cli/dist/src/workflow/index.d.ts +0 -13
  159. package/packages/@monomind/cli/dist/src/workflow/index.js +0 -11
  160. package/packages/@monomind/cli/dist/src/workflow/template-engine.d.ts +0 -11
  161. package/packages/@monomind/cli/dist/src/workflow/template-engine.js +0 -40
  162. package/packages/@monomind/cli/dist/src/workflow/workflow-executor.d.ts +0 -29
  163. package/packages/@monomind/cli/dist/src/workflow/workflow-executor.js +0 -227
  164. package/packages/@monomind/guidance/dist/adversarial.d.ts +0 -284
  165. package/packages/@monomind/guidance/dist/adversarial.js +0 -572
  166. package/packages/@monomind/guidance/dist/analyzer.d.ts +0 -530
  167. package/packages/@monomind/guidance/dist/analyzer.js +0 -2518
  168. package/packages/@monomind/guidance/dist/artifacts.d.ts +0 -283
  169. package/packages/@monomind/guidance/dist/artifacts.js +0 -356
  170. package/packages/@monomind/guidance/dist/authority.d.ts +0 -290
  171. package/packages/@monomind/guidance/dist/authority.js +0 -558
  172. package/packages/@monomind/guidance/dist/capabilities.d.ts +0 -209
  173. package/packages/@monomind/guidance/dist/capabilities.js +0 -485
  174. package/packages/@monomind/guidance/dist/coherence.d.ts +0 -233
  175. package/packages/@monomind/guidance/dist/coherence.js +0 -372
  176. package/packages/@monomind/guidance/dist/compiler.d.ts +0 -87
  177. package/packages/@monomind/guidance/dist/compiler.js +0 -419
  178. package/packages/@monomind/guidance/dist/conformance-kit.d.ts +0 -225
  179. package/packages/@monomind/guidance/dist/conformance-kit.js +0 -629
  180. package/packages/@monomind/guidance/dist/continue-gate.d.ts +0 -214
  181. package/packages/@monomind/guidance/dist/continue-gate.js +0 -353
  182. package/packages/@monomind/guidance/dist/crypto-utils.d.ts +0 -17
  183. package/packages/@monomind/guidance/dist/crypto-utils.js +0 -24
  184. package/packages/@monomind/guidance/dist/evolution.d.ts +0 -282
  185. package/packages/@monomind/guidance/dist/evolution.js +0 -500
  186. package/packages/@monomind/guidance/dist/gates.d.ts +0 -79
  187. package/packages/@monomind/guidance/dist/gates.js +0 -302
  188. package/packages/@monomind/guidance/dist/gateway.d.ts +0 -206
  189. package/packages/@monomind/guidance/dist/gateway.js +0 -452
  190. package/packages/@monomind/guidance/dist/generators.d.ts +0 -153
  191. package/packages/@monomind/guidance/dist/generators.js +0 -682
  192. package/packages/@monomind/guidance/dist/headless.d.ts +0 -177
  193. package/packages/@monomind/guidance/dist/headless.js +0 -342
  194. package/packages/@monomind/guidance/dist/hooks.d.ts +0 -109
  195. package/packages/@monomind/guidance/dist/hooks.js +0 -347
  196. package/packages/@monomind/guidance/dist/index.d.ts +0 -205
  197. package/packages/@monomind/guidance/dist/index.js +0 -321
  198. package/packages/@monomind/guidance/dist/ledger.d.ts +0 -162
  199. package/packages/@monomind/guidance/dist/ledger.js +0 -375
  200. package/packages/@monomind/guidance/dist/manifest-validator.d.ts +0 -289
  201. package/packages/@monomind/guidance/dist/manifest-validator.js +0 -838
  202. package/packages/@monomind/guidance/dist/memory-gate.d.ts +0 -222
  203. package/packages/@monomind/guidance/dist/memory-gate.js +0 -382
  204. package/packages/@monomind/guidance/dist/meta-governance.d.ts +0 -265
  205. package/packages/@monomind/guidance/dist/meta-governance.js +0 -348
  206. package/packages/@monomind/guidance/dist/optimizer.d.ts +0 -104
  207. package/packages/@monomind/guidance/dist/optimizer.js +0 -329
  208. package/packages/@monomind/guidance/dist/persistence.d.ts +0 -189
  209. package/packages/@monomind/guidance/dist/persistence.js +0 -464
  210. package/packages/@monomind/guidance/dist/proof.d.ts +0 -185
  211. package/packages/@monomind/guidance/dist/proof.js +0 -238
  212. package/packages/@monomind/guidance/dist/retriever.d.ts +0 -116
  213. package/packages/@monomind/guidance/dist/retriever.js +0 -394
  214. package/packages/@monomind/guidance/dist/ruvbot-integration.d.ts +0 -370
  215. package/packages/@monomind/guidance/dist/ruvbot-integration.js +0 -738
  216. package/packages/@monomind/guidance/dist/temporal.d.ts +0 -426
  217. package/packages/@monomind/guidance/dist/temporal.js +0 -658
  218. package/packages/@monomind/guidance/dist/trust.d.ts +0 -283
  219. package/packages/@monomind/guidance/dist/trust.js +0 -473
  220. package/packages/@monomind/guidance/dist/truth-anchors.d.ts +0 -276
  221. package/packages/@monomind/guidance/dist/truth-anchors.js +0 -488
  222. package/packages/@monomind/guidance/dist/types.d.ts +0 -378
  223. package/packages/@monomind/guidance/dist/types.js +0 -10
  224. package/packages/@monomind/guidance/dist/uncertainty.d.ts +0 -372
  225. package/packages/@monomind/guidance/dist/uncertainty.js +0 -619
  226. package/packages/@monomind/guidance/dist/wasm-kernel.d.ts +0 -48
  227. package/packages/@monomind/guidance/dist/wasm-kernel.js +0 -158
@@ -1,394 +0,0 @@
1
- /**
2
- * Task Intent Classifier + Shard Retriever
3
- *
4
- * Stores rule shards in vector storage with embeddings and metadata.
5
- * At task start, retrieves the top N shards by semantic similarity
6
- * with hard filters by risk class and repo scope.
7
- *
8
- * Retrieval contract:
9
- * 1. Always include the constitution
10
- * 2. Retrieve up to 5 shards by semantic similarity
11
- * 3. Add hard filters by risk class and repo scope
12
- * 4. Contradiction check: prefer higher-priority rule ID
13
- *
14
- * @module @monomind/guidance/retriever
15
- */
16
- // ============================================================================
17
- // Intent Classification
18
- // ============================================================================
19
- /** Intent detection patterns with confidence weights */
20
- const INTENT_PATTERNS = {
21
- 'bug-fix': [
22
- { pattern: /\b(fix|bug|broken|error|crash|issue|wrong|incorrect|fail)\b/i, weight: 0.8 },
23
- { pattern: /\b(not working|doesn't work|unexpected|regression)\b/i, weight: 0.9 },
24
- ],
25
- 'feature': [
26
- { pattern: /\b(add|create|implement|build|new|introduce|develop)\b/i, weight: 0.5 },
27
- { pattern: /\b(feature|capability|functionality|support for)\b/i, weight: 0.9 },
28
- { pattern: /\b(user|page|profile|dashboard|form|widget|component|module)\b/i, weight: 0.3 },
29
- ],
30
- 'refactor': [
31
- { pattern: /\b(refactor|restructure|reorganize|simplify|clean|extract|inline)\b/i, weight: 0.9 },
32
- { pattern: /\b(improve readability|reduce complexity|code quality)\b/i, weight: 0.8 },
33
- ],
34
- 'security': [
35
- { pattern: /\b(security|auth|permission|access control|encrypt|secret|token)\b/i, weight: 0.9 },
36
- { pattern: /\b(cve|vulnerability|injection|xss|csrf|sanitize)\b/i, weight: 1.0 },
37
- ],
38
- 'performance': [
39
- { pattern: /\b(performance|optimize|speed|slow|fast|cache|memory usage|latency)\b/i, weight: 0.9 },
40
- { pattern: /\b(bottleneck|profile|benchmark|throughput|efficient)\b/i, weight: 0.8 },
41
- ],
42
- 'testing': [
43
- { pattern: /\b(tests?|specs?|coverage|mocks?|asserts?|tdd|unit tests?|integration tests?)\b/i, weight: 1.0 },
44
- { pattern: /\b(test suite|test case|test plan|quality assurance)\b/i, weight: 0.9 },
45
- ],
46
- 'docs': [
47
- { pattern: /\b(document|readme|jsdoc|comment|explain|describe|tutorial)\b/i, weight: 0.8 },
48
- { pattern: /\b(api docs|documentation|usage guide|changelog)\b/i, weight: 0.9 },
49
- ],
50
- 'deployment': [
51
- { pattern: /\b(deploy|release|publish|ci|cd|pipeline|docker|kubernetes)\b/i, weight: 0.9 },
52
- { pattern: /\b(staging|production|rollback|migration|version)\b/i, weight: 0.7 },
53
- ],
54
- 'architecture': [
55
- { pattern: /\b(architect|design pattern|system design|structure|boundary)\b/i, weight: 0.8 },
56
- { pattern: /\b(module boundary|component architecture|layer|service mesh|domain model|aggregate root)\b/i, weight: 0.7 },
57
- { pattern: /\b(interface|api design|separation of concerns)\b/i, weight: 0.6 },
58
- ],
59
- 'debug': [
60
- { pattern: /\b(debug|trace|log|diagnose|investigate|root cause)\b/i, weight: 0.9 },
61
- { pattern: /\b(stack trace|breakpoint|inspect|reproduction)\b/i, weight: 0.8 },
62
- ],
63
- 'general': [
64
- { pattern: /./, weight: 0.1 },
65
- ],
66
- };
67
- /**
68
- * Deterministic hash-based embedding provider — **test-only**.
69
- *
70
- * Produces fixed-dimension vectors from a simple character-hash → sin()
71
- * transform. The resulting embeddings have no real semantic meaning;
72
- * they are stable and fast, which makes them useful for unit/integration
73
- * tests that need a concrete {@link IEmbeddingProvider} without loading
74
- * an ONNX model.
75
- *
76
- * **Do NOT use in production** — replace with a real model-backed
77
- * provider (e.g. the agentic-flow ONNX integration).
78
- */
79
- export class HashEmbeddingProvider {
80
- dimensions;
81
- cache = new Map();
82
- constructor(dimensions = 384) {
83
- this.dimensions = dimensions;
84
- }
85
- async embed(text) {
86
- const key = text.slice(0, 200);
87
- if (this.cache.has(key))
88
- return this.cache.get(key);
89
- const embedding = this.hashEmbed(text);
90
- this.cache.set(key, embedding);
91
- return embedding;
92
- }
93
- async batchEmbed(texts) {
94
- return Promise.all(texts.map(t => this.embed(t)));
95
- }
96
- hashEmbed(text) {
97
- const embedding = new Float32Array(this.dimensions);
98
- const normalized = text.toLowerCase().trim();
99
- for (let i = 0; i < this.dimensions; i++) {
100
- let hash = 0;
101
- for (let j = 0; j < normalized.length; j++) {
102
- hash = ((hash << 5) - hash + normalized.charCodeAt(j) * (i + 1)) | 0;
103
- }
104
- embedding[i] = (Math.sin(hash) + 1) / 2;
105
- }
106
- // L2 normalize
107
- let norm = 0;
108
- for (let i = 0; i < this.dimensions; i++) {
109
- norm += embedding[i] * embedding[i];
110
- }
111
- norm = Math.sqrt(norm);
112
- if (norm > 0) {
113
- for (let i = 0; i < this.dimensions; i++) {
114
- embedding[i] /= norm;
115
- }
116
- }
117
- return embedding;
118
- }
119
- }
120
- // ============================================================================
121
- // Shard Retriever
122
- // ============================================================================
123
- export class ShardRetriever {
124
- shards = [];
125
- constitution = null;
126
- embeddingProvider;
127
- indexed = false;
128
- globCache = new Map();
129
- constructor(embeddingProvider) {
130
- this.embeddingProvider = embeddingProvider ?? new HashEmbeddingProvider();
131
- }
132
- /**
133
- * Load a compiled policy bundle
134
- */
135
- async loadBundle(bundle) {
136
- this.constitution = bundle.constitution;
137
- this.shards = bundle.shards;
138
- this.indexed = false;
139
- await this.indexShards();
140
- }
141
- /**
142
- * Index all shards by generating embeddings
143
- */
144
- async indexShards() {
145
- if (this.indexed)
146
- return;
147
- const texts = this.shards.map(s => s.compactText);
148
- const embeddings = await this.embeddingProvider.batchEmbed(texts);
149
- for (let i = 0; i < this.shards.length; i++) {
150
- this.shards[i].embedding = embeddings[i];
151
- }
152
- this.indexed = true;
153
- }
154
- /**
155
- * Classify task intent
156
- */
157
- classifyIntent(taskDescription) {
158
- let bestIntent = 'general';
159
- let bestScore = 0;
160
- for (const [intent, patterns] of Object.entries(INTENT_PATTERNS)) {
161
- if (intent === 'general')
162
- continue; // Skip general fallback during scoring
163
- let score = 0;
164
- for (const { pattern, weight } of patterns) {
165
- if (pattern.test(taskDescription)) {
166
- score += weight;
167
- }
168
- }
169
- if (score > bestScore) {
170
- bestScore = score;
171
- bestIntent = intent;
172
- }
173
- }
174
- // Normalize confidence to 0-1
175
- const confidence = Math.min(bestScore / 3, 1);
176
- return { intent: bestIntent, confidence };
177
- }
178
- /**
179
- * Retrieve relevant shards for a task
180
- *
181
- * Contract:
182
- * 1. Always include the constitution
183
- * 2. Up to maxShards by semantic similarity
184
- * 3. Hard filters by risk class and repo scope
185
- * 4. Contradiction check: prefer higher priority
186
- */
187
- async retrieve(request) {
188
- const startTime = performance.now();
189
- if (!this.constitution) {
190
- throw new Error('No policy bundle loaded. Call loadBundle() first.');
191
- }
192
- // Step 1: Classify intent
193
- const { intent: detectedIntent } = this.classifyIntent(request.taskDescription);
194
- const intent = request.intent ?? detectedIntent;
195
- // Step 2: Generate query embedding
196
- const queryEmbedding = await this.embeddingProvider.embed(request.taskDescription);
197
- // Step 3: Score all shards
198
- const maxShards = request.maxShards ?? 5;
199
- const scored = this.scoreShards(queryEmbedding, intent, request.riskFilter, request.repoScope);
200
- // Step 4: Select top N with contradiction resolution
201
- const selected = this.selectWithContradictionCheck(scored, maxShards);
202
- // Step 5: Build combined policy text
203
- const policyText = this.buildPolicyText(this.constitution, selected);
204
- const latencyMs = performance.now() - startTime;
205
- return {
206
- constitution: this.constitution,
207
- shards: selected,
208
- detectedIntent: intent,
209
- contradictionsResolved: this.countContradictions(selected),
210
- policyText,
211
- latencyMs,
212
- };
213
- }
214
- /**
215
- * Score all shards against the query
216
- */
217
- scoreShards(queryEmbedding, intent, riskFilter, repoScope) {
218
- const results = [];
219
- for (const shard of this.shards) {
220
- // Hard filter: risk class
221
- if (riskFilter && riskFilter.length > 0) {
222
- if (!riskFilter.includes(shard.rule.riskClass))
223
- continue;
224
- }
225
- // Hard filter: repo scope
226
- if (repoScope) {
227
- const matchesScope = shard.rule.repoScopes.some(scope => scope === '**/*' || this.matchGlob(repoScope, scope));
228
- if (!matchesScope)
229
- continue;
230
- }
231
- // Semantic similarity
232
- let similarity = 0;
233
- if (shard.embedding) {
234
- similarity = this.cosineSimilarity(queryEmbedding, shard.embedding);
235
- }
236
- // Intent boost: if shard matches detected intent, boost score
237
- const intentBoost = shard.rule.intents.includes(intent) ? 0.15 : 0;
238
- // Risk boost: critical/high rules get a boost
239
- const riskBoost = shard.rule.riskClass === 'critical' ? 0.1
240
- : shard.rule.riskClass === 'high' ? 0.05
241
- : 0;
242
- const finalScore = similarity + intentBoost + riskBoost;
243
- const reasons = [];
244
- if (similarity > 0.3)
245
- reasons.push(`semantic match (${(similarity * 100).toFixed(0)}%)`);
246
- if (intentBoost > 0)
247
- reasons.push(`intent match (${intent})`);
248
- if (riskBoost > 0)
249
- reasons.push(`risk priority (${shard.rule.riskClass})`);
250
- results.push({
251
- shard,
252
- similarity: finalScore,
253
- reason: reasons.join(', ') || 'general relevance',
254
- });
255
- }
256
- // Sort by combined score descending
257
- return results.sort((a, b) => b.similarity - a.similarity);
258
- }
259
- /**
260
- * Select top N shards with contradiction checking
261
- * When two rules contradict, keep the one with higher priority
262
- */
263
- selectWithContradictionCheck(scored, maxShards) {
264
- const selected = [];
265
- const selectedDomains = new Map(); // domain -> highest priority
266
- for (const item of scored) {
267
- if (selected.length >= maxShards)
268
- break;
269
- // Check for potential contradictions with already selected shards
270
- let dominated = false;
271
- for (const domain of item.shard.rule.domains) {
272
- const existingPriority = selectedDomains.get(domain);
273
- if (existingPriority !== undefined && existingPriority > item.shard.rule.priority) {
274
- // Higher priority rule already selected for this domain
275
- // Check if they're likely contradictory (similar domain, different intent)
276
- const existing = selected.find(s => s.shard.rule.domains.includes(domain) &&
277
- s.shard.rule.priority > item.shard.rule.priority);
278
- if (existing && this.areContradictory(existing.shard.rule, item.shard.rule)) {
279
- dominated = true;
280
- break;
281
- }
282
- }
283
- }
284
- if (!dominated) {
285
- selected.push(item);
286
- for (const domain of item.shard.rule.domains) {
287
- const current = selectedDomains.get(domain) ?? 0;
288
- selectedDomains.set(domain, Math.max(current, item.shard.rule.priority));
289
- }
290
- }
291
- }
292
- return selected;
293
- }
294
- /**
295
- * Check if two rules are contradictory
296
- */
297
- areContradictory(a, b) {
298
- const negationPatterns = [
299
- { positive: /\bmust\b/i, negative: /\bnever\b|\bdo not\b|\bavoid\b/i },
300
- { positive: /\balways\b/i, negative: /\bnever\b|\bdon't\b/i },
301
- { positive: /\brequire\b/i, negative: /\bforbid\b|\bprohibit\b/i },
302
- ];
303
- for (const { positive, negative } of negationPatterns) {
304
- if ((positive.test(a.text) && negative.test(b.text)) ||
305
- (negative.test(a.text) && positive.test(b.text))) {
306
- return true;
307
- }
308
- }
309
- return false;
310
- }
311
- /**
312
- * Count contradictions in selected set
313
- */
314
- countContradictions(selected) {
315
- let count = 0;
316
- for (let i = 0; i < selected.length; i++) {
317
- for (let j = i + 1; j < selected.length; j++) {
318
- if (this.areContradictory(selected[i].shard.rule, selected[j].shard.rule)) {
319
- count++;
320
- }
321
- }
322
- }
323
- return count;
324
- }
325
- /**
326
- * Build combined policy text for injection
327
- */
328
- buildPolicyText(constitution, shards) {
329
- const parts = [];
330
- // Always include constitution
331
- parts.push(constitution.text);
332
- // Add retrieved shards
333
- if (shards.length > 0) {
334
- parts.push('');
335
- parts.push('## Task-Specific Rules');
336
- parts.push('');
337
- for (const { shard, reason } of shards) {
338
- parts.push(`- ${shard.compactText}`);
339
- }
340
- }
341
- return parts.join('\n');
342
- }
343
- /**
344
- * Simple glob matching (supports * and **).
345
- * Compiled regexes are cached per glob to avoid re-compiling on every call.
346
- */
347
- matchGlob(path, glob) {
348
- let re = this.globCache.get(glob);
349
- if (!re) {
350
- const pattern = glob
351
- .replace(/\*\*/g, '{{GLOBSTAR}}')
352
- .replace(/\*/g, '[^/]*')
353
- .replace(/{{GLOBSTAR}}/g, '.*')
354
- .replace(/\//g, '\\/');
355
- re = new RegExp(`^${pattern}$`);
356
- this.globCache.set(glob, re);
357
- }
358
- return re.test(path);
359
- }
360
- /**
361
- * Cosine similarity between two vectors
362
- */
363
- cosineSimilarity(a, b) {
364
- if (a.length !== b.length)
365
- return 0;
366
- let dot = 0, normA = 0, normB = 0;
367
- for (let i = 0; i < a.length; i++) {
368
- dot += a[i] * b[i];
369
- normA += a[i] * a[i];
370
- normB += b[i] * b[i];
371
- }
372
- const denom = Math.sqrt(normA) * Math.sqrt(normB);
373
- return denom > 0 ? Math.max(0, Math.min(1, dot / denom)) : 0;
374
- }
375
- /**
376
- * Get current shard count
377
- */
378
- get shardCount() {
379
- return this.shards.length;
380
- }
381
- /**
382
- * Get constitution
383
- */
384
- getConstitution() {
385
- return this.constitution;
386
- }
387
- }
388
- /**
389
- * Create a retriever instance
390
- */
391
- export function createRetriever(embeddingProvider) {
392
- return new ShardRetriever(embeddingProvider);
393
- }
394
- //# sourceMappingURL=retriever.js.map