@codemieai/code 0.0.27 → 0.0.29

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 (484) hide show
  1. package/README.md +9 -11
  2. package/bin/agent-executor.js +1 -1
  3. package/dist/agents/codemie-code/agent.js +1 -1
  4. package/dist/agents/codemie-code/config.d.ts +1 -1
  5. package/dist/agents/codemie-code/config.d.ts.map +1 -1
  6. package/dist/agents/codemie-code/config.js +3 -4
  7. package/dist/agents/codemie-code/config.js.map +1 -1
  8. package/dist/agents/codemie-code/index.js +1 -1
  9. package/dist/agents/codemie-code/storage/todoStorage.d.ts.map +1 -1
  10. package/dist/agents/codemie-code/storage/todoStorage.js +2 -2
  11. package/dist/agents/codemie-code/storage/todoStorage.js.map +1 -1
  12. package/dist/agents/codemie-code/tools/index.js +1 -1
  13. package/dist/agents/codemie-code/tools/index.js.map +1 -1
  14. package/dist/agents/core/AgentCLI.d.ts.map +1 -1
  15. package/dist/agents/core/AgentCLI.js +6 -10
  16. package/dist/agents/core/AgentCLI.js.map +1 -1
  17. package/dist/agents/core/BaseAgentAdapter.d.ts +17 -9
  18. package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
  19. package/dist/agents/core/BaseAgentAdapter.js +80 -72
  20. package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
  21. package/dist/agents/core/extension/BaseExtensionInstaller.d.ts +258 -0
  22. package/dist/agents/core/extension/BaseExtensionInstaller.d.ts.map +1 -0
  23. package/dist/agents/core/extension/BaseExtensionInstaller.js +522 -0
  24. package/dist/agents/core/extension/BaseExtensionInstaller.js.map +1 -0
  25. package/dist/agents/core/lifecycle-helpers.d.ts.map +1 -1
  26. package/dist/agents/core/lifecycle-helpers.js +16 -2
  27. package/dist/agents/core/lifecycle-helpers.js.map +1 -1
  28. package/dist/agents/core/metrics/index.d.ts +0 -2
  29. package/dist/agents/core/metrics/index.d.ts.map +1 -1
  30. package/dist/agents/core/metrics/index.js +0 -3
  31. package/dist/agents/core/metrics/index.js.map +1 -1
  32. package/dist/agents/core/metrics/types.d.ts +4 -232
  33. package/dist/agents/core/metrics/types.d.ts.map +1 -1
  34. package/dist/agents/core/metrics/types.js +2 -2
  35. package/dist/agents/core/session/BaseProcessor.d.ts +72 -0
  36. package/dist/agents/core/session/BaseProcessor.d.ts.map +1 -0
  37. package/dist/agents/core/session/BaseProcessor.js +9 -0
  38. package/dist/agents/core/session/BaseProcessor.js.map +1 -0
  39. package/dist/agents/core/session/BaseSessionAdapter.d.ts +99 -0
  40. package/dist/agents/core/session/BaseSessionAdapter.d.ts.map +1 -0
  41. package/dist/agents/core/session/BaseSessionAdapter.js +9 -0
  42. package/dist/agents/core/session/BaseSessionAdapter.js.map +1 -0
  43. package/dist/agents/core/session/SessionStore.d.ts +23 -0
  44. package/dist/agents/core/session/SessionStore.d.ts.map +1 -0
  45. package/dist/agents/core/session/SessionStore.js +75 -0
  46. package/dist/agents/core/session/SessionStore.js.map +1 -0
  47. package/dist/agents/core/session/session-config.d.ts +27 -0
  48. package/dist/agents/core/session/session-config.d.ts.map +1 -0
  49. package/dist/agents/core/session/session-config.js +61 -0
  50. package/dist/agents/core/session/session-config.js.map +1 -0
  51. package/dist/agents/core/session/types.d.ts +87 -0
  52. package/dist/agents/core/session/types.d.ts.map +1 -0
  53. package/dist/agents/core/session/types.js +8 -0
  54. package/dist/agents/core/session/types.js.map +1 -0
  55. package/dist/agents/core/session/utils/jsonl-reader.d.ts +15 -0
  56. package/dist/agents/core/session/utils/jsonl-reader.d.ts.map +1 -0
  57. package/dist/agents/core/session/utils/jsonl-reader.js +33 -0
  58. package/dist/agents/core/session/utils/jsonl-reader.js.map +1 -0
  59. package/dist/agents/core/session/utils/jsonl-writer.d.ts +26 -0
  60. package/dist/agents/core/session/utils/jsonl-writer.d.ts.map +1 -0
  61. package/dist/agents/core/session/utils/jsonl-writer.js +56 -0
  62. package/dist/agents/core/session/utils/jsonl-writer.js.map +1 -0
  63. package/dist/agents/core/types.d.ts +78 -11
  64. package/dist/agents/core/types.d.ts.map +1 -1
  65. package/dist/agents/plugins/claude/claude-message-types.d.ts +74 -0
  66. package/dist/agents/plugins/claude/claude-message-types.d.ts.map +1 -0
  67. package/dist/agents/plugins/claude/claude-message-types.js +8 -0
  68. package/dist/agents/plugins/claude/claude-message-types.js.map +1 -0
  69. package/dist/agents/plugins/claude/claude.plugin-installer.d.ts +53 -0
  70. package/dist/agents/plugins/claude/claude.plugin-installer.d.ts.map +1 -0
  71. package/dist/agents/plugins/claude/claude.plugin-installer.js +63 -0
  72. package/dist/agents/plugins/claude/claude.plugin-installer.js.map +1 -0
  73. package/dist/agents/plugins/claude/claude.plugin.d.ts +26 -0
  74. package/dist/agents/plugins/claude/claude.plugin.d.ts.map +1 -0
  75. package/dist/agents/plugins/{claude.plugin.js → claude/claude.plugin.js} +20 -11
  76. package/dist/agents/plugins/claude/claude.plugin.js.map +1 -0
  77. package/dist/agents/plugins/claude/claude.session.d.ts +60 -0
  78. package/dist/agents/plugins/claude/claude.session.d.ts.map +1 -0
  79. package/dist/agents/plugins/claude/claude.session.js +339 -0
  80. package/dist/agents/plugins/claude/claude.session.js.map +1 -0
  81. package/dist/agents/plugins/claude/plugin/.claude-plugin/local-install.json +15 -0
  82. package/dist/agents/plugins/claude/plugin/.claude-plugin/plugin.json +9 -0
  83. package/dist/agents/plugins/claude/plugin/README.md +299 -0
  84. package/dist/agents/plugins/claude/plugin/claude-templates/README.md +539 -0
  85. package/dist/agents/plugins/claude/plugin/claude-templates/templates/CLAUDE.md.template +511 -0
  86. package/dist/agents/plugins/claude/plugin/claude-templates/templates/INDEX.md +205 -0
  87. package/dist/agents/plugins/claude/plugin/claude-templates/templates/TEMPLATE_SIZES.md +74 -0
  88. package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/api/api-patterns.md.template +207 -0
  89. package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/architecture/layered-architecture.md.template +143 -0
  90. package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/architecture/project-structure.md.template +127 -0
  91. package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/data/database-patterns.md.template +168 -0
  92. package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/development/development-practices.md.template +210 -0
  93. package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/integration/external-integrations.md.template +160 -0
  94. package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/security/security-practices.md.template +170 -0
  95. package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/standards/code-quality.md.template +150 -0
  96. package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/standards/git-workflow.md.template +177 -0
  97. package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/testing/testing-patterns.md.template +143 -0
  98. package/dist/agents/plugins/claude/plugin/commands/README.md +0 -0
  99. package/dist/agents/plugins/claude/plugin/commands/codemie-catchup.md +10 -0
  100. package/dist/agents/plugins/claude/plugin/commands/codemie-init.md +731 -0
  101. package/dist/agents/plugins/claude/plugin/commands/memory-add.md +44 -0
  102. package/dist/agents/plugins/claude/plugin/commands/memory-init.md +18 -0
  103. package/dist/agents/plugins/claude/plugin/commands/memory-refresh.md +54 -0
  104. package/dist/agents/plugins/claude/plugin/hooks/hooks.json +71 -0
  105. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts +51 -0
  106. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts.map +1 -0
  107. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js +840 -0
  108. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js.map +1 -0
  109. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.d.ts +37 -0
  110. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.d.ts.map +1 -0
  111. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.js +275 -0
  112. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.js.map +1 -0
  113. package/dist/agents/plugins/codemie-code.plugin.js +1 -1
  114. package/dist/agents/plugins/codemie-code.plugin.js.map +1 -1
  115. package/dist/agents/plugins/gemini/extension/README.md +88 -0
  116. package/dist/agents/plugins/gemini/extension/gemini-extension.json +11 -0
  117. package/dist/agents/plugins/gemini/extension/hooks/hooks.json +65 -0
  118. package/dist/agents/plugins/gemini/gemini.extension-installer.d.ts +49 -0
  119. package/dist/agents/plugins/gemini/gemini.extension-installer.d.ts.map +1 -0
  120. package/dist/agents/plugins/gemini/gemini.extension-installer.js +63 -0
  121. package/dist/agents/plugins/gemini/gemini.extension-installer.js.map +1 -0
  122. package/dist/agents/plugins/gemini/gemini.hook-transformer.d.ts +43 -0
  123. package/dist/agents/plugins/gemini/gemini.hook-transformer.d.ts.map +1 -0
  124. package/dist/agents/plugins/gemini/gemini.hook-transformer.js +57 -0
  125. package/dist/agents/plugins/gemini/gemini.hook-transformer.js.map +1 -0
  126. package/dist/agents/plugins/gemini/gemini.plugin.d.ts +32 -0
  127. package/dist/agents/plugins/gemini/gemini.plugin.d.ts.map +1 -0
  128. package/dist/agents/plugins/gemini/gemini.plugin.js +136 -0
  129. package/dist/agents/plugins/gemini/gemini.plugin.js.map +1 -0
  130. package/dist/agents/plugins/gemini/gemini.session-adapter.d.ts +68 -0
  131. package/dist/agents/plugins/gemini/gemini.session-adapter.d.ts.map +1 -0
  132. package/dist/agents/plugins/gemini/gemini.session-adapter.js +268 -0
  133. package/dist/agents/plugins/gemini/gemini.session-adapter.js.map +1 -0
  134. package/dist/agents/plugins/gemini/session/processors/gemini.conversations-processor.d.ts +36 -0
  135. package/dist/agents/plugins/gemini/session/processors/gemini.conversations-processor.d.ts.map +1 -0
  136. package/dist/agents/plugins/gemini/session/processors/gemini.conversations-processor.js +186 -0
  137. package/dist/agents/plugins/gemini/session/processors/gemini.conversations-processor.js.map +1 -0
  138. package/dist/agents/plugins/gemini/session/processors/gemini.metrics-processor.d.ts +32 -0
  139. package/dist/agents/plugins/gemini/session/processors/gemini.metrics-processor.d.ts.map +1 -0
  140. package/dist/agents/plugins/gemini/session/processors/gemini.metrics-processor.js +193 -0
  141. package/dist/agents/plugins/gemini/session/processors/gemini.metrics-processor.js.map +1 -0
  142. package/dist/agents/plugins/gemini/session/utils/token-aggregator.d.ts +26 -0
  143. package/dist/agents/plugins/gemini/session/utils/token-aggregator.d.ts.map +1 -0
  144. package/dist/agents/plugins/gemini/session/utils/token-aggregator.js +38 -0
  145. package/dist/agents/plugins/gemini/session/utils/token-aggregator.js.map +1 -0
  146. package/dist/agents/plugins/gemini/session/utils/tool-aggregator.d.ts +33 -0
  147. package/dist/agents/plugins/gemini/session/utils/tool-aggregator.d.ts.map +1 -0
  148. package/dist/agents/plugins/gemini/session/utils/tool-aggregator.js +58 -0
  149. package/dist/agents/plugins/gemini/session/utils/tool-aggregator.js.map +1 -0
  150. package/dist/agents/plugins/gemini/session/utils/turn-detector.d.ts +70 -0
  151. package/dist/agents/plugins/gemini/session/utils/turn-detector.d.ts.map +1 -0
  152. package/dist/agents/plugins/gemini/session/utils/turn-detector.js +86 -0
  153. package/dist/agents/plugins/gemini/session/utils/turn-detector.js.map +1 -0
  154. package/dist/agents/registry.d.ts +7 -2
  155. package/dist/agents/registry.d.ts.map +1 -1
  156. package/dist/agents/registry.js +17 -8
  157. package/dist/agents/registry.js.map +1 -1
  158. package/dist/cli/commands/analytics/data-loader.d.ts +1 -1
  159. package/dist/cli/commands/analytics/data-loader.d.ts.map +1 -1
  160. package/dist/cli/commands/analytics/data-loader.js +3 -3
  161. package/dist/cli/commands/analytics/data-loader.js.map +1 -1
  162. package/dist/cli/commands/analytics/index.js +1 -1
  163. package/dist/cli/commands/analytics/index.js.map +1 -1
  164. package/dist/cli/commands/doctor/checks/AIConfigCheck.js +1 -1
  165. package/dist/cli/commands/doctor/checks/AIConfigCheck.js.map +1 -1
  166. package/dist/cli/commands/doctor/checks/AwsCliCheck.js +1 -1
  167. package/dist/cli/commands/doctor/checks/AwsCliCheck.js.map +1 -1
  168. package/dist/cli/commands/doctor/checks/NpmCheck.js +1 -1
  169. package/dist/cli/commands/doctor/checks/NpmCheck.js.map +1 -1
  170. package/dist/cli/commands/doctor/checks/PythonCheck.d.ts +13 -0
  171. package/dist/cli/commands/doctor/checks/PythonCheck.d.ts.map +1 -1
  172. package/dist/cli/commands/doctor/checks/PythonCheck.js +91 -32
  173. package/dist/cli/commands/doctor/checks/PythonCheck.js.map +1 -1
  174. package/dist/cli/commands/doctor/checks/UvCheck.js +1 -1
  175. package/dist/cli/commands/doctor/checks/UvCheck.js.map +1 -1
  176. package/dist/cli/commands/doctor/types.d.ts +1 -1
  177. package/dist/cli/commands/doctor/types.d.ts.map +1 -1
  178. package/dist/cli/commands/hook.d.ts +7 -0
  179. package/dist/cli/commands/hook.d.ts.map +1 -0
  180. package/dist/cli/commands/hook.js +788 -0
  181. package/dist/cli/commands/hook.js.map +1 -0
  182. package/dist/cli/commands/profile/auth.js +1 -1
  183. package/dist/cli/commands/profile/auth.js.map +1 -1
  184. package/dist/{utils/profile-display.d.ts → cli/commands/profile/display.d.ts} +3 -3
  185. package/dist/cli/commands/profile/display.d.ts.map +1 -0
  186. package/dist/{utils/profile-display.js → cli/commands/profile/display.js} +2 -2
  187. package/dist/cli/commands/profile/display.js.map +1 -0
  188. package/dist/cli/commands/profile/index.js +2 -2
  189. package/dist/cli/commands/profile/index.js.map +1 -1
  190. package/dist/cli/commands/setup.d.ts.map +1 -1
  191. package/dist/cli/commands/setup.js +4 -5
  192. package/dist/cli/commands/setup.js.map +1 -1
  193. package/dist/cli/commands/update.d.ts +3 -0
  194. package/dist/cli/commands/update.d.ts.map +1 -0
  195. package/dist/cli/commands/update.js +291 -0
  196. package/dist/cli/commands/update.js.map +1 -0
  197. package/dist/cli/commands/version.js +1 -1
  198. package/dist/cli/commands/version.js.map +1 -1
  199. package/dist/{utils → cli}/first-time.d.ts +4 -0
  200. package/dist/cli/first-time.d.ts.map +1 -0
  201. package/dist/{utils → cli}/first-time.js +27 -14
  202. package/dist/cli/first-time.js.map +1 -0
  203. package/dist/cli/index.js +6 -2
  204. package/dist/cli/index.js.map +1 -1
  205. package/dist/env/manager.d.ts.map +1 -1
  206. package/dist/env/manager.js +3 -4
  207. package/dist/env/manager.js.map +1 -1
  208. package/dist/frameworks/core/BaseFrameworkAdapter.js +1 -1
  209. package/dist/frameworks/core/BaseFrameworkAdapter.js.map +1 -1
  210. package/dist/frameworks/core/types.d.ts +1 -1
  211. package/dist/frameworks/plugins/bmad.plugin.js +2 -2
  212. package/dist/frameworks/plugins/bmad.plugin.js.map +1 -1
  213. package/dist/frameworks/plugins/speckit.plugin.d.ts.map +1 -1
  214. package/dist/frameworks/plugins/speckit.plugin.js +2 -3
  215. package/dist/frameworks/plugins/speckit.plugin.js.map +1 -1
  216. package/dist/index.d.ts +1 -1
  217. package/dist/index.d.ts.map +1 -1
  218. package/dist/index.js +1 -1
  219. package/dist/index.js.map +1 -1
  220. package/dist/migrations/001-config-rename.migration.d.ts.map +1 -1
  221. package/dist/migrations/001-config-rename.migration.js +2 -2
  222. package/dist/migrations/001-config-rename.migration.js.map +1 -1
  223. package/dist/migrations/002-consolidate-sessions.migration.d.ts +50 -0
  224. package/dist/migrations/002-consolidate-sessions.migration.d.ts.map +1 -0
  225. package/dist/migrations/002-consolidate-sessions.migration.js +220 -0
  226. package/dist/migrations/002-consolidate-sessions.migration.js.map +1 -0
  227. package/dist/migrations/index.d.ts +1 -0
  228. package/dist/migrations/index.d.ts.map +1 -1
  229. package/dist/migrations/index.js +3 -2
  230. package/dist/migrations/index.js.map +1 -1
  231. package/dist/migrations/tracker.d.ts.map +1 -1
  232. package/dist/migrations/tracker.js +2 -2
  233. package/dist/migrations/tracker.js.map +1 -1
  234. package/dist/providers/core/base/http-client.js +1 -1
  235. package/dist/providers/core/types.d.ts +1 -1
  236. package/dist/providers/plugins/ollama/ollama.template.d.ts.map +1 -1
  237. package/dist/providers/plugins/ollama/ollama.template.js +3 -1
  238. package/dist/providers/plugins/ollama/ollama.template.js.map +1 -1
  239. package/dist/providers/plugins/sso/index.d.ts +1 -1
  240. package/dist/providers/plugins/sso/index.d.ts.map +1 -1
  241. package/dist/providers/plugins/sso/index.js +1 -1
  242. package/dist/providers/plugins/sso/index.js.map +1 -1
  243. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts +1 -1
  244. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts.map +1 -1
  245. package/dist/providers/plugins/sso/proxy/plugins/index.js +3 -3
  246. package/dist/providers/plugins/sso/proxy/plugins/index.js.map +1 -1
  247. package/dist/providers/plugins/sso/proxy/plugins/sso.session-sync.plugin.d.ts +40 -0
  248. package/dist/providers/plugins/sso/proxy/plugins/sso.session-sync.plugin.d.ts.map +1 -0
  249. package/dist/providers/plugins/sso/proxy/plugins/sso.session-sync.plugin.js +194 -0
  250. package/dist/providers/plugins/sso/proxy/plugins/sso.session-sync.plugin.js.map +1 -0
  251. package/dist/providers/plugins/sso/proxy/proxy-http-client.d.ts +1 -0
  252. package/dist/providers/plugins/sso/proxy/proxy-http-client.d.ts.map +1 -1
  253. package/dist/providers/plugins/sso/proxy/proxy-http-client.js +40 -6
  254. package/dist/providers/plugins/sso/proxy/proxy-http-client.js.map +1 -1
  255. package/dist/providers/plugins/sso/session/BaseProcessor.d.ts +72 -0
  256. package/dist/providers/plugins/sso/session/BaseProcessor.d.ts.map +1 -0
  257. package/dist/providers/plugins/sso/session/BaseProcessor.js +9 -0
  258. package/dist/providers/plugins/sso/session/BaseProcessor.js.map +1 -0
  259. package/dist/providers/plugins/sso/session/BaseSessionAdapter.d.ts +99 -0
  260. package/dist/providers/plugins/sso/session/BaseSessionAdapter.d.ts.map +1 -0
  261. package/dist/providers/plugins/sso/session/BaseSessionAdapter.js +9 -0
  262. package/dist/providers/plugins/sso/session/BaseSessionAdapter.js.map +1 -0
  263. package/dist/providers/plugins/sso/session/SessionSyncer.d.ts +36 -0
  264. package/dist/providers/plugins/sso/session/SessionSyncer.d.ts.map +1 -0
  265. package/dist/providers/plugins/sso/session/SessionSyncer.js +140 -0
  266. package/dist/providers/plugins/sso/session/SessionSyncer.js.map +1 -0
  267. package/dist/providers/plugins/sso/session/processors/conversations/conversation-api-client.d.ts +26 -0
  268. package/dist/providers/plugins/sso/session/processors/conversations/conversation-api-client.d.ts.map +1 -0
  269. package/dist/providers/plugins/sso/session/processors/conversations/conversation-api-client.js +146 -0
  270. package/dist/providers/plugins/sso/session/processors/conversations/conversation-api-client.js.map +1 -0
  271. package/dist/providers/plugins/sso/session/processors/conversations/conversation-sync-processor.d.ts +23 -0
  272. package/dist/providers/plugins/sso/session/processors/conversations/conversation-sync-processor.d.ts.map +1 -0
  273. package/dist/providers/plugins/sso/session/processors/conversations/conversation-sync-processor.js +171 -0
  274. package/dist/providers/plugins/sso/session/processors/conversations/conversation-sync-processor.js.map +1 -0
  275. package/dist/providers/plugins/sso/session/processors/conversations/conversation-types.d.ts +69 -0
  276. package/dist/providers/plugins/sso/session/processors/conversations/conversation-types.d.ts.map +1 -0
  277. package/dist/providers/plugins/sso/session/processors/conversations/conversation-types.js +7 -0
  278. package/dist/providers/plugins/sso/session/processors/conversations/conversation-types.js.map +1 -0
  279. package/dist/providers/plugins/sso/session/processors/metrics/MetricsWriter.d.ts +30 -0
  280. package/dist/providers/plugins/sso/session/processors/metrics/MetricsWriter.d.ts.map +1 -0
  281. package/dist/providers/plugins/sso/session/processors/metrics/MetricsWriter.js +79 -0
  282. package/dist/providers/plugins/sso/session/processors/metrics/MetricsWriter.js.map +1 -0
  283. package/dist/providers/plugins/sso/{metrics/sync/sso.metrics-aggregator.d.ts → session/processors/metrics/metrics-aggregator.d.ts} +6 -5
  284. package/dist/providers/plugins/sso/session/processors/metrics/metrics-aggregator.d.ts.map +1 -0
  285. package/dist/providers/plugins/sso/{metrics/sync/sso.metrics-aggregator.js → session/processors/metrics/metrics-aggregator.js} +20 -12
  286. package/dist/providers/plugins/sso/session/processors/metrics/metrics-aggregator.js.map +1 -0
  287. package/dist/providers/plugins/sso/{metrics/sync/sso.metrics-sender.d.ts → session/processors/metrics/metrics-api-client.d.ts} +18 -11
  288. package/dist/providers/plugins/sso/session/processors/metrics/metrics-api-client.d.ts.map +1 -0
  289. package/dist/providers/plugins/sso/{metrics/sync/sso.metrics-sender.js → session/processors/metrics/metrics-api-client.js} +143 -15
  290. package/dist/providers/plugins/sso/session/processors/metrics/metrics-api-client.js.map +1 -0
  291. package/dist/providers/plugins/sso/{metrics/sync/sso.metrics-post-processor.d.ts → session/processors/metrics/metrics-post-processor.d.ts} +3 -3
  292. package/dist/providers/plugins/sso/session/processors/metrics/metrics-post-processor.d.ts.map +1 -0
  293. package/dist/providers/plugins/sso/{metrics/sync/sso.metrics-post-processor.js → session/processors/metrics/metrics-post-processor.js} +3 -3
  294. package/dist/providers/plugins/sso/session/processors/metrics/metrics-post-processor.js.map +1 -0
  295. package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.d.ts +24 -0
  296. package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.d.ts.map +1 -0
  297. package/dist/providers/plugins/sso/{metrics/sync/sso.metrics-sync.plugin.js → session/processors/metrics/metrics-sync-processor.js} +94 -165
  298. package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.js.map +1 -0
  299. package/dist/providers/plugins/sso/{metrics/sync/sso.metrics-types.d.ts → session/processors/metrics/metrics-types.d.ts} +2 -1
  300. package/dist/providers/plugins/sso/session/processors/metrics/metrics-types.d.ts.map +1 -0
  301. package/dist/providers/plugins/sso/{metrics/sync/sso.metrics-types.js → session/processors/metrics/metrics-types.js} +1 -1
  302. package/dist/providers/plugins/sso/session/processors/metrics/metrics-types.js.map +1 -0
  303. package/dist/providers/plugins/sso/session/utils/jsonl-reader.d.ts +15 -0
  304. package/dist/providers/plugins/sso/session/utils/jsonl-reader.d.ts.map +1 -0
  305. package/dist/providers/plugins/sso/session/utils/jsonl-reader.js +33 -0
  306. package/dist/providers/plugins/sso/session/utils/jsonl-reader.js.map +1 -0
  307. package/dist/providers/plugins/sso/session/utils/jsonl-writer.d.ts +26 -0
  308. package/dist/providers/plugins/sso/session/utils/jsonl-writer.d.ts.map +1 -0
  309. package/dist/providers/plugins/sso/{metrics/sync/sso.jsonl-writer.js → session/utils/jsonl-writer.js} +11 -27
  310. package/dist/providers/plugins/sso/session/utils/jsonl-writer.js.map +1 -0
  311. package/dist/providers/plugins/sso/sso.auth.js +1 -1
  312. package/dist/providers/plugins/sso/sso.auth.js.map +1 -1
  313. package/dist/providers/plugins/sso/sso.http-client.d.ts +1 -1
  314. package/dist/providers/plugins/sso/sso.http-client.js +1 -1
  315. package/dist/providers/plugins/sso/sso.http-client.js.map +1 -1
  316. package/dist/providers/plugins/sso/sso.template.d.ts.map +1 -1
  317. package/dist/providers/plugins/sso/sso.template.js +71 -43
  318. package/dist/providers/plugins/sso/sso.template.js.map +1 -1
  319. package/dist/utils/{config-loader.d.ts → config.d.ts} +6 -1
  320. package/dist/utils/config.d.ts.map +1 -0
  321. package/dist/utils/{config-loader.js → config.js} +30 -4
  322. package/dist/utils/config.js.map +1 -0
  323. package/dist/utils/errors.d.ts +89 -0
  324. package/dist/utils/errors.d.ts.map +1 -1
  325. package/dist/utils/errors.js +340 -0
  326. package/dist/utils/errors.js.map +1 -1
  327. package/dist/utils/exec.d.ts +6 -0
  328. package/dist/utils/exec.d.ts.map +1 -1
  329. package/dist/utils/exec.js +6 -0
  330. package/dist/utils/exec.js.map +1 -1
  331. package/dist/utils/file-operations.d.ts +20 -0
  332. package/dist/utils/file-operations.d.ts.map +1 -0
  333. package/dist/utils/file-operations.js +48 -0
  334. package/dist/utils/file-operations.js.map +1 -0
  335. package/dist/utils/logger.d.ts +2 -1
  336. package/dist/utils/logger.d.ts.map +1 -1
  337. package/dist/utils/logger.js +15 -7
  338. package/dist/utils/logger.js.map +1 -1
  339. package/dist/utils/{json-parser.d.ts → parsers.d.ts} +1 -1
  340. package/dist/utils/parsers.d.ts.map +1 -0
  341. package/dist/utils/{json-parser.js → parsers.js} +1 -1
  342. package/dist/utils/parsers.js.map +1 -0
  343. package/dist/utils/{path-utils.d.ts → paths.d.ts} +77 -12
  344. package/dist/utils/paths.d.ts.map +1 -0
  345. package/dist/utils/{path-utils.js → paths.js} +103 -12
  346. package/dist/utils/paths.js.map +1 -0
  347. package/dist/utils/{npm.d.ts → processes.d.ts} +44 -7
  348. package/dist/utils/processes.d.ts.map +1 -0
  349. package/dist/utils/{npm.js → processes.js} +129 -10
  350. package/dist/utils/processes.js.map +1 -0
  351. package/dist/utils/profile.d.ts +1 -16
  352. package/dist/utils/profile.d.ts.map +1 -1
  353. package/dist/utils/profile.js +1 -27
  354. package/dist/utils/profile.js.map +1 -1
  355. package/dist/utils/security.d.ts +62 -0
  356. package/dist/utils/security.d.ts.map +1 -0
  357. package/dist/utils/security.js +396 -0
  358. package/dist/utils/security.js.map +1 -0
  359. package/package.json +11 -11
  360. package/scripts/copy-plugins.js +57 -0
  361. package/scripts/license-check.js +23 -0
  362. package/bin/codemie-codex.js +0 -18
  363. package/bin/codemie-deepagents.js +0 -18
  364. package/dist/agents/core/BaseMetricsAdapter.d.ts +0 -165
  365. package/dist/agents/core/BaseMetricsAdapter.d.ts.map +0 -1
  366. package/dist/agents/core/BaseMetricsAdapter.js +0 -308
  367. package/dist/agents/core/BaseMetricsAdapter.js.map +0 -1
  368. package/dist/agents/core/metrics/MetricsOrchestrator.d.ts +0 -81
  369. package/dist/agents/core/metrics/MetricsOrchestrator.d.ts.map +0 -1
  370. package/dist/agents/core/metrics/MetricsOrchestrator.js +0 -417
  371. package/dist/agents/core/metrics/MetricsOrchestrator.js.map +0 -1
  372. package/dist/agents/core/metrics/core/DeltaWriter.d.ts +0 -49
  373. package/dist/agents/core/metrics/core/DeltaWriter.d.ts.map +0 -1
  374. package/dist/agents/core/metrics/core/DeltaWriter.js +0 -152
  375. package/dist/agents/core/metrics/core/DeltaWriter.js.map +0 -1
  376. package/dist/agents/core/metrics/core/FileSnapshotter.d.ts +0 -22
  377. package/dist/agents/core/metrics/core/FileSnapshotter.d.ts.map +0 -1
  378. package/dist/agents/core/metrics/core/FileSnapshotter.js +0 -74
  379. package/dist/agents/core/metrics/core/FileSnapshotter.js.map +0 -1
  380. package/dist/agents/core/metrics/core/SessionCorrelator.d.ts +0 -34
  381. package/dist/agents/core/metrics/core/SessionCorrelator.d.ts.map +0 -1
  382. package/dist/agents/core/metrics/core/SessionCorrelator.js +0 -157
  383. package/dist/agents/core/metrics/core/SessionCorrelator.js.map +0 -1
  384. package/dist/agents/core/metrics/core/SyncStateManager.d.ts +0 -69
  385. package/dist/agents/core/metrics/core/SyncStateManager.d.ts.map +0 -1
  386. package/dist/agents/core/metrics/core/SyncStateManager.js +0 -283
  387. package/dist/agents/core/metrics/core/SyncStateManager.js.map +0 -1
  388. package/dist/agents/core/metrics/session/SessionStore.d.ts +0 -43
  389. package/dist/agents/core/metrics/session/SessionStore.d.ts.map +0 -1
  390. package/dist/agents/core/metrics/session/SessionStore.js +0 -146
  391. package/dist/agents/core/metrics/session/SessionStore.js.map +0 -1
  392. package/dist/agents/core/metrics-config.d.ts +0 -38
  393. package/dist/agents/core/metrics-config.d.ts.map +0 -1
  394. package/dist/agents/core/metrics-config.js +0 -95
  395. package/dist/agents/core/metrics-config.js.map +0 -1
  396. package/dist/agents/plugins/claude.metrics.d.ts +0 -102
  397. package/dist/agents/plugins/claude.metrics.d.ts.map +0 -1
  398. package/dist/agents/plugins/claude.metrics.js +0 -656
  399. package/dist/agents/plugins/claude.metrics.js.map +0 -1
  400. package/dist/agents/plugins/claude.plugin.d.ts +0 -19
  401. package/dist/agents/plugins/claude.plugin.d.ts.map +0 -1
  402. package/dist/agents/plugins/claude.plugin.js.map +0 -1
  403. package/dist/agents/plugins/codex.plugin.d.ts +0 -17
  404. package/dist/agents/plugins/codex.plugin.d.ts.map +0 -1
  405. package/dist/agents/plugins/codex.plugin.js +0 -386
  406. package/dist/agents/plugins/codex.plugin.js.map +0 -1
  407. package/dist/agents/plugins/deepagents.plugin.d.ts +0 -21
  408. package/dist/agents/plugins/deepagents.plugin.d.ts.map +0 -1
  409. package/dist/agents/plugins/deepagents.plugin.js +0 -104
  410. package/dist/agents/plugins/deepagents.plugin.js.map +0 -1
  411. package/dist/agents/plugins/gemini.metrics.d.ts +0 -99
  412. package/dist/agents/plugins/gemini.metrics.d.ts.map +0 -1
  413. package/dist/agents/plugins/gemini.metrics.js +0 -475
  414. package/dist/agents/plugins/gemini.metrics.js.map +0 -1
  415. package/dist/agents/plugins/gemini.plugin.d.ts +0 -16
  416. package/dist/agents/plugins/gemini.plugin.d.ts.map +0 -1
  417. package/dist/agents/plugins/gemini.plugin.js +0 -80
  418. package/dist/agents/plugins/gemini.plugin.js.map +0 -1
  419. package/dist/agents/plugins/history-parser.d.ts +0 -52
  420. package/dist/agents/plugins/history-parser.d.ts.map +0 -1
  421. package/dist/agents/plugins/history-parser.js +0 -155
  422. package/dist/agents/plugins/history-parser.js.map +0 -1
  423. package/dist/providers/plugins/sso/metrics/sync/sso.jsonl-writer.d.ts +0 -28
  424. package/dist/providers/plugins/sso/metrics/sync/sso.jsonl-writer.d.ts.map +0 -1
  425. package/dist/providers/plugins/sso/metrics/sync/sso.jsonl-writer.js.map +0 -1
  426. package/dist/providers/plugins/sso/metrics/sync/sso.lifecycle-handler.d.ts +0 -62
  427. package/dist/providers/plugins/sso/metrics/sync/sso.lifecycle-handler.d.ts.map +0 -1
  428. package/dist/providers/plugins/sso/metrics/sync/sso.lifecycle-handler.js +0 -157
  429. package/dist/providers/plugins/sso/metrics/sync/sso.lifecycle-handler.js.map +0 -1
  430. package/dist/providers/plugins/sso/metrics/sync/sso.metrics-aggregator.d.ts.map +0 -1
  431. package/dist/providers/plugins/sso/metrics/sync/sso.metrics-aggregator.js.map +0 -1
  432. package/dist/providers/plugins/sso/metrics/sync/sso.metrics-api-client.d.ts +0 -32
  433. package/dist/providers/plugins/sso/metrics/sync/sso.metrics-api-client.d.ts.map +0 -1
  434. package/dist/providers/plugins/sso/metrics/sync/sso.metrics-api-client.js +0 -159
  435. package/dist/providers/plugins/sso/metrics/sync/sso.metrics-api-client.js.map +0 -1
  436. package/dist/providers/plugins/sso/metrics/sync/sso.metrics-post-processor.d.ts.map +0 -1
  437. package/dist/providers/plugins/sso/metrics/sync/sso.metrics-post-processor.js.map +0 -1
  438. package/dist/providers/plugins/sso/metrics/sync/sso.metrics-sender.d.ts.map +0 -1
  439. package/dist/providers/plugins/sso/metrics/sync/sso.metrics-sender.js.map +0 -1
  440. package/dist/providers/plugins/sso/metrics/sync/sso.metrics-sync.plugin.d.ts +0 -36
  441. package/dist/providers/plugins/sso/metrics/sync/sso.metrics-sync.plugin.d.ts.map +0 -1
  442. package/dist/providers/plugins/sso/metrics/sync/sso.metrics-sync.plugin.js.map +0 -1
  443. package/dist/providers/plugins/sso/metrics/sync/sso.metrics-types.d.ts.map +0 -1
  444. package/dist/providers/plugins/sso/metrics/sync/sso.metrics-types.js.map +0 -1
  445. package/dist/utils/config-loader.d.ts.map +0 -1
  446. package/dist/utils/config-loader.js.map +0 -1
  447. package/dist/utils/credential-store.d.ts +0 -22
  448. package/dist/utils/credential-store.d.ts.map +0 -1
  449. package/dist/utils/credential-store.js +0 -165
  450. package/dist/utils/credential-store.js.map +0 -1
  451. package/dist/utils/dirname.d.ts +0 -7
  452. package/dist/utils/dirname.d.ts.map +0 -1
  453. package/dist/utils/dirname.js +0 -11
  454. package/dist/utils/dirname.js.map +0 -1
  455. package/dist/utils/error-context.d.ts +0 -90
  456. package/dist/utils/error-context.d.ts.map +0 -1
  457. package/dist/utils/error-context.js +0 -338
  458. package/dist/utils/error-context.js.map +0 -1
  459. package/dist/utils/first-time.d.ts.map +0 -1
  460. package/dist/utils/first-time.js.map +0 -1
  461. package/dist/utils/git.d.ts +0 -13
  462. package/dist/utils/git.d.ts.map +0 -1
  463. package/dist/utils/git.js +0 -37
  464. package/dist/utils/git.js.map +0 -1
  465. package/dist/utils/installation-id.d.ts +0 -10
  466. package/dist/utils/installation-id.d.ts.map +0 -1
  467. package/dist/utils/installation-id.js +0 -30
  468. package/dist/utils/installation-id.js.map +0 -1
  469. package/dist/utils/json-parser.d.ts.map +0 -1
  470. package/dist/utils/json-parser.js.map +0 -1
  471. package/dist/utils/npm.d.ts.map +0 -1
  472. package/dist/utils/npm.js.map +0 -1
  473. package/dist/utils/path-utils.d.ts.map +0 -1
  474. package/dist/utils/path-utils.js.map +0 -1
  475. package/dist/utils/profile-display.d.ts.map +0 -1
  476. package/dist/utils/profile-display.js.map +0 -1
  477. package/dist/utils/sanitize.d.ts +0 -28
  478. package/dist/utils/sanitize.d.ts.map +0 -1
  479. package/dist/utils/sanitize.js +0 -212
  480. package/dist/utils/sanitize.js.map +0 -1
  481. package/dist/utils/which.d.ts +0 -20
  482. package/dist/utils/which.d.ts.map +0 -1
  483. package/dist/utils/which.js +0 -54
  484. package/dist/utils/which.js.map +0 -1
