renor-engine 0.0.0-stage → 1.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.
Files changed (176) hide show
  1. package/LICENSE +661 -0
  2. package/NOTICE +73 -0
  3. package/README.md +105 -2
  4. package/dist/BUILD.json +6 -0
  5. package/dist/api/apiAuth.js +43 -0
  6. package/dist/api/server.js +172 -0
  7. package/dist/buildIdentity.js +132 -0
  8. package/dist/cli-extractors.js +46 -0
  9. package/dist/cli.js +491 -0
  10. package/dist/config.js +65 -0
  11. package/dist/context/composer.js +320 -0
  12. package/dist/context/readHonesty.js +478 -0
  13. package/dist/context/rowStore.js +238 -0
  14. package/dist/conversation/formatter.js +81 -0
  15. package/dist/conversation/parser.js +189 -0
  16. package/dist/conversation/types.js +2 -0
  17. package/dist/conversation/writer.js +42 -0
  18. package/dist/db/client.js +147 -0
  19. package/dist/db/indexSalvage.js +81 -0
  20. package/dist/db/migrations.js +642 -0
  21. package/dist/db/readCache.js +109 -0
  22. package/dist/db/schema.js +5 -0
  23. package/dist/db/statements.js +89 -0
  24. package/dist/digests/digestCache.js +142 -0
  25. package/dist/digests/digests.js +597 -0
  26. package/dist/digests/worker.js +348 -0
  27. package/dist/embeddings/caching.js +337 -0
  28. package/dist/embeddings/coalescing.js +177 -0
  29. package/dist/embeddings/interactive.js +103 -0
  30. package/dist/embeddings/local.js +68 -0
  31. package/dist/embeddings/openai.js +105 -0
  32. package/dist/embeddings/rebuild.js +166 -0
  33. package/dist/embeddings/simdScan.js +258 -0
  34. package/dist/embeddings/space.js +21 -0
  35. package/dist/embeddings/types.js +14 -0
  36. package/dist/embeddings/vectorIndex.js +675 -0
  37. package/dist/embeddings/vertex.js +224 -0
  38. package/dist/eval/artifacts.js +42 -0
  39. package/dist/eval/cacheReport.js +139 -0
  40. package/dist/eval/comparison.js +182 -0
  41. package/dist/eval/context700-candidate.js +145 -0
  42. package/dist/eval/evalCache.js +525 -0
  43. package/dist/eval/hashEmbedding.js +35 -0
  44. package/dist/eval/longmemeval.js +56 -0
  45. package/dist/eval/metrics.js +181 -0
  46. package/dist/eval/renorbenchBaseline.js +486 -0
  47. package/dist/eval/renorbenchDocuments.js +134 -0
  48. package/dist/eval/renorbenchProduct.js +182 -0
  49. package/dist/eval/runLedger.js +279 -0
  50. package/dist/eval/runManifest.js +479 -0
  51. package/dist/eval/scoring.js +197 -0
  52. package/dist/evidence/attach.js +267 -0
  53. package/dist/evidence/background.js +147 -0
  54. package/dist/evidence/evidenceCache.js +182 -0
  55. package/dist/evidence/gate.js +37 -0
  56. package/dist/evidence/keyPool.js +85 -0
  57. package/dist/evidence/ollamaChat.js +84 -0
  58. package/dist/evidence/optin.js +165 -0
  59. package/dist/evidence/options.js +130 -0
  60. package/dist/evidence/secondPass.js +456 -0
  61. package/dist/extraction/classifyCapture.js +34 -0
  62. package/dist/extraction/decision-model.js +174 -0
  63. package/dist/extraction/eventExtractor.js +113 -0
  64. package/dist/extraction/extractionClient.js +122 -0
  65. package/dist/extraction/factExtractor.js +46 -0
  66. package/dist/extraction/factsWritePath.js +179 -0
  67. package/dist/extraction/preferenceExtractor.js +153 -0
  68. package/dist/extraction/secretGuard.js +176 -0
  69. package/dist/extraction/secretScanner.js +665 -0
  70. package/dist/extraction/typedFacts.js +224 -0
  71. package/dist/extraction/writePathAdjudication.js +110 -0
  72. package/dist/importing/apply.js +644 -0
  73. package/dist/importing/bundle-write.js +80 -0
  74. package/dist/importing/cli.js +407 -0
  75. package/dist/importing/existing.js +49 -0
  76. package/dist/importing/facts.js +123 -0
  77. package/dist/importing/forgetImported.js +79 -0
  78. package/dist/importing/hosted.js +467 -0
  79. package/dist/importing/index.js +29 -0
  80. package/dist/importing/journalLog.js +96 -0
  81. package/dist/importing/markdown.js +98 -0
  82. package/dist/importing/plan.js +206 -0
  83. package/dist/importing/secretScreen.js +113 -0
  84. package/dist/importing/serialize.js +188 -0
  85. package/dist/importing/source.js +463 -0
  86. package/dist/importing/types.js +6 -0
  87. package/dist/indexer/chunker.js +319 -0
  88. package/dist/indexer/dailyEntries.js +63 -0
  89. package/dist/indexer/hasher.js +10 -0
  90. package/dist/indexer/laneRuns.js +48 -0
  91. package/dist/indexer/o200k.js +481 -0
  92. package/dist/indexer/o200k.json +8 -0
  93. package/dist/indexer/outsideRoot.js +77 -0
  94. package/dist/indexer/parser.js +167 -0
  95. package/dist/indexer/pipeline.js +1168 -0
  96. package/dist/indexer/staleness.js +201 -0
  97. package/dist/indexer/tokenizer.js +77 -0
  98. package/dist/indexer/walker.js +184 -0
  99. package/dist/mcp/hive.js +88 -0
  100. package/dist/mcp/requestErrors.js +47 -0
  101. package/dist/mcp/server.js +396 -0
  102. package/dist/memory/agentLease.js +43 -0
  103. package/dist/memory/confinedWrite.js +315 -0
  104. package/dist/memory/controls.js +73 -0
  105. package/dist/memory/dailyNote.js +265 -0
  106. package/dist/memory/durableAppend.js +57 -0
  107. package/dist/memory/factConflicts.js +203 -0
  108. package/dist/memory/factTerms.js +321 -0
  109. package/dist/memory/hiveNameHeader.cjs +10 -0
  110. package/dist/memory/inventory.js +55 -0
  111. package/dist/memory/invisibleText.js +20 -0
  112. package/dist/memory/lifecycle.js +1756 -0
  113. package/dist/memory/limits.js +13 -0
  114. package/dist/memory/requests.js +183 -0
  115. package/dist/memory/sourceName.js +200 -0
  116. package/dist/memory/whatsNew.js +158 -0
  117. package/dist/memory/writer.js +175 -0
  118. package/dist/memory/writerConflicts.js +85 -0
  119. package/dist/memorymap/memoryMap.js +1568 -0
  120. package/dist/memorymap/replacedJournal.js +58 -0
  121. package/dist/memorymap/replacements.js +405 -0
  122. package/dist/mvp/activity.js +86 -0
  123. package/dist/mvp/agentMemory.js +1744 -0
  124. package/dist/mvp/auth.js +531 -0
  125. package/dist/mvp/cli.js +73 -0
  126. package/dist/mvp/client-store.js +462 -0
  127. package/dist/mvp/compileCache.js +249 -0
  128. package/dist/mvp/compileSeed.js +27 -0
  129. package/dist/mvp/config.js +288 -0
  130. package/dist/mvp/connectionStatus.js +80 -0
  131. package/dist/mvp/contextRelevance.js +413 -0
  132. package/dist/mvp/engine.js +1065 -0
  133. package/dist/mvp/exportAll.js +359 -0
  134. package/dist/mvp/factLanePack.js +77 -0
  135. package/dist/mvp/factMarkers.js +49 -0
  136. package/dist/mvp/factsLane.js +203 -0
  137. package/dist/mvp/hiddenSpans.js +585 -0
  138. package/dist/mvp/history.js +413 -0
  139. package/dist/mvp/hitDates.js +31 -0
  140. package/dist/mvp/hitFloor.js +36 -0
  141. package/dist/mvp/identity.js +18 -0
  142. package/dist/mvp/idle.js +113 -0
  143. package/dist/mvp/memoryDir.js +98 -0
  144. package/dist/mvp/posthogMcp.js +210 -0
  145. package/dist/mvp/readScope.js +104 -0
  146. package/dist/mvp/readUsefulness.js +222 -0
  147. package/dist/mvp/sanitize.js +48 -0
  148. package/dist/mvp/schemaRejections.js +91 -0
  149. package/dist/mvp/scope.js +127 -0
  150. package/dist/mvp/server.js +2089 -0
  151. package/dist/mvp/serverCard.js +29 -0
  152. package/dist/mvp/storedSize.js +139 -0
  153. package/dist/mvp/telemetry.js +441 -0
  154. package/dist/retrieval/adviceLines.js +195 -0
  155. package/dist/retrieval/adviceQuestion.js +44 -0
  156. package/dist/retrieval/conversationShape.js +44 -0
  157. package/dist/retrieval/dailyEntryTime.js +55 -0
  158. package/dist/retrieval/entityLookup.js +113 -0
  159. package/dist/retrieval/factsFirst.js +188 -0
  160. package/dist/retrieval/keyword.js +84 -0
  161. package/dist/retrieval/ledgerEventTime.js +51 -0
  162. package/dist/retrieval/ledgerLiveness.js +83 -0
  163. package/dist/retrieval/ledgerPresentation.js +161 -0
  164. package/dist/retrieval/noteIdentity.js +57 -0
  165. package/dist/retrieval/orchestrator.js +1086 -0
  166. package/dist/retrieval/queryHelpers.js +142 -0
  167. package/dist/retrieval/questionSpan.js +475 -0
  168. package/dist/retrieval/readerEvents.js +690 -0
  169. package/dist/retrieval/readerLayout.js +503 -0
  170. package/dist/retrieval/relativeTimeHints.js +113 -0
  171. package/dist/retrieval/semantic.js +67 -0
  172. package/dist/router/routerCache.js +106 -0
  173. package/dist/router/sessionRouter.js +726 -0
  174. package/dist/toolRefusal.js +120 -0
  175. package/dist/watcher/watcher.js +75 -0
  176. package/package.json +120 -4
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ /**
3
+ * Why an MCP tool refused a call: a CLOSED set of short, stable snake_case codes, one per refusal a caller
4
+ * can act on.
5
+ *
6
+ * Every failed tool call used to reach telemetry as `error_kind: "other"`, so one user's day read as "13 of
7
+ * 152 calls failed" with nothing to act on: no way to tell an over-long statement from an unknown memory id
8
+ * from a path that escapes the vault. `error_kind` says how the call ended (it is a dashboard field and its
9
+ * values never change); this says why it was refused, next to it, as `error_reason`.
10
+ *
11
+ * The rules this file exists to keep:
12
+ *
13
+ * - A code is a FIXED LITERAL from the list below. Nothing here is ever built from an argument, a statement,
14
+ * a file, an exception message or a path, so no code can carry what the user said or wrote.
15
+ * - The list is closed: `isToolErrorReason` is the only way a code reaches telemetry, so a free-form string
16
+ * (an exception message, say) is dropped rather than logged.
17
+ * - Refusal sites name their code where the refusal is decided, and the code travels out of band — in a
18
+ * WeakMap beside the thrown error, or beside a refusal result the tool builds itself — instead of being
19
+ * parsed back out of a message or added as a property. The error keeps the class, `name` and keys it had
20
+ * before; the message still goes to the agent; the code never leaves this vocabulary.
21
+ * - Anything with no better code gets `refused`; an unexpected throw gets `internal`.
22
+ */
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.TOOL_ERROR_REASONS = void 0;
25
+ exports.isToolErrorReason = isToolErrorReason;
26
+ exports.refusal = refusal;
27
+ exports.markErrorReason = markErrorReason;
28
+ exports.refusalReason = refusalReason;
29
+ exports.markToolRefusal = markToolRefusal;
30
+ exports.toolRefusalOf = toolRefusalOf;
31
+ exports.TOOL_ERROR_REASONS = [
32
+ /** An unexpected throw: a defect, not a refusal. */
33
+ 'internal',
34
+ /** A refusal with no more specific code in this set. */
35
+ 'refused',
36
+ /** A required argument was absent or empty. */
37
+ 'missing_argument',
38
+ /** An argument was present but unusable as sent. */
39
+ 'invalid_argument',
40
+ /** A scope was not `global`, `scope:<slug>` or `project:<slug>`. */
41
+ 'invalid_scope',
42
+ /** A field was longer than the bound that stores it (memory/limits.ts, lifecycle FIELD_LIMITS). */
43
+ 'field_too_long',
44
+ /** Text that cannot be stored or framed as text: control characters, an unpaired surrogate, a NUL byte. */
45
+ 'invalid_text',
46
+ /** A path that escapes the memory directory, hides a segment, crosses a symlink, or is not a memory. */
47
+ 'unsafe_path',
48
+ /** The memory id named nothing (it may have been retired). */
49
+ 'memory_not_found',
50
+ /** That memory was already retired. */
51
+ 'memory_already_retired',
52
+ /** A restore would overwrite a file that now occupies the path. */
53
+ 'restore_conflict',
54
+ /** A write would take counted Markdown over the workspace plan ceiling. */
55
+ 'storage_limit',
56
+ /** An import batch or preview is unknown or has expired. */
57
+ 'batch_not_found',
58
+ /** The batch was already applied, failed or undone; it cannot be applied again. */
59
+ 'batch_already_applied',
60
+ /** The batch was larger than the import byte bounds allow. */
61
+ 'import_too_large',
62
+ /** A file the import would not admit (not a Markdown file). */
63
+ 'unsupported_import_format',
64
+ /** The batch named the same relative path twice. */
65
+ 'duplicate_import_path',
66
+ /** Too many previews are pending in this workspace; apply or wait for one to expire. */
67
+ 'too_many_previews',
68
+ /** The deployment cannot answer this way right now (no semantic search, no keyword index, no history). */
69
+ 'capability_unavailable',
70
+ /** The same, while the index is being rebuilt: it answers again once that finishes. */
71
+ 'capability_rebuilding',
72
+ /** A search query the keyword index could not read as a query. */
73
+ 'invalid_query',
74
+ ];
75
+ /** The only gate a code passes to reach telemetry: membership in the closed set, nothing else. */
76
+ function isToolErrorReason(value) {
77
+ return typeof value === 'string' && exports.TOOL_ERROR_REASONS.includes(value);
78
+ }
79
+ /**
80
+ * The code an error carries, out of band: a WeakMap leaves no property to serialize, so the error keeps the
81
+ * identity it had before this vocabulary existed — its class, `name`, `message` and enumerable keys — and the
82
+ * code reaches telemetry only. Nothing about `String(err)`, a log line or an `instanceof` check changes.
83
+ */
84
+ const errorReasons = new WeakMap();
85
+ /**
86
+ * Shorthand for the refusal sites: `throw refusal('invalid_scope', '…')`. The error is a PLAIN `Error`, exactly
87
+ * what the site threw before; only the message (unchanged) and the out-of-band code are kept.
88
+ */
89
+ function refusal(reason, message) {
90
+ return markErrorReason(new Error(message), reason);
91
+ }
92
+ /** Records the code an error carries, out of band. Used by `refusal` and by an error class that names its own. */
93
+ function markErrorReason(err, reason) {
94
+ errorReasons.set(err, reason);
95
+ return err;
96
+ }
97
+ /**
98
+ * The code an error carries, or undefined when it carries none.
99
+ *
100
+ * Read from the out-of-band WeakMap rather than a property, so an error class that already exists
101
+ * (LifecycleInputError, say) names its code without gaining a field and without losing its own identity to the
102
+ * callers that check `instanceof` — and no error ever grows a `reason` key a reply or a log line could show.
103
+ */
104
+ function refusalReason(err) {
105
+ return err instanceof Error ? errorReasons.get(err) : undefined;
106
+ }
107
+ /**
108
+ * A tool result built by a refusal path carries its code here, beside the result and never inside it: a
109
+ * WeakMap leaves no property to serialize, so the code cannot ride out to the agent, into a log line or into
110
+ * a remote sink by accident. The tool wrapper reads it and the code goes to telemetry only.
111
+ */
112
+ const reasons = new WeakMap();
113
+ function markToolRefusal(result, reason) {
114
+ reasons.set(result, reason);
115
+ return result;
116
+ }
117
+ /** The code a refusal result carries, if any. */
118
+ function toolRefusalOf(result) {
119
+ return result !== null && typeof result === 'object' ? reasons.get(result) : undefined;
120
+ }
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.startWatcher = startWatcher;
7
+ const chokidar_1 = __importDefault(require("chokidar"));
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const pipeline_1 = require("../indexer/pipeline");
11
+ function loadIgnorePatterns(vaultPath) {
12
+ try {
13
+ const raw = fs_1.default.readFileSync(path_1.default.join(vaultPath, '.semanticignore'), 'utf8');
14
+ return raw.split('\n').map(l => l.trim()).filter(l => l && !l.startsWith('#'));
15
+ }
16
+ catch {
17
+ return [];
18
+ }
19
+ }
20
+ function isIgnored(filePath, vaultPath, patterns) {
21
+ const rel = path_1.default.relative(vaultPath, filePath);
22
+ return patterns.some(p => {
23
+ const clean = p.replace(/\/$/, '');
24
+ return rel === clean || rel.startsWith(clean + '/') || rel.includes('/' + clean + '/') || rel.endsWith('/' + clean);
25
+ });
26
+ }
27
+ // Below the vault, so a vault that itself sits under a folder of this name is still watched.
28
+ const WALKER_SKIPS = /(^|[\\/])(\.trash|\.memory-index|node_modules)([\\/]|$)/;
29
+ function startWatcher(vaultPath, db, options = {}) {
30
+ const ignorePatterns = loadIgnorePatterns(vaultPath);
31
+ const watcher = chokidar_1.default.watch(path_1.default.join(vaultPath, '**/*.md'), {
32
+ // The walker's rules, so the watcher never indexes what an index pass would leave out (retired notes under .trash,
33
+ // node_modules), and no symbolic link: the walker never lists one, and a link in the vault must not pull in a file
34
+ // outside it.
35
+ ignored: [/\.obsidian/, /\.semantic-memory/, (p) => WALKER_SKIPS.test(path_1.default.relative(vaultPath, p))],
36
+ followSymlinks: false,
37
+ persistent: true,
38
+ ignoreInitial: true,
39
+ awaitWriteFinish: { stabilityThreshold: 300, pollInterval: 100 },
40
+ });
41
+ const pending = new Map();
42
+ const handle = (filePath) => {
43
+ if (isIgnored(filePath, vaultPath, ignorePatterns))
44
+ return;
45
+ // The glob reports a link to a file as the file, and a FIFO named like a note as a note; the walker lists neither.
46
+ const st = fs_1.default.lstatSync(filePath, { throwIfNoEntry: false });
47
+ if (st && !st.isFile())
48
+ return;
49
+ if (pending.has(filePath))
50
+ clearTimeout(pending.get(filePath));
51
+ pending.set(filePath, setTimeout(async () => {
52
+ pending.delete(filePath);
53
+ try {
54
+ await (0, pipeline_1.indexFile)(db, filePath, options);
55
+ console.log(`[watcher] indexed: ${filePath}`);
56
+ }
57
+ catch (err) {
58
+ console.error(`[watcher] error:`, err);
59
+ }
60
+ }, 500));
61
+ };
62
+ watcher
63
+ .on('add', handle)
64
+ .on('change', handle)
65
+ .on('unlink', (filePath) => {
66
+ if (isIgnored(filePath, vaultPath, ignorePatterns))
67
+ return;
68
+ db.transaction(() => {
69
+ db.prepare('DELETE FROM relations WHERE source_note = ?').run(filePath);
70
+ db.prepare('DELETE FROM notes WHERE path = ?').run(filePath);
71
+ })();
72
+ console.log(`[watcher] removed: ${filePath}`);
73
+ });
74
+ return watcher;
75
+ }
package/package.json CHANGED
@@ -1,6 +1,122 @@
1
1
  {
2
2
  "name": "renor-engine",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "1.0.0",
4
+ "description": "Local-first semantic memory — indexing, multi-signal retrieval, MCP",
5
+ "main": "dist/cli.js",
6
+ "files": [
7
+ "dist",
8
+ "README.md",
9
+ "LICENSE",
10
+ "NOTICE"
11
+ ],
12
+ "scripts": {
13
+ "build": "tsc && node -e \"require('node:fs').copyFileSync('src/memory/hiveNameHeader.cjs', 'dist/memory/hiveNameHeader.cjs')\"",
14
+ "test": "vitest run",
15
+ "test:watch": "vitest",
16
+ "dev": "tsx src/cli.ts",
17
+ "mvp": "node dist/mvp/cli.js",
18
+ "mvp:dev": "tsx src/mvp/cli.ts",
19
+ "import:memory": "tsx src/importing/cli.ts",
20
+ "test:mvp-artifact": "node scripts/ci/verify-mvp-artifact.mjs",
21
+ "eval:typecheck": "tsc -p tsconfig.public-eval.json",
22
+ "eval:retrieval": "tsx scripts/eval/score-retrieval.ts",
23
+ "eval:renor": "tsx scripts/eval/run-renorbench.ts",
24
+ "eval:renor:hash": "tsx scripts/eval/run-renorbench.ts --provider hash",
25
+ "eval:renor:product": "tsx scripts/eval/run-renorbench-product.ts",
26
+ "eval:renor:product:hash": "tsx scripts/eval/run-renorbench-product.ts --provider hash",
27
+ "eval:renor:product:v2:hash": "tsx scripts/eval/run-renorbench-product.ts --provider hash --suite v2",
28
+ "eval:renor:product:docs:hash": "tsx scripts/eval/run-renorbench-product.ts --provider hash --suite documents",
29
+ "eval:cache": "tsx scripts/eval/eval-cache.ts",
30
+ "eval:compare": "tsx scripts/eval/compare-runs.ts",
31
+ "eval:renorbench:baseline": "tsx scripts/eval/renorbench-baseline.ts",
32
+ "eval:renor:v2:generate": "tsx scripts/eval/generate-renorbench-v2.ts --write",
33
+ "eval:renor:docs:generate": "tsx scripts/eval/generate-renorbench-docs.ts --write",
34
+ "eval:analyze": "tsx scripts/eval/analyze-failures.ts",
35
+ "eval:longmem": "tsx scripts/eval/run-longmemeval.ts",
36
+ "eval:longmem:merge": "tsx scripts/eval/merge-longmemeval-shards.ts",
37
+ "eval:longmem:qa": "tsx scripts/eval/run-longmemeval-qa.ts",
38
+ "eval:longmem:qa:score": "tsx scripts/eval/score-longmemeval-qa.ts",
39
+ "eval:longmem:product": "tsx scripts/eval/run-longmemeval-product.ts",
40
+ "eval:longmem:sessions": "tsx scripts/eval/score-longmemeval-sessions.ts",
41
+ "eval:longmem:v2": "tsx scripts/eval/run-longmemeval-v2.ts",
42
+ "eval:longmem:v2:score": "tsx scripts/eval/score-longmemeval-v2.ts",
43
+ "eval:locomo": "tsx scripts/eval/locomo/run-retrieval.ts",
44
+ "eval:locomo:score": "python3 scripts/eval/locomo/score-locomo.py",
45
+ "eval:beam": "tsx scripts/eval/beam/run-retrieval.ts",
46
+ "eval:beam:score": "tsx scripts/eval/beam/score-nuggets.ts",
47
+ "eval:convomem:run": "tsx scripts/eval/convomem/run-convomem.ts",
48
+ "eval:convomem:score": "tsx scripts/eval/convomem/score-convomem.ts",
49
+ "eval:register": "tsx scripts/eval/register-run.ts",
50
+ "eval:progress": "tsx scripts/eval/progress.ts",
51
+ "prebuild": "node scripts/ci/stamp-build.mjs",
52
+ "prepack": "npm run build"
53
+ },
54
+ "bin": {
55
+ "renor-engine": "dist/cli.js"
56
+ },
57
+ "keywords": [
58
+ "renor",
59
+ "semantic-memory",
60
+ "mcp",
61
+ "embeddings",
62
+ "knowledge-graph"
63
+ ],
64
+ "homepage": "https://renor.cloud",
65
+ "repository": {
66
+ "type": "git",
67
+ "url": "git+https://github.com/patrickpassosb/renor-engine.git"
68
+ },
69
+ "bugs": {
70
+ "url": "https://github.com/patrickpassosb/renor-engine/issues"
71
+ },
72
+ "author": "Patrick Passos",
73
+ "license": "AGPL-3.0-only",
74
+ "type": "commonjs",
75
+ "dependencies": {
76
+ "@modelcontextprotocol/sdk": "^1.31.0",
77
+ "@posthog/mcp": "0.21.0",
78
+ "better-sqlite3": "^12.8.0",
79
+ "chokidar": "^3.6.0",
80
+ "commander": "^14.0.3",
81
+ "express": "^5.2.1",
82
+ "gpt-tokenizer": "^3.4.0",
83
+ "gray-matter": "^4.0.3",
84
+ "openai": "^6.33.0",
85
+ "posthog-node": "5.54.1",
86
+ "sqlite-vec": "^0.1.8",
87
+ "zod": "^4.6.5"
88
+ },
89
+ "devDependencies": {
90
+ "@xenova/transformers": "^2.17.2",
91
+ "@types/better-sqlite3": "^7.6.13",
92
+ "@types/express": "^5.0.6",
93
+ "@types/node": "^25.9.8",
94
+ "@types/supertest": "^7.2.0",
95
+ "libpg-query": "17.7.4",
96
+ "supertest": "^7.3.0",
97
+ "tsx": "^4.23.15",
98
+ "typescript": "^6.0.2",
99
+ "vitest": "^4.1.2"
100
+ },
101
+ "peerDependencies": {
102
+ "@xenova/transformers": "^2.17.2"
103
+ },
104
+ "peerDependenciesMeta": {
105
+ "@xenova/transformers": {
106
+ "optional": true
107
+ }
108
+ },
109
+ "overrides": {
110
+ "@xenova/transformers": {
111
+ "sharp": "0.35.5",
112
+ "onnxruntime-web": {
113
+ "onnx-proto": {
114
+ "protobufjs": "7.6.6"
115
+ }
116
+ }
117
+ }
118
+ },
119
+ "engines": {
120
+ "node": ">=22 <23"
121
+ }
122
+ }