cortex-engine 0.1.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 (139) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +154 -0
  3. package/dist/bin/cli.d.ts +13 -0
  4. package/dist/bin/cli.d.ts.map +1 -0
  5. package/dist/bin/cli.js +92 -0
  6. package/dist/bin/cli.js.map +1 -0
  7. package/dist/bin/config-cmd.d.ts +12 -0
  8. package/dist/bin/config-cmd.d.ts.map +1 -0
  9. package/dist/bin/config-cmd.js +184 -0
  10. package/dist/bin/config-cmd.js.map +1 -0
  11. package/dist/bin/config-loader.d.ts +12 -0
  12. package/dist/bin/config-loader.d.ts.map +1 -0
  13. package/dist/bin/config-loader.js +42 -0
  14. package/dist/bin/config-loader.js.map +1 -0
  15. package/dist/bin/digest-cmd.d.ts +13 -0
  16. package/dist/bin/digest-cmd.d.ts.map +1 -0
  17. package/dist/bin/digest-cmd.js +286 -0
  18. package/dist/bin/digest-cmd.js.map +1 -0
  19. package/dist/bin/init.d.ts +33 -0
  20. package/dist/bin/init.d.ts.map +1 -0
  21. package/dist/bin/init.js +355 -0
  22. package/dist/bin/init.js.map +1 -0
  23. package/dist/bin/serve.d.ts +15 -0
  24. package/dist/bin/serve.d.ts.map +1 -0
  25. package/dist/bin/serve.js +21 -0
  26. package/dist/bin/serve.js.map +1 -0
  27. package/dist/bridges/bridge.d.ts +46 -0
  28. package/dist/bridges/bridge.d.ts.map +1 -0
  29. package/dist/bridges/bridge.js +128 -0
  30. package/dist/bridges/bridge.js.map +1 -0
  31. package/dist/bridges/registry.d.ts +19 -0
  32. package/dist/bridges/registry.d.ts.map +1 -0
  33. package/dist/bridges/registry.js +36 -0
  34. package/dist/bridges/registry.js.map +1 -0
  35. package/dist/core/config.d.ts +108 -0
  36. package/dist/core/config.d.ts.map +1 -0
  37. package/dist/core/config.js +29 -0
  38. package/dist/core/config.js.map +1 -0
  39. package/dist/core/embed.d.ts +16 -0
  40. package/dist/core/embed.d.ts.map +1 -0
  41. package/dist/core/embed.js +7 -0
  42. package/dist/core/embed.js.map +1 -0
  43. package/dist/core/llm.d.ts +31 -0
  44. package/dist/core/llm.d.ts.map +1 -0
  45. package/dist/core/llm.js +13 -0
  46. package/dist/core/llm.js.map +1 -0
  47. package/dist/core/nli.d.ts +26 -0
  48. package/dist/core/nli.d.ts.map +1 -0
  49. package/dist/core/nli.js +11 -0
  50. package/dist/core/nli.js.map +1 -0
  51. package/dist/core/session.d.ts +26 -0
  52. package/dist/core/session.d.ts.map +1 -0
  53. package/dist/core/session.js +71 -0
  54. package/dist/core/session.js.map +1 -0
  55. package/dist/core/store.d.ts +58 -0
  56. package/dist/core/store.d.ts.map +1 -0
  57. package/dist/core/store.js +8 -0
  58. package/dist/core/store.js.map +1 -0
  59. package/dist/core/types.d.ts +148 -0
  60. package/dist/core/types.d.ts.map +1 -0
  61. package/dist/core/types.js +8 -0
  62. package/dist/core/types.js.map +1 -0
  63. package/dist/engines/cognition.d.ts +76 -0
  64. package/dist/engines/cognition.d.ts.map +1 -0
  65. package/dist/engines/cognition.js +441 -0
  66. package/dist/engines/cognition.js.map +1 -0
  67. package/dist/engines/digest.d.ts +52 -0
  68. package/dist/engines/digest.d.ts.map +1 -0
  69. package/dist/engines/digest.js +351 -0
  70. package/dist/engines/digest.js.map +1 -0
  71. package/dist/engines/fsrs.d.ts +44 -0
  72. package/dist/engines/fsrs.d.ts.map +1 -0
  73. package/dist/engines/fsrs.js +122 -0
  74. package/dist/engines/fsrs.js.map +1 -0
  75. package/dist/engines/keywords.d.ts +12 -0
  76. package/dist/engines/keywords.d.ts.map +1 -0
  77. package/dist/engines/keywords.js +45 -0
  78. package/dist/engines/keywords.js.map +1 -0
  79. package/dist/engines/memory.d.ts +55 -0
  80. package/dist/engines/memory.d.ts.map +1 -0
  81. package/dist/engines/memory.js +147 -0
  82. package/dist/engines/memory.js.map +1 -0
  83. package/dist/index.d.ts +42 -0
  84. package/dist/index.d.ts.map +1 -0
  85. package/dist/index.js +38 -0
  86. package/dist/index.js.map +1 -0
  87. package/dist/mcp/server.d.ts +12 -0
  88. package/dist/mcp/server.d.ts.map +1 -0
  89. package/dist/mcp/server.js +173 -0
  90. package/dist/mcp/server.js.map +1 -0
  91. package/dist/mcp/tools.d.ts +45 -0
  92. package/dist/mcp/tools.d.ts.map +1 -0
  93. package/dist/mcp/tools.js +814 -0
  94. package/dist/mcp/tools.js.map +1 -0
  95. package/dist/namespace/manager.d.ts +28 -0
  96. package/dist/namespace/manager.d.ts.map +1 -0
  97. package/dist/namespace/manager.js +73 -0
  98. package/dist/namespace/manager.js.map +1 -0
  99. package/dist/namespace/scoped-store.d.ts +43 -0
  100. package/dist/namespace/scoped-store.d.ts.map +1 -0
  101. package/dist/namespace/scoped-store.js +91 -0
  102. package/dist/namespace/scoped-store.js.map +1 -0
  103. package/dist/plugins/loader.d.ts +18 -0
  104. package/dist/plugins/loader.d.ts.map +1 -0
  105. package/dist/plugins/loader.js +71 -0
  106. package/dist/plugins/loader.js.map +1 -0
  107. package/dist/providers/nli-http.d.ts +34 -0
  108. package/dist/providers/nli-http.d.ts.map +1 -0
  109. package/dist/providers/nli-http.js +83 -0
  110. package/dist/providers/nli-http.js.map +1 -0
  111. package/dist/providers/ollama.d.ts +37 -0
  112. package/dist/providers/ollama.d.ts.map +1 -0
  113. package/dist/providers/ollama.js +103 -0
  114. package/dist/providers/ollama.js.map +1 -0
  115. package/dist/providers/vertex-embed.d.ts +38 -0
  116. package/dist/providers/vertex-embed.d.ts.map +1 -0
  117. package/dist/providers/vertex-embed.js +69 -0
  118. package/dist/providers/vertex-embed.js.map +1 -0
  119. package/dist/providers/vertex-llm.d.ts +25 -0
  120. package/dist/providers/vertex-llm.d.ts.map +1 -0
  121. package/dist/providers/vertex-llm.js +75 -0
  122. package/dist/providers/vertex-llm.js.map +1 -0
  123. package/dist/stores/firestore.d.ts +59 -0
  124. package/dist/stores/firestore.d.ts.map +1 -0
  125. package/dist/stores/firestore.js +530 -0
  126. package/dist/stores/firestore.js.map +1 -0
  127. package/dist/stores/sqlite.d.ts +43 -0
  128. package/dist/stores/sqlite.d.ts.map +1 -0
  129. package/dist/stores/sqlite.js +593 -0
  130. package/dist/stores/sqlite.js.map +1 -0
  131. package/dist/triggers/pipeline.d.ts +21 -0
  132. package/dist/triggers/pipeline.d.ts.map +1 -0
  133. package/dist/triggers/pipeline.js +30 -0
  134. package/dist/triggers/pipeline.js.map +1 -0
  135. package/dist/triggers/registry.d.ts +17 -0
  136. package/dist/triggers/registry.d.ts.map +1 -0
  137. package/dist/triggers/registry.js +32 -0
  138. package/dist/triggers/registry.js.map +1 -0
  139. package/package.json +94 -0
