codehere 0.5.1-alpha → 0.5.3-alpha

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 (375) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +126 -102
  3. package/dist/application/agents/execution-agent.js +2 -2
  4. package/dist/application/agents/multi-agent-orchestrator.d.ts +0 -1
  5. package/dist/application/agents/multi-agent-orchestrator.d.ts.map +1 -1
  6. package/dist/application/agents/multi-agent-orchestrator.js +2 -9
  7. package/dist/application/agents/multi-agent-orchestrator.js.map +1 -1
  8. package/dist/application/agents/planning-agent.d.ts.map +1 -1
  9. package/dist/application/agents/planning-agent.js +11 -15
  10. package/dist/application/agents/planning-agent.js.map +1 -1
  11. package/dist/application/services/context-importer.d.ts +71 -0
  12. package/dist/application/services/context-importer.d.ts.map +1 -0
  13. package/dist/application/services/context-importer.js +436 -0
  14. package/dist/application/services/context-importer.js.map +1 -0
  15. package/dist/application/services/context-manager.d.ts +132 -0
  16. package/dist/application/services/context-manager.d.ts.map +1 -0
  17. package/dist/application/services/context-manager.js +369 -0
  18. package/dist/application/services/context-manager.js.map +1 -0
  19. package/dist/application/services/dependency-container.d.ts.map +1 -1
  20. package/dist/application/services/dependency-container.js +7 -5
  21. package/dist/application/services/dependency-container.js.map +1 -1
  22. package/dist/application/services/intelligent-router.d.ts +8 -5
  23. package/dist/application/services/intelligent-router.d.ts.map +1 -1
  24. package/dist/application/services/intelligent-router.js +78 -82
  25. package/dist/application/services/intelligent-router.js.map +1 -1
  26. package/dist/application/services/token-counting-service.d.ts +87 -0
  27. package/dist/application/services/token-counting-service.d.ts.map +1 -0
  28. package/dist/application/services/token-counting-service.js +196 -0
  29. package/dist/application/services/token-counting-service.js.map +1 -0
  30. package/dist/application/use-cases/ask-question-use-case.d.ts.map +1 -1
  31. package/dist/application/use-cases/ask-question-use-case.js +109 -21
  32. package/dist/application/use-cases/ask-question-use-case.js.map +1 -1
  33. package/dist/application/use-cases/edit-file-use-case.d.ts.map +1 -1
  34. package/dist/application/use-cases/edit-file-use-case.js +19 -0
  35. package/dist/application/use-cases/edit-file-use-case.js.map +1 -1
  36. package/dist/application/use-cases/planning-use-case.d.ts +1 -14
  37. package/dist/application/use-cases/planning-use-case.d.ts.map +1 -1
  38. package/dist/application/use-cases/planning-use-case.js +2 -109
  39. package/dist/application/use-cases/planning-use-case.js.map +1 -1
  40. package/dist/chat.d.ts.map +1 -1
  41. package/dist/chat.js +6 -17
  42. package/dist/chat.js.map +1 -1
  43. package/dist/domain/entities/conversation-context.d.ts +245 -0
  44. package/dist/domain/entities/conversation-context.d.ts.map +1 -0
  45. package/dist/domain/entities/conversation-context.js +50 -0
  46. package/dist/domain/entities/conversation-context.js.map +1 -0
  47. package/dist/domain/entities/memory.d.ts.map +1 -1
  48. package/dist/domain/interfaces/context-repository.interface.d.ts +71 -0
  49. package/dist/domain/interfaces/context-repository.interface.d.ts.map +1 -0
  50. package/dist/domain/interfaces/context-repository.interface.js +10 -0
  51. package/dist/domain/interfaces/context-repository.interface.js.map +1 -0
  52. package/dist/domain/services/query-intent-classifier.d.ts.map +1 -1
  53. package/dist/domain/services/query-intent-classifier.js +37 -23
  54. package/dist/domain/services/query-intent-classifier.js.map +1 -1
  55. package/dist/embed.d.ts.map +1 -1
  56. package/dist/embed.js +8 -3
  57. package/dist/embed.js.map +1 -1
  58. package/dist/index.js +267 -143
  59. package/dist/index.js.map +1 -1
  60. package/dist/infrastructure/ai/cohere-ai-service.d.ts.map +1 -1
  61. package/dist/infrastructure/ai/cohere-ai-service.js +14 -5
  62. package/dist/infrastructure/ai/cohere-ai-service.js.map +1 -1
  63. package/dist/infrastructure/ai/provider-ai-service.d.ts.map +1 -1
  64. package/dist/infrastructure/ai/provider-ai-service.js +64 -14
  65. package/dist/infrastructure/ai/provider-ai-service.js.map +1 -1
  66. package/dist/infrastructure/config/config-manager.d.ts +78 -9
  67. package/dist/infrastructure/config/config-manager.d.ts.map +1 -1
  68. package/dist/infrastructure/config/config-manager.js +127 -9
  69. package/dist/infrastructure/config/config-manager.js.map +1 -1
  70. package/dist/infrastructure/context/conversation-context.d.ts +39 -12
  71. package/dist/infrastructure/context/conversation-context.d.ts.map +1 -1
  72. package/dist/infrastructure/context/conversation-context.js +91 -4
  73. package/dist/infrastructure/context/conversation-context.js.map +1 -1
  74. package/dist/infrastructure/context/direct-context-provider.d.ts +18 -0
  75. package/dist/infrastructure/context/direct-context-provider.d.ts.map +1 -0
  76. package/dist/infrastructure/context/direct-context-provider.js +222 -0
  77. package/dist/infrastructure/context/direct-context-provider.js.map +1 -0
  78. package/dist/infrastructure/context/git-context-provider.d.ts +30 -0
  79. package/dist/infrastructure/context/git-context-provider.d.ts.map +1 -0
  80. package/dist/infrastructure/context/git-context-provider.js +140 -0
  81. package/dist/infrastructure/context/git-context-provider.js.map +1 -0
  82. package/dist/infrastructure/context/project-context-loader.d.ts +35 -0
  83. package/dist/infrastructure/context/project-context-loader.d.ts.map +1 -0
  84. package/dist/infrastructure/context/project-context-loader.js +184 -0
  85. package/dist/infrastructure/context/project-context-loader.js.map +1 -0
  86. package/dist/infrastructure/cost/cost-tracker.d.ts.map +1 -1
  87. package/dist/infrastructure/cost/cost-tracker.js +3 -2
  88. package/dist/infrastructure/cost/cost-tracker.js.map +1 -1
  89. package/dist/infrastructure/cost/session-token-tracker.d.ts +68 -0
  90. package/dist/infrastructure/cost/session-token-tracker.d.ts.map +1 -0
  91. package/dist/infrastructure/cost/session-token-tracker.js +178 -0
  92. package/dist/infrastructure/cost/session-token-tracker.js.map +1 -0
  93. package/dist/infrastructure/index.d.ts +1 -0
  94. package/dist/infrastructure/index.d.ts.map +1 -1
  95. package/dist/infrastructure/index.js +1 -2
  96. package/dist/infrastructure/index.js.map +1 -1
  97. package/dist/infrastructure/observability/execution-tracer.d.ts +21 -0
  98. package/dist/infrastructure/observability/execution-tracer.d.ts.map +1 -1
  99. package/dist/infrastructure/observability/execution-tracer.js +157 -4
  100. package/dist/infrastructure/observability/execution-tracer.js.map +1 -1
  101. package/dist/infrastructure/protocols/a2a-metadata.js +1 -1
  102. package/dist/infrastructure/protocols/mcp-oauth.js +1 -1
  103. package/dist/infrastructure/providers/cohere-provider.d.ts +1 -2
  104. package/dist/infrastructure/providers/cohere-provider.d.ts.map +1 -1
  105. package/dist/infrastructure/providers/cohere-provider.js +44 -42
  106. package/dist/infrastructure/providers/cohere-provider.js.map +1 -1
  107. package/dist/infrastructure/providers/fake-provider.d.ts.map +1 -1
  108. package/dist/infrastructure/providers/fake-provider.js +8 -0
  109. package/dist/infrastructure/providers/fake-provider.js.map +1 -1
  110. package/dist/infrastructure/providers/local-llm-provider.d.ts.map +1 -1
  111. package/dist/infrastructure/providers/local-llm-provider.js +8 -2
  112. package/dist/infrastructure/providers/local-llm-provider.js.map +1 -1
  113. package/dist/infrastructure/providers/openai-provider.d.ts.map +1 -1
  114. package/dist/infrastructure/providers/openai-provider.js +40 -7
  115. package/dist/infrastructure/providers/openai-provider.js.map +1 -1
  116. package/dist/infrastructure/providers/openrouter-provider.d.ts.map +1 -1
  117. package/dist/infrastructure/providers/openrouter-provider.js +13 -7
  118. package/dist/infrastructure/providers/openrouter-provider.js.map +1 -1
  119. package/dist/infrastructure/security/enhanced-security-gate.d.ts +13 -0
  120. package/dist/infrastructure/security/enhanced-security-gate.d.ts.map +1 -1
  121. package/dist/infrastructure/security/enhanced-security-gate.js +56 -1
  122. package/dist/infrastructure/security/enhanced-security-gate.js.map +1 -1
  123. package/dist/infrastructure/security/input-validator.d.ts +17 -0
  124. package/dist/infrastructure/security/input-validator.d.ts.map +1 -1
  125. package/dist/infrastructure/security/input-validator.js +140 -25
  126. package/dist/infrastructure/security/input-validator.js.map +1 -1
  127. package/dist/infrastructure/storage/embeddings-path.d.ts.map +1 -1
  128. package/dist/infrastructure/storage/embeddings-path.js +14 -4
  129. package/dist/infrastructure/storage/embeddings-path.js.map +1 -1
  130. package/dist/infrastructure/storage/memory-stream-service.d.ts.map +1 -1
  131. package/dist/infrastructure/storage/memory-stream-service.js +58 -88
  132. package/dist/infrastructure/storage/memory-stream-service.js.map +1 -1
  133. package/dist/infrastructure/storage/plan-repository.d.ts.map +1 -1
  134. package/dist/infrastructure/storage/plan-repository.js +4 -5
  135. package/dist/infrastructure/storage/plan-repository.js.map +1 -1
  136. package/dist/infrastructure/storage/sqlite-context-repository.d.ts +95 -0
  137. package/dist/infrastructure/storage/sqlite-context-repository.d.ts.map +1 -0
  138. package/dist/infrastructure/storage/sqlite-context-repository.js +467 -0
  139. package/dist/infrastructure/storage/sqlite-context-repository.js.map +1 -0
  140. package/dist/infrastructure/storage/sqlite-decision-repository.d.ts.map +1 -1
  141. package/dist/infrastructure/storage/sqlite-decision-repository.js +4 -8
  142. package/dist/infrastructure/storage/sqlite-decision-repository.js.map +1 -1
  143. package/dist/infrastructure/storage/sqlite-knowledge-graph-repository.d.ts.map +1 -1
  144. package/dist/infrastructure/storage/sqlite-knowledge-graph-repository.js +4 -8
  145. package/dist/infrastructure/storage/sqlite-knowledge-graph-repository.js.map +1 -1
  146. package/dist/infrastructure/storage/sqlite-knowledge-preservation-repository.d.ts.map +1 -1
  147. package/dist/infrastructure/storage/sqlite-knowledge-preservation-repository.js +4 -8
  148. package/dist/infrastructure/storage/sqlite-knowledge-preservation-repository.js.map +1 -1
  149. package/dist/infrastructure/storage/sqlite-memory-repository.d.ts.map +1 -1
  150. package/dist/infrastructure/storage/sqlite-memory-repository.js +4 -8
  151. package/dist/infrastructure/storage/sqlite-memory-repository.js.map +1 -1
  152. package/dist/infrastructure/storage/sqlite-pattern-repository.d.ts.map +1 -1
  153. package/dist/infrastructure/storage/sqlite-pattern-repository.js +4 -8
  154. package/dist/infrastructure/storage/sqlite-pattern-repository.js.map +1 -1
  155. package/dist/infrastructure/storage/task-repository.d.ts +0 -1
  156. package/dist/infrastructure/storage/task-repository.d.ts.map +1 -1
  157. package/dist/infrastructure/storage/task-repository.js +2 -13
  158. package/dist/infrastructure/storage/task-repository.js.map +1 -1
  159. package/dist/infrastructure/ux/cli-style-guide.d.ts +105 -0
  160. package/dist/infrastructure/ux/cli-style-guide.d.ts.map +1 -0
  161. package/dist/infrastructure/ux/cli-style-guide.js +220 -0
  162. package/dist/infrastructure/ux/cli-style-guide.js.map +1 -0
  163. package/dist/infrastructure/ux/progress-indicator.d.ts +49 -10
  164. package/dist/infrastructure/ux/progress-indicator.d.ts.map +1 -1
  165. package/dist/infrastructure/ux/progress-indicator.js +112 -9
  166. package/dist/infrastructure/ux/progress-indicator.js.map +1 -1
  167. package/dist/infrastructure/validation/agent-feedback.d.ts +14 -1
  168. package/dist/infrastructure/validation/agent-feedback.d.ts.map +1 -1
  169. package/dist/infrastructure/validation/agent-feedback.js +57 -3
  170. package/dist/infrastructure/validation/agent-feedback.js.map +1 -1
  171. package/dist/parallel-processor.d.ts.map +1 -1
  172. package/dist/parallel-processor.js +39 -11
  173. package/dist/parallel-processor.js.map +1 -1
  174. package/dist/presentation/cli/commands/ask-command.d.ts +1 -2
  175. package/dist/presentation/cli/commands/ask-command.d.ts.map +1 -1
  176. package/dist/presentation/cli/commands/ask-command.js +66 -150
  177. package/dist/presentation/cli/commands/ask-command.js.map +1 -1
  178. package/dist/presentation/cli/commands/audit-command.d.ts +13 -0
  179. package/dist/presentation/cli/commands/audit-command.d.ts.map +1 -0
  180. package/dist/presentation/cli/commands/audit-command.js +96 -0
  181. package/dist/presentation/cli/commands/audit-command.js.map +1 -0
  182. package/dist/presentation/cli/commands/config-command.d.ts.map +1 -1
  183. package/dist/presentation/cli/commands/config-command.js +2 -14
  184. package/dist/presentation/cli/commands/config-command.js.map +1 -1
  185. package/dist/presentation/cli/commands/context-command.d.ts +32 -0
  186. package/dist/presentation/cli/commands/context-command.d.ts.map +1 -0
  187. package/dist/presentation/cli/commands/context-command.js +295 -0
  188. package/dist/presentation/cli/commands/context-command.js.map +1 -0
  189. package/dist/presentation/cli/commands/context-helper.d.ts +16 -0
  190. package/dist/presentation/cli/commands/context-helper.d.ts.map +1 -0
  191. package/dist/presentation/cli/commands/context-helper.js +88 -0
  192. package/dist/presentation/cli/commands/context-helper.js.map +1 -0
  193. package/dist/presentation/cli/commands/decision-command.js +6 -23
  194. package/dist/presentation/cli/commands/decision-command.js.map +1 -1
  195. package/dist/presentation/cli/commands/fix-command.d.ts.map +1 -1
  196. package/dist/presentation/cli/commands/fix-command.js +19 -23
  197. package/dist/presentation/cli/commands/fix-command.js.map +1 -1
  198. package/dist/presentation/cli/commands/help-command.d.ts.map +1 -1
  199. package/dist/presentation/cli/commands/help-command.js +1 -21
  200. package/dist/presentation/cli/commands/help-command.js.map +1 -1
  201. package/dist/presentation/cli/commands/orchestrate-command.d.ts +0 -1
  202. package/dist/presentation/cli/commands/orchestrate-command.d.ts.map +1 -1
  203. package/dist/presentation/cli/commands/orchestrate-command.js +19 -126
  204. package/dist/presentation/cli/commands/orchestrate-command.js.map +1 -1
  205. package/dist/presentation/cli/commands/plan-command.d.ts +0 -1
  206. package/dist/presentation/cli/commands/plan-command.d.ts.map +1 -1
  207. package/dist/presentation/cli/commands/plan-command.js +42 -132
  208. package/dist/presentation/cli/commands/plan-command.js.map +1 -1
  209. package/dist/presentation/cli/commands/react-command.d.ts.map +1 -1
  210. package/dist/presentation/cli/commands/react-command.js +1 -5
  211. package/dist/presentation/cli/commands/react-command.js.map +1 -1
  212. package/dist/presentation/cli/commands/review-command.d.ts.map +1 -1
  213. package/dist/presentation/cli/commands/review-command.js +2 -21
  214. package/dist/presentation/cli/commands/review-command.js.map +1 -1
  215. package/dist/presentation/cli/commands/smart-command.d.ts +3 -0
  216. package/dist/presentation/cli/commands/smart-command.d.ts.map +1 -1
  217. package/dist/presentation/cli/commands/smart-command.js +127 -93
  218. package/dist/presentation/cli/commands/smart-command.js.map +1 -1
  219. package/dist/presentation/cli/commands/status-command.d.ts.map +1 -1
  220. package/dist/presentation/cli/commands/status-command.js +1 -5
  221. package/dist/presentation/cli/commands/status-command.js.map +1 -1
  222. package/dist/presentation/cli/commands/trust-command.d.ts +28 -0
  223. package/dist/presentation/cli/commands/trust-command.d.ts.map +1 -0
  224. package/dist/presentation/cli/commands/trust-command.js +301 -0
  225. package/dist/presentation/cli/commands/trust-command.js.map +1 -0
  226. package/dist/presentation/cli/error-display.d.ts.map +1 -1
  227. package/dist/presentation/cli/error-display.js +17 -75
  228. package/dist/presentation/cli/error-display.js.map +1 -1
  229. package/dist/search.d.ts.map +1 -1
  230. package/dist/search.js +5 -18
  231. package/dist/search.js.map +1 -1
  232. package/dist/session.d.ts.map +1 -1
  233. package/dist/session.js +221 -57
  234. package/dist/session.js.map +1 -1
  235. package/dist/token-optimizer.d.ts.map +1 -1
  236. package/dist/token-optimizer.js +6 -1
  237. package/dist/token-optimizer.js.map +1 -1
  238. package/dist/tools/bash.d.ts.map +1 -1
  239. package/dist/tools/bash.js +0 -3
  240. package/dist/tools/bash.js.map +1 -1
  241. package/dist/tools/git-tool.js +7 -7
  242. package/dist/tools/git-tool.js.map +1 -1
  243. package/dist/ui.d.ts +0 -5
  244. package/dist/ui.d.ts.map +1 -1
  245. package/dist/ui.js +0 -19
  246. package/dist/ui.js.map +1 -1
  247. package/dist/utils/provider-check.d.ts +21 -0
  248. package/dist/utils/provider-check.d.ts.map +1 -0
  249. package/dist/utils/provider-check.js +124 -0
  250. package/dist/utils/provider-check.js.map +1 -0
  251. package/package.json +16 -13
  252. package/dist/application/agents/documentation-agent.d.ts +0 -24
  253. package/dist/application/agents/documentation-agent.d.ts.map +0 -1
  254. package/dist/application/agents/documentation-agent.js +0 -399
  255. package/dist/application/agents/documentation-agent.js.map +0 -1
  256. package/dist/application/agents/product-requirements-agent.d.ts +0 -21
  257. package/dist/application/agents/product-requirements-agent.d.ts.map +0 -1
  258. package/dist/application/agents/product-requirements-agent.js +0 -247
  259. package/dist/application/agents/product-requirements-agent.js.map +0 -1
  260. package/dist/application/reasoning/multi-model-planning-strategy.d.ts +0 -21
  261. package/dist/application/reasoning/multi-model-planning-strategy.d.ts.map +0 -1
  262. package/dist/application/reasoning/multi-model-planning-strategy.js +0 -158
  263. package/dist/application/reasoning/multi-model-planning-strategy.js.map +0 -1
  264. package/dist/application/reasoning/reasoning-config.d.ts +0 -15
  265. package/dist/application/reasoning/reasoning-config.d.ts.map +0 -1
  266. package/dist/application/reasoning/reasoning-config.js +0 -50
  267. package/dist/application/reasoning/reasoning-config.js.map +0 -1
  268. package/dist/application/reasoning/reasoning-orchestrator.d.ts +0 -18
  269. package/dist/application/reasoning/reasoning-orchestrator.d.ts.map +0 -1
  270. package/dist/application/reasoning/reasoning-orchestrator.js +0 -170
  271. package/dist/application/reasoning/reasoning-orchestrator.js.map +0 -1
  272. package/dist/application/reasoning/reasoning-strategy.interface.d.ts +0 -24
  273. package/dist/application/reasoning/reasoning-strategy.interface.d.ts.map +0 -1
  274. package/dist/application/reasoning/reasoning-strategy.interface.js +0 -6
  275. package/dist/application/reasoning/reasoning-strategy.interface.js.map +0 -1
  276. package/dist/application/reasoning/role-provider-resolver.d.ts +0 -36
  277. package/dist/application/reasoning/role-provider-resolver.d.ts.map +0 -1
  278. package/dist/application/reasoning/role-provider-resolver.js +0 -74
  279. package/dist/application/reasoning/role-provider-resolver.js.map +0 -1
  280. package/dist/application/reasoning/simple-planning-strategy.d.ts +0 -22
  281. package/dist/application/reasoning/simple-planning-strategy.d.ts.map +0 -1
  282. package/dist/application/reasoning/simple-planning-strategy.js +0 -217
  283. package/dist/application/reasoning/simple-planning-strategy.js.map +0 -1
  284. package/dist/application/reasoning/types.d.ts +0 -65
  285. package/dist/application/reasoning/types.d.ts.map +0 -1
  286. package/dist/application/reasoning/types.js +0 -6
  287. package/dist/application/reasoning/types.js.map +0 -1
  288. package/dist/application/reasoning/validator-strategy.d.ts +0 -56
  289. package/dist/application/reasoning/validator-strategy.d.ts.map +0 -1
  290. package/dist/application/reasoning/validator-strategy.js +0 -103
  291. package/dist/application/reasoning/validator-strategy.js.map +0 -1
  292. package/dist/domain/entities/documentation.d.ts +0 -35
  293. package/dist/domain/entities/documentation.d.ts.map +0 -1
  294. package/dist/domain/entities/documentation.js +0 -6
  295. package/dist/domain/entities/documentation.js.map +0 -1
  296. package/dist/domain/entities/product-requirements.d.ts +0 -50
  297. package/dist/domain/entities/product-requirements.d.ts.map +0 -1
  298. package/dist/domain/entities/product-requirements.js +0 -6
  299. package/dist/domain/entities/product-requirements.js.map +0 -1
  300. package/dist/domain/interfaces/agent.interface.d.ts +0 -15
  301. package/dist/domain/interfaces/agent.interface.d.ts.map +0 -1
  302. package/dist/domain/interfaces/agent.interface.js +0 -6
  303. package/dist/domain/interfaces/agent.interface.js.map +0 -1
  304. package/dist/infrastructure/ai/fake-ai-service.d.ts +0 -22
  305. package/dist/infrastructure/ai/fake-ai-service.d.ts.map +0 -1
  306. package/dist/infrastructure/ai/fake-ai-service.js +0 -59
  307. package/dist/infrastructure/ai/fake-ai-service.js.map +0 -1
  308. package/dist/infrastructure/completion/completion-generator.d.ts +0 -42
  309. package/dist/infrastructure/completion/completion-generator.d.ts.map +0 -1
  310. package/dist/infrastructure/completion/completion-generator.js +0 -184
  311. package/dist/infrastructure/completion/completion-generator.js.map +0 -1
  312. package/dist/infrastructure/security/network-guard.d.ts +0 -8
  313. package/dist/infrastructure/security/network-guard.d.ts.map +0 -1
  314. package/dist/infrastructure/security/network-guard.js +0 -70
  315. package/dist/infrastructure/security/network-guard.js.map +0 -1
  316. package/dist/infrastructure/security/offline.d.ts +0 -16
  317. package/dist/infrastructure/security/offline.d.ts.map +0 -1
  318. package/dist/infrastructure/security/offline.js +0 -24
  319. package/dist/infrastructure/security/offline.js.map +0 -1
  320. package/dist/infrastructure/storage/sqljs-init.d.ts +0 -8
  321. package/dist/infrastructure/storage/sqljs-init.d.ts.map +0 -1
  322. package/dist/infrastructure/storage/sqljs-init.js +0 -23
  323. package/dist/infrastructure/storage/sqljs-init.js.map +0 -1
  324. package/dist/infrastructure/ux/hitl-review-portal.d.ts +0 -47
  325. package/dist/infrastructure/ux/hitl-review-portal.d.ts.map +0 -1
  326. package/dist/infrastructure/ux/hitl-review-portal.js +0 -228
  327. package/dist/infrastructure/ux/hitl-review-portal.js.map +0 -1
  328. package/dist/infrastructure/ux/meta-query.d.ts +0 -9
  329. package/dist/infrastructure/ux/meta-query.d.ts.map +0 -1
  330. package/dist/infrastructure/ux/meta-query.js +0 -63
  331. package/dist/infrastructure/ux/meta-query.js.map +0 -1
  332. package/dist/infrastructure/ux/proportional-friction.d.ts +0 -73
  333. package/dist/infrastructure/ux/proportional-friction.d.ts.map +0 -1
  334. package/dist/infrastructure/ux/proportional-friction.js +0 -200
  335. package/dist/infrastructure/ux/proportional-friction.js.map +0 -1
  336. package/dist/infrastructure/ux/repo-fingerprint.d.ts +0 -10
  337. package/dist/infrastructure/ux/repo-fingerprint.d.ts.map +0 -1
  338. package/dist/infrastructure/ux/repo-fingerprint.js +0 -55
  339. package/dist/infrastructure/ux/repo-fingerprint.js.map +0 -1
  340. package/dist/infrastructure/validation/feedback-stats.d.ts +0 -99
  341. package/dist/infrastructure/validation/feedback-stats.d.ts.map +0 -1
  342. package/dist/infrastructure/validation/feedback-stats.js +0 -173
  343. package/dist/infrastructure/validation/feedback-stats.js.map +0 -1
  344. package/dist/infrastructure/validation/trust-config.d.ts +0 -27
  345. package/dist/infrastructure/validation/trust-config.d.ts.map +0 -1
  346. package/dist/infrastructure/validation/trust-config.js +0 -113
  347. package/dist/infrastructure/validation/trust-config.js.map +0 -1
  348. package/dist/presentation/cli/commands/memory-command.d.ts +0 -17
  349. package/dist/presentation/cli/commands/memory-command.d.ts.map +0 -1
  350. package/dist/presentation/cli/commands/memory-command.js +0 -252
  351. package/dist/presentation/cli/commands/memory-command.js.map +0 -1
  352. package/dist/presentation/cli/keyboard-shortcuts.d.ts +0 -27
  353. package/dist/presentation/cli/keyboard-shortcuts.d.ts.map +0 -1
  354. package/dist/presentation/cli/keyboard-shortcuts.js +0 -77
  355. package/dist/presentation/cli/keyboard-shortcuts.js.map +0 -1
  356. package/dist/test_cohere.d.ts +0 -2
  357. package/dist/test_cohere.d.ts.map +0 -1
  358. package/dist/test_cohere.js +0 -68
  359. package/dist/test_cohere.js.map +0 -1
  360. package/dist/test_env.d.ts +0 -2
  361. package/dist/test_env.d.ts.map +0 -1
  362. package/dist/test_env.js +0 -24
  363. package/dist/test_env.js.map +0 -1
  364. package/dist/test_retrieval.d.ts +0 -2
  365. package/dist/test_retrieval.d.ts.map +0 -1
  366. package/dist/test_retrieval.js +0 -84
  367. package/dist/test_retrieval.js.map +0 -1
  368. package/dist/tools/bash.d 2.ts +0 -53
  369. package/dist/tools/bash.js 2.map +0 -1
  370. package/dist/tools/edit 2.js +0 -235
  371. package/dist/tools/edit.d.ts 2.map +0 -1
  372. package/dist/utils/logger.d.ts +0 -34
  373. package/dist/utils/logger.d.ts.map +0 -1
  374. package/dist/utils/logger.js +0 -56
  375. package/dist/utils/logger.js.map +0 -1
