forge-server 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (412) hide show
  1. package/.claude/hooks/worktree-create.sh +64 -0
  2. package/.claude/hooks/worktree-remove.sh +57 -0
  3. package/.claude/settings.local.json +29 -0
  4. package/.forge/knowledge/conventions.yaml +1 -0
  5. package/.forge/knowledge/decisions.yaml +1 -0
  6. package/.forge/knowledge/gotchas.yaml +1 -0
  7. package/.forge/knowledge/patterns.yaml +1 -0
  8. package/.forge/manifest.yaml +6 -0
  9. package/CLAUDE.md +144 -0
  10. package/bin/setup-forge.sh +132 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +553 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/context/codebase.d.ts +57 -0
  16. package/dist/context/codebase.d.ts.map +1 -0
  17. package/dist/context/codebase.js +301 -0
  18. package/dist/context/codebase.js.map +1 -0
  19. package/dist/context/injector.d.ts +147 -0
  20. package/dist/context/injector.d.ts.map +1 -0
  21. package/dist/context/injector.js +533 -0
  22. package/dist/context/injector.js.map +1 -0
  23. package/dist/context/memory.d.ts +32 -0
  24. package/dist/context/memory.d.ts.map +1 -0
  25. package/dist/context/memory.js +140 -0
  26. package/dist/context/memory.js.map +1 -0
  27. package/dist/context/session-index.d.ts +54 -0
  28. package/dist/context/session-index.d.ts.map +1 -0
  29. package/dist/context/session-index.js +265 -0
  30. package/dist/context/session-index.js.map +1 -0
  31. package/dist/context/session.d.ts +42 -0
  32. package/dist/context/session.d.ts.map +1 -0
  33. package/dist/context/session.js +121 -0
  34. package/dist/context/session.js.map +1 -0
  35. package/dist/index.d.ts +3 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +37 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/ingestion/chunker.d.ts +19 -0
  40. package/dist/ingestion/chunker.d.ts.map +1 -0
  41. package/dist/ingestion/chunker.js +189 -0
  42. package/dist/ingestion/chunker.js.map +1 -0
  43. package/dist/ingestion/embedder.d.ts +45 -0
  44. package/dist/ingestion/embedder.d.ts.map +1 -0
  45. package/dist/ingestion/embedder.js +152 -0
  46. package/dist/ingestion/embedder.js.map +1 -0
  47. package/dist/ingestion/git-analyzer.d.ts +77 -0
  48. package/dist/ingestion/git-analyzer.d.ts.map +1 -0
  49. package/dist/ingestion/git-analyzer.js +437 -0
  50. package/dist/ingestion/git-analyzer.js.map +1 -0
  51. package/dist/ingestion/indexer.d.ts +79 -0
  52. package/dist/ingestion/indexer.d.ts.map +1 -0
  53. package/dist/ingestion/indexer.js +766 -0
  54. package/dist/ingestion/indexer.js.map +1 -0
  55. package/dist/ingestion/markdown-chunker.d.ts +19 -0
  56. package/dist/ingestion/markdown-chunker.d.ts.map +1 -0
  57. package/dist/ingestion/markdown-chunker.js +243 -0
  58. package/dist/ingestion/markdown-chunker.js.map +1 -0
  59. package/dist/ingestion/markdown-knowledge.d.ts +21 -0
  60. package/dist/ingestion/markdown-knowledge.d.ts.map +1 -0
  61. package/dist/ingestion/markdown-knowledge.js +129 -0
  62. package/dist/ingestion/markdown-knowledge.js.map +1 -0
  63. package/dist/ingestion/parser.d.ts +20 -0
  64. package/dist/ingestion/parser.d.ts.map +1 -0
  65. package/dist/ingestion/parser.js +429 -0
  66. package/dist/ingestion/parser.js.map +1 -0
  67. package/dist/ingestion/watcher.d.ts +28 -0
  68. package/dist/ingestion/watcher.d.ts.map +1 -0
  69. package/dist/ingestion/watcher.js +147 -0
  70. package/dist/ingestion/watcher.js.map +1 -0
  71. package/dist/knowledge/hydrator.d.ts +37 -0
  72. package/dist/knowledge/hydrator.d.ts.map +1 -0
  73. package/dist/knowledge/hydrator.js +220 -0
  74. package/dist/knowledge/hydrator.js.map +1 -0
  75. package/dist/knowledge/registry.d.ts +129 -0
  76. package/dist/knowledge/registry.d.ts.map +1 -0
  77. package/dist/knowledge/registry.js +361 -0
  78. package/dist/knowledge/registry.js.map +1 -0
  79. package/dist/knowledge/search.d.ts +114 -0
  80. package/dist/knowledge/search.d.ts.map +1 -0
  81. package/dist/knowledge/search.js +428 -0
  82. package/dist/knowledge/search.js.map +1 -0
  83. package/dist/knowledge/store.d.ts +76 -0
  84. package/dist/knowledge/store.d.ts.map +1 -0
  85. package/dist/knowledge/store.js +230 -0
  86. package/dist/knowledge/store.js.map +1 -0
  87. package/dist/learning/confidence.d.ts +30 -0
  88. package/dist/learning/confidence.d.ts.map +1 -0
  89. package/dist/learning/confidence.js +165 -0
  90. package/dist/learning/confidence.js.map +1 -0
  91. package/dist/learning/patterns.d.ts +52 -0
  92. package/dist/learning/patterns.d.ts.map +1 -0
  93. package/dist/learning/patterns.js +290 -0
  94. package/dist/learning/patterns.js.map +1 -0
  95. package/dist/learning/trajectory.d.ts +55 -0
  96. package/dist/learning/trajectory.d.ts.map +1 -0
  97. package/dist/learning/trajectory.js +200 -0
  98. package/dist/learning/trajectory.js.map +1 -0
  99. package/dist/memory/memory-compat.d.ts +100 -0
  100. package/dist/memory/memory-compat.d.ts.map +1 -0
  101. package/dist/memory/memory-compat.js +146 -0
  102. package/dist/memory/memory-compat.js.map +1 -0
  103. package/dist/memory/observation-store.d.ts +57 -0
  104. package/dist/memory/observation-store.d.ts.map +1 -0
  105. package/dist/memory/observation-store.js +154 -0
  106. package/dist/memory/observation-store.js.map +1 -0
  107. package/dist/memory/session-tracker.d.ts +81 -0
  108. package/dist/memory/session-tracker.d.ts.map +1 -0
  109. package/dist/memory/session-tracker.js +262 -0
  110. package/dist/memory/session-tracker.js.map +1 -0
  111. package/dist/pipeline/engine.d.ts +179 -0
  112. package/dist/pipeline/engine.d.ts.map +1 -0
  113. package/dist/pipeline/engine.js +691 -0
  114. package/dist/pipeline/engine.js.map +1 -0
  115. package/dist/pipeline/events.d.ts +54 -0
  116. package/dist/pipeline/events.d.ts.map +1 -0
  117. package/dist/pipeline/events.js +157 -0
  118. package/dist/pipeline/events.js.map +1 -0
  119. package/dist/pipeline/parallel.d.ts +83 -0
  120. package/dist/pipeline/parallel.d.ts.map +1 -0
  121. package/dist/pipeline/parallel.js +277 -0
  122. package/dist/pipeline/parallel.js.map +1 -0
  123. package/dist/pipeline/state-machine.d.ts +65 -0
  124. package/dist/pipeline/state-machine.d.ts.map +1 -0
  125. package/dist/pipeline/state-machine.js +176 -0
  126. package/dist/pipeline/state-machine.js.map +1 -0
  127. package/dist/query/graph-queries.d.ts +84 -0
  128. package/dist/query/graph-queries.d.ts.map +1 -0
  129. package/dist/query/graph-queries.js +216 -0
  130. package/dist/query/graph-queries.js.map +1 -0
  131. package/dist/query/hybrid-search.d.ts +34 -0
  132. package/dist/query/hybrid-search.d.ts.map +1 -0
  133. package/dist/query/hybrid-search.js +263 -0
  134. package/dist/query/hybrid-search.js.map +1 -0
  135. package/dist/query/intent-detector.d.ts +35 -0
  136. package/dist/query/intent-detector.d.ts.map +1 -0
  137. package/dist/query/intent-detector.js +115 -0
  138. package/dist/query/intent-detector.js.map +1 -0
  139. package/dist/query/ranking.d.ts +57 -0
  140. package/dist/query/ranking.d.ts.map +1 -0
  141. package/dist/query/ranking.js +109 -0
  142. package/dist/query/ranking.js.map +1 -0
  143. package/dist/server.d.ts +3 -0
  144. package/dist/server.d.ts.map +1 -0
  145. package/dist/server.js +291 -0
  146. package/dist/server.js.map +1 -0
  147. package/dist/storage/falkordb-store.d.ts +73 -0
  148. package/dist/storage/falkordb-store.d.ts.map +1 -0
  149. package/dist/storage/falkordb-store.js +346 -0
  150. package/dist/storage/falkordb-store.js.map +1 -0
  151. package/dist/storage/file-cache.d.ts +32 -0
  152. package/dist/storage/file-cache.d.ts.map +1 -0
  153. package/dist/storage/file-cache.js +115 -0
  154. package/dist/storage/file-cache.js.map +1 -0
  155. package/dist/storage/interfaces.d.ts +151 -0
  156. package/dist/storage/interfaces.d.ts.map +1 -0
  157. package/dist/storage/interfaces.js +7 -0
  158. package/dist/storage/interfaces.js.map +1 -0
  159. package/dist/storage/qdrant-store.d.ts +110 -0
  160. package/dist/storage/qdrant-store.d.ts.map +1 -0
  161. package/dist/storage/qdrant-store.js +467 -0
  162. package/dist/storage/qdrant-store.js.map +1 -0
  163. package/dist/storage/schema.d.ts +4 -0
  164. package/dist/storage/schema.d.ts.map +1 -0
  165. package/dist/storage/schema.js +136 -0
  166. package/dist/storage/schema.js.map +1 -0
  167. package/dist/storage/sqlite.d.ts +35 -0
  168. package/dist/storage/sqlite.d.ts.map +1 -0
  169. package/dist/storage/sqlite.js +132 -0
  170. package/dist/storage/sqlite.js.map +1 -0
  171. package/dist/tools/collaboration-tools.d.ts +111 -0
  172. package/dist/tools/collaboration-tools.d.ts.map +1 -0
  173. package/dist/tools/collaboration-tools.js +174 -0
  174. package/dist/tools/collaboration-tools.js.map +1 -0
  175. package/dist/tools/context-tools.d.ts +293 -0
  176. package/dist/tools/context-tools.d.ts.map +1 -0
  177. package/dist/tools/context-tools.js +437 -0
  178. package/dist/tools/context-tools.js.map +1 -0
  179. package/dist/tools/graph-tools.d.ts +129 -0
  180. package/dist/tools/graph-tools.d.ts.map +1 -0
  181. package/dist/tools/graph-tools.js +237 -0
  182. package/dist/tools/graph-tools.js.map +1 -0
  183. package/dist/tools/ingestion-tools.d.ts +96 -0
  184. package/dist/tools/ingestion-tools.d.ts.map +1 -0
  185. package/dist/tools/ingestion-tools.js +90 -0
  186. package/dist/tools/ingestion-tools.js.map +1 -0
  187. package/dist/tools/learning-tools.d.ts +168 -0
  188. package/dist/tools/learning-tools.d.ts.map +1 -0
  189. package/dist/tools/learning-tools.js +158 -0
  190. package/dist/tools/learning-tools.js.map +1 -0
  191. package/dist/tools/memory-tools.d.ts +183 -0
  192. package/dist/tools/memory-tools.d.ts.map +1 -0
  193. package/dist/tools/memory-tools.js +197 -0
  194. package/dist/tools/memory-tools.js.map +1 -0
  195. package/dist/tools/phase-tools.d.ts +954 -0
  196. package/dist/tools/phase-tools.d.ts.map +1 -0
  197. package/dist/tools/phase-tools.js +1215 -0
  198. package/dist/tools/phase-tools.js.map +1 -0
  199. package/dist/tools/pipeline-tools.d.ts +140 -0
  200. package/dist/tools/pipeline-tools.d.ts.map +1 -0
  201. package/dist/tools/pipeline-tools.js +162 -0
  202. package/dist/tools/pipeline-tools.js.map +1 -0
  203. package/dist/tools/registration-tools.d.ts +220 -0
  204. package/dist/tools/registration-tools.d.ts.map +1 -0
  205. package/dist/tools/registration-tools.js +391 -0
  206. package/dist/tools/registration-tools.js.map +1 -0
  207. package/dist/util/circuit-breaker.d.ts +75 -0
  208. package/dist/util/circuit-breaker.d.ts.map +1 -0
  209. package/dist/util/circuit-breaker.js +159 -0
  210. package/dist/util/circuit-breaker.js.map +1 -0
  211. package/dist/util/config.d.ts +23 -0
  212. package/dist/util/config.d.ts.map +1 -0
  213. package/dist/util/config.js +164 -0
  214. package/dist/util/config.js.map +1 -0
  215. package/dist/util/logger.d.ts +13 -0
  216. package/dist/util/logger.d.ts.map +1 -0
  217. package/dist/util/logger.js +45 -0
  218. package/dist/util/logger.js.map +1 -0
  219. package/dist/util/token-counter.d.ts +24 -0
  220. package/dist/util/token-counter.d.ts.map +1 -0
  221. package/dist/util/token-counter.js +48 -0
  222. package/dist/util/token-counter.js.map +1 -0
  223. package/dist/util/types.d.ts +525 -0
  224. package/dist/util/types.d.ts.map +1 -0
  225. package/dist/util/types.js +5 -0
  226. package/dist/util/types.js.map +1 -0
  227. package/docker-compose.yml +20 -0
  228. package/docs/plans/2026-02-27-swarm-coordination/architecture.md +203 -0
  229. package/docs/plans/2026-02-27-swarm-coordination/vision.md +57 -0
  230. package/docs/plans/completed/2026-02-26-forge-plugin-bundling/architecture.md +1 -0
  231. package/docs/plans/completed/2026-02-26-forge-plugin-bundling/vision.md +300 -0
  232. package/docs/plans/completed/2026-02-27-forge-swarm-learning/architecture.md +480 -0
  233. package/docs/plans/completed/2026-02-27-forge-swarm-learning/verification-checklist.md +462 -0
  234. package/docs/plans/completed/2026-02-27-git-history-atlassian/git-jira-plan.md +181 -0
  235. package/package.json +39 -0
  236. package/plugin/.claude-plugin/plugin.json +8 -0
  237. package/plugin/.mcp.json +15 -0
  238. package/plugin/README.md +134 -0
  239. package/plugin/agents/architect.md +367 -0
  240. package/plugin/agents/backend-specialist.md +263 -0
  241. package/plugin/agents/brainstormer.md +122 -0
  242. package/plugin/agents/data-specialist.md +266 -0
  243. package/plugin/agents/designer.md +408 -0
  244. package/plugin/agents/frontend-specialist.md +241 -0
  245. package/plugin/agents/inspector.md +406 -0
  246. package/plugin/agents/knowledge-keeper.md +443 -0
  247. package/plugin/agents/platform-engineer.md +326 -0
  248. package/plugin/agents/product-manager.md +268 -0
  249. package/plugin/agents/product-owner.md +438 -0
  250. package/plugin/agents/pulse-checker.md +73 -0
  251. package/plugin/agents/qa-strategist.md +500 -0
  252. package/plugin/agents/self-improver.md +310 -0
  253. package/plugin/agents/strategist.md +360 -0
  254. package/plugin/agents/supervisor.md +380 -0
  255. package/plugin/commands/brainstorm.md +25 -0
  256. package/plugin/commands/forge.md +88 -0
  257. package/plugin/docs/atlassian-integration.md +110 -0
  258. package/plugin/docs/workflow.md +126 -0
  259. package/plugin/skills/agent-development/.skillfish.json +10 -0
  260. package/plugin/skills/agent-development/SKILL.md +415 -0
  261. package/plugin/skills/agent-development/examples/agent-creation-prompt.md +238 -0
  262. package/plugin/skills/agent-development/examples/complete-agent-examples.md +427 -0
  263. package/plugin/skills/agent-development/references/agent-creation-system-prompt.md +207 -0
  264. package/plugin/skills/agent-development/references/system-prompt-design.md +411 -0
  265. package/plugin/skills/agent-development/references/triggering-examples.md +491 -0
  266. package/plugin/skills/agent-development/scripts/validate-agent.sh +217 -0
  267. package/plugin/skills/agent-handoff/SKILL.md +335 -0
  268. package/plugin/skills/anti-stub/SKILL.md +317 -0
  269. package/plugin/skills/brainstorm/SKILL.md +31 -0
  270. package/plugin/skills/debugging/SKILL.md +276 -0
  271. package/plugin/skills/fix/SKILL.md +62 -0
  272. package/plugin/skills/frontend-design/.skillfish.json +10 -0
  273. package/plugin/skills/frontend-design/SKILL.md +42 -0
  274. package/plugin/skills/gotchas/SKILL.md +61 -0
  275. package/plugin/skills/graph-orchestrator/SKILL.md +38 -0
  276. package/plugin/skills/history/SKILL.md +58 -0
  277. package/plugin/skills/impact/SKILL.md +59 -0
  278. package/plugin/skills/implementation-execution/SKILL.md +291 -0
  279. package/plugin/skills/index-repo/SKILL.md +55 -0
  280. package/plugin/skills/interviewing/SKILL.md +225 -0
  281. package/plugin/skills/knowledge-curation/SKILL.md +393 -0
  282. package/plugin/skills/learn/SKILL.md +69 -0
  283. package/plugin/skills/mcp-integration/.skillfish.json +10 -0
  284. package/plugin/skills/mcp-integration/SKILL.md +554 -0
  285. package/plugin/skills/mcp-integration/examples/http-server.json +20 -0
  286. package/plugin/skills/mcp-integration/examples/sse-server.json +19 -0
  287. package/plugin/skills/mcp-integration/examples/stdio-server.json +26 -0
  288. package/plugin/skills/mcp-integration/references/authentication.md +549 -0
  289. package/plugin/skills/mcp-integration/references/server-types.md +536 -0
  290. package/plugin/skills/mcp-integration/references/tool-usage.md +538 -0
  291. package/plugin/skills/nestjs/.skillfish.json +10 -0
  292. package/plugin/skills/nestjs/SKILL.md +669 -0
  293. package/plugin/skills/nestjs/drizzle-reference.md +1894 -0
  294. package/plugin/skills/nestjs/reference.md +1447 -0
  295. package/plugin/skills/nestjs/workflow-optimization.md +229 -0
  296. package/plugin/skills/parallel-dispatch/SKILL.md +308 -0
  297. package/plugin/skills/project-discovery/SKILL.md +304 -0
  298. package/plugin/skills/search/SKILL.md +56 -0
  299. package/plugin/skills/security-audit/SKILL.md +362 -0
  300. package/plugin/skills/skill-development/.skillfish.json +10 -0
  301. package/plugin/skills/skill-development/SKILL.md +637 -0
  302. package/plugin/skills/skill-development/references/skill-creator-original.md +209 -0
  303. package/plugin/skills/tdd/SKILL.md +273 -0
  304. package/plugin/skills/terminal-presentation/SKILL.md +395 -0
  305. package/plugin/skills/test-strategy/SKILL.md +365 -0
  306. package/plugin/skills/verification-protocol/SKILL.md +256 -0
  307. package/plugin/skills/visual-explainer/CHANGELOG.md +97 -0
  308. package/plugin/skills/visual-explainer/LICENSE +21 -0
  309. package/plugin/skills/visual-explainer/README.md +137 -0
  310. package/plugin/skills/visual-explainer/SKILL.md +352 -0
  311. package/plugin/skills/visual-explainer/banner.png +0 -0
  312. package/plugin/skills/visual-explainer/package.json +11 -0
  313. package/plugin/skills/visual-explainer/prompts/diff-review.md +68 -0
  314. package/plugin/skills/visual-explainer/prompts/fact-check.md +63 -0
  315. package/plugin/skills/visual-explainer/prompts/generate-slides.md +18 -0
  316. package/plugin/skills/visual-explainer/prompts/generate-web-diagram.md +10 -0
  317. package/plugin/skills/visual-explainer/prompts/plan-review.md +86 -0
  318. package/plugin/skills/visual-explainer/prompts/project-recap.md +61 -0
  319. package/plugin/skills/visual-explainer/references/css-patterns.md +1188 -0
  320. package/plugin/skills/visual-explainer/references/libraries.md +470 -0
  321. package/plugin/skills/visual-explainer/references/responsive-nav.md +212 -0
  322. package/plugin/skills/visual-explainer/references/slide-patterns.md +1403 -0
  323. package/plugin/skills/visual-explainer/templates/architecture.html +596 -0
  324. package/plugin/skills/visual-explainer/templates/data-table.html +540 -0
  325. package/plugin/skills/visual-explainer/templates/mermaid-flowchart.html +435 -0
  326. package/plugin/skills/visual-explainer/templates/slide-deck.html +913 -0
  327. package/src/cli.ts +655 -0
  328. package/src/context/.gitkeep +0 -0
  329. package/src/context/codebase.ts +393 -0
  330. package/src/context/injector.ts +797 -0
  331. package/src/context/memory.ts +187 -0
  332. package/src/context/session-index.ts +327 -0
  333. package/src/context/session.ts +152 -0
  334. package/src/index.ts +47 -0
  335. package/src/ingestion/.gitkeep +0 -0
  336. package/src/ingestion/chunker.ts +277 -0
  337. package/src/ingestion/embedder.ts +167 -0
  338. package/src/ingestion/git-analyzer.ts +545 -0
  339. package/src/ingestion/indexer.ts +984 -0
  340. package/src/ingestion/markdown-chunker.ts +337 -0
  341. package/src/ingestion/markdown-knowledge.ts +175 -0
  342. package/src/ingestion/parser.ts +475 -0
  343. package/src/ingestion/watcher.ts +182 -0
  344. package/src/knowledge/.gitkeep +0 -0
  345. package/src/knowledge/hydrator.ts +246 -0
  346. package/src/knowledge/registry.ts +463 -0
  347. package/src/knowledge/search.ts +565 -0
  348. package/src/knowledge/store.ts +262 -0
  349. package/src/learning/.gitkeep +0 -0
  350. package/src/learning/confidence.ts +193 -0
  351. package/src/learning/patterns.ts +360 -0
  352. package/src/learning/trajectory.ts +268 -0
  353. package/src/memory/.gitkeep +0 -0
  354. package/src/memory/memory-compat.ts +233 -0
  355. package/src/memory/observation-store.ts +224 -0
  356. package/src/memory/session-tracker.ts +332 -0
  357. package/src/pipeline/.gitkeep +0 -0
  358. package/src/pipeline/engine.ts +1139 -0
  359. package/src/pipeline/events.ts +253 -0
  360. package/src/pipeline/parallel.ts +394 -0
  361. package/src/pipeline/state-machine.ts +199 -0
  362. package/src/query/.gitkeep +0 -0
  363. package/src/query/graph-queries.ts +262 -0
  364. package/src/query/hybrid-search.ts +337 -0
  365. package/src/query/intent-detector.ts +131 -0
  366. package/src/query/ranking.ts +161 -0
  367. package/src/server.ts +352 -0
  368. package/src/storage/.gitkeep +0 -0
  369. package/src/storage/falkordb-store.ts +388 -0
  370. package/src/storage/file-cache.ts +141 -0
  371. package/src/storage/interfaces.ts +201 -0
  372. package/src/storage/qdrant-store.ts +557 -0
  373. package/src/storage/schema.ts +139 -0
  374. package/src/storage/sqlite.ts +168 -0
  375. package/src/tools/.gitkeep +0 -0
  376. package/src/tools/collaboration-tools.ts +208 -0
  377. package/src/tools/context-tools.ts +493 -0
  378. package/src/tools/graph-tools.ts +295 -0
  379. package/src/tools/ingestion-tools.ts +122 -0
  380. package/src/tools/learning-tools.ts +181 -0
  381. package/src/tools/memory-tools.ts +234 -0
  382. package/src/tools/phase-tools.ts +1452 -0
  383. package/src/tools/pipeline-tools.ts +188 -0
  384. package/src/tools/registration-tools.ts +450 -0
  385. package/src/util/.gitkeep +0 -0
  386. package/src/util/circuit-breaker.ts +193 -0
  387. package/src/util/config.ts +177 -0
  388. package/src/util/logger.ts +53 -0
  389. package/src/util/token-counter.ts +52 -0
  390. package/src/util/types.ts +710 -0
  391. package/tests/context/.gitkeep +0 -0
  392. package/tests/integration/.gitkeep +0 -0
  393. package/tests/knowledge/.gitkeep +0 -0
  394. package/tests/learning/.gitkeep +0 -0
  395. package/tests/pipeline/.gitkeep +0 -0
  396. package/tests/tools/.gitkeep +0 -0
  397. package/tsconfig.json +21 -0
  398. package/vitest.config.ts +10 -0
  399. package/vscode-extension/.vscodeignore +7 -0
  400. package/vscode-extension/README.md +43 -0
  401. package/vscode-extension/out/edge-collector.js +274 -0
  402. package/vscode-extension/out/edge-collector.js.map +1 -0
  403. package/vscode-extension/out/extension.js +264 -0
  404. package/vscode-extension/out/extension.js.map +1 -0
  405. package/vscode-extension/out/forge-client.js +318 -0
  406. package/vscode-extension/out/forge-client.js.map +1 -0
  407. package/vscode-extension/package-lock.json +59 -0
  408. package/vscode-extension/package.json +71 -0
  409. package/vscode-extension/src/edge-collector.ts +320 -0
  410. package/vscode-extension/src/extension.ts +269 -0
  411. package/vscode-extension/src/forge-client.ts +364 -0
  412. package/vscode-extension/tsconfig.json +19 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-compat.d.ts","sourceRoot":"","sources":["../../src/memory/memory-compat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Claude-flow / Ruflo memory compatibility layer.
