agent-recorder 0.0.8 → 0.0.10

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 (101) hide show
  1. package/package.json +1 -1
  2. package/vendor/node_modules/@agent-recorder/cli/analytics/session-analytics.test.js +1 -0
  3. package/vendor/node_modules/@agent-recorder/cli/analytics/session-analytics.test.js.map +1 -1
  4. package/vendor/node_modules/@agent-recorder/cli/commands/configure-wrap.d.ts +15 -0
  5. package/vendor/node_modules/@agent-recorder/cli/commands/configure-wrap.d.ts.map +1 -0
  6. package/vendor/node_modules/@agent-recorder/cli/commands/configure-wrap.js +207 -0
  7. package/vendor/node_modules/@agent-recorder/cli/commands/configure-wrap.js.map +1 -0
  8. package/vendor/node_modules/@agent-recorder/cli/commands/configure.d.ts +2 -0
  9. package/vendor/node_modules/@agent-recorder/cli/commands/configure.d.ts.map +1 -1
  10. package/vendor/node_modules/@agent-recorder/cli/commands/configure.js +117 -1
  11. package/vendor/node_modules/@agent-recorder/cli/commands/configure.js.map +1 -1
  12. package/vendor/node_modules/@agent-recorder/cli/commands/doctor.d.ts.map +1 -1
  13. package/vendor/node_modules/@agent-recorder/cli/commands/doctor.js +113 -19
  14. package/vendor/node_modules/@agent-recorder/cli/commands/doctor.js.map +1 -1
  15. package/vendor/node_modules/@agent-recorder/cli/commands/doctor.test.d.ts +5 -0
  16. package/vendor/node_modules/@agent-recorder/cli/commands/doctor.test.d.ts.map +1 -0
  17. package/vendor/node_modules/@agent-recorder/cli/commands/doctor.test.js +152 -0
  18. package/vendor/node_modules/@agent-recorder/cli/commands/doctor.test.js.map +1 -0
  19. package/vendor/node_modules/@agent-recorder/cli/commands/install.d.ts +7 -1
  20. package/vendor/node_modules/@agent-recorder/cli/commands/install.d.ts.map +1 -1
  21. package/vendor/node_modules/@agent-recorder/cli/commands/install.js +98 -14
  22. package/vendor/node_modules/@agent-recorder/cli/commands/install.js.map +1 -1
  23. package/vendor/node_modules/@agent-recorder/cli/commands/install.test.d.ts +5 -0
  24. package/vendor/node_modules/@agent-recorder/cli/commands/install.test.d.ts.map +1 -0
  25. package/vendor/node_modules/@agent-recorder/cli/commands/install.test.js +173 -0
  26. package/vendor/node_modules/@agent-recorder/cli/commands/install.test.js.map +1 -0
  27. package/vendor/node_modules/@agent-recorder/cli/config/hubify.d.ts +51 -0
  28. package/vendor/node_modules/@agent-recorder/cli/config/hubify.d.ts.map +1 -0
  29. package/vendor/node_modules/@agent-recorder/cli/config/hubify.js +125 -0
  30. package/vendor/node_modules/@agent-recorder/cli/config/hubify.js.map +1 -0
  31. package/vendor/node_modules/@agent-recorder/cli/config/hubify.test.d.ts +5 -0
  32. package/vendor/node_modules/@agent-recorder/cli/config/hubify.test.d.ts.map +1 -0
  33. package/vendor/node_modules/@agent-recorder/cli/config/hubify.test.js +329 -0
  34. package/vendor/node_modules/@agent-recorder/cli/config/hubify.test.js.map +1 -0
  35. package/vendor/node_modules/@agent-recorder/cli/index.js +18 -3
  36. package/vendor/node_modules/@agent-recorder/cli/index.js.map +1 -1
  37. package/vendor/node_modules/@agent-recorder/core/claude-config.d.ts +32 -0
  38. package/vendor/node_modules/@agent-recorder/core/claude-config.d.ts.map +1 -0
  39. package/vendor/node_modules/@agent-recorder/core/claude-config.js +65 -0
  40. package/vendor/node_modules/@agent-recorder/core/claude-config.js.map +1 -0
  41. package/vendor/node_modules/@agent-recorder/core/config.d.ts +4 -0
  42. package/vendor/node_modules/@agent-recorder/core/config.d.ts.map +1 -1
  43. package/vendor/node_modules/@agent-recorder/core/config.js +6 -0
  44. package/vendor/node_modules/@agent-recorder/core/config.js.map +1 -1
  45. package/vendor/node_modules/@agent-recorder/core/db/events.d.ts +3 -0
  46. package/vendor/node_modules/@agent-recorder/core/db/events.d.ts.map +1 -1
  47. package/vendor/node_modules/@agent-recorder/core/db/events.js +8 -3
  48. package/vendor/node_modules/@agent-recorder/core/db/events.js.map +1 -1
  49. package/vendor/node_modules/@agent-recorder/core/db/events.test.js +34 -0
  50. package/vendor/node_modules/@agent-recorder/core/db/events.test.js.map +1 -1
  51. package/vendor/node_modules/@agent-recorder/core/index.d.ts +4 -1
  52. package/vendor/node_modules/@agent-recorder/core/index.d.ts.map +1 -1
  53. package/vendor/node_modules/@agent-recorder/core/index.js +4 -1
  54. package/vendor/node_modules/@agent-recorder/core/index.js.map +1 -1
  55. package/vendor/node_modules/@agent-recorder/core/migrations/006_add_upstream_key.sql +7 -0
  56. package/vendor/node_modules/@agent-recorder/core/providers/index.d.ts +9 -0
  57. package/vendor/node_modules/@agent-recorder/core/providers/index.d.ts.map +1 -0
  58. package/vendor/node_modules/@agent-recorder/core/providers/index.js +9 -0
  59. package/vendor/node_modules/@agent-recorder/core/providers/index.js.map +1 -0
  60. package/vendor/node_modules/@agent-recorder/core/providers/io.d.ts +36 -0
  61. package/vendor/node_modules/@agent-recorder/core/providers/io.d.ts.map +1 -0
  62. package/vendor/node_modules/@agent-recorder/core/providers/io.js +88 -0
  63. package/vendor/node_modules/@agent-recorder/core/providers/io.js.map +1 -0
  64. package/vendor/node_modules/@agent-recorder/core/providers/io.test.d.ts +5 -0
  65. package/vendor/node_modules/@agent-recorder/core/providers/io.test.d.ts.map +1 -0
  66. package/vendor/node_modules/@agent-recorder/core/providers/io.test.js +248 -0
  67. package/vendor/node_modules/@agent-recorder/core/providers/io.test.js.map +1 -0
  68. package/vendor/node_modules/@agent-recorder/core/providers/types.d.ts +36 -0
  69. package/vendor/node_modules/@agent-recorder/core/providers/types.d.ts.map +1 -0
  70. package/vendor/node_modules/@agent-recorder/core/providers/types.js +6 -0
  71. package/vendor/node_modules/@agent-recorder/core/providers/types.js.map +1 -0
  72. package/vendor/node_modules/@agent-recorder/core/types/events.d.ts +2 -0
  73. package/vendor/node_modules/@agent-recorder/core/types/events.d.ts.map +1 -1
  74. package/vendor/node_modules/@agent-recorder/core/wrap-utils.d.ts +42 -0
  75. package/vendor/node_modules/@agent-recorder/core/wrap-utils.d.ts.map +1 -0
  76. package/vendor/node_modules/@agent-recorder/core/wrap-utils.js +80 -0
  77. package/vendor/node_modules/@agent-recorder/core/wrap-utils.js.map +1 -0
  78. package/vendor/node_modules/@agent-recorder/service/index.d.ts.map +1 -1
  79. package/vendor/node_modules/@agent-recorder/service/index.js +19 -0
  80. package/vendor/node_modules/@agent-recorder/service/index.js.map +1 -1
  81. package/vendor/node_modules/@agent-recorder/service/mcp/auto-wrap-manager.d.ts +43 -0
  82. package/vendor/node_modules/@agent-recorder/service/mcp/auto-wrap-manager.d.ts.map +1 -0
  83. package/vendor/node_modules/@agent-recorder/service/mcp/auto-wrap-manager.js +221 -0
  84. package/vendor/node_modules/@agent-recorder/service/mcp/auto-wrap-manager.js.map +1 -0
  85. package/vendor/node_modules/@agent-recorder/service/mcp/hub.test.d.ts +6 -0
  86. package/vendor/node_modules/@agent-recorder/service/mcp/hub.test.d.ts.map +1 -0
  87. package/vendor/node_modules/@agent-recorder/service/mcp/hub.test.js +319 -0
  88. package/vendor/node_modules/@agent-recorder/service/mcp/hub.test.js.map +1 -0
  89. package/vendor/node_modules/@agent-recorder/service/mcp/proxy.d.ts +1 -0
  90. package/vendor/node_modules/@agent-recorder/service/mcp/proxy.d.ts.map +1 -1
  91. package/vendor/node_modules/@agent-recorder/service/mcp/proxy.js +267 -17
  92. package/vendor/node_modules/@agent-recorder/service/mcp/proxy.js.map +1 -1
  93. package/vendor/node_modules/@agent-recorder/service/mcp/proxy.test.js +165 -0
  94. package/vendor/node_modules/@agent-recorder/service/mcp/proxy.test.js.map +1 -1
  95. package/vendor/node_modules/@agent-recorder/service/mcp/recorder.d.ts +1 -0
  96. package/vendor/node_modules/@agent-recorder/service/mcp/recorder.d.ts.map +1 -1
  97. package/vendor/node_modules/@agent-recorder/service/mcp/recorder.js +5 -2
  98. package/vendor/node_modules/@agent-recorder/service/mcp/recorder.js.map +1 -1
  99. package/vendor/node_modules/@agent-recorder/service/routes/events.d.ts.map +1 -1
  100. package/vendor/node_modules/@agent-recorder/service/routes/events.js +1 -0
  101. package/vendor/node_modules/@agent-recorder/service/routes/events.js.map +1 -1
