@relayplane/proxy 1.5.46 → 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.md +251 -15
  2. package/assets/relayplane-proxy.service +20 -0
  3. package/dist/alerts.d.ts +72 -0
  4. package/dist/alerts.d.ts.map +1 -0
  5. package/dist/alerts.js +290 -0
  6. package/dist/alerts.js.map +1 -0
  7. package/dist/anomaly.d.ts +65 -0
  8. package/dist/anomaly.d.ts.map +1 -0
  9. package/dist/anomaly.js +193 -0
  10. package/dist/anomaly.js.map +1 -0
  11. package/dist/budget.d.ts +98 -0
  12. package/dist/budget.d.ts.map +1 -0
  13. package/dist/budget.js +356 -0
  14. package/dist/budget.js.map +1 -0
  15. package/dist/cli.js +512 -93
  16. package/dist/cli.js.map +1 -1
  17. package/dist/config.d.ts +28 -2
  18. package/dist/config.d.ts.map +1 -1
  19. package/dist/config.js +122 -24
  20. package/dist/config.js.map +1 -1
  21. package/dist/downgrade.d.ts +37 -0
  22. package/dist/downgrade.d.ts.map +1 -0
  23. package/dist/downgrade.js +79 -0
  24. package/dist/downgrade.js.map +1 -0
  25. package/dist/mesh/capture.d.ts +11 -0
  26. package/dist/mesh/capture.d.ts.map +1 -0
  27. package/dist/mesh/capture.js +43 -0
  28. package/dist/mesh/capture.js.map +1 -0
  29. package/dist/mesh/fitness.d.ts +14 -0
  30. package/dist/mesh/fitness.d.ts.map +1 -0
  31. package/dist/mesh/fitness.js +40 -0
  32. package/dist/mesh/fitness.js.map +1 -0
  33. package/dist/mesh/index.d.ts +39 -0
  34. package/dist/mesh/index.d.ts.map +1 -0
  35. package/dist/mesh/index.js +118 -0
  36. package/dist/mesh/index.js.map +1 -0
  37. package/dist/mesh/store.d.ts +30 -0
  38. package/dist/mesh/store.d.ts.map +1 -0
  39. package/dist/mesh/store.js +174 -0
  40. package/dist/mesh/store.js.map +1 -0
  41. package/dist/mesh/sync.d.ts +37 -0
  42. package/dist/mesh/sync.d.ts.map +1 -0
  43. package/dist/mesh/sync.js +154 -0
  44. package/dist/mesh/sync.js.map +1 -0
  45. package/dist/mesh/types.d.ts +57 -0
  46. package/dist/mesh/types.d.ts.map +1 -0
  47. package/dist/mesh/types.js +7 -0
  48. package/dist/mesh/types.js.map +1 -0
  49. package/dist/rate-limiter.d.ts +64 -0
  50. package/dist/rate-limiter.d.ts.map +1 -0
  51. package/dist/rate-limiter.js +159 -0
  52. package/dist/rate-limiter.js.map +1 -0
  53. package/dist/relay-config.d.ts +9 -0
  54. package/dist/relay-config.d.ts.map +1 -1
  55. package/dist/relay-config.js +2 -0
  56. package/dist/relay-config.js.map +1 -1
  57. package/dist/response-cache.d.ts +139 -0
  58. package/dist/response-cache.d.ts.map +1 -0
  59. package/dist/response-cache.js +515 -0
  60. package/dist/response-cache.js.map +1 -0
  61. package/dist/server.d.ts.map +1 -1
  62. package/dist/server.js +5 -1
  63. package/dist/server.js.map +1 -1
  64. package/dist/standalone-proxy.d.ts +2 -1
  65. package/dist/standalone-proxy.d.ts.map +1 -1
  66. package/dist/standalone-proxy.js +662 -26
  67. package/dist/standalone-proxy.js.map +1 -1
  68. package/dist/telemetry.d.ts.map +1 -1
  69. package/dist/telemetry.js +8 -5
  70. package/dist/telemetry.js.map +1 -1
  71. package/dist/utils/model-suggestions.d.ts.map +1 -1
  72. package/dist/utils/model-suggestions.js +19 -2
  73. package/dist/utils/model-suggestions.js.map +1 -1
  74. package/dist/utils/version-status.d.ts +9 -0
  75. package/dist/utils/version-status.d.ts.map +1 -0
  76. package/dist/utils/version-status.js +28 -0
  77. package/dist/utils/version-status.js.map +1 -0
  78. package/package.json +7 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/mesh/capture.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM,CAgC5E"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ /**
