@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 @@
1
+ {"version":3,"file":"checkpoints.d.ts","sourceRoot":"","sources":["../../../src/telemetry/runtime/checkpoints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAE9D,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,iBAAiB,GAAG,SAAS,CAEpF;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,iBAAiB,GAC5B,OAAO,CAGT"}
@@ -0,0 +1,8 @@
1
+ export function getRuntimeCheckpoint(session) {
2
+ return session.runtimeCheckpoint;
3
+ }
4
+ export function setRuntimeCheckpoint(session, checkpoint) {
5
+ session.runtimeCheckpoint = checkpoint;
6
+ return session;
7
+ }
8
+ //# sourceMappingURL=checkpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoints.js","sourceRoot":"","sources":["../../../src/telemetry/runtime/checkpoints.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO,OAAO,CAAC,iBAAiB,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,OAAgB,EAChB,UAA6B;IAE7B,OAAO,CAAC,iBAAiB,GAAG,UAAU,CAAC;IACvC,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,32 @@
1
+ import type { AggregatedResult, ParsedSession } from '../../agents/core/session/BaseSessionAdapter.js';
2
+ import type { ProcessingContext } from '../../agents/core/session/BaseProcessor.js';
3
+ export interface LocalTelemetryDiscoveredSession {
4
+ externalSessionId: string;
5
+ agentSessionId: string;
6
+ transcriptPath: string;
7
+ metadataPath: string;
8
+ workingDirectory: string;
9
+ createdAt: number;
10
+ updatedAt: number;
11
+ model?: string;
12
+ isArchived?: boolean;
13
+ }
14
+ export interface DesktopTelemetryRuntimeConfig {
15
+ clientType: string;
16
+ targetApiUrl: string;
17
+ provider: string;
18
+ version: string;
19
+ profile?: string;
20
+ syncApiUrl?: string;
21
+ syncCodeMieUrl?: string;
22
+ pollIntervalMs: number;
23
+ inactivityTimeoutMs: number;
24
+ }
25
+ export interface LocalTelemetryAdapter {
26
+ readonly clientType: string;
27
+ discoverSessions(sinceMs: number): Promise<LocalTelemetryDiscoveredSession[]>;
28
+ parseSession(discovered: LocalTelemetryDiscoveredSession, codemieSessionId: string): Promise<ParsedSession>;
29
+ processParsedSession(parsedSession: ParsedSession, context: ProcessingContext): Promise<AggregatedResult>;
30
+ isSessionComplete?(discovered: LocalTelemetryDiscoveredSession, now: number): boolean;
31
+ }
32
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/telemetry/runtime/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AACnG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAEhF,MAAM,WAAW,+BAA+B;IAC9C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,6BAA6B;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,+BAA+B,EAAE,CAAC,CAAC;IAC9E,YAAY,CACV,UAAU,EAAE,+BAA+B,EAC3C,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1B,oBAAoB,CAClB,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC7B,iBAAiB,CAAC,CAAC,UAAU,EAAE,+BAA+B,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/telemetry/runtime/types.ts"],"names":[],"mappings":""}
@@ -46,6 +46,12 @@ export interface NpxRunOptions extends NpmOptions {
46
46
  /** Enable interactive mode for user prompts */
47
47
  interactive?: boolean;
48
48
  }
49
+ export interface DetachedSpawnOptions {
50
+ cwd?: string;
51
+ env?: NodeJS.ProcessEnv;
52
+ stdio?: 'ignore' | 'inherit';
53
+ }
54
+ export declare function spawnDetached(command: string, args?: string[], options?: DetachedSpawnOptions): number;
49
55
  /**
50
56
  * Install a package globally via npm
51
57
  *
@@ -1 +1 @@
1
- {"version":3,"file":"processes.d.ts","sourceRoot":"","sources":["../../src/utils/processes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAQpE;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAWrE;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAuB5E;AAMD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,wCAAwC;IACxC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,UAAU;IACnD,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,+CAA+C;IAC/C,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAkCf;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,UAAU,CAC9B,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,OAAO,CAAC,CAmBlB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,UAAU,CAC9B,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkBxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAsBxB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,MAAM,CAC1B,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,EAAO,EACnB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAqBf;AAMD;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAUlF;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAsB9E;AAGD,OAAO,EAAE,IAAI,EAAE,CAAC;AAChB,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"processes.d.ts","sourceRoot":"","sources":["../../src/utils/processes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAQpE;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAWrE;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAuB5E;AAMD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,wCAAwC;IACxC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,UAAU;IACnD,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,+CAA+C;IAC/C,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;CAC9B;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,EAAO,EACnB,OAAO,GAAE,oBAAyB,GACjC,MAAM,CASR;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAkCf;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,UAAU,CAC9B,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,OAAO,CAAC,CAmBlB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,UAAU,CAC9B,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkBxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAsBxB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,MAAM,CAC1B,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,EAAO,EACnB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAqBf;AAMD;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAUlF;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAsB9E;AAGD,OAAO,EAAE,IAAI,EAAE,CAAC;AAChB,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC"}
@@ -4,9 +4,9 @@
4
4
  * Command detection, npm package management, and git operations.
5
5
  * Built on top of the foundational exec utility.
6
6
  */
7
- import { exec as childProcessExec } from 'child_process';
8
- import { promisify } from 'util';
9
- import os from 'os';
7
+ import { exec as childProcessExec, spawn } from 'node:child_process';
8
+ import { promisify } from 'node:util';
9
+ import os from 'node:os';
10
10
  import { logger } from './logger.js';
11
11
  import { exec } from './exec.js';
12
12
  const execAsync = promisify(childProcessExec);
@@ -59,6 +59,16 @@ export async function getCommandPath(command) {
59
59
  return null;
60
60
  }
61
61
  }