@@ -0,0 +1,173 @@
1
+ /**
2
+ * Tests for install command with automatic hubify configuration.
3
+ */
4
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
5
+ import { installCommand } from "./install.js";
6
+ import * as fs from "node:fs";
7
+ import * as os from "node:os";
8
+ import * as path from "node:path";
9
+ describe("Install Command", () => {
10
+ let tempDir;
11
+ let originalHome;
12
+ let mockClaudeConfigPath;
13
+ beforeEach(() => {
14
+ // Create temp directory to act as home
15
+ tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "ar-install-test-"));
16
+ originalHome = process.env.HOME || "";
17
+ process.env.HOME = tempDir;
18
+ // Create mock Claude config directory
19
+ const claudeDir = path.join(tempDir, ".claude");
20
+ fs.mkdirSync(claudeDir, { recursive: true });
21
+ mockClaudeConfigPath = path.join(claudeDir, "settings.json");
22
+ });
23
+ afterEach(() => {
24
+ // Restore original HOME
25
+ process.env.HOME = originalHome;
26
+ // Cleanup temp directory
27
+ if (fs.existsSync(tempDir)) {
28
+ fs.rmSync(tempDir, { recursive: true, force: true });
29
+ }
30
+ });
31
+ it("creates .agent-recorder directory and files", async () => {
32
+ await installCommand({ noConfigure: true });
33
+ const dataDir = path.join(tempDir, ".agent-recorder");
34
+ const envFile = path.join(dataDir, ".env");
35
+ const upstreamsFile = path.join(dataDir, "upstreams.json");
36
+ expect(fs.existsSync(dataDir)).toBe(true);
37
+ expect(fs.existsSync(envFile)).toBe(true);
38
+ expect(fs.existsSync(upstreamsFile)).toBe(true);
39
+ // Verify .env has expected content
40
+ const envContent = fs.readFileSync(envFile, "utf-8");
41
+ expect(envContent).toContain("AR_LISTEN_PORT=8787");
42
+ expect(envContent).toContain("AR_MCP_PROXY_PORT=8788");
43
+ // Verify upstreams.json is empty object
44
+ const upstreamsContent = fs.readFileSync(upstreamsFile, "utf-8");
45
+ expect(upstreamsContent.trim()).toBe("{}");
46
+ });
47
+ it("is idempotent - does not overwrite existing files", async () => {
48
+ const dataDir = path.join(tempDir, ".agent-recorder");
49
+ const envFile = path.join(dataDir, ".env");
50
+ // First run
51
+ await installCommand({ noConfigure: true });
52
+ // Modify .env file
53
+ fs.writeFileSync(envFile, "# Custom config\nAR_LISTEN_PORT=9999\n");
54
+ // Second run
55
+ await installCommand({ noConfigure: true });
56
+ // Verify .env was NOT overwritten
57
+ const envContent = fs.readFileSync(envFile, "utf-8");
58
+ expect(envContent).toContain("# Custom config");
59
+ expect(envContent).toContain("AR_LISTEN_PORT=9999");
60
+ expect(envContent).not.toContain("AR_LISTEN_PORT=8787");
61
+ });
62
+ it("automatically hubifies Claude config when Claude config exists", async () => {
63
+ // Create mock Claude config with existing MCP servers
64
+ const mockConfig = {
65
+ mcpServers: {
66
+ github: {
67
+ url: "https://api.github.com/mcp",
68
+ },
69
+ playwright: {
70
+ command: "npx",
71
+ args: ["@playwright/mcp"],
72
+ },
73
+ },
74
+ otherSetting: "preserved",
75
+ };
76
+ fs.writeFileSync(mockClaudeConfigPath, JSON.stringify(mockConfig, null, 2));
77
+ // Run install (hubify should run automatically)
78
+ await installCommand();
79
+ // Verify Claude config was updated
80
+ const updatedConfig = JSON.parse(fs.readFileSync(mockClaudeConfigPath, "utf-8"));
81
+ // Should only have agent-recorder entry
82
+ expect(Object.keys(updatedConfig.mcpServers)).toEqual(["agent-recorder"]);
83
+ expect(updatedConfig.mcpServers["agent-recorder"]).toEqual({
84
+ url: "http://127.0.0.1:8788/",
85
+ });
86
+ // Should preserve other settings
87
+ expect(updatedConfig.otherSetting).toBe("preserved");
88
+ // Verify backup was created
89
+ const backupFiles = fs
90
+ .readdirSync(path.join(tempDir, ".claude"))
91
+ .filter((f) => f.startsWith("settings.json") && f.includes(".bak"));
92
+ expect(backupFiles.length).toBeGreaterThan(0);
93
+ // Verify providers.json was created
94
+ const providersPath = path.join(tempDir, ".agent-recorder", "providers.json");
95
+ expect(fs.existsSync(providersPath)).toBe(true);
96
+ const providersFile = JSON.parse(fs.readFileSync(providersPath, "utf-8"));
97
+ // Should have 2 providers (github and playwright)
98
+ expect(providersFile.version).toBe(1);
99
+ expect(providersFile.providers).toHaveLength(2);
100
+ const providerIds = providersFile.providers.map((p) => p.id);
101
+ expect(providerIds).toContain("github");
102
+ expect(providerIds).toContain("playwright");
103
+ // Verify provider types
104
+ const githubProvider = providersFile.providers.find((p) => p.id === "github");
105
+ expect(githubProvider.type).toBe("http");
106
+ expect(githubProvider.url).toBe("https://api.github.com/mcp");
107
+ const playwrightProvider = providersFile.providers.find((p) => p.id === "playwright");
108
+ expect(playwrightProvider.type).toBe("stdio");
109
+ expect(playwrightProvider.command).toBe("npx");
110
+ expect(playwrightProvider.args).toEqual(["@playwright/mcp"]);
111
+ });
112
+ it("skips hubify when --no-configure is specified", async () => {
113
+ // Create mock Claude config
114
+ const mockConfig = {
115
+ mcpServers: {
116
+ github: {
117
+ url: "https://api.github.com/mcp",
118
+ },
119
+ },
120
+ };
121
+ fs.writeFileSync(mockClaudeConfigPath, JSON.stringify(mockConfig, null, 2));
122
+ // Run install with --no-configure
123
+ await installCommand({ noConfigure: true });
124
+ // Verify Claude config was NOT modified
125
+ const config = JSON.parse(fs.readFileSync(mockClaudeConfigPath, "utf-8"));
126
+ expect(config.mcpServers.github).toEqual({
127
+ url: "https://api.github.com/mcp",
128
+ });
129
+ // Should not have agent-recorder entry
130
+ expect(config.mcpServers["agent-recorder"]).toBeUndefined();
131
+ // Verify providers.json was NOT created
132
+ const providersPath = path.join(tempDir, ".agent-recorder", "providers.json");
133
+ expect(fs.existsSync(providersPath)).toBe(false);
134
+ // Verify no backup was created
135
+ const backupFiles = fs
136
+ .readdirSync(path.join(tempDir, ".claude"))
137
+ .filter((f) => f.includes(".bak"));
138
+ expect(backupFiles).toHaveLength(0);
139
+ });
140
+ it("handles case when Claude config does not exist", async () => {
141
+ // Don't create Claude config - it doesn't exist
142
+ // Run install (should handle gracefully)
143
+ await installCommand();
144
+ // Should still create .agent-recorder directory
145
+ const dataDir = path.join(tempDir, ".agent-recorder");
146
+ expect(fs.existsSync(dataDir)).toBe(true);
147
+ // Should not crash or create providers.json
148
+ const providersPath = path.join(dataDir, "providers.json");
149
+ expect(fs.existsSync(providersPath)).toBe(false);
150
+ });
151
+ it("skips already-agent-recorder entries during hubify", async () => {
152
+ // Create mock Claude config that already has agent-recorder
153
+ const mockConfig = {
154
+ mcpServers: {
155
+ "agent-recorder": {
156
+ url: "http://127.0.0.1:8788/",
157
+ },
158
+ github: {
159
+ url: "https://api.github.com/mcp",
160
+ },
161
+ },
162
+ };
163
+ fs.writeFileSync(mockClaudeConfigPath, JSON.stringify(mockConfig, null, 2));
164
+ // Run install
165
+ await installCommand();
166
+ // Verify providers.json has only github (not agent-recorder)
167
+ const providersPath = path.join(tempDir, ".agent-recorder", "providers.json");
168
+ const providersFile = JSON.parse(fs.readFileSync(providersPath, "utf-8"));
169
+ expect(providersFile.providers).toHaveLength(1);
170
+ expect(providersFile.providers[0].id).toBe("github");
171
+ });
172
+ });
173
+ //# sourceMappingURL=install.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.test.js","sourceRoot":"","sources":["../../src/commands/install.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Hubify transformation logic.
3
+ * Extracts MCP servers from Claude config and converts to providers.
4
+ */
5
+ import type { Provider, ProvidersFile } from "@agent-recorder/core";
6
+ export interface McpServerEntry {
7
+ url?: string;
8
+ command?: string;
9
+ args?: string[];
10
+ env?: Record<string, string>;
11
+ headers?: Record<string, string>;
12
+ [key: string]: unknown;
13
+ }
14
+ export interface HubifyResult {
15
+ /** New Claude config with only agent-recorder MCP entry */
16
+ newClaudeConfig: Record<string, unknown>;
17
+ /** Providers extracted from original config */
18
+ providers: Provider[];
19
+ /** Keys that were imported as providers */
20
+ importedKeys: string[];
21
+ /** Keys that were skipped (e.g., agent-recorder itself) */
22
+ skippedKeys: string[];
23
+ }
24
+ /**
25
+ * Extract providers from Claude config mcpServers.
26
+ * Converts each MCP server entry to a Provider.
27
+ *
28
+ * @param mcpServers - The mcpServers object from Claude config
29
+ * @returns Array of providers
30
+ */
31
+ export declare function extractProviders(mcpServers: Record<string, unknown>): Provider[];
32
+ /**
33
+ * Transform Claude config for hubify mode.
34
+ * Replaces mcpServers with only agent-recorder entry.
35
+ * Preserves all other Claude config fields.
36
+ *
37
+ * @param claudeConfig - Original Claude config
38
+ * @param agentRecorderUrl - URL for agent-recorder MCP entry
39
+ * @returns Hubify transformation result
40
+ */
41
+ export declare function hubifyClaudeConfig(claudeConfig: Record<string, unknown>, agentRecorderUrl: string): HubifyResult;
42
+ /**
43
+ * Merge providers into providers file.
44
+ * Upserts providers by ID.
45
+ *
46
+ * @param existingFile - Existing providers file
47
+ * @param newProviders - Providers to merge
48
+ * @returns Updated providers file
49
+ */
50
+ export declare function mergeProviders(existingFile: ProvidersFile, newProviders: Provider[]): ProvidersFile;
51
+ //# sourceMappingURL=hubify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hubify.d.ts","sourceRoot":"","sources":["../../src/config/hubify.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEpE,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,2DAA2D;IAC3D,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,+CAA+C;IAC/C,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,2CAA2C;IAC3C,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,2DAA2D;IAC3D,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,QAAQ,EAAE,CAqDZ;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,gBAAgB,EAAE,MAAM,GACvB,YAAY,CAwCd;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,YAAY,EAAE,aAAa,EAC3B,YAAY,EAAE,QAAQ,EAAE,GACvB,aAAa,CAiBf"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Hubify transformation logic.
3
+ * Extracts MCP servers from Claude config and converts to providers.
4
+ */
5
+ /**
6
+ * Extract providers from Claude config mcpServers.
7
+ * Converts each MCP server entry to a Provider.
8
+ *
9
+ * @param mcpServers - The mcpServers object from Claude config
10
+ * @returns Array of providers
11
+ */
12
+ export function extractProviders(mcpServers) {
13
+ const providers = [];
14
+ for (const [key, entry] of Object.entries(mcpServers)) {
15
+ // Skip agent-recorder itself
16
+ if (key === "agent-recorder") {
17
+ continue;
18
+ }
19
+ if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
20
+ continue;
21
+ }
22
+ const serverEntry = entry;
23
+ // HTTP provider (has url field)
24
+ if (typeof serverEntry.url === "string") {
25
+ const httpProvider = {
26
+ id: key,
27
+ type: "http",
28
+ url: serverEntry.url,
29
+ ...(serverEntry.headers && { headers: serverEntry.headers }),
30
+ };
31
+ providers.push(httpProvider);
32
+ continue;
33
+ }
34
+ // Stdio provider (has command field)
35
+ if (typeof serverEntry.command === "string") {
36
+ const args = Array.isArray(serverEntry.args)
37
+ ? serverEntry.args
38
+ : undefined;
39
+ const env = serverEntry.env &&
40
+ typeof serverEntry.env === "object" &&
41
+ !Array.isArray(serverEntry.env)
42
+ ? serverEntry.env
43
+ : undefined;
44
+ const stdioProvider = {
45
+ id: key,
46
+ type: "stdio",
47
+ command: serverEntry.command,
48
+ ...(args && { args }),
49
+ ...(env && { env }),
50
+ };
51
+ providers.push(stdioProvider);
52
+ continue;
53
+ }
54
+ }
55
+ return providers;
56
+ }
57
+ /**
58
+ * Transform Claude config for hubify mode.
59
+ * Replaces mcpServers with only agent-recorder entry.
60
+ * Preserves all other Claude config fields.
61
+ *
62
+ * @param claudeConfig - Original Claude config
63
+ * @param agentRecorderUrl - URL for agent-recorder MCP entry
64
+ * @returns Hubify transformation result
65
+ */
66
+ export function hubifyClaudeConfig(claudeConfig, agentRecorderUrl) {
67
+ // Extract existing mcpServers
68
+ const mcpServers = claudeConfig.mcpServers &&
69
+ typeof claudeConfig.mcpServers === "object" &&
70
+ !Array.isArray(claudeConfig.mcpServers)
71
+ ? claudeConfig.mcpServers
72
+ : {};
73
+ // Extract providers from existing servers
74
+ const providers = extractProviders(mcpServers);
75
+ // Track imported and skipped keys
76
+ const importedKeys = [];
77
+ const skippedKeys = [];
78
+ for (const key of Object.keys(mcpServers)) {
79
+ if (key === "agent-recorder") {
80
+ skippedKeys.push(key);
81
+ }
82
+ else if (providers.some((p) => p.id === key)) {
83
+ importedKeys.push(key);
84
+ }
85
+ }
86
+ // Create new config with only agent-recorder
87
+ const newClaudeConfig = {
88
+ ...claudeConfig,
89
+ mcpServers: {
90
+ "agent-recorder": {
91
+ url: agentRecorderUrl,
92
+ },
93
+ },
94
+ };
95
+ return {
96
+ newClaudeConfig,
97
+ providers,
98
+ importedKeys,
99
+ skippedKeys,
100
+ };
101
+ }
102
+ /**
103
+ * Merge providers into providers file.
104
+ * Upserts providers by ID.
105
+ *
106
+ * @param existingFile - Existing providers file
107
+ * @param newProviders - Providers to merge
108
+ * @returns Updated providers file
109
+ */
110
+ export function mergeProviders(existingFile, newProviders) {
111
+ const providerMap = new Map();
112
+ // Add existing providers
113
+ for (const provider of existingFile.providers) {
114
+ providerMap.set(provider.id, provider);
115
+ }
116
+ // Upsert new providers
117
+ for (const provider of newProviders) {
118
+ providerMap.set(provider.id, provider);
119
+ }
120
+ return {
121
+ version: 1,
122
+ providers: Array.from(providerMap.values()),
123
+ };
124
+ }
125
+ //# sourceMappingURL=hubify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hubify.js","sourceRoot":"","sources":["../../src/config/hubify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for hubify transformation logic.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=hubify.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hubify.test.d.ts","sourceRoot":"","sources":["../../src/config/hubify.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}