@codemieai/code 0.0.56 → 0.0.58

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/README.md +124 -19
  2. package/bin/proxy-daemon.js +10 -0
  3. package/dist/agents/core/AgentCLI.d.ts.map +1 -1
  4. package/dist/agents/core/AgentCLI.js +17 -0
  5. package/dist/agents/core/AgentCLI.js.map +1 -1
  6. package/dist/agents/core/session/SessionStore.d.ts +4 -0
  7. package/dist/agents/core/session/SessionStore.d.ts.map +1 -1
  8. package/dist/agents/core/session/SessionStore.js +40 -1
  9. package/dist/agents/core/session/SessionStore.js.map +1 -1
  10. package/dist/agents/core/session/types.d.ts +7 -0
  11. package/dist/agents/core/session/types.d.ts.map +1 -1
  12. package/dist/agents/plugins/claude/plugin/.claude-plugin/plugin.json +1 -1
  13. package/dist/agents/plugins/claude/plugin/skills/msgraph/SKILL.md +10 -8
  14. package/dist/agents/plugins/claude/plugin/skills/msgraph/scripts/msgraph.js +297 -149
  15. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts +1 -0
  16. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts.map +1 -1
  17. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js +32 -20
  18. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js.map +1 -1
  19. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.d.ts +2 -0
  20. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.d.ts.map +1 -1
  21. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.js +24 -1
  22. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.js.map +1 -1
  23. package/dist/bin/proxy-daemon.d.ts +2 -0
  24. package/dist/bin/proxy-daemon.d.ts.map +1 -0
  25. package/dist/bin/proxy-daemon.js +138 -0
  26. package/dist/bin/proxy-daemon.js.map +1 -0
  27. package/dist/cli/commands/proxy/connectors/desktop.d.ts +55 -0
  28. package/dist/cli/commands/proxy/connectors/desktop.d.ts.map +1 -0
  29. package/dist/cli/commands/proxy/connectors/desktop.js +175 -0
  30. package/dist/cli/commands/proxy/connectors/desktop.js.map +1 -0
  31. package/dist/cli/commands/proxy/daemon-manager.d.ts +35 -0
  32. package/dist/cli/commands/proxy/daemon-manager.d.ts.map +1 -0
  33. package/dist/cli/commands/proxy/daemon-manager.js +107 -0
  34. package/dist/cli/commands/proxy/daemon-manager.js.map +1 -0
  35. package/dist/cli/commands/proxy/index.d.ts +3 -0
  36. package/dist/cli/commands/proxy/index.d.ts.map +1 -0
  37. package/dist/cli/commands/proxy/index.js +221 -0
  38. package/dist/cli/commands/proxy/index.js.map +1 -0
  39. package/dist/cli/commands/proxy/inspect-desktop.d.ts +28 -0
  40. package/dist/cli/commands/proxy/inspect-desktop.d.ts.map +1 -0
  41. package/dist/cli/commands/proxy/inspect-desktop.js +134 -0
  42. package/dist/cli/commands/proxy/inspect-desktop.js.map +1 -0
  43. package/dist/cli/index.js +12 -0
  44. package/dist/cli/index.js.map +1 -1
  45. package/dist/providers/plugins/sso/proxy/plugins/gateway-key.plugin.d.ts +9 -0
  46. package/dist/providers/plugins/sso/proxy/plugins/gateway-key.plugin.d.ts.map +1 -0
  47. package/dist/providers/plugins/sso/proxy/plugins/gateway-key.plugin.js +36 -0
  48. package/dist/providers/plugins/sso/proxy/plugins/gateway-key.plugin.js.map +1 -0
  49. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts +2 -1
  50. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts.map +1 -1
  51. package/dist/providers/plugins/sso/proxy/plugins/index.js +3 -1
  52. package/dist/providers/plugins/sso/proxy/plugins/index.js.map +1 -1
  53. package/dist/providers/plugins/sso/proxy/proxy-types.d.ts +4 -0
  54. package/dist/providers/plugins/sso/proxy/proxy-types.d.ts.map +1 -1
  55. package/dist/providers/plugins/sso/proxy/sso.proxy.d.ts.map +1 -1
  56. package/dist/providers/plugins/sso/proxy/sso.proxy.js +4 -3
  57. package/dist/providers/plugins/sso/proxy/sso.proxy.js.map +1 -1
  58. package/dist/telemetry/clients/claude-desktop/ClaudeDesktopTelemetryAdapter.d.ts +15 -0
  59. package/dist/telemetry/clients/claude-desktop/ClaudeDesktopTelemetryAdapter.d.ts.map +1 -0
  60. package/dist/telemetry/clients/claude-desktop/ClaudeDesktopTelemetryAdapter.js +117 -0
  61. package/dist/telemetry/clients/claude-desktop/ClaudeDesktopTelemetryAdapter.js.map +1 -0
  62. package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.d.ts +3 -0
  63. package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.d.ts.map +1 -0
  64. package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.js +138 -0
  65. package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.js.map +1 -0
  66. package/dist/telemetry/clients/claude-desktop/claude-desktop.metrics.d.ts +4 -0
  67. package/dist/telemetry/clients/claude-desktop/claude-desktop.metrics.d.ts.map +1 -0
  68. package/dist/telemetry/clients/claude-desktop/claude-desktop.metrics.js +53 -0
  69. package/dist/telemetry/clients/claude-desktop/claude-desktop.metrics.js.map +1 -0
  70. package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.d.ts +4 -0
  71. package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.d.ts.map +1 -0
  72. package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.js +60 -0
  73. package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.js.map +1 -0
  74. package/dist/telemetry/clients/claude-desktop/claude-desktop.paths.d.ts +4 -0
  75. package/dist/telemetry/clients/claude-desktop/claude-desktop.paths.d.ts.map +1 -0
  76. package/dist/telemetry/clients/claude-desktop/claude-desktop.paths.js +19 -0
  77. package/dist/telemetry/clients/claude-desktop/claude-desktop.paths.js.map +1 -0
  78. package/dist/telemetry/runtime/DesktopTelemetryRuntime.d.ts +23 -0
  79. package/dist/telemetry/runtime/DesktopTelemetryRuntime.d.ts.map +1 -0
  80. package/dist/telemetry/runtime/DesktopTelemetryRuntime.js +243 -0
  81. package/dist/telemetry/runtime/DesktopTelemetryRuntime.js.map +1 -0
  82. package/dist/telemetry/runtime/checkpoints.d.ts +10 -0
  83. package/dist/telemetry/runtime/checkpoints.d.ts.map +1 -0
  84. package/dist/telemetry/runtime/checkpoints.js +8 -0
  85. package/dist/telemetry/runtime/checkpoints.js.map +1 -0
  86. package/dist/telemetry/runtime/types.d.ts +32 -0
  87. package/dist/telemetry/runtime/types.d.ts.map +1 -0
  88. package/dist/telemetry/runtime/types.js +2 -0
  89. package/dist/telemetry/runtime/types.js.map +1 -0
  90. package/dist/utils/processes.d.ts +6 -0
  91. package/dist/utils/processes.d.ts.map +1 -1
  92. package/dist/utils/processes.js +13 -3
  93. package/dist/utils/processes.js.map +1 -1
  94. package/package.json +4 -2
  95. package/scripts/README.md +15 -1
  96. package/scripts/prepare-install-artifacts.mjs +66 -0
  97. package/scripts/test-desktop-telemetry.js +229 -0
  98. package/scripts/test-proxy-endpoint.js +173 -0
