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
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright 2026 Idapixl
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,154 @@
1
+ # cortex-engine
2
+
3
+ Cognitive engine for AI agents — semantic memory, observations, embeddings, dream consolidation. Cloud Run service + MCP tools.
4
+
5
+ ## What It Does
6
+
7
+ `cortex-engine` is a portable TypeScript service that gives AI agents persistent, structured memory. It handles:
8
+
9
+ - **Semantic memory graph** — store and retrieve observations as interconnected nodes
10
+ - **Embeddings** — vector representations via pluggable providers (OpenAI, Vertex AI, Anthropic)
11
+ - **Dream consolidation** — background process that reinforces and connects memories over time
12
+ - **FSRS scheduling** — spaced-repetition scheduling for memory retention
13
+ - **MCP server** — exposes cognitive tools (`query`, `observe`, `believe`, `wander`, etc.) over the Model Context Protocol
14
+
15
+ Runs as a standalone Cloud Run service or embedded in any Node.js environment.
16
+
17
+ ## Architecture
18
+
19
+ | Module | Role |
20
+ |--------|------|
21
+ | `core` | Foundational types, config, and shared utilities |
22
+ | `engines` | Cognitive processing: memory consolidation, FSRS, graph traversal |
23
+ | `stores` | Persistence layer — SQLite (local) and Firestore (cloud) |
24
+ | `mcp` | MCP server and tool definitions |
25
+ | `cognitive` | Higher-order cognitive operations (dream, wander, validate) |
26
+ | `triggers` | Scheduled and event-driven triggers |
27
+ | `bridges` | Adapters for external services and APIs |
28
+ | `providers` | Embedding provider implementations |
29
+ | `bin` | Entry points: `serve.js` (HTTP + MCP), `cli.js` (admin CLI) |
30
+
31
+ ## Getting Started
32
+
33
+ ```bash
34
+ git clone https://github.com/fozikio/cortex-engine.git
35
+ cd cortex-engine
36
+ npm install
37
+ npm run build
38
+ npm run serve
39
+ ```
40
+
41
+ Requires Node.js 20 or later.
42
+
43
+ ### Agent-First Setup
44
+
45
+ The fastest path: open an AI agent in an empty directory and say *"set up a cortex workspace."* The agent runs `npx cortex-kit init`, reads the generated files, and is immediately productive. See **[docs/agent-first-setup.md](docs/agent-first-setup.md)** for the full guide.
46
+
47
+ ### Development
48
+
49
+ ```bash
50
+ npm run dev # tsc --watch
51
+ npm test # vitest run
52
+ npm run test:watch
53
+ ```
54
+
55
+ ## Environment Variables
56
+
57
+ | Variable | Required | Description |
58
+ |----------|----------|-------------|
59
+ | `CORTEX_API_TOKEN` | Yes | Authentication token for the HTTP API |
60
+
61
+ Additional variables are required depending on which providers you enable (Firestore, Vertex AI, OpenAI, etc.). See `docs/` for provider-specific configuration.
62
+
63
+ ## Hooks, Skills & Agents
64
+
65
+ `cortex-kit init` automatically installs hooks, skills, and agent definitions from the `cortex-kit.json` manifest into the target workspace. These live in `.claude/hooks/` and `.claude/skills/` after init.
66
+
67
+ ### Hooks
68
+
69
+ Hooks are shell scripts that integrate into Claude Code's event system. They fire automatically — no agent action required.
70
+
71
+ | Hook | Event | What It Does | Requires |
72
+ |------|-------|-------------|----------|
73
+ | `cognitive-grounding.sh` | `UserPromptSubmit` | Nudges the agent to call `query()` before evaluation, design, review, or creation work | — |
74
+ | `observe-first.sh` | `PreToolUse` (Write/Edit) | Warns if writing to Mind/, Journal/, or memory/ without calling `observe()` or `query()` first | — |
75
+ | `cortex-telemetry.sh` | `PostToolUse` | Tracks cortex retrieval calls and detects retries (2 calls within 60s), sends feedback to the cortex API | `CORTEX_API_URL`, `CORTEX_API_TOKEN` (optional) |
76
+ | `session-lifecycle.sh` | `SessionStart` | Resets session-scoped state files (telemetry log, push-gate state) | — |
77
+ | `project-board-gate.sh` | `PreToolUse` (Bash) | Blocks `git push` to tracked repos until board updates and/or ops logging are done | `.claude/state/project-boards.json` config |
78
+
79
+ **To disable a hook:** Delete the `.sh` file from `.claude/hooks/`. No other config changes needed.
80
+
81
+ **To customize project-board-gate:** Create `.claude/state/project-boards.json` with your repos and requirements:
82
+
83
+ ```json
84
+ {
85
+ "enabled": true,
86
+ "strength": "block",
87
+ "on_push": {
88
+ "require_board_update": true,
89
+ "require_ops_log": false
90
+ },
91
+ "repos": {
92
+ "my-repo": {
93
+ "board_number": 5,
94
+ "board_owner": "my-org",
95
+ "description": "My project"
96
+ }
97
+ }
98
+ }
99
+ ```
100
+
101
+ Set `"strength": "off"` to disable the gate without removing the hook.
102
+
103
+ ### Skills
104
+
105
+ Skills are invocable workflows that agents can use via `/skill-name`.
106
+
107
+ | Skill | When to Use | What It Provides |
108
+ |-------|-------------|-----------------|
109
+ | `cortex-query` | Before evaluation, review, design, or creation work | Best practices for querying cortex — specificity, keyword mode, neighbor exploration, anti-patterns |
110
+ | `cortex-review` | When reviewing code, designs, or proposals | A structured review workflow that grounds feedback in cortex memory, with a standard output format |
111
+
112
+ ### Hookify Rules
113
+
114
+ The manifest declares hookify rules — declarative hook patterns managed by the [hookify](https://github.com/fozikio/hookify) tool. These are **not** auto-installed by `cortex-kit init` (hookify needs its own setup). Init prints a reminder:
115
+
116
+ ```
117
+ Recommended hookify rules available. Run `cortex-kit install-rules` to install.
118
+ ```
119
+
120
+ | Rule | Purpose |
121
+ |------|---------|
122
+ | `cognitive-grounding` | Declarative version of the cognitive-grounding hook |
123
+ | `observe-first` | Declarative version of the observe-first hook |
124
+ | `note-about-doing` | Reminds agents to observe what they're doing as they work |
125
+
126
+ ### Agents
127
+
128
+ | Agent | Description |
129
+ |-------|-------------|
130
+ | `cortex-researcher` | Deep research agent that queries cortex before external sources, observes novel findings back into memory |
131
+
132
+ ### How Auto-Install Works
133
+
134
+ 1. `cortex-kit init` reads `cortex-kit.json` from the package root
135
+ 2. For each hook in `contents.hooks`: copies `hooks/{name}.sh` into `{workspace}/.claude/hooks/`
136
+ 3. For each skill in `contents.skills`: copies `skills/{name}/` directory into `{workspace}/.claude/skills/`
137
+ 4. If `contents.hookify_rules` is non-empty: prints a message (no interactive prompts)
138
+ 5. Missing source files are skipped with a warning — init never fails due to missing assets
139
+
140
+ ### Overriding Cortex Hooks
141
+
142
+ To override a hook's behavior without removing it:
143
+ 1. Edit the `.sh` file in your workspace's `.claude/hooks/` directly — it's a plain copy, not a symlink
144
+ 2. Re-running `cortex-kit init --here` will overwrite your changes (it copies fresh from the package)
145
+ 3. To preserve customizations across re-init, rename the hook file (hooks are matched by filename in Claude Code settings, not by the cortex-kit manifest)
146
+
147
+ ## Related Projects
148
+
149
+ - [idapixl/idapixl-cortex](https://github.com/idapixl/idapixl-cortex) — private production instance of cortex-engine, deployed on Cloud Run
150
+ - [fozikio/dashboard](https://github.com/fozikio/dashboard) — agent workspace dashboard backed by cortex-engine
151
+
152
+ ## License
153
+
154
+ MIT — see [LICENSE](LICENSE)
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * cortex-kit CLI — setup and management for cortex-engine agents.
4
+ *
5
+ * Commands:
6
+ * init <name> Scaffold a new agent workspace
7
+ * serve Start the MCP server
8
+ * config View or edit configuration
9
+ * digest Process documents through cortex
10
+ * help Show help
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG"}
@@ -0,0 +1,92 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * cortex-kit CLI — setup and management for cortex-engine agents.
4
+ *
5
+ * Commands:
6
+ * init <name> Scaffold a new agent workspace
7
+ * serve Start the MCP server
8
+ * config View or edit configuration
9
+ * digest Process documents through cortex
10
+ * help Show help
11
+ */
12
+ import { loadConfig } from './config-loader.js';
13
+ import { runInit } from './init.js';
14
+ import { runDigest } from './digest-cmd.js';
15
+ import { runConfig } from './config-cmd.js';
16
+ import { startServer } from '../mcp/server.js';
17
+ // ─── Help ──────────────────────────────────────────────────────────────────
18
+ function printHelp() {
19
+ console.error(`cortex-kit — setup and management for cortex-engine agents
20
+
21
+ Usage:
22
+ cortex-kit <command> [options]
23
+
24
+ Commands:
25
+ init <name> Scaffold a new agent workspace
26
+ serve Start the MCP server (stdio)
27
+ config View or edit configuration
28
+ digest Process documents through cortex
29
+ help Show this help message
30
+
31
+ Init options:
32
+ --store sqlite|firestore Storage backend (default: sqlite)
33
+ --embed ollama|vertex|openai Embedding provider (default: ollama)
34
+ --llm ollama|gemini|anthropic|openai LLM provider (default: ollama)
35
+ --namespace <name> Default namespace name (default: default)
36
+ --here Scaffold into current directory
37
+ --obsidian Create .obsidian/ structure
38
+
39
+ Examples:
40
+ cortex-kit init my-agent
41
+ cortex-kit init my-agent --store firestore --embed vertex --llm gemini
42
+ cortex-kit init --here --obsidian
43
+ cortex-kit serve
44
+ cortex-kit config
45
+ cortex-kit config --store sqlite --embed ollama
46
+ cortex-kit digest path/to/file.md
47
+ cortex-kit digest --pending
48
+ `);
49
+ }
50
+ // ─── Dispatch ──────────────────────────────────────────────────────────────
51
+ const [, , command, ...rest] = process.argv;
52
+ switch (command) {
53
+ case 'init':
54
+ runInit(rest);
55
+ break;
56
+ case 'serve':
57
+ (async () => {
58
+ const config = loadConfig();
59
+ await startServer(config);
60
+ })().catch(err => {
61
+ console.error('[cortex-kit] Fatal error:', err);
62
+ process.exit(1);
63
+ });
64
+ break;
65
+ case 'config':
66
+ runConfig(rest).catch(err => {
67
+ console.error('[cortex-kit] Config error:', err);
68
+ process.exit(1);
69
+ });
70
+ break;
71
+ case 'digest':
72
+ runDigest(rest).catch(err => {
73
+ console.error('[cortex-kit] Digest error:', err);
74
+ process.exit(1);
75
+ });
76
+ break;
77
+ case 'help':
78
+ case '--help':
79
+ case '-h':
80
+ printHelp();
81
+ break;
82
+ case undefined:
83
+ console.error('[cortex-kit] No command provided.\n');
84
+ printHelp();
85
+ process.exit(1);
86
+ break;
87
+ default:
88
+ console.error(`[cortex-kit] Unknown command: ${command}\n`);
89
+ printHelp();
90
+ process.exit(1);
91
+ }
92
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,8EAA8E;AAE9E,SAAS,SAAS;IAChB,OAAO,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6Bf,CAAC,CAAC;AACH,CAAC;AAED,8EAA8E;AAE9E,MAAM,CAAC,EAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;AAE3C,QAAQ,OAAO,EAAE,CAAC;IAChB,KAAK,MAAM;QACT,OAAO,CAAC,IAAI,CAAC,CAAC;QACd,MAAM;IAER,KAAK,OAAO;QACV,CAAC,KAAK,IAAI,EAAE;YACV,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,MAAM;IAER,KAAK,QAAQ;QACX,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YAC1B,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,MAAM;IAER,KAAK,QAAQ;QACX,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YAC1B,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,MAAM;IAER,KAAK,MAAM,CAAC;IACZ,KAAK,QAAQ,CAAC;IACd,KAAK,IAAI;QACP,SAAS,EAAE,CAAC;QACZ,MAAM;IAER,KAAK,SAAS;QACZ,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACrD,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,MAAM;IAER;QACE,OAAO,CAAC,KAAK,CAAC,iCAAiC,OAAO,IAAI,CAAC,CAAC;QAC5D,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * config-cmd.ts — cortex-kit config command handler.
3
+ *
4
+ * Usage:
5
+ * cortex-kit config Show current config
6
+ * cortex-kit config --store sqlite Set storage backend
7
+ * cortex-kit config --embed ollama Set embedding provider
8
+ * cortex-kit config --llm ollama Set LLM provider
9
+ * cortex-kit config --path Show config file path
10
+ */
11
+ export declare function runConfig(args: string[]): Promise<void>;
12
+ //# sourceMappingURL=config-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-cmd.d.ts","sourceRoot":"","sources":["../../src/bin/config-cmd.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAgKH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuD7D"}
@@ -0,0 +1,184 @@
1
+ /**
2
+ * config-cmd.ts — cortex-kit config command handler.
3
+ *
4
+ * Usage:
5
+ * cortex-kit config Show current config
6
+ * cortex-kit config --store sqlite Set storage backend
7
+ * cortex-kit config --embed ollama Set embedding provider
8
+ * cortex-kit config --llm ollama Set LLM provider
9
+ * cortex-kit config --path Show config file path
10
+ */
11
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
12
+ import { resolve, dirname } from 'node:path';
13
+ import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
14
+ import { loadConfig } from './config-loader.js';
15
+ import { DEFAULT_CONFIG } from '../core/config.js';
16
+ // ─── Config File Discovery ────────────────────────────────────────────────────
17
+ /**
18
+ * Find the config file path — mirrors the search order in config-loader.ts.
19
+ * Returns null if no config file exists (defaults are in use).
20
+ */
21
+ function findConfigPath(cwd = process.cwd()) {
22
+ const searchPaths = [
23
+ resolve(cwd, '.fozikio', 'config.yaml'),
24
+ resolve(cwd, 'cortex.config.yaml'),
25
+ resolve(cwd, 'config.yaml'),
26
+ ];
27
+ for (const p of searchPaths) {
28
+ if (existsSync(p))
29
+ return p;
30
+ }
31
+ return null;
32
+ }
33
+ /**
34
+ * Default write location when no config exists yet.
35
+ */
36
+ function defaultConfigPath(cwd = process.cwd()) {
37
+ return resolve(cwd, '.fozikio', 'config.yaml');
38
+ }
39
+ function readRawConfig(configPath) {
40
+ const raw = readFileSync(configPath, 'utf-8');
41
+ const parsed = parseYaml(raw);
42
+ if (!parsed || typeof parsed !== 'object') {
43
+ return {
44
+ path: configPath,
45
+ wrapped: false,
46
+ agentMeta: undefined,
47
+ cortexConfig: {},
48
+ };
49
+ }
50
+ if ('cortex' in parsed && parsed.cortex) {
51
+ const agentParsed = parsed;
52
+ return {
53
+ path: configPath,
54
+ wrapped: true,
55
+ agentMeta: agentParsed.agent,
56
+ cortexConfig: agentParsed.cortex,
57
+ };
58
+ }
59
+ return {
60
+ path: configPath,
61
+ wrapped: false,
62
+ agentMeta: undefined,
63
+ cortexConfig: parsed,
64
+ };
65
+ }
66
+ /**
67
+ * Write config back to the file, preserving agent wrapper if present.
68
+ */
69
+ function writeConfig(raw, updates) {
70
+ const merged = { ...raw.cortexConfig, ...updates };
71
+ let outObject;
72
+ if (raw.wrapped) {
73
+ outObject = {
74
+ ...(raw.agentMeta !== undefined ? { agent: raw.agentMeta } : {}),
75
+ cortex: merged,
76
+ };
77
+ }
78
+ else {
79
+ outObject = merged;
80
+ }
81
+ const yaml = stringifyYaml(outObject);
82
+ const dir = dirname(raw.path);
83
+ if (!existsSync(dir)) {
84
+ mkdirSync(dir, { recursive: true });
85
+ }
86
+ writeFileSync(raw.path, yaml, 'utf-8');
87
+ }
88
+ const VALID_STORES = ['sqlite', 'firestore'];
89
+ const VALID_EMBEDS = ['ollama', 'vertex', 'openai'];
90
+ const VALID_LLMS = ['ollama', 'gemini', 'anthropic', 'openai'];
91
+ function parseArgs(args) {
92
+ let showPath = false;
93
+ let store = null;
94
+ let embed = null;
95
+ let llm = null;
96
+ for (let i = 0; i < args.length; i++) {
97
+ const arg = args[i];
98
+ if (arg === '--path') {
99
+ showPath = true;
100
+ }
101
+ else if (arg === '--store' && args[i + 1]) {
102
+ const val = args[++i];
103
+ if (!VALID_STORES.includes(val)) {
104
+ process.stderr.write(`Error: invalid store "${val}". Valid values: ${VALID_STORES.join(', ')}\n`);
105
+ process.exit(1);
106
+ }
107
+ store = val;
108
+ }
109
+ else if (arg === '--embed' && args[i + 1]) {
110
+ const val = args[++i];
111
+ if (!VALID_EMBEDS.includes(val)) {
112
+ process.stderr.write(`Error: invalid embed provider "${val}". Valid values: ${VALID_EMBEDS.join(', ')}\n`);
113
+ process.exit(1);
114
+ }
115
+ embed = val;
116
+ }
117
+ else if (arg === '--llm' && args[i + 1]) {
118
+ const val = args[++i];
119
+ if (!VALID_LLMS.includes(val)) {
120
+ process.stderr.write(`Error: invalid LLM provider "${val}". Valid values: ${VALID_LLMS.join(', ')}\n`);
121
+ process.exit(1);
122
+ }
123
+ llm = val;
124
+ }
125
+ }
126
+ return { showPath, store, embed, llm };
127
+ }
128
+ // ─── Main Export ─────────────────────────────────────────────────────────────
129
+ export async function runConfig(args) {
130
+ const parsed = parseArgs(args);
131
+ const hasUpdates = parsed.store !== null || parsed.embed !== null || parsed.llm !== null;
132
+ // --path: just print the config file path.
133
+ if (parsed.showPath) {
134
+ const configPath = findConfigPath();
135
+ if (configPath) {
136
+ process.stdout.write(configPath + '\n');
137
+ }
138
+ else {
139
+ process.stderr.write('No config file found. Default path would be:\n');
140
+ process.stdout.write(defaultConfigPath() + '\n');
141
+ }
142
+ return;
143
+ }
144
+ // Setting flags: update config.
145
+ if (hasUpdates) {
146
+ const configPath = findConfigPath();
147
+ const targetPath = configPath ?? defaultConfigPath();
148
+ let raw;
149
+ if (configPath) {
150
+ raw = readRawConfig(configPath);
151
+ }
152
+ else {
153
+ // No config file yet — start from defaults, write to default path.
154
+ raw = {
155
+ path: targetPath,
156
+ wrapped: false,
157
+ agentMeta: undefined,
158
+ cortexConfig: { ...DEFAULT_CONFIG },
159
+ };
160
+ }
161
+ const updates = {};
162
+ if (parsed.store !== null)
163
+ updates.store = parsed.store;
164
+ if (parsed.embed !== null)
165
+ updates.embed = parsed.embed;
166
+ if (parsed.llm !== null)
167
+ updates.llm = parsed.llm;
168
+ writeConfig(raw, updates);
169
+ process.stderr.write(`Config updated: ${targetPath}\n`);
170
+ const parts = [];
171
+ if (parsed.store !== null)
172
+ parts.push(`store=${parsed.store}`);
173
+ if (parsed.embed !== null)
174
+ parts.push(`embed=${parsed.embed}`);
175
+ if (parsed.llm !== null)
176
+ parts.push(`llm=${parsed.llm}`);
177
+ process.stderr.write(` ${parts.join(', ')}\n`);
178
+ return;
179
+ }
180
+ // Default: show current config as YAML.
181
+ const config = loadConfig();
182
+ process.stdout.write(stringifyYaml(config));
183
+ }
184
+ //# sourceMappingURL=config-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-cmd.js","sourceRoot":"","sources":["../../src/bin/config-cmd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * config-loader.ts — shared config loading for cortex-engine.
3
+ *
4
+ * Config search order:
5
+ * 1. .fozikio/config.yaml (agent workspace)
6
+ * 2. cortex.config.yaml (project root)
7
+ * 3. config.yaml (project root)
8
+ * 4. defaults (sqlite + ollama)
9
+ */
10
+ import type { CortexConfig } from '../core/config.js';
11
+ export declare function loadConfig(cwd?: string): CortexConfig;
12
+ //# sourceMappingURL=config-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/bin/config-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,mBAAmB,CAAC;AAEnE,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,YAAY,CA8BpE"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * config-loader.ts — shared config loading for cortex-engine.
3
+ *
4
+ * Config search order:
5
+ * 1. .fozikio/config.yaml (agent workspace)
6
+ * 2. cortex.config.yaml (project root)
7
+ * 3. config.yaml (project root)
8
+ * 4. defaults (sqlite + ollama)
9
+ */
10
+ import { readFileSync, existsSync } from 'node:fs';
11
+ import { resolve } from 'node:path';
12
+ import { parse as parseYaml } from 'yaml';
13
+ import { DEFAULT_CONFIG } from '../core/config.js';
14
+ export function loadConfig(cwd = process.cwd()) {
15
+ const searchPaths = [
16
+ resolve(cwd, '.fozikio', 'config.yaml'),
17
+ resolve(cwd, 'cortex.config.yaml'),
18
+ resolve(cwd, 'config.yaml'),
19
+ ];
20
+ for (const configPath of searchPaths) {
21
+ if (existsSync(configPath)) {
22
+ try {
23
+ const raw = readFileSync(configPath, 'utf-8');
24
+ const parsed = parseYaml(raw);
25
+ if (parsed && typeof parsed === 'object' && 'cortex' in parsed && parsed.cortex) {
26
+ // Wrapped AgentConfig format
27
+ return { ...DEFAULT_CONFIG, ...parsed.cortex };
28
+ }
29
+ // Top-level CortexConfig format
30
+ return { ...DEFAULT_CONFIG, ...parsed };
31
+ }
32
+ catch (err) {
33
+ const message = err instanceof Error ? err.message : String(err);
34
+ console.error(`[cortex-engine] Failed to parse config at ${configPath}: ${message}`);
35
+ }
36
+ }
37
+ }
38
+ // No config found — use defaults
39
+ console.error('[cortex-engine] No config file found, using defaults (sqlite + ollama)');
40
+ return DEFAULT_CONFIG;
41
+ }
42
+ //# sourceMappingURL=config-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/bin/config-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGnD,MAAM,UAAU,UAAU,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACpD,MAAM,WAAW,GAAG;QAClB,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,aAAa,CAAC;QACvC,OAAO,CAAC,GAAG,EAAE,oBAAoB,CAAC;QAClC,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC;KAC5B,CAAC;IAEF,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBAC9C,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAA+B,CAAC;gBAE5D,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,QAAQ,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAChF,6BAA6B;oBAC7B,OAAO,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;gBACjD,CAAC;gBAED,gCAAgC;gBAChC,OAAO,EAAE,GAAG,cAAc,EAAE,GAAI,MAAgC,EAAE,CAAC;YACrE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACjE,OAAO,CAAC,KAAK,CAAC,6CAA6C,UAAU,KAAK,OAAO,EAAE,CAAC,CAAC;YACvF,CAAC;QACH,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,OAAO,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAC;IACxF,OAAO,cAAc,CAAC;AACxB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * digest-cmd.ts — cortex-kit digest command handler.
3
+ *
4
+ * Usage:
5
+ * cortex-kit digest <file> Process a single file
6
+ * cortex-kit digest --pending Process files with directive: digest
7
+ * cortex-kit digest --dry-run Show what would be processed
8
+ * cortex-kit digest --pipeline observe,reflect,predict Custom pipeline
9
+ * cortex-kit digest --namespace prediction Target namespace
10
+ * cortex-kit digest --dir <path> Directory to scan for --pending
11
+ */
12
+ export declare function runDigest(args: string[]): Promise<void>;
13
+ //# sourceMappingURL=digest-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"digest-cmd.d.ts","sourceRoot":"","sources":["../../src/bin/digest-cmd.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA2SH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuF7D"}