@codemieai/code 0.0.56 → 0.0.58

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/README.md +124 -19
  2. package/bin/proxy-daemon.js +10 -0
  3. package/dist/agents/core/AgentCLI.d.ts.map +1 -1
  4. package/dist/agents/core/AgentCLI.js +17 -0
  5. package/dist/agents/core/AgentCLI.js.map +1 -1
  6. package/dist/agents/core/session/SessionStore.d.ts +4 -0
  7. package/dist/agents/core/session/SessionStore.d.ts.map +1 -1
  8. package/dist/agents/core/session/SessionStore.js +40 -1
  9. package/dist/agents/core/session/SessionStore.js.map +1 -1
  10. package/dist/agents/core/session/types.d.ts +7 -0
  11. package/dist/agents/core/session/types.d.ts.map +1 -1
  12. package/dist/agents/plugins/claude/plugin/.claude-plugin/plugin.json +1 -1
  13. package/dist/agents/plugins/claude/plugin/skills/msgraph/SKILL.md +10 -8
  14. package/dist/agents/plugins/claude/plugin/skills/msgraph/scripts/msgraph.js +297 -149
  15. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts +1 -0
  16. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts.map +1 -1
  17. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js +32 -20
  18. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js.map +1 -1
  19. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.d.ts +2 -0
  20. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.d.ts.map +1 -1
  21. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.js +24 -1
  22. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.js.map +1 -1
  23. package/dist/bin/proxy-daemon.d.ts +2 -0
  24. package/dist/bin/proxy-daemon.d.ts.map +1 -0
  25. package/dist/bin/proxy-daemon.js +138 -0
  26. package/dist/bin/proxy-daemon.js.map +1 -0
  27. package/dist/cli/commands/proxy/connectors/desktop.d.ts +55 -0
  28. package/dist/cli/commands/proxy/connectors/desktop.d.ts.map +1 -0
  29. package/dist/cli/commands/proxy/connectors/desktop.js +175 -0
  30. package/dist/cli/commands/proxy/connectors/desktop.js.map +1 -0
  31. package/dist/cli/commands/proxy/daemon-manager.d.ts +35 -0
  32. package/dist/cli/commands/proxy/daemon-manager.d.ts.map +1 -0
  33. package/dist/cli/commands/proxy/daemon-manager.js +107 -0
  34. package/dist/cli/commands/proxy/daemon-manager.js.map +1 -0
  35. package/dist/cli/commands/proxy/index.d.ts +3 -0
  36. package/dist/cli/commands/proxy/index.d.ts.map +1 -0
  37. package/dist/cli/commands/proxy/index.js +221 -0
  38. package/dist/cli/commands/proxy/index.js.map +1 -0
  39. package/dist/cli/commands/proxy/inspect-desktop.d.ts +28 -0
  40. package/dist/cli/commands/proxy/inspect-desktop.d.ts.map +1 -0
  41. package/dist/cli/commands/proxy/inspect-desktop.js +134 -0
  42. package/dist/cli/commands/proxy/inspect-desktop.js.map +1 -0
  43. package/dist/cli/index.js +12 -0
  44. package/dist/cli/index.js.map +1 -1
  45. package/dist/providers/plugins/sso/proxy/plugins/gateway-key.plugin.d.ts +9 -0
  46. package/dist/providers/plugins/sso/proxy/plugins/gateway-key.plugin.d.ts.map +1 -0
  47. package/dist/providers/plugins/sso/proxy/plugins/gateway-key.plugin.js +36 -0
  48. package/dist/providers/plugins/sso/proxy/plugins/gateway-key.plugin.js.map +1 -0
  49. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts +2 -1
  50. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts.map +1 -1
  51. package/dist/providers/plugins/sso/proxy/plugins/index.js +3 -1
  52. package/dist/providers/plugins/sso/proxy/plugins/index.js.map +1 -1
  53. package/dist/providers/plugins/sso/proxy/proxy-types.d.ts +4 -0
  54. package/dist/providers/plugins/sso/proxy/proxy-types.d.ts.map +1 -1
  55. package/dist/providers/plugins/sso/proxy/sso.proxy.d.ts.map +1 -1
  56. package/dist/providers/plugins/sso/proxy/sso.proxy.js +4 -3
  57. package/dist/providers/plugins/sso/proxy/sso.proxy.js.map +1 -1
  58. package/dist/telemetry/clients/claude-desktop/ClaudeDesktopTelemetryAdapter.d.ts +15 -0
  59. package/dist/telemetry/clients/claude-desktop/ClaudeDesktopTelemetryAdapter.d.ts.map +1 -0
  60. package/dist/telemetry/clients/claude-desktop/ClaudeDesktopTelemetryAdapter.js +117 -0
  61. package/dist/telemetry/clients/claude-desktop/ClaudeDesktopTelemetryAdapter.js.map +1 -0
  62. package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.d.ts +3 -0
  63. package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.d.ts.map +1 -0
  64. package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.js +138 -0
  65. package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.js.map +1 -0
  66. package/dist/telemetry/clients/claude-desktop/claude-desktop.metrics.d.ts +4 -0
  67. package/dist/telemetry/clients/claude-desktop/claude-desktop.metrics.d.ts.map +1 -0
  68. package/dist/telemetry/clients/claude-desktop/claude-desktop.metrics.js +53 -0
  69. package/dist/telemetry/clients/claude-desktop/claude-desktop.metrics.js.map +1 -0
  70. package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.d.ts +4 -0
  71. package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.d.ts.map +1 -0
  72. package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.js +60 -0
  73. package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.js.map +1 -0
  74. package/dist/telemetry/clients/claude-desktop/claude-desktop.paths.d.ts +4 -0
  75. package/dist/telemetry/clients/claude-desktop/claude-desktop.paths.d.ts.map +1 -0
  76. package/dist/telemetry/clients/claude-desktop/claude-desktop.paths.js +19 -0
  77. package/dist/telemetry/clients/claude-desktop/claude-desktop.paths.js.map +1 -0
  78. package/dist/telemetry/runtime/DesktopTelemetryRuntime.d.ts +23 -0
  79. package/dist/telemetry/runtime/DesktopTelemetryRuntime.d.ts.map +1 -0
  80. package/dist/telemetry/runtime/DesktopTelemetryRuntime.js +243 -0
  81. package/dist/telemetry/runtime/DesktopTelemetryRuntime.js.map +1 -0
  82. package/dist/telemetry/runtime/checkpoints.d.ts +10 -0
  83. package/dist/telemetry/runtime/checkpoints.d.ts.map +1 -0
  84. package/dist/telemetry/runtime/checkpoints.js +8 -0
  85. package/dist/telemetry/runtime/checkpoints.js.map +1 -0
  86. package/dist/telemetry/runtime/types.d.ts +32 -0
  87. package/dist/telemetry/runtime/types.d.ts.map +1 -0
  88. package/dist/telemetry/runtime/types.js +2 -0
  89. package/dist/telemetry/runtime/types.js.map +1 -0
  90. package/dist/utils/processes.d.ts +6 -0
  91. package/dist/utils/processes.d.ts.map +1 -1
  92. package/dist/utils/processes.js +13 -3
  93. package/dist/utils/processes.js.map +1 -1
  94. package/package.json +4 -2
  95. package/scripts/README.md +15 -1
  96. package/scripts/prepare-install-artifacts.mjs +66 -0
  97. package/scripts/test-desktop-telemetry.js +229 -0
  98. package/scripts/test-proxy-endpoint.js +173 -0
