@codemieai/code 0.0.28 → 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.
- package/README.md +8 -10
- package/bin/agent-executor.js +1 -1
- package/dist/agents/codemie-code/config.d.ts.map +1 -1
- package/dist/agents/codemie-code/config.js +0 -1
- package/dist/agents/codemie-code/config.js.map +1 -1
- package/dist/agents/core/AgentCLI.d.ts.map +1 -1
- package/dist/agents/core/AgentCLI.js +4 -8
- package/dist/agents/core/AgentCLI.js.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.d.ts +17 -9
- package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.js +75 -67
- package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
- package/dist/agents/core/extension/BaseExtensionInstaller.d.ts +258 -0
- package/dist/agents/core/extension/BaseExtensionInstaller.d.ts.map +1 -0
- package/dist/agents/core/extension/BaseExtensionInstaller.js +522 -0
- package/dist/agents/core/extension/BaseExtensionInstaller.js.map +1 -0
- package/dist/agents/core/lifecycle-helpers.d.ts.map +1 -1
- package/dist/agents/core/lifecycle-helpers.js +16 -2
- package/dist/agents/core/lifecycle-helpers.js.map +1 -1
- package/dist/agents/core/metrics/index.d.ts +0 -2
- package/dist/agents/core/metrics/index.d.ts.map +1 -1
- package/dist/agents/core/metrics/index.js +0 -3
- package/dist/agents/core/metrics/index.js.map +1 -1
- package/dist/agents/core/metrics/types.d.ts +4 -232
- package/dist/agents/core/metrics/types.d.ts.map +1 -1
- package/dist/agents/core/metrics/types.js +2 -2
- package/dist/agents/core/session/BaseProcessor.d.ts +72 -0
- package/dist/agents/core/session/BaseProcessor.d.ts.map +1 -0
- package/dist/agents/core/session/BaseProcessor.js +9 -0
- package/dist/agents/core/session/BaseProcessor.js.map +1 -0
- package/dist/agents/core/session/BaseSessionAdapter.d.ts +99 -0
- package/dist/agents/core/session/BaseSessionAdapter.d.ts.map +1 -0
- package/dist/agents/core/session/BaseSessionAdapter.js +9 -0
- package/dist/agents/core/session/BaseSessionAdapter.js.map +1 -0
- package/dist/agents/core/session/SessionStore.d.ts +23 -0
- package/dist/agents/core/session/SessionStore.d.ts.map +1 -0
- package/dist/agents/core/session/SessionStore.js +75 -0
- package/dist/agents/core/session/SessionStore.js.map +1 -0
- package/dist/agents/core/session/session-config.d.ts +27 -0
- package/dist/agents/core/session/session-config.d.ts.map +1 -0
- package/dist/agents/core/session/session-config.js +61 -0
- package/dist/agents/core/session/session-config.js.map +1 -0
- package/dist/agents/core/session/types.d.ts +87 -0
- package/dist/agents/core/session/types.d.ts.map +1 -0
- package/dist/agents/core/session/types.js +8 -0
- package/dist/agents/core/session/types.js.map +1 -0
- package/dist/agents/core/session/utils/jsonl-reader.d.ts +15 -0
- package/dist/agents/core/session/utils/jsonl-reader.d.ts.map +1 -0
- package/dist/agents/core/session/utils/jsonl-reader.js +33 -0
- package/dist/agents/core/session/utils/jsonl-reader.js.map +1 -0
- package/dist/agents/core/session/utils/jsonl-writer.d.ts +26 -0
- package/dist/agents/core/session/utils/jsonl-writer.d.ts.map +1 -0
- package/dist/agents/core/session/utils/jsonl-writer.js +56 -0
- package/dist/agents/core/session/utils/jsonl-writer.js.map +1 -0
- package/dist/agents/core/types.d.ts +78 -11
- package/dist/agents/core/types.d.ts.map +1 -1
- package/dist/agents/plugins/claude/claude-message-types.d.ts +74 -0
- package/dist/agents/plugins/claude/claude-message-types.d.ts.map +1 -0
- package/dist/agents/plugins/claude/claude-message-types.js +8 -0
- package/dist/agents/plugins/claude/claude-message-types.js.map +1 -0
- package/dist/agents/plugins/claude/claude.plugin-installer.d.ts +53 -0
- package/dist/agents/plugins/claude/claude.plugin-installer.d.ts.map +1 -0
- package/dist/agents/plugins/claude/claude.plugin-installer.js +63 -0
- package/dist/agents/plugins/claude/claude.plugin-installer.js.map +1 -0
- package/dist/agents/plugins/claude/claude.plugin.d.ts +26 -0
- package/dist/agents/plugins/claude/claude.plugin.d.ts.map +1 -0
- package/dist/agents/plugins/{claude.plugin.js → claude/claude.plugin.js} +20 -11
- package/dist/agents/plugins/claude/claude.plugin.js.map +1 -0
- package/dist/agents/plugins/claude/claude.session.d.ts +60 -0
- package/dist/agents/plugins/claude/claude.session.d.ts.map +1 -0
- package/dist/agents/plugins/claude/claude.session.js +339 -0
- package/dist/agents/plugins/claude/claude.session.js.map +1 -0
- package/dist/agents/plugins/claude/plugin/.claude-plugin/local-install.json +15 -0
- package/dist/agents/plugins/claude/plugin/.claude-plugin/plugin.json +9 -0
- package/dist/agents/plugins/claude/plugin/README.md +299 -0
- package/dist/agents/plugins/claude/plugin/claude-templates/README.md +539 -0
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/CLAUDE.md.template +511 -0
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/INDEX.md +205 -0
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/TEMPLATE_SIZES.md +74 -0
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/api/api-patterns.md.template +207 -0
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/architecture/layered-architecture.md.template +143 -0
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/architecture/project-structure.md.template +127 -0
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/data/database-patterns.md.template +168 -0
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/development/development-practices.md.template +210 -0
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/integration/external-integrations.md.template +160 -0
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/security/security-practices.md.template +170 -0
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/standards/code-quality.md.template +150 -0
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/standards/git-workflow.md.template +177 -0
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/testing/testing-patterns.md.template +143 -0
- package/dist/agents/plugins/claude/plugin/commands/README.md +0 -0
- package/dist/agents/plugins/claude/plugin/commands/codemie-catchup.md +10 -0
- package/dist/agents/plugins/claude/plugin/commands/codemie-init.md +731 -0
- package/dist/agents/plugins/claude/plugin/commands/memory-add.md +44 -0
- package/dist/agents/plugins/claude/plugin/commands/memory-init.md +18 -0
- package/dist/agents/plugins/claude/plugin/commands/memory-refresh.md +54 -0
- package/dist/agents/plugins/claude/plugin/hooks/hooks.json +71 -0
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts +51 -0
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts.map +1 -0
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js +840 -0
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js.map +1 -0
- package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.d.ts +37 -0
- package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.d.ts.map +1 -0
- package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.js +275 -0
- package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.js.map +1 -0
- package/dist/agents/plugins/gemini/extension/README.md +88 -0
- package/dist/agents/plugins/gemini/extension/gemini-extension.json +11 -0
- package/dist/agents/plugins/gemini/extension/hooks/hooks.json +65 -0
- package/dist/agents/plugins/gemini/gemini.extension-installer.d.ts +49 -0
- package/dist/agents/plugins/gemini/gemini.extension-installer.d.ts.map +1 -0
- package/dist/agents/plugins/gemini/gemini.extension-installer.js +63 -0
- package/dist/agents/plugins/gemini/gemini.extension-installer.js.map +1 -0
- package/dist/agents/plugins/gemini/gemini.hook-transformer.d.ts +43 -0
- package/dist/agents/plugins/gemini/gemini.hook-transformer.d.ts.map +1 -0
- package/dist/agents/plugins/gemini/gemini.hook-transformer.js +57 -0
- package/dist/agents/plugins/gemini/gemini.hook-transformer.js.map +1 -0
- package/dist/agents/plugins/gemini/gemini.plugin.d.ts +32 -0
- package/dist/agents/plugins/gemini/gemini.plugin.d.ts.map +1 -0
- package/dist/agents/plugins/gemini/gemini.plugin.js +136 -0
- package/dist/agents/plugins/gemini/gemini.plugin.js.map +1 -0
- package/dist/agents/plugins/gemini/gemini.session-adapter.d.ts +68 -0
- package/dist/agents/plugins/gemini/gemini.session-adapter.d.ts.map +1 -0
- package/dist/agents/plugins/gemini/gemini.session-adapter.js +268 -0
- package/dist/agents/plugins/gemini/gemini.session-adapter.js.map +1 -0
- package/dist/agents/plugins/gemini/session/processors/gemini.conversations-processor.d.ts +36 -0
- package/dist/agents/plugins/gemini/session/processors/gemini.conversations-processor.d.ts.map +1 -0
- package/dist/agents/plugins/gemini/session/processors/gemini.conversations-processor.js +186 -0
- package/dist/agents/plugins/gemini/session/processors/gemini.conversations-processor.js.map +1 -0
- package/dist/agents/plugins/gemini/session/processors/gemini.metrics-processor.d.ts +32 -0
- package/dist/agents/plugins/gemini/session/processors/gemini.metrics-processor.d.ts.map +1 -0
- package/dist/agents/plugins/gemini/session/processors/gemini.metrics-processor.js +193 -0
- package/dist/agents/plugins/gemini/session/processors/gemini.metrics-processor.js.map +1 -0
- package/dist/agents/plugins/gemini/session/utils/token-aggregator.d.ts +26 -0
- package/dist/agents/plugins/gemini/session/utils/token-aggregator.d.ts.map +1 -0
- package/dist/agents/plugins/gemini/session/utils/token-aggregator.js +38 -0
- package/dist/agents/plugins/gemini/session/utils/token-aggregator.js.map +1 -0
- package/dist/agents/plugins/gemini/session/utils/tool-aggregator.d.ts +33 -0
- package/dist/agents/plugins/gemini/session/utils/tool-aggregator.d.ts.map +1 -0
- package/dist/agents/plugins/gemini/session/utils/tool-aggregator.js +58 -0
- package/dist/agents/plugins/gemini/session/utils/tool-aggregator.js.map +1 -0
- package/dist/agents/plugins/gemini/session/utils/turn-detector.d.ts +70 -0
- package/dist/agents/plugins/gemini/session/utils/turn-detector.d.ts.map +1 -0
- package/dist/agents/plugins/gemini/session/utils/turn-detector.js +86 -0
- package/dist/agents/plugins/gemini/session/utils/turn-detector.js.map +1 -0
- package/dist/agents/registry.d.ts +7 -2
- package/dist/agents/registry.d.ts.map +1 -1
- package/dist/agents/registry.js +17 -8
- package/dist/agents/registry.js.map +1 -1
- package/dist/cli/commands/analytics/data-loader.d.ts +1 -1
- package/dist/cli/commands/analytics/data-loader.js +1 -1
- package/dist/cli/commands/analytics/index.js +1 -1
- package/dist/cli/commands/analytics/index.js.map +1 -1
- package/dist/cli/commands/doctor/checks/PythonCheck.d.ts +13 -0
- package/dist/cli/commands/doctor/checks/PythonCheck.d.ts.map +1 -1
- package/dist/cli/commands/doctor/checks/PythonCheck.js +90 -31
- package/dist/cli/commands/doctor/checks/PythonCheck.js.map +1 -1
- package/dist/cli/commands/hook.d.ts +7 -0
- package/dist/cli/commands/hook.d.ts.map +1 -0
- package/dist/cli/commands/hook.js +788 -0
- package/dist/cli/commands/hook.js.map +1 -0
- package/dist/cli/commands/setup.d.ts.map +1 -1
- package/dist/cli/commands/setup.js +3 -4
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +2 -1
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/first-time.d.ts +4 -0
- package/dist/cli/first-time.d.ts.map +1 -1
- package/dist/cli/first-time.js +26 -13
- package/dist/cli/first-time.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/frameworks/core/types.d.ts +1 -1
- package/dist/frameworks/plugins/speckit.plugin.d.ts.map +1 -1
- package/dist/frameworks/plugins/speckit.plugin.js +1 -2
- package/dist/frameworks/plugins/speckit.plugin.js.map +1 -1
- package/dist/migrations/002-consolidate-sessions.migration.d.ts +50 -0
- package/dist/migrations/002-consolidate-sessions.migration.d.ts.map +1 -0
- package/dist/migrations/002-consolidate-sessions.migration.js +220 -0
- package/dist/migrations/002-consolidate-sessions.migration.js.map +1 -0
- package/dist/migrations/index.d.ts +1 -0
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +3 -2
- package/dist/migrations/index.js.map +1 -1
- package/dist/providers/core/types.d.ts +1 -1
- package/dist/providers/plugins/ollama/ollama.template.d.ts.map +1 -1
- package/dist/providers/plugins/ollama/ollama.template.js +2 -10
- package/dist/providers/plugins/ollama/ollama.template.js.map +1 -1
- package/dist/providers/plugins/sso/index.d.ts +1 -1
- package/dist/providers/plugins/sso/index.d.ts.map +1 -1
- package/dist/providers/plugins/sso/index.js +1 -1
- package/dist/providers/plugins/sso/index.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/index.d.ts +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/index.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/index.js +3 -3
- package/dist/providers/plugins/sso/proxy/plugins/index.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/sso.session-sync.plugin.d.ts +40 -0
- package/dist/providers/plugins/sso/proxy/plugins/sso.session-sync.plugin.d.ts.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/sso.session-sync.plugin.js +194 -0
- package/dist/providers/plugins/sso/proxy/plugins/sso.session-sync.plugin.js.map +1 -0
- package/dist/providers/plugins/sso/proxy/proxy-http-client.d.ts +1 -0
- package/dist/providers/plugins/sso/proxy/proxy-http-client.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/proxy-http-client.js +40 -6
- package/dist/providers/plugins/sso/proxy/proxy-http-client.js.map +1 -1
- package/dist/providers/plugins/sso/session/BaseProcessor.d.ts +72 -0
- package/dist/providers/plugins/sso/session/BaseProcessor.d.ts.map +1 -0
- package/dist/providers/plugins/sso/session/BaseProcessor.js +9 -0
- package/dist/providers/plugins/sso/session/BaseProcessor.js.map +1 -0
- package/dist/providers/plugins/sso/session/BaseSessionAdapter.d.ts +99 -0
- package/dist/providers/plugins/sso/session/BaseSessionAdapter.d.ts.map +1 -0
- package/dist/providers/plugins/sso/session/BaseSessionAdapter.js +9 -0
- package/dist/providers/plugins/sso/session/BaseSessionAdapter.js.map +1 -0
- package/dist/providers/plugins/sso/session/SessionSyncer.d.ts +36 -0
- package/dist/providers/plugins/sso/session/SessionSyncer.d.ts.map +1 -0
- package/dist/providers/plugins/sso/session/SessionSyncer.js +140 -0
- package/dist/providers/plugins/sso/session/SessionSyncer.js.map +1 -0
- package/dist/providers/plugins/sso/session/processors/conversations/conversation-api-client.d.ts +26 -0
- package/dist/providers/plugins/sso/session/processors/conversations/conversation-api-client.d.ts.map +1 -0
- package/dist/providers/plugins/sso/session/processors/conversations/conversation-api-client.js +146 -0
- package/dist/providers/plugins/sso/session/processors/conversations/conversation-api-client.js.map +1 -0
- package/dist/providers/plugins/sso/session/processors/conversations/conversation-sync-processor.d.ts +23 -0
- package/dist/providers/plugins/sso/session/processors/conversations/conversation-sync-processor.d.ts.map +1 -0
- package/dist/providers/plugins/sso/session/processors/conversations/conversation-sync-processor.js +171 -0
- package/dist/providers/plugins/sso/session/processors/conversations/conversation-sync-processor.js.map +1 -0
- package/dist/providers/plugins/sso/session/processors/conversations/conversation-types.d.ts +69 -0
- package/dist/providers/plugins/sso/session/processors/conversations/conversation-types.d.ts.map +1 -0
- package/dist/providers/plugins/sso/session/processors/conversations/conversation-types.js +7 -0
- package/dist/providers/plugins/sso/session/processors/conversations/conversation-types.js.map +1 -0
- package/dist/providers/plugins/sso/session/processors/metrics/MetricsWriter.d.ts +30 -0
- package/dist/providers/plugins/sso/session/processors/metrics/MetricsWriter.d.ts.map +1 -0
- package/dist/providers/plugins/sso/session/processors/metrics/MetricsWriter.js +79 -0
- package/dist/providers/plugins/sso/session/processors/metrics/MetricsWriter.js.map +1 -0
- package/dist/providers/plugins/sso/{metrics/sync/sso.metrics-aggregator.d.ts → session/processors/metrics/metrics-aggregator.d.ts} +6 -5
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-aggregator.d.ts.map +1 -0
- package/dist/providers/plugins/sso/{metrics/sync/sso.metrics-aggregator.js → session/processors/metrics/metrics-aggregator.js} +20 -12
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-aggregator.js.map +1 -0
- package/dist/providers/plugins/sso/{metrics/sync/sso.metrics-sender.d.ts → session/processors/metrics/metrics-api-client.d.ts} +18 -11
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-api-client.d.ts.map +1 -0
- package/dist/providers/plugins/sso/{metrics/sync/sso.metrics-sender.js → session/processors/metrics/metrics-api-client.js} +143 -15
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-api-client.js.map +1 -0
- package/dist/providers/plugins/sso/{metrics/sync/sso.metrics-post-processor.d.ts → session/processors/metrics/metrics-post-processor.d.ts} +3 -3
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-post-processor.d.ts.map +1 -0
- package/dist/providers/plugins/sso/{metrics/sync/sso.metrics-post-processor.js → session/processors/metrics/metrics-post-processor.js} +3 -3
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-post-processor.js.map +1 -0
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.d.ts +24 -0
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.d.ts.map +1 -0
- package/dist/providers/plugins/sso/{metrics/sync/sso.metrics-sync.plugin.js → session/processors/metrics/metrics-sync-processor.js} +94 -165
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.js.map +1 -0
- package/dist/providers/plugins/sso/{metrics/sync/sso.metrics-types.d.ts → session/processors/metrics/metrics-types.d.ts} +2 -1
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-types.d.ts.map +1 -0
- package/dist/providers/plugins/sso/{metrics/sync/sso.metrics-types.js → session/processors/metrics/metrics-types.js} +1 -1
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-types.js.map +1 -0
- package/dist/providers/plugins/sso/session/utils/jsonl-reader.d.ts +15 -0
- package/dist/providers/plugins/sso/session/utils/jsonl-reader.d.ts.map +1 -0
- package/dist/providers/plugins/sso/session/utils/jsonl-reader.js +33 -0
- package/dist/providers/plugins/sso/session/utils/jsonl-reader.js.map +1 -0
- package/dist/providers/plugins/sso/session/utils/jsonl-writer.d.ts +26 -0
- package/dist/providers/plugins/sso/session/utils/jsonl-writer.d.ts.map +1 -0
- package/dist/providers/plugins/sso/{metrics/sync/sso.jsonl-writer.js → session/utils/jsonl-writer.js} +11 -27
- package/dist/providers/plugins/sso/session/utils/jsonl-writer.js.map +1 -0
- package/dist/providers/plugins/sso/sso.template.d.ts.map +1 -1
- package/dist/providers/plugins/sso/sso.template.js +71 -44
- package/dist/providers/plugins/sso/sso.template.js.map +1 -1
- package/dist/utils/file-operations.d.ts +20 -0
- package/dist/utils/file-operations.d.ts.map +1 -0
- package/dist/utils/file-operations.js +48 -0
- package/dist/utils/file-operations.js.map +1 -0
- package/dist/utils/logger.d.ts +2 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +12 -4
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/paths.d.ts +20 -5
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +23 -5
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/processes.d.ts +2 -0
- package/dist/utils/processes.d.ts.map +1 -1
- package/dist/utils/processes.js +6 -1
- package/dist/utils/processes.js.map +1 -1
- package/package.json +9 -9
- package/scripts/copy-plugins.js +57 -0
- package/scripts/license-check.js +23 -0
- package/bin/codemie-codex.js +0 -18
- package/bin/codemie-deepagents.js +0 -18
- package/dist/agents/core/BaseMetricsAdapter.d.ts +0 -165
- package/dist/agents/core/BaseMetricsAdapter.d.ts.map +0 -1
- package/dist/agents/core/BaseMetricsAdapter.js +0 -308
- package/dist/agents/core/BaseMetricsAdapter.js.map +0 -1
- package/dist/agents/core/metrics/MetricsOrchestrator.d.ts +0 -81
- package/dist/agents/core/metrics/MetricsOrchestrator.d.ts.map +0 -1
- package/dist/agents/core/metrics/MetricsOrchestrator.js +0 -417
- package/dist/agents/core/metrics/MetricsOrchestrator.js.map +0 -1
- package/dist/agents/core/metrics/core/DeltaWriter.d.ts +0 -49
- package/dist/agents/core/metrics/core/DeltaWriter.d.ts.map +0 -1
- package/dist/agents/core/metrics/core/DeltaWriter.js +0 -152
- package/dist/agents/core/metrics/core/DeltaWriter.js.map +0 -1
- package/dist/agents/core/metrics/core/FileSnapshotter.d.ts +0 -22
- package/dist/agents/core/metrics/core/FileSnapshotter.d.ts.map +0 -1
- package/dist/agents/core/metrics/core/FileSnapshotter.js +0 -74
- package/dist/agents/core/metrics/core/FileSnapshotter.js.map +0 -1
- package/dist/agents/core/metrics/core/SessionCorrelator.d.ts +0 -34
- package/dist/agents/core/metrics/core/SessionCorrelator.d.ts.map +0 -1
- package/dist/agents/core/metrics/core/SessionCorrelator.js +0 -157
- package/dist/agents/core/metrics/core/SessionCorrelator.js.map +0 -1
- package/dist/agents/core/metrics/core/SyncStateManager.d.ts +0 -69
- package/dist/agents/core/metrics/core/SyncStateManager.d.ts.map +0 -1
- package/dist/agents/core/metrics/core/SyncStateManager.js +0 -283
- package/dist/agents/core/metrics/core/SyncStateManager.js.map +0 -1
- package/dist/agents/core/metrics/session/SessionStore.d.ts +0 -43
- package/dist/agents/core/metrics/session/SessionStore.d.ts.map +0 -1
- package/dist/agents/core/metrics/session/SessionStore.js +0 -146
- package/dist/agents/core/metrics/session/SessionStore.js.map +0 -1
- package/dist/agents/core/metrics-config.d.ts +0 -38
- package/dist/agents/core/metrics-config.d.ts.map +0 -1
- package/dist/agents/core/metrics-config.js +0 -96
- package/dist/agents/core/metrics-config.js.map +0 -1
- package/dist/agents/plugins/claude.metrics.d.ts +0 -102
- package/dist/agents/plugins/claude.metrics.d.ts.map +0 -1
- package/dist/agents/plugins/claude.metrics.js +0 -656
- package/dist/agents/plugins/claude.metrics.js.map +0 -1
- package/dist/agents/plugins/claude.plugin.d.ts +0 -19
- package/dist/agents/plugins/claude.plugin.d.ts.map +0 -1
- package/dist/agents/plugins/claude.plugin.js.map +0 -1
- package/dist/agents/plugins/codex.metrics.d.ts +0 -69
- package/dist/agents/plugins/codex.metrics.d.ts.map +0 -1
- package/dist/agents/plugins/codex.metrics.js +0 -483
- package/dist/agents/plugins/codex.metrics.js.map +0 -1
- package/dist/agents/plugins/codex.plugin.d.ts +0 -21
- package/dist/agents/plugins/codex.plugin.d.ts.map +0 -1
- package/dist/agents/plugins/codex.plugin.js +0 -222
- package/dist/agents/plugins/codex.plugin.js.map +0 -1
- package/dist/agents/plugins/deepagents.plugin.d.ts +0 -21
- package/dist/agents/plugins/deepagents.plugin.d.ts.map +0 -1
- package/dist/agents/plugins/deepagents.plugin.js +0 -104
- package/dist/agents/plugins/deepagents.plugin.js.map +0 -1
- package/dist/agents/plugins/gemini.metrics.d.ts +0 -99
- package/dist/agents/plugins/gemini.metrics.d.ts.map +0 -1
- package/dist/agents/plugins/gemini.metrics.js +0 -475
- package/dist/agents/plugins/gemini.metrics.js.map +0 -1
- package/dist/agents/plugins/gemini.plugin.d.ts +0 -16
- package/dist/agents/plugins/gemini.plugin.d.ts.map +0 -1
- package/dist/agents/plugins/gemini.plugin.js +0 -80
- package/dist/agents/plugins/gemini.plugin.js.map +0 -1
- package/dist/agents/plugins/history-parser.d.ts +0 -52
- package/dist/agents/plugins/history-parser.d.ts.map +0 -1
- package/dist/agents/plugins/history-parser.js +0 -155
- package/dist/agents/plugins/history-parser.js.map +0 -1
- package/dist/providers/plugins/sso/metrics/sync/sso.jsonl-writer.d.ts +0 -28
- package/dist/providers/plugins/sso/metrics/sync/sso.jsonl-writer.d.ts.map +0 -1
- package/dist/providers/plugins/sso/metrics/sync/sso.jsonl-writer.js.map +0 -1
- package/dist/providers/plugins/sso/metrics/sync/sso.lifecycle-handler.d.ts +0 -62
- package/dist/providers/plugins/sso/metrics/sync/sso.lifecycle-handler.d.ts.map +0 -1
- package/dist/providers/plugins/sso/metrics/sync/sso.lifecycle-handler.js +0 -157
- package/dist/providers/plugins/sso/metrics/sync/sso.lifecycle-handler.js.map +0 -1
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-aggregator.d.ts.map +0 -1
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-aggregator.js.map +0 -1
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-api-client.d.ts +0 -32
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-api-client.d.ts.map +0 -1
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-api-client.js +0 -159
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-api-client.js.map +0 -1
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-post-processor.d.ts.map +0 -1
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-post-processor.js.map +0 -1
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-sender.d.ts.map +0 -1
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-sender.js.map +0 -1
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-sync.plugin.d.ts +0 -36
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-sync.plugin.d.ts.map +0 -1
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-sync.plugin.js.map +0 -1
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-types.d.ts.map +0 -1
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-types.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"}
|