@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.
Files changed (248) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +379 -0
  3. package/dist/agents/BaseAgent.d.ts +32 -0
  4. package/dist/agents/BaseAgent.d.ts.map +1 -0
  5. package/dist/agents/BaseAgent.js +19 -0
  6. package/dist/agents/BaseAgent.js.map +1 -0
  7. package/dist/agents/CodeAgent.d.ts +7 -0
  8. package/dist/agents/CodeAgent.d.ts.map +1 -0
  9. package/dist/agents/CodeAgent.js +130 -0
  10. package/dist/agents/CodeAgent.js.map +1 -0
  11. package/dist/cli/commands/corpus.d.ts +20 -0
  12. package/dist/cli/commands/corpus.d.ts.map +1 -0
  13. package/dist/cli/commands/corpus.js +60 -0
  14. package/dist/cli/commands/corpus.js.map +1 -0
  15. package/dist/cli/commands/daemon.d.ts +5 -0
  16. package/dist/cli/commands/daemon.d.ts.map +1 -0
  17. package/dist/cli/commands/daemon.js +79 -0
  18. package/dist/cli/commands/daemon.js.map +1 -0
  19. package/dist/cli/commands/dev.d.ts +2 -0
  20. package/dist/cli/commands/dev.d.ts.map +1 -0
  21. package/dist/cli/commands/dev.js +20 -0
  22. package/dist/cli/commands/dev.js.map +1 -0
  23. package/dist/cli/commands/index-cmd.d.ts +6 -0
  24. package/dist/cli/commands/index-cmd.d.ts.map +1 -0
  25. package/dist/cli/commands/index-cmd.js +57 -0
  26. package/dist/cli/commands/index-cmd.js.map +1 -0
  27. package/dist/cli/commands/init.d.ts +2 -0
  28. package/dist/cli/commands/init.d.ts.map +1 -0
  29. package/dist/cli/commands/init.js +173 -0
  30. package/dist/cli/commands/init.js.map +1 -0
  31. package/dist/cli/commands/install.d.ts +8 -0
  32. package/dist/cli/commands/install.d.ts.map +1 -0
  33. package/dist/cli/commands/install.js +154 -0
  34. package/dist/cli/commands/install.js.map +1 -0
  35. package/dist/cli/commands/observe.d.ts +19 -0
  36. package/dist/cli/commands/observe.d.ts.map +1 -0
  37. package/dist/cli/commands/observe.js +86 -0
  38. package/dist/cli/commands/observe.js.map +1 -0
  39. package/dist/cli/index.d.ts +3 -0
  40. package/dist/cli/index.d.ts.map +1 -0
  41. package/dist/cli/index.js +162 -0
  42. package/dist/cli/index.js.map +1 -0
  43. package/dist/config/defaults.d.ts +3 -0
  44. package/dist/config/defaults.d.ts.map +1 -0
  45. package/dist/config/defaults.js +8 -0
  46. package/dist/config/defaults.js.map +1 -0
  47. package/dist/config/loader.d.ts +3 -0
  48. package/dist/config/loader.d.ts.map +1 -0
  49. package/dist/config/loader.js +96 -0
  50. package/dist/config/loader.js.map +1 -0
  51. package/dist/config/types.d.ts +436 -0
  52. package/dist/config/types.d.ts.map +1 -0
  53. package/dist/config/types.js +73 -0
  54. package/dist/config/types.js.map +1 -0
  55. package/dist/core/ExecutionEngine.d.ts +26 -0
  56. package/dist/core/ExecutionEngine.d.ts.map +1 -0
  57. package/dist/core/ExecutionEngine.js +102 -0
  58. package/dist/core/ExecutionEngine.js.map +1 -0
  59. package/dist/core/TaskRouter.d.ts +3 -0
  60. package/dist/core/TaskRouter.d.ts.map +1 -0
  61. package/dist/core/TaskRouter.js +29 -0
  62. package/dist/core/TaskRouter.js.map +1 -0
  63. package/dist/daemon/DaemonClient.d.ts +8 -0
  64. package/dist/daemon/DaemonClient.d.ts.map +1 -0
  65. package/dist/daemon/DaemonClient.js +61 -0
  66. package/dist/daemon/DaemonClient.js.map +1 -0
  67. package/dist/daemon/DaemonServer.d.ts +17 -0
  68. package/dist/daemon/DaemonServer.d.ts.map +1 -0
  69. package/dist/daemon/DaemonServer.js +235 -0
  70. package/dist/daemon/DaemonServer.js.map +1 -0
  71. package/dist/db/DatabaseManager.d.ts +79 -0
  72. package/dist/db/DatabaseManager.d.ts.map +1 -0
  73. package/dist/db/DatabaseManager.js +212 -0
  74. package/dist/db/DatabaseManager.js.map +1 -0
  75. package/dist/db/schema.d.ts +2 -0
  76. package/dist/db/schema.d.ts.map +1 -0
  77. package/dist/db/schema.js +127 -0
  78. package/dist/db/schema.js.map +1 -0
  79. package/dist/git/CommitFormatter.d.ts +19 -0
  80. package/dist/git/CommitFormatter.d.ts.map +1 -0
  81. package/dist/git/CommitFormatter.js +47 -0
  82. package/dist/git/CommitFormatter.js.map +1 -0
  83. package/dist/git/GitManager.d.ts +28 -0
  84. package/dist/git/GitManager.d.ts.map +1 -0
  85. package/dist/git/GitManager.js +147 -0
  86. package/dist/git/GitManager.js.map +1 -0
  87. package/dist/graph/GraphStore.d.ts +54 -0
  88. package/dist/graph/GraphStore.d.ts.map +1 -0
  89. package/dist/graph/GraphStore.js +3 -0
  90. package/dist/graph/GraphStore.js.map +1 -0
  91. package/dist/graph/InMemoryGraphStore.d.ts +16 -0
  92. package/dist/graph/InMemoryGraphStore.d.ts.map +1 -0
  93. package/dist/graph/InMemoryGraphStore.js +75 -0
  94. package/dist/graph/InMemoryGraphStore.js.map +1 -0
  95. package/dist/graph/SQLiteGraphStore.d.ts +31 -0
  96. package/dist/graph/SQLiteGraphStore.d.ts.map +1 -0
  97. package/dist/graph/SQLiteGraphStore.js +158 -0
  98. package/dist/graph/SQLiteGraphStore.js.map +1 -0
  99. package/dist/index.d.ts +16 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +32 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/indexing/ASTParser.d.ts +32 -0
  104. package/dist/indexing/ASTParser.d.ts.map +1 -0
  105. package/dist/indexing/ASTParser.js +185 -0
  106. package/dist/indexing/ASTParser.js.map +1 -0
  107. package/dist/indexing/EmbeddingGenerator.d.ts +15 -0
  108. package/dist/indexing/EmbeddingGenerator.d.ts.map +1 -0
  109. package/dist/indexing/EmbeddingGenerator.js +66 -0
  110. package/dist/indexing/EmbeddingGenerator.js.map +1 -0
  111. package/dist/indexing/FileScanner.d.ts +10 -0
  112. package/dist/indexing/FileScanner.d.ts.map +1 -0
  113. package/dist/indexing/FileScanner.js +58 -0
  114. package/dist/indexing/FileScanner.js.map +1 -0
  115. package/dist/indexing/GraphBuilder.d.ts +4 -0
  116. package/dist/indexing/GraphBuilder.d.ts.map +1 -0
  117. package/dist/indexing/GraphBuilder.js +51 -0
  118. package/dist/indexing/GraphBuilder.js.map +1 -0
  119. package/dist/indexing/Indexer.d.ts +13 -0
  120. package/dist/indexing/Indexer.d.ts.map +1 -0
  121. package/dist/indexing/Indexer.js +68 -0
  122. package/dist/indexing/Indexer.js.map +1 -0
  123. package/dist/mcp/server.d.ts +2 -0
  124. package/dist/mcp/server.d.ts.map +1 -0
  125. package/dist/mcp/server.js +155 -0
  126. package/dist/mcp/server.js.map +1 -0
  127. package/dist/mcp/tools/corpus_search.d.ts +14 -0
  128. package/dist/mcp/tools/corpus_search.d.ts.map +1 -0
  129. package/dist/mcp/tools/corpus_search.js +33 -0
  130. package/dist/mcp/tools/corpus_search.js.map +1 -0
  131. package/dist/mcp/tools/execute.d.ts +19 -0
  132. package/dist/mcp/tools/execute.d.ts.map +1 -0
  133. package/dist/mcp/tools/execute.js +38 -0
  134. package/dist/mcp/tools/execute.js.map +1 -0
  135. package/dist/mcp/tools/get_context.d.ts +17 -0
  136. package/dist/mcp/tools/get_context.d.ts.map +1 -0
  137. package/dist/mcp/tools/get_context.js +50 -0
  138. package/dist/mcp/tools/get_context.js.map +1 -0
  139. package/dist/mcp/tools/get_graph.d.ts +26 -0
  140. package/dist/mcp/tools/get_graph.d.ts.map +1 -0
  141. package/dist/mcp/tools/get_graph.js +68 -0
  142. package/dist/mcp/tools/get_graph.js.map +1 -0
  143. package/dist/mcp/tools/observations.d.ts +23 -0
  144. package/dist/mcp/tools/observations.d.ts.map +1 -0
  145. package/dist/mcp/tools/observations.js +72 -0
  146. package/dist/mcp/tools/observations.js.map +1 -0
  147. package/dist/mcp/tools/search_code.d.ts +14 -0
  148. package/dist/mcp/tools/search_code.d.ts.map +1 -0
  149. package/dist/mcp/tools/search_code.js +38 -0
  150. package/dist/mcp/tools/search_code.js.map +1 -0
  151. package/dist/mcp/tools/smart_outline.d.ts +14 -0
  152. package/dist/mcp/tools/smart_outline.d.ts.map +1 -0
  153. package/dist/mcp/tools/smart_outline.js +99 -0
  154. package/dist/mcp/tools/smart_outline.js.map +1 -0
  155. package/dist/mcp/tools/smart_search.d.ts +20 -0
  156. package/dist/mcp/tools/smart_search.d.ts.map +1 -0
  157. package/dist/mcp/tools/smart_search.js +131 -0
  158. package/dist/mcp/tools/smart_search.js.map +1 -0
  159. package/dist/memory/FallbackMemory.d.ts +9 -0
  160. package/dist/memory/FallbackMemory.d.ts.map +1 -0
  161. package/dist/memory/FallbackMemory.js +70 -0
  162. package/dist/memory/FallbackMemory.js.map +1 -0
  163. package/dist/memory/HybridMemory.d.ts +20 -0
  164. package/dist/memory/HybridMemory.d.ts.map +1 -0
  165. package/dist/memory/HybridMemory.js +74 -0
  166. package/dist/memory/HybridMemory.js.map +1 -0
  167. package/dist/providers/AgentSDKProvider.d.ts +13 -0
  168. package/dist/providers/AgentSDKProvider.d.ts.map +1 -0
  169. package/dist/providers/AgentSDKProvider.js +64 -0
  170. package/dist/providers/AgentSDKProvider.js.map +1 -0
  171. package/dist/providers/AnthropicProvider.d.ts +11 -0
  172. package/dist/providers/AnthropicProvider.d.ts.map +1 -0
  173. package/dist/providers/AnthropicProvider.js +61 -0
  174. package/dist/providers/AnthropicProvider.js.map +1 -0
  175. package/dist/providers/LLMProvider.d.ts +12 -0
  176. package/dist/providers/LLMProvider.d.ts.map +1 -0
  177. package/dist/providers/LLMProvider.js +3 -0
  178. package/dist/providers/LLMProvider.js.map +1 -0
  179. package/dist/providers/OllamaProvider.d.ts +11 -0
  180. package/dist/providers/OllamaProvider.d.ts.map +1 -0
  181. package/dist/providers/OllamaProvider.js +71 -0
  182. package/dist/providers/OllamaProvider.js.map +1 -0
  183. package/dist/providers/OpenAIProvider.d.ts +11 -0
  184. package/dist/providers/OpenAIProvider.d.ts.map +1 -0
  185. package/dist/providers/OpenAIProvider.js +63 -0
  186. package/dist/providers/OpenAIProvider.js.map +1 -0
  187. package/dist/providers/OpenRouterProvider.d.ts +12 -0
  188. package/dist/providers/OpenRouterProvider.d.ts.map +1 -0
  189. package/dist/providers/OpenRouterProvider.js +89 -0
  190. package/dist/providers/OpenRouterProvider.js.map +1 -0
  191. package/dist/providers/ProviderFactory.d.ts +4 -0
  192. package/dist/providers/ProviderFactory.d.ts.map +1 -0
  193. package/dist/providers/ProviderFactory.js +27 -0
  194. package/dist/providers/ProviderFactory.js.map +1 -0
  195. package/dist/services/CorpusService.d.ts +27 -0
  196. package/dist/services/CorpusService.d.ts.map +1 -0
  197. package/dist/services/CorpusService.js +142 -0
  198. package/dist/services/CorpusService.js.map +1 -0
  199. package/dist/services/ObservationService.d.ts +17 -0
  200. package/dist/services/ObservationService.d.ts.map +1 -0
  201. package/dist/services/ObservationService.js +101 -0
  202. package/dist/services/ObservationService.js.map +1 -0
  203. package/dist/services/SessionService.d.ts +10 -0
  204. package/dist/services/SessionService.d.ts.map +1 -0
  205. package/dist/services/SessionService.js +38 -0
  206. package/dist/services/SessionService.js.map +1 -0
  207. package/dist/services/SummarizationService.d.ts +8 -0
  208. package/dist/services/SummarizationService.d.ts.map +1 -0
  209. package/dist/services/SummarizationService.js +65 -0
  210. package/dist/services/SummarizationService.js.map +1 -0
  211. package/dist/utils/errors.d.ts +26 -0
  212. package/dist/utils/errors.d.ts.map +1 -0
  213. package/dist/utils/errors.js +72 -0
  214. package/dist/utils/errors.js.map +1 -0
  215. package/dist/utils/logger.d.ts +4 -0
  216. package/dist/utils/logger.d.ts.map +1 -0
  217. package/dist/utils/logger.js +16 -0
  218. package/dist/utils/logger.js.map +1 -0
  219. package/dist/utils/paths.d.ts +10 -0
  220. package/dist/utils/paths.d.ts.map +1 -0
  221. package/dist/utils/paths.js +43 -0
  222. package/dist/utils/paths.js.map +1 -0
  223. package/dist/utils/privacy.d.ts +5 -0
  224. package/dist/utils/privacy.d.ts.map +1 -0
  225. package/dist/utils/privacy.js +39 -0
  226. package/dist/utils/privacy.js.map +1 -0
  227. package/dist/utils/zodToJsonSchema.d.ts +23 -0
  228. package/dist/utils/zodToJsonSchema.d.ts.map +1 -0
  229. package/dist/utils/zodToJsonSchema.js +52 -0
  230. package/dist/utils/zodToJsonSchema.js.map +1 -0
  231. package/dist/vector/MemoryVectorStore.d.ts +16 -0
  232. package/dist/vector/MemoryVectorStore.d.ts.map +1 -0
  233. package/dist/vector/MemoryVectorStore.js +97 -0
  234. package/dist/vector/MemoryVectorStore.js.map +1 -0
  235. package/dist/vector/VectorStore.d.ts +19 -0
  236. package/dist/vector/VectorStore.d.ts.map +1 -0
  237. package/dist/vector/VectorStore.js +3 -0
  238. package/dist/vector/VectorStore.js.map +1 -0
  239. package/dist/vector/VectraVectorStore.d.ts +23 -0
  240. package/dist/vector/VectraVectorStore.d.ts.map +1 -0
  241. package/dist/vector/VectraVectorStore.js +93 -0
  242. package/dist/vector/VectraVectorStore.js.map +1 -0
  243. package/examples/firecode.config.example.ts +87 -0
  244. package/package.json +111 -0
  245. package/plugin/.claude-plugin/plugin.json +17 -0
  246. package/plugin/hooks/hooks.json +86 -0
  247. package/plugin/scripts/context-inject.js +208 -0
  248. package/plugin/scripts/smart-install.js +33 -0
@@ -0,0 +1,3 @@
1
+ export type TaskType = 'feature' | 'fix' | 'refactor' | 'docs';
2
+ export declare function classifyTask(description: string): TaskType;
3
+ //# sourceMappingURL=TaskRouter.d.ts.map
@@ -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> &nbsp;·&nbsp; ${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":"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"}