@phmotad/fire-code 0.2.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.
- package/LICENSE +21 -0
- package/README.md +379 -0
- package/dist/agents/BaseAgent.d.ts +32 -0
- package/dist/agents/BaseAgent.d.ts.map +1 -0
- package/dist/agents/BaseAgent.js +19 -0
- package/dist/agents/BaseAgent.js.map +1 -0
- package/dist/agents/CodeAgent.d.ts +7 -0
- package/dist/agents/CodeAgent.d.ts.map +1 -0
- package/dist/agents/CodeAgent.js +130 -0
- package/dist/agents/CodeAgent.js.map +1 -0
- package/dist/cli/commands/corpus.d.ts +20 -0
- package/dist/cli/commands/corpus.d.ts.map +1 -0
- package/dist/cli/commands/corpus.js +60 -0
- package/dist/cli/commands/corpus.js.map +1 -0
- package/dist/cli/commands/daemon.d.ts +5 -0
- package/dist/cli/commands/daemon.d.ts.map +1 -0
- package/dist/cli/commands/daemon.js +79 -0
- package/dist/cli/commands/daemon.js.map +1 -0
- package/dist/cli/commands/dev.d.ts +2 -0
- package/dist/cli/commands/dev.d.ts.map +1 -0
- package/dist/cli/commands/dev.js +20 -0
- package/dist/cli/commands/dev.js.map +1 -0
- package/dist/cli/commands/index-cmd.d.ts +6 -0
- package/dist/cli/commands/index-cmd.d.ts.map +1 -0
- package/dist/cli/commands/index-cmd.js +57 -0
- package/dist/cli/commands/index-cmd.js.map +1 -0
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +173 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/install.d.ts +8 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +154 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/observe.d.ts +19 -0
- package/dist/cli/commands/observe.d.ts.map +1 -0
- package/dist/cli/commands/observe.js +86 -0
- package/dist/cli/commands/observe.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +162 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/defaults.d.ts +3 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +8 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/loader.d.ts +3 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +96 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/types.d.ts +436 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +73 -0
- package/dist/config/types.js.map +1 -0
- package/dist/core/ExecutionEngine.d.ts +26 -0
- package/dist/core/ExecutionEngine.d.ts.map +1 -0
- package/dist/core/ExecutionEngine.js +102 -0
- package/dist/core/ExecutionEngine.js.map +1 -0
- package/dist/core/TaskRouter.d.ts +3 -0
- package/dist/core/TaskRouter.d.ts.map +1 -0
- package/dist/core/TaskRouter.js +29 -0
- package/dist/core/TaskRouter.js.map +1 -0
- package/dist/daemon/DaemonClient.d.ts +8 -0
- package/dist/daemon/DaemonClient.d.ts.map +1 -0
- package/dist/daemon/DaemonClient.js +61 -0
- package/dist/daemon/DaemonClient.js.map +1 -0
- package/dist/daemon/DaemonServer.d.ts +17 -0
- package/dist/daemon/DaemonServer.d.ts.map +1 -0
- package/dist/daemon/DaemonServer.js +235 -0
- package/dist/daemon/DaemonServer.js.map +1 -0
- package/dist/db/DatabaseManager.d.ts +79 -0
- package/dist/db/DatabaseManager.d.ts.map +1 -0
- package/dist/db/DatabaseManager.js +212 -0
- package/dist/db/DatabaseManager.js.map +1 -0
- package/dist/db/schema.d.ts +2 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +127 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/git/CommitFormatter.d.ts +19 -0
- package/dist/git/CommitFormatter.d.ts.map +1 -0
- package/dist/git/CommitFormatter.js +47 -0
- package/dist/git/CommitFormatter.js.map +1 -0
- package/dist/git/GitManager.d.ts +28 -0
- package/dist/git/GitManager.d.ts.map +1 -0
- package/dist/git/GitManager.js +147 -0
- package/dist/git/GitManager.js.map +1 -0
- package/dist/graph/GraphStore.d.ts +54 -0
- package/dist/graph/GraphStore.d.ts.map +1 -0
- package/dist/graph/GraphStore.js +3 -0
- package/dist/graph/GraphStore.js.map +1 -0
- package/dist/graph/InMemoryGraphStore.d.ts +16 -0
- package/dist/graph/InMemoryGraphStore.d.ts.map +1 -0
- package/dist/graph/InMemoryGraphStore.js +75 -0
- package/dist/graph/InMemoryGraphStore.js.map +1 -0
- package/dist/graph/SQLiteGraphStore.d.ts +31 -0
- package/dist/graph/SQLiteGraphStore.d.ts.map +1 -0
- package/dist/graph/SQLiteGraphStore.js +158 -0
- package/dist/graph/SQLiteGraphStore.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/indexing/ASTParser.d.ts +32 -0
- package/dist/indexing/ASTParser.d.ts.map +1 -0
- package/dist/indexing/ASTParser.js +185 -0
- package/dist/indexing/ASTParser.js.map +1 -0
- package/dist/indexing/EmbeddingGenerator.d.ts +15 -0
- package/dist/indexing/EmbeddingGenerator.d.ts.map +1 -0
- package/dist/indexing/EmbeddingGenerator.js +66 -0
- package/dist/indexing/EmbeddingGenerator.js.map +1 -0
- package/dist/indexing/FileScanner.d.ts +10 -0
- package/dist/indexing/FileScanner.d.ts.map +1 -0
- package/dist/indexing/FileScanner.js +58 -0
- package/dist/indexing/FileScanner.js.map +1 -0
- package/dist/indexing/GraphBuilder.d.ts +4 -0
- package/dist/indexing/GraphBuilder.d.ts.map +1 -0
- package/dist/indexing/GraphBuilder.js +51 -0
- package/dist/indexing/GraphBuilder.js.map +1 -0
- package/dist/indexing/Indexer.d.ts +13 -0
- package/dist/indexing/Indexer.d.ts.map +1 -0
- package/dist/indexing/Indexer.js +68 -0
- package/dist/indexing/Indexer.js.map +1 -0
- package/dist/mcp/server.d.ts +2 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +155 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/corpus_search.d.ts +14 -0
- package/dist/mcp/tools/corpus_search.d.ts.map +1 -0
- package/dist/mcp/tools/corpus_search.js +33 -0
- package/dist/mcp/tools/corpus_search.js.map +1 -0
- package/dist/mcp/tools/execute.d.ts +19 -0
- package/dist/mcp/tools/execute.d.ts.map +1 -0
- package/dist/mcp/tools/execute.js +38 -0
- package/dist/mcp/tools/execute.js.map +1 -0
- package/dist/mcp/tools/get_context.d.ts +17 -0
- package/dist/mcp/tools/get_context.d.ts.map +1 -0
- package/dist/mcp/tools/get_context.js +50 -0
- package/dist/mcp/tools/get_context.js.map +1 -0
- package/dist/mcp/tools/get_graph.d.ts +26 -0
- package/dist/mcp/tools/get_graph.d.ts.map +1 -0
- package/dist/mcp/tools/get_graph.js +68 -0
- package/dist/mcp/tools/get_graph.js.map +1 -0
- package/dist/mcp/tools/observations.d.ts +23 -0
- package/dist/mcp/tools/observations.d.ts.map +1 -0
- package/dist/mcp/tools/observations.js +72 -0
- package/dist/mcp/tools/observations.js.map +1 -0
- package/dist/mcp/tools/search_code.d.ts +14 -0
- package/dist/mcp/tools/search_code.d.ts.map +1 -0
- package/dist/mcp/tools/search_code.js +38 -0
- package/dist/mcp/tools/search_code.js.map +1 -0
- package/dist/mcp/tools/smart_outline.d.ts +14 -0
- package/dist/mcp/tools/smart_outline.d.ts.map +1 -0
- package/dist/mcp/tools/smart_outline.js +99 -0
- package/dist/mcp/tools/smart_outline.js.map +1 -0
- package/dist/mcp/tools/smart_search.d.ts +20 -0
- package/dist/mcp/tools/smart_search.d.ts.map +1 -0
- package/dist/mcp/tools/smart_search.js +131 -0
- package/dist/mcp/tools/smart_search.js.map +1 -0
- package/dist/memory/FallbackMemory.d.ts +9 -0
- package/dist/memory/FallbackMemory.d.ts.map +1 -0
- package/dist/memory/FallbackMemory.js +70 -0
- package/dist/memory/FallbackMemory.js.map +1 -0
- package/dist/memory/HybridMemory.d.ts +20 -0
- package/dist/memory/HybridMemory.d.ts.map +1 -0
- package/dist/memory/HybridMemory.js +74 -0
- package/dist/memory/HybridMemory.js.map +1 -0
- package/dist/providers/AgentSDKProvider.d.ts +13 -0
- package/dist/providers/AgentSDKProvider.d.ts.map +1 -0
- package/dist/providers/AgentSDKProvider.js +64 -0
- package/dist/providers/AgentSDKProvider.js.map +1 -0
- package/dist/providers/AnthropicProvider.d.ts +11 -0
- package/dist/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/providers/AnthropicProvider.js +61 -0
- package/dist/providers/AnthropicProvider.js.map +1 -0
- package/dist/providers/LLMProvider.d.ts +12 -0
- package/dist/providers/LLMProvider.d.ts.map +1 -0
- package/dist/providers/LLMProvider.js +3 -0
- package/dist/providers/LLMProvider.js.map +1 -0
- package/dist/providers/OllamaProvider.d.ts +11 -0
- package/dist/providers/OllamaProvider.d.ts.map +1 -0
- package/dist/providers/OllamaProvider.js +71 -0
- package/dist/providers/OllamaProvider.js.map +1 -0
- package/dist/providers/OpenAIProvider.d.ts +11 -0
- package/dist/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/providers/OpenAIProvider.js +63 -0
- package/dist/providers/OpenAIProvider.js.map +1 -0
- package/dist/providers/OpenRouterProvider.d.ts +12 -0
- package/dist/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/providers/OpenRouterProvider.js +89 -0
- package/dist/providers/OpenRouterProvider.js.map +1 -0
- package/dist/providers/ProviderFactory.d.ts +4 -0
- package/dist/providers/ProviderFactory.d.ts.map +1 -0
- package/dist/providers/ProviderFactory.js +27 -0
- package/dist/providers/ProviderFactory.js.map +1 -0
- package/dist/services/CorpusService.d.ts +27 -0
- package/dist/services/CorpusService.d.ts.map +1 -0
- package/dist/services/CorpusService.js +142 -0
- package/dist/services/CorpusService.js.map +1 -0
- package/dist/services/ObservationService.d.ts +17 -0
- package/dist/services/ObservationService.d.ts.map +1 -0
- package/dist/services/ObservationService.js +101 -0
- package/dist/services/ObservationService.js.map +1 -0
- package/dist/services/SessionService.d.ts +10 -0
- package/dist/services/SessionService.d.ts.map +1 -0
- package/dist/services/SessionService.js +38 -0
- package/dist/services/SessionService.js.map +1 -0
- package/dist/services/SummarizationService.d.ts +8 -0
- package/dist/services/SummarizationService.d.ts.map +1 -0
- package/dist/services/SummarizationService.js +65 -0
- package/dist/services/SummarizationService.js.map +1 -0
- package/dist/utils/errors.d.ts +26 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +72 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +4 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +16 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/paths.d.ts +10 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +43 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/privacy.d.ts +5 -0
- package/dist/utils/privacy.d.ts.map +1 -0
- package/dist/utils/privacy.js +39 -0
- package/dist/utils/privacy.js.map +1 -0
- package/dist/utils/zodToJsonSchema.d.ts +23 -0
- package/dist/utils/zodToJsonSchema.d.ts.map +1 -0
- package/dist/utils/zodToJsonSchema.js +52 -0
- package/dist/utils/zodToJsonSchema.js.map +1 -0
- package/dist/vector/MemoryVectorStore.d.ts +16 -0
- package/dist/vector/MemoryVectorStore.d.ts.map +1 -0
- package/dist/vector/MemoryVectorStore.js +97 -0
- package/dist/vector/MemoryVectorStore.js.map +1 -0
- package/dist/vector/VectorStore.d.ts +19 -0
- package/dist/vector/VectorStore.d.ts.map +1 -0
- package/dist/vector/VectorStore.js +3 -0
- package/dist/vector/VectorStore.js.map +1 -0
- package/dist/vector/VectraVectorStore.d.ts +23 -0
- package/dist/vector/VectraVectorStore.d.ts.map +1 -0
- package/dist/vector/VectraVectorStore.js +93 -0
- package/dist/vector/VectraVectorStore.js.map +1 -0
- package/examples/firecode.config.example.ts +87 -0
- package/package.json +111 -0
- package/plugin/.claude-plugin/plugin.json +17 -0
- package/plugin/hooks/hooks.json +86 -0
- package/plugin/scripts/context-inject.js +208 -0
- package/plugin/scripts/smart-install.js +33 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskRouter.d.ts","sourceRoot":"","sources":["../../src/core/TaskRouter.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,KAAK,GAAG,UAAU,GAAG,MAAM,CAAC;AAqB/D,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,CAK1D"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.classifyTask = classifyTask;
|
|
4
|
+
const PATTERNS = [
|
|
5
|
+
{
|
|
6
|
+
type: 'fix',
|
|
7
|
+
patterns: [/\bfix\b/i, /\bbug\b/i, /\berror\b/i, /\bcrash\b/i, /\bissue\b/i, /\bbroken\b/i, /\bfailing\b/i],
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
type: 'refactor',
|
|
11
|
+
patterns: [/\brefactor\b/i, /\bclean\b/i, /\boptimize\b/i, /\bimprove\b/i, /\brewrite\b/i, /\bextract\b/i],
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
type: 'docs',
|
|
15
|
+
patterns: [/\bdoc(s|ument(ation)?)?\b/i, /\breadme\b/i, /\bcomment\b/i, /\bjsdoc\b/i, /\btsdoc\b/i, /\bupdate\s+doc/i],
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
type: 'feature',
|
|
19
|
+
patterns: [/\badd\b/i, /\bcreate\b/i, /\bimplement\b/i, /\bbuild\b/i, /\bnew\b/i, /\bfeature\b/i],
|
|
20
|
+
},
|
|
21
|
+
];
|
|
22
|
+
function classifyTask(description) {
|
|
23
|
+
for (const { type, patterns } of PATTERNS) {
|
|
24
|
+
if (patterns.some((p) => p.test(description)))
|
|
25
|
+
return type;
|
|
26
|
+
}
|
|
27
|
+
return 'feature';
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=TaskRouter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskRouter.js","sourceRoot":"","sources":["../../src/core/TaskRouter.ts"],"names":[],"mappings":";;AAqBA,oCAKC;AAxBD,MAAM,QAAQ,GAAkD;IAC9D;QACE,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,CAAC;KAC5G;IACD;QACE,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,CAAC,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC;KAC3G;IACD;QACE,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,CAAC,4BAA4B,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,CAAC;KACvH;IACD;QACE,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,CAAC;KAClG;CACF,CAAC;AAEF,SAAgB,YAAY,CAAC,WAAmB;IAC9C,KAAK,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1C,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IAC7D,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function daemonHealth(cwd: string): Promise<{
|
|
2
|
+
ok: boolean;
|
|
3
|
+
uptime?: number;
|
|
4
|
+
pid?: number;
|
|
5
|
+
}>;
|
|
6
|
+
export declare function daemonIndex(cwd: string, mode?: 'full' | 'lazy'): Promise<boolean>;
|
|
7
|
+
export declare function daemonContext(cwd: string, query: string, topK?: number): Promise<string | null>;
|
|
8
|
+
//# sourceMappingURL=DaemonClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DaemonClient.d.ts","sourceRoot":"","sources":["../../src/daemon/DaemonClient.ts"],"names":[],"mappings":"AAgBA,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAQvG;AAED,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,GAAG,MAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAY/F;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,SAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAYhG"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.daemonHealth = daemonHealth;
|
|
4
|
+
exports.daemonIndex = daemonIndex;
|
|
5
|
+
exports.daemonContext = daemonContext;
|
|
6
|
+
const DaemonServer_js_1 = require("./DaemonServer.js");
|
|
7
|
+
const BASE_URL = `http://${DaemonServer_js_1.DAEMON_HOST}:${DaemonServer_js_1.DAEMON_PORT}`;
|
|
8
|
+
const TIMEOUT = 5_000;
|
|
9
|
+
async function fetchDaemon(path, opts = {}) {
|
|
10
|
+
const controller = new AbortController();
|
|
11
|
+
const timer = setTimeout(() => controller.abort(), TIMEOUT);
|
|
12
|
+
try {
|
|
13
|
+
const res = await fetch(`${BASE_URL}${path}`, { ...opts, signal: controller.signal });
|
|
14
|
+
return res.json();
|
|
15
|
+
}
|
|
16
|
+
finally {
|
|
17
|
+
clearTimeout(timer);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
async function daemonHealth(cwd) {
|
|
21
|
+
if (!(0, DaemonServer_js_1.isDaemonRunning)(cwd))
|
|
22
|
+
return { ok: false };
|
|
23
|
+
try {
|
|
24
|
+
const data = await fetchDaemon('/health');
|
|
25
|
+
return data;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return { ok: false };
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async function daemonIndex(cwd, mode = 'lazy') {
|
|
32
|
+
if (!(0, DaemonServer_js_1.isDaemonRunning)(cwd))
|
|
33
|
+
return false;
|
|
34
|
+
try {
|
|
35
|
+
const data = await fetchDaemon('/index', {
|
|
36
|
+
method: 'POST',
|
|
37
|
+
headers: { 'Content-Type': 'application/json' },
|
|
38
|
+
body: JSON.stringify({ cwd, mode }),
|
|
39
|
+
});
|
|
40
|
+
return data.ok;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async function daemonContext(cwd, query, topK = 5) {
|
|
47
|
+
if (!(0, DaemonServer_js_1.isDaemonRunning)(cwd))
|
|
48
|
+
return null;
|
|
49
|
+
try {
|
|
50
|
+
const data = await fetchDaemon('/context', {
|
|
51
|
+
method: 'POST',
|
|
52
|
+
headers: { 'Content-Type': 'application/json' },
|
|
53
|
+
body: JSON.stringify({ cwd, query, topK }),
|
|
54
|
+
});
|
|
55
|
+
return data.ok ? data.context : null;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=DaemonClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DaemonClient.js","sourceRoot":"","sources":["../../src/daemon/DaemonClient.ts"],"names":[],"mappings":";;AAgBA,oCAQC;AAED,kCAYC;AAED,sCAYC;AApDD,uDAA8E;AAE9E,MAAM,QAAQ,GAAG,UAAU,6BAAW,IAAI,6BAAW,EAAE,CAAC;AACxD,MAAM,OAAO,GAAG,KAAK,CAAC;AAEtB,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,OAAoB,EAAE;IAC7D,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,GAAG,IAAI,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACtF,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,YAAY,CAAC,GAAW;IAC5C,IAAI,CAAC,IAAA,iCAAe,EAAC,GAAG,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,SAAS,CAAiD,CAAC;QAC1F,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,GAAW,EAAE,OAAwB,MAAM;IAC3E,IAAI,CAAC,IAAA,iCAAe,EAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE;YACvC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;SACpC,CAAoB,CAAC;QACtB,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,GAAW,EAAE,KAAa,EAAE,IAAI,GAAG,CAAC;IACtE,IAAI,CAAC,IAAA,iCAAe,EAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,UAAU,EAAE;YACzC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SAC3C,CAAqC,CAAC;QACvC,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare const DAEMON_PORT = 37778;
|
|
2
|
+
export declare const DAEMON_HOST = "127.0.0.1";
|
|
3
|
+
export declare class DaemonServer {
|
|
4
|
+
private cwd;
|
|
5
|
+
private app;
|
|
6
|
+
private server;
|
|
7
|
+
private startTime;
|
|
8
|
+
constructor(cwd: string);
|
|
9
|
+
private setupRoutes;
|
|
10
|
+
start(): Promise<void>;
|
|
11
|
+
stop(): void;
|
|
12
|
+
}
|
|
13
|
+
export declare function getDaemonPidFile(cwd: string): string;
|
|
14
|
+
export declare function writeDaemonPid(cwd: string, pid: number): void;
|
|
15
|
+
export declare function readDaemonPid(cwd: string): number | null;
|
|
16
|
+
export declare function isDaemonRunning(cwd: string): boolean;
|
|
17
|
+
//# sourceMappingURL=DaemonServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DaemonServer.d.ts","sourceRoot":"","sources":["../../src/daemon/DaemonServer.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,WAAW,QAAQ,CAAC;AACjC,eAAO,MAAM,WAAW,cAAc,CAAC;AA2GvC,qBAAa,YAAY;IAKX,OAAO,CAAC,GAAG;IAJvB,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,SAAS,CAAc;gBAEX,GAAG,EAAE,MAAM;IAK/B,OAAO,CAAC,WAAW;IAgEb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAW5B,IAAI,IAAI,IAAI;CAIb;AAID,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIpD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAE7D;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKxD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CASpD"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DaemonServer = exports.DAEMON_HOST = exports.DAEMON_PORT = void 0;
|
|
7
|
+
exports.getDaemonPidFile = getDaemonPidFile;
|
|
8
|
+
exports.writeDaemonPid = writeDaemonPid;
|
|
9
|
+
exports.readDaemonPid = readDaemonPid;
|
|
10
|
+
exports.isDaemonRunning = isDaemonRunning;
|
|
11
|
+
const express_1 = __importDefault(require("express"));
|
|
12
|
+
const http_1 = require("http");
|
|
13
|
+
const fs_1 = require("fs");
|
|
14
|
+
const path_1 = require("path");
|
|
15
|
+
const logger_js_1 = require("../utils/logger.js");
|
|
16
|
+
const DatabaseManager_js_1 = require("../db/DatabaseManager.js");
|
|
17
|
+
const paths_js_1 = require("../utils/paths.js");
|
|
18
|
+
const get_context_js_1 = require("../mcp/tools/get_context.js");
|
|
19
|
+
exports.DAEMON_PORT = 37778;
|
|
20
|
+
exports.DAEMON_HOST = '127.0.0.1';
|
|
21
|
+
// ── Web Dashboard HTML ─────────────────────────────────────────────────────
|
|
22
|
+
function buildDashboardHtml(db, project, cwd) {
|
|
23
|
+
const sessions = db.getSessions(project, 10);
|
|
24
|
+
const observations = db.getObservations({ project, limit: 20 });
|
|
25
|
+
const corpusItems = db.getCorpus({ project, limit: 10 });
|
|
26
|
+
const obsHtml = observations.map(o => {
|
|
27
|
+
const icons = { change: '✏️', bugfix: '🐛', feature: '✨', refactor: '♻️', decision: '🧭', discovery: '🔍' };
|
|
28
|
+
const icon = icons[o.type] ?? '•';
|
|
29
|
+
const file = o.file_path ? `<small class="file">${o.file_path}</small>` : '';
|
|
30
|
+
const date = new Date(o.created_at).toLocaleString();
|
|
31
|
+
return `<li class="obs obs-${o.type}">
|
|
32
|
+
<span class="icon">${icon}</span>
|
|
33
|
+
<div class="obs-body">
|
|
34
|
+
<strong>${o.summary}</strong>${file}
|
|
35
|
+
<small class="date">${date}</small>
|
|
36
|
+
</div>
|
|
37
|
+
</li>`;
|
|
38
|
+
}).join('');
|
|
39
|
+
const sessionHtml = sessions.map(s => {
|
|
40
|
+
const start = new Date(s.started_at).toLocaleString();
|
|
41
|
+
const badge = s.status === 'active' ? '<span class="badge active">active</span>' : '<span class="badge">done</span>';
|
|
42
|
+
return `<li class="session">${badge} <strong>${s.id.slice(0, 8)}</strong> <small>${start}</small></li>`;
|
|
43
|
+
}).join('');
|
|
44
|
+
const corpusHtml = corpusItems.map(c => `<li class="corpus-item">
|
|
45
|
+
<strong>${c.title}</strong>
|
|
46
|
+
<small class="file">${c.source ?? ''}</small>
|
|
47
|
+
<p>${c.content.slice(0, 120)}…</p>
|
|
48
|
+
</li>`).join('') || '<li>No corpus items yet. Run <code>fire-code corpus build</code></li>';
|
|
49
|
+
return `<!DOCTYPE html>
|
|
50
|
+
<html lang="en">
|
|
51
|
+
<head>
|
|
52
|
+
<meta charset="UTF-8">
|
|
53
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
54
|
+
<title>🔥 Fire Code — ${project}</title>
|
|
55
|
+
<style>
|
|
56
|
+
:root { --bg:#0d1117; --surface:#161b22; --border:#30363d; --text:#c9d1d9; --accent:#ff6b35; --green:#3fb950; --blue:#58a6ff; }
|
|
57
|
+
* { box-sizing: border-box; margin: 0; padding: 0; }
|
|
58
|
+
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", monospace; background: var(--bg); color: var(--text); padding: 24px; }
|
|
59
|
+
h1 { color: var(--accent); font-size: 1.4rem; margin-bottom: 4px; }
|
|
60
|
+
.subtitle { color: #8b949e; font-size: .85rem; margin-bottom: 24px; }
|
|
61
|
+
.grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
|
|
62
|
+
@media(max-width:720px) { .grid { grid-template-columns: 1fr; } }
|
|
63
|
+
.card { background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: 16px; }
|
|
64
|
+
.card h2 { font-size: .9rem; text-transform: uppercase; letter-spacing: .05em; color: #8b949e; margin-bottom: 12px; }
|
|
65
|
+
ul { list-style: none; }
|
|
66
|
+
.obs { display: flex; gap: 8px; padding: 8px 0; border-bottom: 1px solid var(--border); }
|
|
67
|
+
.obs:last-child { border-bottom: none; }
|
|
68
|
+
.icon { font-size: 1.1rem; flex-shrink: 0; margin-top: 2px; }
|
|
69
|
+
.obs-body { display: flex; flex-direction: column; gap: 2px; }
|
|
70
|
+
.obs-body strong { font-size: .88rem; }
|
|
71
|
+
.file, .date { font-size: .75rem; color: #8b949e; }
|
|
72
|
+
.session { padding: 6px 0; border-bottom: 1px solid var(--border); font-size: .85rem; display: flex; gap: 8px; align-items: center; }
|
|
73
|
+
.session:last-child { border-bottom: none; }
|
|
74
|
+
.badge { background: var(--border); padding: 1px 6px; border-radius: 12px; font-size: .7rem; }
|
|
75
|
+
.badge.active { background: #1a4731; color: var(--green); }
|
|
76
|
+
.corpus-item { padding: 8px 0; border-bottom: 1px solid var(--border); }
|
|
77
|
+
.corpus-item:last-child { border-bottom: none; }
|
|
78
|
+
.corpus-item strong { font-size: .88rem; }
|
|
79
|
+
.corpus-item p { font-size: .8rem; color: #8b949e; margin-top: 4px; }
|
|
80
|
+
code { background: var(--border); padding: 1px 5px; border-radius: 4px; font-size: .8rem; }
|
|
81
|
+
.status-bar { display: flex; gap: 16px; background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: 12px 16px; margin-bottom: 16px; font-size: .82rem; }
|
|
82
|
+
.status-item strong { color: var(--accent); }
|
|
83
|
+
.full-width { grid-column: 1 / -1; }
|
|
84
|
+
</style>
|
|
85
|
+
</head>
|
|
86
|
+
<body>
|
|
87
|
+
<h1>🔥 Fire Code</h1>
|
|
88
|
+
<p class="subtitle">Project: <strong>${project}</strong> · ${cwd}</p>
|
|
89
|
+
|
|
90
|
+
<div class="status-bar">
|
|
91
|
+
<div class="status-item">Observations: <strong>${observations.length}</strong></div>
|
|
92
|
+
<div class="status-item">Sessions: <strong>${sessions.length}</strong></div>
|
|
93
|
+
<div class="status-item">Corpus: <strong>${corpusItems.length}</strong> items</div>
|
|
94
|
+
<div class="status-item">Daemon: <strong style="color:var(--green)">running</strong></div>
|
|
95
|
+
</div>
|
|
96
|
+
|
|
97
|
+
<div class="grid">
|
|
98
|
+
<div class="card">
|
|
99
|
+
<h2>Recent Observations</h2>
|
|
100
|
+
<ul>${obsHtml || '<li style="color:#8b949e;padding:8px 0">No observations yet</li>'}</ul>
|
|
101
|
+
</div>
|
|
102
|
+
<div class="card">
|
|
103
|
+
<h2>Sessions</h2>
|
|
104
|
+
<ul>${sessionHtml || '<li style="color:#8b949e;padding:8px 0">No sessions yet</li>'}</ul>
|
|
105
|
+
</div>
|
|
106
|
+
<div class="card full-width">
|
|
107
|
+
<h2>Knowledge Corpus</h2>
|
|
108
|
+
<ul>${corpusHtml}</ul>
|
|
109
|
+
</div>
|
|
110
|
+
</div>
|
|
111
|
+
|
|
112
|
+
<script>
|
|
113
|
+
setTimeout(() => location.reload(), 30000);
|
|
114
|
+
</script>
|
|
115
|
+
</body>
|
|
116
|
+
</html>`;
|
|
117
|
+
}
|
|
118
|
+
// ── Server ─────────────────────────────────────────────────────────────────
|
|
119
|
+
class DaemonServer {
|
|
120
|
+
cwd;
|
|
121
|
+
app = (0, express_1.default)();
|
|
122
|
+
server = null;
|
|
123
|
+
startTime = Date.now();
|
|
124
|
+
constructor(cwd) {
|
|
125
|
+
this.cwd = cwd;
|
|
126
|
+
this.app.use(express_1.default.json({ limit: '10mb' }));
|
|
127
|
+
this.setupRoutes();
|
|
128
|
+
}
|
|
129
|
+
setupRoutes() {
|
|
130
|
+
const app = this.app;
|
|
131
|
+
app.get('/health', (_req, res) => {
|
|
132
|
+
res.json({ ok: true, uptime: Date.now() - this.startTime, pid: process.pid });
|
|
133
|
+
});
|
|
134
|
+
app.get('/', (req, res) => {
|
|
135
|
+
const cwd = req.query.cwd ?? this.cwd;
|
|
136
|
+
const firedotDir = (0, paths_js_1.getFireCodeDir)(cwd);
|
|
137
|
+
if (!(0, fs_1.existsSync)(firedotDir)) {
|
|
138
|
+
return res.send('<h1>No Fire Code index found. Run <code>fire-code index</code></h1>');
|
|
139
|
+
}
|
|
140
|
+
const project = req.query.project ?? require('path').basename(cwd);
|
|
141
|
+
const db = DatabaseManager_js_1.DatabaseManager.getInstance(firedotDir);
|
|
142
|
+
res.send(buildDashboardHtml(db, project, cwd));
|
|
143
|
+
});
|
|
144
|
+
app.post('/index', async (req, res) => {
|
|
145
|
+
const { cwd = this.cwd, mode = 'lazy' } = req.body;
|
|
146
|
+
try {
|
|
147
|
+
const { execSync } = await import('child_process');
|
|
148
|
+
execSync(`npx fire-code index --mode=${mode} --cwd "${cwd}"`, { timeout: 60_000 });
|
|
149
|
+
res.json({ ok: true, cwd });
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
res.status(500).json({ ok: false, error: String(err) });
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
app.post('/context', async (req, res) => {
|
|
156
|
+
const { query, cwd = this.cwd, k = 5 } = req.body;
|
|
157
|
+
try {
|
|
158
|
+
const context = await (0, get_context_js_1.getContextTool)({ query, k, includeGraph: true }, cwd);
|
|
159
|
+
res.json({ ok: true, context });
|
|
160
|
+
}
|
|
161
|
+
catch (err) {
|
|
162
|
+
res.status(500).json({ ok: false, error: String(err) });
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
app.get('/observations', (req, res) => {
|
|
166
|
+
const cwd = req.query.cwd ?? this.cwd;
|
|
167
|
+
const firedotDir = (0, paths_js_1.getFireCodeDir)(cwd);
|
|
168
|
+
if (!(0, fs_1.existsSync)(firedotDir))
|
|
169
|
+
return res.json({ ok: true, results: [] });
|
|
170
|
+
const db = DatabaseManager_js_1.DatabaseManager.getInstance(firedotDir);
|
|
171
|
+
const results = db.getObservations({
|
|
172
|
+
query: req.query.q,
|
|
173
|
+
limit: Number(req.query.limit ?? 20),
|
|
174
|
+
});
|
|
175
|
+
res.json({ ok: true, results });
|
|
176
|
+
});
|
|
177
|
+
app.get('/corpus', (req, res) => {
|
|
178
|
+
const cwd = req.query.cwd ?? this.cwd;
|
|
179
|
+
const firedotDir = (0, paths_js_1.getFireCodeDir)(cwd);
|
|
180
|
+
if (!(0, fs_1.existsSync)(firedotDir))
|
|
181
|
+
return res.json({ ok: true, results: [] });
|
|
182
|
+
const db = DatabaseManager_js_1.DatabaseManager.getInstance(firedotDir);
|
|
183
|
+
const results = db.getCorpus({
|
|
184
|
+
query: req.query.q,
|
|
185
|
+
limit: Number(req.query.limit ?? 10),
|
|
186
|
+
});
|
|
187
|
+
res.json({ ok: true, results });
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
async start() {
|
|
191
|
+
return new Promise((resolve, reject) => {
|
|
192
|
+
this.server = (0, http_1.createServer)(this.app);
|
|
193
|
+
this.server.listen(exports.DAEMON_PORT, exports.DAEMON_HOST, () => {
|
|
194
|
+
logger_js_1.logger.info({ port: exports.DAEMON_PORT }, 'Fire Code daemon started');
|
|
195
|
+
resolve();
|
|
196
|
+
});
|
|
197
|
+
this.server.on('error', reject);
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
stop() {
|
|
201
|
+
this.server?.close();
|
|
202
|
+
logger_js_1.logger.info('Fire Code daemon stopped');
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
exports.DaemonServer = DaemonServer;
|
|
206
|
+
// ── PID helpers ────────────────────────────────────────────────────────────
|
|
207
|
+
function getDaemonPidFile(cwd) {
|
|
208
|
+
const dir = (0, paths_js_1.getFireCodeDir)(cwd);
|
|
209
|
+
if (!(0, fs_1.existsSync)(dir))
|
|
210
|
+
(0, fs_1.mkdirSync)(dir, { recursive: true });
|
|
211
|
+
return (0, path_1.join)(dir, 'daemon.pid');
|
|
212
|
+
}
|
|
213
|
+
function writeDaemonPid(cwd, pid) {
|
|
214
|
+
(0, fs_1.writeFileSync)(getDaemonPidFile(cwd), String(pid), 'utf8');
|
|
215
|
+
}
|
|
216
|
+
function readDaemonPid(cwd) {
|
|
217
|
+
const pidFile = getDaemonPidFile(cwd);
|
|
218
|
+
if (!(0, fs_1.existsSync)(pidFile))
|
|
219
|
+
return null;
|
|
220
|
+
const pid = parseInt((0, fs_1.readFileSync)(pidFile, 'utf8').trim(), 10);
|
|
221
|
+
return isNaN(pid) ? null : pid;
|
|
222
|
+
}
|
|
223
|
+
function isDaemonRunning(cwd) {
|
|
224
|
+
const pid = readDaemonPid(cwd);
|
|
225
|
+
if (!pid)
|
|
226
|
+
return false;
|
|
227
|
+
try {
|
|
228
|
+
process.kill(pid, 0);
|
|
229
|
+
return true;
|
|
230
|
+
}
|
|
231
|
+
catch {
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=DaemonServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DaemonServer.js","sourceRoot":"","sources":["../../src/daemon/DaemonServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
import { SQLiteGraphStore } from '../graph/SQLiteGraphStore.js';
|
|
3
|
+
export type ObservationType = 'change' | 'bugfix' | 'feature' | 'refactor' | 'decision' | 'discovery';
|
|
4
|
+
export interface Session {
|
|
5
|
+
id: string;
|
|
6
|
+
project: string;
|
|
7
|
+
cwd: string;
|
|
8
|
+
started_at: number;
|
|
9
|
+
ended_at: number | null;
|
|
10
|
+
status: 'active' | 'completed' | 'abandoned';
|
|
11
|
+
}
|
|
12
|
+
export interface Observation {
|
|
13
|
+
id: number;
|
|
14
|
+
session_id: string;
|
|
15
|
+
project: string;
|
|
16
|
+
type: ObservationType;
|
|
17
|
+
tool: string | null;
|
|
18
|
+
file_path: string | null;
|
|
19
|
+
summary: string;
|
|
20
|
+
detail: string | null;
|
|
21
|
+
created_at: number;
|
|
22
|
+
}
|
|
23
|
+
export interface Summary {
|
|
24
|
+
id: number;
|
|
25
|
+
session_id: string;
|
|
26
|
+
project: string;
|
|
27
|
+
content: string;
|
|
28
|
+
created_at: number;
|
|
29
|
+
}
|
|
30
|
+
export interface CorpusItem {
|
|
31
|
+
id: number;
|
|
32
|
+
project: string;
|
|
33
|
+
title: string;
|
|
34
|
+
content: string;
|
|
35
|
+
source: string | null;
|
|
36
|
+
tags: string;
|
|
37
|
+
private: number;
|
|
38
|
+
created_at: number;
|
|
39
|
+
updated_at: number;
|
|
40
|
+
}
|
|
41
|
+
export interface ObservationFilter {
|
|
42
|
+
project?: string;
|
|
43
|
+
type?: ObservationType;
|
|
44
|
+
file_path?: string;
|
|
45
|
+
query?: string;
|
|
46
|
+
limit?: number;
|
|
47
|
+
offset?: number;
|
|
48
|
+
dateStart?: number;
|
|
49
|
+
dateEnd?: number;
|
|
50
|
+
}
|
|
51
|
+
export declare class DatabaseManager {
|
|
52
|
+
readonly db: Database.Database;
|
|
53
|
+
private constructor();
|
|
54
|
+
static getInstance(firecdoDir: string): DatabaseManager;
|
|
55
|
+
static reset(): void;
|
|
56
|
+
createSession(id: string, project: string, cwd: string): Session;
|
|
57
|
+
getSession(id: string): Session | null;
|
|
58
|
+
endSession(id: string, status?: 'completed' | 'abandoned'): void;
|
|
59
|
+
getActiveSession(project: string): Session | null;
|
|
60
|
+
addObservation(obs: Omit<Observation, 'id' | 'created_at'>): number;
|
|
61
|
+
getObservations(filter?: ObservationFilter): Observation[];
|
|
62
|
+
getObservationsByIds(ids: number[]): Observation[];
|
|
63
|
+
getRecentContext(project: string, limit?: number): string;
|
|
64
|
+
addSummary(session_id: string, project: string, content: string): number;
|
|
65
|
+
upsertFileIndex(project: string, filePath: string, functions: string[], classes: string[], imports: string[]): void;
|
|
66
|
+
getSessions(project: string, limit?: number): Session[];
|
|
67
|
+
upsertCorpus(project: string, title: string, content: string, source?: string, tags?: string[], isPrivate?: boolean): number;
|
|
68
|
+
getCorpus(filter: {
|
|
69
|
+
project?: string;
|
|
70
|
+
query?: string;
|
|
71
|
+
tags?: string[];
|
|
72
|
+
limit?: number;
|
|
73
|
+
includePrivate?: boolean;
|
|
74
|
+
}): CorpusItem[];
|
|
75
|
+
deleteCorpus(project: string, title: string): void;
|
|
76
|
+
getGraphStore(project: string): SQLiteGraphStore;
|
|
77
|
+
close(): void;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=DatabaseManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatabaseManager.d.ts","sourceRoot":"","sources":["../../src/db/DatabaseManager.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAItC,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;AAEtG,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,WAAW,CAAC;CAC9C;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAID,qBAAa,eAAe;IAE1B,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAE/B,OAAO;IAKP,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe;IASvD,MAAM,CAAC,KAAK,IAAI,IAAI;IASpB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAQhE,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAItC,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,GAAE,WAAW,GAAG,WAAyB,GAAG,IAAI;IAK7E,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAQjD,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,YAAY,CAAC,GAAG,MAAM;IAQnE,eAAe,CAAC,MAAM,GAAE,iBAAsB,GAAG,WAAW,EAAE;IAsC9D,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE;IAQlD,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,MAAM;IAiCrD,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IASxE,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAcnH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,EAAE;IAQnD,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,SAAS,UAAQ,GAAG,MAAM;IAgB1H,SAAS,CAAC,MAAM,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,UAAU,EAAE;IA0BhI,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAMlD,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB;IAIhD,KAAK,IAAI,IAAI;CAId"}
|