@@ -0,0 +1,268 @@
1
+ /**
2
+ * Gemini Session Adapter
3
+ *
4
+ * Parses Gemini CLI session files from ~/.gemini/tmp/{hash}/chats/
5
+ * Extracts metrics and preserves messages for processors.
6
+ *
7
+ * Key differences from Claude:
8
+ * - JSON format (not JSONL) - single object with messages array
9
+ * - 5 token fields: input, output, cached, thoughts, tool
10
+ * - Self-contained tool calls (not separate tool_use/tool_result messages)
11
+ * - Session metadata at root level (sessionId, projectHash, timestamps)
12
+ */
13
+ import { readFile } from 'fs/promises';
14
+ import { logger } from '../../../utils/logger.js';
15
+ import { GeminiMetricsProcessor } from './session/processors/gemini.metrics-processor.js';
16
+ import { GeminiConversationsProcessor } from './session/processors/gemini.conversations-processor.js';
17
+ /**
18
+ * Gemini session adapter implementation.
19
+ * Parses Gemini-specific JSON format into unified ParsedSession.
20
+ * Orchestrates multiple processors that transform messages.
21
+ */
22
+ export class GeminiSessionAdapter {
23
+ metadata;
24
+ agentName = 'gemini';
25
+ processors = [];
26
+ constructor(metadata) {
27
+ this.metadata = metadata;
28
+ if (!metadata.dataPaths?.home) {
29
+ throw new Error('Agent metadata must provide dataPaths.home');
30
+ }
31
+ // Initialize and register processors internally
32
+ // Processors run in priority order: metrics (1), conversations (2)
33
+ this.initializeProcessors();
34
+ }
35
+ /**
36
+ * Initialize processors for this adapter.
37
+ * Uses Gemini-specific processors that understand Gemini's message format
38
+ */
39
+ initializeProcessors() {
40
+ // Register Gemini metrics processor (priority 1)
41
+ this.registerProcessor(new GeminiMetricsProcessor());
42
+ // Register Gemini conversations processor (priority 2)
43
+ this.registerProcessor(new GeminiConversationsProcessor());
44
+ logger.debug(`[gemini-adapter] Initialized ${this.processors.length} processors`);
45
+ }
46
+ /**
47
+ * Parse Gemini session file to unified format.
48
+ * Reads JSON file (not JSONL) and extracts both raw messages and metrics.
49
+ */
50
+ async parseSessionFile(filePath, sessionId) {
51
+ try {
52
+ // Read JSON file
53
+ const content = await readFile(filePath, 'utf-8');
54
+ const sessionData = JSON.parse(content);
55
+ // Handle empty message array gracefully
56
+ if (!sessionData.messages || sessionData.messages.length === 0) {
57
+ logger.debug(`[gemini-adapter] Session file has no messages: ${filePath}`);
58
+ return {
59
+ sessionId,
60
+ agentName: this.metadata.displayName || 'gemini',
61
+ agentSessionId: sessionData.sessionId, // Store agent-specific session ID
62
+ metadata: {
63
+ projectPath: filePath,
64
+ createdAt: sessionData.startTime,
65
+ updatedAt: sessionData.lastUpdated
66
+ },
67
+ messages: [],
68
+ metrics: {
69
+ tokens: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
70
+ tools: {},
71
+ toolStatus: {},
72
+ fileOperations: []
73
+ }
74
+ };
75
+ }
76
+ // Extract session metadata
77
+ const metadata = {
78
+ projectPath: filePath,
79
+ createdAt: sessionData.startTime,
80
+ updatedAt: sessionData.lastUpdated
81
+ };
82
+ // Extract metrics from messages
83
+ const metrics = this.extractMetrics(sessionData.messages);
84
+ logger.debug(`[gemini-adapter] Parsed session ${sessionId}: ${sessionData.messages.length} messages, ` +
85
+ `${metrics.tokens?.input || 0} input tokens, ${metrics.tokens?.output || 0} output tokens, ` +
86
+ `${metrics.tokens?.cacheRead || 0} cached tokens`);
87
+ return {
88
+ sessionId,
89
+ agentName: this.metadata.displayName || 'gemini',
90
+ agentSessionId: sessionData.sessionId, // Store agent-specific session ID
91
+ metadata,
92
+ messages: sessionData.messages, // Preserve raw messages for conversations processor
93
+ metrics // Extracted metrics for metrics processor
94
+ };
95
+ }
96
+ catch (error) {
97
+ logger.error(`[gemini-adapter] Failed to parse session file ${filePath}:`, error);
98
+ throw error;
99
+ }
100
+ }
101
+ /**
102
+ * Extract metrics data from Gemini messages.
103
+ * Aggregates tokens (5 fields), tools, and file operations.
104
+ *
105
+ * Token mapping strategy (from tech spec):
106
+ * - input → input (direct)
107
+ * - output → output (direct)
108
+ * - cached → cacheRead (semantic match)
109
+ * - cacheWrite → 0 (not available in Gemini)
110
+ * - thoughts, tool → stored in metadata (Gemini-specific)
111
+ */
112
+ extractMetrics(messages) {
113
+ let inputTokens = 0;
114
+ let outputTokens = 0;
115
+ let cachedTokens = 0;
116
+ // Note: Gemini-specific token fields (thoughts, tool) are tracked but not included
117
+ // in the unified metrics format. They could be added to metadata if needed later.
118
+ const toolCounts = {};
119
+ const toolStatus = {};
120
+ const fileOperations = [];
121
+ // Aggregate metrics from all messages
122
+ for (const msg of messages) {
123
+ // Extract token usage (Gemini has 5 fields)
124
+ if (msg.tokens) {
125
+ inputTokens += msg.tokens.input || 0;
126
+ outputTokens += msg.tokens.output || 0;
127
+ cachedTokens += msg.tokens.cached || 0;
128
+ // thoughts and tool tokens are Gemini-specific and not mapped to unified format
129
+ }
130
+ // Extract tool usage and status from self-contained toolCalls
131
+ if (msg.toolCalls && Array.isArray(msg.toolCalls)) {
132
+ for (const tool of msg.toolCalls) {
133
+ // Count tool usage
134
+ toolCounts[tool.name] = (toolCounts[tool.name] || 0) + 1;
135
+ // Initialize status tracking
136
+ if (!toolStatus[tool.name]) {
137
+ toolStatus[tool.name] = { success: 0, failure: 0 };
138
+ }
139
+ // Track success/failure based on status field
140
+ if (tool.status === 'success') {
141
+ toolStatus[tool.name].success++;
142
+ }
143
+ else if (tool.status === 'error') {
144
+ toolStatus[tool.name].failure++;
145
+ }
146
+ // Extract file operations from tool arguments
147
+ if (tool.args) {
148
+ this.extractFileOperation(tool.name, tool.args, fileOperations);
149
+ }
150
+ }
151
+ }
152
+ }
153
+ return {
154
+ tokens: {
155
+ input: inputTokens,
156
+ output: outputTokens,
157
+ cacheRead: cachedTokens, // Map Gemini's "cached" to "cacheRead"
158
+ cacheWrite: 0 // Not available in Gemini
159
+ // Note: thoughts and tool tokens stored separately if needed
160
+ },
161
+ tools: toolCounts,
162
+ toolStatus,
163
+ fileOperations
164
+ };
165
+ }
166
+ /**
167
+ * Extract file operation from tool arguments
168
+ */
169
+ extractFileOperation(toolName, args, operations) {
170
+ const filePath = args.file_path;
171
+ if (!filePath)
172
+ return;
173
+ // Map tool names to operation types
174
+ const toolToOpType = {
175
+ 'write_file': 'write',
176
+ 'replace': 'edit',
177
+ 'edit_file': 'edit',
178
+ // Add more mappings as needed
179
+ };
180
+ const opType = toolToOpType[toolName];
181
+ if (opType) {
182
+ operations.push({ type: opType, path: filePath });
183
+ }
184
+ }
185
+ /**
186
+ * Register a processor to run during session processing.
187
+ * Processors are sorted by priority (lower runs first).
188
+ */
189
+ registerProcessor(processor) {
190
+ this.processors.push(processor);
191
+ this.processors.sort((a, b) => a.priority - b.priority);
192
+ logger.debug(`[gemini-adapter] Registered processor: ${processor.name} (priority: ${processor.priority})`);
193
+ }
194
+ /**
195
+ * Process session file with all registered processors.
196
+ * Reads file once, passes ParsedSession to all processors.
197
+ *
198
+ * @param filePath - Path to agent session file
199
+ * @param sessionId - CodeMie session ID
200
+ * @param context - Processing context (for processors that need API access)
201
+ * @returns Aggregated results from all processors
202
+ */
203
+ async processSession(filePath, sessionId, context) {
204
+ try {
205
+ logger.debug(`[gemini-adapter] Processing session ${sessionId} with ${this.processors.length} processor${this.processors.length !== 1 ? 's' : ''}`);
206
+ // 1. Parse session file once
207
+ const parsedSession = await this.parseSessionFile(filePath, sessionId);
208
+ // 2. Execute processors in priority order
209
+ const processorResults = {};
210
+ const failedProcessors = [];
211
+ let totalRecords = 0;
212
+ for (const processor of this.processors) {
213
+ try {
214
+ // Check if processor should run
215
+ if (!processor.shouldProcess(parsedSession)) {
216
+ logger.debug(`[gemini-adapter] Processor ${processor.name} skipped (shouldProcess returned false)`);
217
+ continue;
218
+ }
219
+ logger.debug(`[gemini-adapter] Running processor: ${processor.name}`);
220
+ // Execute processor
221
+ const result = await processor.process(parsedSession, context);
222
+ processorResults[processor.name] = {
223
+ success: result.success,
224
+ message: result.message,
225
+ recordsProcessed: result.metadata?.recordsProcessed
226
+ };
227
+ // Track failures
228
+ if (!result.success) {
229
+ failedProcessors.push(processor.name);
230
+ logger.warn(`[gemini-adapter] Processor ${processor.name} failed: ${result.message}`);
231
+ }
232
+ else {
233
+ logger.debug(`[gemini-adapter] Processor ${processor.name} succeeded: ${result.message}`);
234
+ }
235
+ // Accumulate records
236
+ const recordsProcessed = result.metadata?.recordsProcessed;
237
+ if (typeof recordsProcessed === 'number') {
238
+ totalRecords += recordsProcessed;
239
+ }
240
+ }
241
+ catch (error) {
242
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
243
+ logger.error(`[gemini-adapter] Processor ${processor.name} threw error:`, error);
244
+ processorResults[processor.name] = {
245
+ success: false,
246
+ message: errorMessage
247
+ };
248
+ failedProcessors.push(processor.name);
249
+ }
250
+ }
251
+ // 3. Aggregate results
252
+ const result = {
253
+ success: failedProcessors.length === 0,
254
+ processors: processorResults,
255
+ totalRecords,
256
+ failedProcessors
257
+ };
258
+ logger.debug(`[gemini-adapter] Processing complete: ${result.success ? 'SUCCESS' : 'FAILED'} ` +
259
+ `(${totalRecords} records, ${failedProcessors.length} failed processors)`);
260
+ return result;
261
+ }
262
+ catch (error) {
263
+ logger.error(`[gemini-adapter] Session processing failed:`, error);
264
+ throw error;
265
+ }
266
+ }
267
+ }
268
+ //# sourceMappingURL=gemini.session-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.session-adapter.js","sourceRoot":"","sources":["../../../../src/agents/plugins/gemini/gemini.session-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Gemini Conversations Processor (Turn-Based Architecture)
3
+ *
4
+ * Transforms Gemini session messages into turn-based conversation records.
5
+ *
6
+ * Key Features:
7
+ * - Turn-based: User + Assistant pairs (not flat messages)
8
+ * - Turn detection: User message → next user/system message
9
+ * - Token aggregation: Across multiple gemini messages in a turn
10
+ * - Tool extraction: From nested Gemini structure
11
+ * - Incremental sync: Tracks lastSyncedMessageUuid
12
+ * - Correct payload: ConversationPayloadRecord with conversationId + history
13
+ *
14
+ * Architecture follows Claude's proven patterns.
15
+ */
16
+ import type { SessionProcessor, ProcessingContext, ProcessingResult } from '../../../../core/session/BaseProcessor.js';
17
+ import type { ParsedSession } from '../../../../core/session/BaseSessionAdapter.js';
18
+ export declare class GeminiConversationsProcessor implements SessionProcessor {
19
+ readonly name = "gemini-conversations";
20
+ readonly priority = 2;
21
+ shouldProcess(session: ParsedSession): boolean;
22
+ process(session: ParsedSession, context: ProcessingContext): Promise<ProcessingResult>;
23
+ /**
24
+ * Transform turns into ConversationPayloadRecord format
25
+ */
26
+ private transformTurnsToPayloads;
27
+ /**
28
+ * Write payloads to conversation JSONL file
29
+ */
30
+ private writePayloads;
31
+ /**
32
+ * Update sync state in session metadata
33
+ */
34
+ private updateSyncState;
35
+ }
36
+ //# sourceMappingURL=gemini.conversations-processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.conversations-processor.d.ts","sourceRoot":"","sources":["../../../../../../src/agents/plugins/gemini/session/processors/gemini.conversations-processor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AACvH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAC;AAYpF,qBAAa,4BAA6B,YAAW,gBAAgB;IACnE,QAAQ,CAAC,IAAI,0BAA0B;IACvC,QAAQ,CAAC,QAAQ,KAAK;IAEtB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO;IAIxC,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAmE5F;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA+EhC;;OAEG;YACW,aAAa;IAiB3B;;OAEG;YACW,eAAe;CA+B9B"}
@@ -0,0 +1,186 @@
1
+ /**
2
+ * Gemini Conversations Processor (Turn-Based Architecture)
3
+ *
4
+ * Transforms Gemini session messages into turn-based conversation records.
5
+ *
6
+ * Key Features:
7
+ * - Turn-based: User + Assistant pairs (not flat messages)
8
+ * - Turn detection: User message → next user/system message
9
+ * - Token aggregation: Across multiple gemini messages in a turn
10
+ * - Tool extraction: From nested Gemini structure
11
+ * - Incremental sync: Tracks lastSyncedMessageUuid
12
+ * - Correct payload: ConversationPayloadRecord with conversationId + history
13
+ *
14
+ * Architecture follows Claude's proven patterns.
15
+ */
16
+ import { logger } from '../../../../../utils/logger.js';
17
+ import { getSessionConversationPath } from '../../../../core/session/session-config.js';
18
+ import { SessionStore } from '../../../../core/session/SessionStore.js';
19
+ import { detectTurns, filterNewMessages } from '../utils/turn-detector.js';
20
+ import { aggregateTokens } from '../utils/token-aggregator.js';
21
+ import { extractToolThoughts } from '../utils/tool-aggregator.js';
22
+ import { appendFile, mkdir } from 'fs/promises';
23
+ import { existsSync } from 'fs';
24
+ import { dirname } from 'path';
25
+ export class GeminiConversationsProcessor {
26
+ name = 'gemini-conversations';
27
+ priority = 2; // Run after metrics
28
+ shouldProcess(session) {
29
+ return Boolean(session.messages && session.messages.length > 0);
30
+ }
31
+ async process(session, context) {
32
+ try {
33
+ // 1. Load sync state
34
+ const sessionStore = new SessionStore();
35
+ const sessionMetadata = await sessionStore.loadSession(context.sessionId);
36
+ const lastSyncedId = sessionMetadata?.sync?.conversations?.lastSyncedMessageUuid || null;
37
+ const lastHistoryIndex = sessionMetadata?.sync?.conversations?.lastSyncedHistoryIndex ?? -1;
38
+ logger.debug(`[${this.name}] Sync state: lastSyncedId=${lastSyncedId}, lastHistoryIndex=${lastHistoryIndex}`);
39
+ // 2. Filter new messages
40
+ const messages = session.messages;
41
+ const newMessages = filterNewMessages(messages, lastSyncedId);
42
+ if (newMessages.length === 0) {
43
+ logger.info(`[${this.name}] No new messages to process`);
44
+ return { success: true, message: 'No new messages' };
45
+ }
46
+ logger.debug(`[${this.name}] Processing ${newMessages.length} new messages`);
47
+ // 3. Detect turns
48
+ const turns = detectTurns(newMessages);
49
+ if (turns.length === 0) {
50
+ logger.info(`[${this.name}] No complete turns found in ${newMessages.length} messages`);
51
+ return { success: true, message: 'No complete turns' };
52
+ }
53
+ logger.debug(`[${this.name}] Detected ${turns.length} turns`);
54
+ // 4. Transform turns to conversation payloads
55
+ const payloads = this.transformTurnsToPayloads(turns, context, lastHistoryIndex);
56
+ // 5. Write payloads to JSONL
57
+ await this.writePayloads(context.sessionId, payloads);
58
+ // 6. Update sync state
59
+ const lastMessage = messages[messages.length - 1]; // Use all messages, not just new
60
+ const finalHistoryIndex = lastHistoryIndex + turns.length;
61
+ await this.updateSyncState(context.sessionId, lastMessage.id, turns.length, finalHistoryIndex);
62
+ logger.info(`[${this.name}] Processed ${turns.length} turns (${newMessages.length} messages)`);
63
+ return {
64
+ success: true,
65
+ message: `Processed ${turns.length} turns`,
66
+ metadata: {
67
+ turnsProcessed: turns.length,
68
+ messagesProcessed: newMessages.length
69
+ }
70
+ };
71
+ }
72
+ catch (error) {
73
+ logger.error(`[${this.name}] Processing failed:`, error);
74
+ return {
75
+ success: false,
76
+ message: error instanceof Error ? error.message : 'Unknown error'
77
+ };
78
+ }
79
+ }
80
+ /**
81
+ * Transform turns into ConversationPayloadRecord format
82
+ */
83
+ transformTurnsToPayloads(turns, context, lastHistoryIndex) {
84
+ const payloads = [];
85
+ let currentHistoryIndex = lastHistoryIndex;
86
+ for (const turn of turns) {
87
+ currentHistoryIndex++; // Increment for each new turn
88
+ // User record
89
+ const userRecord = {
90
+ role: 'User',
91
+ message: turn.userMessage.content,
92
+ history_index: currentHistoryIndex,
93
+ date: turn.userMessage.timestamp,
94
+ message_raw: turn.userMessage.content,
95
+ file_names: []
96
+ };
97
+ // Aggregate content from all gemini messages
98
+ const aggregatedContent = turn.geminiMessages
99
+ .map(m => m.content)
100
+ .filter(c => c.trim().length > 0)
101
+ .join('\n\n');
102
+ // Aggregate tokens
103
+ const tokens = aggregateTokens(turn.geminiMessages);
104
+ // Extract tool thoughts
105
+ const thoughts = extractToolThoughts(turn.geminiMessages);
106
+ // Calculate response time
107
+ const lastGemini = turn.geminiMessages[turn.geminiMessages.length - 1];
108
+ const responseTimeMs = lastGemini
109
+ ? new Date(lastGemini.timestamp).getTime() - new Date(turn.userMessage.timestamp).getTime()
110
+ : 0;
111
+ const responseTimeSec = Math.round((responseTimeMs / 1000) * 100) / 100; // 2 decimals
112
+ // Assistant record
113
+ const assistantRecord = {
114
+ role: 'Assistant',
115
+ message: aggregatedContent,
116
+ message_raw: aggregatedContent,
117
+ history_index: currentHistoryIndex,
118
+ date: lastGemini?.timestamp || turn.userMessage.timestamp,
119
+ response_time: responseTimeSec,
120
+ input_tokens: tokens.input_tokens,
121
+ output_tokens: tokens.output_tokens,
122
+ cache_creation_input_tokens: tokens.cache_creation_input_tokens,
123
+ cache_read_input_tokens: tokens.cache_read_input_tokens,
124
+ assistant_id: '5a430368-9e91-4564-be20-989803bf4da2' // Constant per agent type
125
+ };
126
+ // Add thoughts if present
127
+ if (thoughts.length > 0) {
128
+ assistantRecord.thoughts = thoughts;
129
+ }
130
+ // Create payload
131
+ const payload = {
132
+ timestamp: Date.now(),
133
+ isTurnContinuation: false, // TODO: Detect continuations
134
+ historyIndices: [currentHistoryIndex, currentHistoryIndex],
135
+ messageCount: 2,
136
+ payload: {
137
+ conversationId: context.agentSessionId, // From processing context
138
+ history: [userRecord, assistantRecord]
139
+ },
140
+ status: 'pending'
141
+ };
142
+ payloads.push(payload);
143
+ }
144
+ return payloads;
145
+ }
146
+ /**
147
+ * Write payloads to conversation JSONL file
148
+ */
149
+ async writePayloads(sessionId, payloads) {
150
+ const conversationsPath = getSessionConversationPath(sessionId);
151
+ const outputDir = dirname(conversationsPath);
152
+ // Ensure directory exists
153
+ if (!existsSync(outputDir)) {
154
+ await mkdir(outputDir, { recursive: true });
155
+ }
156
+ // Append each payload as a JSONL line
157
+ for (const payload of payloads) {
158
+ await appendFile(conversationsPath, JSON.stringify(payload) + '\n', 'utf-8');
159
+ }
160
+ logger.debug(`[${this.name}] Wrote ${payloads.length} payloads to ${conversationsPath}`);
161
+ }
162
+ /**
163
+ * Update sync state in session metadata
164
+ */
165
+ async updateSyncState(sessionId, lastMessageId, turnsProcessed, currentHistoryIndex) {
166
+ const sessionStore = new SessionStore();
167
+ const session = await sessionStore.loadSession(sessionId);
168
+ if (!session) {
169
+ logger.warn(`[${this.name}] Session not found for sync state update: ${sessionId}`);
170
+ return;
171
+ }
172
+ // Initialize sync structure if needed
173
+ if (!session.sync) {
174
+ session.sync = {};
175
+ }
176
+ if (!session.sync.conversations) {
177
+ session.sync.conversations = {};
178
+ }
179
+ // Update sync state
180
+ session.sync.conversations.lastSyncedMessageUuid = lastMessageId;
181
+ session.sync.conversations.lastSyncedHistoryIndex = currentHistoryIndex;
182
+ await sessionStore.saveSession(session);
183
+ logger.debug(`[${this.name}] Updated sync state: lastSyncedMessageUuid=${lastMessageId}, lastSyncedHistoryIndex=${currentHistoryIndex}`);
184
+ }
185
+ }
186
+ //# sourceMappingURL=gemini.conversations-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.conversations-processor.js","sourceRoot":"","sources":["../../../../../../src/agents/plugins/gemini/session/processors/gemini.conversations-processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Gemini Metrics Processor
3
+ *
4
+ * Transforms Gemini session messages into metric deltas.
5
+ *
6
+ * Key differences from Claude:
7
+ * - Messages have direct `type` field ('user' | 'gemini'), not nested `message.role`
8
+ * - Content is a string, not an array of content blocks
9
+ * - Tokens are in `tokens` object with 5 fields: input, output, cached, thoughts, tool
10
+ * - Tool calls are self-contained in `toolCalls` array (not separate tool_use/tool_result messages)
11
+ */
12
+ import type { SessionProcessor, ProcessingContext, ProcessingResult } from '../../../../core/session/BaseProcessor.js';
13
+ import type { ParsedSession } from '../../../../core/session/BaseSessionAdapter.js';
14
+ export declare class GeminiMetricsProcessor implements SessionProcessor {
15
+ readonly name = "gemini-metrics";
16
+ readonly priority = 1;
17
+ shouldProcess(session: ParsedSession): boolean;
18
+ process(session: ParsedSession, context: ProcessingContext): Promise<ProcessingResult>;
19
+ /**
20
+ * Transform ParsedSession.messages to deltas and write to JSONL
21
+ */
22
+ private processMessages;
23
+ /**
24
+ * Transform Gemini messages to deltas
25
+ */
26
+ private transformMessagesToDeltas;
27
+ /**
28
+ * Extract file operation from Gemini tool call
29
+ */
30
+ private extractFileOperation;
31
+ }
32
+ //# sourceMappingURL=gemini.metrics-processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.metrics-processor.d.ts","sourceRoot":"","sources":["../../../../../../src/agents/plugins/gemini/session/processors/gemini.metrics-processor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AACvH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAC;AAiCpF,qBAAa,sBAAuB,YAAW,gBAAgB;IAC7D,QAAQ,CAAC,IAAI,oBAAoB;IACjC,QAAQ,CAAC,QAAQ,KAAK;IAEtB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO;IAIxC,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAY5F;;OAEG;YACW,eAAe;IAsC7B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAuGjC;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAqD7B"}