@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.
- package/README.md +124 -19
- package/bin/proxy-daemon.js +10 -0
- package/dist/agents/core/AgentCLI.d.ts.map +1 -1
- package/dist/agents/core/AgentCLI.js +17 -0
- package/dist/agents/core/AgentCLI.js.map +1 -1
- package/dist/agents/core/session/SessionStore.d.ts +4 -0
- package/dist/agents/core/session/SessionStore.d.ts.map +1 -1
- package/dist/agents/core/session/SessionStore.js +40 -1
- package/dist/agents/core/session/SessionStore.js.map +1 -1
- package/dist/agents/core/session/types.d.ts +7 -0
- package/dist/agents/core/session/types.d.ts.map +1 -1
- package/dist/agents/plugins/claude/plugin/.claude-plugin/plugin.json +1 -1
- package/dist/agents/plugins/claude/plugin/skills/msgraph/SKILL.md +10 -8
- package/dist/agents/plugins/claude/plugin/skills/msgraph/scripts/msgraph.js +297 -149
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts +1 -0
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts.map +1 -1
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js +32 -20
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js.map +1 -1
- package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.d.ts +2 -0
- package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.d.ts.map +1 -1
- package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.js +24 -1
- package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.js.map +1 -1
- package/dist/bin/proxy-daemon.d.ts +2 -0
- package/dist/bin/proxy-daemon.d.ts.map +1 -0
- package/dist/bin/proxy-daemon.js +138 -0
- package/dist/bin/proxy-daemon.js.map +1 -0
- package/dist/cli/commands/proxy/connectors/desktop.d.ts +55 -0
- package/dist/cli/commands/proxy/connectors/desktop.d.ts.map +1 -0
- package/dist/cli/commands/proxy/connectors/desktop.js +175 -0
- package/dist/cli/commands/proxy/connectors/desktop.js.map +1 -0
- package/dist/cli/commands/proxy/daemon-manager.d.ts +35 -0
- package/dist/cli/commands/proxy/daemon-manager.d.ts.map +1 -0
- package/dist/cli/commands/proxy/daemon-manager.js +107 -0
- package/dist/cli/commands/proxy/daemon-manager.js.map +1 -0
- package/dist/cli/commands/proxy/index.d.ts +3 -0
- package/dist/cli/commands/proxy/index.d.ts.map +1 -0
- package/dist/cli/commands/proxy/index.js +221 -0
- package/dist/cli/commands/proxy/index.js.map +1 -0
- package/dist/cli/commands/proxy/inspect-desktop.d.ts +28 -0
- package/dist/cli/commands/proxy/inspect-desktop.d.ts.map +1 -0
- package/dist/cli/commands/proxy/inspect-desktop.js +134 -0
- package/dist/cli/commands/proxy/inspect-desktop.js.map +1 -0
- package/dist/cli/index.js +12 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/gateway-key.plugin.d.ts +9 -0
- package/dist/providers/plugins/sso/proxy/plugins/gateway-key.plugin.d.ts.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/gateway-key.plugin.js +36 -0
- package/dist/providers/plugins/sso/proxy/plugins/gateway-key.plugin.js.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/index.d.ts +2 -1
- package/dist/providers/plugins/sso/proxy/plugins/index.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/index.js +3 -1
- package/dist/providers/plugins/sso/proxy/plugins/index.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/proxy-types.d.ts +4 -0
- package/dist/providers/plugins/sso/proxy/proxy-types.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/sso.proxy.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/sso.proxy.js +4 -3
- package/dist/providers/plugins/sso/proxy/sso.proxy.js.map +1 -1
- package/dist/telemetry/clients/claude-desktop/ClaudeDesktopTelemetryAdapter.d.ts +15 -0
- package/dist/telemetry/clients/claude-desktop/ClaudeDesktopTelemetryAdapter.d.ts.map +1 -0
- package/dist/telemetry/clients/claude-desktop/ClaudeDesktopTelemetryAdapter.js +117 -0
- package/dist/telemetry/clients/claude-desktop/ClaudeDesktopTelemetryAdapter.js.map +1 -0
- package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.d.ts +3 -0
- package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.d.ts.map +1 -0
- package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.js +138 -0
- package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.js.map +1 -0
- package/dist/telemetry/clients/claude-desktop/claude-desktop.metrics.d.ts +4 -0
- package/dist/telemetry/clients/claude-desktop/claude-desktop.metrics.d.ts.map +1 -0
- package/dist/telemetry/clients/claude-desktop/claude-desktop.metrics.js +53 -0
- package/dist/telemetry/clients/claude-desktop/claude-desktop.metrics.js.map +1 -0
- package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.d.ts +4 -0
- package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.d.ts.map +1 -0
- package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.js +60 -0
- package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.js.map +1 -0
- package/dist/telemetry/clients/claude-desktop/claude-desktop.paths.d.ts +4 -0
- package/dist/telemetry/clients/claude-desktop/claude-desktop.paths.d.ts.map +1 -0
- package/dist/telemetry/clients/claude-desktop/claude-desktop.paths.js +19 -0
- package/dist/telemetry/clients/claude-desktop/claude-desktop.paths.js.map +1 -0
- package/dist/telemetry/runtime/DesktopTelemetryRuntime.d.ts +23 -0
- package/dist/telemetry/runtime/DesktopTelemetryRuntime.d.ts.map +1 -0
- package/dist/telemetry/runtime/DesktopTelemetryRuntime.js +243 -0
- package/dist/telemetry/runtime/DesktopTelemetryRuntime.js.map +1 -0
- package/dist/telemetry/runtime/checkpoints.d.ts +10 -0
- package/dist/telemetry/runtime/checkpoints.d.ts.map +1 -0
- package/dist/telemetry/runtime/checkpoints.js +8 -0
- package/dist/telemetry/runtime/checkpoints.js.map +1 -0
- package/dist/telemetry/runtime/types.d.ts +32 -0
- package/dist/telemetry/runtime/types.d.ts.map +1 -0
- package/dist/telemetry/runtime/types.js +2 -0
- package/dist/telemetry/runtime/types.js.map +1 -0
- package/dist/utils/processes.d.ts +6 -0
- package/dist/utils/processes.d.ts.map +1 -1
- package/dist/utils/processes.js +13 -3
- package/dist/utils/processes.js.map +1 -1
- package/package.json +4 -2
- package/scripts/README.md +15 -1
- package/scripts/prepare-install-artifacts.mjs +66 -0
- package/scripts/test-desktop-telemetry.js +229 -0
- package/scripts/test-proxy-endpoint.js +173 -0
|
@@ -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":"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"}
|
|
@@ -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 @@
|
|
|
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
|