@codemieai/code 0.0.23 → 0.0.25
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 +41 -80
- package/dist/agents/codemie-code/config.d.ts.map +1 -1
- package/dist/agents/codemie-code/config.js +7 -3
- package/dist/agents/codemie-code/config.js.map +1 -1
- package/dist/agents/codemie-code/tools/index.d.ts.map +1 -1
- package/dist/agents/codemie-code/tools/index.js +6 -5
- package/dist/agents/codemie-code/tools/index.js.map +1 -1
- package/dist/agents/codemie-code/types.d.ts +4 -0
- package/dist/agents/codemie-code/types.d.ts.map +1 -1
- package/dist/agents/codemie-code/types.js.map +1 -1
- package/dist/agents/core/AgentCLI.d.ts.map +1 -1
- package/dist/agents/core/AgentCLI.js +21 -0
- package/dist/agents/core/AgentCLI.js.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.d.ts +54 -3
- package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.js +162 -30
- package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
- package/dist/agents/core/BaseMetricsAdapter.d.ts +88 -6
- package/dist/agents/core/BaseMetricsAdapter.d.ts.map +1 -1
- package/dist/agents/core/BaseMetricsAdapter.js +174 -16
- package/dist/agents/core/BaseMetricsAdapter.js.map +1 -1
- package/dist/agents/core/lifecycle-helpers.d.ts +111 -0
- package/dist/agents/core/lifecycle-helpers.d.ts.map +1 -0
- package/dist/agents/core/lifecycle-helpers.js +189 -0
- package/dist/agents/core/lifecycle-helpers.js.map +1 -0
- package/dist/{metrics → agents/core/metrics}/MetricsOrchestrator.d.ts +12 -0
- package/dist/agents/core/metrics/MetricsOrchestrator.d.ts.map +1 -0
- package/dist/{metrics → agents/core/metrics}/MetricsOrchestrator.js +142 -23
- package/dist/agents/core/metrics/MetricsOrchestrator.js.map +1 -0
- package/dist/agents/core/metrics/core/DeltaWriter.d.ts.map +1 -0
- package/dist/{metrics → agents/core/metrics}/core/DeltaWriter.js +13 -7
- package/dist/agents/core/metrics/core/DeltaWriter.js.map +1 -0
- package/dist/agents/core/metrics/core/FileSnapshotter.d.ts.map +1 -0
- package/dist/{metrics → agents/core/metrics}/core/FileSnapshotter.js +1 -1
- package/dist/agents/core/metrics/core/FileSnapshotter.js.map +1 -0
- package/dist/agents/core/metrics/core/SessionCorrelator.d.ts.map +1 -0
- package/dist/agents/core/metrics/core/SessionCorrelator.js +157 -0
- package/dist/agents/core/metrics/core/SessionCorrelator.js.map +1 -0
- package/dist/agents/core/metrics/core/SyncStateManager.d.ts.map +1 -0
- package/dist/{metrics → agents/core/metrics}/core/SyncStateManager.js +2 -2
- package/dist/agents/core/metrics/core/SyncStateManager.js.map +1 -0
- package/dist/agents/core/metrics/index.d.ts.map +1 -0
- package/dist/agents/core/metrics/index.js.map +1 -0
- package/dist/agents/core/metrics/session/SessionStore.d.ts.map +1 -0
- package/dist/{metrics → agents/core/metrics}/session/SessionStore.js +9 -5
- package/dist/agents/core/metrics/session/SessionStore.js.map +1 -0
- package/dist/agents/core/metrics/types.d.ts.map +1 -0
- package/dist/agents/core/metrics/types.js.map +1 -0
- package/dist/{metrics/config.d.ts → agents/core/metrics-config.d.ts} +1 -1
- package/dist/agents/core/metrics-config.d.ts.map +1 -0
- package/dist/{metrics/config.js → agents/core/metrics-config.js} +13 -4
- package/dist/agents/core/metrics-config.js.map +1 -0
- package/dist/agents/core/types.d.ts +112 -6
- package/dist/agents/core/types.d.ts.map +1 -1
- package/dist/agents/plugins/claude.metrics.d.ts +4 -2
- package/dist/agents/plugins/claude.metrics.d.ts.map +1 -1
- package/dist/agents/plugins/claude.metrics.js +33 -11
- package/dist/agents/plugins/claude.metrics.js.map +1 -1
- package/dist/agents/plugins/claude.plugin.d.ts +1 -1
- package/dist/agents/plugins/claude.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/claude.plugin.js +3 -33
- 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 +12 -5
- 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 +133 -33
- package/dist/agents/plugins/codex.plugin.js.map +1 -1
- package/dist/agents/plugins/gemini.metrics.d.ts +10 -3
- package/dist/agents/plugins/gemini.metrics.d.ts.map +1 -1
- package/dist/agents/plugins/gemini.metrics.js +69 -17
- package/dist/agents/plugins/gemini.metrics.js.map +1 -1
- package/dist/agents/plugins/gemini.plugin.d.ts +1 -1
- package/dist/agents/plugins/gemini.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/gemini.plugin.js +15 -24
- package/dist/agents/plugins/gemini.plugin.js.map +1 -1
- package/dist/agents/plugins/history-parser.d.ts +1 -1
- package/dist/agents/plugins/history-parser.d.ts.map +1 -1
- package/dist/cli/commands/analytics/data-loader.d.ts +1 -1
- package/dist/cli/commands/analytics/data-loader.d.ts.map +1 -1
- package/dist/cli/commands/analytics/types.d.ts +2 -2
- package/dist/cli/commands/analytics/types.d.ts.map +1 -1
- package/dist/cli/commands/analytics/types.js +1 -1
- package/dist/cli/commands/profile/auth.d.ts +5 -0
- package/dist/cli/commands/profile/auth.d.ts.map +1 -0
- package/dist/cli/commands/profile/auth.js +120 -0
- package/dist/cli/commands/profile/auth.js.map +1 -0
- package/dist/cli/commands/{profile.d.ts → profile/index.d.ts} +1 -1
- package/dist/cli/commands/profile/index.d.ts.map +1 -0
- package/dist/cli/commands/{profile.js → profile/index.js} +81 -46
- package/dist/cli/commands/profile/index.js.map +1 -0
- package/dist/cli/index.js +1 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/providers/core/auth-validation.d.ts +20 -0
- package/dist/providers/core/auth-validation.d.ts.map +1 -0
- package/dist/providers/core/auth-validation.js +27 -0
- package/dist/providers/core/auth-validation.js.map +1 -0
- package/dist/providers/core/types.d.ts +51 -0
- package/dist/providers/core/types.d.ts.map +1 -1
- package/dist/providers/plugins/sso/index.d.ts +3 -0
- package/dist/providers/plugins/sso/index.d.ts.map +1 -1
- package/dist/providers/plugins/sso/index.js +4 -0
- package/dist/providers/plugins/sso/index.js.map +1 -1
- package/dist/{metrics/sync/jsonl-writer.d.ts → providers/plugins/sso/metrics/sync/sso.jsonl-writer.d.ts} +2 -2
- package/dist/providers/plugins/sso/metrics/sync/sso.jsonl-writer.d.ts.map +1 -0
- package/dist/{metrics/sync/jsonl-writer.js → providers/plugins/sso/metrics/sync/sso.jsonl-writer.js} +2 -2
- package/dist/providers/plugins/sso/metrics/sync/sso.jsonl-writer.js.map +1 -0
- package/dist/providers/plugins/sso/metrics/sync/sso.lifecycle-handler.d.ts +62 -0
- package/dist/providers/plugins/sso/metrics/sync/sso.lifecycle-handler.d.ts.map +1 -0
- package/dist/providers/plugins/sso/metrics/sync/sso.lifecycle-handler.js +157 -0
- package/dist/providers/plugins/sso/metrics/sync/sso.lifecycle-handler.js.map +1 -0
- package/dist/{metrics/sync/aggregator.d.ts → providers/plugins/sso/metrics/sync/sso.metrics-aggregator.d.ts} +4 -4
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-aggregator.d.ts.map +1 -0
- package/dist/{metrics/sync/aggregator.js → providers/plugins/sso/metrics/sync/sso.metrics-aggregator.js} +5 -4
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-aggregator.js.map +1 -0
- package/dist/{metrics/sync/MetricsApiClient.d.ts → providers/plugins/sso/metrics/sync/sso.metrics-api-client.d.ts} +2 -2
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-api-client.d.ts.map +1 -0
- package/dist/{metrics/sync/MetricsApiClient.js → providers/plugins/sso/metrics/sync/sso.metrics-api-client.js} +9 -5
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-api-client.js.map +1 -0
- package/dist/{metrics/sync/post-processor.d.ts → providers/plugins/sso/metrics/sync/sso.metrics-post-processor.d.ts} +3 -3
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-post-processor.d.ts.map +1 -0
- package/dist/{metrics/sync/post-processor.js → providers/plugins/sso/metrics/sync/sso.metrics-post-processor.js} +3 -3
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-post-processor.js.map +1 -0
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-sender.d.ts +104 -0
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-sender.d.ts.map +1 -0
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-sender.js +258 -0
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-sender.js.map +1 -0
- package/dist/{proxy/plugins/metrics-sync.plugin.d.ts → providers/plugins/sso/metrics/sync/sso.metrics-sync.plugin.d.ts} +9 -6
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-sync.plugin.d.ts.map +1 -0
- package/dist/{proxy/plugins/metrics-sync.plugin.js → providers/plugins/sso/metrics/sync/sso.metrics-sync.plugin.js} +42 -60
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-sync.plugin.js.map +1 -0
- package/dist/{metrics/sync/types.d.ts → providers/plugins/sso/metrics/sync/sso.metrics-types.d.ts} +6 -2
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-types.d.ts.map +1 -0
- package/dist/{metrics/sync/types.js → providers/plugins/sso/metrics/sync/sso.metrics-types.js} +1 -1
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-types.js.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/endpoint-blocker.plugin.d.ts.map +1 -0
- package/dist/{proxy → providers/plugins/sso/proxy}/plugins/endpoint-blocker.plugin.js +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/endpoint-blocker.plugin.js.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/header-injection.plugin.d.ts.map +1 -0
- package/dist/{proxy → providers/plugins/sso/proxy}/plugins/header-injection.plugin.js +2 -2
- package/dist/providers/plugins/sso/proxy/plugins/header-injection.plugin.js.map +1 -0
- package/dist/{proxy → providers/plugins/sso/proxy}/plugins/index.d.ts +2 -2
- package/dist/providers/plugins/sso/proxy/plugins/index.d.ts.map +1 -0
- package/dist/{proxy → providers/plugins/sso/proxy}/plugins/index.js +4 -3
- package/dist/providers/plugins/sso/proxy/plugins/index.js.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/logging.plugin.d.ts.map +1 -0
- package/dist/{proxy → providers/plugins/sso/proxy}/plugins/logging.plugin.js +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/logging.plugin.js.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/registry.d.ts.map +1 -0
- package/dist/{proxy → providers/plugins/sso/proxy}/plugins/registry.js +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/registry.js.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/sso-auth.plugin.d.ts.map +1 -0
- package/dist/{proxy → providers/plugins/sso/proxy}/plugins/sso-auth.plugin.js +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/sso-auth.plugin.js.map +1 -0
- package/dist/{proxy → providers/plugins/sso/proxy}/plugins/types.d.ts +4 -4
- package/dist/providers/plugins/sso/proxy/plugins/types.d.ts.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/types.js.map +1 -0
- package/dist/{proxy/errors.d.ts → providers/plugins/sso/proxy/proxy-errors.d.ts} +1 -1
- package/dist/providers/plugins/sso/proxy/proxy-errors.d.ts.map +1 -0
- package/dist/{proxy/errors.js → providers/plugins/sso/proxy/proxy-errors.js} +1 -1
- package/dist/providers/plugins/sso/proxy/proxy-errors.js.map +1 -0
- package/dist/{proxy/http-client.d.ts → providers/plugins/sso/proxy/proxy-http-client.d.ts} +1 -1
- package/dist/providers/plugins/sso/proxy/proxy-http-client.d.ts.map +1 -0
- package/dist/{proxy/http-client.js → providers/plugins/sso/proxy/proxy-http-client.js} +3 -3
- package/dist/providers/plugins/sso/proxy/proxy-http-client.js.map +1 -0
- package/dist/{proxy/types.d.ts → providers/plugins/sso/proxy/proxy-types.d.ts} +2 -2
- package/dist/providers/plugins/sso/proxy/proxy-types.d.ts.map +1 -0
- package/dist/{proxy/types.js → providers/plugins/sso/proxy/proxy-types.js} +1 -1
- package/dist/providers/plugins/sso/proxy/proxy-types.js.map +1 -0
- package/dist/{utils/codemie-proxy.d.ts → providers/plugins/sso/proxy/sso.proxy.d.ts} +3 -3
- package/dist/providers/plugins/sso/proxy/sso.proxy.d.ts.map +1 -0
- package/dist/{utils/codemie-proxy.js → providers/plugins/sso/proxy/sso.proxy.js} +11 -11
- package/dist/providers/plugins/sso/proxy/sso.proxy.js.map +1 -0
- package/dist/providers/plugins/sso/sso.auth.d.ts +7 -3
- package/dist/providers/plugins/sso/sso.auth.d.ts.map +1 -1
- package/dist/providers/plugins/sso/sso.auth.js +40 -7
- package/dist/providers/plugins/sso/sso.auth.js.map +1 -1
- package/dist/providers/plugins/sso/sso.health.js +3 -3
- package/dist/providers/plugins/sso/sso.health.js.map +1 -1
- package/dist/providers/plugins/sso/sso.models.js +1 -1
- package/dist/providers/plugins/sso/sso.models.js.map +1 -1
- package/dist/providers/plugins/sso/sso.setup-steps.d.ts.map +1 -1
- package/dist/providers/plugins/sso/sso.setup-steps.js +116 -1
- package/dist/providers/plugins/sso/sso.setup-steps.js.map +1 -1
- package/dist/providers/plugins/sso/sso.template.d.ts.map +1 -1
- package/dist/providers/plugins/sso/sso.template.js +51 -0
- package/dist/providers/plugins/sso/sso.template.js.map +1 -1
- package/dist/utils/credential-store.d.ts +9 -3
- package/dist/utils/credential-store.d.ts.map +1 -1
- package/dist/utils/credential-store.js +43 -18
- package/dist/utils/credential-store.js.map +1 -1
- package/dist/utils/error-context.d.ts +90 -0
- package/dist/utils/error-context.d.ts.map +1 -0
- package/dist/utils/error-context.js +338 -0
- package/dist/utils/error-context.js.map +1 -0
- package/dist/utils/exec.d.ts +1 -1
- package/dist/utils/exec.d.ts.map +1 -1
- package/dist/utils/exec.js +9 -5
- package/dist/utils/exec.js.map +1 -1
- package/dist/utils/first-time.js +1 -1
- package/dist/utils/first-time.js.map +1 -1
- package/dist/{metrics/utils → utils}/git.d.ts +1 -1
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/{metrics/utils → utils}/git.js +2 -2
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/npm.d.ts.map +1 -1
- package/dist/utils/npm.js +16 -5
- package/dist/utils/npm.js.map +1 -1
- package/dist/utils/path-utils.d.ts +195 -0
- package/dist/utils/path-utils.d.ts.map +1 -0
- package/dist/utils/path-utils.js +267 -0
- package/dist/utils/path-utils.js.map +1 -0
- package/dist/utils/profile-display.d.ts +41 -0
- package/dist/utils/profile-display.d.ts.map +1 -0
- package/dist/utils/profile-display.js +90 -0
- package/dist/utils/profile-display.js.map +1 -0
- package/dist/utils/profile.d.ts +46 -1
- package/dist/utils/profile.d.ts.map +1 -1
- package/dist/utils/profile.js +138 -9
- package/dist/utils/profile.js.map +1 -1
- package/dist/utils/which.d.ts.map +1 -1
- package/dist/utils/which.js +4 -2
- package/dist/utils/which.js.map +1 -1
- package/package.json +1 -1
- package/dist/cli/commands/auth.d.ts +0 -3
- package/dist/cli/commands/auth.d.ts.map +0 -1
- package/dist/cli/commands/auth.js +0 -184
- package/dist/cli/commands/auth.js.map +0 -1
- package/dist/cli/commands/profile.d.ts.map +0 -1
- package/dist/cli/commands/profile.js.map +0 -1
- package/dist/metrics/MetricsOrchestrator.d.ts.map +0 -1
- package/dist/metrics/MetricsOrchestrator.js.map +0 -1
- package/dist/metrics/config.d.ts.map +0 -1
- package/dist/metrics/config.js.map +0 -1
- package/dist/metrics/core/DeltaWriter.d.ts.map +0 -1
- package/dist/metrics/core/DeltaWriter.js.map +0 -1
- package/dist/metrics/core/FileSnapshotter.d.ts.map +0 -1
- package/dist/metrics/core/FileSnapshotter.js.map +0 -1
- package/dist/metrics/core/SessionCorrelator.d.ts.map +0 -1
- package/dist/metrics/core/SessionCorrelator.js +0 -115
- package/dist/metrics/core/SessionCorrelator.js.map +0 -1
- package/dist/metrics/core/SyncStateManager.d.ts.map +0 -1
- package/dist/metrics/core/SyncStateManager.js.map +0 -1
- package/dist/metrics/index.d.ts.map +0 -1
- package/dist/metrics/index.js.map +0 -1
- package/dist/metrics/session/SessionStore.d.ts.map +0 -1
- package/dist/metrics/session/SessionStore.js.map +0 -1
- package/dist/metrics/sync/MetricsApiClient.d.ts.map +0 -1
- package/dist/metrics/sync/MetricsApiClient.js.map +0 -1
- package/dist/metrics/sync/aggregator.d.ts.map +0 -1
- package/dist/metrics/sync/aggregator.js.map +0 -1
- package/dist/metrics/sync/index.d.ts +0 -10
- package/dist/metrics/sync/index.d.ts.map +0 -1
- package/dist/metrics/sync/index.js +0 -10
- package/dist/metrics/sync/index.js.map +0 -1
- package/dist/metrics/sync/jsonl-writer.d.ts.map +0 -1
- package/dist/metrics/sync/jsonl-writer.js.map +0 -1
- package/dist/metrics/sync/post-processor.d.ts.map +0 -1
- package/dist/metrics/sync/post-processor.js.map +0 -1
- package/dist/metrics/sync/types.d.ts.map +0 -1
- package/dist/metrics/sync/types.js.map +0 -1
- package/dist/metrics/types.d.ts.map +0 -1
- package/dist/metrics/types.js.map +0 -1
- package/dist/metrics/utils/git.d.ts.map +0 -1
- package/dist/metrics/utils/git.js.map +0 -1
- package/dist/proxy/errors.d.ts.map +0 -1
- package/dist/proxy/errors.js.map +0 -1
- package/dist/proxy/http-client.d.ts.map +0 -1
- package/dist/proxy/http-client.js.map +0 -1
- package/dist/proxy/plugins/endpoint-blocker.plugin.d.ts.map +0 -1
- package/dist/proxy/plugins/endpoint-blocker.plugin.js.map +0 -1
- package/dist/proxy/plugins/header-injection.plugin.d.ts.map +0 -1
- package/dist/proxy/plugins/header-injection.plugin.js.map +0 -1
- package/dist/proxy/plugins/index.d.ts.map +0 -1
- package/dist/proxy/plugins/index.js.map +0 -1
- package/dist/proxy/plugins/logging.plugin.d.ts.map +0 -1
- package/dist/proxy/plugins/logging.plugin.js.map +0 -1
- package/dist/proxy/plugins/metrics-sync.plugin.d.ts.map +0 -1
- package/dist/proxy/plugins/metrics-sync.plugin.js.map +0 -1
- package/dist/proxy/plugins/registry.d.ts.map +0 -1
- package/dist/proxy/plugins/registry.js.map +0 -1
- package/dist/proxy/plugins/sso-auth.plugin.d.ts.map +0 -1
- package/dist/proxy/plugins/sso-auth.plugin.js.map +0 -1
- package/dist/proxy/plugins/types.d.ts.map +0 -1
- package/dist/proxy/plugins/types.js.map +0 -1
- package/dist/proxy/types.d.ts.map +0 -1
- package/dist/proxy/types.js.map +0 -1
- package/dist/utils/codemie-proxy.d.ts.map +0 -1
- package/dist/utils/codemie-proxy.js.map +0 -1
- /package/dist/{metrics → agents/core/metrics}/core/DeltaWriter.d.ts +0 -0
- /package/dist/{metrics → agents/core/metrics}/core/FileSnapshotter.d.ts +0 -0
- /package/dist/{metrics → agents/core/metrics}/core/SessionCorrelator.d.ts +0 -0
- /package/dist/{metrics → agents/core/metrics}/core/SyncStateManager.d.ts +0 -0
- /package/dist/{metrics → agents/core/metrics}/index.d.ts +0 -0
- /package/dist/{metrics → agents/core/metrics}/index.js +0 -0
- /package/dist/{metrics → agents/core/metrics}/session/SessionStore.d.ts +0 -0
- /package/dist/{metrics → agents/core/metrics}/types.d.ts +0 -0
- /package/dist/{metrics → agents/core/metrics}/types.js +0 -0
- /package/dist/{proxy → providers/plugins/sso/proxy}/plugins/endpoint-blocker.plugin.d.ts +0 -0
- /package/dist/{proxy → providers/plugins/sso/proxy}/plugins/header-injection.plugin.d.ts +0 -0
- /package/dist/{proxy → providers/plugins/sso/proxy}/plugins/logging.plugin.d.ts +0 -0
- /package/dist/{proxy → providers/plugins/sso/proxy}/plugins/registry.d.ts +0 -0
- /package/dist/{proxy → providers/plugins/sso/proxy}/plugins/sso-auth.plugin.d.ts +0 -0
- /package/dist/{proxy → providers/plugins/sso/proxy}/plugins/types.js +0 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SSO Metrics Sender
|
|
3
|
+
*
|
|
4
|
+
* SSO-specific utility for sending metrics to CodeMie API.
|
|
5
|
+
* Provides high-level methods for different metric types:
|
|
6
|
+
* - Session start metrics
|
|
7
|
+
* - Session end metrics
|
|
8
|
+
* - Aggregated session metrics
|
|
9
|
+
*
|
|
10
|
+
* Used by:
|
|
11
|
+
* - SSO metrics sync proxy plugin (aggregated metrics sync)
|
|
12
|
+
* - BaseAgentAdapter (session lifecycle for ai-run-sso)
|
|
13
|
+
*
|
|
14
|
+
* IMPORTANT: This is an SSO provider capability, not a generic metrics capability.
|
|
15
|
+
* Only works with ai-run-sso provider which provides authentication cookies.
|
|
16
|
+
*/
|
|
17
|
+
import type { SessionMetric, MetricsSyncResponse } from './sso.metrics-types.js';
|
|
18
|
+
import type { MetricsSession } from '../../../../../agents/core/metrics/types.js';
|
|
19
|
+
/**
|
|
20
|
+
* Session start status
|
|
21
|
+
*/
|
|
22
|
+
export type SessionStartStatus = 'started' | 'failed';
|
|
23
|
+
/**
|
|
24
|
+
* Session end status
|
|
25
|
+
*/
|
|
26
|
+
export type SessionEndStatus = 'completed' | 'failed' | 'interrupted';
|
|
27
|
+
/**
|
|
28
|
+
* Session lifecycle error
|
|
29
|
+
*/
|
|
30
|
+
export interface SessionError {
|
|
31
|
+
type: string;
|
|
32
|
+
message: string;
|
|
33
|
+
code?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface MetricsSenderOptions {
|
|
36
|
+
baseUrl: string;
|
|
37
|
+
cookies?: string;
|
|
38
|
+
timeout?: number;
|
|
39
|
+
retryAttempts?: number;
|
|
40
|
+
version?: string;
|
|
41
|
+
clientType?: string;
|
|
42
|
+
dryRun?: boolean;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* High-level metrics sender for SSO provider
|
|
46
|
+
* Wraps MetricsApiClient with convenience methods
|
|
47
|
+
*/
|
|
48
|
+
export declare class MetricsSender {
|
|
49
|
+
/**
|
|
50
|
+
* Metric name constants
|
|
51
|
+
* - METRIC_SESSION_TOTAL: Session lifecycle events (start, end)
|
|
52
|
+
* Differentiated by 'status' attribute: started, completed, failed, interrupted
|
|
53
|
+
* - METRIC_USAGE_TOTAL: Aggregated usage metrics (periodic sync)
|
|
54
|
+
* Contains accumulated token, tool, and file operation metrics
|
|
55
|
+
*/
|
|
56
|
+
static readonly METRIC_SESSION_TOTAL = "codemie_cli_session_total";
|
|
57
|
+
static readonly METRIC_USAGE_TOTAL = "codemie_cli_usage_total";
|
|
58
|
+
private client;
|
|
59
|
+
private dryRun;
|
|
60
|
+
private version;
|
|
61
|
+
constructor(options: MetricsSenderOptions);
|
|
62
|
+
/**
|
|
63
|
+
* Send session start metric
|
|
64
|
+
* Called when agent begins execution with ai-run-sso provider
|
|
65
|
+
*
|
|
66
|
+
* @param session - Session metadata (with optional model)
|
|
67
|
+
* @param workingDirectory - Current working directory (for git branch detection)
|
|
68
|
+
* @param status - Session start status (started/failed)
|
|
69
|
+
* @param error - Optional error information (required if status=failed)
|
|
70
|
+
*/
|
|
71
|
+
sendSessionStart(session: Pick<MetricsSession, 'sessionId' | 'agentName' | 'provider' | 'project' | 'startTime' | 'workingDirectory'> & {
|
|
72
|
+
model?: string;
|
|
73
|
+
}, workingDirectory: string, status?: SessionStartStatus, error?: SessionError): Promise<MetricsSyncResponse>;
|
|
74
|
+
/**
|
|
75
|
+
* Send session end metric
|
|
76
|
+
* Called when agent process exits
|
|
77
|
+
*
|
|
78
|
+
* @param session - Session metadata (with optional model)
|
|
79
|
+
* @param workingDirectory - Current working directory (for git branch detection)
|
|
80
|
+
* @param status - Session end status (completed/failed/interrupted)
|
|
81
|
+
* @param durationMs - Session duration in milliseconds
|
|
82
|
+
* @param error - Optional error information (for failed sessions)
|
|
83
|
+
*/
|
|
84
|
+
sendSessionEnd(session: Pick<MetricsSession, 'sessionId' | 'agentName' | 'provider' | 'project' | 'startTime' | 'workingDirectory'> & {
|
|
85
|
+
model?: string;
|
|
86
|
+
}, workingDirectory: string, status: SessionEndStatus, durationMs: number, error?: SessionError): Promise<MetricsSyncResponse>;
|
|
87
|
+
/**
|
|
88
|
+
* Send aggregated session metric
|
|
89
|
+
* Called by SSO metrics sync plugin for periodic sync
|
|
90
|
+
*
|
|
91
|
+
* @param metric - Aggregated session metric
|
|
92
|
+
*/
|
|
93
|
+
sendSessionMetric(metric: SessionMetric): Promise<MetricsSyncResponse>;
|
|
94
|
+
/**
|
|
95
|
+
* Extract repository name from working directory
|
|
96
|
+
* Format: parent/current
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* /Users/john/projects/codemie-code → projects/codemie-code
|
|
100
|
+
* C:\Users\john\projects\codemie-code → projects\codemie-code
|
|
101
|
+
*/
|
|
102
|
+
private extractRepository;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=sso.metrics-sender.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sso.metrics-sender.d.ts","sourceRoot":"","sources":["../../../../../../src/providers/plugins/sso/metrics/sync/sso.metrics-sender.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAoB,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACnG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAIlF;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEtD;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,QAAQ,GAAG,aAAa,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,aAAa;IACxB;;;;;;OAMG;IACH,MAAM,CAAC,QAAQ,CAAC,oBAAoB,+BAA+B;IACnE,MAAM,CAAC,QAAQ,CAAC,kBAAkB,6BAA6B;IAE/D,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,oBAAoB;IAezC;;;;;;;;OAQG;IACG,gBAAgB,CACpB,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,WAAW,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,kBAAkB,CAAC,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EACzI,gBAAgB,EAAE,MAAM,EACxB,MAAM,GAAE,kBAA8B,EACtC,KAAK,CAAC,EAAE,YAAY,GACnB,OAAO,CAAC,mBAAmB,CAAC;IAiF/B;;;;;;;;;OASG;IACG,cAAc,CAClB,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,WAAW,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,kBAAkB,CAAC,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EACzI,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,gBAAgB,EACxB,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,YAAY,GACnB,OAAO,CAAC,mBAAmB,CAAC;IAkF/B;;;;;OAKG;IACG,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAkC5E;;;;;;;OAOG;IACH,OAAO,CAAC,iBAAiB;CAU1B"}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SSO Metrics Sender
|
|
3
|
+
*
|
|
4
|
+
* SSO-specific utility for sending metrics to CodeMie API.
|
|
5
|
+
* Provides high-level methods for different metric types:
|
|
6
|
+
* - Session start metrics
|
|
7
|
+
* - Session end metrics
|
|
8
|
+
* - Aggregated session metrics
|
|
9
|
+
*
|
|
10
|
+
* Used by:
|
|
11
|
+
* - SSO metrics sync proxy plugin (aggregated metrics sync)
|
|
12
|
+
* - BaseAgentAdapter (session lifecycle for ai-run-sso)
|
|
13
|
+
*
|
|
14
|
+
* IMPORTANT: This is an SSO provider capability, not a generic metrics capability.
|
|
15
|
+
* Only works with ai-run-sso provider which provides authentication cookies.
|
|
16
|
+
*/
|
|
17
|
+
import { MetricsApiClient } from './sso.metrics-api-client.js';
|
|
18
|
+
import { logger } from '../../../../../utils/logger.js';
|
|
19
|
+
import { detectGitBranch } from '../../../../../utils/git.js';
|
|
20
|
+
/**
|
|
21
|
+
* High-level metrics sender for SSO provider
|
|
22
|
+
* Wraps MetricsApiClient with convenience methods
|
|
23
|
+
*/
|
|
24
|
+
export class MetricsSender {
|
|
25
|
+
/**
|
|
26
|
+
* Metric name constants
|
|
27
|
+
* - METRIC_SESSION_TOTAL: Session lifecycle events (start, end)
|
|
28
|
+
* Differentiated by 'status' attribute: started, completed, failed, interrupted
|
|
29
|
+
* - METRIC_USAGE_TOTAL: Aggregated usage metrics (periodic sync)
|
|
30
|
+
* Contains accumulated token, tool, and file operation metrics
|
|
31
|
+
*/
|
|
32
|
+
static METRIC_SESSION_TOTAL = 'codemie_cli_session_total';
|
|
33
|
+
static METRIC_USAGE_TOTAL = 'codemie_cli_usage_total';
|
|
34
|
+
client;
|
|
35
|
+
dryRun;
|
|
36
|
+
version;
|
|
37
|
+
constructor(options) {
|
|
38
|
+
this.dryRun = options.dryRun || false;
|
|
39
|
+
this.version = options.version || 'unknown';
|
|
40
|
+
const config = {
|
|
41
|
+
baseUrl: options.baseUrl,
|
|
42
|
+
cookies: options.cookies,
|
|
43
|
+
timeout: options.timeout,
|
|
44
|
+
retryAttempts: options.retryAttempts,
|
|
45
|
+
version: options.version,
|
|
46
|
+
clientType: options.clientType
|
|
47
|
+
};
|
|
48
|
+
this.client = new MetricsApiClient(config);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Send session start metric
|
|
52
|
+
* Called when agent begins execution with ai-run-sso provider
|
|
53
|
+
*
|
|
54
|
+
* @param session - Session metadata (with optional model)
|
|
55
|
+
* @param workingDirectory - Current working directory (for git branch detection)
|
|
56
|
+
* @param status - Session start status (started/failed)
|
|
57
|
+
* @param error - Optional error information (required if status=failed)
|
|
58
|
+
*/
|
|
59
|
+
async sendSessionStart(session, workingDirectory, status = 'started', error) {
|
|
60
|
+
// Detect git branch
|
|
61
|
+
const branch = await detectGitBranch(workingDirectory);
|
|
62
|
+
// Extract repository from working directory
|
|
63
|
+
const repository = this.extractRepository(workingDirectory);
|
|
64
|
+
// Build session start metric with status
|
|
65
|
+
const attributes = {
|
|
66
|
+
// Identity
|
|
67
|
+
agent: session.agentName,
|
|
68
|
+
agent_version: this.version,
|
|
69
|
+
llm_model: session.model || 'unknown', // From profile config
|
|
70
|
+
repository,
|
|
71
|
+
session_id: session.sessionId,
|
|
72
|
+
branch: branch || 'unknown',
|
|
73
|
+
...(session.project && { project: session.project }),
|
|
74
|
+
// Zero metrics (session just started)
|
|
75
|
+
total_user_prompts: 0,
|
|
76
|
+
total_input_tokens: 0,
|
|
77
|
+
total_output_tokens: 0,
|
|
78
|
+
total_cache_read_input_tokens: 0,
|
|
79
|
+
total_cache_creation_tokens: 0,
|
|
80
|
+
total_tool_calls: 0,
|
|
81
|
+
successful_tool_calls: 0,
|
|
82
|
+
failed_tool_calls: 0,
|
|
83
|
+
files_created: 0,
|
|
84
|
+
files_modified: 0,
|
|
85
|
+
files_deleted: 0,
|
|
86
|
+
total_lines_added: 0,
|
|
87
|
+
total_lines_removed: 0,
|
|
88
|
+
// Session metadata
|
|
89
|
+
session_duration_ms: 0,
|
|
90
|
+
had_errors: status === 'failed',
|
|
91
|
+
count: 1,
|
|
92
|
+
// Lifecycle status
|
|
93
|
+
status
|
|
94
|
+
};
|
|
95
|
+
// Add error details if session start failed
|
|
96
|
+
if (status === 'failed' && error) {
|
|
97
|
+
attributes.errors = {
|
|
98
|
+
[error.type]: [error.code ? `[${error.code}] ${error.message}` : error.message]
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
const metric = {
|
|
102
|
+
name: MetricsSender.METRIC_SESSION_TOTAL,
|
|
103
|
+
attributes
|
|
104
|
+
};
|
|
105
|
+
// Dry-run mode: log without sending
|
|
106
|
+
if (this.dryRun) {
|
|
107
|
+
logger.info('[MetricsSender] [DRY-RUN] Would send session start metric:', {
|
|
108
|
+
endpoint: 'POST /v1/metrics',
|
|
109
|
+
metric: {
|
|
110
|
+
name: metric.name,
|
|
111
|
+
attributes: {
|
|
112
|
+
agent: metric.attributes.agent,
|
|
113
|
+
session_id: metric.attributes.session_id,
|
|
114
|
+
branch: metric.attributes.branch,
|
|
115
|
+
repository: metric.attributes.repository,
|
|
116
|
+
status,
|
|
117
|
+
...(error && { error_type: error.type })
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
return { success: true, message: '[DRY-RUN] Session start metric logged' };
|
|
122
|
+
}
|
|
123
|
+
const response = await this.client.sendMetric(metric);
|
|
124
|
+
logger.info(`[MetricsSender] Session start metric sent`, metric);
|
|
125
|
+
return response;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Send session end metric
|
|
129
|
+
* Called when agent process exits
|
|
130
|
+
*
|
|
131
|
+
* @param session - Session metadata (with optional model)
|
|
132
|
+
* @param workingDirectory - Current working directory (for git branch detection)
|
|
133
|
+
* @param status - Session end status (completed/failed/interrupted)
|
|
134
|
+
* @param durationMs - Session duration in milliseconds
|
|
135
|
+
* @param error - Optional error information (for failed sessions)
|
|
136
|
+
*/
|
|
137
|
+
async sendSessionEnd(session, workingDirectory, status, durationMs, error) {
|
|
138
|
+
// Detect git branch
|
|
139
|
+
const branch = await detectGitBranch(workingDirectory);
|
|
140
|
+
// Extract repository from working directory
|
|
141
|
+
const repository = this.extractRepository(workingDirectory);
|
|
142
|
+
// Build session end metric with status
|
|
143
|
+
const attributes = {
|
|
144
|
+
// Identity
|
|
145
|
+
agent: session.agentName,
|
|
146
|
+
agent_version: this.version,
|
|
147
|
+
llm_model: session.model || 'unknown',
|
|
148
|
+
repository,
|
|
149
|
+
session_id: session.sessionId,
|
|
150
|
+
branch: branch || 'unknown',
|
|
151
|
+
...(session.project && { project: session.project }),
|
|
152
|
+
// Zero metrics (detailed metrics come from aggregated usage)
|
|
153
|
+
total_user_prompts: 0,
|
|
154
|
+
total_input_tokens: 0,
|
|
155
|
+
total_output_tokens: 0,
|
|
156
|
+
total_cache_read_input_tokens: 0,
|
|
157
|
+
total_cache_creation_tokens: 0,
|
|
158
|
+
total_tool_calls: 0,
|
|
159
|
+
successful_tool_calls: 0,
|
|
160
|
+
failed_tool_calls: 0,
|
|
161
|
+
files_created: 0,
|
|
162
|
+
files_modified: 0,
|
|
163
|
+
files_deleted: 0,
|
|
164
|
+
total_lines_added: 0,
|
|
165
|
+
total_lines_removed: 0,
|
|
166
|
+
// Session metadata
|
|
167
|
+
session_duration_ms: durationMs,
|
|
168
|
+
had_errors: status === 'failed',
|
|
169
|
+
count: 1,
|
|
170
|
+
// Lifecycle status
|
|
171
|
+
status
|
|
172
|
+
};
|
|
173
|
+
// Add error details if session ended with error
|
|
174
|
+
if (status === 'failed' && error) {
|
|
175
|
+
attributes.errors = {
|
|
176
|
+
[error.type]: [error.code ? `[${error.code}] ${error.message}` : error.message]
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
const metric = {
|
|
180
|
+
name: MetricsSender.METRIC_SESSION_TOTAL,
|
|
181
|
+
attributes
|
|
182
|
+
};
|
|
183
|
+
// Dry-run mode: log without sending
|
|
184
|
+
if (this.dryRun) {
|
|
185
|
+
logger.info('[MetricsSender] [DRY-RUN] Would send session end metric:', {
|
|
186
|
+
endpoint: 'POST /v1/metrics',
|
|
187
|
+
metric: {
|
|
188
|
+
name: metric.name,
|
|
189
|
+
attributes: {
|
|
190
|
+
agent: metric.attributes.agent,
|
|
191
|
+
session_id: metric.attributes.session_id,
|
|
192
|
+
branch: metric.attributes.branch,
|
|
193
|
+
repository: metric.attributes.repository,
|
|
194
|
+
status,
|
|
195
|
+
duration_ms: durationMs,
|
|
196
|
+
...(error && { error_type: error.type })
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
return { success: true, message: '[DRY-RUN] Session end metric logged' };
|
|
201
|
+
}
|
|
202
|
+
const response = await this.client.sendMetric(metric);
|
|
203
|
+
logger.info(`[MetricsSender] Session end metric sent`, metric);
|
|
204
|
+
return response;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Send aggregated session metric
|
|
208
|
+
* Called by SSO metrics sync plugin for periodic sync
|
|
209
|
+
*
|
|
210
|
+
* @param metric - Aggregated session metric
|
|
211
|
+
*/
|
|
212
|
+
async sendSessionMetric(metric) {
|
|
213
|
+
// Dry-run mode: log without sending
|
|
214
|
+
if (this.dryRun) {
|
|
215
|
+
logger.info('[MetricsSender] [DRY-RUN] Would send aggregated metric:', {
|
|
216
|
+
endpoint: 'POST /v1/metrics',
|
|
217
|
+
metric: {
|
|
218
|
+
name: metric.name,
|
|
219
|
+
attributes: {
|
|
220
|
+
agent: metric.attributes.agent,
|
|
221
|
+
session_id: metric.attributes.session_id,
|
|
222
|
+
branch: metric.attributes.branch,
|
|
223
|
+
total_user_prompts: metric.attributes.total_user_prompts,
|
|
224
|
+
total_input_tokens: metric.attributes.total_input_tokens,
|
|
225
|
+
total_output_tokens: metric.attributes.total_output_tokens
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
return { success: true, message: '[DRY-RUN] Aggregated metric logged' };
|
|
230
|
+
}
|
|
231
|
+
const response = await this.client.sendMetric(metric);
|
|
232
|
+
logger.debug('[MetricsSender] Aggregated usage metric sent', {
|
|
233
|
+
agent: metric.attributes.agent,
|
|
234
|
+
branch: metric.attributes.branch,
|
|
235
|
+
prompts: metric.attributes.total_user_prompts,
|
|
236
|
+
tokens: metric.attributes.total_input_tokens + metric.attributes.total_output_tokens,
|
|
237
|
+
session: metric.attributes.session_id
|
|
238
|
+
});
|
|
239
|
+
return response;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Extract repository name from working directory
|
|
243
|
+
* Format: parent/current
|
|
244
|
+
*
|
|
245
|
+
* @example
|
|
246
|
+
* /Users/john/projects/codemie-code → projects/codemie-code
|
|
247
|
+
* C:\Users\john\projects\codemie-code → projects\codemie-code
|
|
248
|
+
*/
|
|
249
|
+
extractRepository(workingDirectory) {
|
|
250
|
+
const parts = workingDirectory.split(/[/\\]/);
|
|
251
|
+
const filtered = parts.filter(p => p.length > 0);
|
|
252
|
+
if (filtered.length >= 2) {
|
|
253
|
+
return `${filtered[filtered.length - 2]}/${filtered[filtered.length - 1]}`;
|
|
254
|
+
}
|
|
255
|
+
return filtered[filtered.length - 1] || 'unknown';
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=sso.metrics-sender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sso.metrics-sender.js","sourceRoot":"","sources":["../../../../../../src/providers/plugins/sso/metrics/sync/sso.metrics-sender.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Metrics Sync Plugin
|
|
2
|
+
* SSO Metrics Sync Plugin
|
|
3
3
|
* Priority: 100 (runs after logging plugin)
|
|
4
4
|
*
|
|
5
|
-
* Purpose: Syncs metrics to CodeMie API in background
|
|
5
|
+
* Purpose: Syncs metrics to CodeMie API in background (SSO provider only)
|
|
6
6
|
* - Runs only in SSO mode (ai-run-sso provider)
|
|
7
7
|
* - Background timer (every 5 minutes)
|
|
8
8
|
* - Aggregates pending deltas into single metric
|
|
9
9
|
* - Marks deltas as synced in JSONL
|
|
10
10
|
* - Final sync on proxy shutdown
|
|
11
11
|
*
|
|
12
|
-
*
|
|
12
|
+
* IMPORTANT: This is an SSO provider capability.
|
|
13
|
+
* Only works with ai-run-sso provider which provides authentication cookies.
|
|
14
|
+
*
|
|
15
|
+
* SOLID: Single responsibility = sync metrics for SSO
|
|
13
16
|
* KISS: Simple timer-based sync
|
|
14
17
|
*/
|
|
15
|
-
import { ProxyPlugin, PluginContext, ProxyInterceptor } from '
|
|
16
|
-
export declare class
|
|
18
|
+
import { ProxyPlugin, PluginContext, ProxyInterceptor } from '../../proxy/plugins/types.js';
|
|
19
|
+
export declare class SSOMetricsSyncPlugin implements ProxyPlugin {
|
|
17
20
|
id: string;
|
|
18
21
|
name: string;
|
|
19
22
|
version: string;
|
|
@@ -30,4 +33,4 @@ export declare class MetricsSyncPlugin implements ProxyPlugin {
|
|
|
30
33
|
*/
|
|
31
34
|
private isDryRunEnabled;
|
|
32
35
|
}
|
|
33
|
-
//# sourceMappingURL=metrics-sync.plugin.d.ts.map
|
|
36
|
+
//# sourceMappingURL=sso.metrics-sync.plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sso.metrics-sync.plugin.d.ts","sourceRoot":"","sources":["../../../../../../src/providers/plugins/sso/metrics/sync/sso.metrics-sync.plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAQ5F,qBAAa,oBAAqB,YAAW,WAAW;IACtD,EAAE,SAA+B;IACjC,IAAI,SAAsB;IAC1B,OAAO,SAAW;IAClB,QAAQ,SAAO;IAET,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAkC1E;;;OAGG;IACH,OAAO,CAAC,aAAa;IAgBrB;;;OAGG;IACH,OAAO,CAAC,eAAe;CAexB"}
|
|
@@ -1,48 +1,51 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Metrics Sync Plugin
|
|
2
|
+
* SSO Metrics Sync Plugin
|
|
3
3
|
* Priority: 100 (runs after logging plugin)
|
|
4
4
|
*
|
|
5
|
-
* Purpose: Syncs metrics to CodeMie API in background
|
|
5
|
+
* Purpose: Syncs metrics to CodeMie API in background (SSO provider only)
|
|
6
6
|
* - Runs only in SSO mode (ai-run-sso provider)
|
|
7
7
|
* - Background timer (every 5 minutes)
|
|
8
8
|
* - Aggregates pending deltas into single metric
|
|
9
9
|
* - Marks deltas as synced in JSONL
|
|
10
10
|
* - Final sync on proxy shutdown
|
|
11
11
|
*
|
|
12
|
-
*
|
|
12
|
+
* IMPORTANT: This is an SSO provider capability.
|
|
13
|
+
* Only works with ai-run-sso provider which provides authentication cookies.
|
|
14
|
+
*
|
|
15
|
+
* SOLID: Single responsibility = sync metrics for SSO
|
|
13
16
|
* KISS: Simple timer-based sync
|
|
14
17
|
*/
|
|
15
|
-
import { logger } from '
|
|
16
|
-
import {
|
|
17
|
-
import { readJSONL, writeJSONLAtomic } from '
|
|
18
|
-
import { aggregateDeltas } from '
|
|
19
|
-
import { SessionStore } from '
|
|
20
|
-
import { getSessionMetricsPath } from '
|
|
21
|
-
export class
|
|
22
|
-
id = '@codemie/
|
|
23
|
-
name = 'Metrics Sync';
|
|
18
|
+
import { logger } from '../../../../../utils/logger.js';
|
|
19
|
+
import { MetricsSender } from './sso.metrics-sender.js';
|
|
20
|
+
import { readJSONL, writeJSONLAtomic } from './sso.jsonl-writer.js';
|
|
21
|
+
import { aggregateDeltas } from './sso.metrics-aggregator.js';
|
|
22
|
+
import { SessionStore } from '../../../../../agents/core/metrics/session/SessionStore.js';
|
|
23
|
+
import { getSessionMetricsPath } from '../../../../../agents/core/metrics-config.js';
|
|
24
|
+
export class SSOMetricsSyncPlugin {
|
|
25
|
+
id = '@codemie/sso-metrics-sync';
|
|
26
|
+
name = 'SSO Metrics Sync';
|
|
24
27
|
version = '1.0.0';
|
|
25
28
|
priority = 100; // Run after logging (priority 50)
|
|
26
29
|
async createInterceptor(context) {
|
|
27
30
|
// Only create interceptor if we have necessary context
|
|
28
31
|
if (!context.config.sessionId) {
|
|
29
|
-
logger.debug('[
|
|
32
|
+
logger.debug('[SSOMetricsSyncPlugin] Skipping: Session ID not available');
|
|
30
33
|
throw new Error('Session ID not available (metrics sync disabled)');
|
|
31
34
|
}
|
|
32
35
|
if (!context.credentials) {
|
|
33
|
-
logger.debug('[
|
|
36
|
+
logger.debug('[SSOMetricsSyncPlugin] Skipping: SSO credentials not available');
|
|
34
37
|
throw new Error('SSO credentials not available (metrics sync disabled)');
|
|
35
38
|
}
|
|
36
39
|
// Check if metrics sync is enabled (from config or env var)
|
|
37
40
|
const syncEnabled = this.isSyncEnabled(context);
|
|
38
41
|
if (!syncEnabled) {
|
|
39
|
-
logger.debug('[
|
|
42
|
+
logger.debug('[SSOMetricsSyncPlugin] Skipping: Metrics sync disabled by configuration');
|
|
40
43
|
throw new Error('Metrics sync disabled by configuration');
|
|
41
44
|
}
|
|
42
|
-
logger.debug('[
|
|
45
|
+
logger.debug('[SSOMetricsSyncPlugin] Initializing metrics sync');
|
|
43
46
|
// Check if dry-run mode is enabled
|
|
44
47
|
const dryRun = this.isDryRunEnabled(context);
|
|
45
|
-
return new
|
|
48
|
+
return new SSOMetricsSyncInterceptor(context.config.sessionId, context.config.targetApiUrl, context.credentials.cookies, context.config.clientType, context.config.version, dryRun);
|
|
46
49
|
}
|
|
47
50
|
/**
|
|
48
51
|
* Check if metrics sync is enabled
|
|
@@ -79,12 +82,12 @@ export class MetricsSyncPlugin {
|
|
|
79
82
|
return false;
|
|
80
83
|
}
|
|
81
84
|
}
|
|
82
|
-
class
|
|
85
|
+
class SSOMetricsSyncInterceptor {
|
|
83
86
|
sessionId;
|
|
84
|
-
name = 'metrics-sync';
|
|
87
|
+
name = 'sso-metrics-sync';
|
|
85
88
|
syncTimer;
|
|
86
89
|
sessionStore = new SessionStore();
|
|
87
|
-
|
|
90
|
+
metricsSender;
|
|
88
91
|
syncInterval;
|
|
89
92
|
isSyncing = false;
|
|
90
93
|
version;
|
|
@@ -96,19 +99,20 @@ class MetricsSyncInterceptor {
|
|
|
96
99
|
// Set dry-run mode (passed from plugin)
|
|
97
100
|
this.dryRun = dryRun;
|
|
98
101
|
if (this.dryRun) {
|
|
99
|
-
logger.info('[metrics-sync] Dry-run mode enabled - metrics will be logged but not sent');
|
|
102
|
+
logger.info('[sso-metrics-sync] Dry-run mode enabled - metrics will be logged but not sent');
|
|
100
103
|
}
|
|
101
104
|
// Build cookie header
|
|
102
105
|
const cookieHeader = Object.entries(cookies)
|
|
103
106
|
.map(([key, value]) => `${key}=${value}`)
|
|
104
107
|
.join('; ');
|
|
105
|
-
this.
|
|
108
|
+
this.metricsSender = new MetricsSender({
|
|
106
109
|
baseUrl,
|
|
107
110
|
cookies: cookieHeader,
|
|
108
111
|
timeout: 30000,
|
|
109
112
|
retryAttempts: 3,
|
|
110
113
|
version: this.version,
|
|
111
|
-
clientType: clientType || 'codemie-cli'
|
|
114
|
+
clientType: clientType || 'codemie-cli',
|
|
115
|
+
dryRun: this.dryRun
|
|
112
116
|
});
|
|
113
117
|
// Get sync interval from env or default to 5 minutes
|
|
114
118
|
this.syncInterval = Number.parseInt(process.env.CODEMIE_METRICS_SYNC_INTERVAL || '300000', 10);
|
|
@@ -117,7 +121,8 @@ class MetricsSyncInterceptor {
|
|
|
117
121
|
* Called when proxy starts - initialize background timer
|
|
118
122
|
*/
|
|
119
123
|
async onProxyStart() {
|
|
120
|
-
|
|
124
|
+
const intervalMinutes = Math.round(this.syncInterval / 60000);
|
|
125
|
+
logger.info(`[${this.name}] Metrics collection enabled - syncing every ${intervalMinutes} minute${intervalMinutes !== 1 ? 's' : ''}`);
|
|
121
126
|
// Start background timer
|
|
122
127
|
this.syncTimer = setInterval(() => {
|
|
123
128
|
this.syncMetrics().catch(error => {
|
|
@@ -130,7 +135,7 @@ class MetricsSyncInterceptor {
|
|
|
130
135
|
* Called when proxy stops - cleanup and final sync
|
|
131
136
|
*/
|
|
132
137
|
async onProxyStop() {
|
|
133
|
-
logger.
|
|
138
|
+
logger.debug(`[${this.name}] Stopping metrics sync`);
|
|
134
139
|
// Stop timer
|
|
135
140
|
if (this.syncTimer) {
|
|
136
141
|
clearInterval(this.syncTimer);
|
|
@@ -139,7 +144,7 @@ class MetricsSyncInterceptor {
|
|
|
139
144
|
// Final sync (ensure all pending metrics are sent)
|
|
140
145
|
try {
|
|
141
146
|
await this.syncMetrics();
|
|
142
|
-
logger.info(`[${this.name}]
|
|
147
|
+
logger.info(`[${this.name}] Session metrics saved`);
|
|
143
148
|
}
|
|
144
149
|
catch (error) {
|
|
145
150
|
logger.error(`[${this.name}] Final sync failed:`, error);
|
|
@@ -165,7 +170,7 @@ class MetricsSyncInterceptor {
|
|
|
165
170
|
logger.debug(`[${this.name}] No pending deltas to sync`);
|
|
166
171
|
return;
|
|
167
172
|
}
|
|
168
|
-
logger.info(`[${this.name}] Syncing ${pendingDeltas.length}
|
|
173
|
+
logger.info(`[${this.name}] Syncing usage data (${pendingDeltas.length} interaction${pendingDeltas.length !== 1 ? 's' : ''})`);
|
|
169
174
|
// Debug: Log collected deltas
|
|
170
175
|
logger.debug(`[${this.name}] Collected pending deltas:`, {
|
|
171
176
|
count: pendingDeltas.length,
|
|
@@ -218,7 +223,7 @@ class MetricsSyncInterceptor {
|
|
|
218
223
|
// 4. Get agent metrics config for post-processing (lazy-load to avoid circular dependency)
|
|
219
224
|
let agentConfig;
|
|
220
225
|
try {
|
|
221
|
-
const { AgentRegistry } = await import('
|
|
226
|
+
const { AgentRegistry } = await import('../../../../../agents/registry.js');
|
|
222
227
|
const agent = AgentRegistry.getAgent(session.agentName);
|
|
223
228
|
agentConfig = agent?.getMetricsConfig();
|
|
224
229
|
}
|
|
@@ -264,38 +269,15 @@ class MetricsSyncInterceptor {
|
|
|
264
269
|
}
|
|
265
270
|
});
|
|
266
271
|
}
|
|
267
|
-
// 5. Send each branch metric to API
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
logger.
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
headers: {
|
|
275
|
-
'Content-Type': 'application/json',
|
|
276
|
-
'User-Agent': `CodeMie-CLI/${this.version}`,
|
|
277
|
-
'X-CodeMie-Client': this.apiClient['config'].clientType,
|
|
278
|
-
'Cookie': '[REDACTED]'
|
|
279
|
-
},
|
|
280
|
-
payload: {
|
|
281
|
-
name: metric.name,
|
|
282
|
-
attributes: metric.attributes
|
|
283
|
-
}
|
|
284
|
-
});
|
|
285
|
-
}
|
|
286
|
-
logger.info(`[${this.name}] [DRY-RUN] Skipping actual API calls - ${pendingDeltas.length} deltas across ${metrics.length} branches would be synced`);
|
|
287
|
-
}
|
|
288
|
-
else {
|
|
289
|
-
// Normal mode: Send each branch metric to API
|
|
290
|
-
for (const metric of metrics) {
|
|
291
|
-
const response = await this.apiClient.sendMetric(metric);
|
|
292
|
-
if (!response.success) {
|
|
293
|
-
logger.error(`[${this.name}] Sync failed for branch "${metric.attributes.branch}": ${response.message}`);
|
|
294
|
-
// Continue with other branches even if one fails
|
|
295
|
-
continue;
|
|
296
|
-
}
|
|
297
|
-
logger.info(`[${this.name}] Successfully synced metric for branch "${metric.attributes.branch}"`);
|
|
272
|
+
// 5. Send each branch metric to API (dry-run handled by MetricsSender)
|
|
273
|
+
for (const metric of metrics) {
|
|
274
|
+
const response = await this.metricsSender.sendSessionMetric(metric);
|
|
275
|
+
if (!response.success) {
|
|
276
|
+
logger.error(`[${this.name}] Sync failed for branch "${metric.attributes.branch}": ${response.message}`);
|
|
277
|
+
// Continue with other branches even if one fails
|
|
278
|
+
continue;
|
|
298
279
|
}
|
|
280
|
+
logger.info(`[${this.name}] Successfully synced metric for branch "${metric.attributes.branch}"`);
|
|
299
281
|
}
|
|
300
282
|
// 6. Mark deltas as synced in JSONL (atomic rewrite)
|
|
301
283
|
const syncedAt = Date.now();
|
|
@@ -328,4 +310,4 @@ class MetricsSyncInterceptor {
|
|
|
328
310
|
}
|
|
329
311
|
}
|
|
330
312
|
}
|
|
331
|
-
//# sourceMappingURL=metrics-sync.plugin.js.map
|
|
313
|
+
//# sourceMappingURL=sso.metrics-sync.plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sso.metrics-sync.plugin.js","sourceRoot":"","sources":["../../../../../../src/providers/plugins/sso/metrics/sync/sso.metrics-sync.plugin.ts"],"names":[],"mappings":"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"}
|