62
+ export function spawnDetached(command, args = [], options = {}) {
63
+ const child = spawn(command, args, {
64
+ cwd: options.cwd,
65
+ env: options.env,
66
+ detached: true,
67
+ stdio: options.stdio ?? 'ignore',
68
+ });
69
+ child.unref();
70
+ return child.pid ?? -1;
71
+ }
62
72
  /**
63
73
  * Install a package globally via npm
64
74
  *
@@ -1 +1 @@
1
- {"version":3,"file":"processes.js","sourceRoot":"","sources":["../../src/utils/processes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"processes.js","sourceRoot":"","sources":["../../src/utils/processes.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codemieai/code",
3
- "version": "0.0.56",
3
+ "version": "0.0.58",
4
4
  "description": "Unified AI coding assistant CLI - Manage Claude Code, Gemini & custom agents. Multi-provider support (OpenAI, Azure, LiteLLM, SSO). Built-in LangGraph agent with file operations & git integration.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -12,7 +12,8 @@
12
12
  "codemie-claude-acp": "./bin/codemie-claude-acp.js",
13
13
  "codemie-gemini": "./bin/codemie-gemini.js",
14
14
  "codemie-opencode": "./bin/codemie-opencode.js",
15
- "codemie-mcp-proxy": "./bin/codemie-mcp-proxy.js"
15
+ "codemie-mcp-proxy": "./bin/codemie-mcp-proxy.js",
16
+ "proxy-daemon": "./bin/proxy-daemon.js"
16
17
  },
17
18
  "files": [
18
19
  "dist",
@@ -25,6 +26,7 @@
25
26
  "scripts": {
26
27
  "build": "tsc && tsc-alias && npm run copy-plugin",
27
28
  "copy-plugin": "node scripts/copy-plugins.js",
29
+ "prepare:install-artifacts": "node scripts/prepare-install-artifacts.mjs",
28
30
  "dev": "tsc --watch",
29
31
  "test": "vitest",
30
32
  "test:unit": "vitest run src",
package/scripts/README.md CHANGED
@@ -77,4 +77,18 @@ Following KISS principles, this script:
77
77
  - Handles the most common release scenarios
78
78
  - Can be extended easily if needed
79
79
 
80
- The release-manager agent can run this script instead of individual git commands, making releases more reliable and consistent.
80
+ The release-manager agent can run this script instead of individual git commands, making releases more reliable and consistent.
81
+
82
+ ## Proxy Endpoint Smoke Test
83
+
84
+ `scripts/test-proxy-endpoint.js` sends a small sample request to a local proxy or upstream HTTP endpoint.
85
+
86
+ ```bash
87
+ node scripts/test-proxy-endpoint.js --url http://127.0.0.1:4001
88
+ ```
89
+
90
+ By default it posts to `/v1/messages` with a minimal messages payload. Override the request path or prompt when needed:
91
+
92
+ ```bash
93
+ node scripts/test-proxy-endpoint.js --url http://127.0.0.1:4001 --endpoint /v1/messages --message "hello"
94
+ ```
@@ -0,0 +1,66 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { copyFile, mkdir, readFile, writeFile } from 'node:fs/promises';
3
+ import path from 'node:path';
4
+
5
+ const root = process.cwd();
6
+ const packageJson = JSON.parse(await readFile(path.join(root, 'package.json'), 'utf8'));
7
+ const outDir = path.join(root, 'artifacts', 'install');
8
+
9
+ const files = [
10
+ ['install/windows/install.ps1', 'install.ps1'],
11
+ ['install/windows/install.cmd', 'install.cmd'],
12
+ ['install/macos/install.sh', 'install.sh']
13
+ ];
14
+
15
+ // Checksums intentionally cover the generated artifacts, including version headers.
16
+ // They are for release artifact verification, not source-file verification.
17
+
18
+ await mkdir(outDir, { recursive: true });
19
+
20
+ const checksums = [];
21
+
22
+ for (const [source, target] of files) {
23
+ const sourcePath = path.join(root, source);
24
+ const targetPath = path.join(outDir, target);
25
+ await copyFile(sourcePath, targetPath);
26
+
27
+ const originalContent = await readFile(targetPath, 'utf8');
28
+ const content = addArtifactHeader(target, originalContent, packageJson);
29
+ await writeFile(targetPath, content, 'utf8');
30
+
31
+ const sha256 = createHash('sha256').update(content).digest('hex');
32
+ checksums.push(`${sha256} ${target}`);
33
+ }
34
+
35
+ const manifest = {
36
+ packageName: packageJson.name,
37
+ packageVersion: packageJson.version,
38
+ generatedAt: new Date().toISOString(),
39
+ artifacts: checksums.map((line) => {
40
+ const [sha256, fileName] = line.split(/\s+/);
41
+ return { fileName, sha256 };
42
+ })
43
+ };
44
+
45
+ await writeFile(path.join(outDir, 'manifest.json'), `${JSON.stringify(manifest, null, 2)}\n`, 'utf8');
46
+ await writeFile(path.join(outDir, 'checksums.txt'), `${checksums.join('\n')}\n`, 'utf8');
47
+
48
+ console.log(`Prepared installer artifacts for ${packageJson.name}@${packageJson.version}`);
49
+ console.log(`Output: ${path.relative(root, outDir)}`);
50
+
51
+ function addArtifactHeader(fileName, content, packageJson) {
52
+ const versionLine = `CodeMie installer artifact for ${packageJson.name}@${packageJson.version}`;
53
+
54
+ if (fileName.endsWith('.cmd')) {
55
+ return `rem ${versionLine}\r\n${content}`;
56
+ }
57
+
58
+ if (fileName.endsWith('.sh') && content.startsWith('#!')) {
59
+ const firstNewline = content.indexOf('\n');
60
+ if (firstNewline !== -1) {
61
+ return `${content.slice(0, firstNewline + 1)}# ${versionLine}\n${content.slice(firstNewline + 1)}`;
62
+ }
63
+ }
64
+
65
+ return `# ${versionLine}\n${content}`;
66
+ }
@@ -0,0 +1,229 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { existsSync, readFileSync } from 'fs';
4
+ import { randomUUID } from 'crypto';
5
+ import { resolve } from 'path';
6
+
7
+ function printUsage() {
8
+ console.log(`Usage: node scripts/test-desktop-telemetry.js [options]
9
+
10
+ Options:
11
+ --latest Use the most recently updated Desktop session (default)
12
+ --session <local_id> Use a specific Desktop local session id
13
+ --dry-run Build and sync through processors without remote writes (default)
14
+ --live Attempt real sync using stored SSO credentials
15
+ --target-url <url> Override API base URL for sync
16
+ --codemie-url <url> Override CodeMie URL for credential lookup
17
+ --codemie-home <dir> Override CODEMIE_HOME for isolated local output
18
+ --limit <count> Number of recent sessions to search while resolving --session (default: 20)
19
+ --help Show this help
20
+ `);
21
+ }
22
+
23
+ function parseArgs(argv) {
24
+ const args = {
25
+ latest: true,
26
+ sessionId: undefined,
27
+ dryRun: true,
28
+ targetUrl: undefined,
29
+ codeMieUrl: undefined,
30
+ codemieHome: undefined,
31
+ limit: 20
32
+ };
33
+
34
+ for (let index = 0; index < argv.length; index += 1) {
35
+ const arg = argv[index];
36
+
37
+ switch (arg) {
38
+ case '--latest':
39
+ args.latest = true;
40
+ break;
41
+ case '--session':
42
+ args.sessionId = argv[index + 1];
43
+ args.latest = false;
44
+ index += 1;
45
+ break;
46
+ case '--dry-run':
47
+ args.dryRun = true;
48
+ break;
49
+ case '--live':
50
+ args.dryRun = false;
51
+ break;
52
+ case '--target-url':
53
+ args.targetUrl = argv[index + 1];
54
+ index += 1;
55
+ break;
56
+ case '--codemie-url':
57
+ args.codeMieUrl = argv[index + 1];
58
+ index += 1;
59
+ break;
60
+ case '--codemie-home':
61
+ args.codemieHome = argv[index + 1];
62
+ index += 1;
63
+ break;
64
+ case '--limit':
65
+ args.limit = Number.parseInt(argv[index + 1], 10);
66
+ index += 1;
67
+ break;
68
+ case '--help':
69
+ printUsage();
70
+ process.exit(0);
71
+ default:
72
+ console.error(`Unknown argument: ${arg}`);
73
+ printUsage();
74
+ process.exit(1);
75
+ }
76
+ }
77
+
78
+ return args;
79
+ }
80
+
81
+ const args = parseArgs(process.argv.slice(2));
82
+ if (args.codemieHome) {
83
+ process.env.CODEMIE_HOME = resolve(args.codemieHome);
84
+ }
85
+
86
+ const distRoot = resolve(process.cwd(), 'dist');
87
+ if (!existsSync(distRoot)) {
88
+ console.error('dist/ is missing. Run: rtk npm run build');
89
+ process.exit(1);
90
+ }
91
+
92
+ const [
93
+ { discoverClaudeDesktopSessions },
94
+ { ClaudeDesktopTelemetryAdapter },
95
+ { SessionStore },
96
+ { getSessionConversationPath, getSessionMetricsPath },
97
+ { SessionSyncer },
98
+ { CodeMieSSO },
99
+ { detectGitBranch, detectGitRemoteRepo },
100
+ ] = await Promise.all([
101
+ import('../dist/telemetry/clients/claude-desktop/claude-desktop.discovery.js'),
102
+ import('../dist/telemetry/clients/claude-desktop/ClaudeDesktopTelemetryAdapter.js'),
103
+ import('../dist/agents/core/session/SessionStore.js'),
104
+ import('../dist/agents/core/session/session-config.js'),
105
+ import('../dist/providers/plugins/sso/session/SessionSyncer.js'),
106
+ import('../dist/providers/plugins/sso/sso.auth.js'),
107
+ import('../dist/utils/processes.js')
108
+ ]);
109
+
110
+ const discoveredSessions = await discoverClaudeDesktopSessions(0);
111
+ const recentSessions = discoveredSessions
112
+ .sort((a, b) => b.updatedAt - a.updatedAt)
113
+ .slice(0, Number.isFinite(args.limit) && args.limit > 0 ? args.limit : 20);
114
+
115
+ const selected = args.sessionId
116
+ ? recentSessions.find((session) => session.externalSessionId === args.sessionId)
117
+ : recentSessions[0];
118
+
119
+ if (!selected) {
120
+ console.error('No matching Claude Desktop local session found.');
121
+ process.exit(1);
122
+ }
123
+
124
+ const sessionStore = new SessionStore();
125
+ let session = await sessionStore.findSessionByExternalId('claude-desktop', selected.externalSessionId);
126
+
127
+ if (!session) {
128
+ const [gitBranch, repository] = await Promise.all([
129
+ detectGitBranch(selected.workingDirectory),
130
+ detectGitRemoteRepo(selected.workingDirectory)
131
+ ]);
132
+
133
+ session = {
134
+ sessionId: randomUUID(),
135
+ agentName: 'claude-desktop',
136
+ provider: 'ai-run-sso',
137
+ startTime: selected.createdAt,
138
+ workingDirectory: selected.workingDirectory,
139
+ gitBranch: gitBranch || undefined,
140
+ repository: repository || undefined,
141
+ status: 'active',
142
+ activeDurationMs: 0,
143
+ correlation: {
144
+ status: 'matched',
145
+ agentSessionId: selected.agentSessionId,
146
+ agentSessionFile: selected.transcriptPath,
147
+ retryCount: 0
148
+ },
149
+ runtimeCheckpoint: {
150
+ externalSessionId: selected.externalSessionId,
151
+ transcriptPath: selected.transcriptPath,
152
+ lastDiscoveredAt: Date.now(),
153
+ lastSeenActivityAt: selected.updatedAt
154
+ }
155
+ };
156
+
157
+ await sessionStore.saveSession(session);
158
+ }
159
+
160
+ const targetUrl = args.targetUrl
161
+ || process.env.CODEMIE_TEST_API_URL
162
+ || process.env.CODEMIE_API_URL
163
+ || 'http://127.0.0.1:3000';
164
+ const codeMieUrl = args.codeMieUrl
165
+ || process.env.CODEMIE_TEST_CODEMIE_URL
166
+ || process.env.CODEMIE_URL
167
+ || targetUrl;
168
+
169
+ let cookies = '';
170
+ if (!args.dryRun) {
171
+ const credentials = await new CodeMieSSO().getStoredCredentials(codeMieUrl);
172
+ if (!credentials?.cookies) {
173
+ console.error(`No stored SSO credentials found for ${codeMieUrl}`);
174
+ process.exit(1);
175
+ }
176
+ cookies = Object.entries(credentials.cookies)
177
+ .map(([key, value]) => `${key}=${value}`)
178
+ .join('; ');
179
+ }
180
+
181
+ const adapter = new ClaudeDesktopTelemetryAdapter();
182
+ const parsedSession = await adapter.parseSession(selected, session.sessionId);
183
+ const context = {
184
+ apiBaseUrl: targetUrl,
185
+ cookies,
186
+ clientType: 'claude-desktop',
187
+ version: readCliVersion(),
188
+ dryRun: args.dryRun,
189
+ sessionId: session.sessionId,
190
+ agentSessionId: selected.agentSessionId,
191
+ agentSessionFile: selected.transcriptPath
192
+ };
193
+
194
+ const processed = await adapter.processParsedSession(parsedSession, context);
195
+ const syncResult = await new SessionSyncer().sync(session.sessionId, context);
196
+ const metricsPath = getSessionMetricsPath(session.sessionId);
197
+ const conversationPath = getSessionConversationPath(session.sessionId);
198
+
199
+ console.log('Claude Desktop telemetry simulation');
200
+ console.log(` mode: ${args.dryRun ? 'dry-run' : 'live'}`);
201
+ console.log(` local session: ${selected.externalSessionId}`);
202
+ console.log(` cli session: ${selected.agentSessionId}`);
203
+ console.log(` codemie session: ${session.sessionId}`);
204
+ console.log(` updated at: ${new Date(selected.updatedAt).toISOString()}`);
205
+ console.log(` transcript: ${selected.transcriptPath}`);
206
+ console.log(` messages parsed: ${parsedSession.messages.length}`);
207
+ console.log(` metrics path: ${metricsPath}${existsSync(metricsPath) ? '' : ' (missing)'}`);
208
+ console.log(` conversation path: ${conversationPath}${existsSync(conversationPath) ? '' : ' (missing)'}`);
209
+ console.log(` processors: ${processed.success ? 'ok' : 'failed'} (${processed.totalRecords} records)`);
210
+ console.log(` sync: ${syncResult.success ? 'ok' : 'failed'} (${syncResult.message})`);
211
+
212
+ if (existsSync(metricsPath)) {
213
+ const lines = readFileSync(metricsPath, 'utf-8').split('\n').filter(Boolean).length;
214
+ console.log(` metrics lines: ${lines}`);
215
+ }
216
+
217
+ if (existsSync(conversationPath)) {
218
+ const lines = readFileSync(conversationPath, 'utf-8').split('\n').filter(Boolean).length;
219
+ console.log(` conversation lines:${String(lines).padStart(2, ' ')}`);
220
+ }
221
+
222
+ function readCliVersion() {
223
+ try {
224
+ const pkg = JSON.parse(readFileSync(resolve(process.cwd(), 'package.json'), 'utf-8'));
225
+ return pkg.version || '0.0.0';
226
+ } catch {
227
+ return '0.0.0';
228
+ }
229
+ }
@@ -0,0 +1,173 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Send a sample /v1/messages request to the local CodeMie proxy daemon.
4
+ *
5
+ * - Auto-discovers URL and gateway key from ~/.codemie/proxy-daemon.json
6
+ * (override with --url and --gateway-key)
7
+ * - Sends Anthropic-style headers and a tiny payload
8
+ * - Supports both buffered and streaming (SSE) responses
9
+ *
10
+ * Usage:
11
+ * node scripts/test-proxy-endpoint.js # auto-discover, non-streaming
12
+ * node scripts/test-proxy-endpoint.js --stream # SSE streaming
13
+ * node scripts/test-proxy-endpoint.js --url http://localhost:4001 --gateway-key codemie-proxy
14
+ * node scripts/test-proxy-endpoint.js --model claude-sonnet-4-5 --message "Hello"
15
+ */
16
+ import { readFile } from 'node:fs/promises';
17
+ import { join } from 'node:path';
18
+ import { homedir } from 'node:os';
19
+
20
+ const STATE_FILE = process.env.CODEMIE_HOME
21
+ ? join(process.env.CODEMIE_HOME, 'proxy-daemon.json')
22
+ : join(homedir(), '.codemie', 'proxy-daemon.json');
23
+
24
+ function printUsage() {
25
+ console.log(`Usage: node scripts/test-proxy-endpoint.js [options]
26
+
27
+ Options:
28
+ --url <base-url> Proxy base URL (default: read from state file)
29
+ --gateway-key <key> Static bearer key (default: read from state file)
30
+ --endpoint <path> Endpoint path (default: /v1/messages)
31
+ --model <id> Model ID (default: claude-sonnet-4-5)
32
+ --message <text> Prompt text (default: "Test proxy endpoint")
33
+ --max-tokens <n> Max tokens (default: 32)
34
+ --stream Use SSE streaming
35
+ --no-anthropic-version Don't send anthropic-version header
36
+ -h, --help Show this help`);
37
+ }
38
+
39
+ function parseArgs(argv) {
40
+ const opts = {
41
+ endpoint: '/v1/messages',
42
+ message: 'Test proxy endpoint',
43
+ model: 'claude-sonnet-4-5',
44
+ maxTokens: 32,
45
+ stream: false,
46
+ sendAnthropicVersion: true,
47
+ };
48
+
49
+ for (let i = 0; i < argv.length; i += 1) {
50
+ const arg = argv[i];
51
+ if (arg === '--help' || arg === '-h') { opts.help = true; return opts; }
52
+ if (arg === '--url') { opts.url = argv[++i]; continue; }
53
+ if (arg === '--gateway-key') { opts.gatewayKey = argv[++i]; continue; }
54
+ if (arg === '--endpoint') { opts.endpoint = argv[++i] || opts.endpoint; continue; }
55
+ if (arg === '--message') { opts.message = argv[++i] || opts.message; continue; }
56
+ if (arg === '--model') { opts.model = argv[++i] || opts.model; continue; }
57
+ if (arg === '--max-tokens') {
58
+ const v = Number.parseInt(argv[++i] || '', 10);
59
+ if (Number.isFinite(v) && v > 0) opts.maxTokens = v;
60
+ continue;
61
+ }
62
+ if (arg === '--stream') { opts.stream = true; continue; }
63
+ if (arg === '--no-anthropic-version') { opts.sendAnthropicVersion = false; continue; }
64
+ }
65
+ return opts;
66
+ }
67
+
68
+ async function loadDaemonState() {
69
+ try {
70
+ const raw = await readFile(STATE_FILE, 'utf-8');
71
+ return JSON.parse(raw);
72
+ } catch {
73
+ return null;
74
+ }
75
+ }
76
+
77
+ async function main() {
78
+ const args = parseArgs(process.argv.slice(2));
79
+ if (args.help) { printUsage(); process.exit(0); }
80
+
81
+ if (!args.url || !args.gatewayKey) {
82
+ const state = await loadDaemonState();
83
+ if (state) {
84
+ args.url ??= state.url;
85
+ args.gatewayKey ??= state.gatewayKey;
86
+ console.log(`[test] Using daemon at ${args.url} (profile: ${state.profile})`);
87
+ }
88
+ }
89
+
90
+ if (!args.url) {
91
+ console.error(`No proxy URL. Provide --url or start the daemon: codemie proxy start`);
92
+ process.exit(1);
93
+ }
94
+ if (!args.gatewayKey) {
95
+ console.error(`No gateway key. Provide --gateway-key or start the daemon: codemie proxy start`);
96
+ process.exit(1);
97
+ }
98
+
99
+ let baseUrl;
100
+ try { baseUrl = new URL(args.url); }
101
+ catch { console.error(`Invalid URL: ${args.url}`); process.exit(1); }
102
+
103
+ const endpoint = args.endpoint.startsWith('/') ? args.endpoint : `/${args.endpoint}`;
104
+ const targetUrl = new URL(endpoint, baseUrl);
105
+
106
+ const body = {
107
+ model: args.model,
108
+ messages: [{ role: 'user', content: args.message }],
109
+ max_tokens: args.maxTokens,
110
+ stream: args.stream,
111
+ };
112
+
113
+ const headers = {
114
+ 'Content-Type': 'application/json',
115
+ Accept: args.stream ? 'text/event-stream' : 'application/json',
116
+ Authorization: `Bearer ${args.gatewayKey}`,
117
+ };
118
+ if (args.sendAnthropicVersion) headers['anthropic-version'] = '2023-06-01';
119
+
120
+ console.log(`[test] POST ${targetUrl.href}`);
121
+ console.log(`[test] Headers: ${JSON.stringify({ ...headers, Authorization: 'Bearer ***' })}`);
122
+ console.log(`[test] Body: ${JSON.stringify(body)}`);
123
+
124
+ const startMs = Date.now();
125
+ let response;
126
+ try {
127
+ response = await fetch(targetUrl, {
128
+ method: 'POST',
129
+ headers,
130
+ body: JSON.stringify(body),
131
+ });
132
+ } catch (error) {
133
+ console.error(`[test] Request failed: ${error.message}`);
134
+ process.exit(1);
135
+ }
136
+
137
+ const ttfbMs = Date.now() - startMs;
138
+ console.log(`\n[test] Status: ${response.status} ${response.statusText} (TTFB ${ttfbMs}ms)`);
139
+ console.log(`[test] Response headers:`);
140
+ for (const [k, v] of response.headers.entries()) {
141
+ console.log(` ${k}: ${v}`);
142
+ }
143
+
144
+ if (args.stream) {
145
+ if (!response.body) {
146
+ console.error('[test] No response body for streaming');
147
+ process.exit(1);
148
+ }
149
+ console.log('\n[test] --- SSE stream ---');
150
+ const reader = response.body.getReader();
151
+ const decoder = new TextDecoder();
152
+ let chunkCount = 0;
153
+ let totalBytes = 0;
154
+ while (true) {
155
+ const { value, done } = await reader.read();
156
+ if (done) break;
157
+ chunkCount += 1;
158
+ totalBytes += value.length;
159
+ process.stdout.write(decoder.decode(value, { stream: true }));
160
+ }
161
+ const totalMs = Date.now() - startMs;
162
+ console.log(`\n[test] --- end (${chunkCount} chunks, ${totalBytes} bytes, ${totalMs}ms total) ---`);
163
+ } else {
164
+ const text = await response.text();
165
+ const totalMs = Date.now() - startMs;
166
+ console.log(`\n[test] Body (${text.length} bytes, ${totalMs}ms total):`);
167
+ console.log(text);
168
+ }
169
+
170
+ if (!response.ok) process.exit(1);
171
+ }
172
+
173
+ main().catch(err => { console.error(err); process.exit(1); });