@@ -0,0 +1,3 @@
1
+ import type { LocalTelemetryDiscoveredSession } from '../../../telemetry/runtime/types.js';
2
+ export declare function discoverClaudeDesktopSessions(sinceMs: number): Promise<LocalTelemetryDiscoveredSession[]>;
3
+ //# sourceMappingURL=claude-desktop.discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-desktop.discovery.d.ts","sourceRoot":"","sources":["../../../../src/telemetry/clients/claude-desktop/claude-desktop.discovery.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC;AA4GpF,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,+BAA+B,EAAE,CAAC,CAyD5C"}
@@ -0,0 +1,138 @@
1
+ import { existsSync } from 'fs';
2
+ import { readdir, readFile } from 'fs/promises';
3
+ import { join } from 'path';
4
+ import { resolveHomeDir, normalizePathSeparators } from '../../../utils/paths.js';
5
+ import { logger } from '../../../utils/logger.js';
6
+ import { getClaudeDesktopCodeSessionsRoot, getClaudeDesktopLocalSessionsRoot } from './claude-desktop.paths.js';
7
+ async function loadCompanionMetadata(metadataPath) {
8
+ const localRoot = getClaudeDesktopLocalSessionsRoot();
9
+ const codeRoot = getClaudeDesktopCodeSessionsRoot();
10
+ const companionPath = metadataPath.startsWith(localRoot)
11
+ ? metadataPath.replace(localRoot, codeRoot)
12
+ : metadataPath;
13
+ if (!existsSync(companionPath)) {
14
+ return null;
15
+ }
16
+ try {
17
+ return JSON.parse(await readFile(companionPath, 'utf-8'));
18
+ }
19
+ catch (error) {
20
+ logger.debug('[claude-desktop-discovery] Failed to read companion metadata', {
21
+ companionPath,
22
+ error: error instanceof Error ? error.message : String(error)
23
+ });
24
+ return null;
25
+ }
26
+ }
27
+ function buildClaudeProjectsSlug(projectPath) {
28
+ const normalized = normalizePathSeparators(projectPath).replace(/\/+$/, '');
29
+ return normalized.replaceAll('/', '-');
30
+ }
31
+ async function resolveClaudeTranscriptPath(metadata) {
32
+ if (!metadata.cliSessionId) {
33
+ return null;
34
+ }
35
+ const projectCandidates = [
36
+ metadata.originCwd,
37
+ metadata.worktreePath,
38
+ metadata.cwd
39
+ ].filter((value) => Boolean(value));
40
+ const claudeProjectsRoot = join(resolveHomeDir('.claude'), 'projects');
41
+ for (const projectPath of projectCandidates) {
42
+ const candidate = join(claudeProjectsRoot, buildClaudeProjectsSlug(projectPath), `${metadata.cliSessionId}.jsonl`);
43
+ if (existsSync(candidate)) {
44
+ return candidate;
45
+ }
46
+ }
47
+ try {
48
+ const projectDirs = await readdir(claudeProjectsRoot, { withFileTypes: true });
49
+ for (const dirent of projectDirs) {
50
+ if (!dirent.isDirectory())
51
+ continue;
52
+ const candidate = join(claudeProjectsRoot, dirent.name, `${metadata.cliSessionId}.jsonl`);
53
+ if (existsSync(candidate)) {
54
+ return candidate;
55
+ }
56
+ }
57
+ }
58
+ catch (error) {
59
+ logger.debug('[claude-desktop-discovery] Failed to search ~/.claude/projects for transcript', {
60
+ cliSessionId: metadata.cliSessionId,
61
+ error: error instanceof Error ? error.message : String(error)
62
+ });
63
+ }
64
+ return null;
65
+ }
66
+ async function walk(root) {
67
+ const files = [];
68
+ const entries = await readdir(root, { withFileTypes: true });
69
+ for (const entry of entries) {
70
+ const fullPath = join(root, entry.name);
71
+ if (entry.isDirectory()) {
72
+ files.push(...await walk(fullPath));
73
+ continue;
74
+ }
75
+ if (entry.isFile() && entry.name.startsWith('local_') && entry.name.endsWith('.json')) {
76
+ files.push(fullPath);
77
+ }
78
+ }
79
+ return files;
80
+ }
81
+ export async function discoverClaudeDesktopSessions(sinceMs) {
82
+ const localRoot = getClaudeDesktopLocalSessionsRoot();
83
+ const codeRoot = getClaudeDesktopCodeSessionsRoot();
84
+ const metadataFiles = [
85
+ ...(existsSync(localRoot) ? await walk(localRoot) : []),
86
+ ...(existsSync(codeRoot) ? await walk(codeRoot) : [])
87
+ ];
88
+ const discovered = [];
89
+ const seenSessionIds = new Set();
90
+ for (const metadataPath of metadataFiles) {
91
+ try {
92
+ const metadata = JSON.parse(await readFile(metadataPath, 'utf-8'));
93
+ const companionMetadata = await loadCompanionMetadata(metadataPath);
94
+ const transcriptDir = metadataPath.replace(/\.json$/, '');
95
+ const auditTranscriptPath = join(transcriptDir, 'audit.jsonl');
96
+ const claudeTranscriptPath = await resolveClaudeTranscriptPath({
97
+ ...companionMetadata,
98
+ ...metadata
99
+ });
100
+ const transcriptPath = existsSync(auditTranscriptPath)
101
+ ? auditTranscriptPath
102
+ : claudeTranscriptPath;
103
+ if (!metadata.sessionId.startsWith('local_'))
104
+ continue;
105
+ if (!transcriptPath || !existsSync(transcriptPath))
106
+ continue;
107
+ if (metadata.lastActivityAt < sinceMs && metadata.createdAt < sinceMs)
108
+ continue;
109
+ if (seenSessionIds.has(metadata.sessionId))
110
+ continue;
111
+ seenSessionIds.add(metadata.sessionId);
112
+ discovered.push({
113
+ externalSessionId: metadata.sessionId,
114
+ agentSessionId: metadata.cliSessionId || metadata.sessionId,
115
+ transcriptPath,
116
+ metadataPath,
117
+ workingDirectory: companionMetadata?.originCwd
118
+ || companionMetadata?.worktreePath
119
+ || metadata.originCwd
120
+ || metadata.worktreePath
121
+ || metadata.cwd
122
+ || transcriptDir,
123
+ createdAt: metadata.createdAt,
124
+ updatedAt: metadata.lastActivityAt,
125
+ model: metadata.model || companionMetadata?.model,
126
+ isArchived: metadata.isArchived
127
+ });
128
+ }
129
+ catch (error) {
130
+ logger.debug('[claude-desktop-discovery] Failed to read session metadata', {
131
+ metadataPath,
132
+ error: error instanceof Error ? error.message : String(error)
133
+ });
134
+ }
135
+ }
136
+ return discovered.sort((a, b) => a.updatedAt - b.updatedAt);
137
+ }
138
+ //# sourceMappingURL=claude-desktop.discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-desktop.discovery.js","sourceRoot":"","sources":["../../../../src/telemetry/clients/claude-desktop/claude-desktop.discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAE3E,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EACL,gCAAgC,EAChC,iCAAiC,EAClC,MAAM,2BAA2B,CAAC;AAcnC,KAAK,UAAU,qBAAqB,CAAC,YAAoB;IACvD,MAAM,SAAS,GAAG,iCAAiC,EAAE,CAAC;IACtD,MAAM,QAAQ,GAAG,gCAAgC,EAAE,CAAC;IACpD,MAAM,aAAa,GAAG,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC;QACtD,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC;QAC3C,CAAC,CAAC,YAAY,CAAC;IAEjB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAoB,CAAC;IAC/E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,8DAA8D,EAAE;YAC3E,aAAa;YACb,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,WAAmB;IAClD,MAAM,UAAU,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC5E,OAAO,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACzC,CAAC;AAED,KAAK,UAAU,2BAA2B,CAAC,QAAyB;IAClE,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,iBAAiB,GAAG;QACxB,QAAQ,CAAC,SAAS;QAClB,QAAQ,CAAC,YAAY;QACrB,QAAQ,CAAC,GAAG;KACb,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAErD,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC,CAAC;IAEvE,KAAK,MAAM,WAAW,IAAI,iBAAiB,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,IAAI,CACpB,kBAAkB,EAClB,uBAAuB,CAAC,WAAW,CAAC,EACpC,GAAG,QAAQ,CAAC,YAAY,QAAQ,CACjC,CAAC;QACF,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,kBAAkB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/E,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;gBAAE,SAAS;YACpC,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,YAAY,QAAQ,CAAC,CAAC;YAC1F,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC1B,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,+EAA+E,EAAE;YAC5F,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAY;IAC9B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YACpC,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACtF,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,OAAe;IAEf,MAAM,SAAS,GAAG,iCAAiC,EAAE,CAAC;IACtD,MAAM,QAAQ,GAAG,gCAAgC,EAAE,CAAC;IACpD,MAAM,aAAa,GAAG;QACpB,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACtD,CAAC;IACF,MAAM,UAAU,GAAsC,EAAE,CAAC;IACzD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IAEzC,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAoB,CAAC;YACtF,MAAM,iBAAiB,GAAG,MAAM,qBAAqB,CAAC,YAAY,CAAC,CAAC;YACpE,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAC1D,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;YAC/D,MAAM,oBAAoB,GAAG,MAAM,2BAA2B,CAAC;gBAC7D,GAAG,iBAAiB;gBACpB,GAAG,QAAQ;aACZ,CAAC,CAAC;YACH,MAAM,cAAc,GAAG,UAAU,CAAC,mBAAmB,CAAC;gBACpD,CAAC,CAAC,mBAAmB;gBACrB,CAAC,CAAC,oBAAoB,CAAC;YAEzB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAAE,SAAS;YACvD,IAAI,CAAC,cAAc,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;gBAAE,SAAS;YAC7D,IAAI,QAAQ,CAAC,cAAc,GAAG,OAAO,IAAI,QAAQ,CAAC,SAAS,GAAG,OAAO;gBAAE,SAAS;YAChF,IAAI,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAAE,SAAS;YAErD,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAEvC,UAAU,CAAC,IAAI,CAAC;gBACd,iBAAiB,EAAE,QAAQ,CAAC,SAAS;gBACrC,cAAc,EAAE,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,SAAS;gBAC3D,cAAc;gBACd,YAAY;gBACZ,gBAAgB,EACd,iBAAiB,EAAE,SAAS;uBACzB,iBAAiB,EAAE,YAAY;uBAC/B,QAAQ,CAAC,SAAS;uBAClB,QAAQ,CAAC,YAAY;uBACrB,QAAQ,CAAC,GAAG;uBACZ,aAAa;gBAClB,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,SAAS,EAAE,QAAQ,CAAC,cAAc;gBAClC,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,iBAAiB,EAAE,KAAK;gBACjD,UAAU,EAAE,QAAQ,CAAC,UAAU;aAChC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,4DAA4D,EAAE;gBACzE,YAAY;gBACZ,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ParsedSession } from '../../../agents/core/session/BaseSessionAdapter.js';
2
+ import type { ClaudeMessage } from '../../../agents/plugins/claude/claude-message-types.js';
3
+ export declare function extractClaudeDesktopMetrics(messages: ClaudeMessage[]): ParsedSession['metrics'];
4
+ //# sourceMappingURL=claude-desktop.metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-desktop.metrics.d.ts","sourceRoot":"","sources":["../../../../src/telemetry/clients/claude-desktop/claude-desktop.metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,iDAAiD,CAAC;AAElG,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,aAAa,EAAE,GACxB,aAAa,CAAC,SAAS,CAAC,CAoD1B"}
@@ -0,0 +1,53 @@
1
+ export function extractClaudeDesktopMetrics(messages) {
2
+ const toolCounts = {};
3
+ const toolStatus = {};
4
+ const fileOperations = [];
5
+ const toolResultsMap = new Map();
6
+ for (const msg of messages) {
7
+ if (!msg.message?.content || !Array.isArray(msg.message.content))
8
+ continue;
9
+ for (const item of msg.message.content) {
10
+ if (item.type === 'tool_result' && item.tool_use_id) {
11
+ const isError = item.isError === true || item.is_error === true;
12
+ toolResultsMap.set(item.tool_use_id, isError);
13
+ }
14
+ }
15
+ }
16
+ for (const msg of messages) {
17
+ if (msg.message?.content && Array.isArray(msg.message.content)) {
18
+ for (const item of msg.message.content) {
19
+ if (item.type !== 'tool_use' || !item.name || !item.id)
20
+ continue;
21
+ toolCounts[item.name] = (toolCounts[item.name] || 0) + 1;
22
+ toolStatus[item.name] ??= { success: 0, failure: 0 };
23
+ if (toolResultsMap.has(item.id)) {
24
+ if (toolResultsMap.get(item.id)) {
25
+ toolStatus[item.name].failure++;
26
+ }
27
+ else {
28
+ toolStatus[item.name].success++;
29
+ }
30
+ }
31
+ }
32
+ }
33
+ const filePath = msg.toolUseResult?.file?.filePath;
34
+ const toolType = msg.toolUseResult?.type?.toLowerCase();
35
+ if (!filePath || !toolType)
36
+ continue;
37
+ if (toolType.includes('write')) {
38
+ fileOperations.push({ type: 'write', path: filePath });
39
+ }
40
+ else if (toolType.includes('edit')) {
41
+ fileOperations.push({ type: 'edit', path: filePath });
42
+ }
43
+ else if (toolType.includes('delete') || toolType.includes('remove')) {
44
+ fileOperations.push({ type: 'delete', path: filePath });
45
+ }
46
+ }
47
+ return {
48
+ tools: toolCounts,
49
+ toolStatus,
50
+ fileOperations
51
+ };
52
+ }
53
+ //# sourceMappingURL=claude-desktop.metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-desktop.metrics.js","sourceRoot":"","sources":["../../../../src/telemetry/clients/claude-desktop/claude-desktop.metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ParsedSession } from '../../../agents/core/session/BaseSessionAdapter.js';
2
+ import type { LocalTelemetryDiscoveredSession } from '../../../telemetry/runtime/types.js';
3
+ export declare function parseClaudeDesktopSession(discovered: LocalTelemetryDiscoveredSession, codemieSessionId: string): Promise<ParsedSession>;
4
+ //# sourceMappingURL=claude-desktop.parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-desktop.parser.d.ts","sourceRoot":"","sources":["../../../../src/telemetry/clients/claude-desktop/claude-desktop.parser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAKjF,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC;AAwDpF,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,+BAA+B,EAC3C,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,aAAa,CAAC,CA+BxB"}
@@ -0,0 +1,60 @@
1
+ import { readFile } from 'fs/promises';
2
+ import { ClaudePluginMetadata } from '../../../agents/plugins/claude/claude.plugin.js';
3
+ import { ClaudeSessionAdapter } from '../../../agents/plugins/claude/claude.session.js';
4
+ import { readJSONL } from '../../../agents/core/session/utils/jsonl-reader.js';
5
+ import { extractClaudeDesktopMetrics } from './claude-desktop.metrics.js';
6
+ function normalizeTimestamp(event, metadata) {
7
+ return event.timestamp
8
+ || event._audit_timestamp
9
+ || new Date(metadata.lastActivityAt || metadata.createdAt).toISOString();
10
+ }
11
+ function normalizeMessage(event, metadata) {
12
+ const content = event.message?.content;
13
+ const normalizedContent = Array.isArray(content)
14
+ ? content
15
+ : typeof content === 'string'
16
+ ? content
17
+ : [];
18
+ return {
19
+ type: event.type,
20
+ subtype: event.subtype,
21
+ uuid: event.uuid || `${event.type}-${normalizeTimestamp(event, metadata)}`,
22
+ parentUuid: typeof event.parent_tool_use_id === 'string' ? event.parent_tool_use_id : undefined,
23
+ sessionId: event.session_id || metadata.cliSessionId || metadata.sessionId,
24
+ timestamp: normalizeTimestamp(event, metadata),
25
+ cwd: event.cwd,
26
+ message: event.message ? {
27
+ ...event.message,
28
+ model: event.message.model || metadata.model,
29
+ content: normalizedContent
30
+ } : undefined,
31
+ toolUseResult: event.toolUseResult
32
+ };
33
+ }
34
+ export async function parseClaudeDesktopSession(discovered, codemieSessionId) {
35
+ if (discovered.transcriptPath.endsWith('.jsonl')) {
36
+ const parsed = await new ClaudeSessionAdapter(ClaudePluginMetadata).parseSessionFile(discovered.transcriptPath, codemieSessionId);
37
+ return {
38
+ ...parsed,
39
+ agentName: 'claude-desktop'
40
+ };
41
+ }
42
+ const metadata = JSON.parse(await readFile(discovered.metadataPath, 'utf-8'));
43
+ const auditEvents = await readJSONL(discovered.transcriptPath);
44
+ const messages = auditEvents
45
+ .filter((event) => event.type === 'user' || event.type === 'assistant' || event.type === 'system')
46
+ .map((event) => normalizeMessage(event, metadata));
47
+ return {
48
+ sessionId: codemieSessionId,
49
+ agentName: 'claude-desktop',
50
+ agentVersion: undefined,
51
+ metadata: {
52
+ projectPath: discovered.transcriptPath,
53
+ createdAt: new Date(discovered.createdAt).toISOString(),
54
+ updatedAt: new Date(discovered.updatedAt).toISOString()
55
+ },
56
+ messages,
57
+ metrics: extractClaudeDesktopMetrics(messages)
58
+ };
59
+ }
60
+ //# sourceMappingURL=claude-desktop.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-desktop.parser.js","sourceRoot":"","sources":["../../../../src/telemetry/clients/claude-desktop/claude-desktop.parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function getClaudeDesktopBaseDir(): string;
2
+ export declare function getClaudeDesktopLocalSessionsRoot(): string;
3
+ export declare function getClaudeDesktopCodeSessionsRoot(): string;
4
+ //# sourceMappingURL=claude-desktop.paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-desktop.paths.d.ts","sourceRoot":"","sources":["../../../../src/telemetry/clients/claude-desktop/claude-desktop.paths.ts"],"names":[],"mappings":"AAIA,wBAAgB,uBAAuB,IAAI,MAAM,CAYhD;AAED,wBAAgB,iCAAiC,IAAI,MAAM,CAE1D;AAED,wBAAgB,gCAAgC,IAAI,MAAM,CAEzD"}
@@ -0,0 +1,19 @@
1
+ import { homedir } from 'node:os';
2
+ import { join } from 'node:path';
3
+ import { ConfigurationError } from '../../../utils/errors.js';
4
+ export function getClaudeDesktopBaseDir() {
5
+ if (process.platform === 'win32') {
6
+ return join(process.env.APPDATA ?? join(homedir(), 'AppData', 'Roaming'), 'Claude-3p');
7
+ }
8
+ if (process.platform === 'darwin') {
9
+ return join(homedir(), 'Library', 'Application Support', 'Claude-3p');
10
+ }
11
+ throw new ConfigurationError(`Claude Desktop proxy is not supported on platform "${process.platform}"`);
12
+ }
13
+ export function getClaudeDesktopLocalSessionsRoot() {
14
+ return join(getClaudeDesktopBaseDir(), 'local-agent-mode-sessions');
15
+ }
16
+ export function getClaudeDesktopCodeSessionsRoot() {
17
+ return join(getClaudeDesktopBaseDir(), 'claude-code-sessions');
18
+ }
19
+ //# sourceMappingURL=claude-desktop.paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-desktop.paths.js","sourceRoot":"","sources":["../../../../src/telemetry/clients/claude-desktop/claude-desktop.paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,UAAU,uBAAuB;IACrC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,WAAW,CAAC,CAAC;IACzF,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAE,WAAW,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,IAAI,kBAAkB,CAC1B,sDAAsD,OAAO,CAAC,QAAQ,GAAG,CAC1E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iCAAiC;IAC/C,OAAO,IAAI,CAAC,uBAAuB,EAAE,EAAE,2BAA2B,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,gCAAgC;IAC9C,OAAO,IAAI,CAAC,uBAAuB,EAAE,EAAE,sBAAsB,CAAC,CAAC;AACjE,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { DesktopTelemetryRuntimeConfig, LocalTelemetryAdapter } from '../../telemetry/runtime/types.js';
2
+ export declare class DesktopTelemetryRuntime {
3
+ private readonly adapter;
4
+ private readonly config;
5
+ private readonly sessionStore;
6
+ private readonly syncer;
7
+ private readonly trackedSessions;
8
+ private readonly startedAt;
9
+ private timer?;
10
+ private lastPollAt;
11
+ private isPolling;
12
+ constructor(adapter: LocalTelemetryAdapter, config: DesktopTelemetryRuntimeConfig);
13
+ start(): Promise<void>;
14
+ stop(): Promise<void>;
15
+ private poll;
16
+ private ensureSession;
17
+ private processSession;
18
+ private finalizeSession;
19
+ private buildProcessingContext;
20
+ private sendSessionStartMetric;
21
+ private sendSessionEndMetric;
22
+ }
23
+ //# sourceMappingURL=DesktopTelemetryRuntime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DesktopTelemetryRuntime.d.ts","sourceRoot":"","sources":["../../../src/telemetry/runtime/DesktopTelemetryRuntime.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,6BAA6B,EAC7B,qBAAqB,EAEtB,MAAM,8BAA8B,CAAC;AAUtC,qBAAa,uBAAuB;IAUhC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAVzB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqC;IACrE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,KAAK,CAAC,CAAiB;IAC/B,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,SAAS,CAAS;gBAGP,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,6BAA6B;IAGlD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAStB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAWb,IAAI;YAuCJ,aAAa;YAkDb,cAAc;YAgBd,eAAe;YA+Cf,sBAAsB;YAiCtB,sBAAsB;YAiCtB,oBAAoB;CA+BnC"}
@@ -0,0 +1,243 @@
1
+ import { randomUUID } from 'crypto';
2
+ import { SessionStore } from '../../agents/core/session/SessionStore.js';
3
+ import { MetricsSender } from '../../providers/plugins/sso/index.js';
4
+ import { SessionSyncer } from '../../providers/plugins/sso/session/SessionSyncer.js';
5
+ import { CodeMieSSO } from '../../providers/plugins/sso/sso.auth.js';
6
+ import { setRuntimeCheckpoint } from '../../telemetry/runtime/checkpoints.js';
7
+ import { logger } from '../../utils/logger.js';
8
+ import { detectGitBranch, detectGitRemoteRepo } from '../../utils/processes.js';
9
+ export class DesktopTelemetryRuntime {
10
+ adapter;
11
+ config;
12
+ sessionStore = new SessionStore();
13
+ syncer = new SessionSyncer();
14
+ trackedSessions = new Map();
15
+ startedAt = Date.now();
16
+ timer;
17
+ lastPollAt = this.startedAt;
18
+ isPolling = false;
19
+ constructor(adapter, config) {
20
+ this.adapter = adapter;
21
+ this.config = config;
22
+ }
23
+ async start() {
24
+ await this.poll();
25
+ this.timer = setInterval(() => {
26
+ this.poll().catch((error) => {
27
+ logger.error('[desktop-telemetry] Poll failed:', error);
28
+ });
29
+ }, this.config.pollIntervalMs);
30
+ }
31
+ async stop() {
32
+ if (this.timer) {
33
+ clearInterval(this.timer);
34
+ this.timer = undefined;
35
+ }
36
+ for (const tracked of this.trackedSessions.values()) {
37
+ await this.finalizeSession(tracked.codemieSessionId, 'desktop-daemon-stop');
38
+ }
39
+ }
40
+ async poll() {
41
+ if (this.isPolling) {
42
+ return;
43
+ }
44
+ this.isPolling = true;
45
+ const now = Date.now();
46
+ try {
47
+ const discoveredSessions = await this.adapter.discoverSessions(this.lastPollAt - this.config.pollIntervalMs);
48
+ for (const discovered of discoveredSessions) {
49
+ if (discovered.createdAt < this.startedAt) {
50
+ continue;
51
+ }
52
+ const session = await this.ensureSession(discovered);
53
+ this.trackedSessions.set(discovered.externalSessionId, {
54
+ codemieSessionId: session.sessionId,
55
+ lastSeenActivityAt: discovered.updatedAt
56
+ });
57
+ await this.processSession(session, discovered);
58
+ }
59
+ for (const [externalSessionId, tracked] of this.trackedSessions) {
60
+ const inactiveForMs = now - tracked.lastSeenActivityAt;
61
+ if (inactiveForMs < this.config.inactivityTimeoutMs) {
62
+ continue;
63
+ }
64
+ await this.finalizeSession(tracked.codemieSessionId, 'desktop-inactive-timeout');
65
+ this.trackedSessions.delete(externalSessionId);
66
+ }
67
+ }
68
+ finally {
69
+ this.lastPollAt = now;
70
+ this.isPolling = false;
71
+ }
72
+ }
73
+ async ensureSession(discovered) {
74
+ const existing = await this.sessionStore.findSessionByExternalId(this.config.clientType, discovered.externalSessionId);
75
+ if (existing) {
76
+ setRuntimeCheckpoint(existing, {
77
+ externalSessionId: discovered.externalSessionId,
78
+ transcriptPath: discovered.transcriptPath,
79
+ lastDiscoveredAt: Date.now(),
80
+ lastSeenActivityAt: discovered.updatedAt
81
+ });
82
+ await this.sessionStore.saveSession(existing);
83
+ return existing;
84
+ }
85
+ const [gitBranch, repository] = await Promise.all([
86
+ detectGitBranch(discovered.workingDirectory),
87
+ detectGitRemoteRepo(discovered.workingDirectory)
88
+ ]);
89
+ const session = {
90
+ sessionId: randomUUID(),
91
+ agentName: this.config.clientType,
92
+ provider: this.config.provider,
93
+ startTime: discovered.createdAt,
94
+ workingDirectory: discovered.workingDirectory,
95
+ gitBranch: gitBranch || undefined,
96
+ repository: repository || undefined,
97
+ status: 'active',
98
+ activeDurationMs: 0,
99
+ correlation: {
100
+ status: 'matched',
101
+ agentSessionId: discovered.agentSessionId,
102
+ agentSessionFile: discovered.transcriptPath,
103
+ retryCount: 0
104
+ },
105
+ runtimeCheckpoint: {
106
+ externalSessionId: discovered.externalSessionId,
107
+ transcriptPath: discovered.transcriptPath,
108
+ lastDiscoveredAt: Date.now(),
109
+ lastSeenActivityAt: discovered.updatedAt
110
+ }
111
+ };
112
+ await this.sessionStore.saveSession(session);
113
+ await this.sendSessionStartMetric(session, discovered);
114
+ return session;
115
+ }
116
+ async processSession(session, discovered) {
117
+ const parsedSession = await this.adapter.parseSession(discovered, session.sessionId);
118
+ const context = await this.buildProcessingContext(session, discovered);
119
+ const result = await this.adapter.processParsedSession(parsedSession, context);
120
+ if (result.totalRecords > 0) {
121
+ const syncResult = await this.syncer.sync(session.sessionId, context);
122
+ logger.info('[desktop-telemetry] Session synced', {
123
+ sessionId: session.sessionId,
124
+ externalSessionId: discovered.externalSessionId,
125
+ totalRecords: result.totalRecords,
126
+ syncMessage: syncResult.message
127
+ });
128
+ }
129
+ }
130
+ async finalizeSession(sessionId, reason) {
131
+ const session = await this.sessionStore.loadSession(sessionId);
132
+ if (!session || session.status === 'completed') {
133
+ return;
134
+ }
135
+ session.status = 'completed';
136
+ session.reason = reason;
137
+ session.endTime = Date.now();
138
+ await this.sessionStore.saveSession(session);
139
+ const externalSessionId = session.runtimeCheckpoint?.externalSessionId;
140
+ if (externalSessionId) {
141
+ try {
142
+ const sinceMs = Math.max(0, (session.runtimeCheckpoint?.lastSeenActivityAt
143
+ ?? session.runtimeCheckpoint?.lastDiscoveredAt
144
+ ?? session.startTime) - this.config.pollIntervalMs);
145
+ const discoveredSessions = await this.adapter.discoverSessions(sinceMs);
146
+ const discovered = discoveredSessions.find(candidate => candidate.externalSessionId === externalSessionId);
147
+ if (discovered) {
148
+ await this.processSession(session, discovered);
149
+ }
150
+ else {
151
+ logger.warn('[desktop-telemetry] Failed to rediscover session during finalization', {
152
+ sessionId,
153
+ externalSessionId
154
+ });
155
+ }
156
+ }
157
+ catch (error) {
158
+ logger.warn('[desktop-telemetry] Final transcript processing failed', {
159
+ sessionId,
160
+ externalSessionId,
161
+ error: error instanceof Error ? error.message : String(error)
162
+ });
163
+ }
164
+ }
165
+ const context = await this.buildProcessingContext(session);
166
+ await this.syncer.sync(sessionId, context);
167
+ await this.sendSessionEndMetric(session);
168
+ }
169
+ async buildProcessingContext(session, discovered) {
170
+ let cookies = '';
171
+ const credentialsUrl = this.config.syncCodeMieUrl || this.config.targetApiUrl;
172
+ try {
173
+ const credentials = await new CodeMieSSO().getStoredCredentials(credentialsUrl);
174
+ if (credentials?.cookies) {
175
+ cookies = Object.entries(credentials.cookies)
176
+ .map(([key, value]) => `${key}=${value}`)
177
+ .join('; ');
178
+ }
179
+ }
180
+ catch (error) {
181
+ logger.debug('[desktop-telemetry] Failed to load SSO credentials', {
182
+ credentialsUrl,
183
+ error: error instanceof Error ? error.message : String(error)
184
+ });
185
+ }
186
+ return {
187
+ apiBaseUrl: this.config.syncApiUrl || this.config.targetApiUrl,
188
+ cookies,
189
+ clientType: this.config.clientType,
190
+ version: this.config.version,
191
+ dryRun: false,
192
+ sessionId: session.sessionId,
193
+ agentSessionId: discovered?.agentSessionId || session.correlation.agentSessionId,
194
+ agentSessionFile: discovered?.transcriptPath || session.correlation.agentSessionFile
195
+ };
196
+ }
197
+ async sendSessionStartMetric(session, discovered) {
198
+ const context = await this.buildProcessingContext(session, discovered);
199
+ if (!context.cookies) {
200
+ return;
201
+ }
202
+ const sender = new MetricsSender({
203
+ baseUrl: context.apiBaseUrl,
204
+ cookies: context.cookies,
205
+ version: this.config.version,
206
+ clientType: this.config.clientType,
207
+ retryAttempts: 2,
208
+ timeout: 10000
209
+ });
210
+ await sender.sendSessionStart({
211
+ sessionId: discovered.agentSessionId,
212
+ agentName: this.config.clientType,
213
+ provider: this.config.provider,
214
+ startTime: session.startTime,
215
+ workingDirectory: session.workingDirectory,
216
+ repository: session.repository,
217
+ model: discovered.model
218
+ }, session.workingDirectory, { status: 'started', reason: 'desktop-proxy-detected' });
219
+ }
220
+ async sendSessionEndMetric(session) {
221
+ const context = await this.buildProcessingContext(session);
222
+ if (!context.cookies) {
223
+ return;
224
+ }
225
+ const sender = new MetricsSender({
226
+ baseUrl: context.apiBaseUrl,
227
+ cookies: context.cookies,
228
+ version: this.config.version,
229
+ clientType: this.config.clientType,
230
+ retryAttempts: 2,
231
+ timeout: 10000
232
+ });
233
+ await sender.sendSessionEnd({
234
+ sessionId: session.correlation.agentSessionId || session.sessionId,
235
+ agentName: this.config.clientType,
236
+ provider: this.config.provider,
237
+ startTime: session.startTime,
238
+ workingDirectory: session.workingDirectory,
239
+ repository: session.repository
240
+ }, session.workingDirectory, { status: 'completed', reason: session.reason || 'desktop-session-complete' }, Math.max(0, (session.endTime || Date.now()) - session.startTime), undefined, session.activeDurationMs);
241
+ }
242
+ }
243
+ //# sourceMappingURL=DesktopTelemetryRuntime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DesktopTelemetryRuntime.js","sourceRoot":"","sources":["../../../src/telemetry/runtime/DesktopTelemetryRuntime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Session } from '../../agents/core/session/types.js';
2
+ export interface RuntimeCheckpoint {
3
+ externalSessionId: string;
4
+ transcriptPath: string;
5
+ lastDiscoveredAt: number;
6
+ lastSeenActivityAt?: number;
7
+ }
8
+ export declare function getRuntimeCheckpoint(session: Session): RuntimeCheckpoint | undefined;
9
+ export declare function setRuntimeCheckpoint(session: Session, checkpoint: RuntimeCheckpoint): Session;
10
+ //# sourceMappingURL=checkpoints.d.ts.map