@codemieai/code 0.0.16 → 0.0.17
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 +62 -5
- package/bin/agent-executor.js +7 -28
- package/bin/codemie-claude.js +18 -0
- package/bin/codemie-codex.js +18 -0
- package/bin/codemie-deepagents.js +18 -0
- package/bin/codemie-gemini.js +18 -0
- package/dist/agents/codemie-code/agent.d.ts.map +1 -1
- package/dist/agents/codemie-code/agent.js +3 -32
- package/dist/agents/codemie-code/agent.js.map +1 -1
- package/dist/agents/codemie-code/tools/planning.d.ts +2 -2
- package/dist/agents/core/AgentCLI.d.ts.map +1 -1
- package/dist/agents/core/AgentCLI.js +25 -59
- package/dist/agents/core/AgentCLI.js.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.d.ts +9 -1
- package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.js +103 -10
- package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
- package/dist/agents/core/BaseMetricsAdapter.d.ts +64 -0
- package/dist/agents/core/BaseMetricsAdapter.d.ts.map +1 -0
- package/dist/agents/core/BaseMetricsAdapter.js +74 -0
- package/dist/agents/core/BaseMetricsAdapter.js.map +1 -0
- package/dist/agents/core/types.d.ts +1 -0
- package/dist/agents/core/types.d.ts.map +1 -1
- package/dist/agents/plugins/claude.metrics.d.ts +112 -0
- package/dist/agents/plugins/claude.metrics.d.ts.map +1 -0
- package/dist/agents/plugins/claude.metrics.js +700 -0
- package/dist/agents/plugins/claude.metrics.js.map +1 -0
- package/dist/agents/plugins/claude.plugin.d.ts +9 -0
- package/dist/agents/plugins/claude.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/claude.plugin.js +52 -10
- package/dist/agents/plugins/claude.plugin.js.map +1 -1
- package/dist/agents/plugins/codemie-code.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/codemie-code.plugin.js +45 -13
- package/dist/agents/plugins/codemie-code.plugin.js.map +1 -1
- package/dist/agents/plugins/codex.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/codex.plugin.js +0 -2
- package/dist/agents/plugins/codex.plugin.js.map +1 -1
- package/dist/agents/plugins/gemini.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/gemini.plugin.js +0 -7
- package/dist/agents/plugins/gemini.plugin.js.map +1 -1
- package/dist/agents/plugins/history-parser.d.ts +52 -0
- package/dist/agents/plugins/history-parser.d.ts.map +1 -0
- package/dist/agents/plugins/history-parser.js +155 -0
- package/dist/agents/plugins/history-parser.js.map +1 -0
- package/dist/cli/commands/analytics/aggregator.d.ts +58 -0
- package/dist/cli/commands/analytics/aggregator.d.ts.map +1 -0
- package/dist/cli/commands/analytics/aggregator.js +702 -0
- package/dist/cli/commands/analytics/aggregator.js.map +1 -0
- package/dist/cli/commands/analytics/data-loader.d.ts +84 -0
- package/dist/cli/commands/analytics/data-loader.d.ts.map +1 -0
- package/dist/cli/commands/analytics/data-loader.js +211 -0
- package/dist/cli/commands/analytics/data-loader.js.map +1 -0
- package/dist/cli/commands/analytics/exporter.d.ts +20 -0
- package/dist/cli/commands/analytics/exporter.d.ts.map +1 -0
- package/dist/cli/commands/analytics/exporter.js +103 -0
- package/dist/cli/commands/analytics/exporter.js.map +1 -0
- package/dist/cli/commands/analytics/formatter.d.ts +49 -0
- package/dist/cli/commands/analytics/formatter.d.ts.map +1 -0
- package/dist/cli/commands/analytics/formatter.js +309 -0
- package/dist/cli/commands/analytics/formatter.js.map +1 -0
- package/dist/cli/commands/analytics/index.d.ts +6 -0
- package/dist/cli/commands/analytics/index.d.ts.map +1 -0
- package/dist/cli/commands/analytics/index.js +157 -0
- package/dist/cli/commands/analytics/index.js.map +1 -0
- package/dist/cli/commands/analytics/model-normalizer.d.ts +21 -0
- package/dist/cli/commands/analytics/model-normalizer.d.ts.map +1 -0
- package/dist/cli/commands/analytics/model-normalizer.js +44 -0
- package/dist/cli/commands/analytics/model-normalizer.js.map +1 -0
- package/dist/cli/commands/analytics/types.d.ts +188 -0
- package/dist/cli/commands/analytics/types.d.ts.map +1 -0
- package/dist/cli/commands/analytics/types.js +6 -0
- package/dist/cli/commands/analytics/types.js.map +1 -0
- package/dist/cli/commands/doctor/checks/AwsCliCheck.d.ts +9 -0
- package/dist/cli/commands/doctor/checks/AwsCliCheck.d.ts.map +1 -0
- package/dist/cli/commands/doctor/checks/AwsCliCheck.js +28 -0
- package/dist/cli/commands/doctor/checks/AwsCliCheck.js.map +1 -0
- package/dist/cli/commands/doctor/checks/PythonCheck.d.ts.map +1 -1
- package/dist/cli/commands/doctor/checks/PythonCheck.js +10 -0
- package/dist/cli/commands/doctor/checks/PythonCheck.js.map +1 -1
- package/dist/cli/commands/doctor/checks/WorkflowsCheck.d.ts.map +1 -1
- package/dist/cli/commands/doctor/checks/WorkflowsCheck.js +2 -1
- package/dist/cli/commands/doctor/checks/WorkflowsCheck.js.map +1 -1
- package/dist/cli/commands/doctor/checks/index.d.ts +1 -0
- package/dist/cli/commands/doctor/checks/index.d.ts.map +1 -1
- package/dist/cli/commands/doctor/checks/index.js +1 -0
- package/dist/cli/commands/doctor/checks/index.js.map +1 -1
- package/dist/cli/commands/doctor/index.d.ts.map +1 -1
- package/dist/cli/commands/doctor/index.js +85 -3
- package/dist/cli/commands/doctor/index.js.map +1 -1
- package/dist/cli/commands/profile.d.ts.map +1 -1
- package/dist/cli/commands/profile.js +49 -89
- package/dist/cli/commands/profile.js.map +1 -1
- package/dist/cli/commands/setup.js +1 -21
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/env/types.d.ts +14 -2
- package/dist/env/types.d.ts.map +1 -1
- package/dist/env/types.js.map +1 -1
- package/dist/metrics/MetricsOrchestrator.d.ts +67 -0
- package/dist/metrics/MetricsOrchestrator.d.ts.map +1 -0
- package/dist/metrics/MetricsOrchestrator.js +287 -0
- package/dist/metrics/MetricsOrchestrator.js.map +1 -0
- package/dist/metrics/config.d.ts +38 -0
- package/dist/metrics/config.d.ts.map +1 -0
- package/dist/metrics/config.js +80 -0
- package/dist/metrics/config.js.map +1 -0
- package/dist/metrics/core/DeltaWriter.d.ts +49 -0
- package/dist/metrics/core/DeltaWriter.d.ts.map +1 -0
- package/dist/metrics/core/DeltaWriter.js +146 -0
- package/dist/metrics/core/DeltaWriter.js.map +1 -0
- package/dist/metrics/core/FileSnapshotter.d.ts +22 -0
- package/dist/metrics/core/FileSnapshotter.d.ts.map +1 -0
- package/dist/metrics/core/FileSnapshotter.js +74 -0
- package/dist/metrics/core/FileSnapshotter.js.map +1 -0
- package/dist/metrics/core/SessionCorrelator.d.ts +34 -0
- package/dist/metrics/core/SessionCorrelator.d.ts.map +1 -0
- package/dist/metrics/core/SessionCorrelator.js +115 -0
- package/dist/metrics/core/SessionCorrelator.js.map +1 -0
- package/dist/metrics/core/SyncStateManager.d.ts +69 -0
- package/dist/metrics/core/SyncStateManager.d.ts.map +1 -0
- package/dist/metrics/core/SyncStateManager.js +284 -0
- package/dist/metrics/core/SyncStateManager.js.map +1 -0
- package/dist/metrics/index.d.ts +9 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +11 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/metrics/session/SessionStore.d.ts +43 -0
- package/dist/metrics/session/SessionStore.d.ts.map +1 -0
- package/dist/metrics/session/SessionStore.js +142 -0
- package/dist/metrics/session/SessionStore.js.map +1 -0
- package/dist/metrics/sync/MetricsApiClient.d.ts +32 -0
- package/dist/metrics/sync/MetricsApiClient.d.ts.map +1 -0
- package/dist/metrics/sync/MetricsApiClient.js +155 -0
- package/dist/metrics/sync/MetricsApiClient.js.map +1 -0
- package/dist/metrics/sync/aggregator.d.ts +13 -0
- package/dist/metrics/sync/aggregator.d.ts.map +1 -0
- package/dist/metrics/sync/aggregator.js +196 -0
- package/dist/metrics/sync/aggregator.js.map +1 -0
- package/dist/metrics/sync/index.d.ts +10 -0
- package/dist/metrics/sync/index.d.ts.map +1 -0
- package/dist/metrics/sync/index.js +10 -0
- package/dist/metrics/sync/index.js.map +1 -0
- package/dist/metrics/sync/jsonl-writer.d.ts +28 -0
- package/dist/metrics/sync/jsonl-writer.d.ts.map +1 -0
- package/dist/metrics/sync/jsonl-writer.js +72 -0
- package/dist/metrics/sync/jsonl-writer.js.map +1 -0
- package/dist/metrics/sync/types.d.ts +72 -0
- package/dist/metrics/sync/types.d.ts.map +1 -0
- package/dist/metrics/sync/types.js +7 -0
- package/dist/metrics/sync/types.js.map +1 -0
- package/dist/metrics/types.d.ts +308 -0
- package/dist/metrics/types.d.ts.map +1 -0
- package/dist/metrics/types.js +8 -0
- package/dist/metrics/types.js.map +1 -0
- package/dist/providers/index.d.ts +2 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +2 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/integration/setup-ui.d.ts +1 -1
- package/dist/providers/integration/setup-ui.d.ts.map +1 -1
- package/dist/providers/integration/setup-ui.js +51 -6
- package/dist/providers/integration/setup-ui.js.map +1 -1
- package/dist/providers/plugins/bedrock/bedrock.health.d.ts +53 -0
- package/dist/providers/plugins/bedrock/bedrock.health.d.ts.map +1 -0
- package/dist/providers/plugins/bedrock/bedrock.health.js +115 -0
- package/dist/providers/plugins/bedrock/bedrock.health.js.map +1 -0
- package/dist/providers/plugins/bedrock/bedrock.models.d.ts +26 -0
- package/dist/providers/plugins/bedrock/bedrock.models.d.ts.map +1 -0
- package/dist/providers/plugins/bedrock/bedrock.models.js +89 -0
- package/dist/providers/plugins/bedrock/bedrock.models.js.map +1 -0
- package/dist/providers/plugins/bedrock/bedrock.setup-steps.d.ts +12 -0
- package/dist/providers/plugins/bedrock/bedrock.setup-steps.d.ts.map +1 -0
- package/dist/providers/plugins/bedrock/bedrock.setup-steps.js +308 -0
- package/dist/providers/plugins/bedrock/bedrock.setup-steps.js.map +1 -0
- package/dist/providers/plugins/bedrock/bedrock.template.d.ts +11 -0
- package/dist/providers/plugins/bedrock/bedrock.template.d.ts.map +1 -0
- package/dist/providers/plugins/bedrock/bedrock.template.js +85 -0
- package/dist/providers/plugins/bedrock/bedrock.template.js.map +1 -0
- package/dist/providers/plugins/bedrock/index.d.ts +11 -0
- package/dist/providers/plugins/bedrock/index.d.ts.map +1 -0
- package/dist/providers/plugins/bedrock/index.js +11 -0
- package/dist/providers/plugins/bedrock/index.js.map +1 -0
- package/dist/providers/plugins/ollama/ollama.template.d.ts.map +1 -1
- package/dist/providers/plugins/ollama/ollama.template.js +2 -0
- package/dist/providers/plugins/ollama/ollama.template.js.map +1 -1
- package/dist/providers/plugins/sso/sso.http-client.d.ts +2 -0
- package/dist/providers/plugins/sso/sso.http-client.d.ts.map +1 -1
- package/dist/providers/plugins/sso/sso.http-client.js +9 -3
- package/dist/providers/plugins/sso/sso.http-client.js.map +1 -1
- package/dist/proxy/http-client.d.ts.map +1 -1
- package/dist/proxy/http-client.js +49 -14
- package/dist/proxy/http-client.js.map +1 -1
- package/dist/proxy/plugins/endpoint-blocker.plugin.d.ts +19 -0
- package/dist/proxy/plugins/endpoint-blocker.plugin.d.ts.map +1 -0
- package/dist/proxy/plugins/endpoint-blocker.plugin.js +61 -0
- package/dist/proxy/plugins/endpoint-blocker.plugin.js.map +1 -0
- package/dist/proxy/plugins/header-injection.plugin.js +3 -0
- package/dist/proxy/plugins/header-injection.plugin.js.map +1 -1
- package/dist/proxy/plugins/index.d.ts +3 -1
- package/dist/proxy/plugins/index.d.ts.map +1 -1
- package/dist/proxy/plugins/index.js +5 -1
- package/dist/proxy/plugins/index.js.map +1 -1
- package/dist/proxy/plugins/logging.plugin.d.ts +3 -3
- package/dist/proxy/plugins/logging.plugin.js +84 -20
- package/dist/proxy/plugins/logging.plugin.js.map +1 -1
- package/dist/proxy/plugins/metrics-sync.plugin.d.ts +33 -0
- package/dist/proxy/plugins/metrics-sync.plugin.d.ts.map +1 -0
- package/dist/proxy/plugins/metrics-sync.plugin.js +310 -0
- package/dist/proxy/plugins/metrics-sync.plugin.js.map +1 -0
- package/dist/proxy/plugins/registry.d.ts.map +1 -1
- package/dist/proxy/plugins/registry.js +8 -1
- package/dist/proxy/plugins/registry.js.map +1 -1
- package/dist/proxy/plugins/types.d.ts +6 -2
- package/dist/proxy/plugins/types.d.ts.map +1 -1
- package/dist/proxy/types.d.ts +7 -0
- package/dist/proxy/types.d.ts.map +1 -1
- package/dist/utils/ascii-logo.d.ts +21 -0
- package/dist/utils/ascii-logo.d.ts.map +1 -0
- package/dist/utils/ascii-logo.js +75 -0
- package/dist/utils/ascii-logo.js.map +1 -0
- package/dist/utils/codemie-proxy.d.ts +0 -6
- package/dist/utils/codemie-proxy.d.ts.map +1 -1
- package/dist/utils/codemie-proxy.js +46 -56
- package/dist/utils/codemie-proxy.js.map +1 -1
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +22 -6
- package/dist/utils/config-loader.js.map +1 -1
- package/dist/utils/exec.d.ts +11 -0
- package/dist/utils/exec.d.ts.map +1 -1
- package/dist/utils/exec.js +17 -1
- package/dist/utils/exec.js.map +1 -1
- package/dist/utils/goodbye-messages.d.ts +13 -0
- package/dist/utils/goodbye-messages.d.ts.map +1 -0
- package/dist/utils/goodbye-messages.js +245 -0
- package/dist/utils/goodbye-messages.js.map +1 -0
- package/dist/utils/json-parser.d.ts +52 -0
- package/dist/utils/json-parser.d.ts.map +1 -0
- package/dist/utils/json-parser.js +126 -0
- package/dist/utils/json-parser.js.map +1 -0
- package/dist/utils/logger.d.ts +37 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +92 -20
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/sanitize.d.ts.map +1 -1
- package/dist/utils/sanitize.js +0 -1
- package/dist/utils/sanitize.js.map +1 -1
- package/dist/utils/which.d.ts +20 -0
- package/dist/utils/which.d.ts.map +1 -0
- package/dist/utils/which.js +47 -0
- package/dist/utils/which.js.map +1 -0
- package/package.json +10 -5
- package/dist/analytics/aggregation/adapters/claude.adapter.d.ts +0 -37
- package/dist/analytics/aggregation/adapters/claude.adapter.d.ts.map +0 -1
- package/dist/analytics/aggregation/adapters/claude.adapter.js +0 -531
- package/dist/analytics/aggregation/adapters/claude.adapter.js.map +0 -1
- package/dist/analytics/aggregation/adapters/codex.adapter.d.ts +0 -25
- package/dist/analytics/aggregation/adapters/codex.adapter.d.ts.map +0 -1
- package/dist/analytics/aggregation/adapters/codex.adapter.js +0 -396
- package/dist/analytics/aggregation/adapters/codex.adapter.js.map +0 -1
- package/dist/analytics/aggregation/adapters/gemini.adapter.d.ts +0 -36
- package/dist/analytics/aggregation/adapters/gemini.adapter.d.ts.map +0 -1
- package/dist/analytics/aggregation/adapters/gemini.adapter.js +0 -365
- package/dist/analytics/aggregation/adapters/gemini.adapter.js.map +0 -1
- package/dist/analytics/aggregation/adapters/index.d.ts +0 -7
- package/dist/analytics/aggregation/adapters/index.d.ts.map +0 -1
- package/dist/analytics/aggregation/adapters/index.js +0 -7
- package/dist/analytics/aggregation/adapters/index.js.map +0 -1
- package/dist/analytics/aggregation/aggregator.d.ts +0 -49
- package/dist/analytics/aggregation/aggregator.d.ts.map +0 -1
- package/dist/analytics/aggregation/aggregator.js +0 -239
- package/dist/analytics/aggregation/aggregator.js.map +0 -1
- package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.d.ts +0 -99
- package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.d.ts.map +0 -1
- package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.js +0 -110
- package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.js.map +0 -1
- package/dist/analytics/aggregation/core/adapter.interface.d.ts +0 -76
- package/dist/analytics/aggregation/core/adapter.interface.d.ts.map +0 -1
- package/dist/analytics/aggregation/core/adapter.interface.js +0 -9
- package/dist/analytics/aggregation/core/adapter.interface.js.map +0 -1
- package/dist/analytics/aggregation/core/aggregation-utils.d.ts +0 -86
- package/dist/analytics/aggregation/core/aggregation-utils.d.ts.map +0 -1
- package/dist/analytics/aggregation/core/aggregation-utils.js +0 -126
- package/dist/analytics/aggregation/core/aggregation-utils.js.map +0 -1
- package/dist/analytics/aggregation/core/discovery.d.ts +0 -40
- package/dist/analytics/aggregation/core/discovery.d.ts.map +0 -1
- package/dist/analytics/aggregation/core/discovery.js +0 -132
- package/dist/analytics/aggregation/core/discovery.js.map +0 -1
- package/dist/analytics/aggregation/core/file-utils.d.ts +0 -24
- package/dist/analytics/aggregation/core/file-utils.d.ts.map +0 -1
- package/dist/analytics/aggregation/core/file-utils.js +0 -143
- package/dist/analytics/aggregation/core/file-utils.js.map +0 -1
- package/dist/analytics/aggregation/core/index.d.ts +0 -14
- package/dist/analytics/aggregation/core/index.d.ts.map +0 -1
- package/dist/analytics/aggregation/core/index.js +0 -14
- package/dist/analytics/aggregation/core/index.js.map +0 -1
- package/dist/analytics/aggregation/core/project-mapping.d.ts +0 -50
- package/dist/analytics/aggregation/core/project-mapping.d.ts.map +0 -1
- package/dist/analytics/aggregation/core/project-mapping.js +0 -102
- package/dist/analytics/aggregation/core/project-mapping.js.map +0 -1
- package/dist/analytics/aggregation/core/streaming.d.ts +0 -26
- package/dist/analytics/aggregation/core/streaming.d.ts.map +0 -1
- package/dist/analytics/aggregation/core/streaming.js +0 -58
- package/dist/analytics/aggregation/core/streaming.js.map +0 -1
- package/dist/analytics/aggregation/core/user-prompt-source.d.ts +0 -81
- package/dist/analytics/aggregation/core/user-prompt-source.d.ts.map +0 -1
- package/dist/analytics/aggregation/core/user-prompt-source.js +0 -69
- package/dist/analytics/aggregation/core/user-prompt-source.js.map +0 -1
- package/dist/analytics/aggregation/core/user-prompt-sources/json.d.ts +0 -49
- package/dist/analytics/aggregation/core/user-prompt-sources/json.d.ts.map +0 -1
- package/dist/analytics/aggregation/core/user-prompt-sources/json.js +0 -66
- package/dist/analytics/aggregation/core/user-prompt-sources/json.js.map +0 -1
- package/dist/analytics/aggregation/core/user-prompt-sources/jsonl.d.ts +0 -43
- package/dist/analytics/aggregation/core/user-prompt-sources/jsonl.d.ts.map +0 -1
- package/dist/analytics/aggregation/core/user-prompt-sources/jsonl.js +0 -56
- package/dist/analytics/aggregation/core/user-prompt-sources/jsonl.js.map +0 -1
- package/dist/analytics/aggregation/index.d.ts +0 -8
- package/dist/analytics/aggregation/index.d.ts.map +0 -1
- package/dist/analytics/aggregation/index.js +0 -8
- package/dist/analytics/aggregation/index.js.map +0 -1
- package/dist/analytics/aggregation/types.d.ts +0 -278
- package/dist/analytics/aggregation/types.d.ts.map +0 -1
- package/dist/analytics/aggregation/types.js +0 -8
- package/dist/analytics/aggregation/types.js.map +0 -1
- package/dist/analytics/collector.d.ts +0 -46
- package/dist/analytics/collector.d.ts.map +0 -1
- package/dist/analytics/collector.js +0 -83
- package/dist/analytics/collector.js.map +0 -1
- package/dist/analytics/config.d.ts +0 -15
- package/dist/analytics/config.d.ts.map +0 -1
- package/dist/analytics/config.js +0 -65
- package/dist/analytics/config.js.map +0 -1
- package/dist/analytics/index.d.ts +0 -99
- package/dist/analytics/index.d.ts.map +0 -1
- package/dist/analytics/index.js +0 -280
- package/dist/analytics/index.js.map +0 -1
- package/dist/analytics/plugins/api-metrics.plugin.d.ts +0 -26
- package/dist/analytics/plugins/api-metrics.plugin.d.ts.map +0 -1
- package/dist/analytics/plugins/api-metrics.plugin.js +0 -97
- package/dist/analytics/plugins/api-metrics.plugin.js.map +0 -1
- package/dist/analytics/plugins/index.d.ts +0 -15
- package/dist/analytics/plugins/index.d.ts.map +0 -1
- package/dist/analytics/plugins/index.js +0 -15
- package/dist/analytics/plugins/index.js.map +0 -1
- package/dist/analytics/plugins/model-metrics.plugin.d.ts +0 -39
- package/dist/analytics/plugins/model-metrics.plugin.d.ts.map +0 -1
- package/dist/analytics/plugins/model-metrics.plugin.js +0 -105
- package/dist/analytics/plugins/model-metrics.plugin.js.map +0 -1
- package/dist/analytics/plugins/provider-metrics.plugin.d.ts +0 -41
- package/dist/analytics/plugins/provider-metrics.plugin.d.ts.map +0 -1
- package/dist/analytics/plugins/provider-metrics.plugin.js +0 -123
- package/dist/analytics/plugins/provider-metrics.plugin.js.map +0 -1
- package/dist/analytics/plugins/types.d.ts +0 -61
- package/dist/analytics/plugins/types.d.ts.map +0 -1
- package/dist/analytics/plugins/types.js +0 -54
- package/dist/analytics/plugins/types.js.map +0 -1
- package/dist/analytics/privacy.d.ts +0 -10
- package/dist/analytics/privacy.d.ts.map +0 -1
- package/dist/analytics/privacy.js +0 -20
- package/dist/analytics/privacy.js.map +0 -1
- package/dist/analytics/remote-submission/cursor-manager.d.ts +0 -71
- package/dist/analytics/remote-submission/cursor-manager.d.ts.map +0 -1
- package/dist/analytics/remote-submission/cursor-manager.js +0 -204
- package/dist/analytics/remote-submission/cursor-manager.js.map +0 -1
- package/dist/analytics/remote-submission/index.d.ts +0 -12
- package/dist/analytics/remote-submission/index.d.ts.map +0 -1
- package/dist/analytics/remote-submission/index.js +0 -11
- package/dist/analytics/remote-submission/index.js.map +0 -1
- package/dist/analytics/remote-submission/lock-manager.d.ts +0 -71
- package/dist/analytics/remote-submission/lock-manager.d.ts.map +0 -1
- package/dist/analytics/remote-submission/lock-manager.js +0 -238
- package/dist/analytics/remote-submission/lock-manager.js.map +0 -1
- package/dist/analytics/remote-submission/metric-transformer.d.ts +0 -21
- package/dist/analytics/remote-submission/metric-transformer.d.ts.map +0 -1
- package/dist/analytics/remote-submission/metric-transformer.js +0 -82
- package/dist/analytics/remote-submission/metric-transformer.js.map +0 -1
- package/dist/analytics/remote-submission/submitter.d.ts +0 -79
- package/dist/analytics/remote-submission/submitter.d.ts.map +0 -1
- package/dist/analytics/remote-submission/submitter.js +0 -362
- package/dist/analytics/remote-submission/submitter.js.map +0 -1
- package/dist/analytics/remote-submission/types.d.ts +0 -123
- package/dist/analytics/remote-submission/types.d.ts.map +0 -1
- package/dist/analytics/remote-submission/types.js +0 -13
- package/dist/analytics/remote-submission/types.js.map +0 -1
- package/dist/analytics/session.d.ts +0 -56
- package/dist/analytics/session.d.ts.map +0 -1
- package/dist/analytics/session.js +0 -95
- package/dist/analytics/session.js.map +0 -1
- package/dist/analytics/types.d.ts +0 -104
- package/dist/analytics/types.d.ts.map +0 -1
- package/dist/analytics/types.js +0 -15
- package/dist/analytics/types.js.map +0 -1
- package/dist/analytics/writer.d.ts +0 -18
- package/dist/analytics/writer.d.ts.map +0 -1
- package/dist/analytics/writer.js +0 -44
- package/dist/analytics/writer.js.map +0 -1
- package/dist/cli/commands/analytics.d.ts +0 -3
- package/dist/cli/commands/analytics.d.ts.map +0 -1
- package/dist/cli/commands/analytics.js +0 -748
- package/dist/cli/commands/analytics.js.map +0 -1
- package/dist/utils/analytics-reader.d.ts +0 -117
- package/dist/utils/analytics-reader.d.ts.map +0 -1
- package/dist/utils/analytics-reader.js +0 -421
- package/dist/utils/analytics-reader.js.map +0 -1
- package/dist/utils/date-formatter.d.ts +0 -88
- package/dist/utils/date-formatter.d.ts.map +0 -1
- package/dist/utils/date-formatter.js +0 -133
- package/dist/utils/date-formatter.js.map +0 -1
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File Snapshotter
|
|
3
|
+
*
|
|
4
|
+
* Takes snapshots of directory state and computes diffs.
|
|
5
|
+
* Used to detect new files created by agent processes.
|
|
6
|
+
*/
|
|
7
|
+
import { readdir, stat } from 'fs/promises';
|
|
8
|
+
import { join } from 'path';
|
|
9
|
+
import { existsSync } from 'fs';
|
|
10
|
+
import { logger } from '../../utils/logger.js';
|
|
11
|
+
export class FileSnapshotter {
|
|
12
|
+
/**
|
|
13
|
+
* Take snapshot of directory
|
|
14
|
+
*/
|
|
15
|
+
async snapshot(dirPath) {
|
|
16
|
+
const files = await this.scanDirectory(dirPath);
|
|
17
|
+
return {
|
|
18
|
+
timestamp: Date.now(),
|
|
19
|
+
files
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Compute diff between snapshots (new files only)
|
|
24
|
+
*/
|
|
25
|
+
diff(before, after) {
|
|
26
|
+
const beforePaths = new Set(before.files.map(f => f.path));
|
|
27
|
+
const newFiles = after.files.filter(f => !beforePaths.has(f.path));
|
|
28
|
+
logger.debug(`[FileSnapshotter] Diff: ${newFiles.length} new files detected`);
|
|
29
|
+
return newFiles;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Scan directory recursively and collect file information
|
|
33
|
+
*/
|
|
34
|
+
async scanDirectory(dirPath) {
|
|
35
|
+
// Check if directory exists
|
|
36
|
+
if (!existsSync(dirPath)) {
|
|
37
|
+
logger.debug(`[FileSnapshotter] Directory does not exist: ${dirPath}`);
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
const files = [];
|
|
41
|
+
try {
|
|
42
|
+
const entries = await readdir(dirPath, { withFileTypes: true });
|
|
43
|
+
for (const entry of entries) {
|
|
44
|
+
const fullPath = join(dirPath, entry.name);
|
|
45
|
+
if (entry.isFile()) {
|
|
46
|
+
try {
|
|
47
|
+
const stats = await stat(fullPath);
|
|
48
|
+
files.push({
|
|
49
|
+
path: fullPath,
|
|
50
|
+
size: stats.size,
|
|
51
|
+
createdAt: stats.birthtimeMs,
|
|
52
|
+
modifiedAt: stats.mtimeMs
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
// Skip files that can't be stat'd (permissions, etc.)
|
|
57
|
+
logger.debug(`[FileSnapshotter] Failed to stat file: ${fullPath}`, error);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else if (entry.isDirectory()) {
|
|
61
|
+
// Recursively scan subdirectories
|
|
62
|
+
const subFiles = await this.scanDirectory(fullPath);
|
|
63
|
+
files.push(...subFiles);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
logger.error(`[FileSnapshotter] Failed to scan directory: ${dirPath}`, error);
|
|
69
|
+
throw error;
|
|
70
|
+
}
|
|
71
|
+
return files;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=FileSnapshotter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileSnapshotter.js","sourceRoot":"","sources":["../../../src/metrics/core/FileSnapshotter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,OAAO,eAAe;IAC1B;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC5B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAEhD,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,KAAK;SACN,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,MAAoB,EAAE,KAAmB;QAC5C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAEnE,MAAM,CAAC,KAAK,CAAC,2BAA2B,QAAQ,CAAC,MAAM,qBAAqB,CAAC,CAAC;QAC9E,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CAAC,OAAe;QACzC,4BAA4B;QAC5B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,KAAK,CAAC,+CAA+C,OAAO,EAAE,CAAC,CAAC;YACvE,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,KAAK,GAAe,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAEhE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAE3C,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;oBACnB,IAAI,CAAC;wBACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;wBACnC,KAAK,CAAC,IAAI,CAAC;4BACT,IAAI,EAAE,QAAQ;4BACd,IAAI,EAAE,KAAK,CAAC,IAAI;4BAChB,SAAS,EAAE,KAAK,CAAC,WAAW;4BAC5B,UAAU,EAAE,KAAK,CAAC,OAAO;yBAC1B,CAAC,CAAC;oBACL,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,sDAAsD;wBACtD,MAAM,CAAC,KAAK,CAAC,0CAA0C,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;oBAC5E,CAAC;gBACH,CAAC;qBAAM,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBAC/B,kCAAkC;oBAClC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;oBACpD,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,+CAA+C,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;YAC9E,MAAM,KAAK,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Correlator
|
|
3
|
+
*
|
|
4
|
+
* Correlates CodeMie sessions with agent session files.
|
|
5
|
+
* Uses before/after snapshot diff + working directory filtering.
|
|
6
|
+
*/
|
|
7
|
+
import type { FileInfo, CorrelationResult, AgentMetricsSupport } from '../types.js';
|
|
8
|
+
export interface CorrelationInput {
|
|
9
|
+
sessionId: string;
|
|
10
|
+
agentName: string;
|
|
11
|
+
workingDirectory: string;
|
|
12
|
+
newFiles: FileInfo[];
|
|
13
|
+
agentPlugin: AgentMetricsSupport;
|
|
14
|
+
}
|
|
15
|
+
export declare class SessionCorrelator {
|
|
16
|
+
/**
|
|
17
|
+
* Correlate CodeMie session to agent session file
|
|
18
|
+
* Picks first match after filtering by working directory
|
|
19
|
+
*/
|
|
20
|
+
correlate(input: CorrelationInput): Promise<CorrelationResult>;
|
|
21
|
+
/**
|
|
22
|
+
* Retry correlation with exponential backoff
|
|
23
|
+
*/
|
|
24
|
+
correlateWithRetry(input: CorrelationInput, snapshotFn: () => Promise<FileInfo[]>): Promise<CorrelationResult>;
|
|
25
|
+
/**
|
|
26
|
+
* Filter files by working directory content
|
|
27
|
+
*/
|
|
28
|
+
private filterByWorkingDirectory;
|
|
29
|
+
/**
|
|
30
|
+
* Sleep utility
|
|
31
|
+
*/
|
|
32
|
+
private sleep;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=SessionCorrelator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionCorrelator.d.ts","sourceRoot":"","sources":["../../../src/metrics/core/SessionCorrelator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAIpF,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,WAAW,EAAE,mBAAmB,CAAC;CAClC;AAED,qBAAa,iBAAiB;IAC5B;;;OAGG;IACG,SAAS,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA0DpE;;OAEG;IACG,kBAAkB,CACtB,KAAK,EAAE,gBAAgB,EACvB,UAAU,EAAE,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC,GACpC,OAAO,CAAC,iBAAiB,CAAC;IAuC7B;;OAEG;YACW,wBAAwB;IAuBtC;;OAEG;IACH,OAAO,CAAC,KAAK;CAGd"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Correlator
|
|
3
|
+
*
|
|
4
|
+
* Correlates CodeMie sessions with agent session files.
|
|
5
|
+
* Uses before/after snapshot diff + working directory filtering.
|
|
6
|
+
*/
|
|
7
|
+
import { readFile } from 'fs/promises';
|
|
8
|
+
import { logger } from '../../utils/logger.js';
|
|
9
|
+
import { METRICS_CONFIG } from '../config.js';
|
|
10
|
+
export class SessionCorrelator {
|
|
11
|
+
/**
|
|
12
|
+
* Correlate CodeMie session to agent session file
|
|
13
|
+
* Picks first match after filtering by working directory
|
|
14
|
+
*/
|
|
15
|
+
async correlate(input) {
|
|
16
|
+
const { newFiles, agentPlugin, workingDirectory } = input;
|
|
17
|
+
logger.debug(`[SessionCorrelator] Correlating session with ${newFiles.length} new files`);
|
|
18
|
+
// Case 1: No new files
|
|
19
|
+
if (newFiles.length === 0) {
|
|
20
|
+
logger.debug('[SessionCorrelator] No new files detected');
|
|
21
|
+
return {
|
|
22
|
+
status: 'pending',
|
|
23
|
+
retryCount: 0
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
// Case 2: Filter files by agent pattern
|
|
27
|
+
const matchingFiles = newFiles.filter(f => agentPlugin.matchesSessionPattern(f.path));
|
|
28
|
+
logger.debug(`[SessionCorrelator] ${matchingFiles.length} files match agent pattern out of ${newFiles.length} new files`);
|
|
29
|
+
logger.debug(`[SessionCorrelator] New files: ${newFiles.map(f => f.path).join(', ')}`);
|
|
30
|
+
logger.debug(`[SessionCorrelator] Matching files: ${matchingFiles.map(f => f.path).join(', ')}`);
|
|
31
|
+
if (matchingFiles.length === 0) {
|
|
32
|
+
logger.warn('[SessionCorrelator] No files match agent pattern');
|
|
33
|
+
return {
|
|
34
|
+
status: 'failed',
|
|
35
|
+
retryCount: 0
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// Case 3: Filter by working directory (parse file content)
|
|
39
|
+
const filesWithWorkingDir = await this.filterByWorkingDirectory(matchingFiles, workingDirectory);
|
|
40
|
+
logger.debug(`[SessionCorrelator] ${filesWithWorkingDir.length} files contain working directory`);
|
|
41
|
+
// Pick first match (simple strategy)
|
|
42
|
+
const matchedFile = filesWithWorkingDir.length > 0
|
|
43
|
+
? filesWithWorkingDir[0]
|
|
44
|
+
: matchingFiles[0]; // Fallback to first pattern match if no working dir match
|
|
45
|
+
// Extract session ID
|
|
46
|
+
const agentSessionId = agentPlugin.extractSessionId(matchedFile.path);
|
|
47
|
+
logger.info(`[SessionCorrelator] Matched: ${matchedFile.path} → ${agentSessionId}`);
|
|
48
|
+
return {
|
|
49
|
+
status: 'matched',
|
|
50
|
+
agentSessionFile: matchedFile.path,
|
|
51
|
+
agentSessionId,
|
|
52
|
+
detectedAt: Date.now(),
|
|
53
|
+
retryCount: 0
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Retry correlation with exponential backoff
|
|
58
|
+
*/
|
|
59
|
+
async correlateWithRetry(input, snapshotFn) {
|
|
60
|
+
let result = await this.correlate(input);
|
|
61
|
+
// If matched on first try, return immediately
|
|
62
|
+
if (result.status === 'matched') {
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
// Retry with exponential backoff
|
|
66
|
+
for (let attempt = 0; attempt < METRICS_CONFIG.retry.attempts; attempt++) {
|
|
67
|
+
const delay = METRICS_CONFIG.retry.delays[attempt];
|
|
68
|
+
logger.debug(`[SessionCorrelator] Retry attempt ${attempt + 1} after ${delay}ms`);
|
|
69
|
+
await this.sleep(delay);
|
|
70
|
+
// Take new snapshot
|
|
71
|
+
const newFiles = await snapshotFn();
|
|
72
|
+
// Retry correlation
|
|
73
|
+
result = await this.correlate({
|
|
74
|
+
...input,
|
|
75
|
+
newFiles
|
|
76
|
+
});
|
|
77
|
+
result.retryCount = attempt + 1;
|
|
78
|
+
if (result.status === 'matched') {
|
|
79
|
+
logger.info(`[SessionCorrelator] Matched on retry attempt ${attempt + 1}`);
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// All retries exhausted
|
|
84
|
+
logger.warn(`[SessionCorrelator] Failed to correlate after ${METRICS_CONFIG.retry.attempts} attempts`);
|
|
85
|
+
result.status = 'failed';
|
|
86
|
+
return result;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Filter files by working directory content
|
|
90
|
+
*/
|
|
91
|
+
async filterByWorkingDirectory(files, workingDirectory) {
|
|
92
|
+
const filtered = [];
|
|
93
|
+
for (const file of files) {
|
|
94
|
+
try {
|
|
95
|
+
const content = await readFile(file.path, 'utf-8');
|
|
96
|
+
// Check if file content contains working directory path
|
|
97
|
+
if (content.includes(workingDirectory)) {
|
|
98
|
+
filtered.push(file);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
// Skip files that can't be read
|
|
103
|
+
logger.debug(`[SessionCorrelator] Failed to read file: ${file.path}`, error);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return filtered;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Sleep utility
|
|
110
|
+
*/
|
|
111
|
+
sleep(ms) {
|
|
112
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=SessionCorrelator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionCorrelator.js","sourceRoot":"","sources":["../../../src/metrics/core/SessionCorrelator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sync State Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages sync state embedded in session metadata file.
|
|
5
|
+
* Tracks which records have been synced to prevent duplicates.
|
|
6
|
+
* Sync state is stored in: ~/.codemie/metrics/sessions/{sessionId}.json
|
|
7
|
+
*/
|
|
8
|
+
import type { SyncState } from '../types.js';
|
|
9
|
+
export declare class SyncStateManager {
|
|
10
|
+
private readonly sessionId;
|
|
11
|
+
private readonly filePath;
|
|
12
|
+
constructor(sessionId: string);
|
|
13
|
+
/**
|
|
14
|
+
* Initialize new sync state (embedded in session file)
|
|
15
|
+
*/
|
|
16
|
+
initialize(sessionId: string, agentSessionId: string, sessionStartTime: number): Promise<SyncState>;
|
|
17
|
+
/**
|
|
18
|
+
* Load session file
|
|
19
|
+
*/
|
|
20
|
+
private loadSession;
|
|
21
|
+
/**
|
|
22
|
+
* Load sync state from session file
|
|
23
|
+
* Returns null if file doesn't exist (graceful handling for deleted files)
|
|
24
|
+
*/
|
|
25
|
+
load(): Promise<SyncState | null>;
|
|
26
|
+
/**
|
|
27
|
+
* Save sync state to session file (atomic write)
|
|
28
|
+
*/
|
|
29
|
+
save(state: SyncState): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Update last processed line
|
|
32
|
+
*/
|
|
33
|
+
updateLastProcessed(line: number, timestamp: number): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Add processed record IDs to tracking
|
|
36
|
+
*/
|
|
37
|
+
addProcessedRecords(recordIds: string[]): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Mark records as synced
|
|
40
|
+
* Note: Sync status is tracked in metrics JSONL (syncStatus field)
|
|
41
|
+
* This only updates aggregate statistics and last sync info
|
|
42
|
+
*/
|
|
43
|
+
markSynced(recordIds: string[]): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Add attached user prompt texts to tracking (prevents duplication)
|
|
46
|
+
*/
|
|
47
|
+
addAttachedUserPrompts(promptTexts: string[]): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Increment delta count
|
|
50
|
+
*/
|
|
51
|
+
incrementDeltas(count: number): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* Increment failed count
|
|
54
|
+
*/
|
|
55
|
+
incrementFailed(count: number): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Update session status
|
|
58
|
+
*/
|
|
59
|
+
updateStatus(status: 'active' | 'completed' | 'failed', endTime?: number): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* Get file path
|
|
62
|
+
*/
|
|
63
|
+
getFilePath(): string;
|
|
64
|
+
/**
|
|
65
|
+
* Check if file exists
|
|
66
|
+
*/
|
|
67
|
+
exists(): boolean;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=SyncStateManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SyncStateManager.d.ts","sourceRoot":"","sources":["../../../src/metrics/core/SyncStateManager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EAAE,SAAS,EAAkB,MAAM,aAAa,CAAC;AAI7D,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,SAAS,EAAE,MAAM;IAK7B;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAsCzG;;OAEG;YACW,WAAW;IASzB;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAyBvC;;OAEG;IACG,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B3C;;OAEG;IACG,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBzE;;OAEG;IACG,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB7D;;;;OAIG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BpD;;OAEG;IACG,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BlE;;OAEG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBnD;;OAEG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBnD;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB9F;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACH,MAAM,IAAI,OAAO;CAGlB"}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sync State Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages sync state embedded in session metadata file.
|
|
5
|
+
* Tracks which records have been synced to prevent duplicates.
|
|
6
|
+
* Sync state is stored in: ~/.codemie/metrics/sessions/{sessionId}.json
|
|
7
|
+
*/
|
|
8
|
+
import { readFile, writeFile, mkdir, rename } from 'fs/promises';
|
|
9
|
+
import { existsSync } from 'fs';
|
|
10
|
+
import { tmpdir } from 'os';
|
|
11
|
+
import { dirname } from 'path';
|
|
12
|
+
import { randomUUID } from 'crypto';
|
|
13
|
+
import { logger } from '../../utils/logger.js';
|
|
14
|
+
import { getSessionPath } from '../config.js';
|
|
15
|
+
export class SyncStateManager {
|
|
16
|
+
sessionId;
|
|
17
|
+
filePath;
|
|
18
|
+
constructor(sessionId) {
|
|
19
|
+
this.sessionId = sessionId;
|
|
20
|
+
this.filePath = getSessionPath(sessionId);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Initialize new sync state (embedded in session file)
|
|
24
|
+
*/
|
|
25
|
+
async initialize(sessionId, agentSessionId, sessionStartTime) {
|
|
26
|
+
try {
|
|
27
|
+
// Check if session exists and already has sync state
|
|
28
|
+
if (existsSync(this.filePath)) {
|
|
29
|
+
const session = await this.loadSession();
|
|
30
|
+
if (session.syncState) {
|
|
31
|
+
logger.debug('[SyncStateManager] Sync state already exists, loading...');
|
|
32
|
+
return session.syncState;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// Create new sync state
|
|
36
|
+
const syncState = {
|
|
37
|
+
sessionId,
|
|
38
|
+
agentSessionId,
|
|
39
|
+
sessionStartTime,
|
|
40
|
+
status: 'active',
|
|
41
|
+
lastProcessedLine: 0,
|
|
42
|
+
lastProcessedTimestamp: Date.now(),
|
|
43
|
+
processedRecordIds: [],
|
|
44
|
+
attachedUserPromptTexts: [],
|
|
45
|
+
totalDeltas: 0,
|
|
46
|
+
totalSynced: 0,
|
|
47
|
+
totalFailed: 0
|
|
48
|
+
};
|
|
49
|
+
// Save to session file
|
|
50
|
+
await this.save(syncState);
|
|
51
|
+
logger.info('[SyncStateManager] Initialized new sync state');
|
|
52
|
+
return syncState;
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
logger.error('[SyncStateManager] Failed to initialize sync state:', error);
|
|
56
|
+
throw error;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Load session file
|
|
61
|
+
*/
|
|
62
|
+
async loadSession() {
|
|
63
|
+
if (!existsSync(this.filePath)) {
|
|
64
|
+
throw new Error(`Session file does not exist: ${this.filePath}`);
|
|
65
|
+
}
|
|
66
|
+
const content = await readFile(this.filePath, 'utf-8');
|
|
67
|
+
return JSON.parse(content);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Load sync state from session file
|
|
71
|
+
* Returns null if file doesn't exist (graceful handling for deleted files)
|
|
72
|
+
*/
|
|
73
|
+
async load() {
|
|
74
|
+
try {
|
|
75
|
+
// Check if session file exists
|
|
76
|
+
if (!existsSync(this.filePath)) {
|
|
77
|
+
logger.debug('[SyncStateManager] Session file does not exist, returning null');
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
const session = await this.loadSession();
|
|
81
|
+
if (!session.syncState) {
|
|
82
|
+
logger.debug('[SyncStateManager] Sync state not initialized yet, returning null');
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
logger.debug(`[SyncStateManager] Loaded sync state: ${session.syncState.totalDeltas} deltas, ${session.syncState.totalSynced} synced`);
|
|
86
|
+
return session.syncState;
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
logger.error('[SyncStateManager] Failed to load sync state:', error);
|
|
90
|
+
// Return null instead of throwing to allow graceful degradation
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Save sync state to session file (atomic write)
|
|
96
|
+
*/
|
|
97
|
+
async save(state) {
|
|
98
|
+
try {
|
|
99
|
+
// Load current session
|
|
100
|
+
const session = await this.loadSession();
|
|
101
|
+
// Update sync state
|
|
102
|
+
session.syncState = state;
|
|
103
|
+
// Ensure directory exists
|
|
104
|
+
const dir = dirname(this.filePath);
|
|
105
|
+
if (!existsSync(dir)) {
|
|
106
|
+
await mkdir(dir, { recursive: true });
|
|
107
|
+
}
|
|
108
|
+
// Write to temp file first (atomic write)
|
|
109
|
+
const tempFile = `${tmpdir()}/session_${randomUUID()}.json`;
|
|
110
|
+
await writeFile(tempFile, JSON.stringify(session, null, 2), 'utf-8');
|
|
111
|
+
// Rename to final location (atomic operation)
|
|
112
|
+
await rename(tempFile, this.filePath);
|
|
113
|
+
logger.debug('[SyncStateManager] Saved sync state');
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
logger.error('[SyncStateManager] Failed to save sync state:', error);
|
|
117
|
+
throw error;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Update last processed line
|
|
122
|
+
*/
|
|
123
|
+
async updateLastProcessed(line, timestamp) {
|
|
124
|
+
try {
|
|
125
|
+
const state = await this.load();
|
|
126
|
+
if (!state) {
|
|
127
|
+
logger.debug('[SyncStateManager] Cannot update - sync state does not exist');
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
state.lastProcessedLine = line;
|
|
131
|
+
state.lastProcessedTimestamp = timestamp;
|
|
132
|
+
await this.save(state);
|
|
133
|
+
logger.debug(`[SyncStateManager] Updated last processed line: ${line}`);
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
logger.error('[SyncStateManager] Failed to update last processed line:', error);
|
|
137
|
+
// Don't throw - allow graceful degradation
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Add processed record IDs to tracking
|
|
142
|
+
*/
|
|
143
|
+
async addProcessedRecords(recordIds) {
|
|
144
|
+
try {
|
|
145
|
+
const state = await this.load();
|
|
146
|
+
if (!state) {
|
|
147
|
+
logger.debug('[SyncStateManager] Cannot add records - sync state does not exist');
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
// Add to processed records list
|
|
151
|
+
state.processedRecordIds.push(...recordIds);
|
|
152
|
+
await this.save(state);
|
|
153
|
+
logger.debug(`[SyncStateManager] Added ${recordIds.length} processed record IDs`);
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
logger.error('[SyncStateManager] Failed to add processed records:', error);
|
|
157
|
+
// Don't throw - allow graceful degradation
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Mark records as synced
|
|
162
|
+
* Note: Sync status is tracked in metrics JSONL (syncStatus field)
|
|
163
|
+
* This only updates aggregate statistics and last sync info
|
|
164
|
+
*/
|
|
165
|
+
async markSynced(recordIds) {
|
|
166
|
+
try {
|
|
167
|
+
const state = await this.load();
|
|
168
|
+
if (!state) {
|
|
169
|
+
logger.debug('[SyncStateManager] Cannot mark synced - sync state does not exist');
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
// Update last synced record (for resume capability)
|
|
173
|
+
if (recordIds.length > 0) {
|
|
174
|
+
state.lastSyncedRecordId = recordIds[recordIds.length - 1];
|
|
175
|
+
state.lastSyncAt = Date.now();
|
|
176
|
+
}
|
|
177
|
+
// Update statistics
|
|
178
|
+
state.totalSynced += recordIds.length;
|
|
179
|
+
await this.save(state);
|
|
180
|
+
logger.debug(`[SyncStateManager] Marked ${recordIds.length} records as synced`);
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
logger.error('[SyncStateManager] Failed to mark records as synced:', error);
|
|
184
|
+
// Don't throw - allow graceful degradation
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Add attached user prompt texts to tracking (prevents duplication)
|
|
189
|
+
*/
|
|
190
|
+
async addAttachedUserPrompts(promptTexts) {
|
|
191
|
+
try {
|
|
192
|
+
const state = await this.load();
|
|
193
|
+
if (!state) {
|
|
194
|
+
logger.debug('[SyncStateManager] Cannot add attached prompts - sync state does not exist');
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
// Initialize array if not present
|
|
198
|
+
if (!state.attachedUserPromptTexts) {
|
|
199
|
+
state.attachedUserPromptTexts = [];
|
|
200
|
+
}
|
|
201
|
+
// Add to attached prompts list
|
|
202
|
+
state.attachedUserPromptTexts.push(...promptTexts);
|
|
203
|
+
await this.save(state);
|
|
204
|
+
logger.debug(`[SyncStateManager] Added ${promptTexts.length} attached user prompt texts`);
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
logger.error('[SyncStateManager] Failed to add attached prompts:', error);
|
|
208
|
+
// Don't throw - allow graceful degradation
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Increment delta count
|
|
213
|
+
*/
|
|
214
|
+
async incrementDeltas(count) {
|
|
215
|
+
try {
|
|
216
|
+
const state = await this.load();
|
|
217
|
+
if (!state) {
|
|
218
|
+
logger.debug('[SyncStateManager] Cannot increment deltas - sync state does not exist');
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
state.totalDeltas += count;
|
|
222
|
+
await this.save(state);
|
|
223
|
+
logger.debug(`[SyncStateManager] Incremented delta count by ${count}`);
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
logger.error('[SyncStateManager] Failed to increment deltas:', error);
|
|
227
|
+
// Don't throw - allow graceful degradation
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Increment failed count
|
|
232
|
+
*/
|
|
233
|
+
async incrementFailed(count) {
|
|
234
|
+
try {
|
|
235
|
+
const state = await this.load();
|
|
236
|
+
if (!state) {
|
|
237
|
+
logger.debug('[SyncStateManager] Cannot increment failed - sync state does not exist');
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
state.totalFailed += count;
|
|
241
|
+
await this.save(state);
|
|
242
|
+
logger.debug(`[SyncStateManager] Incremented failed count by ${count}`);
|
|
243
|
+
}
|
|
244
|
+
catch (error) {
|
|
245
|
+
logger.error('[SyncStateManager] Failed to increment failed count:', error);
|
|
246
|
+
// Don't throw - allow graceful degradation
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Update session status
|
|
251
|
+
*/
|
|
252
|
+
async updateStatus(status, endTime) {
|
|
253
|
+
try {
|
|
254
|
+
const state = await this.load();
|
|
255
|
+
if (!state) {
|
|
256
|
+
logger.debug('[SyncStateManager] Cannot update status - sync state does not exist');
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
state.status = status;
|
|
260
|
+
if (endTime && (status === 'completed' || status === 'failed')) {
|
|
261
|
+
state.sessionEndTime = endTime;
|
|
262
|
+
}
|
|
263
|
+
await this.save(state);
|
|
264
|
+
logger.debug(`[SyncStateManager] Updated status to: ${status}`);
|
|
265
|
+
}
|
|
266
|
+
catch (error) {
|
|
267
|
+
logger.error('[SyncStateManager] Failed to update status:', error);
|
|
268
|
+
// Don't throw - allow graceful degradation
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Get file path
|
|
273
|
+
*/
|
|
274
|
+
getFilePath() {
|
|
275
|
+
return this.filePath;
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Check if file exists
|
|
279
|
+
*/
|
|
280
|
+
exists() {
|
|
281
|
+
return existsSync(this.filePath);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
//# sourceMappingURL=SyncStateManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SyncStateManager.js","sourceRoot":"","sources":["../../../src/metrics/core/SyncStateManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Metrics Collection System
|
|
3
|
+
*
|
|
4
|
+
* Public API for the metrics collection system.
|
|
5
|
+
*/
|
|
6
|
+
export * from './types.js';
|
|
7
|
+
export { DeltaWriter } from './core/DeltaWriter.js';
|
|
8
|
+
export { SyncStateManager } from './core/SyncStateManager.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/metrics/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Metrics Collection System
|
|
3
|
+
*
|
|
4
|
+
* Public API for the metrics collection system.
|
|
5
|
+
*/
|
|
6
|
+
// Types
|
|
7
|
+
export * from './types.js';
|
|
8
|
+
// Core components
|
|
9
|
+
export { DeltaWriter } from './core/DeltaWriter.js';
|
|
10
|
+
export { SyncStateManager } from './core/SyncStateManager.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/metrics/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,kBAAkB;AAClB,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC"}
|