monomind 1.11.12 → 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 (222) 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/build.md +3 -3
  5. package/.claude/skills/mastermind/content.md +3 -3
  6. package/.claude/skills/mastermind/createorg.md +2 -2
  7. package/.claude/skills/mastermind/finance.md +3 -3
  8. package/.claude/skills/mastermind/marketing.md +3 -3
  9. package/.claude/skills/mastermind/ops.md +3 -3
  10. package/.claude/skills/mastermind/release.md +3 -3
  11. package/.claude/skills/mastermind/research.md +3 -3
  12. package/.claude/skills/mastermind/review.md +3 -3
  13. package/.claude/skills/mastermind/sales.md +3 -3
  14. package/package.json +1 -1
  15. package/packages/@monomind/cli/dist/src/init/statusline-generator.js +3 -3
  16. package/packages/@monomind/cli/dist/src/observability/replay-reader.d.ts +1 -1
  17. package/packages/@monomind/cli/dist/src/update/checker.js +24 -7
  18. package/packages/@monomind/cli/dist/src/update/index.js +3 -6
  19. package/packages/@monomind/cli/package.json +1 -1
  20. package/packages/@monomind/cli/dist/src/agents/halt-signal.d.ts +0 -25
  21. package/packages/@monomind/cli/dist/src/agents/halt-signal.js +0 -76
  22. package/packages/@monomind/cli/dist/src/agents/index.d.ts +0 -18
  23. package/packages/@monomind/cli/dist/src/agents/index.js +0 -13
  24. package/packages/@monomind/cli/dist/src/agents/managed-agent.d.ts +0 -41
  25. package/packages/@monomind/cli/dist/src/agents/managed-agent.js +0 -69
  26. package/packages/@monomind/cli/dist/src/agents/prompt-experiment.d.ts +0 -23
  27. package/packages/@monomind/cli/dist/src/agents/prompt-experiment.js +0 -49
  28. package/packages/@monomind/cli/dist/src/agents/prompt-version-manager.d.ts +0 -22
  29. package/packages/@monomind/cli/dist/src/agents/prompt-version-manager.js +0 -80
  30. package/packages/@monomind/cli/dist/src/agents/registry-query.d.ts +0 -71
  31. package/packages/@monomind/cli/dist/src/agents/registry-query.js +0 -125
  32. package/packages/@monomind/cli/dist/src/agents/score-decay.d.ts +0 -19
  33. package/packages/@monomind/cli/dist/src/agents/score-decay.js +0 -22
  34. package/packages/@monomind/cli/dist/src/agents/shared-instructions-loader.d.ts +0 -13
  35. package/packages/@monomind/cli/dist/src/agents/shared-instructions-loader.js +0 -40
  36. package/packages/@monomind/cli/dist/src/agents/specialization-scorer.d.ts +0 -54
  37. package/packages/@monomind/cli/dist/src/agents/specialization-scorer.js +0 -212
  38. package/packages/@monomind/cli/dist/src/agents/termination-watcher.d.ts +0 -30
  39. package/packages/@monomind/cli/dist/src/agents/termination-watcher.js +0 -84
  40. package/packages/@monomind/cli/dist/src/agents/trigger-index.d.ts +0 -20
  41. package/packages/@monomind/cli/dist/src/agents/trigger-index.js +0 -38
  42. package/packages/@monomind/cli/dist/src/agents/trigger-scanner.d.ts +0 -64
  43. package/packages/@monomind/cli/dist/src/agents/trigger-scanner.js +0 -308
  44. package/packages/@monomind/cli/dist/src/agents/version-diff.d.ts +0 -18
  45. package/packages/@monomind/cli/dist/src/agents/version-diff.js +0 -64
  46. package/packages/@monomind/cli/dist/src/agents/version-store.d.ts +0 -60
  47. package/packages/@monomind/cli/dist/src/agents/version-store.js +0 -235
  48. package/packages/@monomind/cli/dist/src/benchmarks/pretrain/index.d.ts +0 -45
  49. package/packages/@monomind/cli/dist/src/benchmarks/pretrain/index.js +0 -404
  50. package/packages/@monomind/cli/dist/src/commands/agent-wasm.d.ts +0 -14
  51. package/packages/@monomind/cli/dist/src/commands/agent-wasm.js +0 -333
  52. package/packages/@monomind/cli/dist/src/commands/ui.js +0 -68
  53. package/packages/@monomind/cli/dist/src/consensus/index.d.ts +0 -7
  54. package/packages/@monomind/cli/dist/src/consensus/index.js +0 -6
  55. package/packages/@monomind/cli/dist/src/context/context-provider.d.ts +0 -44
  56. package/packages/@monomind/cli/dist/src/context/context-provider.js +0 -25
  57. package/packages/@monomind/cli/dist/src/context/git-state-provider.d.ts +0 -12
  58. package/packages/@monomind/cli/dist/src/context/git-state-provider.js +0 -34
  59. package/packages/@monomind/cli/dist/src/context/index.d.ts +0 -12
  60. package/packages/@monomind/cli/dist/src/context/index.js +0 -12
  61. package/packages/@monomind/cli/dist/src/context/project-conventions-provider.d.ts +0 -15
  62. package/packages/@monomind/cli/dist/src/context/project-conventions-provider.js +0 -19
  63. package/packages/@monomind/cli/dist/src/context/prompt-assembler.d.ts +0 -26
  64. package/packages/@monomind/cli/dist/src/context/prompt-assembler.js +0 -93
  65. package/packages/@monomind/cli/dist/src/context/task-history-provider.d.ts +0 -24
  66. package/packages/@monomind/cli/dist/src/context/task-history-provider.js +0 -32
  67. package/packages/@monomind/cli/dist/src/context/user-preferences-provider.d.ts +0 -14
  68. package/packages/@monomind/cli/dist/src/context/user-preferences-provider.js +0 -27
  69. package/packages/@monomind/cli/dist/src/dlq/dlq-reader.d.ts +0 -31
  70. package/packages/@monomind/cli/dist/src/dlq/dlq-reader.js +0 -81
  71. package/packages/@monomind/cli/dist/src/dlq/dlq-writer.d.ts +0 -24
  72. package/packages/@monomind/cli/dist/src/dlq/dlq-writer.js +0 -65
  73. package/packages/@monomind/cli/dist/src/dlq/index.d.ts +0 -10
  74. package/packages/@monomind/cli/dist/src/dlq/index.js +0 -7
  75. package/packages/@monomind/cli/dist/src/eval/dataset-manager.d.ts +0 -33
  76. package/packages/@monomind/cli/dist/src/eval/dataset-manager.js +0 -107
  77. package/packages/@monomind/cli/dist/src/eval/dataset-runner.d.ts +0 -23
  78. package/packages/@monomind/cli/dist/src/eval/dataset-runner.js +0 -59
  79. package/packages/@monomind/cli/dist/src/eval/index.d.ts +0 -10
  80. package/packages/@monomind/cli/dist/src/eval/index.js +0 -7
  81. package/packages/@monomind/cli/dist/src/eval/trace-collector.d.ts +0 -40
  82. package/packages/@monomind/cli/dist/src/eval/trace-collector.js +0 -102
  83. package/packages/@monomind/cli/dist/src/infrastructure/in-memory-repositories.d.ts +0 -68
  84. package/packages/@monomind/cli/dist/src/infrastructure/in-memory-repositories.js +0 -264
  85. package/packages/@monomind/cli/dist/src/interactive/interrupt.d.ts +0 -22
  86. package/packages/@monomind/cli/dist/src/interactive/interrupt.js +0 -71
  87. package/packages/@monomind/cli/dist/src/mcp/deprecation-injector.d.ts +0 -25
  88. package/packages/@monomind/cli/dist/src/mcp/deprecation-injector.js +0 -48
  89. package/packages/@monomind/cli/dist/src/mcp/tool-registry.d.ts +0 -61
  90. package/packages/@monomind/cli/dist/src/mcp/tool-registry.js +0 -246
  91. package/packages/@monomind/cli/dist/src/mcp-tools/wasm-agent-tools.d.ts +0 -9
  92. package/packages/@monomind/cli/dist/src/mcp-tools/wasm-agent-tools.js +0 -230
  93. package/packages/@monomind/cli/dist/src/model/complexity-scorer.d.ts +0 -21
  94. package/packages/@monomind/cli/dist/src/model/complexity-scorer.js +0 -106
  95. package/packages/@monomind/cli/dist/src/model/index.d.ts +0 -4
  96. package/packages/@monomind/cli/dist/src/model/index.js +0 -4
  97. package/packages/@monomind/cli/dist/src/model/model-settings.d.ts +0 -22
  98. package/packages/@monomind/cli/dist/src/model/model-settings.js +0 -33
  99. package/packages/@monomind/cli/dist/src/model/model-tier-resolver.d.ts +0 -24
  100. package/packages/@monomind/cli/dist/src/model/model-tier-resolver.js +0 -65
  101. package/packages/@monomind/cli/dist/src/monovector/capabilities.d.ts +0 -34
  102. package/packages/@monomind/cli/dist/src/monovector/capabilities.js +0 -37
  103. package/packages/@monomind/cli/dist/src/orchestration/index.d.ts +0 -7
  104. package/packages/@monomind/cli/dist/src/orchestration/index.js +0 -6
  105. package/packages/@monomind/cli/dist/src/orchestration/mode-dispatcher.d.ts +0 -11
  106. package/packages/@monomind/cli/dist/src/orchestration/mode-dispatcher.js +0 -31
  107. package/packages/@monomind/cli/dist/src/orchestration/routing-modes.d.ts +0 -68
  108. package/packages/@monomind/cli/dist/src/orchestration/routing-modes.js +0 -180
  109. package/packages/@monomind/cli/dist/src/plugins/tests/demo-plugin-store.d.ts +0 -7
  110. package/packages/@monomind/cli/dist/src/plugins/tests/demo-plugin-store.js +0 -126
  111. package/packages/@monomind/cli/dist/src/plugins/tests/standalone-test.d.ts +0 -12
  112. package/packages/@monomind/cli/dist/src/plugins/tests/standalone-test.js +0 -188
  113. package/packages/@monomind/cli/dist/src/plugins/tests/test-plugin-store.d.ts +0 -7
  114. package/packages/@monomind/cli/dist/src/plugins/tests/test-plugin-store.js +0 -206
  115. package/packages/@monomind/cli/dist/src/runtime/headless.d.ts +0 -60
  116. package/packages/@monomind/cli/dist/src/runtime/headless.js +0 -284
  117. package/packages/@monomind/cli/dist/src/services/agentic-flow-bridge.d.ts +0 -50
  118. package/packages/@monomind/cli/dist/src/services/agentic-flow-bridge.js +0 -95
  119. package/packages/@monomind/cli/dist/src/services/container-worker-pool.d.ts +0 -197
  120. package/packages/@monomind/cli/dist/src/services/container-worker-pool.js +0 -623
  121. package/packages/@monomind/cli/dist/src/services/index.d.ts +0 -13
  122. package/packages/@monomind/cli/dist/src/services/index.js +0 -11
  123. package/packages/@monomind/cli/dist/src/services/worker-queue.d.ts +0 -201
  124. package/packages/@monomind/cli/dist/src/services/worker-queue.js +0 -594
  125. package/packages/@monomind/cli/dist/src/swarm/communication-graph.d.ts +0 -25
  126. package/packages/@monomind/cli/dist/src/swarm/communication-graph.js +0 -77
  127. package/packages/@monomind/cli/dist/src/swarm/flow-enforcer.d.ts +0 -31
  128. package/packages/@monomind/cli/dist/src/swarm/flow-enforcer.js +0 -61
  129. package/packages/@monomind/cli/dist/src/swarm/flow-visualizer.d.ts +0 -19
  130. package/packages/@monomind/cli/dist/src/swarm/flow-visualizer.js +0 -68
  131. package/packages/@monomind/cli/dist/src/transfer/deploy-seraphine.d.ts +0 -13
  132. package/packages/@monomind/cli/dist/src/transfer/deploy-seraphine.js +0 -205
  133. package/packages/@monomind/cli/dist/src/transfer/store/tests/standalone-test.d.ts +0 -12
  134. package/packages/@monomind/cli/dist/src/transfer/store/tests/standalone-test.js +0 -190
  135. package/packages/@monomind/cli/dist/src/transfer/test-seraphine.d.ts +0 -6
  136. package/packages/@monomind/cli/dist/src/transfer/test-seraphine.js +0 -105
  137. package/packages/@monomind/cli/dist/src/transfer/tests/test-store.d.ts +0 -7
  138. package/packages/@monomind/cli/dist/src/transfer/tests/test-store.js +0 -214
  139. package/packages/@monomind/cli/dist/src/workflow/condition-evaluator.d.ts +0 -10
  140. package/packages/@monomind/cli/dist/src/workflow/condition-evaluator.js +0 -82
  141. package/packages/@monomind/cli/dist/src/workflow/context-resolver.d.ts +0 -12
  142. package/packages/@monomind/cli/dist/src/workflow/context-resolver.js +0 -23
  143. package/packages/@monomind/cli/dist/src/workflow/dag-builder.d.ts +0 -17
  144. package/packages/@monomind/cli/dist/src/workflow/dag-builder.js +0 -129
  145. package/packages/@monomind/cli/dist/src/workflow/dag-executor.d.ts +0 -9
  146. package/packages/@monomind/cli/dist/src/workflow/dag-executor.js +0 -116
  147. package/packages/@monomind/cli/dist/src/workflow/dag-types.d.ts +0 -41
  148. package/packages/@monomind/cli/dist/src/workflow/dag-types.js +0 -8
  149. package/packages/@monomind/cli/dist/src/workflow/dsl-parser.d.ts +0 -12
  150. package/packages/@monomind/cli/dist/src/workflow/dsl-parser.js +0 -20
  151. package/packages/@monomind/cli/dist/src/workflow/dsl-schema.d.ts +0 -165
  152. package/packages/@monomind/cli/dist/src/workflow/dsl-schema.js +0 -82
  153. package/packages/@monomind/cli/dist/src/workflow/index.d.ts +0 -13
  154. package/packages/@monomind/cli/dist/src/workflow/index.js +0 -11
  155. package/packages/@monomind/cli/dist/src/workflow/template-engine.d.ts +0 -11
  156. package/packages/@monomind/cli/dist/src/workflow/template-engine.js +0 -40
  157. package/packages/@monomind/cli/dist/src/workflow/workflow-executor.d.ts +0 -29
  158. package/packages/@monomind/cli/dist/src/workflow/workflow-executor.js +0 -227
  159. package/packages/@monomind/guidance/dist/adversarial.d.ts +0 -284
  160. package/packages/@monomind/guidance/dist/adversarial.js +0 -572
  161. package/packages/@monomind/guidance/dist/analyzer.d.ts +0 -530
  162. package/packages/@monomind/guidance/dist/analyzer.js +0 -2518
  163. package/packages/@monomind/guidance/dist/artifacts.d.ts +0 -283
  164. package/packages/@monomind/guidance/dist/artifacts.js +0 -356
  165. package/packages/@monomind/guidance/dist/authority.d.ts +0 -290
  166. package/packages/@monomind/guidance/dist/authority.js +0 -558
  167. package/packages/@monomind/guidance/dist/capabilities.d.ts +0 -209
  168. package/packages/@monomind/guidance/dist/capabilities.js +0 -485
  169. package/packages/@monomind/guidance/dist/coherence.d.ts +0 -233
  170. package/packages/@monomind/guidance/dist/coherence.js +0 -372
  171. package/packages/@monomind/guidance/dist/compiler.d.ts +0 -87
  172. package/packages/@monomind/guidance/dist/compiler.js +0 -419
  173. package/packages/@monomind/guidance/dist/conformance-kit.d.ts +0 -225
  174. package/packages/@monomind/guidance/dist/conformance-kit.js +0 -629
  175. package/packages/@monomind/guidance/dist/continue-gate.d.ts +0 -214
  176. package/packages/@monomind/guidance/dist/continue-gate.js +0 -353
  177. package/packages/@monomind/guidance/dist/crypto-utils.d.ts +0 -17
  178. package/packages/@monomind/guidance/dist/crypto-utils.js +0 -24
  179. package/packages/@monomind/guidance/dist/evolution.d.ts +0 -282
  180. package/packages/@monomind/guidance/dist/evolution.js +0 -500
  181. package/packages/@monomind/guidance/dist/gates.d.ts +0 -79
  182. package/packages/@monomind/guidance/dist/gates.js +0 -302
  183. package/packages/@monomind/guidance/dist/gateway.d.ts +0 -206
  184. package/packages/@monomind/guidance/dist/gateway.js +0 -452
  185. package/packages/@monomind/guidance/dist/generators.d.ts +0 -153
  186. package/packages/@monomind/guidance/dist/generators.js +0 -682
  187. package/packages/@monomind/guidance/dist/headless.d.ts +0 -177
  188. package/packages/@monomind/guidance/dist/headless.js +0 -342
  189. package/packages/@monomind/guidance/dist/hooks.d.ts +0 -109
  190. package/packages/@monomind/guidance/dist/hooks.js +0 -347
  191. package/packages/@monomind/guidance/dist/index.d.ts +0 -205
  192. package/packages/@monomind/guidance/dist/index.js +0 -321
  193. package/packages/@monomind/guidance/dist/ledger.d.ts +0 -162
  194. package/packages/@monomind/guidance/dist/ledger.js +0 -375
  195. package/packages/@monomind/guidance/dist/manifest-validator.d.ts +0 -289
  196. package/packages/@monomind/guidance/dist/manifest-validator.js +0 -838
  197. package/packages/@monomind/guidance/dist/memory-gate.d.ts +0 -222
  198. package/packages/@monomind/guidance/dist/memory-gate.js +0 -382
  199. package/packages/@monomind/guidance/dist/meta-governance.d.ts +0 -265
  200. package/packages/@monomind/guidance/dist/meta-governance.js +0 -348
  201. package/packages/@monomind/guidance/dist/optimizer.d.ts +0 -104
  202. package/packages/@monomind/guidance/dist/optimizer.js +0 -329
  203. package/packages/@monomind/guidance/dist/persistence.d.ts +0 -189
  204. package/packages/@monomind/guidance/dist/persistence.js +0 -464
  205. package/packages/@monomind/guidance/dist/proof.d.ts +0 -185
  206. package/packages/@monomind/guidance/dist/proof.js +0 -238
  207. package/packages/@monomind/guidance/dist/retriever.d.ts +0 -116
  208. package/packages/@monomind/guidance/dist/retriever.js +0 -394
  209. package/packages/@monomind/guidance/dist/ruvbot-integration.d.ts +0 -370
  210. package/packages/@monomind/guidance/dist/ruvbot-integration.js +0 -738
  211. package/packages/@monomind/guidance/dist/temporal.d.ts +0 -426
  212. package/packages/@monomind/guidance/dist/temporal.js +0 -658
  213. package/packages/@monomind/guidance/dist/trust.d.ts +0 -283
  214. package/packages/@monomind/guidance/dist/trust.js +0 -473
  215. package/packages/@monomind/guidance/dist/truth-anchors.d.ts +0 -276
  216. package/packages/@monomind/guidance/dist/truth-anchors.js +0 -488
  217. package/packages/@monomind/guidance/dist/types.d.ts +0 -378
  218. package/packages/@monomind/guidance/dist/types.js +0 -10
  219. package/packages/@monomind/guidance/dist/uncertainty.d.ts +0 -372
  220. package/packages/@monomind/guidance/dist/uncertainty.js +0 -619
  221. package/packages/@monomind/guidance/dist/wasm-kernel.d.ts +0 -48
  222. 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