@@ -0,0 +1,436 @@
1
+ /**
2
+ * Context Importer
3
+ *
4
+ * Imports conversation contexts from other AI coding tools:
5
+ * - Claude Code (Anthropic)
6
+ * - OpenCode (400K users)
7
+ * - Cursor (VS Code fork)
8
+ * - Portable format (JSON)
9
+ *
10
+ * @since v0.5.0 (Context Continuity Feature)
11
+ */
12
+ import { readFile, readdir } from 'fs/promises';
13
+ import { join } from 'path';
14
+ import { homedir } from 'os';
15
+ import { getConfigManager } from '../../infrastructure/config/config-manager.js';
16
+ import { createConversationContext } from '../../domain/entities/conversation-context.js';
17
+ /**
18
+ * Context Importer Service
19
+ *
20
+ * Handles importing conversation contexts from various sources
21
+ */
22
+ export class ContextImporter {
23
+ /**
24
+ * Import context from specified source
25
+ */
26
+ async import(options) {
27
+ switch (options.source) {
28
+ case 'claude-code':
29
+ return await this.importFromClaudeCode(options);
30
+ case 'opencode':
31
+ return await this.importFromOpenCode(options);
32
+ case 'cursor':
33
+ return await this.importFromCursor(options);
34
+ case 'file':
35
+ if (!options.filePath) {
36
+ throw new Error('filePath is required for file import');
37
+ }
38
+ return await this.importFromFile(options.filePath, options.project);
39
+ default:
40
+ throw new Error(`Unsupported import source: ${options.source}`);
41
+ }
42
+ }
43
+ /**
44
+ * Import from Claude Code
45
+ *
46
+ * REAL Claude Code format discovered:
47
+ * - Location: ~/.claude/projects/[encoded-project-path]/[sessionId].jsonl
48
+ * - Format: JSONL (one JSON object per line)
49
+ * - Structure: {type: "user"|"assistant", message: {role, content: [{type, text}]}, timestamp, sessionId}
50
+ */
51
+ async importFromClaudeCode(options) {
52
+ const claudeDir = join(homedir(), '.claude');
53
+ const projectsDir = join(claudeDir, 'projects');
54
+ const warnings = [];
55
+ try {
56
+ // List all project folders
57
+ const projectDirs = await readdir(projectsDir);
58
+ const sessionFiles = [];
59
+ for (const projectDir of projectDirs) {
60
+ if (projectDir.startsWith('.'))
61
+ continue;
62
+ const fullProjectDir = join(projectsDir, projectDir);
63
+ try {
64
+ const files = await readdir(fullProjectDir);
65
+ for (const file of files) {
66
+ // Session files are UUIDs.jsonl (not agent-*.jsonl)
67
+ if (file.endsWith('.jsonl') && !file.startsWith('agent-')) {
68
+ const filePath = join(fullProjectDir, file);
69
+ const { stat } = await import('fs/promises');
70
+ const stats = await stat(filePath);
71
+ sessionFiles.push({
72
+ name: file,
73
+ path: filePath,
74
+ id: file.replace('.jsonl', ''),
75
+ projectPath: projectDir.replace(/-/g, '/'),
76
+ size: stats.size,
77
+ });
78
+ }
79
+ }
80
+ }
81
+ catch {
82
+ // Project folder might not have sessions
83
+ }
84
+ }
85
+ if (sessionFiles.length === 0) {
86
+ throw new Error('No Claude Code sessions found in ~/.claude/projects/');
87
+ }
88
+ // Sort by size (largest = most messages = most recent active)
89
+ sessionFiles.sort((a, b) => b.size - a.size);
90
+ // Select session
91
+ let selectedSession = sessionFiles[0];
92
+ if (options.sessionId && options.sessionId !== 'latest') {
93
+ const found = sessionFiles.find(s => s.id === options.sessionId);
94
+ if (found) {
95
+ selectedSession = found;
96
+ }
97
+ else {
98
+ warnings.push(`Session ${options.sessionId} not found, using latest: ${selectedSession.id}`);
99
+ }
100
+ }
101
+ // Read and parse JSONL file
102
+ const fileContent = await readFile(selectedSession.path, 'utf-8');
103
+ const lines = fileContent.split('\n').filter(line => line.trim());
104
+ const messages = [];
105
+ let model = 'claude-sonnet-4';
106
+ let cwd = process.cwd();
107
+ let firstTimestamp = null;
108
+ let lastTimestamp = null;
109
+ for (const line of lines) {
110
+ try {
111
+ const entry = JSON.parse(line);
112
+ // Skip non-message entries
113
+ if (entry.type !== 'user' && entry.type !== 'assistant')
114
+ continue;
115
+ // Extract text content from Claude Code message format
116
+ let textContent = '';
117
+ if (entry.message?.content) {
118
+ if (Array.isArray(entry.message.content)) {
119
+ // Content is array of blocks: [{type: "text", text: "..."}, {type: "thinking", ...}]
120
+ for (const block of entry.message.content) {
121
+ if (block.type === 'text' && block.text) {
122
+ textContent += block.text + '\n';
123
+ }
124
+ }
125
+ }
126
+ else if (typeof entry.message.content === 'string') {
127
+ textContent = entry.message.content;
128
+ }
129
+ }
130
+ if (!textContent.trim())
131
+ continue;
132
+ const timestamp = entry.timestamp ? new Date(entry.timestamp) : new Date();
133
+ if (!firstTimestamp)
134
+ firstTimestamp = timestamp;
135
+ lastTimestamp = timestamp;
136
+ // Extract metadata
137
+ if (entry.cwd)
138
+ cwd = entry.cwd;
139
+ if (entry.message?.model)
140
+ model = entry.message.model;
141
+ messages.push({
142
+ role: this.normalizeRole(entry.type),
143
+ content: textContent.trim(),
144
+ timestamp,
145
+ tokenCount: entry.message?.usage?.input_tokens || entry.message?.usage?.output_tokens || 0,
146
+ metadata: {
147
+ source: 'claude-code',
148
+ originalId: entry.uuid,
149
+ },
150
+ });
151
+ }
152
+ catch {
153
+ // Skip malformed lines
154
+ continue;
155
+ }
156
+ }
157
+ if (messages.length === 0) {
158
+ throw new Error(`No valid messages found in session ${selectedSession.id}`);
159
+ }
160
+ // Extract project name from cwd
161
+ const projectName = cwd.split('/').pop() || 'imported-project';
162
+ // Create context
163
+ const context = createConversationContext({
164
+ sessionId: selectedSession.id,
165
+ model,
166
+ provider: 'anthropic',
167
+ maxTokenLimit: 200000, // Claude's context limit
168
+ project: options.project || {
169
+ name: projectName,
170
+ path: cwd,
171
+ languages: [],
172
+ },
173
+ });
174
+ context.messages = messages;
175
+ context.createdAt = firstTimestamp || new Date();
176
+ context.lastUpdatedAt = lastTimestamp || new Date();
177
+ return {
178
+ context,
179
+ importedFrom: `claude-code:${selectedSession.id}`,
180
+ messageCount: messages.length,
181
+ warnings,
182
+ };
183
+ }
184
+ catch (error) {
185
+ if (error instanceof Error && error.message.includes('ENOENT')) {
186
+ throw new Error(`Claude Code directory not found: ${claudeDir}\nMake sure Claude Code is installed.`);
187
+ }
188
+ throw error;
189
+ }
190
+ }
191
+ /**
192
+ * Import from OpenCode
193
+ *
194
+ * OpenCode uses SQLite database
195
+ * Location: ~/.opencode/conversations.db (or similar)
196
+ */
197
+ async importFromOpenCode(options) {
198
+ const warnings = [];
199
+ // OpenCode format: SQLite database
200
+ // For MVP, we'll support JSON export format if available
201
+ // Full SQLite support can be added later
202
+ const possiblePaths = [
203
+ join(homedir(), '.opencode', 'conversations.db'),
204
+ join(homedir(), '.opencode', 'conversations.json'),
205
+ join(homedir(), '.config', 'opencode', 'conversations.db'),
206
+ ];
207
+ let foundPath = null;
208
+ for (const path of possiblePaths) {
209
+ try {
210
+ await readFile(path);
211
+ foundPath = path;
212
+ break;
213
+ }
214
+ catch {
215
+ // Continue searching
216
+ }
217
+ }
218
+ if (!foundPath) {
219
+ throw new Error(`OpenCode database not found. Checked: ${possiblePaths.join(', ')}\nPlease export your OpenCode conversation to JSON format first.`);
220
+ }
221
+ // If JSON format
222
+ if (foundPath.endsWith('.json')) {
223
+ const data = JSON.parse(await readFile(foundPath, 'utf-8'));
224
+ return await this.importFromOpenCodeJSON(data, options, warnings);
225
+ }
226
+ // SQLite support would go here (Day 5 or post-launch)
227
+ throw new Error('SQLite import not yet implemented. Please export OpenCode conversation to JSON format first.');
228
+ }
229
+ /**
230
+ * Import from OpenCode JSON format
231
+ */
232
+ async importFromOpenCodeJSON(data, options, warnings) {
233
+ const messages = [];
234
+ // OpenCode JSON format
235
+ if (Array.isArray(data.messages)) {
236
+ for (const msg of data.messages) {
237
+ messages.push({
238
+ role: this.normalizeRole(msg.role || msg.type || 'user'),
239
+ content: msg.content || msg.text || String(msg),
240
+ timestamp: msg.timestamp ? new Date(msg.timestamp) : new Date(),
241
+ tokenCount: msg.tokens || 0,
242
+ metadata: {
243
+ source: 'opencode',
244
+ originalId: msg.id,
245
+ },
246
+ });
247
+ }
248
+ }
249
+ else {
250
+ warnings.push('Unknown OpenCode format, attempting basic conversion');
251
+ }
252
+ const config = getConfigManager();
253
+ const context = createConversationContext({
254
+ sessionId: data.sessionId || `opencode-${Date.now()}`,
255
+ model: data.model || config.getModel('default') || config.getPreference('defaultModel') || 'command-r-08-2024',
256
+ provider: 'openai', // OpenCode typically uses OpenAI
257
+ maxTokenLimit: data.maxTokens || config.getLimit('maxTokenLimit') || 128000,
258
+ project: options.project || {
259
+ name: data.project || 'imported-project',
260
+ path: data.projectPath || process.cwd(),
261
+ languages: data.languages || [],
262
+ },
263
+ });
264
+ context.messages = messages;
265
+ context.createdAt = data.createdAt ? new Date(data.createdAt) : new Date();
266
+ context.lastUpdatedAt = data.updatedAt ? new Date(data.updatedAt) : new Date();
267
+ return {
268
+ context,
269
+ importedFrom: 'opencode',
270
+ messageCount: messages.length,
271
+ warnings,
272
+ };
273
+ }
274
+ /**
275
+ * Import from Cursor
276
+ *
277
+ * Cursor stores sessions similar to VS Code
278
+ * Location: ~/.cursor/sessions/ or ~/.cursor/chat/
279
+ */
280
+ async importFromCursor(options) {
281
+ const warnings = [];
282
+ const possibleDirs = [
283
+ join(homedir(), '.cursor', 'sessions'),
284
+ join(homedir(), '.cursor', 'chat'),
285
+ join(homedir(), '.config', 'cursor', 'sessions'),
286
+ ];
287
+ let foundDir = null;
288
+ for (const dir of possibleDirs) {
289
+ try {
290
+ await readdir(dir);
291
+ foundDir = dir;
292
+ break;
293
+ }
294
+ catch {
295
+ // Continue searching
296
+ }
297
+ }
298
+ if (!foundDir) {
299
+ throw new Error(`Cursor sessions directory not found. Checked: ${possibleDirs.join(', ')}\nMake sure Cursor is installed.`);
300
+ }
301
+ // List session files
302
+ const files = await readdir(foundDir);
303
+ const sessionFiles = files
304
+ .filter(f => f.endsWith('.json'))
305
+ .map(f => ({
306
+ name: f,
307
+ path: join(foundDir, f),
308
+ id: f.replace('.json', ''),
309
+ }))
310
+ .sort((a, b) => b.name.localeCompare(a.name));
311
+ if (sessionFiles.length === 0) {
312
+ throw new Error('No Cursor sessions found');
313
+ }
314
+ // Select session
315
+ let selectedSession = sessionFiles[0];
316
+ if (options.sessionId && options.sessionId !== 'latest') {
317
+ selectedSession = sessionFiles.find(s => s.id === options.sessionId) || selectedSession;
318
+ if (selectedSession.id !== options.sessionId) {
319
+ warnings.push(`Session ${options.sessionId} not found, using latest: ${selectedSession.id}`);
320
+ }
321
+ }
322
+ // Read and convert
323
+ const sessionData = JSON.parse(await readFile(selectedSession.path, 'utf-8'));
324
+ const messages = [];
325
+ // Cursor format (similar to VS Code)
326
+ if (Array.isArray(sessionData.messages)) {
327
+ for (const msg of sessionData.messages) {
328
+ messages.push({
329
+ role: this.normalizeRole(msg.role || msg.author || 'user'),
330
+ content: msg.content || msg.text || msg.value || String(msg),
331
+ timestamp: msg.timestamp ? new Date(msg.timestamp) : new Date(),
332
+ tokenCount: 0,
333
+ metadata: {
334
+ source: 'cursor',
335
+ originalId: msg.id,
336
+ },
337
+ });
338
+ }
339
+ }
340
+ else {
341
+ warnings.push('Unknown Cursor format, attempting basic conversion');
342
+ }
343
+ const config = getConfigManager();
344
+ const context = createConversationContext({
345
+ sessionId: selectedSession.id,
346
+ model: sessionData.model || config.getModel('default') || config.getPreference('defaultModel') || 'command-r-08-2024',
347
+ provider: 'openai',
348
+ maxTokenLimit: sessionData.maxTokens || config.getLimit('maxTokenLimit') || 128000,
349
+ project: options.project || {
350
+ name: sessionData.project || 'imported-project',
351
+ path: sessionData.projectPath || process.cwd(),
352
+ languages: sessionData.languages || [],
353
+ },
354
+ });
355
+ context.messages = messages;
356
+ context.createdAt = sessionData.createdAt ? new Date(sessionData.createdAt) : new Date();
357
+ context.lastUpdatedAt = sessionData.updatedAt ? new Date(sessionData.updatedAt) : new Date();
358
+ return {
359
+ context,
360
+ importedFrom: `cursor:${selectedSession.id}`,
361
+ messageCount: messages.length,
362
+ warnings,
363
+ };
364
+ }
365
+ /**
366
+ * Import from portable JSON file
367
+ */
368
+ async importFromFile(filePath, projectOverride) {
369
+ const data = JSON.parse(await readFile(filePath, 'utf-8'));
370
+ const warnings = [];
371
+ // Validate format
372
+ if (data.format !== 'codehere-portable-context' && !data.conversation) {
373
+ warnings.push('File format not recognized, attempting conversion');
374
+ }
375
+ const messages = [];
376
+ const conversation = data.conversation || data;
377
+ if (Array.isArray(conversation.messages)) {
378
+ for (const msg of conversation.messages) {
379
+ messages.push({
380
+ role: this.normalizeRole(msg.role),
381
+ content: msg.content || msg.text,
382
+ timestamp: msg.timestamp ? new Date(msg.timestamp) : new Date(),
383
+ tokenCount: msg.tokens || msg.tokenCount || 0,
384
+ metadata: msg.metadata || {},
385
+ });
386
+ }
387
+ }
388
+ const session = data.session || {};
389
+ const config = getConfigManager();
390
+ const context = createConversationContext({
391
+ sessionId: session.id || `imported-${Date.now()}`,
392
+ model: session.model || config.getModel('default') || config.getPreference('defaultModel') || 'command-r-08-2024',
393
+ provider: session.provider || 'openai',
394
+ maxTokenLimit: conversation.max_tokens || conversation.maxTokenLimit || config.getLimit('maxTokenLimit') || 128000,
395
+ project: projectOverride || session.project || {
396
+ name: 'imported-project',
397
+ path: process.cwd(),
398
+ languages: [],
399
+ },
400
+ });
401
+ context.messages = messages;
402
+ context.createdAt = session.created_at ? new Date(session.created_at) : new Date();
403
+ context.lastUpdatedAt = data.exported_at ? new Date(data.exported_at) : new Date();
404
+ // Restore summary if present
405
+ if (conversation.summary) {
406
+ context.summary = {
407
+ originalMessageCount: conversation.summary.originalMessageCount || messages.length,
408
+ compactedMessageCount: 1,
409
+ summaryText: conversation.summary.text || conversation.summary.summaryText || '',
410
+ compactedAt: conversation.summary.compacted_at ? new Date(conversation.summary.compacted_at) : new Date(),
411
+ preservedKeyPoints: conversation.summary.key_points || conversation.summary.preservedKeyPoints || [],
412
+ tokensSaved: 0,
413
+ };
414
+ }
415
+ return {
416
+ context,
417
+ importedFrom: `file:${filePath}`,
418
+ messageCount: messages.length,
419
+ warnings,
420
+ };
421
+ }
422
+ /**
423
+ * Normalize role names across different formats
424
+ */
425
+ normalizeRole(role) {
426
+ const normalized = role.toLowerCase().trim();
427
+ if (normalized === 'assistant' || normalized === 'ai' || normalized === 'model' || normalized === 'claude' || normalized === 'gpt') {
428
+ return 'assistant';
429
+ }
430
+ if (normalized === 'system' || normalized === 'system_message') {
431
+ return 'system';
432
+ }
433
+ return 'user';
434
+ }
435
+ }
436
+ //# sourceMappingURL=context-importer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-importer.js","sourceRoot":"","sources":["../../../src/application/services/context-importer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Context Manager
3
+ *
4
+ * Core service for managing conversation contexts with auto-compaction.
5
+ * Orchestrates token counting, message storage, and context summarization.
6
+ *
7
+ * Key Features:
8
+ * - Auto-compact at 90% token limit
9
+ * - Preserve key information through AI-powered summarization
10
+ * - Support for cross-provider context preservation
11
+ * - Integration with token counting and repository
12
+ *
13
+ * @since v0.5.0 (Context Continuity Feature)
14
+ */
15
+ import type { IContextRepository } from '../../domain/interfaces/context-repository.interface.js';
16
+ import type { IAIService } from '../../domain/interfaces/ai-service.interface.js';
17
+ import type { ConversationContext, ConversationMessage, ProjectMetadata } from '../../domain/entities/conversation-context.js';
18
+ import { TokenCountingService } from './token-counting-service.js';
19
+ /**
20
+ * Configuration for ContextManager
21
+ */
22
+ export interface ContextManagerConfig {
23
+ /**
24
+ * Auto-compact threshold (default: 0.90 = 90%)
25
+ */
26
+ compactThreshold?: number;
27
+ /**
28
+ * Minimum time between compactions in milliseconds (default: 10 minutes)
29
+ */
30
+ compactCooldown?: number;
31
+ /**
32
+ * Number of recent messages to keep after compaction (default: 10)
33
+ */
34
+ recentMessagesCount?: number;
35
+ }
36
+ /**
37
+ * Context Manager
38
+ *
39
+ * Central service for managing conversation contexts with auto-compaction
40
+ */
41
+ export declare class ContextManager {
42
+ private repository;
43
+ private aiService;
44
+ private tokenCounter;
45
+ private readonly COMPACT_THRESHOLD;
46
+ private readonly COMPACT_COOLDOWN;
47
+ private readonly RECENT_MESSAGES_COUNT;
48
+ private lastCompactionTime;
49
+ constructor(repository: IContextRepository, aiService: IAIService, tokenCounter: TokenCountingService, config?: ContextManagerConfig);
50
+ /**
51
+ * Create a new conversation context
52
+ */
53
+ createContext(params: {
54
+ model: string;
55
+ provider: string;
56
+ project: ProjectMetadata;
57
+ }): Promise<ConversationContext>;
58
+ /**
59
+ * Add a message to a conversation context
60
+ *
61
+ * Automatically triggers compaction if needed
62
+ */
63
+ addMessage(sessionId: string, message: ConversationMessage): Promise<void>;
64
+ /**
65
+ * Get a conversation context
66
+ */
67
+ getContext(sessionId: string): Promise<ConversationContext | null>;
68
+ /**
69
+ * Get the most recent context
70
+ */
71
+ getLatestContext(): Promise<ConversationContext | null>;
72
+ /**
73
+ * Get all contexts
74
+ */
75
+ getAllContexts(limit?: number): Promise<ConversationContext[]>;
76
+ /**
77
+ * Get context statistics
78
+ */
79
+ getStats(sessionId: string): Promise<{
80
+ messageCount: number;
81
+ totalTokens: number;
82
+ compactionCount: number;
83
+ tokensSaved: number;
84
+ age: number;
85
+ } | null>;
86
+ /**
87
+ * Check if context should be compacted
88
+ *
89
+ * Criteria:
90
+ * 1. Token count >= 90% threshold
91
+ * 2. Cooldown period has passed (prevent thrashing)
92
+ * 3. Has enough messages to compact (> recentMessagesCount * 2)
93
+ */
94
+ private shouldCompact;
95
+ /**
96
+ * Compact a conversation context
97
+ *
98
+ * Process:
99
+ * 1. Extract recent messages (keep last N)
100
+ * 2. Summarize older messages using AI
101
+ * 3. Replace old messages with summary message
102
+ * 4. Record compaction event
103
+ *
104
+ * Note: Full implementation is Day 2 task
105
+ * For now, this is a placeholder that sets up the structure
106
+ */
107
+ private compactContext;
108
+ /**
109
+ * Summarize messages using AI
110
+ *
111
+ * Day 2 implementation: Uses AI service to generate intelligent summary
112
+ * that preserves key information (decisions, files, problems solved)
113
+ */
114
+ private summarizeMessages;
115
+ /**
116
+ * Format summary for display
117
+ */
118
+ private formatSummary;
119
+ /**
120
+ * Extract file references from messages
121
+ */
122
+ private extractFilesFromMessages;
123
+ /**
124
+ * Delete a context
125
+ */
126
+ deleteContext(sessionId: string): Promise<void>;
127
+ /**
128
+ * Export a context to portable format
129
+ */
130
+ exportContext(sessionId: string): Promise<any>;
131
+ }
132
+ //# sourceMappingURL=context-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-manager.d.ts","sourceRoot":"","sources":["../../../src/application/services/context-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yDAAyD,CAAC;AAClG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iDAAiD,CAAC;AAClF,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EAGnB,eAAe,EAChB,MAAM,+CAA+C,CAAC;AAMvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;GAIG;AACH,qBAAa,cAAc;IAQvB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,YAAY;IATtB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAS;IAE/C,OAAO,CAAC,kBAAkB,CAAkC;gBAGlD,UAAU,EAAE,kBAAkB,EAC9B,SAAS,EAAE,UAAU,EACrB,YAAY,EAAE,oBAAoB,EAC1C,MAAM,GAAE,oBAAyB;IAOnC;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE;QAC1B,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,eAAe,CAAC;KAC1B,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAgBhC;;;;OAIG;IACG,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC;IAyChB;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAIxE;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAI7D;;OAEG;IACG,cAAc,CAAC,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAIxE;;OAEG;IACG,QAAQ,CAAC,SAAS,EAAE,MAAM;;;;;;;IAIhC;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa;IAuBrB;;;;;;;;;;;OAWG;YACW,cAAc;IAkD5B;;;;;OAKG;YACW,iBAAiB;IAwH/B;;OAEG;IACH,OAAO,CAAC,aAAa;IAYrB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAYhC;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrD;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;CA0CrD"}