@@ -0,0 +1,175 @@
1
+ import { readFile, writeFile, mkdir } from 'node:fs/promises';
2
+ import { existsSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { randomUUID } from 'node:crypto';
5
+ import { getClaudeDesktopBaseDir } from '../../../../telemetry/clients/claude-desktop/claude-desktop.paths.js';
6
+ const INFERENCE_KEYS = [
7
+ 'inferenceProvider',
8
+ 'inferenceGatewayBaseUrl',
9
+ 'inferenceGatewayApiKey',
10
+ 'inferenceGatewayAuthScheme',
11
+ ];
12
+ /**
13
+ * Curated list of Claude models we expose by default.
14
+ *
15
+ * Each entry is matched against the gateway's `/v1/models` response either as
16
+ * an exact ID or as `<entry>-<YYYYMMDD>` (the dated variant). The actual
17
+ * resolved ID is what gets written to the Desktop config so the gateway
18
+ * receives a model name it has registered.
19
+ */
20
+ export const PREFERRED_CLAUDE_MODELS = [
21
+ 'claude-opus-4-7',
22
+ 'claude-opus-4-6',
23
+ 'claude-sonnet-4-6',
24
+ 'claude-haiku-4-5',
25
+ ];
26
+ /**
27
+ * Fetch the model list from the gateway's `/v1/models` endpoint and return
28
+ * the IDs of usable Claude-family models (excludes `-vertex` aliases since
29
+ * the gateway already picks the right backend for the canonical names).
30
+ *
31
+ * Returns [] if the gateway is unreachable or returns a non-OK response.
32
+ */
33
+ export async function fetchClaudeModels(proxyUrl, gatewayKey) {
34
+ try {
35
+ const response = await fetch(new URL('/v1/models', proxyUrl), {
36
+ headers: { Authorization: `Bearer ${gatewayKey}` },
37
+ });
38
+ if (!response.ok)
39
+ return [];
40
+ const json = await response.json();
41
+ const ids = (json.data ?? [])
42
+ .map((m) => m.id)
43
+ .filter((id) => typeof id === 'string');
44
+ return ids
45
+ .filter((id) => /^claude-/i.test(id))
46
+ .filter((id) => !/-vertex$/i.test(id));
47
+ }
48
+ catch {
49
+ return [];
50
+ }
51
+ }
52
+ /**
53
+ * Resolve each entry in {@link PREFERRED_CLAUDE_MODELS} against the gateway's
54
+ * `/v1/models` response. For each preferred name, prefer the exact ID; fall
55
+ * back to the dated variant `<preferred>-YYYYMMDD` (latest if multiple).
56
+ * Entries with no available match are dropped silently.
57
+ *
58
+ * Preserves the order of {@link PREFERRED_CLAUDE_MODELS}.
59
+ */
60
+ export function selectPreferredClaudeModels(available, preferred = PREFERRED_CLAUDE_MODELS) {
61
+ const availableSet = new Set(available);
62
+ const resolved = [];
63
+ for (const name of preferred) {
64
+ if (availableSet.has(name)) {
65
+ resolved.push(name);
66
+ continue;
67
+ }
68
+ const datePrefix = `${name}-`;
69
+ const dated = available
70
+ .filter((id) => id.startsWith(datePrefix))
71
+ .filter((id) => /^\d{6,10}$/.test(id.slice(datePrefix.length)))
72
+ .sort()
73
+ .pop();
74
+ if (dated)
75
+ resolved.push(dated);
76
+ }
77
+ return resolved;
78
+ }
79
+ export function buildGatewayConfig(proxyUrl, gatewayKey) {
80
+ return {
81
+ inferenceProvider: 'gateway',
82
+ inferenceGatewayBaseUrl: proxyUrl,
83
+ inferenceGatewayApiKey: gatewayKey,
84
+ inferenceGatewayAuthScheme: 'bearer',
85
+ };
86
+ }
87
+ /**
88
+ * Returns the base directory where Claude Desktop (3P) stores its config.
89
+ * macOS: ~/Library/Application Support/Claude-3p
90
+ * Windows: %APPDATA%\Claude-3p
91
+ */
92
+ export function getDesktopBaseDir() {
93
+ return getClaudeDesktopBaseDir();
94
+ }
95
+ /**
96
+ * Returns the path to the active inference config JSON file under configLibrary/.
97
+ * If `_meta.json` doesn't exist or has no `appliedId`, returns the path that
98
+ * a freshly-generated UUID would use; the caller is responsible for creating
99
+ * `_meta.json` to register it.
100
+ */
101
+ export async function getDesktopConfigPath(baseDir = getDesktopBaseDir()) {
102
+ const libDir = join(baseDir, 'configLibrary');
103
+ const metaPath = join(libDir, '_meta.json');
104
+ if (existsSync(metaPath)) {
105
+ try {
106
+ const meta = JSON.parse(await readFile(metaPath, 'utf-8'));
107
+ if (meta.appliedId)
108
+ return join(libDir, `${meta.appliedId}.json`);
109
+ }
110
+ catch {
111
+ // Corrupt meta — fall through to fresh UUID
112
+ }
113
+ }
114
+ return join(libDir, `${randomUUID()}.json`);
115
+ }
116
+ /**
117
+ * Write/merge the inference gateway settings into Claude Desktop's
118
+ * `configLibrary/<UUID>.json` and update `_meta.json` so the app picks them up.
119
+ *
120
+ * Preserves all non-inference keys in the existing config file.
121
+ * Returns the absolute path of the config file written.
122
+ */
123
+ export async function writeDesktopConfig(proxyUrl, gatewayKey, baseDir = getDesktopBaseDir()) {
124
+ const libDir = join(baseDir, 'configLibrary');
125
+ if (!existsSync(libDir)) {
126
+ await mkdir(libDir, { recursive: true });
127
+ }
128
+ const metaPath = join(libDir, '_meta.json');
129
+ let meta = {};
130
+ if (existsSync(metaPath)) {
131
+ try {
132
+ meta = JSON.parse(await readFile(metaPath, 'utf-8'));
133
+ }
134
+ catch {
135
+ meta = {};
136
+ }
137
+ }
138
+ const configId = meta.appliedId ?? randomUUID();
139
+ const configPath = join(libDir, `${configId}.json`);
140
+ let existing = {};
141
+ if (existsSync(configPath)) {
142
+ try {
143
+ existing = JSON.parse(await readFile(configPath, 'utf-8'));
144
+ }
145
+ catch {
146
+ existing = {};
147
+ }
148
+ }
149
+ // Discover available Claude models from the gateway and curate down to the
150
+ // preferred set so the user doesn't have to type them manually in the GUI.
151
+ const discoveredModels = await fetchClaudeModels(proxyUrl, gatewayKey);
152
+ const resolvedModels = selectPreferredClaudeModels(discoveredModels);
153
+ const inferenceModels = resolvedModels.map((name) => ({ name }));
154
+ for (const key of INFERENCE_KEYS) {
155
+ delete existing[key];
156
+ }
157
+ delete existing.inferenceModels;
158
+ const merged = {
159
+ ...existing,
160
+ ...buildGatewayConfig(proxyUrl, gatewayKey),
161
+ ...(inferenceModels.length > 0 ? { inferenceModels } : {}),
162
+ };
163
+ await writeFile(configPath, JSON.stringify(merged, null, 2), 'utf-8');
164
+ const entries = meta.entries ?? [];
165
+ if (!entries.find((e) => e.id === configId)) {
166
+ entries.push({ id: configId, name: 'CodeMie Proxy' });
167
+ }
168
+ const updatedMeta = {
169
+ appliedId: configId,
170
+ entries,
171
+ };
172
+ await writeFile(metaPath, JSON.stringify(updatedMeta, null, 2), 'utf-8');
173
+ return configPath;
174
+ }
175
+ //# sourceMappingURL=desktop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desktop.js","sourceRoot":"","sources":["../../../../../src/cli/commands/proxy/connectors/desktop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ export interface DaemonState {
2
+ pid: number;
3
+ port: number;
4
+ url: string;
5
+ profile: string;
6
+ gatewayKey: string;
7
+ telemetryMode?: 'none' | 'claude-desktop';
8
+ targetUrl?: string;
9
+ provider?: string;
10
+ clientType?: string;
11
+ syncApiUrl?: string;
12
+ syncCodeMieUrl?: string;
13
+ startedAt: string;
14
+ }
15
+ export declare function readState(stateFile?: string): Promise<DaemonState | null>;
16
+ export declare function writeState(state: DaemonState, stateFile?: string): Promise<void>;
17
+ export declare function clearState(stateFile?: string): Promise<void>;
18
+ export declare function isProcessAlive(pid: number): boolean;
19
+ export declare function checkStatus(stateFile?: string): Promise<{
20
+ running: boolean;
21
+ state: DaemonState | null;
22
+ }>;
23
+ export interface SpawnOptions {
24
+ targetUrl: string;
25
+ provider: string;
26
+ profile: string;
27
+ port?: number;
28
+ gatewayKey?: string;
29
+ telemetryMode?: 'none' | 'claude-desktop';
30
+ syncApiUrl?: string;
31
+ syncCodeMieUrl?: string;
32
+ }
33
+ export declare function spawnDaemon(opts: SpawnOptions): Promise<DaemonState>;
34
+ export declare function stopDaemon(): Promise<void>;
35
+ //# sourceMappingURL=daemon-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon-manager.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/proxy/daemon-manager.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,wBAAsB,SAAS,CAAC,SAAS,GAAE,MAA2B,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAOnG;AAED,wBAAsB,UAAU,CAC9B,KAAK,EAAE,WAAW,EAClB,SAAS,GAAE,MAA2B,GACrC,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,UAAU,CAAC,SAAS,GAAE,MAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAMtF;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOnD;AAED,wBAAsB,WAAW,CAC/B,SAAS,GAAE,MAA2B,GACrC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CAAC,CAU1D;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAiD1E;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAsBhD"}
@@ -0,0 +1,107 @@
1
+ import { writeFile, readFile, unlink, rename } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { getCodemieHome, getDirname } from '../../../utils/paths.js';
4
+ import { logger } from '../../../utils/logger.js';
5
+ import { sanitizeLogArgs } from '../../../utils/security.js';
6
+ import { ToolExecutionError } from '../../../utils/errors.js';
7
+ import { spawnDetached } from '../../../utils/processes.js';
8
+ const DEFAULT_STATE_FILE = join(getCodemieHome(), 'proxy-daemon.json');
9
+ export async function readState(stateFile = DEFAULT_STATE_FILE) {
10
+ try {
11
+ const raw = await readFile(stateFile, 'utf-8');
12
+ return JSON.parse(raw);
13
+ }
14
+ catch {
15
+ return null;
16
+ }
17
+ }
18
+ export async function writeState(state, stateFile = DEFAULT_STATE_FILE) {
19
+ const tmp = stateFile + '.tmp';
20
+ await writeFile(tmp, JSON.stringify(state, null, 2), 'utf-8');
21
+ await rename(tmp, stateFile);
22
+ }
23
+ export async function clearState(stateFile = DEFAULT_STATE_FILE) {
24
+ try {
25
+ await unlink(stateFile);
26
+ }
27
+ catch {
28
+ // Already gone — no-op
29
+ }
30
+ }
31
+ export function isProcessAlive(pid) {
32
+ try {
33
+ process.kill(pid, 0);
34
+ return true;
35
+ }
36
+ catch {
37
+ return false;
38
+ }
39
+ }
40
+ export async function checkStatus(stateFile = DEFAULT_STATE_FILE) {
41
+ const state = await readState(stateFile);
42
+ if (!state)
43
+ return { running: false, state: null };
44
+ if (!isProcessAlive(state.pid)) {
45
+ await clearState(stateFile);
46
+ return { running: false, state: null };
47
+ }
48
+ return { running: true, state };
49
+ }
50
+ export async function spawnDaemon(opts) {
51
+ const stateFile = DEFAULT_STATE_FILE;
52
+ const gatewayKey = opts.gatewayKey ?? 'codemie-proxy';
53
+ // Locate the daemon binary relative to this compiled file:
54
+ // dist/cli/commands/proxy/daemon-manager.js → ../../../../bin/proxy-daemon.js
55
+ const daemonBin = join(getDirname(import.meta.url), '../../../../bin/proxy-daemon.js');
56
+ const args = [
57
+ daemonBin,
58
+ '--target-url', opts.targetUrl,
59
+ '--provider', opts.provider,
60
+ '--profile', opts.profile,
61
+ '--gateway-key', gatewayKey,
62
+ '--state-file', stateFile,
63
+ ...(opts.port ? ['--port', String(opts.port)] : []),
64
+ ...(opts.telemetryMode ? ['--telemetry-mode', opts.telemetryMode] : []),
65
+ ...(opts.syncApiUrl ? ['--sync-api-url', opts.syncApiUrl] : []),
66
+ ...(opts.syncCodeMieUrl ? ['--sync-codemie-url', opts.syncCodeMieUrl] : []),
67
+ ];
68
+ logger.debug('[daemon-manager] Spawning daemon', ...sanitizeLogArgs({
69
+ daemonBin,
70
+ targetUrl: opts.targetUrl,
71
+ provider: opts.provider,
72
+ profile: opts.profile,
73
+ port: opts.port,
74
+ gatewayKey,
75
+ telemetryMode: opts.telemetryMode,
76
+ syncApiUrl: opts.syncApiUrl,
77
+ syncCodeMieUrl: opts.syncCodeMieUrl
78
+ }));
79
+ spawnDetached(process.execPath, args);
80
+ // Poll up to 5 s for daemon readiness
81
+ for (let i = 0; i < 50; i++) {
82
+ await new Promise(r => setTimeout(r, 100));
83
+ const state = await readState(stateFile);
84
+ if (state && isProcessAlive(state.pid))
85
+ return state;
86
+ }
87
+ throw new ToolExecutionError('proxy-daemon', 'Daemon failed to start within 5 seconds. Check logs: ~/.codemie/logs/');
88
+ }
89
+ export async function stopDaemon() {
90
+ const stateFile = DEFAULT_STATE_FILE;
91
+ const state = await readState(stateFile);
92
+ if (!state)
93
+ return;
94
+ if (isProcessAlive(state.pid)) {
95
+ process.kill(state.pid, 'SIGTERM');
96
+ for (let i = 0; i < 50; i++) {
97
+ await new Promise(r => setTimeout(r, 100));
98
+ if (!isProcessAlive(state.pid)) {
99
+ await clearState(stateFile);
100
+ return;
101
+ }
102
+ }
103
+ throw new ToolExecutionError('proxy-daemon', `Daemon pid ${state.pid} did not stop within 5 seconds`);
104
+ }
105
+ await clearState(stateFile);
106
+ }
107
+ //# sourceMappingURL=daemon-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon-manager.js","sourceRoot":"","sources":["../../../../src/cli/commands/proxy/daemon-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createProxyCommand(): Command;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/proxy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyGpC,wBAAgB,kBAAkB,IAAI,OAAO,CAqK5C"}
@@ -0,0 +1,221 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { ConfigLoader } from '../../../utils/config.js';
4
+ import { ProviderRegistry } from '../../../providers/index.js';
5
+ import { ConfigurationError } from '../../../utils/errors.js';
6
+ import { checkStatus, readState, spawnDaemon, stopDaemon, } from './daemon-manager.js';
7
+ import { writeDesktopConfig } from './connectors/desktop.js';
8
+ import { printDesktopInspection } from './inspect-desktop.js';
9
+ const DEFAULT_DAEMON_PORT = 4001;
10
+ const DEFAULT_DESKTOP_INSPECT_LIMIT = 5;
11
+ function parsePortOption(value, fallback) {
12
+ if (!value) {
13
+ return fallback;
14
+ }
15
+ const parsed = Number.parseInt(value, 10);
16
+ if (!Number.isFinite(parsed) || parsed <= 0) {
17
+ throw new ConfigurationError(`Invalid port value: ${value}`);
18
+ }
19
+ return parsed;
20
+ }
21
+ async function resolveDesktopProxyConfig(profileName) {
22
+ const listCodeMieProfiles = async () => {
23
+ const profiles = await ConfigLoader.listProfiles(process.cwd());
24
+ return profiles
25
+ .filter(({ profile }) => {
26
+ const provider = ProviderRegistry.getProvider(profile.provider ?? '');
27
+ return provider?.authType === 'sso';
28
+ })
29
+ .map(({ name }) => name);
30
+ };
31
+ if (profileName) {
32
+ const explicitConfig = await ConfigLoader.load(process.cwd(), { name: profileName });
33
+ const explicitProvider = ProviderRegistry.getProvider(explicitConfig.provider ?? '');
34
+ if (explicitProvider?.authType !== 'sso') {
35
+ const available = await listCodeMieProfiles();
36
+ const details = available.length > 0
37
+ ? `Available CodeMie profiles:\n- ${available.join('\n- ')}`
38
+ : 'No CodeMie SSO profiles were found. Run: codemie setup';
39
+ throw new ConfigurationError(`Profile "${profileName}" is not a CodeMie SSO profile.\n` +
40
+ `Use a CodeMie-backed profile with: codemie proxy connect desktop --profile <name>\n\n` +
41
+ `${details}`);
42
+ }
43
+ return {
44
+ config: explicitConfig,
45
+ profileSource: 'explicit'
46
+ };
47
+ }
48
+ const activeConfig = await ConfigLoader.load(process.cwd());
49
+ const activeProvider = ProviderRegistry.getProvider(activeConfig.provider ?? '');
50
+ if (activeProvider?.authType === 'sso') {
51
+ return { config: activeConfig, profileSource: 'active' };
52
+ }
53
+ const activeProfileName = await ConfigLoader.getActiveProfileName(process.cwd());
54
+ const available = await listCodeMieProfiles();
55
+ const providerName = activeConfig.provider ?? 'unknown';
56
+ const details = available.length > 0
57
+ ? `Use: codemie profile switch <codemie-profile>\n` +
58
+ `Or: codemie proxy connect desktop --profile <codemie-profile>\n\n` +
59
+ `Available CodeMie profiles:\n- ${available.join('\n- ')}`
60
+ : 'Create or switch to a CodeMie SSO profile before using Claude Desktop proxy.';
61
+ throw new ConfigurationError(`Claude Desktop proxy requires an SSO-backed CodeMie profile. ` +
62
+ `Current active profile is "${activeProfileName ?? 'unknown'}" with provider "${providerName}".\n` +
63
+ `${details}`);
64
+ }
65
+ async function verifySsoCredentials(baseUrl, profileName) {
66
+ try {
67
+ const { CodeMieSSO } = await import('../../../providers/plugins/sso/sso.auth.js');
68
+ const sso = new CodeMieSSO();
69
+ const creds = await sso.getStoredCredentials(baseUrl);
70
+ if (!creds) {
71
+ console.error(chalk.red(`✗ No SSO credentials found for profile '${profileName}'.`));
72
+ console.error(` Run: codemie profile login --url ${baseUrl}`);
73
+ process.exit(1);
74
+ }
75
+ }
76
+ catch (err) {
77
+ console.error(chalk.red(`✗ Failed to verify credentials: ${err.message}`));
78
+ process.exit(1);
79
+ }
80
+ }
81
+ export function createProxyCommand() {
82
+ const proxy = new Command('proxy');
83
+ proxy.description('Manage the CodeMie local gateway proxy daemon');
84
+ // ── proxy start ─────────────────────────────────────────────────────────────
85
+ proxy
86
+ .command('start')
87
+ .description('Start the background proxy daemon')
88
+ .option('--port <port>', `Fixed port to listen on (default: ${DEFAULT_DAEMON_PORT})`)
89
+ .option('--profile <name>', 'Profile whose credentials to use')
90
+ .action(async (opts) => {
91
+ const { running, state } = await checkStatus();
92
+ if (running && state) {
93
+ console.log(chalk.green(`✓ Proxy already running at ${state.url} (profile: ${state.profile})`));
94
+ return;
95
+ }
96
+ const config = await ConfigLoader.load(process.cwd(), opts.profile ? { name: opts.profile } : undefined);
97
+ if (!config.baseUrl) {
98
+ console.error(chalk.red('✗ No API URL configured for this profile.'));
99
+ console.error(' Run: codemie setup');
100
+ process.exit(1);
101
+ }
102
+ await verifySsoCredentials(config.baseUrl, config.name ?? 'default');
103
+ console.log('Starting proxy daemon...');
104
+ const daemonState = await spawnDaemon({
105
+ targetUrl: config.baseUrl,
106
+ provider: config.provider ?? 'ai-run-sso',
107
+ profile: config.name ?? 'default',
108
+ port: parsePortOption(opts.port, DEFAULT_DAEMON_PORT),
109
+ syncApiUrl: config.ssoConfig?.apiUrl,
110
+ syncCodeMieUrl: config.codeMieUrl,
111
+ });
112
+ console.log(chalk.green(`✓ Proxy running at ${daemonState.url} (profile: ${daemonState.profile})`));
113
+ });
114
+ // ── proxy stop ──────────────────────────────────────────────────────────────
115
+ proxy
116
+ .command('stop')
117
+ .description('Stop the background proxy daemon')
118
+ .action(async () => {
119
+ const { running } = await checkStatus();
120
+ if (!running) {
121
+ console.log('Proxy is not running.');
122
+ return;
123
+ }
124
+ await stopDaemon();
125
+ console.log(chalk.green('✓ Proxy stopped'));
126
+ });
127
+ // ── proxy status ─────────────────────────────────────────────────────────────
128
+ proxy
129
+ .command('status')
130
+ .description('Show proxy daemon status')
131
+ .action(async () => {
132
+ const { running, state } = await checkStatus();
133
+ if (!running || !state) {
134
+ console.log('Status: stopped');
135
+ return;
136
+ }
137
+ const uptimeSec = Math.floor((Date.now() - new Date(state.startedAt).getTime()) / 1000);
138
+ const uptime = uptimeSec < 60
139
+ ? `${uptimeSec}s`
140
+ : uptimeSec < 3600
141
+ ? `${Math.floor(uptimeSec / 60)}m ${uptimeSec % 60}s`
142
+ : `${Math.floor(uptimeSec / 3600)}h ${Math.floor((uptimeSec % 3600) / 60)}m`;
143
+ console.log(`Status: ${chalk.green('running')}`);
144
+ console.log(` URL: ${state.url}`);
145
+ console.log(` Port: ${state.port}`);
146
+ console.log(` Profile: ${state.profile}`);
147
+ console.log(` Uptime: ${uptime}`);
148
+ });
149
+ // ── proxy connect ────────────────────────────────────────────────────────────
150
+ const connect = new Command('connect');
151
+ connect.description('Configure a client to use the local proxy');
152
+ connect
153
+ .command('desktop')
154
+ .description('Configure Claude Desktop (3P) to use the local proxy')
155
+ .option('--profile <name>', 'Profile whose credentials to use for Claude Desktop proxy')
156
+ .action(async (opts) => {
157
+ let { running, state } = await checkStatus();
158
+ if (running && state?.telemetryMode !== 'claude-desktop') {
159
+ console.log('Proxy is running without Desktop telemetry — restarting in claude-desktop mode...');
160
+ await stopDaemon();
161
+ running = false;
162
+ state = null;
163
+ }
164
+ if (!running) {
165
+ console.log('Proxy not running — starting it now...');
166
+ const { config, profileSource } = await resolveDesktopProxyConfig(opts.profile);
167
+ if (!config.baseUrl) {
168
+ console.error(chalk.red('✗ No API URL configured. Run: codemie setup'));
169
+ process.exit(1);
170
+ }
171
+ const provider = ProviderRegistry.getProvider(config.provider ?? '');
172
+ if (provider?.authType !== 'sso') {
173
+ console.error(chalk.red(`✗ Claude Desktop proxy requires an SSO-backed profile. Selected provider: ${config.provider ?? 'unknown'}`));
174
+ console.error(' Use: codemie proxy connect desktop --profile <your-ai-run-sso-profile>');
175
+ process.exit(1);
176
+ }
177
+ if (!config.codeMieUrl) {
178
+ console.error(chalk.red('✗ Selected profile is missing CodeMie URL.'));
179
+ console.error(' Run: codemie setup or codemie profile login');
180
+ process.exit(1);
181
+ }
182
+ console.log(chalk.cyan(`Using profile: ${config.name ?? 'default'} ` +
183
+ `(source: ${profileSource === 'explicit' ? '--profile' : 'active profile'})`));
184
+ await verifySsoCredentials(config.baseUrl, config.name ?? 'default');
185
+ state = await spawnDaemon({
186
+ targetUrl: config.baseUrl,
187
+ provider: config.provider ?? 'ai-run-sso',
188
+ profile: config.name ?? 'default',
189
+ port: DEFAULT_DAEMON_PORT,
190
+ telemetryMode: 'claude-desktop',
191
+ syncApiUrl: config.ssoConfig?.apiUrl,
192
+ syncCodeMieUrl: config.codeMieUrl,
193
+ });
194
+ console.log(chalk.green(`✓ Proxy started at ${state.url}`));
195
+ }
196
+ const configPath = await writeDesktopConfig(state.url, state.gatewayKey);
197
+ console.log(chalk.green('✓ Claude Desktop configured'));
198
+ console.log(` Config: ${configPath}`);
199
+ console.log(` Gateway: ${state.url}`);
200
+ console.log(chalk.dim(' Telemetry: metrics and conversations will sync as claude-desktop.'));
201
+ console.log(chalk.yellow(' Restart Claude Desktop to apply changes.'));
202
+ });
203
+ const inspect = new Command('inspect');
204
+ inspect.description('Inspect proxy integrations and telemetry state');
205
+ inspect
206
+ .command('desktop')
207
+ .description('Inspect Claude Desktop proxy telemetry readiness')
208
+ .option('--limit <count>', 'Maximum number of recent sessions to inspect', String(DEFAULT_DESKTOP_INSPECT_LIMIT))
209
+ .action(async (opts) => {
210
+ const { running, state } = await checkStatus();
211
+ const persistedState = state ?? await readState();
212
+ const limit = Number.parseInt(opts.limit, 10);
213
+ await printDesktopInspection(running, persistedState, {
214
+ limit: Number.isFinite(limit) && limit > 0 ? limit : undefined
215
+ });
216
+ });
217
+ proxy.addCommand(connect);
218
+ proxy.addCommand(inspect);
219
+ return proxy;
220
+ }
221
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/commands/proxy/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { LocalTelemetryDiscoveredSession } from '../../../telemetry/runtime/types.js';
2
+ import type { DaemonState } from './daemon-manager.js';
3
+ interface DesktopInspectionResult {
4
+ daemonRunning: boolean;
5
+ daemonState: DaemonState | null;
6
+ desktopBaseDir: string;
7
+ localSessionsRoot: string;
8
+ codeSessionsRoot: string;
9
+ credentialsUrl?: string;
10
+ hasCredentials: boolean;
11
+ sessions: DesktopSessionInspection[];
12
+ }
13
+ interface DesktopSessionInspection {
14
+ discovered: LocalTelemetryDiscoveredSession;
15
+ codemieSessionId?: string;
16
+ sessionStatus: string;
17
+ metricsFileExists: boolean;
18
+ conversationFileExists: boolean;
19
+ reasons: string[];
20
+ }
21
+ export declare function inspectDesktopProxy(daemonRunning: boolean, daemonState: DaemonState | null, options?: {
22
+ limit?: number;
23
+ }): Promise<DesktopInspectionResult>;
24
+ export declare function printDesktopInspection(daemonRunning: boolean, daemonState: DaemonState | null, options?: {
25
+ limit?: number;
26
+ }): Promise<void>;
27
+ export {};
28
+ //# sourceMappingURL=inspect-desktop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect-desktop.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/proxy/inspect-desktop.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC;AACpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIvD,UAAU,uBAAuB;IAC/B,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,wBAAwB,EAAE,CAAC;CACtC;AAED,UAAU,wBAAwB;IAChC,UAAU,EAAE,+BAA+B,CAAC;IAC5C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,sBAAsB,EAAE,OAAO,CAAC;IAChC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AA+ED,wBAAsB,mBAAmB,CACvC,aAAa,EAAE,OAAO,EACtB,WAAW,EAAE,WAAW,GAAG,IAAI,EAC/B,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/B,OAAO,CAAC,uBAAuB,CAAC,CAuBlC;AAED,wBAAsB,sBAAsB,CAC1C,aAAa,EAAE,OAAO,EACtB,WAAW,EAAE,WAAW,GAAG,IAAI,EAC/B,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/B,OAAO,CAAC,IAAI,CAAC,CA6Cf"}