3
+ * Osmosis Knowledge Mesh — Capture
4
+ * Converts proxy request/response data into knowledge atoms.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.captureRequest = captureRequest;
8
+ const node_crypto_1 = require("node:crypto");
9
+ /**
10
+ * Capture a proxy request as a knowledge atom (fire-and-forget).
11
+ */
12
+ function captureRequest(store, event) {
13
+ const paramsHash = (0, node_crypto_1.createHash)('sha256')
14
+ .update(`${event.model}:${event.task_type}:${event.input_tokens}`)
15
+ .digest('hex')
16
+ .slice(0, 16);
17
+ const atom = store.insert({
18
+ type: 'tool',
19
+ observation: event.success
20
+ ? `${event.task_type}→${event.model}: ${event.output_tokens} tokens, $${event.cost_usd.toFixed(4)}, ${event.latency_ms}ms`
21
+ : `${event.task_type}→${event.model}: FAILED (${event.error_type ?? 'unknown'})`,
22
+ context: JSON.stringify({
23
+ provider: event.provider,
24
+ task_type: event.task_type,
25
+ input_tokens: event.input_tokens,
26
+ output_tokens: event.output_tokens,
27
+ cost_usd: event.cost_usd,
28
+ }),
29
+ confidence: event.success ? 0.7 : 0.3,
30
+ fitness_score: event.success ? 0.8 : 0.2,
31
+ trust_tier: 'local',
32
+ source_agent_hash: 'relayplane-proxy',
33
+ decay_rate: 0.99,
34
+ tool_name: `${event.task_type}→${event.model}`,
35
+ params_hash: paramsHash,
36
+ outcome: event.success ? 'success' : 'failure',
37
+ error_signature: event.error_type ?? null,
38
+ latency_ms: event.latency_ms,
39
+ reliability_score: event.success ? 1.0 : 0.0,
40
+ });
41
+ return atom.id;
42
+ }
43
+ //# sourceMappingURL=capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/mesh/capture.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AASH,wCAgCC;AAvCD,6CAAyC;AAIzC;;GAEG;AACH,SAAgB,cAAc,CAAC,KAAgB,EAAE,KAAmB;IAClE,MAAM,UAAU,GAAG,IAAA,wBAAU,EAAC,QAAQ,CAAC;SACpC,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;SACjE,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEhB,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;QACxB,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,KAAK,CAAC,OAAO;YACxB,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,aAAa,aAAa,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,UAAU,IAAI;YAC1H,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,aAAa,KAAK,CAAC,UAAU,IAAI,SAAS,GAAG;QAClF,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;YACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzB,CAAC;QACF,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;QACrC,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;QACxC,UAAU,EAAE,OAAO;QACnB,iBAAiB,EAAE,kBAAkB;QACrC,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,EAAE;QAC9C,WAAW,EAAE,UAAU;QACvB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QAC9C,eAAe,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI;QACzC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;KAC7C,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC,EAAE,CAAC;AACjB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Osmosis Knowledge Mesh — Fitness Scoring
3
+ * Adapted from ~/osmosis/packages/core/src/fitness/
4
+ */
5
+ import { MeshStore } from './store.js';
6
+ /**
7
+ * fitness = usage_rate × success_ratio × recency_factor
8
+ */
9
+ export declare function computeFitness(useCount: number, successAfterUse: number, failureAfterUse: number, lastUsed: string | null, maxUseCount: number, now?: Date): number;
10
+ /**
11
+ * Batch-recalculate fitness for all atoms.
12
+ */
13
+ export declare function recalculateFitness(store: MeshStore): void;
14
+ //# sourceMappingURL=fitness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fitness.d.ts","sourceRoot":"","sources":["../../src/mesh/fitness.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC;;GAEG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,WAAW,EAAE,MAAM,EACnB,GAAG,GAAE,IAAiB,GACrB,MAAM,CASR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAoBzD"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ /**
3
+ * Osmosis Knowledge Mesh — Fitness Scoring
4
+ * Adapted from ~/osmosis/packages/core/src/fitness/
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.computeFitness = computeFitness;
8
+ exports.recalculateFitness = recalculateFitness;
9
+ /**
10
+ * fitness = usage_rate × success_ratio × recency_factor
11
+ */
12
+ function computeFitness(useCount, successAfterUse, failureAfterUse, lastUsed, maxUseCount, now = new Date()) {
13
+ const usageRate = maxUseCount > 0 ? useCount / maxUseCount : 0;
14
+ const total = successAfterUse + failureAfterUse;
15
+ const successRatio = total > 0 ? successAfterUse / total : 0.5;
16
+ const daysSinceUse = lastUsed
17
+ ? Math.max(0, (now.getTime() - new Date(lastUsed).getTime()) / 86_400_000)
18
+ : 30;
19
+ const recencyFactor = Math.exp(-0.05 * daysSinceUse);
20
+ return Math.min(1, Math.max(0, usageRate * successRatio * recencyFactor));
21
+ }
22
+ /**
23
+ * Batch-recalculate fitness for all atoms.
24
+ */
25
+ function recalculateFitness(store) {
26
+ const atoms = store.getAll();
27
+ let maxUseCount = 1;
28
+ for (const a of atoms) {
29
+ const uc = a.use_count ?? 0;
30
+ if (uc > maxUseCount)
31
+ maxUseCount = uc;
32
+ }
33
+ const now = new Date();
34
+ for (const atom of atoms) {
35
+ const a = atom;
36
+ const score = computeFitness(a.use_count ?? 0, a.success_after_use ?? 0, a.failure_after_use ?? 0, a.last_used ?? null, maxUseCount, now);
37
+ store.updateFitness(atom.id, score);
38
+ }
39
+ }
40
+ //# sourceMappingURL=fitness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fitness.js","sourceRoot":"","sources":["../../src/mesh/fitness.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAOH,wCAgBC;AAKD,gDAoBC;AA5CD;;GAEG;AACH,SAAgB,cAAc,CAC5B,QAAgB,EAChB,eAAuB,EACvB,eAAuB,EACvB,QAAuB,EACvB,WAAmB,EACnB,MAAY,IAAI,IAAI,EAAE;IAEtB,MAAM,SAAS,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,eAAe,GAAG,eAAe,CAAC;IAChD,MAAM,YAAY,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/D,MAAM,YAAY,GAAG,QAAQ;QAC3B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,UAAU,CAAC;QAC1E,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,KAAgB;IACjD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;IAC7B,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,EAAE,GAAI,CAAS,CAAC,SAAS,IAAI,CAAC,CAAC;QACrC,IAAI,EAAE,GAAG,WAAW;YAAE,WAAW,GAAG,EAAE,CAAC;IACzC,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,IAAW,CAAC;QACtB,MAAM,KAAK,GAAG,cAAc,CAC1B,CAAC,CAAC,SAAS,IAAI,CAAC,EAChB,CAAC,CAAC,iBAAiB,IAAI,CAAC,EACxB,CAAC,CAAC,iBAAiB,IAAI,CAAC,EACxB,CAAC,CAAC,SAAS,IAAI,IAAI,EACnB,WAAW,EACX,GAAG,CACJ,CAAC;QACF,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;AACH,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Osmosis Knowledge Mesh — Integrated into RelayPlane Proxy
3
+ *
4
+ * Self-contained mesh learning layer: capture, store, fitness, sync.
5
+ * No external mesh packages required.
6
+ */
7
+ import type { CaptureEvent, SyncResult } from './types.js';
8
+ export { MeshStore } from './store.js';
9
+ export { captureRequest } from './capture.js';
10
+ export { computeFitness, recalculateFitness } from './fitness.js';
11
+ export { pushToMesh, pullFromMesh, syncWithMesh, MeshSyncManager } from './sync.js';
12
+ export type { KnowledgeAtom, CaptureEvent, SyncResult } from './types.js';
13
+ export interface MeshConfig {
14
+ enabled: boolean;
15
+ endpoint: string;
16
+ sync_interval_ms: number;
17
+ contribute: boolean;
18
+ db_path?: string;
19
+ }
20
+ export declare const DEFAULT_MESH_CONFIG: MeshConfig;
21
+ export interface MeshHandle {
22
+ captureRequest(event: CaptureEvent): void;
23
+ getStats(): MeshStats;
24
+ forceSync(): Promise<SyncResult>;
25
+ stop(): void;
26
+ }
27
+ export interface MeshStats {
28
+ enabled: boolean;
29
+ atoms_local: number;
30
+ atoms_synced: number;
31
+ last_sync: string | null;
32
+ endpoint: string;
33
+ }
34
+ /**
35
+ * Initialize the integrated mesh layer.
36
+ * Returns a handle for capture/stats/sync, or a no-op if disabled.
37
+ */
38
+ export declare function initMeshLayer(config: MeshConfig, apiKey?: string): MeshHandle;
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mesh/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACpF,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE1E,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,mBAAmB,EAAE,UAKjC,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1C,QAAQ,IAAI,SAAS,CAAC;IACtB,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IACjC,IAAI,IAAI,IAAI,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CA+E7E"}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ /**
3
+ * Osmosis Knowledge Mesh — Integrated into RelayPlane Proxy
4
+ *
5
+ * Self-contained mesh learning layer: capture, store, fitness, sync.
6
+ * No external mesh packages required.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.DEFAULT_MESH_CONFIG = exports.MeshSyncManager = exports.syncWithMesh = exports.pullFromMesh = exports.pushToMesh = exports.recalculateFitness = exports.computeFitness = exports.captureRequest = exports.MeshStore = void 0;
10
+ exports.initMeshLayer = initMeshLayer;
11
+ const node_fs_1 = require("node:fs");
12
+ const node_path_1 = require("node:path");
13
+ const store_js_1 = require("./store.js");
14
+ const capture_js_1 = require("./capture.js");
15
+ const fitness_js_1 = require("./fitness.js");
16
+ const sync_js_1 = require("./sync.js");
17
+ var store_js_2 = require("./store.js");
18
+ Object.defineProperty(exports, "MeshStore", { enumerable: true, get: function () { return store_js_2.MeshStore; } });
19
+ var capture_js_2 = require("./capture.js");
20
+ Object.defineProperty(exports, "captureRequest", { enumerable: true, get: function () { return capture_js_2.captureRequest; } });
21
+ var fitness_js_2 = require("./fitness.js");
22
+ Object.defineProperty(exports, "computeFitness", { enumerable: true, get: function () { return fitness_js_2.computeFitness; } });
23
+ Object.defineProperty(exports, "recalculateFitness", { enumerable: true, get: function () { return fitness_js_2.recalculateFitness; } });
24
+ var sync_js_2 = require("./sync.js");
25
+ Object.defineProperty(exports, "pushToMesh", { enumerable: true, get: function () { return sync_js_2.pushToMesh; } });
26
+ Object.defineProperty(exports, "pullFromMesh", { enumerable: true, get: function () { return sync_js_2.pullFromMesh; } });
27
+ Object.defineProperty(exports, "syncWithMesh", { enumerable: true, get: function () { return sync_js_2.syncWithMesh; } });
28
+ Object.defineProperty(exports, "MeshSyncManager", { enumerable: true, get: function () { return sync_js_2.MeshSyncManager; } });
29
+ exports.DEFAULT_MESH_CONFIG = {
30
+ enabled: true,
31
+ endpoint: 'https://osmosis-mesh-dev.fly.dev',
32
+ sync_interval_ms: 60000,
33
+ contribute: true,
34
+ };
35
+ /**
36
+ * Initialize the integrated mesh layer.
37
+ * Returns a handle for capture/stats/sync, or a no-op if disabled.
38
+ */
39
+ function initMeshLayer(config, apiKey) {
40
+ const noopHandle = {
41
+ captureRequest() { },
42
+ getStats() {
43
+ return { enabled: false, atoms_local: 0, atoms_synced: 0, last_sync: null, endpoint: config.endpoint };
44
+ },
45
+ async forceSync() {
46
+ return { pushed: 0, pulled: 0, deduped: 0, errors: ['Mesh disabled'], timestamp: new Date().toISOString() };
47
+ },
48
+ stop() { },
49
+ };
50
+ if (!config.enabled)
51
+ return noopHandle;
52
+ const dbDir = config.db_path
53
+ ? config.db_path.substring(0, config.db_path.lastIndexOf('/'))
54
+ : (0, node_path_1.join)(process.env.HOME ?? '/root', '.relayplane');
55
+ const dbPath = config.db_path ?? (0, node_path_1.join)(dbDir, 'mesh.db');
56
+ try {
57
+ (0, node_fs_1.mkdirSync)(dbDir, { recursive: true });
58
+ }
59
+ catch { }
60
+ let store;
61
+ try {
62
+ store = new store_js_1.MeshStore(dbPath);
63
+ }
64
+ catch (err) {
65
+ console.error(`[MESH] Failed to open store at ${dbPath}: ${err}`);
66
+ return noopHandle;
67
+ }
68
+ // Start sync manager if contributing
69
+ let syncManager = null;
70
+ if (config.contribute) {
71
+ syncManager = new sync_js_1.MeshSyncManager(store, config.endpoint, config.sync_interval_ms, apiKey);
72
+ syncManager.start();
73
+ console.log(`[MESH] Sync started (interval: ${config.sync_interval_ms / 1000}s, endpoint: ${config.endpoint})`);
74
+ }
75
+ // Periodic fitness recalculation (every 5 min)
76
+ const fitnessTimer = setInterval(() => {
77
+ try {
78
+ (0, fitness_js_1.recalculateFitness)(store);
79
+ }
80
+ catch { }
81
+ }, 300_000);
82
+ fitnessTimer.unref();
83
+ console.log(`[MESH] Knowledge mesh initialized (db: ${dbPath})`);
84
+ return {
85
+ captureRequest(event) {
86
+ try {
87
+ (0, capture_js_1.captureRequest)(store, event);
88
+ }
89
+ catch (err) {
90
+ // Never block proxy for mesh errors
91
+ }
92
+ },
93
+ getStats() {
94
+ return {
95
+ enabled: true,
96
+ atoms_local: store.count(),
97
+ atoms_synced: store.countSynced(),
98
+ last_sync: syncManager?.getLastSyncTime() ?? store.getLastSyncTime(config.endpoint),
99
+ endpoint: config.endpoint,
100
+ };
101
+ },
102
+ async forceSync() {
103
+ if (syncManager) {
104
+ return syncManager.doSync();
105
+ }
106
+ return (0, sync_js_1.syncWithMesh)(store, config.endpoint, apiKey);
107
+ },
108
+ stop() {
109
+ syncManager?.stop();
110
+ clearInterval(fitnessTimer);
111
+ try {
112
+ store.close();
113
+ }
114
+ catch { }
115
+ },
116
+ };
117
+ }
118
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mesh/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Osmosis Knowledge Mesh — Local SQLite Store
3
+ * Adapted from ~/osmosis/packages/core/src/store/
4
+ */
5
+ import type { KnowledgeAtom } from './types.js';
6
+ export declare class MeshStore {
7
+ private db;
8
+ constructor(dbPath?: string);
9
+ /** Insert atom, returns it */
10
+ insert(data: Omit<KnowledgeAtom, 'id' | 'created_at' | 'updated_at'>): KnowledgeAtom;
11
+ getById(id: string): KnowledgeAtom | null;
12
+ getAll(): KnowledgeAtom[];
13
+ count(): number;
14
+ countSynced(): number;
15
+ /** Get atoms not yet synced */
16
+ getUnsynced(): KnowledgeAtom[];
17
+ /** Mark atoms as synced */
18
+ markSynced(ids: string[]): void;
19
+ /** Update fitness score */
20
+ updateFitness(id: string, score: number): void;
21
+ /** Get top atoms by fitness */
22
+ getTopByFitness(limit?: number): KnowledgeAtom[];
23
+ getLastPushAt(peerUrl: string): string | null;
24
+ setLastPushAt(peerUrl: string, ts: string): void;
25
+ getLastPullAt(peerUrl: string): string | null;
26
+ setLastPullAt(peerUrl: string, ts: string): void;
27
+ getLastSyncTime(peerUrl: string): string | null;
28
+ close(): void;
29
+ }
30
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/mesh/store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAY,MAAM,YAAY,CAAC;AA+C1D,qBAAa,SAAS;IACpB,OAAO,CAAC,EAAE,CAAoB;gBAElB,MAAM,GAAE,MAAmB;IAOvC,8BAA8B;IAC9B,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,YAAY,GAAG,YAAY,CAAC,GAAG,aAAa;IA0CpF,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAIzC,MAAM,IAAI,aAAa,EAAE;IAIzB,KAAK,IAAI,MAAM;IAKf,WAAW,IAAI,MAAM;IAKrB,+BAA+B;IAC/B,WAAW,IAAI,aAAa,EAAE;IAI9B,2BAA2B;IAC3B,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI;IAS/B,2BAA2B;IAC3B,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAK9C,+BAA+B;IAC/B,eAAe,CAAC,KAAK,GAAE,MAAW,GAAG,aAAa,EAAE;IAKpD,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAK7C,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAOhD,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAK7C,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAOhD,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAK/C,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+ /**
3
+ * Osmosis Knowledge Mesh — Local SQLite Store
4
+ * Adapted from ~/osmosis/packages/core/src/store/
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.MeshStore = void 0;
11
+ const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
12
+ const node_crypto_1 = require("node:crypto");
13
+ const SCHEMA_SQL = `
14
+ CREATE TABLE IF NOT EXISTS atoms (
15
+ id TEXT PRIMARY KEY,
16
+ type TEXT NOT NULL,
17
+ observation TEXT NOT NULL,
18
+ context TEXT NOT NULL,
19
+ confidence REAL NOT NULL,
20
+ fitness_score REAL NOT NULL,
21
+ trust_tier TEXT NOT NULL DEFAULT 'quarantine',
22
+ source_agent_hash TEXT NOT NULL,
23
+ created_at TEXT NOT NULL,
24
+ updated_at TEXT NOT NULL,
25
+ decay_rate REAL NOT NULL DEFAULT 0.99,
26
+ tool_name TEXT,
27
+ params_hash TEXT,
28
+ outcome TEXT,
29
+ error_signature TEXT,
30
+ latency_ms REAL,
31
+ reliability_score REAL,
32
+ anti_pattern TEXT,
33
+ failure_cluster_size INTEGER,
34
+ error_type TEXT,
35
+ severity TEXT,
36
+ evidence_count INTEGER NOT NULL DEFAULT 1,
37
+ use_count INTEGER NOT NULL DEFAULT 0,
38
+ success_after_use INTEGER NOT NULL DEFAULT 0,
39
+ failure_after_use INTEGER NOT NULL DEFAULT 0,
40
+ last_used TEXT,
41
+ synced INTEGER NOT NULL DEFAULT 0
42
+ );
43
+
44
+ CREATE INDEX IF NOT EXISTS idx_atoms_type ON atoms(type);
45
+ CREATE INDEX IF NOT EXISTS idx_atoms_fitness ON atoms(fitness_score);
46
+ CREATE INDEX IF NOT EXISTS idx_atoms_synced ON atoms(synced);
47
+ CREATE INDEX IF NOT EXISTS idx_atoms_updated_at ON atoms(updated_at);
48
+ `;
49
+ const SYNC_META_SQL = `
50
+ CREATE TABLE IF NOT EXISTS sync_meta (
51
+ peer_url TEXT PRIMARY KEY,
52
+ last_push_at TEXT,
53
+ last_pull_at TEXT
54
+ );
55
+ `;
56
+ class MeshStore {
57
+ db;
58
+ constructor(dbPath = ':memory:') {
59
+ this.db = new better_sqlite3_1.default(dbPath);
60
+ this.db.pragma('journal_mode = WAL');
61
+ this.db.exec(SCHEMA_SQL);
62
+ this.db.exec(SYNC_META_SQL);
63
+ }
64
+ /** Insert atom, returns it */
65
+ insert(data) {
66
+ const now = new Date().toISOString();
67
+ const atom = {
68
+ id: (0, node_crypto_1.randomUUID)(),
69
+ created_at: now,
70
+ updated_at: now,
71
+ evidence_count: 1,
72
+ use_count: 0,
73
+ success_after_use: 0,
74
+ failure_after_use: 0,
75
+ synced: false,
76
+ ...data,
77
+ };
78
+ this.db.prepare(`
79
+ INSERT INTO atoms (id, type, observation, context, confidence, fitness_score,
80
+ trust_tier, source_agent_hash, created_at, updated_at, decay_rate,
81
+ tool_name, params_hash, outcome, error_signature, latency_ms, reliability_score,
82
+ anti_pattern, failure_cluster_size, error_type, severity,
83
+ evidence_count, use_count, success_after_use, failure_after_use, last_used, synced)
84
+ VALUES (@id, @type, @observation, @context, @confidence, @fitness_score,
85
+ @trust_tier, @source_agent_hash, @created_at, @updated_at, @decay_rate,
86
+ @tool_name, @params_hash, @outcome, @error_signature, @latency_ms, @reliability_score,
87
+ @anti_pattern, @failure_cluster_size, @error_type, @severity,
88
+ @evidence_count, @use_count, @success_after_use, @failure_after_use, @last_used, @synced)
89
+ `).run({
90
+ ...atom,
91
+ synced: atom.synced ? 1 : 0,
92
+ tool_name: atom.tool_name ?? null,
93
+ params_hash: atom.params_hash ?? null,
94
+ outcome: atom.outcome ?? null,
95
+ error_signature: atom.error_signature ?? null,
96
+ latency_ms: atom.latency_ms ?? null,
97
+ reliability_score: atom.reliability_score ?? null,
98
+ anti_pattern: atom.anti_pattern ?? null,
99
+ failure_cluster_size: atom.failure_cluster_size ?? null,
100
+ error_type: atom.error_type ?? null,
101
+ severity: atom.severity ?? null,
102
+ last_used: atom.last_used ?? null,
103
+ });
104
+ return atom;
105
+ }
106
+ getById(id) {
107
+ return this.db.prepare('SELECT * FROM atoms WHERE id = ?').get(id) ?? null;
108
+ }
109
+ getAll() {
110
+ return this.db.prepare('SELECT * FROM atoms').all();
111
+ }
112
+ count() {
113
+ const row = this.db.prepare('SELECT COUNT(*) as cnt FROM atoms').get();
114
+ return row.cnt;
115
+ }
116
+ countSynced() {
117
+ const row = this.db.prepare('SELECT COUNT(*) as cnt FROM atoms WHERE synced = 1').get();
118
+ return row.cnt;
119
+ }
120
+ /** Get atoms not yet synced */
121
+ getUnsynced() {
122
+ return this.db.prepare('SELECT * FROM atoms WHERE synced = 0').all();
123
+ }
124
+ /** Mark atoms as synced */
125
+ markSynced(ids) {
126
+ if (ids.length === 0)
127
+ return;
128
+ const stmt = this.db.prepare('UPDATE atoms SET synced = 1 WHERE id = ?');
129
+ const tx = this.db.transaction(() => {
130
+ for (const id of ids)
131
+ stmt.run(id);
132
+ });
133
+ tx();
134
+ }
135
+ /** Update fitness score */
136
+ updateFitness(id, score) {
137
+ this.db.prepare('UPDATE atoms SET fitness_score = ?, updated_at = ? WHERE id = ?')
138
+ .run(score, new Date().toISOString(), id);
139
+ }
140
+ /** Get top atoms by fitness */
141
+ getTopByFitness(limit = 20) {
142
+ return this.db.prepare('SELECT * FROM atoms ORDER BY fitness_score DESC LIMIT ?').all(limit);
143
+ }
144
+ // Sync meta helpers
145
+ getLastPushAt(peerUrl) {
146
+ const row = this.db.prepare('SELECT last_push_at FROM sync_meta WHERE peer_url = ?').get(peerUrl);
147
+ return row?.last_push_at ?? null;
148
+ }
149
+ setLastPushAt(peerUrl, ts) {
150
+ this.db.prepare(`
151
+ INSERT INTO sync_meta (peer_url, last_push_at) VALUES (?, ?)
152
+ ON CONFLICT(peer_url) DO UPDATE SET last_push_at = excluded.last_push_at
153
+ `).run(peerUrl, ts);
154
+ }
155
+ getLastPullAt(peerUrl) {
156
+ const row = this.db.prepare('SELECT last_pull_at FROM sync_meta WHERE peer_url = ?').get(peerUrl);
157
+ return row?.last_pull_at ?? null;
158
+ }
159
+ setLastPullAt(peerUrl, ts) {
160
+ this.db.prepare(`
161
+ INSERT INTO sync_meta (peer_url, last_pull_at) VALUES (?, ?)
162
+ ON CONFLICT(peer_url) DO UPDATE SET last_pull_at = excluded.last_pull_at
163
+ `).run(peerUrl, ts);
164
+ }
165
+ getLastSyncTime(peerUrl) {
166
+ const row = this.db.prepare('SELECT MAX(last_push_at, last_pull_at) as ts FROM sync_meta WHERE peer_url = ?').get(peerUrl);
167
+ return row?.ts ?? null;
168
+ }
169
+ close() {
170
+ this.db.close();
171
+ }
172
+ }
173
+ exports.MeshStore = MeshStore;
174
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/mesh/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Osmosis Knowledge Mesh — Mesh Sync
3
+ * Push local atoms to mesh server, pull high-fitness atoms back.
4
+ */
5
+ import type { SyncResult } from './types.js';
6
+ import { MeshStore } from './store.js';
7
+ /**
8
+ * Push unsynced atoms to the mesh endpoint.
9
+ */
10
+ export declare function pushToMesh(store: MeshStore, endpoint: string, apiKey?: string): Promise<SyncResult>;
11
+ /**
12
+ * Pull high-fitness atoms from the mesh.
13
+ */
14
+ export declare function pullFromMesh(store: MeshStore, endpoint: string, apiKey?: string): Promise<SyncResult>;
15
+ /**
16
+ * Run a full sync cycle (push then pull).
17
+ */
18
+ export declare function syncWithMesh(store: MeshStore, endpoint: string, apiKey?: string): Promise<SyncResult>;
19
+ /**
20
+ * Auto-sync manager. Starts interval-based sync.
21
+ */
22
+ export declare class MeshSyncManager {
23
+ private store;
24
+ private endpoint;
25
+ private intervalMs;
26
+ private apiKey?;
27
+ private timer;
28
+ private lastSync;
29
+ private lastErrors;
30
+ constructor(store: MeshStore, endpoint: string, intervalMs: number, apiKey?: string | undefined);
31
+ start(): void;
32
+ stop(): void;
33
+ doSync(): Promise<SyncResult>;
34
+ getLastSyncTime(): string | null;
35
+ getLastErrors(): string[];
36
+ }
37
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/mesh/sync.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAiB,UAAU,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC;;GAEG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,CAAC,CAuCrB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,CAAC,CAmCrB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,CAAC,CAUrB;AAED;;GAEG;AACH,qBAAa,eAAe;IAMxB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM,CAAC;IARjB,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,UAAU,CAAgB;gBAGxB,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,YAAA;IAGzB,KAAK,IAAI,IAAI;IAQb,IAAI,IAAI,IAAI;IAON,MAAM,IAAI,OAAO,CAAC,UAAU,CAAC;IAYnC,eAAe,IAAI,MAAM,GAAG,IAAI;IAIhC,aAAa,IAAI,MAAM,EAAE;CAG1B"}