@codemieai/code 0.15.2 → 0.15.3
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/dist/agents/plugins/claude/claude.plugin.d.ts +1 -1
- package/dist/agents/plugins/claude/claude.plugin.js +2 -2
- package/dist/agents/plugins/claude/claude.session.d.ts +17 -1
- package/dist/agents/plugins/claude/claude.session.d.ts.map +1 -1
- package/dist/agents/plugins/claude/claude.session.js +4 -0
- package/dist/agents/plugins/claude/claude.session.js.map +1 -1
- package/dist/agents/plugins/opencode/opencode-dynamic-models.d.ts.map +1 -1
- package/dist/agents/plugins/opencode/opencode-dynamic-models.js +3 -4
- package/dist/agents/plugins/opencode/opencode-dynamic-models.js.map +1 -1
- package/dist/agents/plugins/pi/pi.models.d.ts.map +1 -1
- package/dist/agents/plugins/pi/pi.models.js +3 -3
- package/dist/agents/plugins/pi/pi.models.js.map +1 -1
- package/dist/bin/proxy-daemon.js +8 -1
- package/dist/bin/proxy-daemon.js.map +1 -1
- package/dist/cli/commands/assistants/constants.d.ts +4 -0
- package/dist/cli/commands/assistants/constants.d.ts.map +1 -1
- package/dist/cli/commands/assistants/constants.js +4 -0
- package/dist/cli/commands/assistants/constants.js.map +1 -1
- package/dist/cli/commands/assistants/setup/data.d.ts +1 -0
- package/dist/cli/commands/assistants/setup/data.d.ts.map +1 -1
- package/dist/cli/commands/assistants/setup/data.js +55 -10
- package/dist/cli/commands/assistants/setup/data.js.map +1 -1
- package/dist/cli/commands/assistants/setup/helpers.d.ts +1 -1
- package/dist/cli/commands/assistants/setup/helpers.d.ts.map +1 -1
- package/dist/cli/commands/assistants/setup/helpers.js +2 -5
- package/dist/cli/commands/assistants/setup/helpers.js.map +1 -1
- package/dist/cli/commands/assistants/setup/index.d.ts +12 -0
- package/dist/cli/commands/assistants/setup/index.d.ts.map +1 -1
- package/dist/cli/commands/assistants/setup/index.js +148 -20
- package/dist/cli/commands/assistants/setup/index.js.map +1 -1
- package/dist/cli/commands/profile/display.d.ts +5 -1
- package/dist/cli/commands/profile/display.d.ts.map +1 -1
- package/dist/cli/commands/profile/display.js +5 -1
- package/dist/cli/commands/profile/display.js.map +1 -1
- package/dist/cli/commands/profile/index.d.ts.map +1 -1
- package/dist/cli/commands/profile/index.js +7 -4
- package/dist/cli/commands/profile/index.js.map +1 -1
- package/dist/cli/commands/proxy/connect-orchestrator.d.ts.map +1 -1
- package/dist/cli/commands/proxy/connect-orchestrator.js +3 -4
- package/dist/cli/commands/proxy/connect-orchestrator.js.map +1 -1
- package/dist/cli/commands/proxy/connectors/desktop.d.ts +2 -3
- package/dist/cli/commands/proxy/connectors/desktop.d.ts.map +1 -1
- package/dist/cli/commands/proxy/connectors/desktop.js +9 -25
- package/dist/cli/commands/proxy/connectors/desktop.js.map +1 -1
- package/dist/cli/commands/proxy/connectors/model-name-resolver.d.ts +19 -0
- package/dist/cli/commands/proxy/connectors/model-name-resolver.d.ts.map +1 -0
- package/dist/cli/commands/proxy/connectors/model-name-resolver.js +126 -0
- package/dist/cli/commands/proxy/connectors/model-name-resolver.js.map +1 -0
- package/dist/cli/commands/proxy/connectors/tenant-catalog.d.ts +11 -0
- package/dist/cli/commands/proxy/connectors/tenant-catalog.d.ts.map +1 -0
- package/dist/cli/commands/proxy/connectors/tenant-catalog.js +108 -0
- package/dist/cli/commands/proxy/connectors/tenant-catalog.js.map +1 -0
- package/dist/cli/commands/proxy/connectors/vscode-claude-code.d.ts.map +1 -1
- package/dist/cli/commands/proxy/connectors/vscode-claude-code.js +49 -19
- package/dist/cli/commands/proxy/connectors/vscode-claude-code.js.map +1 -1
- package/dist/cli/commands/proxy/connectors/vscode-models.d.ts +3 -3
- package/dist/cli/commands/proxy/connectors/vscode-models.d.ts.map +1 -1
- package/dist/cli/commands/proxy/connectors/vscode-models.js +28 -28
- package/dist/cli/commands/proxy/connectors/vscode-models.js.map +1 -1
- package/dist/cli/commands/proxy/connectors/vscode.d.ts +3 -2
- package/dist/cli/commands/proxy/connectors/vscode.d.ts.map +1 -1
- package/dist/cli/commands/proxy/connectors/vscode.js +78 -39
- package/dist/cli/commands/proxy/connectors/vscode.js.map +1 -1
- package/dist/cli/commands/shared/headless.d.ts +69 -0
- package/dist/cli/commands/shared/headless.d.ts.map +1 -0
- package/dist/cli/commands/shared/headless.js +83 -0
- package/dist/cli/commands/shared/headless.js.map +1 -0
- package/dist/cli/commands/shared/helpers.d.ts +21 -0
- package/dist/cli/commands/shared/helpers.d.ts.map +1 -1
- package/dist/cli/commands/shared/helpers.js +73 -1
- package/dist/cli/commands/shared/helpers.js.map +1 -1
- package/dist/cli/commands/shared/identifier-resolution.d.ts +23 -0
- package/dist/cli/commands/shared/identifier-resolution.d.ts.map +1 -0
- package/dist/cli/commands/shared/identifier-resolution.js +55 -0
- package/dist/cli/commands/shared/identifier-resolution.js.map +1 -0
- package/dist/cli/commands/skills/setup/data.d.ts +3 -2
- package/dist/cli/commands/skills/setup/data.d.ts.map +1 -1
- package/dist/cli/commands/skills/setup/data.js +75 -13
- package/dist/cli/commands/skills/setup/data.js.map +1 -1
- package/dist/cli/commands/skills/setup/helpers.d.ts +1 -1
- package/dist/cli/commands/skills/setup/helpers.d.ts.map +1 -1
- package/dist/cli/commands/skills/setup/helpers.js +2 -5
- package/dist/cli/commands/skills/setup/helpers.js.map +1 -1
- package/dist/cli/commands/skills/setup/index.d.ts +17 -1
- package/dist/cli/commands/skills/setup/index.d.ts.map +1 -1
- package/dist/cli/commands/skills/setup/index.js +190 -19
- package/dist/cli/commands/skills/setup/index.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/claude-model-resolver.d.ts +41 -0
- package/dist/providers/plugins/sso/proxy/plugins/claude-model-resolver.d.ts.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/claude-model-resolver.js +115 -0
- package/dist/providers/plugins/sso/proxy/plugins/claude-model-resolver.js.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/claude-request-normalizer.plugin.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/claude-request-normalizer.plugin.js +101 -7
- package/dist/providers/plugins/sso/proxy/plugins/claude-request-normalizer.plugin.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/header-injection.plugin.d.ts +4 -0
- package/dist/providers/plugins/sso/proxy/plugins/header-injection.plugin.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/header-injection.plugin.js +28 -3
- package/dist/providers/plugins/sso/proxy/plugins/header-injection.plugin.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/proxy-types.d.ts +5 -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 +1 -0
- package/dist/providers/plugins/sso/proxy/sso.proxy.js.map +1 -1
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-aggregator.d.ts.map +1 -1
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-aggregator.js +11 -2
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-aggregator.js.map +1 -1
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.d.ts.map +1 -1
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.js +2 -1
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.js.map +1 -1
- package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.d.ts +1 -0
- package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.d.ts.map +1 -1
- package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.js +30 -6
- package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.js.map +1 -1
- package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.d.ts.map +1 -1
- package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.js +33 -3
- package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.js.map +1 -1
- package/dist/telemetry/runtime/DesktopRepositoryResolver.d.ts +58 -0
- package/dist/telemetry/runtime/DesktopRepositoryResolver.d.ts.map +1 -0
- package/dist/telemetry/runtime/DesktopRepositoryResolver.js +370 -0
- package/dist/telemetry/runtime/DesktopRepositoryResolver.js.map +1 -0
- package/dist/telemetry/runtime/DesktopTelemetryRuntime.d.ts +1 -0
- package/dist/telemetry/runtime/DesktopTelemetryRuntime.d.ts.map +1 -1
- package/dist/telemetry/runtime/DesktopTelemetryRuntime.js +89 -6
- package/dist/telemetry/runtime/DesktopTelemetryRuntime.js.map +1 -1
- package/dist/telemetry/runtime/types.d.ts +2 -0
- package/dist/telemetry/runtime/types.d.ts.map +1 -1
- package/dist/utils/auth.d.ts +13 -2
- package/dist/utils/auth.d.ts.map +1 -1
- package/dist/utils/auth.js +7 -3
- package/dist/utils/auth.js.map +1 -1
- package/dist/utils/config.d.ts +21 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +69 -7
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/errors.d.ts +14 -0
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +25 -0
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/paths.d.ts +2 -2
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +11 -9
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/processes.d.ts +12 -0
- package/dist/utils/processes.d.ts.map +1 -1
- package/dist/utils/processes.js +15 -0
- package/dist/utils/processes.js.map +1 -1
- package/package.json +2 -1
|
@@ -1,10 +1,35 @@
|
|
|
1
1
|
import { existsSync } from 'fs';
|
|
2
2
|
import { readdir, readFile } from 'fs/promises';
|
|
3
|
-
import { join } from 'path';
|
|
3
|
+
import { dirname, join } from 'path';
|
|
4
4
|
import { resolveHomeDir, normalizePathSeparators } from '../../../utils/paths.js';
|
|
5
5
|
import { logger } from '../../../utils/logger.js';
|
|
6
6
|
import { sanitizeLogArgs } from '../../../utils/security.js';
|
|
7
7
|
import { getClaudeDesktopCodeSessionsRoot, getClaudeDesktopLocalSessionsRoot } from './claude-desktop.paths.js';
|
|
8
|
+
/**
|
|
9
|
+
* Short form of a Desktop session id: `local_89643b28-ed6d-…` -> `89643b28`.
|
|
10
|
+
*/
|
|
11
|
+
function shortSessionId(sessionId) {
|
|
12
|
+
return sessionId.replace(/^local_/, '').split('-')[0];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Locates the session's `audit.jsonl`, which Cowork writes next to its metadata file.
|
|
16
|
+
*
|
|
17
|
+
* Claude Desktop has used two directory layouts: one named after the full metadata file
|
|
18
|
+
* (`local_<uuid>/`) and the current one named after the short session id (`89643b28/`).
|
|
19
|
+
* Both are probed so a Desktop update cannot silently drop Cowork sessions from discovery.
|
|
20
|
+
*/
|
|
21
|
+
function resolveAuditTranscriptPath(metadataPath, sessionId) {
|
|
22
|
+
const candidates = [
|
|
23
|
+
metadataPath.replace(/\.json$/, ''),
|
|
24
|
+
join(dirname(metadataPath), shortSessionId(sessionId))
|
|
25
|
+
];
|
|
26
|
+
for (const dir of candidates) {
|
|
27
|
+
const candidate = join(dir, 'audit.jsonl');
|
|
28
|
+
if (existsSync(candidate))
|
|
29
|
+
return candidate;
|
|
30
|
+
}
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
8
33
|
async function loadCompanionMetadata(metadataPath) {
|
|
9
34
|
const localRoot = getClaudeDesktopLocalSessionsRoot();
|
|
10
35
|
const codeRoot = getClaudeDesktopCodeSessionsRoot();
|
|
@@ -64,7 +89,7 @@ async function resolveClaudeTranscriptPath(metadata) {
|
|
|
64
89
|
}
|
|
65
90
|
return null;
|
|
66
91
|
}
|
|
67
|
-
async function walk(root) {
|
|
92
|
+
export async function walk(root) {
|
|
68
93
|
const files = [];
|
|
69
94
|
// A directory that is unreadable (root-owned leftovers under ~/.config) or
|
|
70
95
|
// deleted between listing and descent must cost us that subtree only. This
|
|
@@ -104,14 +129,12 @@ export async function discoverClaudeDesktopSessions(sinceMs) {
|
|
|
104
129
|
const metadata = JSON.parse(await readFile(metadataPath, 'utf-8'));
|
|
105
130
|
const companionMetadata = await loadCompanionMetadata(metadataPath);
|
|
106
131
|
const transcriptDir = metadataPath.replace(/\.json$/, '');
|
|
107
|
-
const auditTranscriptPath =
|
|
132
|
+
const auditTranscriptPath = resolveAuditTranscriptPath(metadataPath, metadata.sessionId);
|
|
108
133
|
const claudeTranscriptPath = await resolveClaudeTranscriptPath({
|
|
109
134
|
...companionMetadata,
|
|
110
135
|
...metadata
|
|
111
136
|
});
|
|
112
|
-
const transcriptPath =
|
|
113
|
-
? auditTranscriptPath
|
|
114
|
-
: claudeTranscriptPath;
|
|
137
|
+
const transcriptPath = auditTranscriptPath ?? claudeTranscriptPath;
|
|
115
138
|
if (!metadata.sessionId.startsWith('local_'))
|
|
116
139
|
continue;
|
|
117
140
|
// Skip until the inner Claude session id exists. Until then agentSessionId
|
|
@@ -136,6 +159,7 @@ export async function discoverClaudeDesktopSessions(sinceMs) {
|
|
|
136
159
|
|| companionMetadata?.worktreePath
|
|
137
160
|
|| metadata.originCwd
|
|
138
161
|
|| metadata.worktreePath
|
|
162
|
+
|| metadata.userSelectedFolders?.[0]
|
|
139
163
|
|| metadata.cwd
|
|
140
164
|
|| transcriptDir,
|
|
141
165
|
createdAt: metadata.createdAt,
|
|
@@ -1 +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;
|
|
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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"}
|
|
@@ -1 +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;
|
|
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;AAuGpF,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,+BAA+B,EAC3C,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,aAAa,CAAC,CAqCxB"}
|
|
@@ -51,13 +51,43 @@ function backfillTimestampsFromAuditLog(messages) {
|
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* Cowork's audit log names the tool result `tool_use_result`, while Claude Code transcripts use
|
|
56
|
+
* `toolUseResult`. The payload is identical (filePath, structuredPatch, oldString/newString), but
|
|
57
|
+
* the metrics and file-operation processors only read the camelCase field — so a Cowork session
|
|
58
|
+
* reported zero file operations and zero line changes despite real Edit/Write activity, while the
|
|
59
|
+
* Code tab (a genuine Claude Code transcript) reported them correctly. Alias the field here, next
|
|
60
|
+
* to the timestamp backfill, because `tool_use_result` is a Cowork audit-log artifact that real
|
|
61
|
+
* Claude Code sessions never carry, making this a no-op for them.
|
|
62
|
+
*/
|
|
63
|
+
function aliasAuditToolResults(messages) {
|
|
64
|
+
let aliased = 0;
|
|
65
|
+
for (const message of messages) {
|
|
66
|
+
if (message.toolUseResult)
|
|
67
|
+
continue;
|
|
68
|
+
const auditResult = message
|
|
69
|
+
.tool_use_result;
|
|
70
|
+
if (auditResult) {
|
|
71
|
+
message.toolUseResult = auditResult;
|
|
72
|
+
aliased++;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return aliased;
|
|
76
|
+
}
|
|
54
77
|
export async function parseClaudeDesktopSession(discovered, codemieSessionId) {
|
|
55
78
|
if (discovered.transcriptPath.endsWith('.jsonl')) {
|
|
56
|
-
const
|
|
57
|
-
|
|
79
|
+
const adapter = new ClaudeSessionAdapter(ClaudePluginMetadata);
|
|
80
|
+
const parsed = await adapter.parseSessionFile(discovered.transcriptPath, codemieSessionId);
|
|
81
|
+
const messages = parsed.messages;
|
|
82
|
+
backfillTimestampsFromAuditLog(messages);
|
|
83
|
+
const aliased = aliasAuditToolResults(messages);
|
|
58
84
|
return {
|
|
59
85
|
...parsed,
|
|
60
|
-
agentName: 'claude-desktop'
|
|
86
|
+
agentName: 'claude-desktop',
|
|
87
|
+
// parseSessionFile extracts metrics before the alias above runs, so a Cowork transcript
|
|
88
|
+
// would report zero file operations and zero line changes. Re-extract over the corrected
|
|
89
|
+
// messages; skipped entirely for real Claude Code transcripts, which need no aliasing.
|
|
90
|
+
metrics: aliased > 0 ? adapter.extractMetrics(messages) : parsed.metrics
|
|
61
91
|
};
|
|
62
92
|
}
|
|
63
93
|
const metadata = JSON.parse(await readFile(discovered.metadataPath, 'utf-8'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-desktop.parser.js","sourceRoot":"","sources":["../../../../src/telemetry/clients/claude-desktop/claude-desktop.parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,6CAA6C,CAAC;AAGxE,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAwB1E,SAAS,kBAAkB,CAAC,KAAwB,EAAE,QAAyB;IAC7E,OAAO,KAAK,CAAC,SAAS;WACjB,KAAK,CAAC,gBAAgB;WACtB,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;AAC7E,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAwB,EAAE,QAAyB;IAC3E,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;IACvC,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAC9C,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,OAAO,OAAO,KAAK,QAAQ;YAC3B,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,EAAE,CAAC;IAET,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE;QAC1E,UAAU,EAAE,OAAO,KAAK,CAAC,kBAAkB,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS;QAC/F,SAAS,EAAE,KAAK,CAAC,UAAU,IAAI,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,SAAS;QAC1E,SAAS,EAAE,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC;QAC9C,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YACvB,GAAG,KAAK,CAAC,OAAO;YAChB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK;YAC5C,OAAO,EAAE,iBAA2C;SACrD,CAAC,CAAC,CAAC,SAAS;QACb,aAAa,EAAE,KAAK,CAAC,aAAa;KACnC,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,8BAA8B,CAAC,QAAyB;IAC/D,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACvB,MAAM,cAAc,GAAI,OAAyC,CAAC,gBAAgB,CAAC;YACnF,IAAI,cAAc,EAAE,CAAC;gBACnB,OAAO,CAAC,SAAS,GAAG,cAAc,CAAC;YACrC,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,UAA2C,EAC3C,gBAAwB;IAExB,IAAI,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjD,MAAM,
|
|
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,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Desktop repository attribution resolver.
|
|
3
|
+
*
|
|
4
|
+
* Owns every strategy that maps a Claude Desktop session to a repository and branch:
|
|
5
|
+
* process introspection, Desktop session-file scanning and git metadata reads. Both the
|
|
6
|
+
* proxy's header-injection interceptor and DesktopTelemetryRuntime resolve through this
|
|
7
|
+
* single service, so attribution has one implementation and one cache instead of two
|
|
8
|
+
* independently maintained paths.
|
|
9
|
+
*/
|
|
10
|
+
/** Request-scoped inputs the resolver cannot derive on its own. */
|
|
11
|
+
export interface DesktopRequestHints {
|
|
12
|
+
/** TCP source port of the connecting client, used to find the owning process. */
|
|
13
|
+
remotePort?: number;
|
|
14
|
+
/** Request URL — `beta=true` marks a Desktop orchestrator call. */
|
|
15
|
+
url?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface DesktopAttribution {
|
|
18
|
+
/** Resolved repository, or null when the caller should apply its own default. */
|
|
19
|
+
repository: string | null;
|
|
20
|
+
/**
|
|
21
|
+
* Branch for the session, replayed from cache on every request. Reporting it only once
|
|
22
|
+
* would split a session's cost across a {repo, branch} and a {repo, ""} bucket.
|
|
23
|
+
*/
|
|
24
|
+
branch: string | null;
|
|
25
|
+
/** True for Cowork (chat mode) sessions, which must report as claude-desktop clients. */
|
|
26
|
+
isCowork: boolean;
|
|
27
|
+
}
|
|
28
|
+
export declare class DesktopRepositoryResolver {
|
|
29
|
+
private readonly sessions;
|
|
30
|
+
/**
|
|
31
|
+
* Dedupes concurrent resolution of the same new session. A Desktop turn sends its
|
|
32
|
+
* subprocess and orchestrator requests ~200 ms apart; without this both would run the
|
|
33
|
+
* lsof/ps chain independently.
|
|
34
|
+
*/
|
|
35
|
+
private readonly inFlight;
|
|
36
|
+
private lastResolved?;
|
|
37
|
+
/** Repository recorded for a session, if any. */
|
|
38
|
+
getRepository(sessionId: string): string | undefined;
|
|
39
|
+
/**
|
|
40
|
+
* Resolves attribution for one proxied request, caching the outcome per session.
|
|
41
|
+
*
|
|
42
|
+
* Confirmed records are returned as-is. Tentative records (TTL-window guesses) are
|
|
43
|
+
* retried on every request so the first real resolution can correct them — a session
|
|
44
|
+
* opened seconds after another must not stay pinned to the previous repository.
|
|
45
|
+
*/
|
|
46
|
+
resolveForRequest(cliSessionId: string | undefined, hints: DesktopRequestHints): Promise<DesktopAttribution>;
|
|
47
|
+
/**
|
|
48
|
+
* Publishes the repository DesktopTelemetryRuntime derived from a polled session file.
|
|
49
|
+
*
|
|
50
|
+
* A confirmed per-request resolution wins, because it reads the real process CWD rather
|
|
51
|
+
* than the session file's recorded directory. A tentative record is only a guess, so the
|
|
52
|
+
* poll result replaces it.
|
|
53
|
+
*/
|
|
54
|
+
recordDiscoveredSession(agentSessionId: string, repository: string | undefined): void;
|
|
55
|
+
private resolveSession;
|
|
56
|
+
private resolveSessionUncached;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=DesktopRepositoryResolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DesktopRepositoryResolver.d.ts","sourceRoot":"","sources":["../../../src/telemetry/runtime/DesktopRepositoryResolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAsBH,mEAAmE;AACnE,MAAM,WAAW,mBAAmB;IAClC,iFAAiF;IACjF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,iFAAiF;IACjF,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B;;;OAGG;IACH,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,yFAAyF;IACzF,QAAQ,EAAE,OAAO,CAAC;CACnB;AA4BD,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAE7D;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+D;IAExF,OAAO,CAAC,YAAY,CAAC,CAA4D;IAEjF,iDAAiD;IACjD,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIpD;;;;;;OAMG;IACG,iBAAiB,CACrB,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,kBAAkB,CAAC;IAkD9B;;;;;;OAMG;IACH,uBAAuB,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;YAmBvE,cAAc;YAgBd,sBAAsB;CAsFrC"}
|
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Desktop repository attribution resolver.
|
|
3
|
+
*
|
|
4
|
+
* Owns every strategy that maps a Claude Desktop session to a repository and branch:
|
|
5
|
+
* process introspection, Desktop session-file scanning and git metadata reads. Both the
|
|
6
|
+
* proxy's header-injection interceptor and DesktopTelemetryRuntime resolve through this
|
|
7
|
+
* single service, so attribution has one implementation and one cache instead of two
|
|
8
|
+
* independently maintained paths.
|
|
9
|
+
*/
|
|
10
|
+
import { exec as execCb } from 'node:child_process';
|
|
11
|
+
import { existsSync } from 'node:fs';
|
|
12
|
+
import { readFile } from 'node:fs/promises';
|
|
13
|
+
import { promisify } from 'node:util';
|
|
14
|
+
import { walk } from '../../telemetry/clients/claude-desktop/claude-desktop.discovery.js';
|
|
15
|
+
import { getClaudeDesktopCodeSessionsRoot, getClaudeDesktopLocalSessionsRoot } from '../../telemetry/clients/claude-desktop/claude-desktop.paths.js';
|
|
16
|
+
import { logger } from '../../utils/logger.js';
|
|
17
|
+
import { detectGitBranch, resolveRepositoryName } from '../../utils/processes.js';
|
|
18
|
+
const execAsync = promisify(execCb);
|
|
19
|
+
/** Window in which a freshly resolved repository may stand in for an unresolvable session. */
|
|
20
|
+
const FALLBACK_TTL_MS = 30_000;
|
|
21
|
+
const LOG = '[desktop-repo-resolver]';
|
|
22
|
+
export class DesktopRepositoryResolver {
|
|
23
|
+
sessions = new Map();
|
|
24
|
+
/**
|
|
25
|
+
* Dedupes concurrent resolution of the same new session. A Desktop turn sends its
|
|
26
|
+
* subprocess and orchestrator requests ~200 ms apart; without this both would run the
|
|
27
|
+
* lsof/ps chain independently.
|
|
28
|
+
*/
|
|
29
|
+
inFlight = new Map();
|
|
30
|
+
lastResolved;
|
|
31
|
+
/** Repository recorded for a session, if any. */
|
|
32
|
+
getRepository(sessionId) {
|
|
33
|
+
return this.sessions.get(sessionId)?.repository;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Resolves attribution for one proxied request, caching the outcome per session.
|
|
37
|
+
*
|
|
38
|
+
* Confirmed records are returned as-is. Tentative records (TTL-window guesses) are
|
|
39
|
+
* retried on every request so the first real resolution can correct them — a session
|
|
40
|
+
* opened seconds after another must not stay pinned to the previous repository.
|
|
41
|
+
*/
|
|
42
|
+
async resolveForRequest(cliSessionId, hints) {
|
|
43
|
+
if (!cliSessionId) {
|
|
44
|
+
return { repository: null, branch: null, isCowork: false };
|
|
45
|
+
}
|
|
46
|
+
const known = this.sessions.get(cliSessionId);
|
|
47
|
+
if (known && !known.tentative) {
|
|
48
|
+
return { repository: known.repository, branch: known.branch, isCowork: known.isCowork };
|
|
49
|
+
}
|
|
50
|
+
const resolved = await this.resolveSession(cliSessionId, hints);
|
|
51
|
+
if (resolved) {
|
|
52
|
+
const isCowork = !resolved.isCodeIntegration;
|
|
53
|
+
this.sessions.set(cliSessionId, {
|
|
54
|
+
repository: resolved.repository,
|
|
55
|
+
branch: resolved.branch,
|
|
56
|
+
isCowork,
|
|
57
|
+
tentative: !resolved.confident
|
|
58
|
+
});
|
|
59
|
+
this.lastResolved = {
|
|
60
|
+
repository: resolved.repository,
|
|
61
|
+
branch: resolved.branch,
|
|
62
|
+
ts: Date.now()
|
|
63
|
+
};
|
|
64
|
+
return { repository: resolved.repository, branch: resolved.branch, isCowork };
|
|
65
|
+
}
|
|
66
|
+
if (known) {
|
|
67
|
+
return { repository: known.repository, branch: known.branch, isCowork: known.isCowork };
|
|
68
|
+
}
|
|
69
|
+
const fallback = this.lastResolved;
|
|
70
|
+
if (fallback && Date.now() - fallback.ts < FALLBACK_TTL_MS) {
|
|
71
|
+
this.sessions.set(cliSessionId, {
|
|
72
|
+
repository: fallback.repository,
|
|
73
|
+
branch: fallback.branch,
|
|
74
|
+
isCowork: false,
|
|
75
|
+
tentative: true
|
|
76
|
+
});
|
|
77
|
+
logger.debug(`${LOG} Applied tentative attribution from last resolved Desktop repository`, {
|
|
78
|
+
cliSessionId,
|
|
79
|
+
repository: fallback.repository,
|
|
80
|
+
branch: fallback.branch
|
|
81
|
+
});
|
|
82
|
+
return { repository: fallback.repository, branch: fallback.branch, isCowork: false };
|
|
83
|
+
}
|
|
84
|
+
return { repository: null, branch: null, isCowork: false };
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Publishes the repository DesktopTelemetryRuntime derived from a polled session file.
|
|
88
|
+
*
|
|
89
|
+
* A confirmed per-request resolution wins, because it reads the real process CWD rather
|
|
90
|
+
* than the session file's recorded directory. A tentative record is only a guess, so the
|
|
91
|
+
* poll result replaces it.
|
|
92
|
+
*/
|
|
93
|
+
recordDiscoveredSession(agentSessionId, repository) {
|
|
94
|
+
// Desktop's own `local_<uuid>` ids never arrive as x-claude-code-session-id.
|
|
95
|
+
if (agentSessionId.startsWith('local_')) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const known = this.sessions.get(agentSessionId);
|
|
99
|
+
if (known && !known.tentative) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
this.sessions.set(agentSessionId, {
|
|
103
|
+
repository: repository || 'Cowork',
|
|
104
|
+
branch: known?.branch ?? null,
|
|
105
|
+
isCowork: known?.isCowork ?? false,
|
|
106
|
+
tentative: false
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
async resolveSession(cliSessionId, hints) {
|
|
110
|
+
const existing = this.inFlight.get(cliSessionId);
|
|
111
|
+
if (existing)
|
|
112
|
+
return existing;
|
|
113
|
+
const resolution = this.resolveSessionUncached(cliSessionId, hints);
|
|
114
|
+
this.inFlight.set(cliSessionId, resolution);
|
|
115
|
+
try {
|
|
116
|
+
return await resolution;
|
|
117
|
+
}
|
|
118
|
+
finally {
|
|
119
|
+
this.inFlight.delete(cliSessionId);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
async resolveSessionUncached(cliSessionId, hints) {
|
|
123
|
+
let workingDir = null;
|
|
124
|
+
// Resolved once and shared by the process-lookup and process-tree-descent steps so a
|
|
125
|
+
// single request never runs lsof twice for the same port.
|
|
126
|
+
const connectingPid = hints.remotePort
|
|
127
|
+
? await getPidForRemotePort(hints.remotePort).catch(() => null)
|
|
128
|
+
: null;
|
|
129
|
+
// Tracks whether this is a claude-code-sessions (Code tab) session. Cowork sessions run
|
|
130
|
+
// without git hooks, so their deltas carry no branch; reporting them as Code integration
|
|
131
|
+
// would split metrics into a {repo, branch} bucket separate from the {repo, ""} one.
|
|
132
|
+
let isCodeIntegration = false;
|
|
133
|
+
// Only the process-tree descent is a guess; the other two strategies key on this session.
|
|
134
|
+
let confident = true;
|
|
135
|
+
// Subprocess lookup — finds the claude process behind the TCP connection. A subprocess
|
|
136
|
+
// carrying --add-dir may belong to the Code tab or to a Cowork session, so the session
|
|
137
|
+
// root decides which.
|
|
138
|
+
if (connectingPid) {
|
|
139
|
+
workingDir = await findWorkingDirViaProcess(connectingPid).catch(() => null);
|
|
140
|
+
if (workingDir) {
|
|
141
|
+
const sessionRes = await findWorkingDirForSession(cliSessionId).catch(() => null);
|
|
142
|
+
isCodeIntegration = sessionRes ? sessionRes.isCodeIntegration : true;
|
|
143
|
+
logger.debug(`${LOG} Resolved working dir via process lookup`, {
|
|
144
|
+
cliSessionId, remotePort: hints.remotePort, workingDir, isCodeIntegration
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
logger.debug(`${LOG} Process lookup returned no workingDir`, {
|
|
149
|
+
cliSessionId, connectingPid, remotePort: hints.remotePort
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
logger.debug(`${LOG} No connectingPid found`, {
|
|
155
|
+
cliSessionId, remotePort: hints.remotePort
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
// Session-file scan — succeeds from the second message onward, once Desktop has written
|
|
159
|
+
// the session file to disk.
|
|
160
|
+
if (!workingDir) {
|
|
161
|
+
const resolved = await findWorkingDirForSession(cliSessionId).catch(() => null);
|
|
162
|
+
if (resolved) {
|
|
163
|
+
workingDir = resolved.workingDir;
|
|
164
|
+
isCodeIntegration = resolved.isCodeIntegration;
|
|
165
|
+
logger.debug(`${LOG} Resolved working dir via session file scan`, {
|
|
166
|
+
cliSessionId, workingDir, isCodeIntegration
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
logger.debug(`${LOG} Session file scan returned no workingDir`, { cliSessionId });
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Process-tree descent — for orchestrator requests whose connecting process is the
|
|
174
|
+
// Desktop renderer (no --add-dir), identified by beta=true. Desktop spawns the claude
|
|
175
|
+
// subprocess before the orchestrator call, so it is already visible in ps.
|
|
176
|
+
if (!workingDir && connectingPid && hints.url?.includes('beta=true')) {
|
|
177
|
+
workingDir = await findWorkingDirForDesktopDirectRequest(connectingPid).catch(() => null);
|
|
178
|
+
if (workingDir) {
|
|
179
|
+
isCodeIntegration = true;
|
|
180
|
+
confident = false;
|
|
181
|
+
logger.debug(`${LOG} Resolved working dir via process tree descent`, {
|
|
182
|
+
cliSessionId, remotePort: hints.remotePort, workingDir
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
logger.debug(`${LOG} Process tree descent returned no workingDir`, {
|
|
187
|
+
cliSessionId, connectingPid, remotePort: hints.remotePort
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
if (!workingDir)
|
|
192
|
+
return null;
|
|
193
|
+
const [repository, branch] = await Promise.all([
|
|
194
|
+
resolveRepositoryName(workingDir),
|
|
195
|
+
detectGitBranch(workingDir)
|
|
196
|
+
]);
|
|
197
|
+
logger.debug(`${LOG} Resolved repository via targeted lookup`, {
|
|
198
|
+
cliSessionId, workingDir, repository, branch, isCodeIntegration, confident
|
|
199
|
+
});
|
|
200
|
+
return { repository, branch: branch ?? null, isCodeIntegration, confident };
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
async function findWorkingDirForSession(cliSessionId) {
|
|
204
|
+
const roots = [
|
|
205
|
+
{ path: getClaudeDesktopLocalSessionsRoot(), isCode: false },
|
|
206
|
+
{ path: getClaudeDesktopCodeSessionsRoot(), isCode: true }
|
|
207
|
+
];
|
|
208
|
+
for (const { path: root, isCode } of roots) {
|
|
209
|
+
if (!existsSync(root))
|
|
210
|
+
continue;
|
|
211
|
+
const files = await walk(root);
|
|
212
|
+
for (const file of files) {
|
|
213
|
+
try {
|
|
214
|
+
const json = JSON.parse(await readFile(file, 'utf-8'));
|
|
215
|
+
if (json['cliSessionId'] !== cliSessionId)
|
|
216
|
+
continue;
|
|
217
|
+
const folders = json['userSelectedFolders'];
|
|
218
|
+
const workingDir = json['originCwd']
|
|
219
|
+
?? json['worktreePath']
|
|
220
|
+
?? folders?.[0]
|
|
221
|
+
?? json['cwd'];
|
|
222
|
+
if (!workingDir)
|
|
223
|
+
return null;
|
|
224
|
+
return { workingDir, isCodeIntegration: isCode };
|
|
225
|
+
}
|
|
226
|
+
catch { /* skip unreadable files */ }
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return null;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* PID owning the TCP connection from `remotePort`. Shared by the process-lookup and
|
|
233
|
+
* process-tree-descent steps. macOS only; returns null on any failure.
|
|
234
|
+
*/
|
|
235
|
+
async function getPidForRemotePort(remotePort) {
|
|
236
|
+
if (process.platform !== 'darwin')
|
|
237
|
+
return null;
|
|
238
|
+
try {
|
|
239
|
+
const { stdout } = await execAsync(`lsof -n -P -i 4TCP@127.0.0.1:${remotePort} 2>/dev/null`, { timeout: 2000 });
|
|
240
|
+
const ownPid = process.pid;
|
|
241
|
+
for (const line of stdout.split('\n')) {
|
|
242
|
+
const parts = line.trim().split(/\s+/);
|
|
243
|
+
if (parts.length < 2 || parts[1] === 'PID')
|
|
244
|
+
continue;
|
|
245
|
+
const pid = parseInt(parts[1], 10);
|
|
246
|
+
if (!pid || pid === ownPid)
|
|
247
|
+
continue;
|
|
248
|
+
if (line.includes(`127.0.0.1:${remotePort}->`))
|
|
249
|
+
return pid;
|
|
250
|
+
}
|
|
251
|
+
return null;
|
|
252
|
+
}
|
|
253
|
+
catch {
|
|
254
|
+
return null;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Working directory of the subprocess owning `pid`, read from its --add-dir flag and
|
|
259
|
+
* falling back to the OS-level cwd. macOS only; returns null on any failure.
|
|
260
|
+
*/
|
|
261
|
+
async function findWorkingDirViaProcess(pid) {
|
|
262
|
+
if (process.platform !== 'darwin')
|
|
263
|
+
return null;
|
|
264
|
+
try {
|
|
265
|
+
const { stdout } = await execAsync(`ps -p ${pid} -o args=`, { timeout: 2000 });
|
|
266
|
+
// Lazy match stops at the first subsequent -- flag, supporting paths with spaces.
|
|
267
|
+
const match = stdout.match(/--add-dir\s+(.+?)(?=\s+--|$)/);
|
|
268
|
+
const dir = match?.[1]?.trim();
|
|
269
|
+
// Reject relative paths — the Desktop renderer uses --add-dir for plugin loading.
|
|
270
|
+
if (dir?.startsWith('/'))
|
|
271
|
+
return dir;
|
|
272
|
+
// Code tab subprocesses launch from the project directory but carry no --add-dir flag.
|
|
273
|
+
// Reject launcher paths (home, Library, app bundles) so Cowork sessions with a
|
|
274
|
+
// non-project cwd are not misattributed.
|
|
275
|
+
const { stdout: lsofOut } = await execAsync(`lsof -a -d cwd -p ${pid} -Fn`, { timeout: 2000 });
|
|
276
|
+
const cwd = lsofOut.split('\n').find(l => l.startsWith('n'))?.slice(1).trim();
|
|
277
|
+
if (!isProjectCwd(cwd))
|
|
278
|
+
return null;
|
|
279
|
+
return cwd;
|
|
280
|
+
}
|
|
281
|
+
catch {
|
|
282
|
+
return null;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Working directory for a Desktop orchestrator request. Walks up from the renderer to the
|
|
287
|
+
* Claude app root, then descends to a subprocess that reveals a project directory.
|
|
288
|
+
* macOS only; returns null on any failure.
|
|
289
|
+
*/
|
|
290
|
+
async function findWorkingDirForDesktopDirectRequest(connectingPid) {
|
|
291
|
+
if (process.platform !== 'darwin')
|
|
292
|
+
return null;
|
|
293
|
+
try {
|
|
294
|
+
const { stdout } = await execAsync('ps -axww -o pid,ppid,args', { timeout: 2000 });
|
|
295
|
+
// Build the process map and the children index in one pass.
|
|
296
|
+
const processes = new Map();
|
|
297
|
+
const children = new Map();
|
|
298
|
+
for (const line of stdout.split('\n').slice(1)) {
|
|
299
|
+
const m = line.trim().match(/^(\d+)\s+(\d+)\s+(.*)/);
|
|
300
|
+
if (!m)
|
|
301
|
+
continue;
|
|
302
|
+
const pid = parseInt(m[1], 10);
|
|
303
|
+
const ppid = parseInt(m[2], 10);
|
|
304
|
+
if (isNaN(pid) || isNaN(ppid))
|
|
305
|
+
continue;
|
|
306
|
+
processes.set(pid, { ppid, args: m[3].trim() });
|
|
307
|
+
if (!children.has(ppid))
|
|
308
|
+
children.set(ppid, []);
|
|
309
|
+
children.get(ppid).push(pid);
|
|
310
|
+
}
|
|
311
|
+
// Walk up from the Desktop renderer to the Claude app root. The Claude.app test runs
|
|
312
|
+
// before the ppid<=1 break so the main app process (PPID=1) is still considered.
|
|
313
|
+
let claudeRootPid = connectingPid;
|
|
314
|
+
let pid = connectingPid;
|
|
315
|
+
for (let depth = 0; depth < 10; depth++) {
|
|
316
|
+
const proc = processes.get(pid);
|
|
317
|
+
if (!proc)
|
|
318
|
+
break;
|
|
319
|
+
if (/Claude\.app/.test(proc.args))
|
|
320
|
+
claudeRootPid = pid;
|
|
321
|
+
if (proc.ppid <= 1)
|
|
322
|
+
break;
|
|
323
|
+
pid = proc.ppid;
|
|
324
|
+
}
|
|
325
|
+
// Descend from the Claude root: --add-dir (Cowork with a folder) or process cwd (Code tab).
|
|
326
|
+
const queue = [claudeRootPid];
|
|
327
|
+
const visited = new Set();
|
|
328
|
+
while (queue.length > 0) {
|
|
329
|
+
const cur = queue.shift();
|
|
330
|
+
if (visited.has(cur))
|
|
331
|
+
continue;
|
|
332
|
+
visited.add(cur);
|
|
333
|
+
const proc = processes.get(cur);
|
|
334
|
+
if (proc?.args.includes('--add-dir')) {
|
|
335
|
+
const m = proc.args.match(/--add-dir\s+(.+?)(?=\s+--|$)/);
|
|
336
|
+
const dir = m?.[1]?.trim();
|
|
337
|
+
if (dir?.startsWith('/'))
|
|
338
|
+
return dir;
|
|
339
|
+
}
|
|
340
|
+
else if (proc?.args.includes('--output-format stream-json')) {
|
|
341
|
+
try {
|
|
342
|
+
const { stdout: cwdOut } = await execAsync(`lsof -a -d cwd -p ${cur} -Fn`, { timeout: 1000 });
|
|
343
|
+
const cwd = cwdOut.split('\n').find(l => l.startsWith('n'))?.slice(1).trim();
|
|
344
|
+
logger.debug(`${LOG} Subprocess cwd candidate`, { pid: cur, cwd: cwd ?? null });
|
|
345
|
+
if (isProjectCwd(cwd))
|
|
346
|
+
return cwd;
|
|
347
|
+
}
|
|
348
|
+
catch (e) {
|
|
349
|
+
logger.debug(`${LOG} Subprocess lsof failed`, { pid: cur, error: String(e) });
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
for (const child of (children.get(cur) ?? [])) {
|
|
353
|
+
if (!visited.has(child))
|
|
354
|
+
queue.push(child);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
return null;
|
|
358
|
+
}
|
|
359
|
+
catch {
|
|
360
|
+
return null;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
/** Rejects launcher directories that would misattribute a session to a non-project path. */
|
|
364
|
+
function isProjectCwd(cwd) {
|
|
365
|
+
if (!cwd?.startsWith('/'))
|
|
366
|
+
return false;
|
|
367
|
+
const home = process.env.HOME ?? '';
|
|
368
|
+
return cwd !== home && !cwd.includes('/Library/') && !cwd.includes('.app/Contents');
|
|
369
|
+
}
|
|
370
|
+
//# sourceMappingURL=DesktopRepositoryResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DesktopRepositoryResolver.js","sourceRoot":"","sources":["../../../src/telemetry/runtime/DesktopRepositoryResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ export declare class DesktopTelemetryRuntime {
|
|
|
12
12
|
constructor(adapter: LocalTelemetryAdapter, config: DesktopTelemetryRuntimeConfig);
|
|
13
13
|
start(): Promise<void>;
|
|
14
14
|
stop(): Promise<void>;
|
|
15
|
+
triggerPoll(): Promise<void>;
|
|
15
16
|
private poll;
|
|
16
17
|
private ensureSession;
|
|
17
18
|
private processSession;
|
|
@@ -1 +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;
|
|
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;AAWtC,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;IAiBrB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;YAKpB,IAAI;YA+DJ,aAAa;YA+Eb,cAAc;YAgBd,eAAe;YAsDf,sBAAsB;YAiCtB,sBAAsB;YA2CtB,oBAAoB;CAwCnC"}
|