@theihtisham/agent-shadow-brain 5.2.0 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +225 -1029
- 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-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-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-portability.js +1 -1
- 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/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.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/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/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/orchestrator.js +1 -1
- 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 +823 -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,135 @@
|
|
|
1
|
+
// src/brain/hallucination-quarantine.ts — Suspect memory isolation
|
|
2
|
+
// v6.0.0 — Hive Mind Edition
|
|
3
|
+
//
|
|
4
|
+
// When Shadow Brain's adversarial defense flags a claim as potentially
|
|
5
|
+
// hallucinated, it goes here instead of the global brain. You can review,
|
|
6
|
+
// promote, or delete. Auto-deletes after 7 days by default.
|
|
7
|
+
import * as fs from 'fs';
|
|
8
|
+
import * as path from 'path';
|
|
9
|
+
import * as os from 'os';
|
|
10
|
+
import * as crypto from 'crypto';
|
|
11
|
+
import { getGlobalBrain } from './global-brain.js';
|
|
12
|
+
const QUARANTINE_PATH = path.join(os.homedir(), '.shadow-brain', 'hallucination-quarantine.json');
|
|
13
|
+
const AUTO_DELETE_AFTER_MS = 7 * 24 * 60 * 60 * 1000; // 7 days
|
|
14
|
+
export class HallucinationQuarantine {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.entries = new Map();
|
|
17
|
+
this.initialized = false;
|
|
18
|
+
this.brain = getGlobalBrain();
|
|
19
|
+
}
|
|
20
|
+
async init() {
|
|
21
|
+
if (this.initialized)
|
|
22
|
+
return;
|
|
23
|
+
fs.mkdirSync(path.dirname(QUARANTINE_PATH), { recursive: true });
|
|
24
|
+
if (fs.existsSync(QUARANTINE_PATH)) {
|
|
25
|
+
try {
|
|
26
|
+
const parsed = JSON.parse(fs.readFileSync(QUARANTINE_PATH, 'utf-8'));
|
|
27
|
+
for (const e of parsed.entries ?? []) {
|
|
28
|
+
this.entries.set(e.id, { ...e, quarantinedAt: new Date(e.quarantinedAt) });
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
/* skip */
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
this.autoExpire();
|
|
36
|
+
this.initialized = true;
|
|
37
|
+
}
|
|
38
|
+
async flag(source, claim, reasonFlagged, evidence = []) {
|
|
39
|
+
await this.init();
|
|
40
|
+
const entry = {
|
|
41
|
+
id: `hq-${crypto.randomBytes(6).toString('hex')}`,
|
|
42
|
+
source,
|
|
43
|
+
claim: claim.slice(0, 800),
|
|
44
|
+
evidence,
|
|
45
|
+
reasonFlagged,
|
|
46
|
+
quarantinedAt: new Date(),
|
|
47
|
+
decision: 'pending',
|
|
48
|
+
};
|
|
49
|
+
this.entries.set(entry.id, entry);
|
|
50
|
+
await this.persist();
|
|
51
|
+
return entry;
|
|
52
|
+
}
|
|
53
|
+
async promote(entryId, projectId, agentTool) {
|
|
54
|
+
await this.init();
|
|
55
|
+
const entry = this.entries.get(entryId);
|
|
56
|
+
if (!entry)
|
|
57
|
+
return false;
|
|
58
|
+
await this.brain.init();
|
|
59
|
+
this.brain.writeSync({
|
|
60
|
+
projectId,
|
|
61
|
+
projectName: 'promoted-quarantine',
|
|
62
|
+
agentTool: agentTool,
|
|
63
|
+
category: 'promoted-from-quarantine',
|
|
64
|
+
content: entry.claim,
|
|
65
|
+
importance: 0.6,
|
|
66
|
+
metadata: { origin: 'quarantine-promoted', quarantineId: entryId, evidence: entry.evidence },
|
|
67
|
+
});
|
|
68
|
+
entry.decision = 'promoted';
|
|
69
|
+
await this.persist();
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
async reject(entryId) {
|
|
73
|
+
await this.init();
|
|
74
|
+
const entry = this.entries.get(entryId);
|
|
75
|
+
if (!entry)
|
|
76
|
+
return false;
|
|
77
|
+
entry.decision = 'deleted';
|
|
78
|
+
await this.persist();
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
list(opts = {}) {
|
|
82
|
+
this.autoExpire();
|
|
83
|
+
const all = Array.from(this.entries.values())
|
|
84
|
+
.filter(e => !opts.pendingOnly || e.decision === 'pending')
|
|
85
|
+
.sort((a, b) => b.quarantinedAt.getTime() - a.quarantinedAt.getTime());
|
|
86
|
+
return all.slice(0, opts.limit ?? 50);
|
|
87
|
+
}
|
|
88
|
+
stats() {
|
|
89
|
+
let pending = 0;
|
|
90
|
+
let promoted = 0;
|
|
91
|
+
let deleted = 0;
|
|
92
|
+
for (const e of this.entries.values()) {
|
|
93
|
+
if (e.decision === 'pending')
|
|
94
|
+
pending++;
|
|
95
|
+
else if (e.decision === 'promoted')
|
|
96
|
+
promoted++;
|
|
97
|
+
else
|
|
98
|
+
deleted++;
|
|
99
|
+
}
|
|
100
|
+
return { pending, promoted, deleted, total: this.entries.size };
|
|
101
|
+
}
|
|
102
|
+
// ── Internals ─────────────────────────────────────────────────────────────
|
|
103
|
+
autoExpire() {
|
|
104
|
+
const now = Date.now();
|
|
105
|
+
for (const [id, entry] of this.entries) {
|
|
106
|
+
if (entry.decision === 'pending' && now - entry.quarantinedAt.getTime() > AUTO_DELETE_AFTER_MS) {
|
|
107
|
+
entry.decision = 'deleted';
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
async persist() {
|
|
112
|
+
try {
|
|
113
|
+
const payload = {
|
|
114
|
+
schemaVersion: 1,
|
|
115
|
+
entries: Array.from(this.entries.values()),
|
|
116
|
+
};
|
|
117
|
+
const tmp = QUARANTINE_PATH + '.tmp';
|
|
118
|
+
fs.writeFileSync(tmp, JSON.stringify(payload, null, 2));
|
|
119
|
+
fs.renameSync(tmp, QUARANTINE_PATH);
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
/* non-fatal */
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
let _instance = null;
|
|
127
|
+
export function getHallucinationQuarantine() {
|
|
128
|
+
if (!_instance)
|
|
129
|
+
_instance = new HallucinationQuarantine();
|
|
130
|
+
return _instance;
|
|
131
|
+
}
|
|
132
|
+
export function resetHallucinationQuarantineForTests() {
|
|
133
|
+
_instance = null;
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=hallucination-quarantine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hallucination-quarantine.js","sourceRoot":"","sources":["../../src/brain/hallucination-quarantine.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,6BAA6B;AAC7B,EAAE;AACF,uEAAuE;AACvE,0EAA0E;AAC1E,4DAA4D;AAE5D,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,OAAO,EAAE,cAAc,EAAe,MAAM,mBAAmB,CAAC;AAEhE,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE,+BAA+B,CAAC,CAAC;AAClG,MAAM,oBAAoB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;AAO/D,MAAM,OAAO,uBAAuB;IAKlC;QAJQ,YAAO,GAAiC,IAAI,GAAG,EAAE,CAAC;QAElD,gBAAW,GAAG,KAAK,CAAC;QAG1B,IAAI,CAAC,KAAK,GAAG,cAAc,EAAE,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAC7B,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAiB,CAAC;gBACrF,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;oBACrC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,aAAa,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;gBAC7E,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,UAAU;YACZ,CAAC;QACH,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,KAAa,EAAE,aAAqB,EAAE,WAAqB,EAAE;QACtF,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,KAAK,GAAoB;YAC7B,EAAE,EAAE,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YACjD,MAAM;YACN,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YAC1B,QAAQ;YACR,aAAa;YACb,aAAa,EAAE,IAAI,IAAI,EAAE;YACzB,QAAQ,EAAE,SAAS;SACpB,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAClC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAe,EAAE,SAAiB,EAAE,SAAiB;QACjE,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;YACnB,SAAS;YACT,WAAW,EAAE,qBAAqB;YAClC,SAAS,EAAE,SAAgB;YAC3B,QAAQ,EAAE,0BAA0B;YACpC,OAAO,EAAE,KAAK,CAAC,KAAK;YACpB,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE,EAAE,MAAM,EAAE,qBAAqB,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;SAC7F,CAAC,CAAC;QACH,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QAC5B,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe;QAC1B,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC3B,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,OAAkD,EAAE;QACvD,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;aAC1C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC;aAC1D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACzE,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,KAAK;QACH,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS;gBAAE,OAAO,EAAE,CAAC;iBACnC,IAAI,CAAC,CAAC,QAAQ,KAAK,UAAU;gBAAE,QAAQ,EAAE,CAAC;;gBAC1C,OAAO,EAAE,CAAC;QACjB,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAClE,CAAC;IAED,6EAA6E;IAErE,UAAU;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACvC,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,GAAG,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,oBAAoB,EAAE,CAAC;gBAC/F,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,OAAO;QACnB,IAAI,CAAC;YACH,MAAM,OAAO,GAAiB;gBAC5B,aAAa,EAAE,CAAC;gBAChB,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;aAC3C,CAAC;YACF,MAAM,GAAG,GAAG,eAAe,GAAG,MAAM,CAAC;YACrC,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACxD,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;IACH,CAAC;CACF;AAED,IAAI,SAAS,GAAmC,IAAI,CAAC;AAErD,MAAM,UAAU,0BAA0B;IACxC,IAAI,CAAC,SAAS;QAAE,SAAS,GAAG,IAAI,uBAAuB,EAAE,CAAC;IAC1D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,oCAAoC;IAClD,SAAS,GAAG,IAAI,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { CausalLink, TurboVector } from '../types.js';
|
|
2
|
+
export interface AcceleratorStatus {
|
|
3
|
+
ssspNodes: number;
|
|
4
|
+
ssspEdges: number;
|
|
5
|
+
turboEntries: number;
|
|
6
|
+
turboCompressionRatio: number;
|
|
7
|
+
}
|
|
8
|
+
export declare class HiveAccelerator {
|
|
9
|
+
private sssp;
|
|
10
|
+
private turbo;
|
|
11
|
+
private initialized;
|
|
12
|
+
constructor();
|
|
13
|
+
init(): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Rebuild the SSSP graph from causal links for O(m log^(2/3) n) traversal.
|
|
16
|
+
* Each link contributes two directed edges (cause → effect).
|
|
17
|
+
*/
|
|
18
|
+
buildCausalGraph(links: CausalLink[]): void;
|
|
19
|
+
/** Run BMSSP from a source node — returns distances + predecessors. */
|
|
20
|
+
traverseCausal(sourceId: string): any;
|
|
21
|
+
/**
|
|
22
|
+
* Store a compressed vector representation of a memory for faster SABB /
|
|
23
|
+
* heatmap similarity scoring. Uses PolarQuant + QJL (3 bits/dim).
|
|
24
|
+
*/
|
|
25
|
+
storeCompressed(id: string, vector: number[], metadata?: Record<string, unknown>): Promise<TurboVector | null>;
|
|
26
|
+
/** Semantic similarity search — returns top-K matching memories. */
|
|
27
|
+
similaritySearch(queryVector: number[], k?: number): Promise<Array<{
|
|
28
|
+
id: string;
|
|
29
|
+
score: number;
|
|
30
|
+
}>>;
|
|
31
|
+
/** Convert text to a simple 64-dim vector (character n-gram hash). Cheap, deterministic. */
|
|
32
|
+
static textToVector(text: string, dim?: number): number[];
|
|
33
|
+
/** Cosine similarity between two vectors. */
|
|
34
|
+
static cosine(a: number[], b: number[]): number;
|
|
35
|
+
status(): AcceleratorStatus;
|
|
36
|
+
}
|
|
37
|
+
export declare function getHiveAccelerator(): HiveAccelerator;
|
|
38
|
+
export declare function resetHiveAcceleratorForTests(): void;
|
|
39
|
+
//# sourceMappingURL=hive-accelerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hive-accelerator.d.ts","sourceRoot":"","sources":["../../src/brain/hive-accelerator.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEtD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,WAAW,CAAS;;IAOtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B;;;OAGG;IACH,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI;IAc3C,uEAAuE;IACvE,cAAc,CAAC,QAAQ,EAAE,MAAM;IAa/B;;;OAGG;IACG,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAYxH,oEAAoE;IAC9D,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,CAAC,SAAI,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAYnG,4FAA4F;IAC5F,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAK,GAAG,MAAM,EAAE;IAiBrD,6CAA6C;IAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM;IAY/C,MAAM,IAAI,iBAAiB;CAU5B;AAID,wBAAgB,kBAAkB,IAAI,eAAe,CAGpD;AAED,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
// src/brain/hive-accelerator.ts — SSSP + TurboQuant accelerator for v6.0 modules
|
|
2
|
+
// v6.0.0 — Hive Mind Edition
|
|
3
|
+
//
|
|
4
|
+
// Re-uses the existing SSSP router (O(m log^(2/3) n), arXiv 2504.17033) and
|
|
5
|
+
// TurboMemory (PolarQuant + QJL, ICLR 2026 — 6x vector compression) to make
|
|
6
|
+
// Hive Mind modules faster and more memory-efficient:
|
|
7
|
+
//
|
|
8
|
+
// - Causal Chains → SSSP for ancestor/descendant traversal
|
|
9
|
+
// - SABB sliver scoring → TurboQuant vector similarity
|
|
10
|
+
// - Brain Exchange payloads → TurboQuant compression before serialization
|
|
11
|
+
// - Attention Heatmap → TurboQuant similarity between decision and memories
|
|
12
|
+
//
|
|
13
|
+
// Modules call these helpers when available; fall back to naive paths if the
|
|
14
|
+
// accelerator can't be initialized.
|
|
15
|
+
import { SSSPRouter } from './sssp-router.js';
|
|
16
|
+
import { TurboMemory } from './turbo-memory.js';
|
|
17
|
+
export class HiveAccelerator {
|
|
18
|
+
constructor() {
|
|
19
|
+
this.initialized = false;
|
|
20
|
+
this.sssp = new SSSPRouter();
|
|
21
|
+
this.turbo = new TurboMemory();
|
|
22
|
+
}
|
|
23
|
+
async init() {
|
|
24
|
+
if (this.initialized)
|
|
25
|
+
return;
|
|
26
|
+
this.initialized = true;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Rebuild the SSSP graph from causal links for O(m log^(2/3) n) traversal.
|
|
30
|
+
* Each link contributes two directed edges (cause → effect).
|
|
31
|
+
*/
|
|
32
|
+
buildCausalGraph(links) {
|
|
33
|
+
const nodes = new Map();
|
|
34
|
+
for (const link of links) {
|
|
35
|
+
const list = nodes.get(link.causeId) ?? [];
|
|
36
|
+
list.push({ targetId: link.effectId, latency: 1 - link.strength });
|
|
37
|
+
nodes.set(link.causeId, list);
|
|
38
|
+
// Also register effect nodes so graph is complete
|
|
39
|
+
if (!nodes.has(link.effectId))
|
|
40
|
+
nodes.set(link.effectId, []);
|
|
41
|
+
}
|
|
42
|
+
const nodeArr = [];
|
|
43
|
+
for (const [id, connections] of nodes)
|
|
44
|
+
nodeArr.push({ id, connections });
|
|
45
|
+
this.sssp.buildGraph(nodeArr);
|
|
46
|
+
}
|
|
47
|
+
/** Run BMSSP from a source node — returns distances + predecessors. */
|
|
48
|
+
traverseCausal(sourceId) {
|
|
49
|
+
try {
|
|
50
|
+
const sssp = this.sssp;
|
|
51
|
+
if (typeof sssp.bmssp === 'function')
|
|
52
|
+
return sssp.bmssp(sourceId);
|
|
53
|
+
if (typeof sssp.computeShortestPath === 'function')
|
|
54
|
+
return sssp.computeShortestPath(sourceId);
|
|
55
|
+
if (typeof sssp.run === 'function')
|
|
56
|
+
return sssp.run(sourceId);
|
|
57
|
+
if (typeof sssp.shortestPaths === 'function')
|
|
58
|
+
return sssp.shortestPaths(sourceId);
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Store a compressed vector representation of a memory for faster SABB /
|
|
67
|
+
* heatmap similarity scoring. Uses PolarQuant + QJL (3 bits/dim).
|
|
68
|
+
*/
|
|
69
|
+
async storeCompressed(id, vector, metadata = {}) {
|
|
70
|
+
try {
|
|
71
|
+
const t = this.turbo;
|
|
72
|
+
if (typeof t.store === 'function')
|
|
73
|
+
return t.store(id, vector, metadata);
|
|
74
|
+
if (typeof t.add === 'function')
|
|
75
|
+
return t.add(id, vector, metadata);
|
|
76
|
+
if (typeof t.upsert === 'function')
|
|
77
|
+
return t.upsert(id, vector, metadata);
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/** Semantic similarity search — returns top-K matching memories. */
|
|
85
|
+
async similaritySearch(queryVector, k = 5) {
|
|
86
|
+
try {
|
|
87
|
+
const t = this.turbo;
|
|
88
|
+
if (typeof t.search === 'function')
|
|
89
|
+
return t.search(queryVector, k);
|
|
90
|
+
if (typeof t.topK === 'function')
|
|
91
|
+
return t.topK(queryVector, k);
|
|
92
|
+
if (typeof t.query === 'function')
|
|
93
|
+
return t.query(queryVector, k);
|
|
94
|
+
return [];
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return [];
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/** Convert text to a simple 64-dim vector (character n-gram hash). Cheap, deterministic. */
|
|
101
|
+
static textToVector(text, dim = 64) {
|
|
102
|
+
const v = new Array(dim).fill(0);
|
|
103
|
+
const normalized = text.toLowerCase().replace(/[^a-z0-9\s]/g, ' ');
|
|
104
|
+
for (let i = 0; i < normalized.length - 2; i++) {
|
|
105
|
+
const tri = normalized.slice(i, i + 3);
|
|
106
|
+
let h = 0;
|
|
107
|
+
for (let c = 0; c < tri.length; c++)
|
|
108
|
+
h = (h * 31 + tri.charCodeAt(c)) >>> 0;
|
|
109
|
+
v[h % dim] += 1;
|
|
110
|
+
}
|
|
111
|
+
// L2 normalize
|
|
112
|
+
let norm = 0;
|
|
113
|
+
for (const x of v)
|
|
114
|
+
norm += x * x;
|
|
115
|
+
norm = Math.sqrt(norm) || 1;
|
|
116
|
+
for (let i = 0; i < dim; i++)
|
|
117
|
+
v[i] = v[i] / norm;
|
|
118
|
+
return v;
|
|
119
|
+
}
|
|
120
|
+
/** Cosine similarity between two vectors. */
|
|
121
|
+
static cosine(a, b) {
|
|
122
|
+
let dot = 0;
|
|
123
|
+
let na = 0;
|
|
124
|
+
let nb = 0;
|
|
125
|
+
for (let i = 0; i < a.length && i < b.length; i++) {
|
|
126
|
+
dot += a[i] * b[i];
|
|
127
|
+
na += a[i] * a[i];
|
|
128
|
+
nb += b[i] * b[i];
|
|
129
|
+
}
|
|
130
|
+
return dot / ((Math.sqrt(na) || 1) * (Math.sqrt(nb) || 1));
|
|
131
|
+
}
|
|
132
|
+
status() {
|
|
133
|
+
const g = this.sssp.graph ?? { nodeCount: 0, edgeCount: 0 };
|
|
134
|
+
const m = this.turbo.memoryStore ?? { entries: [], compressionRatio: 6 };
|
|
135
|
+
return {
|
|
136
|
+
ssspNodes: g.nodeCount ?? 0,
|
|
137
|
+
ssspEdges: g.edgeCount ?? 0,
|
|
138
|
+
turboEntries: (m.entries ?? []).length,
|
|
139
|
+
turboCompressionRatio: m.compressionRatio ?? 6,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
let _instance = null;
|
|
144
|
+
export function getHiveAccelerator() {
|
|
145
|
+
if (!_instance)
|
|
146
|
+
_instance = new HiveAccelerator();
|
|
147
|
+
return _instance;
|
|
148
|
+
}
|
|
149
|
+
export function resetHiveAcceleratorForTests() {
|
|
150
|
+
_instance = null;
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=hive-accelerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hive-accelerator.js","sourceRoot":"","sources":["../../src/brain/hive-accelerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { z, ZodSchema } from 'zod';
|
|
2
|
+
export interface JsonOutputOptions<T> {
|
|
3
|
+
system?: string;
|
|
4
|
+
maxTokens?: number;
|
|
5
|
+
maxRetries?: number;
|
|
6
|
+
featureName?: string;
|
|
7
|
+
fallback?: T;
|
|
8
|
+
/** Extra instruction to append — e.g. "Respond ONLY with JSON matching {...}". */
|
|
9
|
+
schemaHint?: string;
|
|
10
|
+
/** Cache identical requests (default: true). */
|
|
11
|
+
useCache?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Ask the LLM for JSON that satisfies a Zod schema.
|
|
15
|
+
* Returns parsed T, or opts.fallback if every retry failed.
|
|
16
|
+
*/
|
|
17
|
+
export declare function generateJson<T>(prompt: string, schema: ZodSchema<T>, opts?: JsonOutputOptions<T>): Promise<{
|
|
18
|
+
value: T;
|
|
19
|
+
provider: string;
|
|
20
|
+
model: string;
|
|
21
|
+
attempts: number;
|
|
22
|
+
cached?: boolean;
|
|
23
|
+
}>;
|
|
24
|
+
/** Re-export Zod for downstream brain modules that want to define schemas. */
|
|
25
|
+
export { z };
|
|
26
|
+
//# sourceMappingURL=json-output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-output.d.ts","sourceRoot":"","sources":["../../src/brain/json-output.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAInC,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,CAAC;IACb,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAClC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EACpB,IAAI,GAAE,iBAAiB,CAAC,CAAC,CAAM,GAC9B,OAAO,CAAC;IAAE,KAAK,EAAE,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAkD5F;AAsCD,8EAA8E;AAC9E,OAAO,EAAE,CAAC,EAAE,CAAC"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
// src/brain/json-output.ts — Structured JSON output helper
|
|
2
|
+
// v6.0.0 — Hive Mind Edition
|
|
3
|
+
//
|
|
4
|
+
// Wraps ModelRegistry.generate with strict JSON schema enforcement and retry.
|
|
5
|
+
// If the model returns free text or malformed JSON, extract → parse → validate
|
|
6
|
+
// against a Zod schema; retry up to N times with a repair prompt; fall back to
|
|
7
|
+
// a safe default if all retries fail.
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import { getModelRegistry } from './model-registry.js';
|
|
10
|
+
import { getPromptCache } from './prompt-cache.js';
|
|
11
|
+
/**
|
|
12
|
+
* Ask the LLM for JSON that satisfies a Zod schema.
|
|
13
|
+
* Returns parsed T, or opts.fallback if every retry failed.
|
|
14
|
+
*/
|
|
15
|
+
export async function generateJson(prompt, schema, opts = {}) {
|
|
16
|
+
const registry = getModelRegistry();
|
|
17
|
+
await registry.init();
|
|
18
|
+
const cache = getPromptCache();
|
|
19
|
+
const maxRetries = opts.maxRetries ?? 2;
|
|
20
|
+
const hint = opts.schemaHint ?? 'Respond ONLY with a single valid JSON object. No markdown, no prose, no code fences.';
|
|
21
|
+
const fullPrompt = `${prompt}\n\n${hint}`;
|
|
22
|
+
let lastText = '';
|
|
23
|
+
let lastProvider = 'none';
|
|
24
|
+
let lastModel = 'fallback';
|
|
25
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
26
|
+
const repairSuffix = attempt > 0
|
|
27
|
+
? `\n\nYour previous response was invalid or did not match the schema. Your previous output was:\n${lastText.slice(0, 400)}\n\nReturn valid JSON only.`
|
|
28
|
+
: '';
|
|
29
|
+
const effectivePrompt = fullPrompt + repairSuffix;
|
|
30
|
+
const doGenerate = () => registry.generate(effectivePrompt, {
|
|
31
|
+
system: opts.system,
|
|
32
|
+
maxTokens: opts.maxTokens ?? 800,
|
|
33
|
+
featureName: opts.featureName,
|
|
34
|
+
});
|
|
35
|
+
const response = opts.useCache === false
|
|
36
|
+
? await doGenerate()
|
|
37
|
+
: await cache.wrap({ prompt: effectivePrompt, system: opts.system, provider: 'lead', model: 'lead', estimatedTokens: Math.ceil(effectivePrompt.length / 4) + (opts.maxTokens ?? 800), estimatedCostUsd: 0.002 }, doGenerate);
|
|
38
|
+
lastText = response.text || '';
|
|
39
|
+
lastProvider = response.provider;
|
|
40
|
+
lastModel = response.model;
|
|
41
|
+
const extracted = extractJson(lastText);
|
|
42
|
+
if (extracted !== null) {
|
|
43
|
+
const parsed = schema.safeParse(extracted);
|
|
44
|
+
if (parsed.success) {
|
|
45
|
+
return { value: parsed.data, provider: lastProvider, model: lastModel, attempts: attempt + 1 };
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// try again
|
|
49
|
+
}
|
|
50
|
+
if (opts.fallback !== undefined) {
|
|
51
|
+
return { value: opts.fallback, provider: lastProvider, model: lastModel, attempts: maxRetries + 1 };
|
|
52
|
+
}
|
|
53
|
+
throw new Error('Failed to extract valid JSON after ' + (maxRetries + 1) + ' attempts. Last text: ' + lastText.slice(0, 200));
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Attempt to extract a JSON object from a blob of text. Tolerates code fences,
|
|
57
|
+
* leading/trailing prose, unbalanced whitespace.
|
|
58
|
+
*/
|
|
59
|
+
function extractJson(text) {
|
|
60
|
+
if (!text)
|
|
61
|
+
return null;
|
|
62
|
+
const clean = text.replace(/```json\s*|```\s*/g, '');
|
|
63
|
+
try {
|
|
64
|
+
return JSON.parse(clean);
|
|
65
|
+
}
|
|
66
|
+
catch { /* try harder */ }
|
|
67
|
+
// Find the largest balanced {...} or [...] substring
|
|
68
|
+
const firstBrace = clean.search(/[{[]/);
|
|
69
|
+
if (firstBrace < 0)
|
|
70
|
+
return null;
|
|
71
|
+
let depth = 0;
|
|
72
|
+
let inString = false;
|
|
73
|
+
let escape = false;
|
|
74
|
+
for (let i = firstBrace; i < clean.length; i++) {
|
|
75
|
+
const c = clean[i];
|
|
76
|
+
if (inString) {
|
|
77
|
+
if (escape) {
|
|
78
|
+
escape = false;
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
if (c === '\\') {
|
|
82
|
+
escape = true;
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
if (c === '"')
|
|
86
|
+
inString = false;
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if (c === '"') {
|
|
90
|
+
inString = true;
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
if (c === '{' || c === '[')
|
|
94
|
+
depth++;
|
|
95
|
+
else if (c === '}' || c === ']') {
|
|
96
|
+
depth--;
|
|
97
|
+
if (depth === 0) {
|
|
98
|
+
const candidate = clean.slice(firstBrace, i + 1);
|
|
99
|
+
try {
|
|
100
|
+
return JSON.parse(candidate);
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
/** Re-export Zod for downstream brain modules that want to define schemas. */
|
|
111
|
+
export { z };
|
|
112
|
+
//# sourceMappingURL=json-output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-output.js","sourceRoot":"","sources":["../../src/brain/json-output.ts"],"names":[],"mappings":"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"}
|
package/dist/brain/l0-cache.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// src/brain/l0-cache.ts — L0 In-Memory Hot Tier (v5.2.0)
|
|
2
2
|
//
|
|
3
3
|
// Sub-millisecond recall for the hottest brain entries. Sits in front of the
|
|
4
|
-
// global
|
|
4
|
+
// global JSON brain. Map-based, LRU-evicted, byte-budget-bounded.
|
|
5
5
|
//
|
|
6
6
|
// Design:
|
|
7
7
|
// - Pure JavaScript Map (insertion-ordered → easy LRU)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"l0-cache.js","sourceRoot":"","sources":["../../src/brain/l0-cache.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,EAAE;AACF,6EAA6E;AAC7E,
|
|
1
|
+
{"version":3,"file":"l0-cache.js","sourceRoot":"","sources":["../../src/brain/l0-cache.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,EAAE;AACF,6EAA6E;AAC7E,kEAAkE;AAClE,EAAE;AACF,UAAU;AACV,yDAAyD;AACzD,uDAAuD;AACvD,sDAAsD;AACtD,8DAA8D;AAI9D,MAAM,mBAAmB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO;AAQrD,kEAAkE;AAClE,SAAS,oBAAoB,CAAC,KAAc;IAC1C,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,CAAC,CAAC;IAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IACxC,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IACzC,IAAI,KAAK,YAAY,UAAU;QAAE,OAAO,KAAK,CAAC,UAAU,CAAC;IACzD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,oFAAoF;AACpF,MAAM,OAAO,OAAO;IAWlB,YAAY,OAAuB,EAAE;QAV7B,QAAG,GAAiC,IAAI,GAAG,EAAE,CAAC;QAC9C,cAAS,GAAG,CAAC,CAAC;QAId,SAAI,GAAG,CAAC,CAAC;QACT,WAAM,GAAG,CAAC,CAAC;QACX,cAAS,GAAG,CAAC,CAAC;QACd,oBAAe,GAAa,EAAE,CAAC;QAGrC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,mBAAmB,CAAC;QACzD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,oBAAoB,CAAC;IAClE,CAAC;IAED,0DAA0D;IAC1D,GAAG,CAAC,GAAW;QACb,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEhC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,sCAAsC;QACtC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,KAAK,CAAC,IAAI,EAAE,CAAC;QACb,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAEzB,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACzB,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAED,sDAAsD;IACtD,GAAG,CAAC,GAAW,EAAE,KAAQ;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAExC,kDAAkD;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,KAAK,CAAC;YACjC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QAED,YAAY;QACZ,OAAO,IAAI,CAAC,SAAS,GAAG,KAAK,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACrE,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC;QAED,MAAM,KAAK,GAAoB;YAC7B,GAAG;YACH,KAAK;YACL,IAAI,EAAE,CAAC;YACP,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;YACtB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;YACxB,KAAK;SACN,CAAC;QAEF,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;IAC1B,CAAC;IAED,2CAA2C;IAC3C,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,4BAA4B;IAC5B,MAAM,CAAC,GAAW;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC;QAC9B,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,wBAAwB;IACxB,KAAK;QACH,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,sBAAsB;IACtB,QAAQ;QACN,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACtC,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM;YAC7C,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM;YAC/E,CAAC,CAAC,CAAC,CAAC;QAEN,uBAAuB;QACvB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;aAC1C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;aAC/B,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;aACZ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAE5C,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI;YACtB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW;YACX,OAAO;SACR,CAAC;IACJ,CAAC;IAED,qDAAqD;IACrD,OAAO;QACL,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC5B,CAAC;IAED,mDAAmD;IACnD,MAAM,CAAC,aAAqB;QAC1B,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC;QAChC,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC7D,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAEO,WAAW;QACjB,6EAA6E;QAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC5C,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,KAAK;YAAE,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC;QACzC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAEO,YAAY,CAAC,OAAe;QAClC,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC;QAC5D,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;YACvC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC/B,CAAC;IACH,CAAC;CACF;AAED,gEAAgE;AAChE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAC;AAE/C,MAAM,UAAU,QAAQ,CAAc,SAAiB,EAAE,IAAqB;IAC5E,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAClC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,GAAG,IAAI,OAAO,CAAI,IAAI,CAAC,CAAC;QAC7B,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,KAAmB,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,MAAM,GAAG,GAAiC,EAAE,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAC7C,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC/B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,CAAC,KAAK,EAAE,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { LocalLLMConfig, LocalLLMProvider, LocalLLMResponse } from '../types.js';
|
|
2
|
+
export declare class LocalLLM {
|
|
3
|
+
private config;
|
|
4
|
+
constructor(config?: Partial<LocalLLMConfig>);
|
|
5
|
+
/** Check if the local provider is reachable. */
|
|
6
|
+
isAvailable(): Promise<boolean>;
|
|
7
|
+
/** Generate text locally. Falls back to deterministic stub when unreachable. */
|
|
8
|
+
generate(prompt: string, system?: string): Promise<LocalLLMResponse>;
|
|
9
|
+
/** Rough per-call cost in USD for a local model — effectively zero (electricity). */
|
|
10
|
+
static estimatedCostUsd(_tokens: number): number;
|
|
11
|
+
getConfig(): LocalLLMConfig;
|
|
12
|
+
setConfig(patch: Partial<LocalLLMConfig>): void;
|
|
13
|
+
private generateOllama;
|
|
14
|
+
private fallback;
|
|
15
|
+
}
|
|
16
|
+
export declare function getLocalLLM(config?: Partial<LocalLLMConfig>): LocalLLM;
|
|
17
|
+
export declare function resetLocalLLMForTests(): void;
|
|
18
|
+
/** Map a generic provider preference to a LocalLLMProvider. */
|
|
19
|
+
export declare function preferredLocalProvider(pref?: string): LocalLLMProvider;
|
|
20
|
+
//# sourceMappingURL=local-llm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-llm.d.ts","sourceRoot":"","sources":["../../src/brain/local-llm.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAWjF,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAiB;gBAEnB,MAAM,GAAE,OAAO,CAAC,cAAc,CAAM;IAIhD,gDAAgD;IAC1C,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAarC,gFAAgF;IAC1E,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAuB1E,qFAAqF;IACrF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAIhD,SAAS,IAAI,cAAc;IAI3B,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI;YAMjC,cAAc;IA8B5B,OAAO,CAAC,QAAQ;CAejB;AAID,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,QAAQ,CAItE;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED,+DAA+D;AAC/D,wBAAgB,sBAAsB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAGtE"}
|