@gzoo/cortex 0.5.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/CLAUDE.md +180 -0
- package/CONTRIBUTING.md +52 -0
- package/LICENSE +21 -0
- package/README.md +259 -0
- package/dist/cortex-mcp.mjs +3153 -0
- package/dist/cortex.mjs +8213 -0
- package/icon.png +0 -0
- package/logo.png +0 -0
- package/package.json +86 -0
- package/packages/cli/dist/commands/config.d.ts +4 -0
- package/packages/cli/dist/commands/config.d.ts.map +1 -0
- package/packages/cli/dist/commands/config.js +419 -0
- package/packages/cli/dist/commands/config.js.map +1 -0
- package/packages/cli/dist/commands/contradictions.d.ts +3 -0
- package/packages/cli/dist/commands/contradictions.d.ts.map +1 -0
- package/packages/cli/dist/commands/contradictions.js +74 -0
- package/packages/cli/dist/commands/contradictions.js.map +1 -0
- package/packages/cli/dist/commands/costs.d.ts +3 -0
- package/packages/cli/dist/commands/costs.d.ts.map +1 -0
- package/packages/cli/dist/commands/costs.js +168 -0
- package/packages/cli/dist/commands/costs.js.map +1 -0
- package/packages/cli/dist/commands/db.d.ts +3 -0
- package/packages/cli/dist/commands/db.d.ts.map +1 -0
- package/packages/cli/dist/commands/db.js +139 -0
- package/packages/cli/dist/commands/db.js.map +1 -0
- package/packages/cli/dist/commands/find.d.ts +3 -0
- package/packages/cli/dist/commands/find.d.ts.map +1 -0
- package/packages/cli/dist/commands/find.js +139 -0
- package/packages/cli/dist/commands/find.js.map +1 -0
- package/packages/cli/dist/commands/ingest.d.ts +3 -0
- package/packages/cli/dist/commands/ingest.d.ts.map +1 -0
- package/packages/cli/dist/commands/ingest.js +179 -0
- package/packages/cli/dist/commands/ingest.js.map +1 -0
- package/packages/cli/dist/commands/init.d.ts +3 -0
- package/packages/cli/dist/commands/init.d.ts.map +1 -0
- package/packages/cli/dist/commands/init.js +285 -0
- package/packages/cli/dist/commands/init.js.map +1 -0
- package/packages/cli/dist/commands/mcp.d.ts +3 -0
- package/packages/cli/dist/commands/mcp.d.ts.map +1 -0
- package/packages/cli/dist/commands/mcp.js +65 -0
- package/packages/cli/dist/commands/mcp.js.map +1 -0
- package/packages/cli/dist/commands/models.d.ts +3 -0
- package/packages/cli/dist/commands/models.d.ts.map +1 -0
- package/packages/cli/dist/commands/models.js +245 -0
- package/packages/cli/dist/commands/models.js.map +1 -0
- package/packages/cli/dist/commands/privacy.d.ts +3 -0
- package/packages/cli/dist/commands/privacy.d.ts.map +1 -0
- package/packages/cli/dist/commands/privacy.js +140 -0
- package/packages/cli/dist/commands/privacy.js.map +1 -0
- package/packages/cli/dist/commands/projects.d.ts +3 -0
- package/packages/cli/dist/commands/projects.d.ts.map +1 -0
- package/packages/cli/dist/commands/projects.js +142 -0
- package/packages/cli/dist/commands/projects.js.map +1 -0
- package/packages/cli/dist/commands/query.d.ts +3 -0
- package/packages/cli/dist/commands/query.d.ts.map +1 -0
- package/packages/cli/dist/commands/query.js +153 -0
- package/packages/cli/dist/commands/query.js.map +1 -0
- package/packages/cli/dist/commands/report.d.ts +3 -0
- package/packages/cli/dist/commands/report.d.ts.map +1 -0
- package/packages/cli/dist/commands/report.js +144 -0
- package/packages/cli/dist/commands/report.js.map +1 -0
- package/packages/cli/dist/commands/resolve.d.ts +3 -0
- package/packages/cli/dist/commands/resolve.d.ts.map +1 -0
- package/packages/cli/dist/commands/resolve.js +119 -0
- package/packages/cli/dist/commands/resolve.js.map +1 -0
- package/packages/cli/dist/commands/serve.d.ts +3 -0
- package/packages/cli/dist/commands/serve.d.ts.map +1 -0
- package/packages/cli/dist/commands/serve.js +108 -0
- package/packages/cli/dist/commands/serve.js.map +1 -0
- package/packages/cli/dist/commands/status.d.ts +3 -0
- package/packages/cli/dist/commands/status.d.ts.map +1 -0
- package/packages/cli/dist/commands/status.js +230 -0
- package/packages/cli/dist/commands/status.js.map +1 -0
- package/packages/cli/dist/commands/stop.d.ts +5 -0
- package/packages/cli/dist/commands/stop.d.ts.map +1 -0
- package/packages/cli/dist/commands/stop.js +80 -0
- package/packages/cli/dist/commands/stop.js.map +1 -0
- package/packages/cli/dist/commands/watch.d.ts +3 -0
- package/packages/cli/dist/commands/watch.d.ts.map +1 -0
- package/packages/cli/dist/commands/watch.js +235 -0
- package/packages/cli/dist/commands/watch.js.map +1 -0
- package/packages/cli/dist/index.d.ts +9 -0
- package/packages/cli/dist/index.d.ts.map +1 -0
- package/packages/cli/dist/index.js +68 -0
- package/packages/cli/dist/index.js.map +1 -0
- package/packages/cli/package.json +37 -0
- package/packages/cli/tsconfig.json +16 -0
- package/packages/core/dist/config/loader.d.ts +11 -0
- package/packages/core/dist/config/loader.d.ts.map +1 -0
- package/packages/core/dist/config/loader.js +133 -0
- package/packages/core/dist/config/loader.js.map +1 -0
- package/packages/core/dist/config/project-registry.d.ts +71 -0
- package/packages/core/dist/config/project-registry.d.ts.map +1 -0
- package/packages/core/dist/config/project-registry.js +89 -0
- package/packages/core/dist/config/project-registry.js.map +1 -0
- package/packages/core/dist/config/schema.d.ts +909 -0
- package/packages/core/dist/config/schema.d.ts.map +1 -0
- package/packages/core/dist/config/schema.js +125 -0
- package/packages/core/dist/config/schema.js.map +1 -0
- package/packages/core/dist/errors/cortex-error.d.ts +58 -0
- package/packages/core/dist/errors/cortex-error.d.ts.map +1 -0
- package/packages/core/dist/errors/cortex-error.js +68 -0
- package/packages/core/dist/errors/cortex-error.js.map +1 -0
- package/packages/core/dist/events/event-bus.d.ts +10 -0
- package/packages/core/dist/events/event-bus.d.ts.map +1 -0
- package/packages/core/dist/events/event-bus.js +42 -0
- package/packages/core/dist/events/event-bus.js.map +1 -0
- package/packages/core/dist/index.d.ts +8 -0
- package/packages/core/dist/index.d.ts.map +1 -0
- package/packages/core/dist/index.js +22 -0
- package/packages/core/dist/index.js.map +1 -0
- package/packages/core/dist/logger.d.ts +16 -0
- package/packages/core/dist/logger.d.ts.map +1 -0
- package/packages/core/dist/logger.js +57 -0
- package/packages/core/dist/logger.js.map +1 -0
- package/packages/core/dist/types/config.d.ts +107 -0
- package/packages/core/dist/types/config.d.ts.map +1 -0
- package/packages/core/dist/types/config.js +2 -0
- package/packages/core/dist/types/config.js.map +1 -0
- package/packages/core/dist/types/entity.d.ts +35 -0
- package/packages/core/dist/types/entity.d.ts.map +1 -0
- package/packages/core/dist/types/entity.js +2 -0
- package/packages/core/dist/types/entity.js.map +1 -0
- package/packages/core/dist/types/events.d.ts +76 -0
- package/packages/core/dist/types/events.d.ts.map +1 -0
- package/packages/core/dist/types/events.js +2 -0
- package/packages/core/dist/types/events.js.map +1 -0
- package/packages/core/dist/types/file.d.ts +15 -0
- package/packages/core/dist/types/file.d.ts.map +1 -0
- package/packages/core/dist/types/file.js +2 -0
- package/packages/core/dist/types/file.js.map +1 -0
- package/packages/core/dist/types/graph.d.ts +93 -0
- package/packages/core/dist/types/graph.d.ts.map +1 -0
- package/packages/core/dist/types/graph.js +2 -0
- package/packages/core/dist/types/graph.js.map +1 -0
- package/packages/core/dist/types/index.d.ts +10 -0
- package/packages/core/dist/types/index.d.ts.map +1 -0
- package/packages/core/dist/types/index.js +2 -0
- package/packages/core/dist/types/index.js.map +1 -0
- package/packages/core/dist/types/llm.d.ts +95 -0
- package/packages/core/dist/types/llm.d.ts.map +1 -0
- package/packages/core/dist/types/llm.js +10 -0
- package/packages/core/dist/types/llm.js.map +1 -0
- package/packages/core/dist/types/project.d.ts +11 -0
- package/packages/core/dist/types/project.d.ts.map +1 -0
- package/packages/core/dist/types/project.js +2 -0
- package/packages/core/dist/types/project.js.map +1 -0
- package/packages/core/dist/types/relationship.d.ts +26 -0
- package/packages/core/dist/types/relationship.d.ts.map +1 -0
- package/packages/core/dist/types/relationship.js +2 -0
- package/packages/core/dist/types/relationship.js.map +1 -0
- package/packages/core/package.json +22 -0
- package/packages/core/tsconfig.json +9 -0
- package/packages/graph/dist/index.d.ts +4 -0
- package/packages/graph/dist/index.d.ts.map +1 -0
- package/packages/graph/dist/index.js +4 -0
- package/packages/graph/dist/index.js.map +1 -0
- package/packages/graph/dist/migrations/001-initial.d.ts +4 -0
- package/packages/graph/dist/migrations/001-initial.d.ts.map +1 -0
- package/packages/graph/dist/migrations/001-initial.js +134 -0
- package/packages/graph/dist/migrations/001-initial.js.map +1 -0
- package/packages/graph/dist/query-engine.d.ts +35 -0
- package/packages/graph/dist/query-engine.d.ts.map +1 -0
- package/packages/graph/dist/query-engine.js +185 -0
- package/packages/graph/dist/query-engine.js.map +1 -0
- package/packages/graph/dist/sqlite-store.d.ts +125 -0
- package/packages/graph/dist/sqlite-store.d.ts.map +1 -0
- package/packages/graph/dist/sqlite-store.js +632 -0
- package/packages/graph/dist/sqlite-store.js.map +1 -0
- package/packages/graph/dist/vector-store.d.ts +27 -0
- package/packages/graph/dist/vector-store.d.ts.map +1 -0
- package/packages/graph/dist/vector-store.js +85 -0
- package/packages/graph/dist/vector-store.js.map +1 -0
- package/packages/graph/package.json +27 -0
- package/packages/graph/tsconfig.json +12 -0
- package/packages/ingest/dist/chunker.d.ts +21 -0
- package/packages/ingest/dist/chunker.d.ts.map +1 -0
- package/packages/ingest/dist/chunker.js +118 -0
- package/packages/ingest/dist/chunker.js.map +1 -0
- package/packages/ingest/dist/index.d.ts +11 -0
- package/packages/ingest/dist/index.d.ts.map +1 -0
- package/packages/ingest/dist/index.js +14 -0
- package/packages/ingest/dist/index.js.map +1 -0
- package/packages/ingest/dist/parsers/conversation.d.ts +10 -0
- package/packages/ingest/dist/parsers/conversation.d.ts.map +1 -0
- package/packages/ingest/dist/parsers/conversation.js +150 -0
- package/packages/ingest/dist/parsers/conversation.js.map +1 -0
- package/packages/ingest/dist/parsers/index.d.ts +11 -0
- package/packages/ingest/dist/parsers/index.d.ts.map +1 -0
- package/packages/ingest/dist/parsers/index.js +42 -0
- package/packages/ingest/dist/parsers/index.js.map +1 -0
- package/packages/ingest/dist/parsers/json-parser.d.ts +6 -0
- package/packages/ingest/dist/parsers/json-parser.d.ts.map +1 -0
- package/packages/ingest/dist/parsers/json-parser.js +114 -0
- package/packages/ingest/dist/parsers/json-parser.js.map +1 -0
- package/packages/ingest/dist/parsers/markdown.d.ts +6 -0
- package/packages/ingest/dist/parsers/markdown.d.ts.map +1 -0
- package/packages/ingest/dist/parsers/markdown.js +116 -0
- package/packages/ingest/dist/parsers/markdown.js.map +1 -0
- package/packages/ingest/dist/parsers/types.d.ts +18 -0
- package/packages/ingest/dist/parsers/types.d.ts.map +1 -0
- package/packages/ingest/dist/parsers/types.js +2 -0
- package/packages/ingest/dist/parsers/types.js.map +1 -0
- package/packages/ingest/dist/parsers/typescript.d.ts +11 -0
- package/packages/ingest/dist/parsers/typescript.d.ts.map +1 -0
- package/packages/ingest/dist/parsers/typescript.js +197 -0
- package/packages/ingest/dist/parsers/typescript.js.map +1 -0
- package/packages/ingest/dist/parsers/yaml-parser.d.ts +6 -0
- package/packages/ingest/dist/parsers/yaml-parser.d.ts.map +1 -0
- package/packages/ingest/dist/parsers/yaml-parser.js +52 -0
- package/packages/ingest/dist/parsers/yaml-parser.js.map +1 -0
- package/packages/ingest/dist/pipeline.d.ts +30 -0
- package/packages/ingest/dist/pipeline.d.ts.map +1 -0
- package/packages/ingest/dist/pipeline.js +311 -0
- package/packages/ingest/dist/pipeline.js.map +1 -0
- package/packages/ingest/dist/post-ingest.d.ts +25 -0
- package/packages/ingest/dist/post-ingest.d.ts.map +1 -0
- package/packages/ingest/dist/post-ingest.js +171 -0
- package/packages/ingest/dist/post-ingest.js.map +1 -0
- package/packages/ingest/dist/watcher.d.ts +26 -0
- package/packages/ingest/dist/watcher.d.ts.map +1 -0
- package/packages/ingest/dist/watcher.js +142 -0
- package/packages/ingest/dist/watcher.js.map +1 -0
- package/packages/ingest/package.json +30 -0
- package/packages/ingest/tsconfig.json +14 -0
- package/packages/llm/dist/cache.d.ts +26 -0
- package/packages/llm/dist/cache.d.ts.map +1 -0
- package/packages/llm/dist/cache.js +60 -0
- package/packages/llm/dist/cache.js.map +1 -0
- package/packages/llm/dist/index.d.ts +15 -0
- package/packages/llm/dist/index.d.ts.map +1 -0
- package/packages/llm/dist/index.js +19 -0
- package/packages/llm/dist/index.js.map +1 -0
- package/packages/llm/dist/output-parser.d.ts +4 -0
- package/packages/llm/dist/output-parser.d.ts.map +1 -0
- package/packages/llm/dist/output-parser.js +207 -0
- package/packages/llm/dist/output-parser.js.map +1 -0
- package/packages/llm/dist/prompts/context-ranking.d.ts +33 -0
- package/packages/llm/dist/prompts/context-ranking.d.ts.map +1 -0
- package/packages/llm/dist/prompts/context-ranking.js +30 -0
- package/packages/llm/dist/prompts/context-ranking.js.map +1 -0
- package/packages/llm/dist/prompts/contradiction-detection.d.ts +46 -0
- package/packages/llm/dist/prompts/contradiction-detection.d.ts.map +1 -0
- package/packages/llm/dist/prompts/contradiction-detection.js +45 -0
- package/packages/llm/dist/prompts/contradiction-detection.js.map +1 -0
- package/packages/llm/dist/prompts/conversational-query.d.ts +29 -0
- package/packages/llm/dist/prompts/conversational-query.d.ts.map +1 -0
- package/packages/llm/dist/prompts/conversational-query.js +34 -0
- package/packages/llm/dist/prompts/conversational-query.js.map +1 -0
- package/packages/llm/dist/prompts/entity-extraction.d.ts +67 -0
- package/packages/llm/dist/prompts/entity-extraction.d.ts.map +1 -0
- package/packages/llm/dist/prompts/entity-extraction.js +76 -0
- package/packages/llm/dist/prompts/entity-extraction.js.map +1 -0
- package/packages/llm/dist/prompts/follow-up-generation.d.ts +25 -0
- package/packages/llm/dist/prompts/follow-up-generation.d.ts.map +1 -0
- package/packages/llm/dist/prompts/follow-up-generation.js +25 -0
- package/packages/llm/dist/prompts/follow-up-generation.js.map +1 -0
- package/packages/llm/dist/prompts/merge-detection.d.ts +41 -0
- package/packages/llm/dist/prompts/merge-detection.d.ts.map +1 -0
- package/packages/llm/dist/prompts/merge-detection.js +31 -0
- package/packages/llm/dist/prompts/merge-detection.js.map +1 -0
- package/packages/llm/dist/prompts/relationship-inference.d.ts +60 -0
- package/packages/llm/dist/prompts/relationship-inference.d.ts.map +1 -0
- package/packages/llm/dist/prompts/relationship-inference.js +66 -0
- package/packages/llm/dist/prompts/relationship-inference.js.map +1 -0
- package/packages/llm/dist/providers/anthropic.d.ts +39 -0
- package/packages/llm/dist/providers/anthropic.d.ts.map +1 -0
- package/packages/llm/dist/providers/anthropic.js +157 -0
- package/packages/llm/dist/providers/anthropic.js.map +1 -0
- package/packages/llm/dist/providers/ollama.d.ts +52 -0
- package/packages/llm/dist/providers/ollama.d.ts.map +1 -0
- package/packages/llm/dist/providers/ollama.js +297 -0
- package/packages/llm/dist/providers/ollama.js.map +1 -0
- package/packages/llm/dist/providers/openai-compatible.d.ts +40 -0
- package/packages/llm/dist/providers/openai-compatible.d.ts.map +1 -0
- package/packages/llm/dist/providers/openai-compatible.js +164 -0
- package/packages/llm/dist/providers/openai-compatible.js.map +1 -0
- package/packages/llm/dist/router.d.ts +87 -0
- package/packages/llm/dist/router.d.ts.map +1 -0
- package/packages/llm/dist/router.js +399 -0
- package/packages/llm/dist/router.js.map +1 -0
- package/packages/llm/dist/token-tracker.d.ts +24 -0
- package/packages/llm/dist/token-tracker.d.ts.map +1 -0
- package/packages/llm/dist/token-tracker.js +114 -0
- package/packages/llm/dist/token-tracker.js.map +1 -0
- package/packages/llm/package.json +25 -0
- package/packages/llm/tsconfig.json +12 -0
- package/packages/mcp/dist/index.d.ts +10 -0
- package/packages/mcp/dist/index.d.ts.map +1 -0
- package/packages/mcp/dist/index.js +33 -0
- package/packages/mcp/dist/index.js.map +1 -0
- package/packages/mcp/dist/server.d.ts +5 -0
- package/packages/mcp/dist/server.d.ts.map +1 -0
- package/packages/mcp/dist/server.js +87 -0
- package/packages/mcp/dist/server.js.map +1 -0
- package/packages/mcp/dist/store-factory.d.ts +8 -0
- package/packages/mcp/dist/store-factory.d.ts.map +1 -0
- package/packages/mcp/dist/store-factory.js +24 -0
- package/packages/mcp/dist/store-factory.js.map +1 -0
- package/packages/mcp/dist/tools/contradictions.d.ts +14 -0
- package/packages/mcp/dist/tools/contradictions.d.ts.map +1 -0
- package/packages/mcp/dist/tools/contradictions.js +33 -0
- package/packages/mcp/dist/tools/contradictions.js.map +1 -0
- package/packages/mcp/dist/tools/find.d.ts +37 -0
- package/packages/mcp/dist/tools/find.d.ts.map +1 -0
- package/packages/mcp/dist/tools/find.js +52 -0
- package/packages/mcp/dist/tools/find.js.map +1 -0
- package/packages/mcp/dist/tools/projects.d.ts +16 -0
- package/packages/mcp/dist/tools/projects.d.ts.map +1 -0
- package/packages/mcp/dist/tools/projects.js +17 -0
- package/packages/mcp/dist/tools/projects.js.map +1 -0
- package/packages/mcp/dist/tools/query.d.ts +20 -0
- package/packages/mcp/dist/tools/query.d.ts.map +1 -0
- package/packages/mcp/dist/tools/query.js +65 -0
- package/packages/mcp/dist/tools/query.js.map +1 -0
- package/packages/mcp/dist/tools/status.d.ts +15 -0
- package/packages/mcp/dist/tools/status.d.ts.map +1 -0
- package/packages/mcp/dist/tools/status.js +17 -0
- package/packages/mcp/dist/tools/status.js.map +1 -0
- package/packages/mcp/package.json +27 -0
- package/packages/mcp/tsconfig.json +14 -0
- package/packages/server/dist/index.d.ts +17 -0
- package/packages/server/dist/index.d.ts.map +1 -0
- package/packages/server/dist/index.js +170 -0
- package/packages/server/dist/index.js.map +1 -0
- package/packages/server/dist/middleware/auth.d.ts +9 -0
- package/packages/server/dist/middleware/auth.d.ts.map +1 -0
- package/packages/server/dist/middleware/auth.js +94 -0
- package/packages/server/dist/middleware/auth.js.map +1 -0
- package/packages/server/dist/routes/contradictions.d.ts +4 -0
- package/packages/server/dist/routes/contradictions.d.ts.map +1 -0
- package/packages/server/dist/routes/contradictions.js +63 -0
- package/packages/server/dist/routes/contradictions.js.map +1 -0
- package/packages/server/dist/routes/entities.d.ts +4 -0
- package/packages/server/dist/routes/entities.d.ts.map +1 -0
- package/packages/server/dist/routes/entities.js +61 -0
- package/packages/server/dist/routes/entities.js.map +1 -0
- package/packages/server/dist/routes/projects.d.ts +4 -0
- package/packages/server/dist/routes/projects.d.ts.map +1 -0
- package/packages/server/dist/routes/projects.js +35 -0
- package/packages/server/dist/routes/projects.js.map +1 -0
- package/packages/server/dist/routes/query.d.ts +4 -0
- package/packages/server/dist/routes/query.d.ts.map +1 -0
- package/packages/server/dist/routes/query.js +93 -0
- package/packages/server/dist/routes/query.js.map +1 -0
- package/packages/server/dist/routes/relationships.d.ts +4 -0
- package/packages/server/dist/routes/relationships.d.ts.map +1 -0
- package/packages/server/dist/routes/relationships.js +52 -0
- package/packages/server/dist/routes/relationships.js.map +1 -0
- package/packages/server/dist/routes/status.d.ts +4 -0
- package/packages/server/dist/routes/status.d.ts.map +1 -0
- package/packages/server/dist/routes/status.js +85 -0
- package/packages/server/dist/routes/status.js.map +1 -0
- package/packages/server/dist/ws/event-relay.d.ts +10 -0
- package/packages/server/dist/ws/event-relay.d.ts.map +1 -0
- package/packages/server/dist/ws/event-relay.js +83 -0
- package/packages/server/dist/ws/event-relay.js.map +1 -0
- package/packages/server/package.json +32 -0
- package/packages/server/tsconfig.json +15 -0
- package/packages/web/dist/assets/index-Bxjfq4I0.css +1 -0
- package/packages/web/dist/assets/index-MqwNS5FD.js +248 -0
- package/packages/web/dist/assets/index-MqwNS5FD.js.map +1 -0
- package/packages/web/dist/cortex-icon.svg +9 -0
- package/packages/web/dist/icon.png +0 -0
- package/packages/web/dist/index.html +14 -0
- package/packages/web/dist/logo.png +0 -0
- package/packages/web/index.html +13 -0
- package/packages/web/package.json +34 -0
- package/packages/web/public/cortex-icon.svg +9 -0
- package/packages/web/public/icon.png +0 -0
- package/packages/web/public/logo.png +0 -0
- package/packages/web/tsconfig.json +22 -0
- package/packages/web/vite.config.ts +20 -0
- package/tsconfig.base.json +18 -0
- package/tsconfig.json +12 -0
- package/vitest.config.ts +14 -0
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { resolve } from 'node:path';
|
|
2
|
+
import { statSync } from 'node:fs';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { loadConfig, createLogger, setGlobalLogLevel } from '@cortex/core';
|
|
5
|
+
import { SQLiteStore } from '@cortex/graph';
|
|
6
|
+
import { Router } from '@cortex/llm';
|
|
7
|
+
const logger = createLogger('cli:status');
|
|
8
|
+
async function checkOllamaAvailable(host) {
|
|
9
|
+
try {
|
|
10
|
+
const controller = new AbortController();
|
|
11
|
+
const timeoutId = setTimeout(() => controller.abort(), 3000);
|
|
12
|
+
const response = await fetch(`${host}/api/tags`, { signal: controller.signal });
|
|
13
|
+
clearTimeout(timeoutId);
|
|
14
|
+
return response.ok;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export function registerStatusCommand(program) {
|
|
21
|
+
program
|
|
22
|
+
.command('status')
|
|
23
|
+
.description('System dashboard ā graph stats, LLM status, costs')
|
|
24
|
+
.action(async () => {
|
|
25
|
+
const globals = program.opts();
|
|
26
|
+
await runStatus(globals);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
function formatBytes(bytes) {
|
|
30
|
+
if (bytes === 0)
|
|
31
|
+
return '0 B';
|
|
32
|
+
const units = ['B', 'KB', 'MB', 'GB'];
|
|
33
|
+
const i = Math.floor(Math.log(bytes) / Math.log(1024));
|
|
34
|
+
const value = bytes / Math.pow(1024, i);
|
|
35
|
+
return `${value.toFixed(1)} ${units[i]}`;
|
|
36
|
+
}
|
|
37
|
+
async function runStatus(globals) {
|
|
38
|
+
const config = loadConfig({ configDir: globals.config ? resolve(globals.config) : undefined });
|
|
39
|
+
const store = new SQLiteStore({ dbPath: config.graph.dbPath, backupOnStartup: false });
|
|
40
|
+
try {
|
|
41
|
+
const stats = await store.getStats();
|
|
42
|
+
const projects = await store.listProjects();
|
|
43
|
+
// Get vector DB size
|
|
44
|
+
let vectorSizeBytes = 0;
|
|
45
|
+
try {
|
|
46
|
+
const vectorStat = statSync(config.graph.vectorDbPath);
|
|
47
|
+
vectorSizeBytes = vectorStat.size;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// Vector DB may not exist yet
|
|
51
|
+
}
|
|
52
|
+
// Check LLM availability
|
|
53
|
+
const apiKeySource = config.llm.cloud.apiKeySource;
|
|
54
|
+
const apiKeyEnvVar = apiKeySource.startsWith("env:") ? apiKeySource.slice(4) : undefined;
|
|
55
|
+
const hasApiKey = apiKeyEnvVar ? Boolean(process.env[apiKeyEnvVar]) : false;
|
|
56
|
+
const mode = config.llm.mode;
|
|
57
|
+
const ollamaAvailable = mode !== 'cloud-first' ? await checkOllamaAvailable(config.llm.local.host) : false;
|
|
58
|
+
// Suppress log output in JSON mode so Router init logs don't pollute stdout
|
|
59
|
+
if (globals.json)
|
|
60
|
+
setGlobalLogLevel('error');
|
|
61
|
+
// Compute local savings estimate: tokens processed by Ollama Ć Haiku cloud rate
|
|
62
|
+
const router = new Router({ config });
|
|
63
|
+
const tracker = router.getTracker();
|
|
64
|
+
const summary = tracker.getSummary();
|
|
65
|
+
const localTokens = tracker.getRecords()
|
|
66
|
+
.filter((r) => r.provider === 'ollama')
|
|
67
|
+
.reduce((sum, r) => sum + r.inputTokens + r.outputTokens, 0);
|
|
68
|
+
const HAIKU_RATE_PER_M = 2.4; // blended input+output Haiku rate
|
|
69
|
+
const localSavingsUsd = (localTokens / 1_000_000) * HAIKU_RATE_PER_M;
|
|
70
|
+
const localProvider = router.getLocalProvider();
|
|
71
|
+
if (globals.json) {
|
|
72
|
+
console.log(JSON.stringify({
|
|
73
|
+
graph: {
|
|
74
|
+
entities: stats.entityCount,
|
|
75
|
+
relationships: stats.relationshipCount,
|
|
76
|
+
contradictions: stats.contradictionCount,
|
|
77
|
+
},
|
|
78
|
+
projects: projects.map((p) => p.name),
|
|
79
|
+
files: {
|
|
80
|
+
tracked: stats.fileCount,
|
|
81
|
+
},
|
|
82
|
+
storage: {
|
|
83
|
+
sqliteBytes: stats.dbSizeBytes,
|
|
84
|
+
vectorBytes: vectorSizeBytes,
|
|
85
|
+
},
|
|
86
|
+
llm: {
|
|
87
|
+
mode: mode,
|
|
88
|
+
cloud: {
|
|
89
|
+
provider: config.llm.cloud.provider,
|
|
90
|
+
available: hasApiKey,
|
|
91
|
+
},
|
|
92
|
+
local: {
|
|
93
|
+
provider: 'ollama',
|
|
94
|
+
available: ollamaAvailable,
|
|
95
|
+
host: config.llm.local.host,
|
|
96
|
+
model: config.llm.local.model,
|
|
97
|
+
numCtx: localProvider?.getNumCtx() ?? config.llm.local.numCtx,
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
budget: {
|
|
101
|
+
monthlyLimitUsd: config.llm.budget.monthlyLimitUsd,
|
|
102
|
+
spentThisMonthUsd: summary.totalCostUsd,
|
|
103
|
+
localSavingsUsd: Math.round(localSavingsUsd * 100) / 100,
|
|
104
|
+
},
|
|
105
|
+
}));
|
|
106
|
+
store.close();
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
// Header
|
|
110
|
+
console.log('');
|
|
111
|
+
console.log(chalk.bold.cyan('CORTEX STATUS'));
|
|
112
|
+
console.log(chalk.dim('ā'.repeat(50)));
|
|
113
|
+
// Graph stats
|
|
114
|
+
console.log(chalk.white('Graph: ') +
|
|
115
|
+
chalk.bold(`${stats.entityCount.toLocaleString()}`) + ' entities | ' +
|
|
116
|
+
chalk.bold(`${stats.relationshipCount.toLocaleString()}`) + ' relationships | ' +
|
|
117
|
+
chalk.bold(`${stats.contradictionCount}`) + ' contradictions');
|
|
118
|
+
// Projects
|
|
119
|
+
console.log(chalk.white('Projects: ') +
|
|
120
|
+
`${projects.length} watched`);
|
|
121
|
+
for (const p of projects) {
|
|
122
|
+
console.log(chalk.dim(` ${p.name} ā ${p.rootPath}`));
|
|
123
|
+
}
|
|
124
|
+
// Files
|
|
125
|
+
console.log(chalk.white('Files: ') +
|
|
126
|
+
`${stats.fileCount} tracked`);
|
|
127
|
+
// Storage
|
|
128
|
+
console.log(chalk.white('Storage: ') +
|
|
129
|
+
`${formatBytes(stats.dbSizeBytes)} (SQLite) | ${formatBytes(vectorSizeBytes)} (vectors)`);
|
|
130
|
+
console.log('');
|
|
131
|
+
// LLM Mode + provider block
|
|
132
|
+
const numCtx = localProvider?.getNumCtx() ?? config.llm.local.numCtx;
|
|
133
|
+
const numGpu = localProvider?.getNumGpu() ?? config.llm.local.numGpu;
|
|
134
|
+
console.log(chalk.white('LLM Mode: ') + mode);
|
|
135
|
+
const cloudLabel = `${config.llm.cloud.models.primary} / ${config.llm.cloud.models.fast} (${config.llm.cloud.provider})`;
|
|
136
|
+
const localLabel = `${config.llm.local.model} @ ${config.llm.local.host}`;
|
|
137
|
+
const localDetail = `${numCtx.toLocaleString()} ctx | GPU: ${numGpu === -1 ? 'auto' : numGpu} layers | ~30 tok/s est.`;
|
|
138
|
+
if (mode === 'cloud-first') {
|
|
139
|
+
const llmStatus = hasApiKey ? chalk.green('ā') : chalk.red('ā');
|
|
140
|
+
console.log(chalk.white(' Cloud: ') + `${llmStatus} ${cloudLabel}`);
|
|
141
|
+
}
|
|
142
|
+
else if (mode === 'local-only') {
|
|
143
|
+
const llmStatus = ollamaAvailable ? chalk.green('ā') : chalk.red('ā');
|
|
144
|
+
console.log(chalk.white(' Local: ') + `${llmStatus} ${localLabel}`);
|
|
145
|
+
console.log(chalk.dim(` ${localDetail}`));
|
|
146
|
+
}
|
|
147
|
+
else if (mode === 'local-first') {
|
|
148
|
+
const localStatus = ollamaAvailable ? chalk.green('ā') : chalk.red('ā');
|
|
149
|
+
const cloudStatus = hasApiKey ? chalk.green('ā') : chalk.yellow('ā');
|
|
150
|
+
console.log(chalk.white(' Cloud: ') + `${cloudStatus} ${cloudLabel}`);
|
|
151
|
+
console.log(chalk.white(' Local: ') + `${localStatus} ${localLabel}`);
|
|
152
|
+
if (ollamaAvailable) {
|
|
153
|
+
console.log(chalk.dim(` ${localDetail}`));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
// hybrid
|
|
158
|
+
const localStatus = ollamaAvailable ? chalk.green('ā') : chalk.yellow('ā');
|
|
159
|
+
const cloudStatus = hasApiKey ? chalk.green('ā') : chalk.red('ā');
|
|
160
|
+
console.log(chalk.white(' Cloud: ') + `${cloudStatus} ${cloudLabel}`);
|
|
161
|
+
console.log(chalk.white(' Local: ') + `${localStatus} ${localLabel}`);
|
|
162
|
+
if (ollamaAvailable) {
|
|
163
|
+
console.log(chalk.dim(` ${localDetail}`));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
console.log('');
|
|
167
|
+
// Budget + savings
|
|
168
|
+
const budgetLimit = config.llm.budget.monthlyLimitUsd;
|
|
169
|
+
const spentUsd = summary.totalCostUsd;
|
|
170
|
+
const usedPct = budgetLimit > 0 ? ((spentUsd / budgetLimit) * 100).toFixed(1) : '0.0';
|
|
171
|
+
console.log(chalk.white('Cost: ') +
|
|
172
|
+
`$${spentUsd.toFixed(2)} / $${budgetLimit.toFixed(2)} this month (${usedPct}%)`);
|
|
173
|
+
if (localSavingsUsd > 0) {
|
|
174
|
+
console.log(chalk.dim(` Savings from local: ~$${localSavingsUsd.toFixed(2)} est.`));
|
|
175
|
+
}
|
|
176
|
+
console.log('');
|
|
177
|
+
// Overall status based on mode
|
|
178
|
+
let statusOk = false;
|
|
179
|
+
let statusMsg = '';
|
|
180
|
+
if (mode === 'local-only') {
|
|
181
|
+
statusOk = ollamaAvailable;
|
|
182
|
+
statusMsg = ollamaAvailable
|
|
183
|
+
? 'ā Fully operational'
|
|
184
|
+
: `ā Ollama not available at ${config.llm.local.host}. Run \`ollama serve\`.`;
|
|
185
|
+
}
|
|
186
|
+
else if (mode === 'local-first') {
|
|
187
|
+
statusOk = ollamaAvailable || hasApiKey;
|
|
188
|
+
if (ollamaAvailable) {
|
|
189
|
+
statusMsg = 'ā Fully operational (using Ollama)';
|
|
190
|
+
}
|
|
191
|
+
else if (hasApiKey) {
|
|
192
|
+
statusMsg = 'ā Ollama unavailable, using cloud fallback';
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
statusMsg = 'ā No LLM available. Start Ollama or set API key.';
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
else if (mode === 'hybrid') {
|
|
199
|
+
statusOk = hasApiKey || ollamaAvailable;
|
|
200
|
+
if (hasApiKey && ollamaAvailable) {
|
|
201
|
+
statusMsg = 'ā Fully operational (hybrid mode)';
|
|
202
|
+
}
|
|
203
|
+
else if (hasApiKey) {
|
|
204
|
+
statusMsg = 'ā Ollama unavailable, cloud-only';
|
|
205
|
+
}
|
|
206
|
+
else if (ollamaAvailable) {
|
|
207
|
+
statusMsg = 'ā API key not set, local-only';
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
statusMsg = 'ā No LLM available';
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
// cloud-first
|
|
215
|
+
statusOk = hasApiKey;
|
|
216
|
+
statusMsg = hasApiKey
|
|
217
|
+
? 'ā Fully operational'
|
|
218
|
+
: 'ā API key not set. Run `cortex init` or set ' + (apiKeyEnvVar ?? 'your cloud API key env var') + '.';
|
|
219
|
+
}
|
|
220
|
+
console.log(chalk.white('Status: ') +
|
|
221
|
+
(statusOk ? chalk.green(statusMsg) : chalk.yellow(statusMsg)));
|
|
222
|
+
console.log('');
|
|
223
|
+
}
|
|
224
|
+
catch (err) {
|
|
225
|
+
logger.error('Status check failed', { error: err instanceof Error ? err.message : String(err) });
|
|
226
|
+
console.error(chalk.red(`Error: ${err instanceof Error ? err.message : String(err)}`));
|
|
227
|
+
}
|
|
228
|
+
store.close();
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBpC,wBAAgB,UAAU,IAAI,OAAO,CAWpC;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAO1D;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2B7D"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { resolve } from 'node:path';
|
|
2
|
+
import { readFileSync, unlinkSync, existsSync } from 'node:fs';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
const PID_FILE = resolve(homedir(), '.cortex', 'cortex.pid');
|
|
5
|
+
function readPid() {
|
|
6
|
+
try {
|
|
7
|
+
const pid = Number(readFileSync(PID_FILE, 'utf-8').trim());
|
|
8
|
+
return Number.isFinite(pid) ? pid : null;
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function isRunning(pid) {
|
|
15
|
+
try {
|
|
16
|
+
process.kill(pid, 0);
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export function stopServer() {
|
|
24
|
+
const pid = readPid();
|
|
25
|
+
if (!pid || !isRunning(pid)) {
|
|
26
|
+
if (pid && existsSync(PID_FILE))
|
|
27
|
+
unlinkSync(PID_FILE);
|
|
28
|
+
console.log('Cortex is not running.');
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
process.kill(pid, 'SIGTERM');
|
|
32
|
+
console.log(`Cortex (PID ${pid}) stopped.`);
|
|
33
|
+
try {
|
|
34
|
+
unlinkSync(PID_FILE);
|
|
35
|
+
}
|
|
36
|
+
catch { /* ok */ }
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
export function registerStopCommand(program) {
|
|
40
|
+
program
|
|
41
|
+
.command('stop')
|
|
42
|
+
.description('Stop the running Cortex server')
|
|
43
|
+
.action(() => {
|
|
44
|
+
stopServer();
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
export function registerRestartCommand(program) {
|
|
48
|
+
program
|
|
49
|
+
.command('restart')
|
|
50
|
+
.description('Restart the Cortex server (stop + serve)')
|
|
51
|
+
.option('--port <port>', 'Port to listen on (default: 3710)', '3710')
|
|
52
|
+
.option('--host <host>', 'Host to bind to (default: 127.0.0.1)', '127.0.0.1')
|
|
53
|
+
.option('--no-watch', 'Disable file watcher')
|
|
54
|
+
.action(async (opts) => {
|
|
55
|
+
const pid = readPid();
|
|
56
|
+
if (pid && isRunning(pid)) {
|
|
57
|
+
process.kill(pid, 'SIGTERM');
|
|
58
|
+
console.log(`Stopped Cortex (PID ${pid}).`);
|
|
59
|
+
try {
|
|
60
|
+
unlinkSync(PID_FILE);
|
|
61
|
+
}
|
|
62
|
+
catch { /* ok */ }
|
|
63
|
+
// Wait for process to fully exit and release port
|
|
64
|
+
for (let i = 0; i < 10; i++) {
|
|
65
|
+
await new Promise(r => setTimeout(r, 500));
|
|
66
|
+
if (!isRunning(pid))
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
console.log('Starting Cortex...');
|
|
71
|
+
const serveCmd = program.commands.find(c => c.name() === 'serve');
|
|
72
|
+
if (serveCmd) {
|
|
73
|
+
const args = ['--port', opts.port, '--host', opts.host];
|
|
74
|
+
if (!opts.watch)
|
|
75
|
+
args.push('--no-watch');
|
|
76
|
+
await serveCmd.parseAsync(args, { from: 'user' });
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=stop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAS3D"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { resolve, join } from 'node:path';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import ora from 'ora';
|
|
5
|
+
import { loadConfig, findConfigFile, createLogger, setGlobalLogLevel, eventBus, getProject, updateProjectLastWatched } from '@cortex/core';
|
|
6
|
+
import { SQLiteStore } from '@cortex/graph';
|
|
7
|
+
import { Router } from '@cortex/llm';
|
|
8
|
+
import { FileWatcher, IngestionPipeline } from '@cortex/ingest';
|
|
9
|
+
const logger = createLogger('cli:watch');
|
|
10
|
+
export function registerWatchCommand(program) {
|
|
11
|
+
program
|
|
12
|
+
.command('watch [project]')
|
|
13
|
+
.description('Start file watcher + ingestion pipeline. Optionally specify a registered project name.')
|
|
14
|
+
.option('--no-confirm', 'Skip cost confirmation for bulk ingestion')
|
|
15
|
+
.action(async (projectName, opts) => {
|
|
16
|
+
const globals = program.opts();
|
|
17
|
+
await runWatch(projectName, opts, globals);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
async function runWatch(projectName, opts, globals) {
|
|
21
|
+
let projectRoot;
|
|
22
|
+
let projectDisplayName = projectName;
|
|
23
|
+
// If project name provided, look it up in the registry
|
|
24
|
+
if (projectName) {
|
|
25
|
+
const registeredProject = getProject(projectName);
|
|
26
|
+
if (!registeredProject) {
|
|
27
|
+
console.error(chalk.red(`Error: Project "${projectName}" is not registered.`));
|
|
28
|
+
console.log(chalk.dim('Register it with: cortex projects add <name> <path>'));
|
|
29
|
+
console.log(chalk.dim('Or list registered projects: cortex projects list'));
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
projectRoot = registeredProject.path;
|
|
33
|
+
// Check config exists
|
|
34
|
+
const configPath = join(projectRoot, 'cortex.config.json');
|
|
35
|
+
if (!existsSync(configPath)) {
|
|
36
|
+
console.error(chalk.red(`Error: No cortex.config.json found in ${projectRoot}`));
|
|
37
|
+
console.log(chalk.dim(`Run 'cd ${projectRoot} && cortex init' to create one.`));
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
// Update last watched timestamp
|
|
41
|
+
updateProjectLastWatched(projectName);
|
|
42
|
+
}
|
|
43
|
+
const configDir = globals.config ? resolve(globals.config) : projectRoot;
|
|
44
|
+
const configPath = findConfigFile(configDir);
|
|
45
|
+
if (!globals.quiet) {
|
|
46
|
+
console.log(chalk.dim(`Config: ${configPath ?? '(none found ā using defaults)'}`));
|
|
47
|
+
}
|
|
48
|
+
const config = loadConfig({ configDir });
|
|
49
|
+
// Suppress noisy JSON log lines unless --verbose
|
|
50
|
+
if (!globals.verbose) {
|
|
51
|
+
setGlobalLogLevel('error');
|
|
52
|
+
}
|
|
53
|
+
if (!globals.quiet) {
|
|
54
|
+
if (projectDisplayName) {
|
|
55
|
+
console.log(chalk.bold(`\nā” Cortex Watch: ${chalk.cyan(projectDisplayName)}\n`));
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
console.log(chalk.bold('\nā” Cortex Watch\n'));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Initialize stores
|
|
62
|
+
const store = new SQLiteStore({
|
|
63
|
+
dbPath: config.graph.dbPath,
|
|
64
|
+
walMode: config.graph.walMode,
|
|
65
|
+
backupOnStartup: config.graph.backupOnStartup,
|
|
66
|
+
});
|
|
67
|
+
// Initialize router
|
|
68
|
+
const router = new Router({ config });
|
|
69
|
+
// Ensure project exists
|
|
70
|
+
const projects = await store.listProjects();
|
|
71
|
+
let project = projects[0];
|
|
72
|
+
if (!project) {
|
|
73
|
+
project = await store.createProject({
|
|
74
|
+
name: 'default',
|
|
75
|
+
rootPath: resolve(config.ingest.watchDirs[0] ?? '.'),
|
|
76
|
+
privacyLevel: config.privacy.defaultLevel,
|
|
77
|
+
fileCount: 0,
|
|
78
|
+
entityCount: 0,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
// Create pipeline
|
|
82
|
+
const pipeline = new IngestionPipeline(router, store, {
|
|
83
|
+
projectId: project.id,
|
|
84
|
+
projectName: project.name,
|
|
85
|
+
projectRoot: project.rootPath,
|
|
86
|
+
maxFileSize: config.ingest.maxFileSize,
|
|
87
|
+
batchSize: config.ingest.batchSize,
|
|
88
|
+
projectPrivacyLevel: project.privacyLevel,
|
|
89
|
+
mergeConfidenceThreshold: config.graph.mergeConfidenceThreshold,
|
|
90
|
+
});
|
|
91
|
+
// Create watcher
|
|
92
|
+
const watcher = FileWatcher.fromConfig(config.ingest);
|
|
93
|
+
let ingestedCount = 0;
|
|
94
|
+
let entityCount = 0;
|
|
95
|
+
let errorCount = 0;
|
|
96
|
+
let shuttingDown = false;
|
|
97
|
+
// Concurrency-limited work queue
|
|
98
|
+
const MAX_CONCURRENT = config.ingest.batchSize;
|
|
99
|
+
let activeJobs = 0;
|
|
100
|
+
const queue = [];
|
|
101
|
+
const spinner = ora({ isSilent: globals.quiet });
|
|
102
|
+
async function processFile(path) {
|
|
103
|
+
if (shuttingDown)
|
|
104
|
+
return;
|
|
105
|
+
spinner.start(`Ingesting ${path}...`);
|
|
106
|
+
try {
|
|
107
|
+
const result = await pipeline.ingestFile(path);
|
|
108
|
+
if (shuttingDown)
|
|
109
|
+
return;
|
|
110
|
+
if (result.status === 'ingested') {
|
|
111
|
+
ingestedCount++;
|
|
112
|
+
entityCount += result.entityIds.length;
|
|
113
|
+
spinner.succeed(`${path} ā ${result.entityIds.length} entities, ${result.relationshipIds.length} relationships`);
|
|
114
|
+
}
|
|
115
|
+
else if (result.status === 'skipped') {
|
|
116
|
+
spinner.info(`${path} ā skipped${result.error ? ` (${result.error})` : ''}`);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
errorCount++;
|
|
120
|
+
spinner.fail(`${path} ā failed: ${result.error}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch (err) {
|
|
124
|
+
if (shuttingDown)
|
|
125
|
+
return;
|
|
126
|
+
errorCount++;
|
|
127
|
+
spinner.fail(`${path} ā error: ${err instanceof Error ? err.message : String(err)}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
function drainQueue() {
|
|
131
|
+
while (queue.length > 0 && activeJobs < MAX_CONCURRENT && !shuttingDown) {
|
|
132
|
+
const item = queue.shift();
|
|
133
|
+
if (!item)
|
|
134
|
+
break;
|
|
135
|
+
activeJobs++;
|
|
136
|
+
processFile(item.path)
|
|
137
|
+
.catch(() => { })
|
|
138
|
+
.finally(() => {
|
|
139
|
+
activeJobs--;
|
|
140
|
+
drainQueue();
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
watcher.onFileChange((path, changeType) => {
|
|
145
|
+
if (shuttingDown)
|
|
146
|
+
return;
|
|
147
|
+
if (changeType === 'unlink') {
|
|
148
|
+
logger.debug('File deleted', { path });
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
queue.push({ path, changeType });
|
|
152
|
+
drainQueue();
|
|
153
|
+
});
|
|
154
|
+
watcher.start();
|
|
155
|
+
// Step 5: Subscribe to live alerts
|
|
156
|
+
eventBus.on('contradiction.detected', (event) => {
|
|
157
|
+
if (globals.quiet)
|
|
158
|
+
return;
|
|
159
|
+
spinner.stop();
|
|
160
|
+
const { contradiction: c } = event.payload;
|
|
161
|
+
const severityColor = c.severity === 'critical' ? chalk.red : c.severity === 'high' ? chalk.yellow : chalk.dim;
|
|
162
|
+
console.log(severityColor(`\nā Contradiction [${c.severity}]: ${c.description}`));
|
|
163
|
+
if (c.suggestedResolution) {
|
|
164
|
+
console.log(chalk.dim(` Suggestion: ${c.suggestedResolution}`));
|
|
165
|
+
}
|
|
166
|
+
console.log(chalk.dim(` Resolve with: cortex resolve ${c.id} --action <action>\n`));
|
|
167
|
+
});
|
|
168
|
+
// Step 5b: Budget warning and exhaustion alerts
|
|
169
|
+
eventBus.on('budget.warning', (event) => {
|
|
170
|
+
if (globals.quiet)
|
|
171
|
+
return;
|
|
172
|
+
spinner.stop();
|
|
173
|
+
const { usedPercent, remainingUsd } = event.payload;
|
|
174
|
+
const color = usedPercent >= 90 ? chalk.red : chalk.yellow;
|
|
175
|
+
console.log(color(`\nšø Budget: ${usedPercent}% used ($${remainingUsd.toFixed(2)} remaining)\n`));
|
|
176
|
+
});
|
|
177
|
+
eventBus.on('budget.exhausted', (event) => {
|
|
178
|
+
if (globals.quiet)
|
|
179
|
+
return;
|
|
180
|
+
spinner.stop();
|
|
181
|
+
const { totalSpentUsd } = event.payload;
|
|
182
|
+
console.log(chalk.red(`\nā Monthly budget exhausted ($${totalSpentUsd.toFixed(2)} spent)`));
|
|
183
|
+
console.log(chalk.dim(' All tasks are now routing to local Ollama. Run `cortex costs` for details.\n'));
|
|
184
|
+
});
|
|
185
|
+
if (!globals.quiet) {
|
|
186
|
+
console.log(chalk.dim(`Watching ${config.ingest.watchDirs.join(', ')} (Ctrl+C to stop)\n`));
|
|
187
|
+
}
|
|
188
|
+
// Handle shutdown ā force exit on signal
|
|
189
|
+
const shutdown = () => {
|
|
190
|
+
if (shuttingDown) {
|
|
191
|
+
// Second Ctrl+C ā force exit immediately
|
|
192
|
+
process.exit(1);
|
|
193
|
+
}
|
|
194
|
+
shuttingDown = true;
|
|
195
|
+
queue.length = 0; // Clear pending queue
|
|
196
|
+
if (!globals.quiet) {
|
|
197
|
+
spinner.stop();
|
|
198
|
+
console.log(chalk.dim('\n\nShutting down...'));
|
|
199
|
+
console.log(chalk.green(`\nā Session: ${ingestedCount} files, ${entityCount} entities, ${errorCount} errors`));
|
|
200
|
+
}
|
|
201
|
+
// Stop the watcher, close the store, then exit
|
|
202
|
+
watcher.stop()
|
|
203
|
+
.catch(() => { })
|
|
204
|
+
.finally(() => {
|
|
205
|
+
try {
|
|
206
|
+
store.close();
|
|
207
|
+
}
|
|
208
|
+
catch { /* ignore close errors */ }
|
|
209
|
+
process.exit(0);
|
|
210
|
+
});
|
|
211
|
+
// Force exit after 3 seconds if graceful shutdown hangs
|
|
212
|
+
// (e.g. in-flight API calls not completing)
|
|
213
|
+
const forceTimer = setTimeout(() => {
|
|
214
|
+
process.exit(0);
|
|
215
|
+
}, 3000);
|
|
216
|
+
forceTimer.unref();
|
|
217
|
+
};
|
|
218
|
+
process.on('SIGINT', shutdown);
|
|
219
|
+
process.on('SIGTERM', shutdown);
|
|
220
|
+
// Ensure raw Ctrl+C works even if ora or other libs intercept SIGINT
|
|
221
|
+
if (process.stdin.isTTY) {
|
|
222
|
+
process.stdin.setRawMode(true);
|
|
223
|
+
process.stdin.resume();
|
|
224
|
+
process.stdin.on('data', (data) => {
|
|
225
|
+
// Ctrl+C is byte 0x03
|
|
226
|
+
if (data[0] === 0x03) {
|
|
227
|
+
shutdown();
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
// Keep process alive ā this promise never resolves;
|
|
232
|
+
// the process exits via signal handlers calling process.exit()
|
|
233
|
+
await new Promise(() => { });
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAiDA,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;CAChB"}
|