@relayplane/proxy 1.8.37 → 1.8.38
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/dist/budget.d.ts +39 -0
- package/dist/budget.d.ts.map +1 -1
- package/dist/budget.js +173 -0
- package/dist/budget.js.map +1 -1
- package/dist/cli.js +0 -0
- package/dist/config.d.ts +21 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/episode-writer.d.ts +28 -0
- package/dist/episode-writer.d.ts.map +1 -0
- package/dist/episode-writer.js +263 -0
- package/dist/episode-writer.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/osmosis-store.d.ts +5 -0
- package/dist/osmosis-store.d.ts.map +1 -1
- package/dist/osmosis-store.js +83 -8
- package/dist/osmosis-store.js.map +1 -1
- package/dist/session-tracker.d.ts.map +1 -1
- package/dist/session-tracker.js +7 -1
- package/dist/session-tracker.js.map +1 -1
- package/dist/standalone-proxy.d.ts.map +1 -1
- package/dist/standalone-proxy.js +619 -24
- package/dist/standalone-proxy.js.map +1 -1
- package/dist/tool-router.d.ts +163 -0
- package/dist/tool-router.d.ts.map +1 -0
- package/dist/tool-router.js +528 -0
- package/dist/tool-router.js.map +1 -0
- package/dist/trace-writer.d.ts +155 -0
- package/dist/trace-writer.d.ts.map +1 -0
- package/dist/trace-writer.js +589 -0
- package/dist/trace-writer.js.map +1 -0
- package/package.json +14 -13
- package/LICENSE +0 -21
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Episode Writer — Phase 2 Session 4: Layered Session Memory
|
|
4
|
+
*
|
|
5
|
+
* Writes episodic events to osmosis.db after each proxied response.
|
|
6
|
+
* Also tracks promotion candidates: when evidence_count >= PROMOTION_THRESHOLD,
|
|
7
|
+
* promotes the pattern to the procedural (mesh) atom store.
|
|
8
|
+
*
|
|
9
|
+
* All writes are fire-and-forget. Never throws.
|
|
10
|
+
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
+
}) : function(o, v) {
|
|
25
|
+
o["default"] = v;
|
|
26
|
+
});
|
|
27
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
28
|
+
var ownKeys = function(o) {
|
|
29
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
30
|
+
var ar = [];
|
|
31
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
32
|
+
return ar;
|
|
33
|
+
};
|
|
34
|
+
return ownKeys(o);
|
|
35
|
+
};
|
|
36
|
+
return function (mod) {
|
|
37
|
+
if (mod && mod.__esModule) return mod;
|
|
38
|
+
var result = {};
|
|
39
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
40
|
+
__setModuleDefault(result, mod);
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
})();
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.writeEpisode = writeEpisode;
|
|
46
|
+
exports._resetEpisodeWriter = _resetEpisodeWriter;
|
|
47
|
+
const crypto = __importStar(require("node:crypto"));
|
|
48
|
+
const fs = __importStar(require("node:fs"));
|
|
49
|
+
const path = __importStar(require("node:path"));
|
|
50
|
+
const osmosis_store_js_1 = require("./osmosis-store.js");
|
|
51
|
+
const PROMOTION_THRESHOLD = 2;
|
|
52
|
+
const EPISODIC_MAX_ROWS = parseInt(process.env['RELAYPLANE_EPISODIC_MAX_ROWS'] ?? '100000', 10);
|
|
53
|
+
let _writeCounter = 0;
|
|
54
|
+
// ── DB handles ──────────────────────────────────────────────────────────────
|
|
55
|
+
let _osmosisDb = undefined;
|
|
56
|
+
let _meshDb = undefined;
|
|
57
|
+
function getOsmosisDb() {
|
|
58
|
+
if (_osmosisDb !== undefined)
|
|
59
|
+
return _osmosisDb;
|
|
60
|
+
try {
|
|
61
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
62
|
+
const Database = require('better-sqlite3');
|
|
63
|
+
const dir = (0, osmosis_store_js_1.getRelayplaneDir)();
|
|
64
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
65
|
+
const db = new Database(path.join(dir, 'osmosis.db'));
|
|
66
|
+
db.pragma('journal_mode = WAL');
|
|
67
|
+
_osmosisDb = db;
|
|
68
|
+
return db;
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
_osmosisDb = null;
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function getMeshDb() {
|
|
76
|
+
if (_meshDb !== undefined)
|
|
77
|
+
return _meshDb;
|
|
78
|
+
try {
|
|
79
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
80
|
+
const Database = require('better-sqlite3');
|
|
81
|
+
const dir = (0, osmosis_store_js_1.getRelayplaneDir)();
|
|
82
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
83
|
+
const db = new Database(path.join(dir, 'mesh.db'));
|
|
84
|
+
db.pragma('journal_mode = WAL');
|
|
85
|
+
// Minimal atoms schema compatible with mesh-core AtomStore
|
|
86
|
+
db.exec(`
|
|
87
|
+
CREATE TABLE IF NOT EXISTS atoms (
|
|
88
|
+
id TEXT PRIMARY KEY,
|
|
89
|
+
type TEXT NOT NULL,
|
|
90
|
+
observation TEXT NOT NULL,
|
|
91
|
+
context TEXT NOT NULL,
|
|
92
|
+
confidence REAL NOT NULL,
|
|
93
|
+
fitness_score REAL NOT NULL,
|
|
94
|
+
trust_tier TEXT NOT NULL DEFAULT 'local',
|
|
95
|
+
source_agent_hash TEXT NOT NULL,
|
|
96
|
+
created_at TEXT NOT NULL,
|
|
97
|
+
updated_at TEXT NOT NULL,
|
|
98
|
+
decay_rate REAL NOT NULL DEFAULT 0.99,
|
|
99
|
+
tool_name TEXT,
|
|
100
|
+
params_hash TEXT,
|
|
101
|
+
outcome TEXT,
|
|
102
|
+
error_signature TEXT,
|
|
103
|
+
latency_ms REAL,
|
|
104
|
+
reliability_score REAL,
|
|
105
|
+
anti_pattern TEXT,
|
|
106
|
+
failure_cluster_size INTEGER,
|
|
107
|
+
error_type TEXT,
|
|
108
|
+
severity TEXT,
|
|
109
|
+
evidence_count INTEGER NOT NULL DEFAULT 1,
|
|
110
|
+
use_count INTEGER NOT NULL DEFAULT 0,
|
|
111
|
+
success_after_use INTEGER NOT NULL DEFAULT 0,
|
|
112
|
+
failure_after_use INTEGER NOT NULL DEFAULT 0,
|
|
113
|
+
last_used TEXT
|
|
114
|
+
);
|
|
115
|
+
CREATE INDEX IF NOT EXISTS idx_atoms_type ON atoms(type);
|
|
116
|
+
CREATE INDEX IF NOT EXISTS idx_atoms_confidence ON atoms(confidence);
|
|
117
|
+
CREATE INDEX IF NOT EXISTS idx_atoms_fitness ON atoms(fitness_score);
|
|
118
|
+
`);
|
|
119
|
+
_meshDb = db;
|
|
120
|
+
return db;
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
_meshDb = null;
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// ── Write episode ─────────────────────────────────────────────────────────────
|
|
128
|
+
/**
|
|
129
|
+
* Write an episodic event record. Fire-and-forget — never throws.
|
|
130
|
+
*/
|
|
131
|
+
function writeEpisode(sessionId, event) {
|
|
132
|
+
try {
|
|
133
|
+
const db = getOsmosisDb();
|
|
134
|
+
if (!db)
|
|
135
|
+
return;
|
|
136
|
+
const id = crypto.randomUUID();
|
|
137
|
+
db.prepare(`
|
|
138
|
+
INSERT OR IGNORE INTO episodic_events
|
|
139
|
+
(id, session_id, event_type, timestamp, duration_ms, model_used,
|
|
140
|
+
tokens_in, tokens_out, cost_usd, outcome, outcome_detail, trace_id)
|
|
141
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
142
|
+
`).run(id, sessionId, event.eventType, Date.now(), event.durationMs ?? null, event.modelUsed, event.tokensIn, event.tokensOut, event.costUsd, event.outcome, event.outcomeDetail ?? null, event.traceId ?? null);
|
|
143
|
+
// Prune episodic_events every 100th write
|
|
144
|
+
_writeCounter++;
|
|
145
|
+
if (_writeCounter % 100 === 0) {
|
|
146
|
+
db.prepare(`
|
|
147
|
+
DELETE FROM episodic_events WHERE id NOT IN (
|
|
148
|
+
SELECT id FROM episodic_events ORDER BY timestamp DESC LIMIT ?
|
|
149
|
+
)
|
|
150
|
+
`).run(EPISODIC_MAX_ROWS);
|
|
151
|
+
}
|
|
152
|
+
// Check promotion after each write
|
|
153
|
+
const signature = computeSignature(event.modelUsed, event.eventType, event.outcome);
|
|
154
|
+
checkPromotion(sessionId, signature);
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
// best-effort
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// ── Promotion ─────────────────────────────────────────────────────────────────
|
|
161
|
+
function computeSignature(model, eventType, outcome) {
|
|
162
|
+
return crypto.createHash('sha256')
|
|
163
|
+
.update(`${model}:${eventType}:${outcome}`)
|
|
164
|
+
.digest('hex')
|
|
165
|
+
.slice(0, 32);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Check and potentially promote an episodic pattern to procedural (mesh) store.
|
|
169
|
+
* Fire-and-forget — never throws.
|
|
170
|
+
*/
|
|
171
|
+
function checkPromotion(sessionId, patternSignature) {
|
|
172
|
+
try {
|
|
173
|
+
const db = getOsmosisDb();
|
|
174
|
+
if (!db)
|
|
175
|
+
return;
|
|
176
|
+
const now = Date.now();
|
|
177
|
+
// Check if candidate exists
|
|
178
|
+
const existing = db.prepare(`SELECT id, evidence_count, session_ids, promoted_at FROM episodic_to_procedural_candidates WHERE pattern_signature = ?`).get(patternSignature);
|
|
179
|
+
if (!existing) {
|
|
180
|
+
const id = crypto.randomUUID();
|
|
181
|
+
db.prepare(`
|
|
182
|
+
INSERT OR IGNORE INTO episodic_to_procedural_candidates
|
|
183
|
+
(id, pattern_signature, session_ids, evidence_count, first_seen_at, last_seen_at)
|
|
184
|
+
VALUES (?, ?, ?, 1, ?, ?)
|
|
185
|
+
`).run(id, patternSignature, JSON.stringify([sessionId]), now, now);
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
// Update existing candidate
|
|
189
|
+
const sessionIds = (() => {
|
|
190
|
+
try {
|
|
191
|
+
return JSON.parse(existing.session_ids);
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
return [];
|
|
195
|
+
}
|
|
196
|
+
})();
|
|
197
|
+
if (!sessionIds.includes(sessionId))
|
|
198
|
+
sessionIds.push(sessionId);
|
|
199
|
+
db.prepare(`
|
|
200
|
+
UPDATE episodic_to_procedural_candidates
|
|
201
|
+
SET evidence_count = evidence_count + 1,
|
|
202
|
+
last_seen_at = ?,
|
|
203
|
+
session_ids = ?
|
|
204
|
+
WHERE pattern_signature = ?
|
|
205
|
+
`).run(now, JSON.stringify(sessionIds), patternSignature);
|
|
206
|
+
const newCount = existing.evidence_count + 1;
|
|
207
|
+
if (newCount >= PROMOTION_THRESHOLD && !existing.promoted_at) {
|
|
208
|
+
const atomId = promoteToProcedural(patternSignature, newCount);
|
|
209
|
+
if (atomId) {
|
|
210
|
+
db.prepare(`
|
|
211
|
+
UPDATE episodic_to_procedural_candidates
|
|
212
|
+
SET promoted_at = ?, atom_id = ?
|
|
213
|
+
WHERE pattern_signature = ?
|
|
214
|
+
`).run(now, atomId, patternSignature);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
// best-effort
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Write a procedural atom to the mesh db. Returns the atom id or null on failure.
|
|
224
|
+
*/
|
|
225
|
+
function promoteToProcedural(patternSignature, evidenceCount) {
|
|
226
|
+
try {
|
|
227
|
+
const db = getMeshDb();
|
|
228
|
+
if (!db)
|
|
229
|
+
return null;
|
|
230
|
+
const id = crypto.randomUUID();
|
|
231
|
+
const now = new Date().toISOString();
|
|
232
|
+
const confidence = Math.min(1.0, 0.5 + evidenceCount * 0.1);
|
|
233
|
+
const observation = `Recurring pattern observed ${evidenceCount} times (sig: ${patternSignature.slice(0, 8)})`;
|
|
234
|
+
db.prepare(`
|
|
235
|
+
INSERT OR IGNORE INTO atoms
|
|
236
|
+
(id, type, observation, context, confidence, fitness_score, trust_tier,
|
|
237
|
+
source_agent_hash, created_at, updated_at, decay_rate, evidence_count)
|
|
238
|
+
VALUES (?, 'pattern', ?, ?, ?, ?, 'local', ?, ?, ?, 0.99, ?)
|
|
239
|
+
`).run(id, observation, JSON.stringify({ patternSignature, promotedFromEpisodic: true }), confidence, confidence * 0.9, 'relayplane-proxy', now, now, evidenceCount);
|
|
240
|
+
return id;
|
|
241
|
+
}
|
|
242
|
+
catch {
|
|
243
|
+
return null;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/** Exposed for testing — reset singleton db handles. */
|
|
247
|
+
function _resetEpisodeWriter() {
|
|
248
|
+
if (_osmosisDb) {
|
|
249
|
+
try {
|
|
250
|
+
_osmosisDb.close();
|
|
251
|
+
}
|
|
252
|
+
catch { /* ignore */ }
|
|
253
|
+
}
|
|
254
|
+
if (_meshDb) {
|
|
255
|
+
try {
|
|
256
|
+
_meshDb.close();
|
|
257
|
+
}
|
|
258
|
+
catch { /* ignore */ }
|
|
259
|
+
}
|
|
260
|
+
_osmosisDb = undefined;
|
|
261
|
+
_meshDb = undefined;
|
|
262
|
+
}
|
|
263
|
+
//# sourceMappingURL=episode-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"episode-writer.js","sourceRoot":"","sources":["../src/episode-writer.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -43,4 +43,6 @@ export { RecoveryEngine, RecoveryPatternStore, FailureObserver, PatternApplicato
|
|
|
43
43
|
export type { RecoveryConfig, RecoveryPattern, RecoveryPatternType, RecoveryResult, RecoveryEvent, FailureContext, RequestOverrides, } from './recovery.js';
|
|
44
44
|
export { ProxyServer, createProxyServer, createSandboxedProxyServer } from './server.js';
|
|
45
45
|
export type { ProxyServerConfig } from './server.js';
|
|
46
|
+
export { ToolRouter, getToolRouter, resetToolRouter, extractToolContext, BUILTIN_PACKS, DEFAULT_TOOL_ROUTER_CONFIG, } from './tool-router.js';
|
|
47
|
+
export type { ToolEntry, ToolPack, ToolRateLimit, AgentAuthConfig, ToolAuthContext, ToolAuthResult, ToolRouterConfig, ToolSchema, RateLimitCheckResult, } from './tool-router.js';
|
|
46
48
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGzD,OAAO,EACL,UAAU,EACV,UAAU,EACV,YAAY,EACZ,UAAU,EACV,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,SAAS,EACT,YAAY,EACZ,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,WAAW,IAAI,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGnE,OAAO,EACL,eAAe,EACf,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,cAAc,EACd,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,EACrB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EACf,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAGrB,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG3D,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,cAAc,EACd,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzF,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGzD,OAAO,EACL,UAAU,EACV,UAAU,EACV,YAAY,EACZ,UAAU,EACV,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,SAAS,EACT,YAAY,EACZ,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,WAAW,IAAI,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGnE,OAAO,EACL,eAAe,EACf,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,cAAc,EACd,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,EACrB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EACf,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAGrB,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG3D,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,cAAc,EACd,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzF,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD,OAAO,EACL,UAAU,EACV,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,SAAS,EACT,QAAQ,EACR,aAAa,EACb,eAAe,EACf,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,oBAAoB,GACrB,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
*/
|
|
21
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
22
|
exports.mapCloudModelToOllama = exports.convertOllamaStreamChunk = exports.convertOllamaResponse = exports.buildOllamaRequest = exports.convertMessagesToOllama = exports.forwardToOllamaStream = exports.forwardToOllama = exports.resolveOllamaModel = exports.shouldRouteToOllama = exports.clearOllamaHealthCache = exports.checkOllamaHealthCached = exports.checkOllamaHealth = exports.proxyStatsCollector = exports.defaultLogger = exports.resolveConfig = exports.StatusReporter = exports.StatsCollector = exports.probeHealth = exports.handleHealthRequest = exports.ProcessManager = exports.RelayPlaneMiddleware = exports.CircuitBreaker = exports.printTelemetryDisclosure = exports.getTelemetryPath = exports.clearTelemetry = exports.getTelemetryStats = exports.getLocalTelemetry = exports.clearAuditBuffer = exports.getAuditBuffer = exports.isOfflineMode = exports.setOfflineMode = exports.isAuditMode = exports.setAuditMode = exports.estimateCost = exports.inferTaskType = exports.recordTelemetry = exports.getConfigPath = exports.getConfigDir = exports.getApiKey = exports.setApiKey = exports.getDeviceId = exports.disableTelemetry = exports.enableTelemetry = exports.isTelemetryEnabled = exports.markFirstRunComplete = exports.isFirstRun = exports.updateConfig = exports.saveConfig = exports.loadConfig = exports.startProxy = void 0;
|
|
23
|
-
exports.createSandboxedProxyServer = exports.createProxyServer = exports.ProxyServer = exports.PatternApplicator = exports.FailureObserver = exports.RecoveryPatternStore = exports.RecoveryEngine = exports.CLOUD_TO_OLLAMA_MODEL_MAP = exports.OLLAMA_DEFAULTS = void 0;
|
|
23
|
+
exports.DEFAULT_TOOL_ROUTER_CONFIG = exports.BUILTIN_PACKS = exports.extractToolContext = exports.resetToolRouter = exports.getToolRouter = exports.ToolRouter = exports.createSandboxedProxyServer = exports.createProxyServer = exports.ProxyServer = exports.PatternApplicator = exports.FailureObserver = exports.RecoveryPatternStore = exports.RecoveryEngine = exports.CLOUD_TO_OLLAMA_MODEL_MAP = exports.OLLAMA_DEFAULTS = void 0;
|
|
24
24
|
// Standalone proxy (requires only @relayplane/core)
|
|
25
25
|
var standalone_proxy_js_1 = require("./standalone-proxy.js");
|
|
26
26
|
Object.defineProperty(exports, "startProxy", { enumerable: true, get: function () { return standalone_proxy_js_1.startProxy; } });
|
|
@@ -103,4 +103,12 @@ var server_js_1 = require("./server.js");
|
|
|
103
103
|
Object.defineProperty(exports, "ProxyServer", { enumerable: true, get: function () { return server_js_1.ProxyServer; } });
|
|
104
104
|
Object.defineProperty(exports, "createProxyServer", { enumerable: true, get: function () { return server_js_1.createProxyServer; } });
|
|
105
105
|
Object.defineProperty(exports, "createSandboxedProxyServer", { enumerable: true, get: function () { return server_js_1.createSandboxedProxyServer; } });
|
|
106
|
+
// Tool Router — deny-by-default tool authorization (Phase 2, Session 3)
|
|
107
|
+
var tool_router_js_1 = require("./tool-router.js");
|
|
108
|
+
Object.defineProperty(exports, "ToolRouter", { enumerable: true, get: function () { return tool_router_js_1.ToolRouter; } });
|
|
109
|
+
Object.defineProperty(exports, "getToolRouter", { enumerable: true, get: function () { return tool_router_js_1.getToolRouter; } });
|
|
110
|
+
Object.defineProperty(exports, "resetToolRouter", { enumerable: true, get: function () { return tool_router_js_1.resetToolRouter; } });
|
|
111
|
+
Object.defineProperty(exports, "extractToolContext", { enumerable: true, get: function () { return tool_router_js_1.extractToolContext; } });
|
|
112
|
+
Object.defineProperty(exports, "BUILTIN_PACKS", { enumerable: true, get: function () { return tool_router_js_1.BUILTIN_PACKS; } });
|
|
113
|
+
Object.defineProperty(exports, "DEFAULT_TOOL_ROUTER_CONFIG", { enumerable: true, get: function () { return tool_router_js_1.DEFAULT_TOOL_ROUTER_CONFIG; } });
|
|
106
114
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;;;AAEH,oDAAoD;AACpD,6DAAmD;AAA1C,iHAAA,UAAU,OAAA;AAGnB,gBAAgB;AAChB,yCAcqB;AAbnB,uGAAA,UAAU,OAAA;AACV,uGAAA,UAAU,OAAA;AACV,yGAAA,YAAY,OAAA;AACZ,uGAAA,UAAU,OAAA;AACV,iHAAA,oBAAoB,OAAA;AACpB,+GAAA,kBAAkB,OAAA;AAClB,4GAAA,eAAe,OAAA;AACf,6GAAA,gBAAgB,OAAA;AAChB,wGAAA,WAAW,OAAA;AACX,sGAAA,SAAS,OAAA;AACT,sGAAA,SAAS,OAAA;AACT,yGAAA,YAAY,OAAA;AACZ,0GAAA,aAAa,OAAA;AAIf,YAAY;AACZ,+CAewB;AAdtB,+GAAA,eAAe,OAAA;AACf,6GAAA,aAAa,OAAA;AACb,4GAAA,YAAY,OAAA;AACZ,4GAAA,YAAY,OAAA;AACZ,2GAAA,WAAW,OAAA;AACX,8GAAA,cAAc,OAAA;AACd,6GAAA,aAAa,OAAA;AACb,8GAAA,cAAc,OAAA;AACd,gHAAA,gBAAgB,OAAA;AAChB,iHAAA,iBAAiB,OAAA;AACjB,iHAAA,iBAAiB,OAAA;AACjB,8GAAA,cAAc,OAAA;AACd,gHAAA,gBAAgB,OAAA;AAChB,wHAAA,wBAAwB,OAAA;AAI1B,iCAAiC;AACjC,2DAAoE;AAA3D,oHAAA,cAAc,OAAA;AACvB,iDAAuD;AAA9C,qHAAA,oBAAoB,OAAA;AAE7B,2DAAsD;AAA7C,oHAAA,cAAc,OAAA;AACvB,yCAA+D;AAAtD,gHAAA,mBAAmB,OAAA;AAAE,wGAAA,WAAW,OAAA;AACzC,uCAA4C;AAAnC,0GAAA,cAAc,OAAA;AACvB,yCAA6C;AAApC,2GAAA,cAAc,OAAA;AAEvB,qDAAkD;AAAzC,gHAAA,aAAa,OAAA;AAEtB,yCAA4C;AAAnC,0GAAA,aAAa,OAAA;AAGtB,gDAAgD;AAChD,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA;AAE5B,8BAA8B;AAC9B,yCAeqB;AAdnB,8GAAA,iBAAiB,OAAA;AACjB,oHAAA,uBAAuB,OAAA;AACvB,mHAAA,sBAAsB,OAAA;AACtB,gHAAA,mBAAmB,OAAA;AACnB,+GAAA,kBAAkB,OAAA;AAClB,4GAAA,eAAe,OAAA;AACf,kHAAA,qBAAqB,OAAA;AACrB,oHAAA,uBAAuB,OAAA;AACvB,+GAAA,kBAAkB,OAAA;AAClB,kHAAA,qBAAqB,OAAA;AACrB,qHAAA,wBAAwB,OAAA;AACxB,kHAAA,qBAAqB,OAAA;AACrB,4GAAA,eAAe,OAAA;AACf,sHAAA,yBAAyB,OAAA;AAU3B,uCAAuC;AACvC,6CAKuB;AAJrB,6GAAA,cAAc,OAAA;AACd,mHAAA,oBAAoB,OAAA;AACpB,8GAAA,eAAe,OAAA;AACf,gHAAA,iBAAiB,OAAA;AAYnB,mFAAmF;AACnF,yCAAyF;AAAhF,wGAAA,WAAW,OAAA;AAAE,8GAAA,iBAAiB,OAAA;AAAE,uHAAA,0BAA0B,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;;;AAEH,oDAAoD;AACpD,6DAAmD;AAA1C,iHAAA,UAAU,OAAA;AAGnB,gBAAgB;AAChB,yCAcqB;AAbnB,uGAAA,UAAU,OAAA;AACV,uGAAA,UAAU,OAAA;AACV,yGAAA,YAAY,OAAA;AACZ,uGAAA,UAAU,OAAA;AACV,iHAAA,oBAAoB,OAAA;AACpB,+GAAA,kBAAkB,OAAA;AAClB,4GAAA,eAAe,OAAA;AACf,6GAAA,gBAAgB,OAAA;AAChB,wGAAA,WAAW,OAAA;AACX,sGAAA,SAAS,OAAA;AACT,sGAAA,SAAS,OAAA;AACT,yGAAA,YAAY,OAAA;AACZ,0GAAA,aAAa,OAAA;AAIf,YAAY;AACZ,+CAewB;AAdtB,+GAAA,eAAe,OAAA;AACf,6GAAA,aAAa,OAAA;AACb,4GAAA,YAAY,OAAA;AACZ,4GAAA,YAAY,OAAA;AACZ,2GAAA,WAAW,OAAA;AACX,8GAAA,cAAc,OAAA;AACd,6GAAA,aAAa,OAAA;AACb,8GAAA,cAAc,OAAA;AACd,gHAAA,gBAAgB,OAAA;AAChB,iHAAA,iBAAiB,OAAA;AACjB,iHAAA,iBAAiB,OAAA;AACjB,8GAAA,cAAc,OAAA;AACd,gHAAA,gBAAgB,OAAA;AAChB,wHAAA,wBAAwB,OAAA;AAI1B,iCAAiC;AACjC,2DAAoE;AAA3D,oHAAA,cAAc,OAAA;AACvB,iDAAuD;AAA9C,qHAAA,oBAAoB,OAAA;AAE7B,2DAAsD;AAA7C,oHAAA,cAAc,OAAA;AACvB,yCAA+D;AAAtD,gHAAA,mBAAmB,OAAA;AAAE,wGAAA,WAAW,OAAA;AACzC,uCAA4C;AAAnC,0GAAA,cAAc,OAAA;AACvB,yCAA6C;AAApC,2GAAA,cAAc,OAAA;AAEvB,qDAAkD;AAAzC,gHAAA,aAAa,OAAA;AAEtB,yCAA4C;AAAnC,0GAAA,aAAa,OAAA;AAGtB,gDAAgD;AAChD,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA;AAE5B,8BAA8B;AAC9B,yCAeqB;AAdnB,8GAAA,iBAAiB,OAAA;AACjB,oHAAA,uBAAuB,OAAA;AACvB,mHAAA,sBAAsB,OAAA;AACtB,gHAAA,mBAAmB,OAAA;AACnB,+GAAA,kBAAkB,OAAA;AAClB,4GAAA,eAAe,OAAA;AACf,kHAAA,qBAAqB,OAAA;AACrB,oHAAA,uBAAuB,OAAA;AACvB,+GAAA,kBAAkB,OAAA;AAClB,kHAAA,qBAAqB,OAAA;AACrB,qHAAA,wBAAwB,OAAA;AACxB,kHAAA,qBAAqB,OAAA;AACrB,4GAAA,eAAe,OAAA;AACf,sHAAA,yBAAyB,OAAA;AAU3B,uCAAuC;AACvC,6CAKuB;AAJrB,6GAAA,cAAc,OAAA;AACd,mHAAA,oBAAoB,OAAA;AACpB,8GAAA,eAAe,OAAA;AACf,gHAAA,iBAAiB,OAAA;AAYnB,mFAAmF;AACnF,yCAAyF;AAAhF,wGAAA,WAAW,OAAA;AAAE,8GAAA,iBAAiB,OAAA;AAAE,uHAAA,0BAA0B,OAAA;AAGnE,wEAAwE;AACxE,mDAO0B;AANxB,4GAAA,UAAU,OAAA;AACV,+GAAA,aAAa,OAAA;AACb,iHAAA,eAAe,OAAA;AACf,oHAAA,kBAAkB,OAAA;AAClB,+GAAA,aAAa,OAAA;AACb,4HAAA,0BAA0B,OAAA"}
|
package/dist/osmosis-store.d.ts
CHANGED
|
@@ -23,6 +23,11 @@ export interface FailureAtom {
|
|
|
23
23
|
timestamp: number;
|
|
24
24
|
}
|
|
25
25
|
export type KnowledgeAtom = SuccessAtom | FailureAtom;
|
|
26
|
+
export declare function getRelayplaneDir(): string;
|
|
27
|
+
/** Exposed for use by episode-writer and memory endpoints. */
|
|
28
|
+
export declare function getOsmosisDb(): import('better-sqlite3').Database | null;
|
|
29
|
+
/** Count knowledge atoms relevant to a session (or all atoms if no session). */
|
|
30
|
+
export declare function countAtomsForSession(sessionId?: string | null): number;
|
|
26
31
|
/**
|
|
27
32
|
* Capture a KnowledgeAtom (fire-and-forget).
|
|
28
33
|
* Never throws. Writes to SQLite; falls back to JSONL.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"osmosis-store.d.ts","sourceRoot":"","sources":["../src/osmosis-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"osmosis-store.d.ts","sourceRoot":"","sources":["../src/osmosis-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,WAAW,CAAC;AAoEtD,wBAAgB,gBAAgB,IAAI,MAAM,CAKzC;AAwCD,8DAA8D;AAC9D,wBAAgB,YAAY,IAAI,OAAO,gBAAgB,EAAE,QAAQ,GAAG,IAAI,CAEvE;AAED,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAatE;AAkBD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAgDzE;AAED,mDAAmD;AACnD,wBAAgB,WAAW,IAAI,IAAI,CAOlC"}
|
package/dist/osmosis-store.js
CHANGED
|
@@ -41,6 +41,9 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
41
41
|
};
|
|
42
42
|
})();
|
|
43
43
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
exports.getRelayplaneDir = getRelayplaneDir;
|
|
45
|
+
exports.getOsmosisDb = getOsmosisDb;
|
|
46
|
+
exports.countAtomsForSession = countAtomsForSession;
|
|
44
47
|
exports.captureAtom = captureAtom;
|
|
45
48
|
exports._resetStore = _resetStore;
|
|
46
49
|
const fs = __importStar(require("node:fs"));
|
|
@@ -58,12 +61,53 @@ CREATE TABLE IF NOT EXISTS knowledge_atoms (
|
|
|
58
61
|
error_type TEXT,
|
|
59
62
|
fallback_taken INTEGER,
|
|
60
63
|
timestamp INTEGER NOT NULL,
|
|
61
|
-
session_id TEXT
|
|
64
|
+
session_id TEXT,
|
|
65
|
+
confidence REAL DEFAULT 0.5,
|
|
66
|
+
observation_count INTEGER DEFAULT 1,
|
|
67
|
+
decay_rate REAL DEFAULT 0.05,
|
|
68
|
+
tags TEXT DEFAULT '[]'
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
CREATE TABLE IF NOT EXISTS episodic_events (
|
|
72
|
+
id TEXT PRIMARY KEY,
|
|
73
|
+
session_id TEXT NOT NULL,
|
|
74
|
+
event_type TEXT NOT NULL,
|
|
75
|
+
timestamp INTEGER NOT NULL,
|
|
76
|
+
duration_ms INTEGER,
|
|
77
|
+
model_used TEXT,
|
|
78
|
+
tokens_in INTEGER,
|
|
79
|
+
tokens_out INTEGER,
|
|
80
|
+
cost_usd REAL,
|
|
81
|
+
tool_name TEXT,
|
|
82
|
+
tool_input_hash TEXT,
|
|
83
|
+
outcome TEXT NOT NULL,
|
|
84
|
+
outcome_detail TEXT,
|
|
85
|
+
trace_id TEXT,
|
|
86
|
+
tags TEXT DEFAULT '[]'
|
|
87
|
+
);
|
|
88
|
+
CREATE INDEX IF NOT EXISTS idx_episodic_session ON episodic_events(session_id);
|
|
89
|
+
CREATE INDEX IF NOT EXISTS idx_episodic_timestamp ON episodic_events(timestamp);
|
|
90
|
+
|
|
91
|
+
CREATE TABLE IF NOT EXISTS episodic_to_procedural_candidates (
|
|
92
|
+
id TEXT PRIMARY KEY,
|
|
93
|
+
pattern_signature TEXT NOT NULL UNIQUE,
|
|
94
|
+
session_ids TEXT DEFAULT '[]',
|
|
95
|
+
evidence_count INTEGER DEFAULT 1,
|
|
96
|
+
first_seen_at INTEGER NOT NULL,
|
|
97
|
+
last_seen_at INTEGER NOT NULL,
|
|
98
|
+
promoted_at INTEGER,
|
|
99
|
+
atom_id TEXT
|
|
62
100
|
);
|
|
63
101
|
`;
|
|
64
|
-
//
|
|
65
|
-
// SQLite does not support IF NOT EXISTS for ADD COLUMN; we catch
|
|
66
|
-
const
|
|
102
|
+
// Migrations for pre-existing DBs that lack newer columns.
|
|
103
|
+
// SQLite does not support IF NOT EXISTS for ADD COLUMN; we catch errors silently.
|
|
104
|
+
const COLUMN_MIGRATIONS = [
|
|
105
|
+
`ALTER TABLE knowledge_atoms ADD COLUMN session_id TEXT`,
|
|
106
|
+
`ALTER TABLE knowledge_atoms ADD COLUMN confidence REAL DEFAULT 0.5`,
|
|
107
|
+
`ALTER TABLE knowledge_atoms ADD COLUMN observation_count INTEGER DEFAULT 1`,
|
|
108
|
+
`ALTER TABLE knowledge_atoms ADD COLUMN decay_rate REAL DEFAULT 0.05`,
|
|
109
|
+
`ALTER TABLE knowledge_atoms ADD COLUMN tags TEXT DEFAULT '[]'`,
|
|
110
|
+
];
|
|
67
111
|
/** Lazy-initialised SQLite database handle, or null if unavailable. */
|
|
68
112
|
let _db = undefined;
|
|
69
113
|
let _jsonlPath = null;
|
|
@@ -87,11 +131,13 @@ function initDb() {
|
|
|
87
131
|
const db = new Database(dbPath);
|
|
88
132
|
db.pragma('journal_mode = WAL');
|
|
89
133
|
db.exec(SCHEMA_SQL);
|
|
90
|
-
//
|
|
91
|
-
|
|
92
|
-
|
|
134
|
+
// Column migrations for pre-existing DBs — errors are swallowed (column already exists).
|
|
135
|
+
for (const sql of COLUMN_MIGRATIONS) {
|
|
136
|
+
try {
|
|
137
|
+
db.exec(sql);
|
|
138
|
+
}
|
|
139
|
+
catch { /* column already exists */ }
|
|
93
140
|
}
|
|
94
|
-
catch { /* column already exists */ }
|
|
95
141
|
return db;
|
|
96
142
|
}
|
|
97
143
|
catch {
|
|
@@ -112,6 +158,27 @@ function getDb() {
|
|
|
112
158
|
}
|
|
113
159
|
return _db;
|
|
114
160
|
}
|
|
161
|
+
/** Exposed for use by episode-writer and memory endpoints. */
|
|
162
|
+
function getOsmosisDb() {
|
|
163
|
+
return getDb();
|
|
164
|
+
}
|
|
165
|
+
/** Count knowledge atoms relevant to a session (or all atoms if no session). */
|
|
166
|
+
function countAtomsForSession(sessionId) {
|
|
167
|
+
try {
|
|
168
|
+
const db = getDb();
|
|
169
|
+
if (!db)
|
|
170
|
+
return 0;
|
|
171
|
+
if (sessionId) {
|
|
172
|
+
const row = db.prepare(`SELECT COUNT(*) as cnt FROM knowledge_atoms WHERE session_id = ?`).get(sessionId);
|
|
173
|
+
return row?.cnt ?? 0;
|
|
174
|
+
}
|
|
175
|
+
const row = db.prepare(`SELECT COUNT(*) as cnt FROM knowledge_atoms`).get();
|
|
176
|
+
return row?.cnt ?? 0;
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
return 0;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
115
182
|
function getJsonlPath() {
|
|
116
183
|
if (_jsonlPath)
|
|
117
184
|
return _jsonlPath;
|
|
@@ -152,6 +219,14 @@ function captureAtom(atom, sessionId) {
|
|
|
152
219
|
timestamp: atom.timestamp,
|
|
153
220
|
session_id: sessionId ?? null,
|
|
154
221
|
});
|
|
222
|
+
// Update confidence on repeat observations for same (model, task_type).
|
|
223
|
+
if (atom.model && atom.taskType) {
|
|
224
|
+
try {
|
|
225
|
+
db.prepare(`UPDATE knowledge_atoms SET observation_count = observation_count + 1, confidence = MIN(1.0, confidence + 0.1)
|
|
226
|
+
WHERE type = 'success' AND model = ? AND task_type = ? AND id != last_insert_rowid()`).run(atom.model, atom.taskType);
|
|
227
|
+
}
|
|
228
|
+
catch { /* best-effort */ }
|
|
229
|
+
}
|
|
155
230
|
}
|
|
156
231
|
else {
|
|
157
232
|
_insertStmt.run({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"osmosis-store.js","sourceRoot":"","sources":["../src/osmosis-store.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"osmosis-store.js","sourceRoot":"","sources":["../src/osmosis-store.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4FH,4CAKC;AAyCD,oCAEC;AAGD,oDAaC;AAyBD,kCAgDC;AAGD,kCAOC;AA7OD,4CAA8B;AAC9B,4CAA8B;AAC9B,gDAAkC;AAsBlC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDlB,CAAC;AAEF,2DAA2D;AAC3D,kFAAkF;AAClF,MAAM,iBAAiB,GAAG;IACxB,wDAAwD;IACxD,oEAAoE;IACpE,4EAA4E;IAC5E,qEAAqE;IACrE,+DAA+D;CAChE,CAAC;AAEF,uEAAuE;AACvE,IAAI,GAAG,GAAyD,SAAS,CAAC;AAC1E,IAAI,UAAU,GAAkB,IAAI,CAAC;AACrC,IAAI,WAAW,GAA8C,IAAI,CAAC;AAElE,SAAgB,gBAAgB;IAC9B,8EAA8E;IAC9E,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,QAAQ,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IACtC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,MAAM;IACb,IAAI,CAAC;QACH,iEAAiE;QACjE,MAAM,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAoC,CAAC;QAC9E,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;QAC/B,SAAS,CAAC,GAAG,CAAC,CAAC;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAC5C,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;QAChC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAChC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpB,yFAAyF;QACzF,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;YACpC,IAAI,CAAC;gBAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,2BAA2B,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,KAAK;IACZ,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC;IAClC,GAAG,GAAG,MAAM,EAAE,CAAC;IACf,IAAI,GAAG,EAAE,CAAC;QACR,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC;;;;;KAKzB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,8DAA8D;AAC9D,SAAgB,YAAY;IAC1B,OAAO,KAAK,EAAE,CAAC;AACjB,CAAC;AAED,gFAAgF;AAChF,SAAgB,oBAAoB,CAAC,SAAyB;IAC5D,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,CAAC;QAClB,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,kEAAkE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAgC,CAAC;YACzI,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QACvB,CAAC;QACD,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC,GAAG,EAAiC,CAAC;QAC3G,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,SAAS,YAAY;IACnB,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAClC,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;IAC/B,SAAS,CAAC,GAAG,CAAC,CAAC;IACf,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAC7C,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,YAAY,CAAC,IAAmB;IACvC,IAAI,CAAC;QACH,EAAE,CAAC,cAAc,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,WAAW,CAAC,IAAmB,EAAE,SAAkB;IACjE,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;QACnB,IAAI,EAAE,IAAI,WAAW,EAAE,CAAC;YACtB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC5B,WAAW,CAAC,GAAG,CAAC;oBACd,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;oBACzB,SAAS,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;oBAChC,UAAU,EAAE,IAAI,CAAC,SAAS;oBAC1B,YAAY,EAAE,IAAI,CAAC,WAAW;oBAC9B,aAAa,EAAE,IAAI,CAAC,YAAY;oBAChC,UAAU,EAAE,IAAI;oBAChB,cAAc,EAAE,IAAI;oBACpB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,UAAU,EAAE,SAAS,IAAI,IAAI;iBAC9B,CAAC,CAAC;gBACH,wEAAwE;gBACxE,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAChC,IAAI,CAAC;wBACH,EAAE,CAAC,OAAO,CACR;oGACsF,CACvF,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACnC,CAAC;oBAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,GAAG,CAAC;oBACd,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;oBACzB,SAAS,EAAE,IAAI;oBACf,UAAU,EAAE,IAAI;oBAChB,YAAY,EAAE,IAAI;oBAClB,aAAa,EAAE,IAAI;oBACnB,UAAU,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI;oBAClC,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1C,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,UAAU,EAAE,SAAS,IAAI,IAAI;iBAC9B,CAAC,CAAC;YACL,CAAC;YACD,OAAO;QACT,CAAC;QACD,0CAA0C;QAC1C,YAAY,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,uBAAuB;QACvB,IAAI,CAAC;YAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IACpD,CAAC;AACH,CAAC;AAED,mDAAmD;AACnD,SAAgB,WAAW;IACzB,IAAI,GAAG,EAAE,CAAC;QACR,IAAI,CAAC;YAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAC7C,CAAC;IACD,GAAG,GAAG,SAAS,CAAC;IAChB,WAAW,GAAG,IAAI,CAAC;IACnB,UAAU,GAAG,IAAI,CAAC;AACpB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-tracker.d.ts","sourceRoot":"","sources":["../src/session-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,KAAK,IAAI,MAAM,WAAW,CAAC;AAEvC,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,aAAa,GAAG,WAAW,CAAC;CAC7C;AAoED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,EAC1C,KAAK,CAAC,EAAE,MAAM,GACb;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,aAAa,GAAG,WAAW,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"session-tracker.d.ts","sourceRoot":"","sources":["../src/session-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,KAAK,IAAI,MAAM,WAAW,CAAC;AAEvC,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,aAAa,GAAG,WAAW,CAAC;CAC7C;AAoED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,EAC1C,KAAK,CAAC,EAAE,MAAM,GACb;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,aAAa,GAAG,WAAW,CAAA;CAAE,CAoBnE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,aAAa,GAAG,WAAW,EAC1C,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,IAAI,CAwCN;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,GAAE,mBAAwB,GAAG,YAAY,EAAE,CA4B7E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,YAAY,EAAE,CAwBlD;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAED,mDAAmD;AACnD,wBAAgB,WAAW,IAAI,IAAI,CAWlC"}
|
package/dist/session-tracker.js
CHANGED
|
@@ -126,8 +126,14 @@ function getDb() {
|
|
|
126
126
|
function getSessionId(req, model) {
|
|
127
127
|
const headerVal = req.headers['x-claude-code-session-id'];
|
|
128
128
|
const raw = Array.isArray(headerVal) ? headerVal[0] : headerVal;
|
|
129
|
+
const MAX_SESSION_ID_LEN = 128;
|
|
130
|
+
const SESSION_ID_RE = /^[\w\-.:@]+$/;
|
|
129
131
|
if (raw && raw.trim()) {
|
|
130
|
-
|
|
132
|
+
const trimmed = raw.trim().slice(0, MAX_SESSION_ID_LEN);
|
|
133
|
+
if (SESSION_ID_RE.test(trimmed)) {
|
|
134
|
+
return { sessionId: trimmed, sessionSource: 'claude-code' };
|
|
135
|
+
}
|
|
136
|
+
// Fall through to synthetic if header is malformed
|
|
131
137
|
}
|
|
132
138
|
// Synthetic: keyed by UTC hour bucket + model
|
|
133
139
|
const now = new Date();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-tracker.js","sourceRoot":"","sources":["../src/session-tracker.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4FH,
|
|
1
|
+
{"version":3,"file":"session-tracker.js","sourceRoot":"","sources":["../src/session-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standalone-proxy.d.ts","sourceRoot":"","sources":["../src/standalone-proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAOlC,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAY,MAAM,kBAAkB,CAAC;AAE3E,KAAK,QAAQ,GAAG,YAAY,GACxB,YAAY,GACZ,UAAU,GACV,MAAM,GACN,SAAS,GACT,UAAU,GACV,WAAW,GACX,YAAY,GACZ,QAAQ,CAAC;AAOb,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"standalone-proxy.d.ts","sourceRoot":"","sources":["../src/standalone-proxy.ts"],"names":[],"mappings":"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"}
|