@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.
Files changed (147) hide show
  1. package/dist/agents/plugins/claude/claude.plugin.d.ts +1 -1
  2. package/dist/agents/plugins/claude/claude.plugin.js +2 -2
  3. package/dist/agents/plugins/claude/claude.session.d.ts +17 -1
  4. package/dist/agents/plugins/claude/claude.session.d.ts.map +1 -1
  5. package/dist/agents/plugins/claude/claude.session.js +4 -0
  6. package/dist/agents/plugins/claude/claude.session.js.map +1 -1
  7. package/dist/agents/plugins/opencode/opencode-dynamic-models.d.ts.map +1 -1
  8. package/dist/agents/plugins/opencode/opencode-dynamic-models.js +3 -4
  9. package/dist/agents/plugins/opencode/opencode-dynamic-models.js.map +1 -1
  10. package/dist/agents/plugins/pi/pi.models.d.ts.map +1 -1
  11. package/dist/agents/plugins/pi/pi.models.js +3 -3
  12. package/dist/agents/plugins/pi/pi.models.js.map +1 -1
  13. package/dist/bin/proxy-daemon.js +8 -1
  14. package/dist/bin/proxy-daemon.js.map +1 -1
  15. package/dist/cli/commands/assistants/constants.d.ts +4 -0
  16. package/dist/cli/commands/assistants/constants.d.ts.map +1 -1
  17. package/dist/cli/commands/assistants/constants.js +4 -0
  18. package/dist/cli/commands/assistants/constants.js.map +1 -1
  19. package/dist/cli/commands/assistants/setup/data.d.ts +1 -0
  20. package/dist/cli/commands/assistants/setup/data.d.ts.map +1 -1
  21. package/dist/cli/commands/assistants/setup/data.js +55 -10
  22. package/dist/cli/commands/assistants/setup/data.js.map +1 -1
  23. package/dist/cli/commands/assistants/setup/helpers.d.ts +1 -1
  24. package/dist/cli/commands/assistants/setup/helpers.d.ts.map +1 -1
  25. package/dist/cli/commands/assistants/setup/helpers.js +2 -5
  26. package/dist/cli/commands/assistants/setup/helpers.js.map +1 -1
  27. package/dist/cli/commands/assistants/setup/index.d.ts +12 -0
  28. package/dist/cli/commands/assistants/setup/index.d.ts.map +1 -1
  29. package/dist/cli/commands/assistants/setup/index.js +148 -20
  30. package/dist/cli/commands/assistants/setup/index.js.map +1 -1
  31. package/dist/cli/commands/profile/display.d.ts +5 -1
  32. package/dist/cli/commands/profile/display.d.ts.map +1 -1
  33. package/dist/cli/commands/profile/display.js +5 -1
  34. package/dist/cli/commands/profile/display.js.map +1 -1
  35. package/dist/cli/commands/profile/index.d.ts.map +1 -1
  36. package/dist/cli/commands/profile/index.js +7 -4
  37. package/dist/cli/commands/profile/index.js.map +1 -1
  38. package/dist/cli/commands/proxy/connect-orchestrator.d.ts.map +1 -1
  39. package/dist/cli/commands/proxy/connect-orchestrator.js +3 -4
  40. package/dist/cli/commands/proxy/connect-orchestrator.js.map +1 -1
  41. package/dist/cli/commands/proxy/connectors/desktop.d.ts +2 -3
  42. package/dist/cli/commands/proxy/connectors/desktop.d.ts.map +1 -1
  43. package/dist/cli/commands/proxy/connectors/desktop.js +9 -25
  44. package/dist/cli/commands/proxy/connectors/desktop.js.map +1 -1
  45. package/dist/cli/commands/proxy/connectors/model-name-resolver.d.ts +19 -0
  46. package/dist/cli/commands/proxy/connectors/model-name-resolver.d.ts.map +1 -0
  47. package/dist/cli/commands/proxy/connectors/model-name-resolver.js +126 -0
  48. package/dist/cli/commands/proxy/connectors/model-name-resolver.js.map +1 -0
  49. package/dist/cli/commands/proxy/connectors/tenant-catalog.d.ts +11 -0
  50. package/dist/cli/commands/proxy/connectors/tenant-catalog.d.ts.map +1 -0
  51. package/dist/cli/commands/proxy/connectors/tenant-catalog.js +108 -0
  52. package/dist/cli/commands/proxy/connectors/tenant-catalog.js.map +1 -0
  53. package/dist/cli/commands/proxy/connectors/vscode-claude-code.d.ts.map +1 -1
  54. package/dist/cli/commands/proxy/connectors/vscode-claude-code.js +49 -19
  55. package/dist/cli/commands/proxy/connectors/vscode-claude-code.js.map +1 -1
  56. package/dist/cli/commands/proxy/connectors/vscode-models.d.ts +3 -3
  57. package/dist/cli/commands/proxy/connectors/vscode-models.d.ts.map +1 -1
  58. package/dist/cli/commands/proxy/connectors/vscode-models.js +28 -28
  59. package/dist/cli/commands/proxy/connectors/vscode-models.js.map +1 -1
  60. package/dist/cli/commands/proxy/connectors/vscode.d.ts +3 -2
  61. package/dist/cli/commands/proxy/connectors/vscode.d.ts.map +1 -1
  62. package/dist/cli/commands/proxy/connectors/vscode.js +78 -39
  63. package/dist/cli/commands/proxy/connectors/vscode.js.map +1 -1
  64. package/dist/cli/commands/shared/headless.d.ts +69 -0
  65. package/dist/cli/commands/shared/headless.d.ts.map +1 -0
  66. package/dist/cli/commands/shared/headless.js +83 -0
  67. package/dist/cli/commands/shared/headless.js.map +1 -0
  68. package/dist/cli/commands/shared/helpers.d.ts +21 -0
  69. package/dist/cli/commands/shared/helpers.d.ts.map +1 -1
  70. package/dist/cli/commands/shared/helpers.js +73 -1
  71. package/dist/cli/commands/shared/helpers.js.map +1 -1
  72. package/dist/cli/commands/shared/identifier-resolution.d.ts +23 -0
  73. package/dist/cli/commands/shared/identifier-resolution.d.ts.map +1 -0
  74. package/dist/cli/commands/shared/identifier-resolution.js +55 -0
  75. package/dist/cli/commands/shared/identifier-resolution.js.map +1 -0
  76. package/dist/cli/commands/skills/setup/data.d.ts +3 -2
  77. package/dist/cli/commands/skills/setup/data.d.ts.map +1 -1
  78. package/dist/cli/commands/skills/setup/data.js +75 -13
  79. package/dist/cli/commands/skills/setup/data.js.map +1 -1
  80. package/dist/cli/commands/skills/setup/helpers.d.ts +1 -1
  81. package/dist/cli/commands/skills/setup/helpers.d.ts.map +1 -1
  82. package/dist/cli/commands/skills/setup/helpers.js +2 -5
  83. package/dist/cli/commands/skills/setup/helpers.js.map +1 -1
  84. package/dist/cli/commands/skills/setup/index.d.ts +17 -1
  85. package/dist/cli/commands/skills/setup/index.d.ts.map +1 -1
  86. package/dist/cli/commands/skills/setup/index.js +190 -19
  87. package/dist/cli/commands/skills/setup/index.js.map +1 -1
  88. package/dist/providers/plugins/sso/proxy/plugins/claude-model-resolver.d.ts +41 -0
  89. package/dist/providers/plugins/sso/proxy/plugins/claude-model-resolver.d.ts.map +1 -0
  90. package/dist/providers/plugins/sso/proxy/plugins/claude-model-resolver.js +115 -0
  91. package/dist/providers/plugins/sso/proxy/plugins/claude-model-resolver.js.map +1 -0
  92. package/dist/providers/plugins/sso/proxy/plugins/claude-request-normalizer.plugin.d.ts.map +1 -1
  93. package/dist/providers/plugins/sso/proxy/plugins/claude-request-normalizer.plugin.js +101 -7
  94. package/dist/providers/plugins/sso/proxy/plugins/claude-request-normalizer.plugin.js.map +1 -1
  95. package/dist/providers/plugins/sso/proxy/plugins/header-injection.plugin.d.ts +4 -0
  96. package/dist/providers/plugins/sso/proxy/plugins/header-injection.plugin.d.ts.map +1 -1
  97. package/dist/providers/plugins/sso/proxy/plugins/header-injection.plugin.js +28 -3
  98. package/dist/providers/plugins/sso/proxy/plugins/header-injection.plugin.js.map +1 -1
  99. package/dist/providers/plugins/sso/proxy/proxy-types.d.ts +5 -0
  100. package/dist/providers/plugins/sso/proxy/proxy-types.d.ts.map +1 -1
  101. package/dist/providers/plugins/sso/proxy/sso.proxy.d.ts.map +1 -1
  102. package/dist/providers/plugins/sso/proxy/sso.proxy.js +1 -0
  103. package/dist/providers/plugins/sso/proxy/sso.proxy.js.map +1 -1
  104. package/dist/providers/plugins/sso/session/processors/metrics/metrics-aggregator.d.ts.map +1 -1
  105. package/dist/providers/plugins/sso/session/processors/metrics/metrics-aggregator.js +11 -2
  106. package/dist/providers/plugins/sso/session/processors/metrics/metrics-aggregator.js.map +1 -1
  107. package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.d.ts.map +1 -1
  108. package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.js +2 -1
  109. package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.js.map +1 -1
  110. package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.d.ts +1 -0
  111. package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.d.ts.map +1 -1
  112. package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.js +30 -6
  113. package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.js.map +1 -1
  114. package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.d.ts.map +1 -1
  115. package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.js +33 -3
  116. package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.js.map +1 -1
  117. package/dist/telemetry/runtime/DesktopRepositoryResolver.d.ts +58 -0
  118. package/dist/telemetry/runtime/DesktopRepositoryResolver.d.ts.map +1 -0
  119. package/dist/telemetry/runtime/DesktopRepositoryResolver.js +370 -0
  120. package/dist/telemetry/runtime/DesktopRepositoryResolver.js.map +1 -0
  121. package/dist/telemetry/runtime/DesktopTelemetryRuntime.d.ts +1 -0
  122. package/dist/telemetry/runtime/DesktopTelemetryRuntime.d.ts.map +1 -1
  123. package/dist/telemetry/runtime/DesktopTelemetryRuntime.js +89 -6
  124. package/dist/telemetry/runtime/DesktopTelemetryRuntime.js.map +1 -1
  125. package/dist/telemetry/runtime/types.d.ts +2 -0
  126. package/dist/telemetry/runtime/types.d.ts.map +1 -1
  127. package/dist/utils/auth.d.ts +13 -2
  128. package/dist/utils/auth.d.ts.map +1 -1
  129. package/dist/utils/auth.js +7 -3
  130. package/dist/utils/auth.js.map +1 -1
  131. package/dist/utils/config.d.ts +21 -0
  132. package/dist/utils/config.d.ts.map +1 -1
  133. package/dist/utils/config.js +69 -7
  134. package/dist/utils/config.js.map +1 -1
  135. package/dist/utils/errors.d.ts +14 -0
  136. package/dist/utils/errors.d.ts.map +1 -1
  137. package/dist/utils/errors.js +25 -0
  138. package/dist/utils/errors.js.map +1 -1
  139. package/dist/utils/paths.d.ts +2 -2
  140. package/dist/utils/paths.d.ts.map +1 -1
  141. package/dist/utils/paths.js +11 -9
  142. package/dist/utils/paths.js.map +1 -1
  143. package/dist/utils/processes.d.ts +12 -0
  144. package/dist/utils/processes.d.ts.map +1 -1
  145. package/dist/utils/processes.js +15 -0
  146. package/dist/utils/processes.js.map +1 -1
  147. 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 = join(transcriptDir, 'audit.jsonl');
132
+ const auditTranscriptPath = resolveAuditTranscriptPath(metadataPath, metadata.sessionId);
108
133
  const claudeTranscriptPath = await resolveClaudeTranscriptPath({
109
134
  ...companionMetadata,
110
135
  ...metadata
111
136
  });
112
- const transcriptPath = existsSync(auditTranscriptPath)
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":"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"}
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;AA6EpF,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,+BAA+B,EAC3C,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,aAAa,CAAC,CAiCxB"}
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 parsed = await new ClaudeSessionAdapter(ClaudePluginMetadata).parseSessionFile(discovered.transcriptPath, codemieSessionId);
57
- backfillTimestampsFromAuditLog(parsed.messages);
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":"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"}
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;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"}
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"}