@theihtisham/agent-shadow-brain 5.2.0 → 6.0.2
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.
- package/README.md +310 -1014
- package/dist/brain/agent-firewall.d.ts +7 -0
- package/dist/brain/agent-firewall.d.ts.map +1 -0
- package/dist/brain/agent-firewall.js +152 -0
- package/dist/brain/agent-firewall.js.map +1 -0
- package/dist/brain/agent-handoff.d.ts +19 -0
- package/dist/brain/agent-handoff.d.ts.map +1 -0
- package/dist/brain/agent-handoff.js +127 -0
- package/dist/brain/agent-handoff.js.map +1 -0
- package/dist/brain/air-gap.d.ts +23 -0
- package/dist/brain/air-gap.d.ts.map +1 -0
- package/dist/brain/air-gap.js +137 -0
- package/dist/brain/air-gap.js.map +1 -0
- package/dist/brain/attention-heatmap.d.ts +24 -0
- package/dist/brain/attention-heatmap.d.ts.map +1 -0
- package/dist/brain/attention-heatmap.js +108 -0
- package/dist/brain/attention-heatmap.js.map +1 -0
- package/dist/brain/auto-setup.js +19 -14
- package/dist/brain/auto-setup.js.map +1 -1
- package/dist/brain/auto-update.js +1 -1
- package/dist/brain/brain-3d.d.ts +79 -0
- package/dist/brain/brain-3d.d.ts.map +1 -0
- package/dist/brain/brain-3d.js +468 -0
- package/dist/brain/brain-3d.js.map +1 -0
- package/dist/brain/brain-active-learner.d.ts +74 -0
- package/dist/brain/brain-active-learner.d.ts.map +1 -0
- package/dist/brain/brain-active-learner.js +425 -0
- package/dist/brain/brain-active-learner.js.map +1 -0
- package/dist/brain/brain-ascii.d.ts +32 -0
- package/dist/brain/brain-ascii.d.ts.map +1 -0
- package/dist/brain/brain-ascii.js +402 -0
- package/dist/brain/brain-ascii.js.map +1 -0
- package/dist/brain/brain-chat.d.ts +42 -0
- package/dist/brain/brain-chat.d.ts.map +1 -0
- package/dist/brain/brain-chat.js +162 -0
- package/dist/brain/brain-chat.js.map +1 -0
- package/dist/brain/brain-cinema.d.ts +45 -0
- package/dist/brain/brain-cinema.d.ts.map +1 -0
- package/dist/brain/brain-cinema.js +393 -0
- package/dist/brain/brain-cinema.js.map +1 -0
- package/dist/brain/brain-coach.d.ts +45 -0
- package/dist/brain/brain-coach.d.ts.map +1 -0
- package/dist/brain/brain-coach.js +383 -0
- package/dist/brain/brain-coach.js.map +1 -0
- package/dist/brain/brain-consolidator.d.ts +56 -0
- package/dist/brain/brain-consolidator.d.ts.map +1 -0
- package/dist/brain/brain-consolidator.js +386 -0
- package/dist/brain/brain-consolidator.js.map +1 -0
- package/dist/brain/brain-contradictions.d.ts +57 -0
- package/dist/brain/brain-contradictions.d.ts.map +1 -0
- package/dist/brain/brain-contradictions.js +443 -0
- package/dist/brain/brain-contradictions.js.map +1 -0
- package/dist/brain/brain-diff.d.ts +61 -0
- package/dist/brain/brain-diff.d.ts.map +1 -0
- package/dist/brain/brain-diff.js +439 -0
- package/dist/brain/brain-diff.js.map +1 -0
- package/dist/brain/brain-dna.d.ts +59 -0
- package/dist/brain/brain-dna.d.ts.map +1 -0
- package/dist/brain/brain-dna.js +336 -0
- package/dist/brain/brain-dna.js.map +1 -0
- package/dist/brain/brain-doppelganger.d.ts +32 -0
- package/dist/brain/brain-doppelganger.d.ts.map +1 -0
- package/dist/brain/brain-doppelganger.js +417 -0
- package/dist/brain/brain-doppelganger.js.map +1 -0
- package/dist/brain/brain-encryption.d.ts +14 -0
- package/dist/brain/brain-encryption.d.ts.map +1 -0
- package/dist/brain/brain-encryption.js +68 -0
- package/dist/brain/brain-encryption.js.map +1 -0
- package/dist/brain/brain-exchange.d.ts +30 -0
- package/dist/brain/brain-exchange.d.ts.map +1 -0
- package/dist/brain/brain-exchange.js +106 -0
- package/dist/brain/brain-exchange.js.map +1 -0
- package/dist/brain/brain-garden.d.ts +18 -0
- package/dist/brain/brain-garden.d.ts.map +1 -0
- package/dist/brain/brain-garden.js +81 -0
- package/dist/brain/brain-garden.js.map +1 -0
- package/dist/brain/brain-graph-walker.d.ts +54 -0
- package/dist/brain/brain-graph-walker.d.ts.map +1 -0
- package/dist/brain/brain-graph-walker.js +412 -0
- package/dist/brain/brain-graph-walker.js.map +1 -0
- package/dist/brain/brain-holiday-card.d.ts +50 -0
- package/dist/brain/brain-holiday-card.d.ts.map +1 -0
- package/dist/brain/brain-holiday-card.js +432 -0
- package/dist/brain/brain-holiday-card.js.map +1 -0
- package/dist/brain/brain-memes.d.ts +44 -0
- package/dist/brain/brain-memes.d.ts.map +1 -0
- package/dist/brain/brain-memes.js +438 -0
- package/dist/brain/brain-memes.js.map +1 -0
- package/dist/brain/brain-memory-tiers.d.ts +67 -0
- package/dist/brain/brain-memory-tiers.d.ts.map +1 -0
- package/dist/brain/brain-memory-tiers.js +292 -0
- package/dist/brain/brain-memory-tiers.js.map +1 -0
- package/dist/brain/brain-notebook.d.ts +68 -0
- package/dist/brain/brain-notebook.d.ts.map +1 -0
- package/dist/brain/brain-notebook.js +379 -0
- package/dist/brain/brain-notebook.js.map +1 -0
- package/dist/brain/brain-portability.js +1 -1
- package/dist/brain/brain-quantize.d.ts +62 -0
- package/dist/brain/brain-quantize.d.ts.map +1 -0
- package/dist/brain/brain-quantize.js +346 -0
- package/dist/brain/brain-quantize.js.map +1 -0
- package/dist/brain/brain-query-expander.d.ts +31 -0
- package/dist/brain/brain-query-expander.d.ts.map +1 -0
- package/dist/brain/brain-query-expander.js +417 -0
- package/dist/brain/brain-query-expander.js.map +1 -0
- package/dist/brain/brain-quest.d.ts +58 -0
- package/dist/brain/brain-quest.d.ts.map +1 -0
- package/dist/brain/brain-quest.js +541 -0
- package/dist/brain/brain-quest.js.map +1 -0
- package/dist/brain/brain-recall-cache.d.ts +73 -0
- package/dist/brain/brain-recall-cache.d.ts.map +1 -0
- package/dist/brain/brain-recall-cache.js +444 -0
- package/dist/brain/brain-recall-cache.js.map +1 -0
- package/dist/brain/brain-reflex.d.ts +55 -0
- package/dist/brain/brain-reflex.d.ts.map +1 -0
- package/dist/brain/brain-reflex.js +364 -0
- package/dist/brain/brain-reflex.js.map +1 -0
- package/dist/brain/brain-replay.d.ts +74 -0
- package/dist/brain/brain-replay.d.ts.map +1 -0
- package/dist/brain/brain-replay.js +336 -0
- package/dist/brain/brain-replay.js.map +1 -0
- package/dist/brain/brain-rerank.d.ts +39 -0
- package/dist/brain/brain-rerank.d.ts.map +1 -0
- package/dist/brain/brain-rerank.js +216 -0
- package/dist/brain/brain-rerank.js.map +1 -0
- package/dist/brain/brain-roast.d.ts +44 -0
- package/dist/brain/brain-roast.d.ts.map +1 -0
- package/dist/brain/brain-roast.js +566 -0
- package/dist/brain/brain-roast.js.map +1 -0
- package/dist/brain/brain-sonification.d.ts +57 -0
- package/dist/brain/brain-sonification.d.ts.map +1 -0
- package/dist/brain/brain-sonification.js +286 -0
- package/dist/brain/brain-sonification.js.map +1 -0
- package/dist/brain/brain-tarot.d.ts +49 -0
- package/dist/brain/brain-tarot.d.ts.map +1 -0
- package/dist/brain/brain-tarot.js +634 -0
- package/dist/brain/brain-tarot.js.map +1 -0
- package/dist/brain/brain-time-capsule.d.ts +80 -0
- package/dist/brain/brain-time-capsule.d.ts.map +1 -0
- package/dist/brain/brain-time-capsule.js +289 -0
- package/dist/brain/brain-time-capsule.js.map +1 -0
- package/dist/brain/brain-trophies.d.ts +60 -0
- package/dist/brain/brain-trophies.d.ts.map +1 -0
- package/dist/brain/brain-trophies.js +431 -0
- package/dist/brain/brain-trophies.js.map +1 -0
- package/dist/brain/brain-working-memory.d.ts +78 -0
- package/dist/brain/brain-working-memory.d.ts.map +1 -0
- package/dist/brain/brain-working-memory.js +367 -0
- package/dist/brain/brain-working-memory.js.map +1 -0
- package/dist/brain/branch-brain.d.ts +23 -0
- package/dist/brain/branch-brain.d.ts.map +1 -0
- package/dist/brain/branch-brain.js +159 -0
- package/dist/brain/branch-brain.js.map +1 -0
- package/dist/brain/calibration-monitor.d.ts +20 -0
- package/dist/brain/calibration-monitor.d.ts.map +1 -0
- package/dist/brain/calibration-monitor.js +144 -0
- package/dist/brain/calibration-monitor.js.map +1 -0
- package/dist/brain/causal-chains.d.ts +37 -0
- package/dist/brain/causal-chains.d.ts.map +1 -0
- package/dist/brain/causal-chains.js +250 -0
- package/dist/brain/causal-chains.js.map +1 -0
- package/dist/brain/collision-detective.d.ts +32 -0
- package/dist/brain/collision-detective.d.ts.map +1 -0
- package/dist/brain/collision-detective.js +233 -0
- package/dist/brain/collision-detective.js.map +1 -0
- package/dist/brain/confidence-gate.d.ts +69 -0
- package/dist/brain/confidence-gate.d.ts.map +1 -0
- package/dist/brain/confidence-gate.js +244 -0
- package/dist/brain/confidence-gate.js.map +1 -0
- package/dist/brain/constitution.d.ts +59 -0
- package/dist/brain/constitution.d.ts.map +1 -0
- package/dist/brain/constitution.js +315 -0
- package/dist/brain/constitution.js.map +1 -0
- package/dist/brain/cost-aware-spawner.d.ts +7 -0
- package/dist/brain/cost-aware-spawner.d.ts.map +1 -0
- package/dist/brain/cost-aware-spawner.js +77 -0
- package/dist/brain/cost-aware-spawner.js.map +1 -0
- package/dist/brain/dream-engine.d.ts +35 -0
- package/dist/brain/dream-engine.d.ts.map +1 -0
- package/dist/brain/dream-engine.js +273 -0
- package/dist/brain/dream-engine.js.map +1 -0
- package/dist/brain/embeddings-v2.d.ts +58 -0
- package/dist/brain/embeddings-v2.d.ts.map +1 -0
- package/dist/brain/embeddings-v2.js +344 -0
- package/dist/brain/embeddings-v2.js.map +1 -0
- package/dist/brain/embeddings.d.ts +27 -0
- package/dist/brain/embeddings.d.ts.map +1 -0
- package/dist/brain/embeddings.js +175 -0
- package/dist/brain/embeddings.js.map +1 -0
- package/dist/brain/forgetting-curve.d.ts +21 -0
- package/dist/brain/forgetting-curve.d.ts.map +1 -0
- package/dist/brain/forgetting-curve.js +174 -0
- package/dist/brain/forgetting-curve.js.map +1 -0
- package/dist/brain/formal-verification-bridge.d.ts +26 -0
- package/dist/brain/formal-verification-bridge.d.ts.map +1 -0
- package/dist/brain/formal-verification-bridge.js +219 -0
- package/dist/brain/formal-verification-bridge.js.map +1 -0
- package/dist/brain/global-brain.d.ts +8 -1
- package/dist/brain/global-brain.d.ts.map +1 -1
- package/dist/brain/global-brain.js +24 -0
- package/dist/brain/global-brain.js.map +1 -1
- package/dist/brain/hallucination-quarantine.d.ts +26 -0
- package/dist/brain/hallucination-quarantine.d.ts.map +1 -0
- package/dist/brain/hallucination-quarantine.js +135 -0
- package/dist/brain/hallucination-quarantine.js.map +1 -0
- package/dist/brain/hive-accelerator.d.ts +39 -0
- package/dist/brain/hive-accelerator.d.ts.map +1 -0
- package/dist/brain/hive-accelerator.js +152 -0
- package/dist/brain/hive-accelerator.js.map +1 -0
- package/dist/brain/hive-voice.d.ts +71 -0
- package/dist/brain/hive-voice.d.ts.map +1 -0
- package/dist/brain/hive-voice.js +352 -0
- package/dist/brain/hive-voice.js.map +1 -0
- package/dist/brain/json-output.d.ts +26 -0
- package/dist/brain/json-output.d.ts.map +1 -0
- package/dist/brain/json-output.js +112 -0
- package/dist/brain/json-output.js.map +1 -0
- package/dist/brain/l0-cache.js +1 -1
- package/dist/brain/l0-cache.js.map +1 -1
- package/dist/brain/local-llm.d.ts +20 -0
- package/dist/brain/local-llm.d.ts.map +1 -0
- package/dist/brain/local-llm.js +132 -0
- package/dist/brain/local-llm.js.map +1 -0
- package/dist/brain/markdown-export.d.ts +48 -0
- package/dist/brain/markdown-export.d.ts.map +1 -0
- package/dist/brain/markdown-export.js +382 -0
- package/dist/brain/markdown-export.js.map +1 -0
- package/dist/brain/mcp-server.d.ts +40 -0
- package/dist/brain/mcp-server.d.ts.map +1 -1
- package/dist/brain/mcp-server.js +395 -12
- package/dist/brain/mcp-server.js.map +1 -1
- package/dist/brain/model-registry.d.ts +96 -0
- package/dist/brain/model-registry.d.ts.map +1 -0
- package/dist/brain/model-registry.js +585 -0
- package/dist/brain/model-registry.js.map +1 -0
- package/dist/brain/multimodal-vision.d.ts +38 -0
- package/dist/brain/multimodal-vision.d.ts.map +1 -0
- package/dist/brain/multimodal-vision.js +257 -0
- package/dist/brain/multimodal-vision.js.map +1 -0
- package/dist/brain/orchestrator.js +1 -1
- package/dist/brain/otel-lite.d.ts +71 -0
- package/dist/brain/otel-lite.d.ts.map +1 -0
- package/dist/brain/otel-lite.js +232 -0
- package/dist/brain/otel-lite.js.map +1 -0
- package/dist/brain/pr-auto-review.d.ts +17 -0
- package/dist/brain/pr-auto-review.d.ts.map +1 -0
- package/dist/brain/pr-auto-review.js +73 -0
- package/dist/brain/pr-auto-review.js.map +1 -0
- package/dist/brain/pre-mortem.d.ts +21 -0
- package/dist/brain/pre-mortem.d.ts.map +1 -0
- package/dist/brain/pre-mortem.js +210 -0
- package/dist/brain/pre-mortem.js.map +1 -0
- package/dist/brain/prompt-cache.d.ts +54 -0
- package/dist/brain/prompt-cache.d.ts.map +1 -0
- package/dist/brain/prompt-cache.js +105 -0
- package/dist/brain/prompt-cache.js.map +1 -0
- package/dist/brain/reputation-ledger.d.ts +42 -0
- package/dist/brain/reputation-ledger.d.ts.map +1 -0
- package/dist/brain/reputation-ledger.js +326 -0
- package/dist/brain/reputation-ledger.js.map +1 -0
- package/dist/brain/session-hooks.d.ts +19 -0
- package/dist/brain/session-hooks.d.ts.map +1 -1
- package/dist/brain/session-hooks.js +249 -18
- package/dist/brain/session-hooks.js.map +1 -1
- package/dist/brain/subagent-bridge.d.ts +46 -0
- package/dist/brain/subagent-bridge.d.ts.map +1 -0
- package/dist/brain/subagent-bridge.js +364 -0
- package/dist/brain/subagent-bridge.js.map +1 -0
- package/dist/brain/swarm-debate.d.ts +22 -0
- package/dist/brain/swarm-debate.d.ts.map +1 -0
- package/dist/brain/swarm-debate.js +134 -0
- package/dist/brain/swarm-debate.js.map +1 -0
- package/dist/brain/team-brain-sync.d.ts +22 -0
- package/dist/brain/team-brain-sync.d.ts.map +1 -0
- package/dist/brain/team-brain-sync.js +132 -0
- package/dist/brain/team-brain-sync.js.map +1 -0
- package/dist/brain/token-economy.d.ts +25 -0
- package/dist/brain/token-economy.d.ts.map +1 -0
- package/dist/brain/token-economy.js +216 -0
- package/dist/brain/token-economy.js.map +1 -0
- package/dist/brain/voice-mode.d.ts +15 -0
- package/dist/brain/voice-mode.d.ts.map +1 -0
- package/dist/brain/voice-mode.js +97 -0
- package/dist/brain/voice-mode.js.map +1 -0
- package/dist/cli.js +1702 -4
- package/dist/cli.js.map +1 -1
- package/dist/dashboard/server.d.ts +6 -0
- package/dist/dashboard/server.d.ts.map +1 -1
- package/dist/dashboard/server.js +1118 -368
- package/dist/dashboard/server.js.map +1 -1
- package/dist/dashboard/v6-dashboard-html.d.ts +2 -0
- package/dist/dashboard/v6-dashboard-html.d.ts.map +1 -0
- package/dist/dashboard/v6-dashboard-html.js +2474 -0
- package/dist/dashboard/v6-dashboard-html.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +518 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +33 -4
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
// src/brain/brain-query-expander.ts — Query expansion + HyDE
|
|
2
|
+
// v6.0.2 — Hive Mind Edition
|
|
3
|
+
//
|
|
4
|
+
// Short user queries make noisy embeddings. Expanding "fix auth" →
|
|
5
|
+
// "fix authentication login session token bearer" produces a denser
|
|
6
|
+
// query vector with more lexical surface area for the reranker to bite on.
|
|
7
|
+
//
|
|
8
|
+
// HyDE (Hypothetical Document Embeddings) takes this further: ask a local
|
|
9
|
+
// LLM to draft a 1-paragraph "ideal answer" to the query and search by
|
|
10
|
+
// THAT document. Empirically this beats raw query embedding for
|
|
11
|
+
// underspecified questions. Falls through to a templated pseudo-answer
|
|
12
|
+
// when no Ollama model is reachable so the technique always returns
|
|
13
|
+
// something usable.
|
|
14
|
+
//
|
|
15
|
+
// Persists every expansion to ~/.shadow-brain/query-expansions.jsonl so
|
|
16
|
+
// downstream analysis can correlate (expansion technique → click vs ignore).
|
|
17
|
+
//
|
|
18
|
+
// Exposed: BrainQueryExpander, getBrainQueryExpander(),
|
|
19
|
+
// resetBrainQueryExpanderForTests().
|
|
20
|
+
// .expand(query, opts)
|
|
21
|
+
// .combineAll(query, opts)
|
|
22
|
+
import * as fs from 'fs';
|
|
23
|
+
import * as path from 'path';
|
|
24
|
+
import * as os from 'os';
|
|
25
|
+
const BRAIN_DIR = path.join(os.homedir(), '.shadow-brain');
|
|
26
|
+
const EXPANSIONS_LOG = path.join(BRAIN_DIR, 'query-expansions.jsonl');
|
|
27
|
+
const DEFAULT_MAX_TERMS = 12;
|
|
28
|
+
const HYDE_TIMEOUT_MS = 12000;
|
|
29
|
+
const HYDE_PROBE_TIMEOUT_MS = 1500;
|
|
30
|
+
const HYDE_CANDIDATES = ['qwen2.5-coder:1.5b', 'deepseek-coder:1.3b', 'llama3.2'];
|
|
31
|
+
const OLLAMA_URL = 'http://127.0.0.1:11434';
|
|
32
|
+
// 80+ programmer-domain synonym mappings. Each key maps to a list of related
|
|
33
|
+
// terms; the expander pulls all of them when the key appears in the query.
|
|
34
|
+
const SYNONYMS = {
|
|
35
|
+
auth: ['authentication', 'login', 'session', 'credentials', 'token', 'bearer', 'signin'],
|
|
36
|
+
authentication: ['auth', 'login', 'session', 'credentials', 'oauth'],
|
|
37
|
+
login: ['signin', 'auth', 'authentication', 'session'],
|
|
38
|
+
logout: ['signout', 'session', 'invalidate'],
|
|
39
|
+
signin: ['login', 'auth', 'authenticate'],
|
|
40
|
+
signup: ['register', 'registration', 'onboarding', 'create account'],
|
|
41
|
+
register: ['signup', 'enrollment', 'create user'],
|
|
42
|
+
password: ['credential', 'secret', 'passphrase', 'hash'],
|
|
43
|
+
token: ['jwt', 'bearer', 'session', 'access token', 'refresh'],
|
|
44
|
+
jwt: ['token', 'bearer', 'json web token', 'claim'],
|
|
45
|
+
session: ['cookie', 'token', 'auth', 'login state'],
|
|
46
|
+
oauth: ['authentication', 'token', 'provider', 'scope'],
|
|
47
|
+
permission: ['authorization', 'access', 'role', 'rbac', 'grant'],
|
|
48
|
+
authorization: ['permission', 'access control', 'rbac', 'authz'],
|
|
49
|
+
role: ['permission', 'authorization', 'group', 'rbac'],
|
|
50
|
+
bug: ['issue', 'defect', 'error', 'fault', 'problem', 'glitch'],
|
|
51
|
+
issue: ['bug', 'defect', 'problem', 'ticket'],
|
|
52
|
+
error: ['exception', 'failure', 'bug', 'fault', 'crash'],
|
|
53
|
+
exception: ['error', 'throw', 'panic', 'failure'],
|
|
54
|
+
crash: ['failure', 'error', 'segfault', 'panic', 'fatal'],
|
|
55
|
+
fail: ['error', 'failure', 'broken', 'crash'],
|
|
56
|
+
failure: ['fail', 'error', 'crash', 'outage'],
|
|
57
|
+
fix: ['patch', 'repair', 'resolve', 'correct', 'mend'],
|
|
58
|
+
patch: ['fix', 'hotfix', 'update', 'change'],
|
|
59
|
+
resolve: ['fix', 'solve', 'address', 'handle'],
|
|
60
|
+
debug: ['investigate', 'trace', 'inspect', 'troubleshoot'],
|
|
61
|
+
trace: ['log', 'debug', 'stack trace', 'instrument'],
|
|
62
|
+
refactor: ['cleanup', 'redesign', 'restructure', 'rewrite', 'tidy'],
|
|
63
|
+
cleanup: ['refactor', 'tidy', 'normalize', 'sanitize'],
|
|
64
|
+
redesign: ['refactor', 'rewrite', 'architecture', 'restructure'],
|
|
65
|
+
rewrite: ['refactor', 'redo', 'reimplement'],
|
|
66
|
+
optimize: ['improve', 'speedup', 'performance', 'tune'],
|
|
67
|
+
performance: ['speed', 'perf', 'latency', 'throughput', 'optimize'],
|
|
68
|
+
speed: ['performance', 'fast', 'latency', 'throughput'],
|
|
69
|
+
latency: ['delay', 'response time', 'performance', 'slow'],
|
|
70
|
+
cache: ['caching', 'memoize', 'store', 'buffer'],
|
|
71
|
+
memoize: ['cache', 'memoization', 'store'],
|
|
72
|
+
api: ['application programming interface', 'endpoint', 'service', 'rest', 'rpc'],
|
|
73
|
+
endpoint: ['api', 'route', 'url', 'handler'],
|
|
74
|
+
route: ['endpoint', 'path', 'url', 'handler'],
|
|
75
|
+
rest: ['restful', 'http api', 'endpoint'],
|
|
76
|
+
graphql: ['gql', 'query language', 'api'],
|
|
77
|
+
rpc: ['grpc', 'remote procedure', 'api'],
|
|
78
|
+
service: ['microservice', 'api', 'daemon', 'server'],
|
|
79
|
+
microservice: ['service', 'api', 'container'],
|
|
80
|
+
database: ['db', 'datastore', 'storage', 'sql', 'persistence'],
|
|
81
|
+
db: ['database', 'datastore', 'storage'],
|
|
82
|
+
sql: ['database', 'query', 'relational'],
|
|
83
|
+
query: ['sql', 'search', 'lookup', 'select'],
|
|
84
|
+
schema: ['model', 'structure', 'migration', 'definition'],
|
|
85
|
+
migration: ['schema change', 'alembic', 'flyway', 'db update'],
|
|
86
|
+
table: ['relation', 'schema', 'collection'],
|
|
87
|
+
index: ['indexing', 'btree', 'hash', 'lookup'],
|
|
88
|
+
transaction: ['tx', 'commit', 'rollback', 'atomic'],
|
|
89
|
+
test: ['testing', 'spec', 'unit test', 'check', 'assert'],
|
|
90
|
+
testing: ['test', 'qa', 'verification', 'validate'],
|
|
91
|
+
unit: ['unittest', 'jest', 'pytest', 'spec'],
|
|
92
|
+
integration: ['e2e', 'end to end', 'smoke', 'cross module'],
|
|
93
|
+
mock: ['stub', 'fake', 'spy', 'fixture'],
|
|
94
|
+
fixture: ['mock', 'sample', 'seed data'],
|
|
95
|
+
deploy: ['deployment', 'release', 'ship', 'rollout', 'publish'],
|
|
96
|
+
deployment: ['deploy', 'release', 'rollout', 'cicd'],
|
|
97
|
+
release: ['deploy', 'version', 'publish', 'ship'],
|
|
98
|
+
cicd: ['continuous integration', 'pipeline', 'jenkins', 'github actions'],
|
|
99
|
+
pipeline: ['cicd', 'workflow', 'build chain'],
|
|
100
|
+
build: ['compile', 'bundle', 'package'],
|
|
101
|
+
compile: ['build', 'transpile', 'tsc'],
|
|
102
|
+
ml: ['machine learning', 'model', 'training', 'ai'],
|
|
103
|
+
ai: ['artificial intelligence', 'ml', 'model', 'llm'],
|
|
104
|
+
llm: ['language model', 'ai', 'gpt', 'transformer'],
|
|
105
|
+
embedding: ['vector', 'representation', 'encoding'],
|
|
106
|
+
vector: ['embedding', 'array', 'tensor'],
|
|
107
|
+
rag: ['retrieval augmented generation', 'vector search', 'context injection'],
|
|
108
|
+
security: ['secure', 'vuln', 'vulnerability', 'hardening', 'protection'],
|
|
109
|
+
vuln: ['vulnerability', 'cve', 'security', 'exploit'],
|
|
110
|
+
vulnerability: ['vuln', 'cve', 'exploit', 'weakness'],
|
|
111
|
+
encrypt: ['encryption', 'cipher', 'crypto', 'tls'],
|
|
112
|
+
crypto: ['encryption', 'cipher', 'hash', 'signature'],
|
|
113
|
+
hash: ['digest', 'checksum', 'crypto', 'bcrypt'],
|
|
114
|
+
ui: ['interface', 'frontend', 'view', 'screen'],
|
|
115
|
+
frontend: ['ui', 'client', 'browser', 'react'],
|
|
116
|
+
backend: ['server', 'api', 'service'],
|
|
117
|
+
fullstack: ['full stack', 'frontend backend', 'end to end'],
|
|
118
|
+
component: ['widget', 'element', 'module', 'block'],
|
|
119
|
+
state: ['store', 'context', 'redux', 'data'],
|
|
120
|
+
redux: ['state', 'store', 'flux'],
|
|
121
|
+
log: ['logging', 'trace', 'record', 'audit'],
|
|
122
|
+
logging: ['log', 'trace', 'observability'],
|
|
123
|
+
monitor: ['observability', 'metrics', 'alerting', 'health'],
|
|
124
|
+
metric: ['measurement', 'gauge', 'counter', 'telemetry'],
|
|
125
|
+
alert: ['notification', 'warning', 'page', 'incident'],
|
|
126
|
+
config: ['configuration', 'settings', 'env', 'options'],
|
|
127
|
+
configuration: ['config', 'settings', 'env'],
|
|
128
|
+
env: ['environment', 'variable', 'config'],
|
|
129
|
+
setting: ['config', 'preference', 'option'],
|
|
130
|
+
docker: ['container', 'image', 'compose'],
|
|
131
|
+
container: ['docker', 'pod', 'image'],
|
|
132
|
+
kubernetes: ['k8s', 'pod', 'cluster', 'helm'],
|
|
133
|
+
k8s: ['kubernetes', 'pod', 'cluster'],
|
|
134
|
+
git: ['version control', 'commit', 'branch', 'merge'],
|
|
135
|
+
commit: ['git', 'change', 'snapshot'],
|
|
136
|
+
branch: ['git', 'feature', 'merge'],
|
|
137
|
+
merge: ['git', 'pull request', 'integrate'],
|
|
138
|
+
pr: ['pull request', 'merge request', 'review'],
|
|
139
|
+
};
|
|
140
|
+
// 50+ programmer abbreviations. Single-token in → expanded phrase out.
|
|
141
|
+
const ABBREVIATIONS = {
|
|
142
|
+
api: 'application programming interface',
|
|
143
|
+
db: 'database',
|
|
144
|
+
sql: 'structured query language',
|
|
145
|
+
cli: 'command line interface',
|
|
146
|
+
gui: 'graphical user interface',
|
|
147
|
+
ui: 'user interface',
|
|
148
|
+
ux: 'user experience',
|
|
149
|
+
auth: 'authentication',
|
|
150
|
+
authz: 'authorization',
|
|
151
|
+
ml: 'machine learning',
|
|
152
|
+
ai: 'artificial intelligence',
|
|
153
|
+
llm: 'large language model',
|
|
154
|
+
nlp: 'natural language processing',
|
|
155
|
+
ocr: 'optical character recognition',
|
|
156
|
+
cv: 'computer vision',
|
|
157
|
+
os: 'operating system',
|
|
158
|
+
fs: 'file system',
|
|
159
|
+
io: 'input output',
|
|
160
|
+
ipc: 'inter process communication',
|
|
161
|
+
rpc: 'remote procedure call',
|
|
162
|
+
rest: 'representational state transfer',
|
|
163
|
+
http: 'hypertext transfer protocol',
|
|
164
|
+
https: 'http secure',
|
|
165
|
+
url: 'uniform resource locator',
|
|
166
|
+
uri: 'uniform resource identifier',
|
|
167
|
+
dns: 'domain name system',
|
|
168
|
+
cdn: 'content delivery network',
|
|
169
|
+
tls: 'transport layer security',
|
|
170
|
+
ssl: 'secure sockets layer',
|
|
171
|
+
jwt: 'json web token',
|
|
172
|
+
oauth: 'open authorization',
|
|
173
|
+
rbac: 'role based access control',
|
|
174
|
+
cors: 'cross origin resource sharing',
|
|
175
|
+
csrf: 'cross site request forgery',
|
|
176
|
+
xss: 'cross site scripting',
|
|
177
|
+
cve: 'common vulnerabilities exposures',
|
|
178
|
+
ci: 'continuous integration',
|
|
179
|
+
cd: 'continuous deployment',
|
|
180
|
+
cicd: 'continuous integration continuous deployment',
|
|
181
|
+
vcs: 'version control system',
|
|
182
|
+
pr: 'pull request',
|
|
183
|
+
mr: 'merge request',
|
|
184
|
+
ide: 'integrated development environment',
|
|
185
|
+
sdk: 'software development kit',
|
|
186
|
+
npm: 'node package manager',
|
|
187
|
+
pip: 'python package installer',
|
|
188
|
+
k8s: 'kubernetes',
|
|
189
|
+
vm: 'virtual machine',
|
|
190
|
+
iam: 'identity access management',
|
|
191
|
+
sso: 'single sign on',
|
|
192
|
+
mfa: 'multi factor authentication',
|
|
193
|
+
rag: 'retrieval augmented generation',
|
|
194
|
+
ann: 'approximate nearest neighbors',
|
|
195
|
+
hnsw: 'hierarchical navigable small world',
|
|
196
|
+
bm25: 'best matching 25',
|
|
197
|
+
tdd: 'test driven development',
|
|
198
|
+
bdd: 'behavior driven development',
|
|
199
|
+
dx: 'developer experience',
|
|
200
|
+
};
|
|
201
|
+
export class BrainQueryExpander {
|
|
202
|
+
/** Expand a query using selected techniques; returns the densified search text. */
|
|
203
|
+
async expand(query, opts) {
|
|
204
|
+
const start = Date.now();
|
|
205
|
+
const original = (query ?? '').trim();
|
|
206
|
+
if (!original) {
|
|
207
|
+
return { original, expanded: original, techniques_used: [], terms_added: [], durationMs: 0 };
|
|
208
|
+
}
|
|
209
|
+
const techniques = opts?.techniques ?? ['synonyms', 'abbrev', 'related'];
|
|
210
|
+
const maxTerms = opts?.maxTerms ?? DEFAULT_MAX_TERMS;
|
|
211
|
+
const used = [];
|
|
212
|
+
const added = [];
|
|
213
|
+
let hydeDoc;
|
|
214
|
+
const queryTokens = tokenize(original);
|
|
215
|
+
const baseSet = new Set(queryTokens);
|
|
216
|
+
if (techniques.includes('synonyms')) {
|
|
217
|
+
const before = added.length;
|
|
218
|
+
for (const tok of queryTokens) {
|
|
219
|
+
const syns = SYNONYMS[tok];
|
|
220
|
+
if (!syns)
|
|
221
|
+
continue;
|
|
222
|
+
for (const s of syns) {
|
|
223
|
+
if (added.length >= maxTerms)
|
|
224
|
+
break;
|
|
225
|
+
if (baseSet.has(s))
|
|
226
|
+
continue;
|
|
227
|
+
added.push(s);
|
|
228
|
+
baseSet.add(s);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
if (added.length > before)
|
|
232
|
+
used.push('synonyms');
|
|
233
|
+
}
|
|
234
|
+
if (techniques.includes('abbrev')) {
|
|
235
|
+
const before = added.length;
|
|
236
|
+
for (const tok of queryTokens) {
|
|
237
|
+
const exp = ABBREVIATIONS[tok];
|
|
238
|
+
if (!exp)
|
|
239
|
+
continue;
|
|
240
|
+
for (const w of exp.split(/\s+/)) {
|
|
241
|
+
if (added.length >= maxTerms)
|
|
242
|
+
break;
|
|
243
|
+
if (baseSet.has(w))
|
|
244
|
+
continue;
|
|
245
|
+
added.push(w);
|
|
246
|
+
baseSet.add(w);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
if (added.length > before)
|
|
250
|
+
used.push('abbrev');
|
|
251
|
+
}
|
|
252
|
+
if (techniques.includes('related')) {
|
|
253
|
+
const before = added.length;
|
|
254
|
+
const related = await this.lookupRelatedEntities(queryTokens, maxTerms - added.length);
|
|
255
|
+
for (const r of related) {
|
|
256
|
+
if (baseSet.has(r))
|
|
257
|
+
continue;
|
|
258
|
+
added.push(r);
|
|
259
|
+
baseSet.add(r);
|
|
260
|
+
}
|
|
261
|
+
if (added.length > before)
|
|
262
|
+
used.push('related');
|
|
263
|
+
}
|
|
264
|
+
let expanded = added.length > 0 ? `${original} ${added.join(' ')}` : original;
|
|
265
|
+
if (techniques.includes('hyde')) {
|
|
266
|
+
const doc = await this.generateHyde(original, opts?.hydeModel);
|
|
267
|
+
if (doc) {
|
|
268
|
+
hydeDoc = doc;
|
|
269
|
+
// HyDE replaces — the hypothetical answer IS the new search text.
|
|
270
|
+
expanded = doc;
|
|
271
|
+
used.push('hyde');
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
const result = {
|
|
275
|
+
original,
|
|
276
|
+
expanded,
|
|
277
|
+
techniques_used: used,
|
|
278
|
+
terms_added: added,
|
|
279
|
+
hyde_doc: hydeDoc,
|
|
280
|
+
durationMs: Date.now() - start,
|
|
281
|
+
};
|
|
282
|
+
this.persist(result).catch(() => { });
|
|
283
|
+
return result;
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Run all techniques and return the densest expansion. Best for direct use
|
|
287
|
+
* by retrievers that don't want to think about technique selection.
|
|
288
|
+
*/
|
|
289
|
+
async combineAll(query, opts) {
|
|
290
|
+
return this.expand(query, {
|
|
291
|
+
...opts,
|
|
292
|
+
techniques: opts?.techniques ?? ['synonyms', 'abbrev', 'related', 'hyde'],
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
// ── Related entities (brain entity co-occurrence) ─────────────────────
|
|
296
|
+
async lookupRelatedEntities(queryTokens, budget) {
|
|
297
|
+
if (budget <= 0)
|
|
298
|
+
return [];
|
|
299
|
+
try {
|
|
300
|
+
const entityDir = path.join(BRAIN_DIR, 'entities');
|
|
301
|
+
if (!fs.existsSync(entityDir))
|
|
302
|
+
return [];
|
|
303
|
+
const cooc = new Map();
|
|
304
|
+
const files = fs.readdirSync(entityDir).filter(f => f.endsWith('.json'));
|
|
305
|
+
// Scan up to ~500 entities, fine for desktop use.
|
|
306
|
+
for (const file of files.slice(0, 500)) {
|
|
307
|
+
try {
|
|
308
|
+
const raw = fs.readFileSync(path.join(entityDir, file), 'utf-8');
|
|
309
|
+
const obj = JSON.parse(raw);
|
|
310
|
+
const surface = `${obj.name ?? ''} ${(obj.observations ?? []).join(' ')} ${(obj.tags ?? []).join(' ')}`;
|
|
311
|
+
const toks = tokenize(surface);
|
|
312
|
+
const hit = queryTokens.some(qt => toks.includes(qt));
|
|
313
|
+
if (!hit)
|
|
314
|
+
continue;
|
|
315
|
+
for (const t of toks) {
|
|
316
|
+
if (queryTokens.includes(t))
|
|
317
|
+
continue;
|
|
318
|
+
cooc.set(t, (cooc.get(t) ?? 0) + 1);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
catch { /* skip corrupt entity */ }
|
|
322
|
+
}
|
|
323
|
+
const ranked = [...cooc.entries()].sort((a, b) => b[1] - a[1]).slice(0, 3 + budget);
|
|
324
|
+
return ranked.map(([term]) => term).slice(0, budget);
|
|
325
|
+
}
|
|
326
|
+
catch {
|
|
327
|
+
return [];
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
// ── HyDE ──────────────────────────────────────────────────────────────
|
|
331
|
+
async generateHyde(query, preferredModel) {
|
|
332
|
+
const model = await this.probeHydeModel(preferredModel);
|
|
333
|
+
if (!model)
|
|
334
|
+
return this.templateHyde(query);
|
|
335
|
+
try {
|
|
336
|
+
const res = await fetch(`${OLLAMA_URL}/api/generate`, {
|
|
337
|
+
method: 'POST',
|
|
338
|
+
headers: { 'Content-Type': 'application/json' },
|
|
339
|
+
body: JSON.stringify({
|
|
340
|
+
model,
|
|
341
|
+
prompt: `Write ONE concise paragraph (2-4 sentences) answering the following question as if it were a documentation excerpt. Use specific technical vocabulary. Do not say "I" or address the reader.\n\nQuestion: ${query}\n\nAnswer:`,
|
|
342
|
+
stream: false,
|
|
343
|
+
options: { temperature: 0.3, num_predict: 220 },
|
|
344
|
+
}),
|
|
345
|
+
signal: AbortSignal.timeout(HYDE_TIMEOUT_MS),
|
|
346
|
+
});
|
|
347
|
+
if (!res.ok)
|
|
348
|
+
return this.templateHyde(query);
|
|
349
|
+
const json = (await res.json());
|
|
350
|
+
const doc = (json.response ?? '').trim();
|
|
351
|
+
return doc || this.templateHyde(query);
|
|
352
|
+
}
|
|
353
|
+
catch {
|
|
354
|
+
return this.templateHyde(query);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
async probeHydeModel(preferred) {
|
|
358
|
+
try {
|
|
359
|
+
const res = await fetch(`${OLLAMA_URL}/api/tags`, {
|
|
360
|
+
signal: AbortSignal.timeout(HYDE_PROBE_TIMEOUT_MS),
|
|
361
|
+
});
|
|
362
|
+
if (!res.ok)
|
|
363
|
+
return null;
|
|
364
|
+
const json = (await res.json());
|
|
365
|
+
const installed = (json.models ?? []).map(m => m.name);
|
|
366
|
+
if (installed.length === 0)
|
|
367
|
+
return null;
|
|
368
|
+
const candidates = preferred ? [preferred, ...HYDE_CANDIDATES] : HYDE_CANDIDATES;
|
|
369
|
+
for (const c of candidates) {
|
|
370
|
+
const match = installed.find(name => name === c || name.startsWith(c));
|
|
371
|
+
if (match)
|
|
372
|
+
return match;
|
|
373
|
+
}
|
|
374
|
+
// Fallback to first installed model so HyDE isn't dead weight.
|
|
375
|
+
return installed[0];
|
|
376
|
+
}
|
|
377
|
+
catch {
|
|
378
|
+
return null;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
templateHyde(query) {
|
|
382
|
+
const tokens = tokenize(query);
|
|
383
|
+
const subject = tokens.slice(0, 3).join(' ') || query;
|
|
384
|
+
const enriched = tokens
|
|
385
|
+
.flatMap(t => SYNONYMS[t] ?? [])
|
|
386
|
+
.filter(t => !tokens.includes(t))
|
|
387
|
+
.slice(0, 4);
|
|
388
|
+
const tail = enriched.length ? `, which usually involves ${enriched.join(', ')}` : '';
|
|
389
|
+
return `This is likely about ${subject}${tail}. A typical solution involves identifying the relevant component, verifying its current behavior, and applying a targeted change covered by tests.`;
|
|
390
|
+
}
|
|
391
|
+
// ── Persistence ───────────────────────────────────────────────────────
|
|
392
|
+
async persist(result) {
|
|
393
|
+
try {
|
|
394
|
+
fs.mkdirSync(BRAIN_DIR, { recursive: true });
|
|
395
|
+
const entry = JSON.stringify({ ts: new Date().toISOString(), ...result }) + '\n';
|
|
396
|
+
fs.appendFileSync(EXPANSIONS_LOG, entry);
|
|
397
|
+
}
|
|
398
|
+
catch { /* non-fatal */ }
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
function tokenize(text) {
|
|
402
|
+
if (!text)
|
|
403
|
+
return [];
|
|
404
|
+
const stop = new Set(['the', 'a', 'an', 'and', 'or', 'of', 'to', 'for', 'in', 'on', 'is', 'it', 'this', 'that', 'as', 'by', 'be', 'do']);
|
|
405
|
+
return text
|
|
406
|
+
.toLowerCase()
|
|
407
|
+
.split(/[^a-z0-9]+/)
|
|
408
|
+
.filter(t => t.length >= 2 && !stop.has(t));
|
|
409
|
+
}
|
|
410
|
+
let _instance = null;
|
|
411
|
+
export function getBrainQueryExpander() {
|
|
412
|
+
if (!_instance)
|
|
413
|
+
_instance = new BrainQueryExpander();
|
|
414
|
+
return _instance;
|
|
415
|
+
}
|
|
416
|
+
export function resetBrainQueryExpanderForTests() { _instance = null; }
|
|
417
|
+
//# sourceMappingURL=brain-query-expander.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brain-query-expander.js","sourceRoot":"","sources":["../../src/brain/brain-query-expander.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export interface QuestStepDef {
|
|
2
|
+
id: string;
|
|
3
|
+
narrative: string;
|
|
4
|
+
prompt: string;
|
|
5
|
+
verify: (project: string) => boolean;
|
|
6
|
+
branches?: Record<string, string>;
|
|
7
|
+
nextId?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface QuestDef {
|
|
10
|
+
id: string;
|
|
11
|
+
title: string;
|
|
12
|
+
subtitle: string;
|
|
13
|
+
emoji: string;
|
|
14
|
+
estimatedMinutes: number;
|
|
15
|
+
steps: QuestStepDef[];
|
|
16
|
+
rewardAchievement: string;
|
|
17
|
+
rewardMessage: string;
|
|
18
|
+
}
|
|
19
|
+
export interface QuestState {
|
|
20
|
+
questId: string;
|
|
21
|
+
project: string;
|
|
22
|
+
currentStepId: string;
|
|
23
|
+
startedAt: number;
|
|
24
|
+
completedAt?: number;
|
|
25
|
+
completedSteps: string[];
|
|
26
|
+
branchHistory: Array<{
|
|
27
|
+
stepId: string;
|
|
28
|
+
choice: string;
|
|
29
|
+
ts: number;
|
|
30
|
+
}>;
|
|
31
|
+
}
|
|
32
|
+
export declare class BrainQuest {
|
|
33
|
+
private quests;
|
|
34
|
+
private states;
|
|
35
|
+
constructor();
|
|
36
|
+
availableQuests(): QuestDef[];
|
|
37
|
+
start(questId: string, project: string): Promise<QuestState>;
|
|
38
|
+
current(project: string): QuestState | null;
|
|
39
|
+
step(project: string, choice?: string): Promise<{
|
|
40
|
+
state: QuestState;
|
|
41
|
+
narrative: string;
|
|
42
|
+
options?: string[];
|
|
43
|
+
complete?: boolean;
|
|
44
|
+
reward?: {
|
|
45
|
+
achievementId?: string;
|
|
46
|
+
message: string;
|
|
47
|
+
};
|
|
48
|
+
}>;
|
|
49
|
+
reset(project: string): void;
|
|
50
|
+
private registerQuests;
|
|
51
|
+
private defaultNext;
|
|
52
|
+
private unlockTrophy;
|
|
53
|
+
private loadFile;
|
|
54
|
+
private persist;
|
|
55
|
+
}
|
|
56
|
+
export declare function getBrainQuest(): BrainQuest;
|
|
57
|
+
export declare function resetBrainQuestForTests(): void;
|
|
58
|
+
//# sourceMappingURL=brain-quest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brain-quest.d.ts","sourceRoot":"","sources":["../../src/brain/brain-quest.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtE;AAQD,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,MAAM,CAAqC;;IAMnD,eAAe,IAAI,QAAQ,EAAE;IAIvB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAiBlE,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAIrC,IAAI,CACR,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;QACT,KAAK,EAAE,UAAU,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,MAAM,CAAC,EAAE;YAAE,aAAa,CAAC,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;KACtD,CAAC;IAoFF,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAS5B,OAAO,CAAC,cAAc;IA0StB,OAAO,CAAC,WAAW;YAML,YAAY;IAgB1B,OAAO,CAAC,QAAQ;IAehB,OAAO,CAAC,OAAO;CAShB;AAyED,wBAAgB,aAAa,IAAI,UAAU,CAG1C;AACD,wBAAgB,uBAAuB,IAAI,IAAI,CAAsB"}
|