@@ -0,0 +1,355 @@
1
+ /**
2
+ * init.ts — cortex-kit init command.
3
+ *
4
+ * Scaffolds a new agent workspace with cortex-engine configuration.
5
+ *
6
+ * Usage:
7
+ * cortex-kit init <name> [options]
8
+ * cortex-kit init --here [options]
9
+ *
10
+ * Options:
11
+ * --store sqlite|firestore Storage backend (default: sqlite)
12
+ * --embed ollama|vertex|openai Embedding provider (default: ollama)
13
+ * --llm ollama|gemini|anthropic|openai LLM provider (default: ollama)
14
+ * --namespace <name> Default namespace name (default: default)
15
+ * --here Scaffold into current directory instead of creating <name>/
16
+ * --obsidian Create .obsidian/ structure
17
+ */
18
+ import { mkdirSync, writeFileSync, existsSync, readFileSync, cpSync, readdirSync, chmodSync } from 'node:fs';
19
+ import { resolve, join, dirname } from 'node:path';
20
+ import { fileURLToPath } from 'node:url';
21
+ // ─── Arg Parsing ───────────────────────────────────────────────────────────
22
+ export function parseInitArgs(args) {
23
+ const opts = {
24
+ name: '',
25
+ store: 'sqlite',
26
+ embed: 'ollama',
27
+ llm: 'ollama',
28
+ namespace: 'default',
29
+ here: false,
30
+ obsidian: false,
31
+ };
32
+ let i = 0;
33
+ while (i < args.length) {
34
+ const arg = args[i];
35
+ if (arg === '--here') {
36
+ opts.here = true;
37
+ }
38
+ else if (arg === '--obsidian') {
39
+ opts.obsidian = true;
40
+ }
41
+ else if (arg === '--store') {
42
+ const val = args[++i];
43
+ if (val !== 'sqlite' && val !== 'firestore') {
44
+ console.error(`[cortex-kit] Invalid --store value: ${val}. Must be sqlite or firestore.`);
45
+ return null;
46
+ }
47
+ opts.store = val;
48
+ }
49
+ else if (arg === '--embed') {
50
+ const val = args[++i];
51
+ if (val !== 'ollama' && val !== 'vertex' && val !== 'openai') {
52
+ console.error(`[cortex-kit] Invalid --embed value: ${val}. Must be ollama, vertex, or openai.`);
53
+ return null;
54
+ }
55
+ opts.embed = val;
56
+ }
57
+ else if (arg === '--llm') {
58
+ const val = args[++i];
59
+ if (val !== 'ollama' && val !== 'gemini' && val !== 'anthropic' && val !== 'openai') {
60
+ console.error(`[cortex-kit] Invalid --llm value: ${val}. Must be ollama, gemini, anthropic, or openai.`);
61
+ return null;
62
+ }
63
+ opts.llm = val;
64
+ }
65
+ else if (arg === '--namespace') {
66
+ opts.namespace = args[++i] ?? 'default';
67
+ }
68
+ else if (!arg.startsWith('--')) {
69
+ opts.name = arg;
70
+ }
71
+ else {
72
+ console.error(`[cortex-kit] Unknown option: ${arg}`);
73
+ return null;
74
+ }
75
+ i++;
76
+ }
77
+ if (!opts.here && !opts.name) {
78
+ console.error('[cortex-kit] init requires a name argument or --here flag.');
79
+ console.error(' Usage: cortex-kit init <name>');
80
+ console.error(' cortex-kit init --here');
81
+ return null;
82
+ }
83
+ // When --here, derive name from current directory
84
+ if (opts.here && !opts.name) {
85
+ opts.name = process.cwd().split(/[\\/]/).pop() ?? 'agent';
86
+ }
87
+ return opts;
88
+ }
89
+ // ─── Templates ─────────────────────────────────────────────────────────────
90
+ function buildConfigYaml(opts) {
91
+ return `agent:
92
+ name: ${opts.name}
93
+ type: general
94
+
95
+ cortex:
96
+ store: ${opts.store}
97
+ embed: ${opts.embed}
98
+ llm: ${opts.llm}
99
+
100
+ namespaces:
101
+ ${opts.namespace}:
102
+ default: true
103
+ description: "Default namespace"
104
+ cognitive_tools:
105
+ - observe
106
+ - query
107
+ - recall
108
+ - neighbors
109
+ - predict
110
+ - reflect
111
+ - dream
112
+ collections_prefix: ""
113
+ `;
114
+ }
115
+ const MCP_JSON = `{
116
+ "mcpServers": {
117
+ "cortex": {
118
+ "command": "npx",
119
+ "args": ["cortex-engine"]
120
+ }
121
+ }
122
+ }
123
+ `;
124
+ const COGNITIVE_TOOLS_REFERENCE = `# Cognitive Tools
125
+
126
+ This workspace uses cortex-engine for persistent memory and cognition.
127
+
128
+ ## Available Tools
129
+
130
+ | Tool | What it does |
131
+ |------|-------------|
132
+ | \`observe\` | Record an observation — cortex decides if it's novel, similar, or duplicate |
133
+ | \`query\` | Semantic search across memory with HyDE expansion |
134
+ | \`recall\` | Browse recent observations and memories by time |
135
+ | \`neighbors\` | Explore the memory graph from a specific concept |
136
+ | \`predict\` | Proactive retrieval — what's relevant given current context |
137
+ | \`validate\` | Check a prediction against an outcome (FSRS learning) |
138
+ | \`believe\` | Record a belief change with reason tracking |
139
+ | \`reflect\` | Generate reflective insights connecting observations |
140
+ | \`dream\` | Run consolidation — cluster, refine, create, connect, score, abstract |
141
+ | \`digest\` | Process a document through the ingestion pipeline |
142
+ | \`stats\` | Memory counts and namespace health |
143
+ | \`ops_append\` | Log operational breadcrumbs |
144
+ | \`ops_query\` | Query the operational log |
145
+ | \`ops_update\` | Update an ops entry |
146
+ | \`wander\` | Random graph walk for serendipitous discovery |
147
+
148
+ ## Usage Pattern
149
+
150
+ Before working on any topic, query cortex first:
151
+ \`\`\`
152
+ query("the topic you're working on")
153
+ \`\`\`
154
+
155
+ When you learn something interesting:
156
+ \`\`\`
157
+ observe("what you noticed")
158
+ \`\`\`
159
+
160
+ At session end, run dream to consolidate:
161
+ \`\`\`
162
+ dream()
163
+ \`\`\`
164
+
165
+ ## Installed Hooks
166
+
167
+ Cortex-kit hooks are installed in \`.claude/hooks/\`. They fire automatically:
168
+
169
+ - **cognitive-grounding** — reminds you to \`query()\` before evaluation/design/review work
170
+ - **observe-first** — warns before writing to memory directories without \`observe()\`/\`query()\`
171
+ - **cortex-telemetry** — tracks retrieval patterns for quality feedback
172
+ - **session-lifecycle** — resets session state on startup
173
+ - **project-board-gate** — gates \`git push\` on board updates (configure via \`.claude/state/project-boards.json\`)
174
+
175
+ To disable any hook, delete its \`.sh\` file from \`.claude/hooks/\`.
176
+
177
+ ## Installed Skills
178
+
179
+ - **/cortex-query** — best practices for querying cortex memory
180
+ - **/cortex-review** — structured review workflow grounded in cortex context
181
+ `;
182
+ const OBSIDIAN_APP_JSON = `{
183
+ "legacyEditor": false,
184
+ "livePreview": true,
185
+ "defaultViewMode": "source",
186
+ "vimMode": false
187
+ }
188
+ `;
189
+ const OBSIDIAN_APPEARANCE_JSON = `{
190
+ "theme": "obsidian"
191
+ }
192
+ `;
193
+ // ─── Manifest & Asset Installation ────────────────────────────────────────
194
+ /** Resolve the package root (where cortex-kit.json lives). */
195
+ function getPackageRoot() {
196
+ const thisFile = fileURLToPath(import.meta.url);
197
+ // dist/bin/init.js → package root (two levels up)
198
+ return resolve(dirname(thisFile), '..', '..');
199
+ }
200
+ function loadManifest(packageRoot) {
201
+ const manifestPath = join(packageRoot, 'cortex-kit.json');
202
+ if (!existsSync(manifestPath)) {
203
+ console.error('[cortex-kit] Warning: cortex-kit.json not found — skipping hook/skill installation.');
204
+ return null;
205
+ }
206
+ try {
207
+ return JSON.parse(readFileSync(manifestPath, 'utf-8'));
208
+ }
209
+ catch (err) {
210
+ const msg = err instanceof Error ? err.message : String(err);
211
+ console.error(`[cortex-kit] Warning: Failed to parse cortex-kit.json: ${msg} — skipping hook/skill installation.`);
212
+ return null;
213
+ }
214
+ }
215
+ function installHooks(packageRoot, targetDir, hooks) {
216
+ const sourceDir = join(packageRoot, 'hooks');
217
+ const destDir = join(targetDir, '.claude', 'hooks');
218
+ const installed = [];
219
+ if (!existsSync(sourceDir)) {
220
+ console.error('[cortex-kit] Warning: hooks/ directory not found in package — skipping hook installation.');
221
+ return installed;
222
+ }
223
+ mkdirSync(destDir, { recursive: true });
224
+ for (const hook of hooks) {
225
+ const hookFile = `${hook}.sh`;
226
+ const src = join(sourceDir, hookFile);
227
+ if (!existsSync(src)) {
228
+ console.error(`[cortex-kit] Warning: hook not found: ${hookFile} — skipping.`);
229
+ continue;
230
+ }
231
+ const dest = join(destDir, hookFile);
232
+ cpSync(src, dest);
233
+ // Set execute bit on Unix (no-op failure on Windows is fine)
234
+ try {
235
+ chmodSync(dest, 0o755);
236
+ }
237
+ catch { /* Windows — no execute bit */ }
238
+ installed.push(hookFile);
239
+ }
240
+ return installed;
241
+ }
242
+ function installSkills(packageRoot, targetDir, skills) {
243
+ const sourceDir = join(packageRoot, 'skills');
244
+ const destDir = join(targetDir, '.claude', 'skills');
245
+ const installed = [];
246
+ if (!existsSync(sourceDir)) {
247
+ console.error('[cortex-kit] Warning: skills/ directory not found in package — skipping skill installation.');
248
+ return installed;
249
+ }
250
+ mkdirSync(destDir, { recursive: true });
251
+ for (const skill of skills) {
252
+ const src = join(sourceDir, skill);
253
+ if (!existsSync(src)) {
254
+ console.error(`[cortex-kit] Warning: skill not found: ${skill}/ — skipping.`);
255
+ continue;
256
+ }
257
+ const dest = join(destDir, skill);
258
+ mkdirSync(dest, { recursive: true });
259
+ // Copy all files in the skill directory
260
+ for (const file of readdirSync(src)) {
261
+ cpSync(join(src, file), join(dest, file));
262
+ }
263
+ installed.push(skill);
264
+ }
265
+ return installed;
266
+ }
267
+ // ─── Scaffold ──────────────────────────────────────────────────────────────
268
+ export function runInit(args) {
269
+ const opts = parseInitArgs(args);
270
+ if (!opts) {
271
+ process.exit(1);
272
+ }
273
+ const targetDir = opts.here
274
+ ? process.cwd()
275
+ : resolve(process.cwd(), opts.name);
276
+ if (!opts.here && existsSync(targetDir)) {
277
+ console.error(`[cortex-kit] Directory already exists: ${targetDir}`);
278
+ console.error(' Use --here to scaffold into the current directory.');
279
+ process.exit(1);
280
+ }
281
+ // Create target directory
282
+ mkdirSync(targetDir, { recursive: true });
283
+ // .fozikio/config.yaml
284
+ const fozikioDir = join(targetDir, '.fozikio');
285
+ mkdirSync(fozikioDir, { recursive: true });
286
+ writeFileSync(join(fozikioDir, 'config.yaml'), buildConfigYaml(opts), 'utf-8');
287
+ // .mcp.json
288
+ writeFileSync(join(targetDir, '.mcp.json'), MCP_JSON, 'utf-8');
289
+ // CLAUDE.md
290
+ writeFileSync(join(targetDir, 'CLAUDE.md'), COGNITIVE_TOOLS_REFERENCE, 'utf-8');
291
+ // AGENTS.md
292
+ writeFileSync(join(targetDir, 'AGENTS.md'), COGNITIVE_TOOLS_REFERENCE, 'utf-8');
293
+ // .obsidian/
294
+ if (opts.obsidian) {
295
+ const obsidianDir = join(targetDir, '.obsidian');
296
+ mkdirSync(obsidianDir, { recursive: true });
297
+ writeFileSync(join(obsidianDir, 'app.json'), OBSIDIAN_APP_JSON, 'utf-8');
298
+ writeFileSync(join(obsidianDir, 'appearance.json'), OBSIDIAN_APPEARANCE_JSON, 'utf-8');
299
+ }
300
+ // Install hooks and skills from manifest
301
+ const packageRoot = getPackageRoot();
302
+ const manifest = loadManifest(packageRoot);
303
+ const installedHooks = [];
304
+ const installedSkills = [];
305
+ let hasHookifyRules = false;
306
+ if (manifest?.contents) {
307
+ if (manifest.contents.hooks && manifest.contents.hooks.length > 0) {
308
+ installedHooks.push(...installHooks(packageRoot, targetDir, manifest.contents.hooks));
309
+ }
310
+ if (manifest.contents.skills && manifest.contents.skills.length > 0) {
311
+ installedSkills.push(...installSkills(packageRoot, targetDir, manifest.contents.skills));
312
+ }
313
+ hasHookifyRules = (manifest.contents.hookify_rules ?? []).length > 0;
314
+ }
315
+ // Success message
316
+ const relativePath = opts.here ? '.' : opts.name;
317
+ console.error(`[cortex-kit] Workspace scaffolded at: ${targetDir}`);
318
+ console.error('');
319
+ console.error('Files created:');
320
+ console.error(` ${relativePath}/.fozikio/config.yaml`);
321
+ console.error(` ${relativePath}/.mcp.json`);
322
+ console.error(` ${relativePath}/CLAUDE.md`);
323
+ console.error(` ${relativePath}/AGENTS.md`);
324
+ if (opts.obsidian) {
325
+ console.error(` ${relativePath}/.obsidian/app.json`);
326
+ console.error(` ${relativePath}/.obsidian/appearance.json`);
327
+ }
328
+ if (installedHooks.length > 0) {
329
+ console.error('');
330
+ console.error('Hooks installed:');
331
+ for (const hook of installedHooks) {
332
+ console.error(` ${relativePath}/.claude/hooks/${hook}`);
333
+ }
334
+ }
335
+ if (installedSkills.length > 0) {
336
+ console.error('');
337
+ console.error('Skills installed:');
338
+ for (const skill of installedSkills) {
339
+ console.error(` ${relativePath}/.claude/skills/${skill}/`);
340
+ }
341
+ }
342
+ if (hasHookifyRules) {
343
+ console.error('');
344
+ console.error('Recommended hookify rules available. Run `cortex-kit install-rules` to install.');
345
+ }
346
+ console.error('');
347
+ console.error('Next steps:');
348
+ if (!opts.here) {
349
+ console.error(` cd ${opts.name}`);
350
+ }
351
+ console.error(` # Edit .fozikio/config.yaml to configure your store and providers`);
352
+ console.error(` # Add cortex to your MCP client using .mcp.json`);
353
+ console.error(` npx cortex-engine # start the MCP server`);
354
+ }
355
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/bin/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * cortex-engine MCP server entry point.
4
+ *
5
+ * Searches for a config file in standard locations, merges with defaults,
6
+ * then starts the stdio MCP server.
7
+ *
8
+ * Config search order:
9
+ * 1. .fozikio/config.yaml (agent workspace)
10
+ * 2. cortex.config.yaml (project root)
11
+ * 3. config.yaml (project root)
12
+ * 4. defaults (sqlite + ollama)
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=serve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/bin/serve.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG"}
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * cortex-engine MCP server entry point.
4
+ *
5
+ * Searches for a config file in standard locations, merges with defaults,
6
+ * then starts the stdio MCP server.
7
+ *
8
+ * Config search order:
9
+ * 1. .fozikio/config.yaml (agent workspace)
10
+ * 2. cortex.config.yaml (project root)
11
+ * 3. config.yaml (project root)
12
+ * 4. defaults (sqlite + ollama)
13
+ */
14
+ import { loadConfig } from './config-loader.js';
15
+ import { startServer } from '../mcp/server.js';
16
+ const config = loadConfig();
17
+ startServer(config).catch(err => {
18
+ console.error('[cortex-engine] Fatal error:', err);
19
+ process.exit(1);
20
+ });
21
+ //# sourceMappingURL=serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/bin/serve.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;AAE5B,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;IAC9B,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC;IACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,46 @@
1
+ import type { ResolvedBridgeRule } from './registry.js';
2
+ export interface BridgeContext {
3
+ /** Current bridge chain depth (0 = top-level event, 1 = first bridge, etc.) */
4
+ depth: number;
5
+ /** Source namespace that triggered this bridge */
6
+ sourceNamespace: string;
7
+ /** Bridge name for audit trail */
8
+ bridgeName: string;
9
+ }
10
+ export interface BridgeResult {
11
+ bridgeName: string;
12
+ from: string;
13
+ to: string;
14
+ event: string;
15
+ status: 'executed' | 'skipped_condition' | 'skipped_depth' | 'failed';
16
+ error?: string;
17
+ }
18
+ /**
19
+ * Evaluate a simple condition expression against a result object.
20
+ * Supports: field > value, field < value, field == value, field != value
21
+ *
22
+ * Examples:
23
+ * "confidence > 0.7"
24
+ * "prediction_error > 0.7"
25
+ * "dimension == \"beliefs\""
26
+ */
27
+ export declare function evaluateCondition(condition: string, data: Record<string, unknown>): boolean;
28
+ /**
29
+ * Interpolate a template string with values from data.
30
+ * Replaces {{field}} with data[field].
31
+ *
32
+ * Example: "Prediction {{outcome}}: {{summary}}" with {outcome: "correct", summary: "BTC > 100k"}
33
+ * → "Prediction correct: BTC > 100k"
34
+ */
35
+ export declare function interpolateTemplate(template: string, data: Record<string, unknown>): string;
36
+ /**
37
+ * Check and execute bridge rules for a given event.
38
+ *
39
+ * @param rules - Bridge rules to evaluate (from BridgeRegistry.getRulesForEvent)
40
+ * @param eventData - The result data from the source event
41
+ * @param executePipeline - Callback to execute a pipeline in the target namespace
42
+ * @param context - Current bridge context (for depth tracking)
43
+ * @returns Array of bridge results
44
+ */
45
+ export declare function checkBridges(rules: ResolvedBridgeRule[], eventData: Record<string, unknown>, executePipeline: (namespace: string, text: string, metadata: Record<string, unknown>) => Promise<void>, context?: BridgeContext): Promise<BridgeResult[]>;
46
+ //# sourceMappingURL=bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/bridges/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAKxD,MAAM,WAAW,aAAa;IAC5B,+EAA+E;IAC/E,KAAK,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,eAAe,EAAE,MAAM,CAAC;IACxB,kCAAkC;IAClC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,GAAG,mBAAmB,GAAG,eAAe,GAAG,QAAQ,CAAC;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CA2B3F;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAM3F;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,kBAAkB,EAAE,EAC3B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,eAAe,EAAE,CACf,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,OAAO,CAAC,IAAI,CAAC,EAClB,OAAO,GAAE,aAAiE,GACzE,OAAO,CAAC,YAAY,EAAE,CAAC,CAgEzB"}
@@ -0,0 +1,128 @@
1
+ // Maximum bridge chain depth to prevent infinite loops (A→B→C→stop)
2
+ const MAX_BRIDGE_DEPTH = 3;
3
+ /**
4
+ * Evaluate a simple condition expression against a result object.
5
+ * Supports: field > value, field < value, field == value, field != value
6
+ *
7
+ * Examples:
8
+ * "confidence > 0.7"
9
+ * "prediction_error > 0.7"
10
+ * "dimension == \"beliefs\""
11
+ */
12
+ export function evaluateCondition(condition, data) {
13
+ // Parse: field operator value
14
+ const match = condition.match(/^\s*(\w+)\s*(==|!=|>=|<=|>|<)\s*(.+)\s*$/);
15
+ if (!match)
16
+ return false;
17
+ const [, field, op, rawValue] = match;
18
+ const actual = data[field];
19
+ if (actual === undefined)
20
+ return false;
21
+ // Parse the value — number, quoted string, or boolean
22
+ let expected;
23
+ const trimmed = rawValue.trim();
24
+ if (trimmed === 'true')
25
+ expected = true;
26
+ else if (trimmed === 'false')
27
+ expected = false;
28
+ else if (/^".*"$/.test(trimmed) || /^'.*'$/.test(trimmed))
29
+ expected = trimmed.slice(1, -1);
30
+ else if (!isNaN(Number(trimmed)))
31
+ expected = Number(trimmed);
32
+ else
33
+ expected = trimmed; // bare string
34
+ switch (op) {
35
+ case '==': return actual === expected;
36
+ case '!=': return actual !== expected;
37
+ case '>': return typeof actual === 'number' && typeof expected === 'number' && actual > expected;
38
+ case '<': return typeof actual === 'number' && typeof expected === 'number' && actual < expected;
39
+ case '>=': return typeof actual === 'number' && typeof expected === 'number' && actual >= expected;
40
+ case '<=': return typeof actual === 'number' && typeof expected === 'number' && actual <= expected;
41
+ default: return false;
42
+ }
43
+ }
44
+ /**
45
+ * Interpolate a template string with values from data.
46
+ * Replaces {{field}} with data[field].
47
+ *
48
+ * Example: "Prediction {{outcome}}: {{summary}}" with {outcome: "correct", summary: "BTC > 100k"}
49
+ * → "Prediction correct: BTC > 100k"
50
+ */
51
+ export function interpolateTemplate(template, data) {
52
+ return template.replace(/\{\{(\w+)\}\}/g, (_, key) => {
53
+ const val = data[key];
54
+ if (val === undefined || val === null)
55
+ return `{{${key}}}`;
56
+ return String(val);
57
+ });
58
+ }
59
+ /**
60
+ * Check and execute bridge rules for a given event.
61
+ *
62
+ * @param rules - Bridge rules to evaluate (from BridgeRegistry.getRulesForEvent)
63
+ * @param eventData - The result data from the source event
64
+ * @param executePipeline - Callback to execute a pipeline in the target namespace
65
+ * @param context - Current bridge context (for depth tracking)
66
+ * @returns Array of bridge results
67
+ */
68
+ export async function checkBridges(rules, eventData, executePipeline, context = { depth: 0, sourceNamespace: '', bridgeName: '' }) {
69
+ const results = [];
70
+ // Cycle detection: stop at max depth
71
+ if (context.depth >= MAX_BRIDGE_DEPTH) {
72
+ for (const rule of rules) {
73
+ results.push({
74
+ bridgeName: rule.bridgeName,
75
+ from: rule.from,
76
+ to: rule.to,
77
+ event: rule.event,
78
+ status: 'skipped_depth',
79
+ error: `Bridge depth ${context.depth} >= max ${MAX_BRIDGE_DEPTH}`,
80
+ });
81
+ }
82
+ return results;
83
+ }
84
+ for (const rule of rules) {
85
+ // Evaluate condition
86
+ if (rule.condition && !evaluateCondition(rule.condition, eventData)) {
87
+ results.push({
88
+ bridgeName: rule.bridgeName,
89
+ from: rule.from,
90
+ to: rule.to,
91
+ event: rule.event,
92
+ status: 'skipped_condition',
93
+ });
94
+ continue;
95
+ }
96
+ // Interpolate template or stringify event data
97
+ const text = rule.template
98
+ ? interpolateTemplate(rule.template, eventData)
99
+ : JSON.stringify(eventData);
100
+ try {
101
+ await executePipeline(rule.to, text, {
102
+ _bridge_source: rule.from,
103
+ _bridge_name: rule.bridgeName,
104
+ _bridge_depth: context.depth + 1,
105
+ });
106
+ results.push({
107
+ bridgeName: rule.bridgeName,
108
+ from: rule.from,
109
+ to: rule.to,
110
+ event: rule.event,
111
+ status: 'executed',
112
+ });
113
+ }
114
+ catch (err) {
115
+ const message = err instanceof Error ? err.message : String(err);
116
+ results.push({
117
+ bridgeName: rule.bridgeName,
118
+ from: rule.from,
119
+ to: rule.to,
120
+ event: rule.event,
121
+ status: 'failed',
122
+ error: message,
123
+ });
124
+ }
125
+ }
126
+ return results;
127
+ }
128
+ //# sourceMappingURL=bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/bridges/bridge.ts"],"names":[],"mappings":"AAEA,oEAAoE;AACpE,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAoB3B;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB,EAAE,IAA6B;IAChF,8BAA8B;IAC9B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC1E,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAEzB,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAEvC,sDAAsD;IACtD,IAAI,QAAiB,CAAC;IACtB,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,OAAO,KAAK,MAAM;QAAE,QAAQ,GAAG,IAAI,CAAC;SACnC,IAAI,OAAO,KAAK,OAAO;QAAE,QAAQ,GAAG,KAAK,CAAC;SAC1C,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SACtF,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAAE,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;;QACxD,QAAQ,GAAG,OAAO,CAAC,CAAC,cAAc;IAEvC,QAAQ,EAAE,EAAE,CAAC;QACX,KAAK,IAAI,CAAC,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC;QACtC,KAAK,IAAI,CAAC,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC;QACtC,KAAK,GAAG,CAAC,CAAC,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,GAAG,QAAQ,CAAC;QACjG,KAAK,GAAG,CAAC,CAAC,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,GAAG,QAAQ,CAAC;QACjG,KAAK,IAAI,CAAC,CAAC,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,IAAI,QAAQ,CAAC;QACnG,KAAK,IAAI,CAAC,CAAC,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,IAAI,QAAQ,CAAC;QACnG,OAAO,CAAC,CAAC,OAAO,KAAK,CAAC;IACxB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAgB,EAAE,IAA6B;IACjF,OAAO,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,GAAW,EAAE,EAAE;QAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,KAAK,GAAG,IAAI,CAAC;QAC3D,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,KAA2B,EAC3B,SAAkC,EAClC,eAIkB,EAClB,UAAyB,EAAE,KAAK,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;IAE1E,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,qCAAqC;IACrC,IAAI,OAAO,CAAC,KAAK,IAAI,gBAAgB,EAAE,CAAC;QACtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC;gBACX,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,eAAe;gBACvB,KAAK,EAAE,gBAAgB,OAAO,CAAC,KAAK,WAAW,gBAAgB,EAAE;aAClE,CAAC,CAAC;QACL,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,qBAAqB;QACrB,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC;gBACX,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,mBAAmB;aAC5B,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,+CAA+C;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ;YACxB,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;YAC/C,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAE9B,IAAI,CAAC;YACH,MAAM,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE;gBACnC,cAAc,EAAE,IAAI,CAAC,IAAI;gBACzB,YAAY,EAAE,IAAI,CAAC,UAAU;gBAC7B,aAAa,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC;aACjC,CAAC,CAAC;YAEH,OAAO,CAAC,IAAI,CAAC;gBACX,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,UAAU;aACnB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC;gBACX,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,OAAO;aACf,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { BridgeConfig } from '../core/config.js';
2
+ export interface ResolvedBridgeRule {
3
+ bridgeName: string;
4
+ from: string;
5
+ to: string;
6
+ event: string;
7
+ condition?: string;
8
+ pipeline: string[];
9
+ template?: string;
10
+ }
11
+ export declare class BridgeRegistry {
12
+ private readonly rules;
13
+ constructor(bridges?: BridgeConfig[]);
14
+ /** Get bridge rules triggered by event in source namespace. */
15
+ getRulesForEvent(sourceNamespace: string, event: string): ResolvedBridgeRule[];
16
+ /** Get all registered bridge names. */
17
+ getBridgeNames(): string[];
18
+ }
19
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/bridges/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgD;gBAE1D,OAAO,GAAE,YAAY,EAAO;IAoBxC,+DAA+D;IAC/D,gBAAgB,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,kBAAkB,EAAE;IAI9E,uCAAuC;IACvC,cAAc,IAAI,MAAM,EAAE;CAO3B"}
@@ -0,0 +1,36 @@
1
+ export class BridgeRegistry {
2
+ rules = new Map();
3
+ constructor(bridges = []) {
4
+ for (const bridge of bridges) {
5
+ for (const rule of bridge.on) {
6
+ const key = `${bridge.from}:${rule.event}`;
7
+ const resolved = {
8
+ bridgeName: bridge.name,
9
+ from: bridge.from,
10
+ to: bridge.to,
11
+ event: rule.event,
12
+ condition: rule.condition,
13
+ pipeline: rule.pipeline,
14
+ template: rule.template,
15
+ };
16
+ const existing = this.rules.get(key) || [];
17
+ existing.push(resolved);
18
+ this.rules.set(key, existing);
19
+ }
20
+ }
21
+ }
22
+ /** Get bridge rules triggered by event in source namespace. */
23
+ getRulesForEvent(sourceNamespace, event) {
24
+ return this.rules.get(`${sourceNamespace}:${event}`) || [];
25
+ }
26
+ /** Get all registered bridge names. */
27
+ getBridgeNames() {
28
+ const names = new Set();
29
+ for (const rules of this.rules.values()) {
30
+ for (const rule of rules)
31
+ names.add(rule.bridgeName);
32
+ }
33
+ return Array.from(names);
34
+ }
35
+ }
36
+ //# sourceMappingURL=registry.js.map