3
+ * Translates between the two memory schemas and the unified ObservationPayload format.
4
+ * Ensures memory_store, memory_retrieve, memory_search work with both parameter shapes.
5
+ *
6
+ * Claude-flow schema: { content, type, category, tags, metadata, importance, ttl }
7
+ * Ruflo schema: { key, value, namespace, tags, ttl }
8
+ */
9
+ /**
10
+ * Detect whether input follows ruflo-style (key+value) or claude-flow-style (content).
11
+ */
12
+ export function detectMemorySource(input) {
13
+ if (input.key !== undefined && input.value !== undefined) {
14
+ return 'ruflo';
15
+ }
16
+ if (input.content !== undefined || input.type !== undefined || input.category !== undefined) {
17
+ return 'claude-flow';
18
+ }
19
+ // Ambiguous - use key presence as tiebreaker
20
+ if (input.key !== undefined) {
21
+ return 'ruflo';
22
+ }
23
+ return 'claude-flow';
24
+ }
25
+ /**
26
+ * Normalize a memory_store input into unified format regardless of schema origin.
27
+ */
28
+ export function normalizeMemoryInput(input) {
29
+ const source = detectMemorySource(input);
30
+ let content;
31
+ let key;
32
+ let originalValue;
33
+ if (source === 'ruflo') {
34
+ key = input.key ?? `mem-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;
35
+ originalValue = input.value;
36
+ content = typeof input.value === 'string'
37
+ ? input.value
38
+ : JSON.stringify(input.value ?? '');
39
+ }
40
+ else {
41
+ // claude-flow style
42
+ key = input.key ?? null;
43
+ content = input.content ?? '';
44
+ originalValue = undefined;
45
+ }
46
+ // category is an alias for namespace in claude-flow
47
+ const namespace = input.namespace ?? input.category ?? 'default';
48
+ return {
49
+ content,
50
+ key,
51
+ namespace,
52
+ type: input.type ?? 'episodic',
53
+ tags: input.tags ?? [],
54
+ importance: input.importance ?? 0.5,
55
+ ttl: input.ttl,
56
+ metadata: input.metadata ?? {},
57
+ source,
58
+ originalValue,
59
+ };
60
+ }
61
+ /**
62
+ * Format an ObservationPayload for ruflo-style retrieve response.
63
+ * Parses content back to original value if it was JSON.
64
+ */
65
+ export function formatRufloRetrieve(payload) {
66
+ let value = payload.content;
67
+ // Try to parse back to original type
68
+ try {
69
+ value = JSON.parse(payload.content);
70
+ }
71
+ catch {
72
+ value = payload.content;
73
+ }
74
+ return {
75
+ key: payload.key ?? '',
76
+ value,
77
+ content: payload.content,
78
+ namespace: payload.namespace,
79
+ type: payload.type,
80
+ tags: payload.tags,
81
+ importance: payload.importance,
82
+ created_at: new Date(payload.created_at).toISOString(),
83
+ accessed_at: new Date(payload.accessed_at).toISOString(),
84
+ found: true,
85
+ };
86
+ }
87
+ /**
88
+ * Format an ObservationPayload for memory_search response (compatible with both schemas).
89
+ */
90
+ export function formatMemorySearchResult(payload, relevanceScore) {
91
+ let value = payload.content;
92
+ // Try to parse back to original type for ruflo compat
93
+ try {
94
+ value = JSON.parse(payload.content);
95
+ }
96
+ catch {
97
+ value = payload.content;
98
+ }
99
+ return {
100
+ id: payload.id,
101
+ key: payload.key,
102
+ content: payload.content,
103
+ value,
104
+ type: payload.type,
105
+ namespace: payload.namespace,
106
+ tags: payload.tags,
107
+ importance: payload.importance,
108
+ relevance: relevanceScore,
109
+ created_at: new Date(payload.created_at).toISOString(),
110
+ accessed_at: new Date(payload.accessed_at).toISOString(),
111
+ metadata: Object.keys(payload.metadata).length > 0 ? payload.metadata : undefined,
112
+ source: payload.source,
113
+ };
114
+ }
115
+ /**
116
+ * Build a Qdrant filter for memory_search based on the input parameters.
117
+ */
118
+ export function buildMemorySearchFilter(params) {
119
+ const must = [];
120
+ // Namespace / category filter
121
+ const ns = params.namespace ?? params.category;
122
+ if (ns && ns !== 'default') {
123
+ must.push({ key: 'namespace', match: { value: ns } });
124
+ }
125
+ // Type filter
126
+ if (params.type && params.type !== 'all') {
127
+ must.push({ key: 'type', match: { value: params.type } });
128
+ }
129
+ // Source filter
130
+ if (params.source) {
131
+ must.push({ key: 'source', match: { value: params.source } });
132
+ }
133
+ // Tags filter - must match ALL tags (AND logic per architecture spec)
134
+ // Qdrant doesn't support AND on array elements natively, so we filter post-search
135
+ // The tags param is handled in post-processing.
136
+ return must.length > 0 ? { must } : undefined;
137
+ }
138
+ /**
139
+ * Post-filter results by tags (AND logic: result must have ALL requested tags).
140
+ */
141
+ export function filterByTags(results, tags) {
142
+ if (!tags || tags.length === 0)
143
+ return results;
144
+ return results.filter(r => tags.every(tag => r.tags.includes(tag)));
145
+ }
146
+ //# sourceMappingURL=memory-compat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-compat.js","sourceRoot":"","sources":["../../src/memory/memory-compat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Observation store - CRUD for observations with symbol linking.
3
+ * Observations are stored in Qdrant (vector search) and FalkorDB (graph links).
4
+ * Implements the save_observation and related memory tool semantics from architecture.md.
5
+ *
6
+ * Note: ObservationRoute is defined inline here rather than imported from
7
+ * knowledge/routing-engine.ts (that module is not merged from forge-graph-rag;
8
+ * the pipeline server has its own knowledge/ modules).
9
+ */
10
+ import type { VectorStore, GraphStore } from '../storage/interfaces.js';
11
+ import type { ObservationPayload } from '../util/types.js';
12
+ export interface ObservationRoute {
13
+ writeVector: boolean;
14
+ writeGraphNode: boolean;
15
+ defaultNamespace: string;
16
+ }
17
+ export interface SaveObservationOptions {
18
+ content: string;
19
+ symbols?: string[];
20
+ repoId?: string;
21
+ importance?: number;
22
+ tags?: string[];
23
+ category?: string;
24
+ sessionId: string;
25
+ type?: ObservationPayload['type'];
26
+ source?: ObservationPayload['source'];
27
+ key?: string;
28
+ namespace?: string;
29
+ value?: unknown;
30
+ metadata?: Record<string, unknown>;
31
+ ttl?: number;
32
+ }
33
+ export interface SaveObservationResult {
34
+ id: string;
35
+ stored: boolean;
36
+ linkedSymbols: string[];
37
+ unresolvedSymbols: string[];
38
+ }
39
+ /**
40
+ * Save an observation to Qdrant (vector) and optionally FalkorDB (graph node + symbol links).
41
+ * The optional `route` parameter controls whether graph operations are executed.
42
+ * When `route.writeGraphNode` is false (external repo), only Qdrant is written.
43
+ */
44
+ export declare function saveObservation(opts: SaveObservationOptions, vectorStore: VectorStore, graphStore: GraphStore, route?: ObservationRoute): Promise<SaveObservationResult>;
45
+ /**
46
+ * Retrieve an observation by ID.
47
+ */
48
+ export declare function getObservation(id: string, vectorStore: VectorStore): Promise<ObservationPayload | null>;
49
+ /**
50
+ * Update access tracking for an observation (access_count, accessed_at).
51
+ */
52
+ export declare function touchObservation(id: string, vectorStore: VectorStore): Promise<void>;
53
+ /**
54
+ * Check if an observation has expired (TTL expired).
55
+ */
56
+ export declare function isExpired(payload: ObservationPayload): boolean;
57
+ //# sourceMappingURL=observation-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observation-store.d.ts","sourceRoot":"","sources":["../../src/memory/observation-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAO3D,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAEtC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,sBAAsB,EAC5B,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,UAAU,EACtB,KAAK,CAAC,EAAE,gBAAgB,GACvB,OAAO,CAAC,qBAAqB,CAAC,CA0HhC;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAEpC;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,IAAI,CAAC,CAYf;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAM9D"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Observation store - CRUD for observations with symbol linking.
3
+ * Observations are stored in Qdrant (vector search) and FalkorDB (graph links).
4
+ * Implements the save_observation and related memory tool semantics from architecture.md.
5
+ *
6
+ * Note: ObservationRoute is defined inline here rather than imported from
7
+ * knowledge/routing-engine.ts (that module is not merged from forge-graph-rag;
8
+ * the pipeline server has its own knowledge/ modules).
9
+ */
10
+ import { randomUUID } from 'crypto';
11
+ import { embedText } from '../ingestion/embedder.js';
12
+ import { LINK_OBSERVATION_TO_SYMBOL, UPSERT_OBSERVATION } from '../query/graph-queries.js';
13
+ import { incrementObservationCount } from './session-tracker.js';
14
+ import { logger } from '../util/logger.js';
15
+ /**
16
+ * Save an observation to Qdrant (vector) and optionally FalkorDB (graph node + symbol links).
17
+ * The optional `route` parameter controls whether graph operations are executed.
18
+ * When `route.writeGraphNode` is false (external repo), only Qdrant is written.
19
+ */
20
+ export async function saveObservation(opts, vectorStore, graphStore, route) {
21
+ // Default route: write everywhere (backward-compatible when caller doesn't supply route)
22
+ const effectiveRoute = route ?? {
23
+ writeVector: true,
24
+ writeGraphNode: true,
25
+ defaultNamespace: 'default',
26
+ };
27
+ const { content, symbols = [], repoId = null, importance = 0.5, tags = [], category = null, sessionId, type = 'episodic', source = 'forge', key = null, namespace = 'default', value, metadata = {}, ttl, } = opts;
28
+ const id = randomUUID();
29
+ const now = Date.now();
30
+ // Build the content string - for ruflo-style key/value, serialize value
31
+ let finalContent = content;
32
+ if (!finalContent && value !== undefined) {
33
+ finalContent = typeof value === 'string' ? value : JSON.stringify(value);
34
+ }
35
+ if (!finalContent) {
36
+ finalContent = key ? `[key: ${key}]` : '[empty observation]';
37
+ }
38
+ // Build the observation payload (stored in Qdrant)
39
+ const payload = {
40
+ id,
41
+ repo_id: repoId ?? null,
42
+ session_id: sessionId,
43
+ content: finalContent,
44
+ type,
45
+ category,
46
+ tags,
47
+ importance,
48
+ created_at: now,
49
+ accessed_at: now,
50
+ access_count: 0,
51
+ is_stale: false,
52
+ linked_symbols: [],
53
+ source,
54
+ metadata: ttl ? { ...metadata, ttl, expires_at: now + ttl * 1000 } : metadata,
55
+ key,
56
+ namespace,
57
+ };
58
+ // Embed the content
59
+ let vector;
60
+ try {
61
+ vector = await embedText(finalContent);
62
+ }
63
+ catch (err) {
64
+ logger.warn('Failed to embed observation content', { error: String(err) });
65
+ // Fallback: zero vector (won't match anything but stores the payload)
66
+ vector = new Array(384).fill(0);
67
+ }
68
+ // Store in Qdrant
69
+ try {
70
+ await vectorStore.upsertObservation(id, vector, payload);
71
+ }
72
+ catch (err) {
73
+ logger.error('Failed to store observation in Qdrant', { id, error: String(err) });
74
+ return { id, stored: false, linkedSymbols: [], unresolvedSymbols: symbols };
75
+ }
76
+ // Store Observation node in FalkorDB and link to symbols (owned repos only)
77
+ const linkedSymbols = [];
78
+ const unresolvedSymbols = [];
79
+ if (effectiveRoute.writeGraphNode) {
80
+ try {
81
+ await graphStore.query(UPSERT_OBSERVATION(id, finalContent, sessionId, importance));
82
+ // Attempt to link each symbol
83
+ for (const symbolName of symbols) {
84
+ try {
85
+ const effectiveRepoId = repoId ?? '';
86
+ await graphStore.query(LINK_OBSERVATION_TO_SYMBOL(id, symbolName, effectiveRepoId));
87
+ linkedSymbols.push(symbolName);
88
+ logger.debug('Linked observation to symbol', { observationId: id, symbol: symbolName });
89
+ }
90
+ catch {
91
+ unresolvedSymbols.push(symbolName);
92
+ logger.debug('Symbol not found in graph for observation link', { symbol: symbolName });
93
+ }
94
+ }
95
+ // Update payload with resolved symbols
96
+ if (linkedSymbols.length > 0) {
97
+ await vectorStore.updateObservation(id, { linked_symbols: linkedSymbols });
98
+ }
99
+ }
100
+ catch (err) {
101
+ // Graph operations failing is non-fatal - Qdrant is the source of truth
102
+ logger.warn('FalkorDB observation node creation failed (non-fatal)', { id, error: String(err) });
103
+ unresolvedSymbols.push(...symbols);
104
+ }
105
+ }
106
+ else {
107
+ // External repo: all symbols are unresolved (no graph to link against)
108
+ unresolvedSymbols.push(...symbols);
109
+ logger.debug('External repo observation — skipping graph node creation', { id, repoId });
110
+ }
111
+ // Increment the in-memory session observation count
112
+ incrementObservationCount();
113
+ logger.info('Observation saved', {
114
+ id,
115
+ contentLength: finalContent.length,
116
+ linkedSymbols: linkedSymbols.length,
117
+ unresolvedSymbols: unresolvedSymbols.length,
118
+ });
119
+ return { id, stored: true, linkedSymbols, unresolvedSymbols };
120
+ }
121
+ /**
122
+ * Retrieve an observation by ID.
123
+ */
124
+ export async function getObservation(id, vectorStore) {
125
+ return vectorStore.getObservation(id);
126
+ }
127
+ /**
128
+ * Update access tracking for an observation (access_count, accessed_at).
129
+ */
130
+ export async function touchObservation(id, vectorStore) {
131
+ try {
132
+ const obs = await vectorStore.getObservation(id);
133
+ if (obs) {
134
+ await vectorStore.updateObservation(id, {
135
+ accessed_at: Date.now(),
136
+ access_count: (obs.access_count ?? 0) + 1,
137
+ });
138
+ }
139
+ }
140
+ catch (err) {
141
+ logger.debug('Failed to update observation access tracking', { id, error: String(err) });
142
+ }
143
+ }
144
+ /**
145
+ * Check if an observation has expired (TTL expired).
146
+ */
147
+ export function isExpired(payload) {
148
+ const expiresAt = payload.metadata?.expires_at;
149
+ if (typeof expiresAt === 'number') {
150
+ return Date.now() > expiresAt;
151
+ }
152
+ return false;
153
+ }
154
+ //# sourceMappingURL=observation-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observation-store.js","sourceRoot":"","sources":["../../src/memory/observation-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Session lifecycle and context tracking.
3
+ * Tracks current session ID, start time, and provides session-scoped observation queries.
4
+ * Sessions are identified by a timestamp-based ID generated at server startup.
5
+ *
6
+ * Phase 3: Sessions persist as Observation nodes in Qdrant with type: 'session_marker'.
7
+ * Cross-session retrieval queries those nodes to build a session registry.
8
+ */
9
+ import type { VectorStore } from '../storage/interfaces.js';
10
+ /**
11
+ * Get the current session ID.
12
+ * Format: session-{timestamp}. Consistent for the lifetime of the MCP server process.
13
+ */
14
+ export declare function getCurrentSessionId(): string;
15
+ /**
16
+ * Get the session start timestamp (Unix ms).
17
+ */
18
+ export declare function getSessionStart(): number;
19
+ /**
20
+ * Get session uptime in seconds.
21
+ */
22
+ export declare function getUptimeSeconds(): number;
23
+ /**
24
+ * Increment the in-memory observation count for this session.
25
+ * Called by observation-store after a successful save.
26
+ */
27
+ export declare function incrementObservationCount(): void;
28
+ /**
29
+ * Get the current session observation count.
30
+ */
31
+ export declare function getObservationCount(): number;
32
+ export interface SessionObservationGroup {
33
+ sessionId: string;
34
+ startedAt: number;
35
+ observations: Array<{
36
+ id: string;
37
+ content: string;
38
+ relevance_score: number;
39
+ is_stale: boolean;
40
+ }>;
41
+ }
42
+ /**
43
+ * Persist the current session as a session_marker observation in Qdrant.
44
+ * This enables cross-session discovery — other processes can find recent sessions
45
+ * by searching for type: 'session_marker' observations.
46
+ *
47
+ * Idempotent — only writes once per process lifecycle.
48
+ */
49
+ export declare function persistSessionMarker(vectorStore: VectorStore): Promise<void>;
50
+ /**
51
+ * Retrieve recent session IDs and their start times from Qdrant.
52
+ * Queries for session_marker observations ordered by created_at descending.
53
+ */
54
+ export declare function getRecentSessions(vectorStore: VectorStore, count?: number): Promise<Array<{
55
+ sessionId: string;
56
+ startedAt: number;
57
+ }>>;
58
+ /**
59
+ * Get observations from recent sessions.
60
+ * Phase 3: Queries the persistent session registry to find sessions,
61
+ * then retrieves observations for each one.
62
+ *
63
+ * If a query is provided, observations are ranked by semantic relevance.
64
+ * Otherwise they are returned in reverse chronological order.
65
+ */
66
+ export declare function getRecentSessionObservations(vectorStore: VectorStore, opts: {
67
+ query?: string;
68
+ queryVector?: number[];
69
+ sessionCount?: number;
70
+ limit?: number;
71
+ }): Promise<SessionObservationGroup[]>;
72
+ /**
73
+ * Get the current session info summary.
74
+ */
75
+ export declare function getSessionInfo(): {
76
+ sessionId: string;
77
+ startedAt: number;
78
+ uptimeSeconds: number;
79
+ observationCount: number;
80
+ };
81
+ //# sourceMappingURL=session-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-tracker.d.ts","sourceRoot":"","sources":["../../src/memory/session-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAiB5D;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,KAAK,CAAC;QAClB,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,eAAe,EAAE,MAAM,CAAC;QACxB,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC,CAAC;CACJ;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA6ClF;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,WAAW,EACxB,KAAK,GAAE,MAAU,GAChB,OAAO,CAAC,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CA8B1D;AAED;;;;;;;GAOG;AACH,wBAAsB,4BAA4B,CAChD,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE;IACJ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAyDpC;AA2ED;;GAEG;AACH,wBAAgB,cAAc,IAAI;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAOA"}