agent-recorder 0.0.9 → 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 (79) hide show
  1. package/package.json +1 -1
  2. package/vendor/node_modules/@agent-recorder/cli/commands/configure-wrap.d.ts.map +1 -1
  3. package/vendor/node_modules/@agent-recorder/cli/commands/configure-wrap.js +5 -31
  4. package/vendor/node_modules/@agent-recorder/cli/commands/configure-wrap.js.map +1 -1
  5. package/vendor/node_modules/@agent-recorder/cli/commands/configure.d.ts +2 -0
  6. package/vendor/node_modules/@agent-recorder/cli/commands/configure.d.ts.map +1 -1
  7. package/vendor/node_modules/@agent-recorder/cli/commands/configure.js +117 -1
  8. package/vendor/node_modules/@agent-recorder/cli/commands/configure.js.map +1 -1
  9. package/vendor/node_modules/@agent-recorder/cli/commands/doctor.d.ts.map +1 -1
  10. package/vendor/node_modules/@agent-recorder/cli/commands/doctor.js +113 -19
  11. package/vendor/node_modules/@agent-recorder/cli/commands/doctor.js.map +1 -1
  12. package/vendor/node_modules/@agent-recorder/cli/commands/doctor.test.d.ts +5 -0
  13. package/vendor/node_modules/@agent-recorder/cli/commands/doctor.test.d.ts.map +1 -0
  14. package/vendor/node_modules/@agent-recorder/cli/commands/doctor.test.js +152 -0
  15. package/vendor/node_modules/@agent-recorder/cli/commands/doctor.test.js.map +1 -0
  16. package/vendor/node_modules/@agent-recorder/cli/commands/install.d.ts +7 -1
  17. package/vendor/node_modules/@agent-recorder/cli/commands/install.d.ts.map +1 -1
  18. package/vendor/node_modules/@agent-recorder/cli/commands/install.js +89 -14
  19. package/vendor/node_modules/@agent-recorder/cli/commands/install.js.map +1 -1
  20. package/vendor/node_modules/@agent-recorder/cli/commands/install.test.d.ts +5 -0
  21. package/vendor/node_modules/@agent-recorder/cli/commands/install.test.d.ts.map +1 -0
  22. package/vendor/node_modules/@agent-recorder/cli/commands/install.test.js +173 -0
  23. package/vendor/node_modules/@agent-recorder/cli/commands/install.test.js.map +1 -0
  24. package/vendor/node_modules/@agent-recorder/cli/config/hubify.d.ts +51 -0
  25. package/vendor/node_modules/@agent-recorder/cli/config/hubify.d.ts.map +1 -0
  26. package/vendor/node_modules/@agent-recorder/cli/config/hubify.js +125 -0
  27. package/vendor/node_modules/@agent-recorder/cli/config/hubify.js.map +1 -0
  28. package/vendor/node_modules/@agent-recorder/cli/config/hubify.test.d.ts +5 -0
  29. package/vendor/node_modules/@agent-recorder/cli/config/hubify.test.d.ts.map +1 -0
  30. package/vendor/node_modules/@agent-recorder/cli/config/hubify.test.js +329 -0
  31. package/vendor/node_modules/@agent-recorder/cli/config/hubify.test.js.map +1 -0
  32. package/vendor/node_modules/@agent-recorder/cli/index.js +7 -3
  33. package/vendor/node_modules/@agent-recorder/cli/index.js.map +1 -1
  34. package/vendor/node_modules/@agent-recorder/core/claude-config.d.ts +32 -0
  35. package/vendor/node_modules/@agent-recorder/core/claude-config.d.ts.map +1 -0
  36. package/vendor/node_modules/@agent-recorder/core/claude-config.js +65 -0
  37. package/vendor/node_modules/@agent-recorder/core/claude-config.js.map +1 -0
  38. package/vendor/node_modules/@agent-recorder/core/index.d.ts +3 -0
  39. package/vendor/node_modules/@agent-recorder/core/index.d.ts.map +1 -1
  40. package/vendor/node_modules/@agent-recorder/core/index.js +3 -0
  41. package/vendor/node_modules/@agent-recorder/core/index.js.map +1 -1
  42. package/vendor/node_modules/@agent-recorder/core/providers/index.d.ts +9 -0
  43. package/vendor/node_modules/@agent-recorder/core/providers/index.d.ts.map +1 -0
  44. package/vendor/node_modules/@agent-recorder/core/providers/index.js +9 -0
  45. package/vendor/node_modules/@agent-recorder/core/providers/index.js.map +1 -0
  46. package/vendor/node_modules/@agent-recorder/core/providers/io.d.ts +36 -0
  47. package/vendor/node_modules/@agent-recorder/core/providers/io.d.ts.map +1 -0
  48. package/vendor/node_modules/@agent-recorder/core/providers/io.js +88 -0
  49. package/vendor/node_modules/@agent-recorder/core/providers/io.js.map +1 -0
  50. package/vendor/node_modules/@agent-recorder/core/providers/io.test.d.ts +5 -0
  51. package/vendor/node_modules/@agent-recorder/core/providers/io.test.d.ts.map +1 -0
  52. package/vendor/node_modules/@agent-recorder/core/providers/io.test.js +248 -0
  53. package/vendor/node_modules/@agent-recorder/core/providers/io.test.js.map +1 -0
  54. package/vendor/node_modules/@agent-recorder/core/providers/types.d.ts +36 -0
  55. package/vendor/node_modules/@agent-recorder/core/providers/types.d.ts.map +1 -0
  56. package/vendor/node_modules/@agent-recorder/core/providers/types.js +6 -0
  57. package/vendor/node_modules/@agent-recorder/core/providers/types.js.map +1 -0
  58. package/vendor/node_modules/@agent-recorder/core/wrap-utils.d.ts +42 -0
  59. package/vendor/node_modules/@agent-recorder/core/wrap-utils.d.ts.map +1 -0
  60. package/vendor/node_modules/@agent-recorder/core/wrap-utils.js +80 -0
  61. package/vendor/node_modules/@agent-recorder/core/wrap-utils.js.map +1 -0
  62. package/vendor/node_modules/@agent-recorder/service/index.d.ts.map +1 -1
  63. package/vendor/node_modules/@agent-recorder/service/index.js +19 -0
  64. package/vendor/node_modules/@agent-recorder/service/index.js.map +1 -1
  65. package/vendor/node_modules/@agent-recorder/service/mcp/auto-wrap-manager.d.ts +43 -0
  66. package/vendor/node_modules/@agent-recorder/service/mcp/auto-wrap-manager.d.ts.map +1 -0
  67. package/vendor/node_modules/@agent-recorder/service/mcp/auto-wrap-manager.js +221 -0
  68. package/vendor/node_modules/@agent-recorder/service/mcp/auto-wrap-manager.js.map +1 -0
  69. package/vendor/node_modules/@agent-recorder/service/mcp/hub.test.d.ts +6 -0
  70. package/vendor/node_modules/@agent-recorder/service/mcp/hub.test.d.ts.map +1 -0
  71. package/vendor/node_modules/@agent-recorder/service/mcp/hub.test.js +319 -0
  72. package/vendor/node_modules/@agent-recorder/service/mcp/hub.test.js.map +1 -0
  73. package/vendor/node_modules/@agent-recorder/service/mcp/proxy.d.ts +1 -0
  74. package/vendor/node_modules/@agent-recorder/service/mcp/proxy.d.ts.map +1 -1
  75. package/vendor/node_modules/@agent-recorder/service/mcp/proxy.js +239 -34
  76. package/vendor/node_modules/@agent-recorder/service/mcp/proxy.js.map +1 -1
  77. package/vendor/node_modules/@agent-recorder/service/routes/events.d.ts.map +1 -1
  78. package/vendor/node_modules/@agent-recorder/service/routes/events.js +1 -0
  79. package/vendor/node_modules/@agent-recorder/service/routes/events.js.map +1 -1
@@ -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":"AAAA;;;GAGG;AAwBH;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,UAAmC;IAEnC,MAAM,SAAS,GAAe,EAAE,CAAC;IAEjC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACtD,6BAA6B;QAC7B,IAAI,GAAG,KAAK,gBAAgB,EAAE,CAAC;YAC7B,SAAS;QACX,CAAC;QAED,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChE,SAAS;QACX,CAAC;QAED,MAAM,WAAW,GAAG,KAAuB,CAAC;QAE5C,gCAAgC;QAChC,IAAI,OAAO,WAAW,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YACxC,MAAM,YAAY,GAAa;gBAC7B,EAAE,EAAE,GAAG;gBACP,IAAI,EAAE,MAAM;gBACZ,GAAG,EAAE,WAAW,CAAC,GAAG;gBACpB,GAAG,CAAC,WAAW,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC;aAC7D,CAAC;YACF,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC7B,SAAS;QACX,CAAC;QAED,qCAAqC;QACrC,IAAI,OAAO,WAAW,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;gBAC1C,CAAC,CAAE,WAAW,CAAC,IAAiB;gBAChC,CAAC,CAAC,SAAS,CAAC;YAEd,MAAM,GAAG,GACP,WAAW,CAAC,GAAG;gBACf,OAAO,WAAW,CAAC,GAAG,KAAK,QAAQ;gBACnC,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC;gBAC7B,CAAC,CAAE,WAAW,CAAC,GAA8B;gBAC7C,CAAC,CAAC,SAAS,CAAC;YAEhB,MAAM,aAAa,GAAa;gBAC9B,EAAE,EAAE,GAAG;gBACP,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,WAAW,CAAC,OAAO;gBAC5B,GAAG,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;gBACrB,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC;aACpB,CAAC;YACF,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC9B,SAAS;QACX,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAChC,YAAqC,EACrC,gBAAwB;IAExB,8BAA8B;IAC9B,MAAM,UAAU,GACd,YAAY,CAAC,UAAU;QACvB,OAAO,YAAY,CAAC,UAAU,KAAK,QAAQ;QAC3C,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC;QACrC,CAAC,CAAE,YAAY,CAAC,UAAsC;QACtD,CAAC,CAAC,EAAE,CAAC;IAET,0CAA0C;IAC1C,MAAM,SAAS,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAE/C,kCAAkC;IAClC,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1C,IAAI,GAAG,KAAK,gBAAgB,EAAE,CAAC;YAC7B,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC;YAC/C,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,MAAM,eAAe,GAAG;QACtB,GAAG,YAAY;QACf,UAAU,EAAE;YACV,gBAAgB,EAAE;gBAChB,GAAG,EAAE,gBAAgB;aACtB;SACF;KACF,CAAC;IAEF,OAAO;QACL,eAAe;QACf,SAAS;QACT,YAAY;QACZ,WAAW;KACZ,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,YAA2B,EAC3B,YAAwB;IAExB,MAAM,WAAW,GAAG,IAAI,GAAG,EAAoB,CAAC;IAEhD,yBAAyB;IACzB,KAAK,MAAM,QAAQ,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;QAC9C,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED,uBAAuB;IACvB,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;QACpC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC;QACV,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;KAC5C,CAAC;AACJ,CAAC"}
@@ -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"}
@@ -0,0 +1,329 @@
1
+ /**
2
+ * Tests for hubify transformation logic.
3
+ */
4
+ import { describe, it, expect } from "vitest";
5
+ import { extractProviders, hubifyClaudeConfig, mergeProviders, } from "./hubify.js";
6
+ describe("Hubify", () => {
7
+ describe("extractProviders", () => {
8
+ it("extracts HTTP providers correctly", () => {
9
+ const mcpServers = {
10
+ github: {
11
+ url: "https://api.github.com/mcp",
12
+ headers: { Authorization: "Bearer token" },
13
+ },
14
+ local: {
15
+ url: "http://localhost:3000",
16
+ },
17
+ };
18
+ const providers = extractProviders(mcpServers);
19
+ expect(providers).toHaveLength(2);
20
+ expect(providers[0]).toEqual({
21
+ id: "github",
22
+ type: "http",
23
+ url: "https://api.github.com/mcp",
24
+ headers: { Authorization: "Bearer token" },
25
+ });
26
+ expect(providers[1]).toEqual({
27
+ id: "local",
28
+ type: "http",
29
+ url: "http://localhost:3000",
30
+ headers: undefined,
31
+ });
32
+ });
33
+ it("extracts stdio providers correctly", () => {
34
+ const mcpServers = {
35
+ playwright: {
36
+ command: "npx",
37
+ args: ["@playwright/mcp"],
38
+ env: { NODE_ENV: "test" },
39
+ },
40
+ filesystem: {
41
+ command: "node",
42
+ args: ["server.js", "--port", "8080"],
43
+ },
44
+ };
45
+ const providers = extractProviders(mcpServers);
46
+ expect(providers).toHaveLength(2);
47
+ expect(providers[0]).toEqual({
48
+ id: "playwright",
49
+ type: "stdio",
50
+ command: "npx",
51
+ args: ["@playwright/mcp"],
52
+ env: { NODE_ENV: "test" },
53
+ });
54
+ expect(providers[1]).toEqual({
55
+ id: "filesystem",
56
+ type: "stdio",
57
+ command: "node",
58
+ args: ["server.js", "--port", "8080"],
59
+ env: undefined,
60
+ });
61
+ });
62
+ it("skips agent-recorder itself", () => {
63
+ const mcpServers = {
64
+ "agent-recorder": {
65
+ url: "http://127.0.0.1:8788/",
66
+ },
67
+ github: {
68
+ url: "https://api.github.com/mcp",
69
+ },
70
+ };
71
+ const providers = extractProviders(mcpServers);
72
+ expect(providers).toHaveLength(1);
73
+ expect(providers[0]?.id).toBe("github");
74
+ });
75
+ it("handles mixed HTTP and stdio providers", () => {
76
+ const mcpServers = {
77
+ github: {
78
+ url: "https://api.github.com/mcp",
79
+ },
80
+ playwright: {
81
+ command: "npx",
82
+ args: ["@playwright/mcp"],
83
+ },
84
+ local: {
85
+ url: "http://localhost:3000",
86
+ },
87
+ };
88
+ const providers = extractProviders(mcpServers);
89
+ expect(providers).toHaveLength(3);
90
+ expect(providers.find((p) => p.id === "github")?.type).toBe("http");
91
+ expect(providers.find((p) => p.id === "playwright")?.type).toBe("stdio");
92
+ expect(providers.find((p) => p.id === "local")?.type).toBe("http");
93
+ });
94
+ it("skips invalid entries", () => {
95
+ const mcpServers = {
96
+ valid: {
97
+ url: "http://localhost:3000",
98
+ },
99
+ invalid1: null,
100
+ invalid2: "string",
101
+ invalid3: [],
102
+ invalid4: {
103
+ // No url or command
104
+ someField: "value",
105
+ },
106
+ };
107
+ const providers = extractProviders(mcpServers);
108
+ expect(providers).toHaveLength(1);
109
+ expect(providers[0]?.id).toBe("valid");
110
+ });
111
+ it("returns empty array for empty mcpServers", () => {
112
+ const providers = extractProviders({});
113
+ expect(providers).toEqual([]);
114
+ });
115
+ });
116
+ describe("hubifyClaudeConfig", () => {
117
+ it("replaces mcpServers with only agent-recorder", () => {
118
+ const claudeConfig = {
119
+ mcpServers: {
120
+ github: {
121
+ url: "https://api.github.com/mcp",
122
+ },
123
+ playwright: {
124
+ command: "npx",
125
+ args: ["@playwright/mcp"],
126
+ },
127
+ },
128
+ otherSetting: "preserved",
129
+ };
130
+ const result = hubifyClaudeConfig(claudeConfig, "http://127.0.0.1:8788/");
131
+ expect(result.newClaudeConfig).toEqual({
132
+ mcpServers: {
133
+ "agent-recorder": {
134
+ url: "http://127.0.0.1:8788/",
135
+ },
136
+ },
137
+ otherSetting: "preserved",
138
+ });
139
+ });
140
+ it("extracts providers from original config", () => {
141
+ const claudeConfig = {
142
+ mcpServers: {
143
+ github: {
144
+ url: "https://api.github.com/mcp",
145
+ },
146
+ playwright: {
147
+ command: "npx",
148
+ args: ["@playwright/mcp"],
149
+ },
150
+ },
151
+ };
152
+ const result = hubifyClaudeConfig(claudeConfig, "http://127.0.0.1:8788/");
153
+ expect(result.providers).toHaveLength(2);
154
+ expect(result.providers.find((p) => p.id === "github")).toBeDefined();
155
+ expect(result.providers.find((p) => p.id === "playwright")).toBeDefined();
156
+ });
157
+ it("tracks imported and skipped keys", () => {
158
+ const claudeConfig = {
159
+ mcpServers: {
160
+ "agent-recorder": {
161
+ url: "http://127.0.0.1:8788/",
162
+ },
163
+ github: {
164
+ url: "https://api.github.com/mcp",
165
+ },
166
+ playwright: {
167
+ command: "npx",
168
+ args: ["@playwright/mcp"],
169
+ },
170
+ },
171
+ };
172
+ const result = hubifyClaudeConfig(claudeConfig, "http://127.0.0.1:8788/");
173
+ expect(result.importedKeys).toEqual(["github", "playwright"]);
174
+ expect(result.skippedKeys).toEqual(["agent-recorder"]);
175
+ });
176
+ it("preserves all other Claude config fields", () => {
177
+ const claudeConfig = {
178
+ mcpServers: {
179
+ github: {
180
+ url: "https://api.github.com/mcp",
181
+ },
182
+ },
183
+ plugins: ["some-plugin"],
184
+ theme: "dark",
185
+ editor: {
186
+ fontSize: 14,
187
+ tabSize: 2,
188
+ },
189
+ };
190
+ const result = hubifyClaudeConfig(claudeConfig, "http://127.0.0.1:8788/");
191
+ expect(result.newClaudeConfig.plugins).toEqual(["some-plugin"]);
192
+ expect(result.newClaudeConfig.theme).toBe("dark");
193
+ expect(result.newClaudeConfig.editor).toEqual({
194
+ fontSize: 14,
195
+ tabSize: 2,
196
+ });
197
+ });
198
+ it("handles config with no mcpServers", () => {
199
+ const claudeConfig = {
200
+ theme: "dark",
201
+ };
202
+ const result = hubifyClaudeConfig(claudeConfig, "http://127.0.0.1:8788/");
203
+ expect(result.newClaudeConfig).toEqual({
204
+ theme: "dark",
205
+ mcpServers: {
206
+ "agent-recorder": {
207
+ url: "http://127.0.0.1:8788/",
208
+ },
209
+ },
210
+ });
211
+ expect(result.providers).toEqual([]);
212
+ expect(result.importedKeys).toEqual([]);
213
+ expect(result.skippedKeys).toEqual([]);
214
+ });
215
+ it("handles config with only agent-recorder", () => {
216
+ const claudeConfig = {
217
+ mcpServers: {
218
+ "agent-recorder": {
219
+ url: "http://127.0.0.1:8788/",
220
+ },
221
+ },
222
+ };
223
+ const result = hubifyClaudeConfig(claudeConfig, "http://127.0.0.1:8788/");
224
+ expect(result.providers).toEqual([]);
225
+ expect(result.importedKeys).toEqual([]);
226
+ expect(result.skippedKeys).toEqual(["agent-recorder"]);
227
+ });
228
+ });
229
+ describe("mergeProviders", () => {
230
+ it("adds new providers to empty file", () => {
231
+ const existingFile = {
232
+ version: 1,
233
+ providers: [],
234
+ };
235
+ const newProviders = [
236
+ {
237
+ id: "github",
238
+ type: "http",
239
+ url: "https://api.github.com/mcp",
240
+ },
241
+ ];
242
+ const result = mergeProviders(existingFile, newProviders);
243
+ expect(result.version).toBe(1);
244
+ expect(result.providers).toHaveLength(1);
245
+ expect(result.providers[0]).toEqual(newProviders[0]);
246
+ });
247
+ it("replaces existing provider with same id", () => {
248
+ const existingFile = {
249
+ version: 1,
250
+ providers: [
251
+ {
252
+ id: "github",
253
+ type: "http",
254
+ url: "https://old-url.com",
255
+ },
256
+ ],
257
+ };
258
+ const newProviders = [
259
+ {
260
+ id: "github",
261
+ type: "http",
262
+ url: "https://new-url.com",
263
+ },
264
+ ];
265
+ const result = mergeProviders(existingFile, newProviders);
266
+ expect(result.providers).toHaveLength(1);
267
+ expect(result.providers[0].url).toBe("https://new-url.com");
268
+ });
269
+ it("merges new and existing providers", () => {
270
+ const existingFile = {
271
+ version: 1,
272
+ providers: [
273
+ {
274
+ id: "existing",
275
+ type: "http",
276
+ url: "https://existing.com",
277
+ },
278
+ ],
279
+ };
280
+ const newProviders = [
281
+ {
282
+ id: "new",
283
+ type: "stdio",
284
+ command: "npx",
285
+ args: ["@playwright/mcp"],
286
+ },
287
+ ];
288
+ const result = mergeProviders(existingFile, newProviders);
289
+ expect(result.providers).toHaveLength(2);
290
+ expect(result.providers.find((p) => p.id === "existing")).toBeDefined();
291
+ expect(result.providers.find((p) => p.id === "new")).toBeDefined();
292
+ });
293
+ it("handles multiple providers with same ids", () => {
294
+ const existingFile = {
295
+ version: 1,
296
+ providers: [
297
+ {
298
+ id: "provider1",
299
+ type: "http",
300
+ url: "https://old1.com",
301
+ },
302
+ {
303
+ id: "provider2",
304
+ type: "http",
305
+ url: "https://old2.com",
306
+ },
307
+ ],
308
+ };
309
+ const newProviders = [
310
+ {
311
+ id: "provider1",
312
+ type: "http",
313
+ url: "https://new1.com",
314
+ },
315
+ {
316
+ id: "provider3",
317
+ type: "stdio",
318
+ command: "node",
319
+ },
320
+ ];
321
+ const result = mergeProviders(existingFile, newProviders);
322
+ expect(result.providers).toHaveLength(3);
323
+ expect(result.providers.find((p) => p.id === "provider1").url).toBe("https://new1.com");
324
+ expect(result.providers.find((p) => p.id === "provider2").url).toBe("https://old2.com");
325
+ expect(result.providers.find((p) => p.id === "provider3")).toBeDefined();
326
+ });
327
+ });
328
+ });
329
+ //# sourceMappingURL=hubify.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hubify.test.js","sourceRoot":"","sources":["../../src/config/hubify.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,GACf,MAAM,aAAa,CAAC;AAOrB,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,UAAU,GAAG;gBACjB,MAAM,EAAE;oBACN,GAAG,EAAE,4BAA4B;oBACjC,OAAO,EAAE,EAAE,aAAa,EAAE,cAAc,EAAE;iBAC3C;gBACD,KAAK,EAAE;oBACL,GAAG,EAAE,uBAAuB;iBAC7B;aACF,CAAC;YAEF,MAAM,SAAS,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAE/C,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;gBAC3B,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,MAAM;gBACZ,GAAG,EAAE,4BAA4B;gBACjC,OAAO,EAAE,EAAE,aAAa,EAAE,cAAc,EAAE;aAC3C,CAAC,CAAC;YACH,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;gBAC3B,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,MAAM;gBACZ,GAAG,EAAE,uBAAuB;gBAC5B,OAAO,EAAE,SAAS;aACnB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,UAAU,GAAG;gBACjB,UAAU,EAAE;oBACV,OAAO,EAAE,KAAK;oBACd,IAAI,EAAE,CAAC,iBAAiB,CAAC;oBACzB,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;iBAC1B;gBACD,UAAU,EAAE;oBACV,OAAO,EAAE,MAAM;oBACf,IAAI,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC;iBACtC;aACF,CAAC;YAEF,MAAM,SAAS,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAE/C,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;gBAC3B,EAAE,EAAE,YAAY;gBAChB,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,CAAC,iBAAiB,CAAC;gBACzB,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;aAC1B,CAAC,CAAC;YACH,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;gBAC3B,EAAE,EAAE,YAAY;gBAChB,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC;gBACrC,GAAG,EAAE,SAAS;aACf,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,UAAU,GAAG;gBACjB,gBAAgB,EAAE;oBAChB,GAAG,EAAE,wBAAwB;iBAC9B;gBACD,MAAM,EAAE;oBACN,GAAG,EAAE,4BAA4B;iBAClC;aACF,CAAC;YAEF,MAAM,SAAS,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAE/C,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,UAAU,GAAG;gBACjB,MAAM,EAAE;oBACN,GAAG,EAAE,4BAA4B;iBAClC;gBACD,UAAU,EAAE;oBACV,OAAO,EAAE,KAAK;oBACd,IAAI,EAAE,CAAC,iBAAiB,CAAC;iBAC1B;gBACD,KAAK,EAAE;oBACL,GAAG,EAAE,uBAAuB;iBAC7B;aACF,CAAC;YAEF,MAAM,SAAS,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAE/C,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpE,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzE,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC/B,MAAM,UAAU,GAAG;gBACjB,KAAK,EAAE;oBACL,GAAG,EAAE,uBAAuB;iBAC7B;gBACD,QAAQ,EAAE,IAAI;gBACd,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,EAAE;gBACZ,QAAQ,EAAE;oBACR,oBAAoB;oBACpB,SAAS,EAAE,OAAO;iBACnB;aACF,CAAC;YAEF,MAAM,SAAS,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAE/C,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,SAAS,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;YACvC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,YAAY,GAAG;gBACnB,UAAU,EAAE;oBACV,MAAM,EAAE;wBACN,GAAG,EAAE,4BAA4B;qBAClC;oBACD,UAAU,EAAE;wBACV,OAAO,EAAE,KAAK;wBACd,IAAI,EAAE,CAAC,iBAAiB,CAAC;qBAC1B;iBACF;gBACD,YAAY,EAAE,WAAW;aAC1B,CAAC;YAEF,MAAM,MAAM,GAAG,kBAAkB,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;YAE1E,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC;gBACrC,UAAU,EAAE;oBACV,gBAAgB,EAAE;wBAChB,GAAG,EAAE,wBAAwB;qBAC9B;iBACF;gBACD,YAAY,EAAE,WAAW;aAC1B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,YAAY,GAAG;gBACnB,UAAU,EAAE;oBACV,MAAM,EAAE;wBACN,GAAG,EAAE,4BAA4B;qBAClC;oBACD,UAAU,EAAE;wBACV,OAAO,EAAE,KAAK;wBACd,IAAI,EAAE,CAAC,iBAAiB,CAAC;qBAC1B;iBACF;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,kBAAkB,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;YAE1E,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACtE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,YAAY,GAAG;gBACnB,UAAU,EAAE;oBACV,gBAAgB,EAAE;wBAChB,GAAG,EAAE,wBAAwB;qBAC9B;oBACD,MAAM,EAAE;wBACN,GAAG,EAAE,4BAA4B;qBAClC;oBACD,UAAU,EAAE;wBACV,OAAO,EAAE,KAAK;wBACd,IAAI,EAAE,CAAC,iBAAiB,CAAC;qBAC1B;iBACF;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,kBAAkB,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;YAE1E,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;YAC9D,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,YAAY,GAAG;gBACnB,UAAU,EAAE;oBACV,MAAM,EAAE;wBACN,GAAG,EAAE,4BAA4B;qBAClC;iBACF;gBACD,OAAO,EAAE,CAAC,aAAa,CAAC;gBACxB,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE;oBACN,QAAQ,EAAE,EAAE;oBACZ,OAAO,EAAE,CAAC;iBACX;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,kBAAkB,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;YAE1E,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;YAChE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClD,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBAC5C,QAAQ,EAAE,EAAE;gBACZ,OAAO,EAAE,CAAC;aACX,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,YAAY,GAAG;gBACnB,KAAK,EAAE,MAAM;aACd,CAAC;YAEF,MAAM,MAAM,GAAG,kBAAkB,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;YAE1E,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC;gBACrC,KAAK,EAAE,MAAM;gBACb,UAAU,EAAE;oBACV,gBAAgB,EAAE;wBAChB,GAAG,EAAE,wBAAwB;qBAC9B;iBACF;aACF,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,YAAY,GAAG;gBACnB,UAAU,EAAE;oBACV,gBAAgB,EAAE;wBAChB,GAAG,EAAE,wBAAwB;qBAC9B;iBACF;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,kBAAkB,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;YAE1E,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,YAAY,GAAkB;gBAClC,OAAO,EAAE,CAAC;gBACV,SAAS,EAAE,EAAE;aACd,CAAC;YAEF,MAAM,YAAY,GAAe;gBAC/B;oBACE,EAAE,EAAE,QAAQ;oBACZ,IAAI,EAAE,MAAM;oBACZ,GAAG,EAAE,4BAA4B;iBAClC;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,cAAc,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,YAAY,GAAkB;gBAClC,OAAO,EAAE,CAAC;gBACV,SAAS,EAAE;oBACT;wBACE,EAAE,EAAE,QAAQ;wBACZ,IAAI,EAAE,MAAM;wBACZ,GAAG,EAAE,qBAAqB;qBAC3B;iBACF;aACF,CAAC;YAEF,MAAM,YAAY,GAAe;gBAC/B;oBACE,EAAE,EAAE,QAAQ;oBACZ,IAAI,EAAE,MAAM;oBACZ,GAAG,EAAE,qBAAqB;iBAC3B;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,cAAc,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,CAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,CACpD,qBAAqB,CACtB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,YAAY,GAAkB;gBAClC,OAAO,EAAE,CAAC;gBACV,SAAS,EAAE;oBACT;wBACE,EAAE,EAAE,UAAU;wBACd,IAAI,EAAE,MAAM;wBACZ,GAAG,EAAE,sBAAsB;qBAC5B;iBACF;aACF,CAAC;YAEF,MAAM,YAAY,GAAe;gBAC/B;oBACE,EAAE,EAAE,KAAK;oBACT,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,KAAK;oBACd,IAAI,EAAE,CAAC,iBAAiB,CAAC;iBAC1B;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,cAAc,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACxE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,YAAY,GAAkB;gBAClC,OAAO,EAAE,CAAC;gBACV,SAAS,EAAE;oBACT;wBACE,EAAE,EAAE,WAAW;wBACf,IAAI,EAAE,MAAM;wBACZ,GAAG,EAAE,kBAAkB;qBACxB;oBACD;wBACE,EAAE,EAAE,WAAW;wBACf,IAAI,EAAE,MAAM;wBACZ,GAAG,EAAE,kBAAkB;qBACxB;iBACF;aACF,CAAC;YAEF,MAAM,YAAY,GAAe;gBAC/B;oBACE,EAAE,EAAE,WAAW;oBACf,IAAI,EAAE,MAAM;oBACZ,GAAG,EAAE,kBAAkB;iBACxB;gBACD;oBACE,EAAE,EAAE,WAAW;oBACf,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,MAAM;iBAChB;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,cAAc,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,CACH,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAkB,CAAC,GAAG,CACzE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC3B,MAAM,CACH,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAkB,CAAC,GAAG,CACzE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC3B,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -137,9 +137,13 @@ program
137
137
  // Install command
138
138
  program
139
139
  .command("install")
140
- .description("Set up ~/.agent-recorder/ and print configuration")
141
- .action(async () => {
142
- await installCommand();
140
+ .description("Set up ~/.agent-recorder/ and configure Claude Code (with hubify mode)")
141
+ .option("--no-configure", "Skip automatic Claude Code configuration")
142
+ .action(async (options) => {
143
+ const installOpts = options.noConfigure
144
+ ? { noConfigure: options.noConfigure }
145
+ : {};
146
+ await installCommand(installOpts);
143
147
  });
144
148
  // Doctor command
145
149
  program
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Claude Code configuration detection and management utilities.
3
+ * Shared between CLI and service packages.
4
+ */
5
+ export interface ClaudeConfigInfo {
6
+ kind: "v2" | "legacy" | "none";
7
+ path: string | null;
8
+ }
9
+ /**
10
+ * Get the v2 Claude config path (~/.claude/settings.json)
11
+ */
12
+ export declare function getV2ConfigPath(): string;
13
+ /**
14
+ * Get the legacy Claude config path (~/.config/claude/mcp.json)
15
+ */
16
+ export declare function getLegacyConfigPath(): string;
17
+ /**
18
+ * Detect which Claude config file exists.
19
+ * Checks v2 first, then legacy. Returns 'none' if neither exists.
20
+ */
21
+ export declare function detectClaudeConfig(): ClaudeConfigInfo;
22
+ /**
23
+ * Safely read and parse a JSON file.
24
+ * Returns null if file doesn't exist or is invalid JSON.
25
+ */
26
+ export declare function readJsonFile(filePath: string): Record<string, unknown> | null;
27
+ /**
28
+ * Write JSON to file atomically (write to temp, then rename).
29
+ * Creates parent directories if needed.
30
+ */
31
+ export declare function writeJsonFileAtomic(filePath: string, data: Record<string, unknown> | unknown): void;
32
+ //# sourceMappingURL=claude-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-config.d.ts","sourceRoot":"","sources":["../src/claude-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,IAAI,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,gBAAgB,CAarD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAU7E;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,GACtC,IAAI,CAWN"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Claude Code configuration detection and management utilities.
3
+ * Shared between CLI and service packages.
4
+ */
5
+ import * as fs from "node:fs";
6
+ import * as path from "node:path";
7
+ import * as os from "node:os";
8
+ /**
9
+ * Get the v2 Claude config path (~/.claude/settings.json)
10
+ */
11
+ export function getV2ConfigPath() {
12
+ return path.join(os.homedir(), ".claude", "settings.json");
13
+ }
14
+ /**
15
+ * Get the legacy Claude config path (~/.config/claude/mcp.json)
16
+ */
17
+ export function getLegacyConfigPath() {
18
+ return path.join(os.homedir(), ".config", "claude", "mcp.json");
19
+ }
20
+ /**
21
+ * Detect which Claude config file exists.
22
+ * Checks v2 first, then legacy. Returns 'none' if neither exists.
23
+ */
24
+ export function detectClaudeConfig() {
25
+ const v2Path = getV2ConfigPath();
26
+ const legacyPath = getLegacyConfigPath();
27
+ if (fs.existsSync(v2Path)) {
28
+ return { kind: "v2", path: v2Path };
29
+ }
30
+ if (fs.existsSync(legacyPath)) {
31
+ return { kind: "legacy", path: legacyPath };
32
+ }
33
+ return { kind: "none", path: null };
34
+ }
35
+ /**
36
+ * Safely read and parse a JSON file.
37
+ * Returns null if file doesn't exist or is invalid JSON.
38
+ */
39
+ export function readJsonFile(filePath) {
40
+ try {
41
+ if (!fs.existsSync(filePath)) {
42
+ return null;
43
+ }
44
+ const content = fs.readFileSync(filePath, "utf-8");
45
+ return JSON.parse(content);
46
+ }
47
+ catch {
48
+ return null;
49
+ }
50
+ }
51
+ /**
52
+ * Write JSON to file atomically (write to temp, then rename).
53
+ * Creates parent directories if needed.
54
+ */
55
+ export function writeJsonFileAtomic(filePath, data) {
56
+ const dir = path.dirname(filePath);
57
+ if (!fs.existsSync(dir)) {
58
+ fs.mkdirSync(dir, { recursive: true });
59
+ }
60
+ const content = JSON.stringify(data, null, 2) + "\n";
61
+ const tempPath = `${filePath}.tmp.${Date.now()}`;
62
+ fs.writeFileSync(tempPath, content, "utf-8");
63
+ fs.renameSync(tempPath, filePath);
64
+ }
65
+ //# sourceMappingURL=claude-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-config.js","sourceRoot":"","sources":["../src/claude-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAO9B;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AAClE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;IAEzC,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACtC,CAAC;IAED,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAC9C,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAgB,EAChB,IAAuC;IAEvC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IACrD,MAAM,QAAQ,GAAG,GAAG,QAAQ,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAEjD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7C,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACpC,CAAC"}
@@ -10,4 +10,7 @@ export * from "./utils/index.js";
10
10
  export { loadConfig, getDefaultUpstreamsPath, type Config } from "./config.js";
11
11
  export * from "./daemon-paths.js";
12
12
  export * from "./lockfile.js";
13
+ export * from "./wrap-utils.js";
14
+ export * from "./claude-config.js";
15
+ export * from "./providers/index.js";
13
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAC/E,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAC/E,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC"}