@kaitranntt/ccs 8.8.1-dev.20 → 8.8.1-dev.22

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 (64) hide show
  1. package/README.md +1 -0
  2. package/dist/auth/auth-commands.js +3 -3
  3. package/dist/auth/auth-commands.js.map +1 -1
  4. package/dist/ccs.d.ts +1 -1
  5. package/dist/ccs.d.ts.map +1 -1
  6. package/dist/ccs.js +5 -1
  7. package/dist/ccs.js.map +1 -1
  8. package/dist/config/schemas/auth.d.ts +2 -2
  9. package/dist/config/schemas/auth.d.ts.map +1 -1
  10. package/dist/management/instance-directory.d.ts +19 -0
  11. package/dist/management/instance-directory.d.ts.map +1 -1
  12. package/dist/management/instance-directory.js +130 -7
  13. package/dist/management/instance-directory.js.map +1 -1
  14. package/dist/management/instance-manager.d.ts +2 -5
  15. package/dist/management/instance-manager.d.ts.map +1 -1
  16. package/dist/management/instance-manager.js +26 -27
  17. package/dist/management/instance-manager.js.map +1 -1
  18. package/dist/management/shared-manager/canonical-first-file-claims.d.ts +6 -0
  19. package/dist/management/shared-manager/canonical-first-file-claims.d.ts.map +1 -0
  20. package/dist/management/shared-manager/canonical-first-file-claims.js +143 -0
  21. package/dist/management/shared-manager/canonical-first-file-claims.js.map +1 -0
  22. package/dist/management/shared-manager/canonical-first-file-reconciler.d.ts +15 -0
  23. package/dist/management/shared-manager/canonical-first-file-reconciler.d.ts.map +1 -0
  24. package/dist/management/shared-manager/canonical-first-file-reconciler.js +131 -0
  25. package/dist/management/shared-manager/canonical-first-file-reconciler.js.map +1 -0
  26. package/dist/management/shared-manager/plugin-layout-internals.d.ts +1 -1
  27. package/dist/management/shared-manager/plugin-layout-internals.d.ts.map +1 -1
  28. package/dist/management/shared-manager/plugin-layout-internals.js +25 -9
  29. package/dist/management/shared-manager/plugin-layout-internals.js.map +1 -1
  30. package/dist/management/shared-manager/shared-dir-linker.d.ts +1 -1
  31. package/dist/management/shared-manager/shared-dir-linker.d.ts.map +1 -1
  32. package/dist/management/shared-manager/shared-dir-linker.js +140 -107
  33. package/dist/management/shared-manager/shared-dir-linker.js.map +1 -1
  34. package/dist/management/shared-manager/types.d.ts +12 -1
  35. package/dist/management/shared-manager/types.d.ts.map +1 -1
  36. package/dist/management/shared-manager/types.js +12 -1
  37. package/dist/management/shared-manager/types.js.map +1 -1
  38. package/dist/proxy/proxy-daemon-entry.js +10 -2
  39. package/dist/proxy/proxy-daemon-entry.js.map +1 -1
  40. package/dist/proxy/server/messages-route.d.ts +2 -2
  41. package/dist/proxy/server/messages-route.d.ts.map +1 -1
  42. package/dist/proxy/server/messages-route.js +33 -24
  43. package/dist/proxy/server/messages-route.js.map +1 -1
  44. package/dist/proxy/server/proxy-server.d.ts +1 -0
  45. package/dist/proxy/server/proxy-server.d.ts.map +1 -1
  46. package/dist/proxy/server/proxy-server.js +57 -5
  47. package/dist/proxy/server/proxy-server.js.map +1 -1
  48. package/dist/proxy/server/upstream-transport.d.ts +14 -0
  49. package/dist/proxy/server/upstream-transport.d.ts.map +1 -0
  50. package/dist/proxy/server/upstream-transport.js +72 -0
  51. package/dist/proxy/server/upstream-transport.js.map +1 -0
  52. package/dist/services/logging/log-redaction.d.ts.map +1 -1
  53. package/dist/services/logging/log-redaction.js +4 -1
  54. package/dist/services/logging/log-redaction.js.map +1 -1
  55. package/dist/services/logging/log-types.d.ts +1 -0
  56. package/dist/services/logging/log-types.d.ts.map +1 -1
  57. package/dist/services/logging/log-types.js.map +1 -1
  58. package/dist/types/config.d.ts +2 -2
  59. package/dist/types/config.d.ts.map +1 -1
  60. package/dist/utils/fetch-proxy-setup.d.ts.map +1 -1
  61. package/dist/utils/fetch-proxy-setup.js +10 -6
  62. package/dist/utils/fetch-proxy-setup.js.map +1 -1
  63. package/package.json +2 -1
  64. package/scripts/ci-parity-gate.sh +1 -0
@@ -42,11 +42,22 @@ exports.detachSharedDirectories = exports.linkSharedDirectories = exports.ensure
42
42
  const fs = __importStar(require("fs"));
43
43
  const path = __importStar(require("path"));
44
44
  const ui_1 = require("../../utils/ui");
45
+ const instance_directory_1 = require("../instance-directory");
45
46
  const diverged_file_adopter_1 = require("./diverged-file-adopter");
46
47
  const fs_helpers_1 = require("./fs-helpers");
47
48
  const plugin_metadata_normalizer_1 = require("./plugin-metadata-normalizer");
48
49
  const plugin_layout_internals_1 = require("./plugin-layout-internals");
50
+ const canonical_first_file_reconciler_1 = require("./canonical-first-file-reconciler");
49
51
  const types_1 = require("./types");
52
+ function runInstanceMutationStage(assertInstanceIdentity, operation) {
53
+ assertInstanceIdentity?.();
54
+ try {
55
+ return operation();
56
+ }
57
+ finally {
58
+ assertInstanceIdentity?.();
59
+ }
60
+ }
50
61
  /**
51
62
  * Detect a circular symlink before creation. A symlink is circular when its
52
63
  * target (raw or canonical) points back inside the shared root.
@@ -91,90 +102,102 @@ exports.detectCircularSymlink = detectCircularSymlink;
91
102
  * Ensure shared directories exist as symlinks to ~/.claude/ and that the
92
103
  * plugin layout default directories and registry files are present.
93
104
  */
94
- function ensureSharedDirectories(roots) {
105
+ function ensureSharedDirectories(roots, assertInstanceIdentity) {
95
106
  const claudeDir = roots.claudeDir;
96
107
  const sharedDir = roots.sharedDir;
97
- if (!(0, fs_helpers_1.getLstatSync)(claudeDir)) {
98
- console.log((0, ui_1.info)('Creating ~/.claude/ directory structure'));
99
- fs.mkdirSync(claudeDir, { recursive: true, mode: 0o700 });
100
- }
101
- if (!(0, fs_helpers_1.getLstatSync)(sharedDir)) {
102
- fs.mkdirSync(sharedDir, { recursive: true, mode: 0o700 });
103
- }
104
- (0, plugin_layout_internals_1.ensureSharedPluginLayoutDefaults)(claudeDir);
105
- for (const item of types_1.SHARED_ITEMS) {
106
- const claudePath = path.join(claudeDir, item.name);
107
- const sharedPath = path.join(sharedDir, item.name);
108
- if (item.type === 'file') {
109
- (0, diverged_file_adopter_1.recoverOrphanedCanonicalClaim)(claudePath);
108
+ runInstanceMutationStage(assertInstanceIdentity, () => {
109
+ if (!(0, fs_helpers_1.getLstatSync)(claudeDir)) {
110
+ console.log((0, ui_1.info)('Creating ~/.claude/ directory structure'));
111
+ fs.mkdirSync(claudeDir, { recursive: true, mode: 0o700 });
110
112
  }
111
- if (!(0, fs_helpers_1.getLstatSync)(claudePath)) {
112
- if (item.type === 'directory') {
113
- fs.mkdirSync(claudePath, { recursive: true, mode: 0o700 });
114
- }
115
- else if (item.type === 'file') {
116
- fs.writeFileSync(claudePath, JSON.stringify({}, null, 2), 'utf8');
117
- }
113
+ });
114
+ runInstanceMutationStage(assertInstanceIdentity, () => {
115
+ if (!(0, fs_helpers_1.getLstatSync)(sharedDir)) {
116
+ fs.mkdirSync(sharedDir, { recursive: true, mode: 0o700 });
118
117
  }
119
- if (detectCircularSymlink(claudePath, sharedDir)) {
120
- console.log((0, ui_1.warn)(`Skipping ${item.name}: circular symlink detected`));
121
- continue;
122
- }
123
- let sharedAdoption = 'not-claimed';
124
- if ((0, fs_helpers_1.getLstatSync)(sharedPath)) {
125
- let removeExisting = true;
126
- try {
127
- const stats = fs.lstatSync(sharedPath);
128
- if (stats.isSymbolicLink()) {
129
- const currentTarget = fs.readlinkSync(sharedPath);
130
- const resolvedTarget = path.resolve(path.dirname(sharedPath), currentTarget);
131
- if (resolvedTarget === claudePath) {
132
- continue;
133
- }
134
- }
118
+ });
119
+ runInstanceMutationStage(assertInstanceIdentity, () => (0, plugin_layout_internals_1.ensureSharedPluginLayoutDefaults)(claudeDir));
120
+ for (const item of types_1.SHARED_ITEMS) {
121
+ runInstanceMutationStage(assertInstanceIdentity, () => {
122
+ const claudePath = path.join(claudeDir, item.name);
123
+ const sharedPath = path.join(sharedDir, item.name);
124
+ if (item.type === 'file') {
125
+ (0, diverged_file_adopter_1.recoverOrphanedCanonicalClaim)(claudePath);
135
126
  }
136
- catch (_err) {
137
- // Continue to recreate
127
+ if (item.type === 'file' && item.divergencePolicy === 'canonical-first') {
128
+ (0, canonical_first_file_reconciler_1.reconcileCanonicalFirstFile)(roots, item.name);
138
129
  }
139
- if (item.type === 'file') {
140
- sharedAdoption = (0, diverged_file_adopter_1.adoptDivergedFileContent)(sharedPath, claudePath);
141
- removeExisting = sharedAdoption === 'not-claimed';
130
+ if (!(0, fs_helpers_1.getLstatSync)(claudePath)) {
131
+ if (item.type === 'directory') {
132
+ fs.mkdirSync(claudePath, { recursive: true, mode: 0o700 });
133
+ }
134
+ else if (item.type === 'file') {
135
+ fs.writeFileSync(claudePath, item.seedContent, 'utf8');
136
+ }
142
137
  }
143
- if (item.type === 'directory' && removeExisting) {
144
- fs.rmSync(sharedPath, { recursive: true, force: true });
138
+ if (detectCircularSymlink(claudePath, sharedDir)) {
139
+ console.log((0, ui_1.warn)(`Skipping ${item.name}: circular symlink detected`));
140
+ return;
145
141
  }
146
- else if (removeExisting) {
147
- fs.unlinkSync(sharedPath);
142
+ let sharedAdoption = 'not-claimed';
143
+ if ((0, fs_helpers_1.getLstatSync)(sharedPath)) {
144
+ let removeExisting = true;
145
+ try {
146
+ const stats = fs.lstatSync(sharedPath);
147
+ if (stats.isSymbolicLink()) {
148
+ const currentTarget = fs.readlinkSync(sharedPath);
149
+ const resolvedTarget = path.resolve(path.dirname(sharedPath), currentTarget);
150
+ if (resolvedTarget === claudePath) {
151
+ return;
152
+ }
153
+ }
154
+ }
155
+ catch (_err) {
156
+ // Continue to recreate
157
+ }
158
+ if (item.type === 'file' && item.divergencePolicy === 'canonical-first') {
159
+ removeExisting = !(0, canonical_first_file_reconciler_1.preserveCanonicalFirstDivergence)(sharedPath, claudePath);
160
+ }
161
+ else if (item.type === 'file') {
162
+ sharedAdoption = (0, diverged_file_adopter_1.adoptDivergedFileContent)(sharedPath, claudePath);
163
+ removeExisting = sharedAdoption === 'not-claimed';
164
+ }
165
+ if (item.type === 'directory' && removeExisting) {
166
+ fs.rmSync(sharedPath, { recursive: true, force: true });
167
+ }
168
+ else if (removeExisting) {
169
+ fs.unlinkSync(sharedPath);
170
+ }
171
+ (0, diverged_file_adopter_1.assertAdoptionPathAbsent)(sharedPath, sharedAdoption);
148
172
  }
149
- (0, diverged_file_adopter_1.assertAdoptionPathAbsent)(sharedPath, sharedAdoption);
150
- }
151
- if ((0, fs_helpers_1.getLstatSync)(sharedPath)) {
152
- console.log((0, ui_1.warn)(`Skipping ${item.name}: path reappeared during reconciliation`));
153
- continue;
154
- }
155
- try {
156
- const symlinkType = item.type === 'directory' ? 'dir' : 'file';
157
- fs.symlinkSync(claudePath, sharedPath, symlinkType);
158
- }
159
- catch (_err) {
160
- (0, diverged_file_adopter_1.assertAdoptionPathAbsent)(sharedPath, sharedAdoption);
161
173
  if ((0, fs_helpers_1.getLstatSync)(sharedPath)) {
162
174
  console.log((0, ui_1.warn)(`Skipping ${item.name}: path reappeared during reconciliation`));
163
- continue;
175
+ return;
164
176
  }
165
- if (process.platform === 'win32') {
166
- if (item.type === 'directory') {
167
- (0, fs_helpers_1.copyDirectoryFallback)(claudePath, sharedPath);
177
+ try {
178
+ const symlinkType = item.type === 'directory' ? 'dir' : 'file';
179
+ fs.symlinkSync(claudePath, sharedPath, symlinkType);
180
+ }
181
+ catch (_err) {
182
+ (0, diverged_file_adopter_1.assertAdoptionPathAbsent)(sharedPath, sharedAdoption);
183
+ if ((0, fs_helpers_1.getLstatSync)(sharedPath)) {
184
+ console.log((0, ui_1.warn)(`Skipping ${item.name}: path reappeared during reconciliation`));
185
+ return;
168
186
  }
169
- else if (item.type === 'file') {
170
- fs.copyFileSync(claudePath, sharedPath, fs.constants.COPYFILE_EXCL);
187
+ if (process.platform === 'win32') {
188
+ if (item.type === 'directory') {
189
+ (0, fs_helpers_1.copyDirectoryFallback)(claudePath, sharedPath);
190
+ }
191
+ else if (item.type === 'file') {
192
+ fs.copyFileSync(claudePath, sharedPath, fs.constants.COPYFILE_EXCL);
193
+ }
194
+ console.log((0, ui_1.warn)(`Symlink failed for ${item.name}, copied instead (enable Developer Mode)`));
195
+ }
196
+ else {
197
+ throw _err;
171
198
  }
172
- console.log((0, ui_1.warn)(`Symlink failed for ${item.name}, copied instead (enable Developer Mode)`));
173
- }
174
- else {
175
- throw _err;
176
199
  }
177
- }
200
+ });
178
201
  }
179
202
  }
180
203
  exports.ensureSharedDirectories = ensureSharedDirectories;
@@ -182,59 +205,69 @@ exports.ensureSharedDirectories = ensureSharedDirectories;
182
205
  * Link shared directories into a specific instance path.
183
206
  */
184
207
  function linkSharedDirectories(roots, instancePath) {
185
- ensureSharedDirectories(roots);
208
+ const instanceIdentity = (0, instance_directory_1.captureSafeAccountInstanceIdentity)(roots.instancesDir, instancePath);
209
+ const assertInstanceIdentity = () => (0, instance_directory_1.assertAccountInstanceIdentity)(roots.instancesDir, instancePath, instanceIdentity);
210
+ ensureSharedDirectories(roots, assertInstanceIdentity);
211
+ assertInstanceIdentity();
186
212
  const sharedDir = roots.sharedDir;
187
213
  for (const item of types_1.SHARED_ITEMS) {
188
- if (item.name === 'plugins') {
189
- (0, plugin_layout_internals_1.linkInstancePlugins)(roots, instancePath);
190
- continue;
191
- }
192
- const linkPath = path.join(instancePath, item.name);
193
- const targetPath = path.join(sharedDir, item.name);
194
- let adoption = 'not-claimed';
195
- if (item.type === 'file') {
196
- adoption = (0, diverged_file_adopter_1.adoptDivergedFileContent)(linkPath, path.join(roots.claudeDir, item.name));
197
- if (adoption === 'not-claimed') {
214
+ runInstanceMutationStage(assertInstanceIdentity, () => {
215
+ if (item.name === 'plugins') {
216
+ (0, plugin_layout_internals_1.linkInstancePlugins)(roots, instancePath, assertInstanceIdentity);
217
+ return;
218
+ }
219
+ const linkPath = path.join(instancePath, item.name);
220
+ const targetPath = path.join(sharedDir, item.name);
221
+ let adoption = 'not-claimed';
222
+ if (item.type === 'file' && item.divergencePolicy === 'canonical-first') {
223
+ if (!(0, canonical_first_file_reconciler_1.preserveCanonicalFirstDivergence)(linkPath, path.join(roots.claudeDir, item.name))) {
224
+ (0, fs_helpers_1.removeExistingPath)(linkPath, item.type);
225
+ }
226
+ }
227
+ else if (item.type === 'file') {
228
+ adoption = (0, diverged_file_adopter_1.adoptDivergedFileContent)(linkPath, path.join(roots.claudeDir, item.name));
229
+ if (adoption === 'not-claimed') {
230
+ (0, fs_helpers_1.removeExistingPath)(linkPath, item.type);
231
+ }
232
+ }
233
+ else {
198
234
  (0, fs_helpers_1.removeExistingPath)(linkPath, item.type);
199
235
  }
200
- }
201
- else {
202
- (0, fs_helpers_1.removeExistingPath)(linkPath, item.type);
203
- }
204
- (0, diverged_file_adopter_1.assertAdoptionPathAbsent)(linkPath, adoption);
205
- if ((0, fs_helpers_1.getLstatSync)(linkPath)) {
206
- console.log((0, ui_1.warn)(`Skipping ${item.name}: path reappeared during reconciliation`));
207
- continue;
208
- }
209
- try {
210
- const symlinkType = item.type === 'directory' ? 'dir' : 'file';
211
- fs.symlinkSync(targetPath, linkPath, symlinkType);
212
- }
213
- catch (_err) {
214
236
  (0, diverged_file_adopter_1.assertAdoptionPathAbsent)(linkPath, adoption);
215
237
  if ((0, fs_helpers_1.getLstatSync)(linkPath)) {
216
238
  console.log((0, ui_1.warn)(`Skipping ${item.name}: path reappeared during reconciliation`));
217
- continue;
239
+ return;
218
240
  }
219
- if (process.platform === 'win32') {
220
- if (item.type === 'directory') {
221
- (0, fs_helpers_1.copyDirectoryFallback)(targetPath, linkPath);
241
+ try {
242
+ const symlinkType = item.type === 'directory' ? 'dir' : 'file';
243
+ fs.symlinkSync(targetPath, linkPath, symlinkType);
244
+ }
245
+ catch (_err) {
246
+ (0, diverged_file_adopter_1.assertAdoptionPathAbsent)(linkPath, adoption);
247
+ if ((0, fs_helpers_1.getLstatSync)(linkPath)) {
248
+ console.log((0, ui_1.warn)(`Skipping ${item.name}: path reappeared during reconciliation`));
249
+ return;
222
250
  }
223
- else if (item.type === 'file') {
224
- fs.copyFileSync(targetPath, linkPath, fs.constants.COPYFILE_EXCL);
251
+ if (process.platform === 'win32') {
252
+ if (item.type === 'directory') {
253
+ (0, fs_helpers_1.copyDirectoryFallback)(targetPath, linkPath);
254
+ }
255
+ else if (item.type === 'file') {
256
+ fs.copyFileSync(targetPath, linkPath, fs.constants.COPYFILE_EXCL);
257
+ }
258
+ console.log((0, ui_1.warn)(`Symlink failed for ${item.name}, copied instead (enable Developer Mode)`));
259
+ }
260
+ else {
261
+ throw _err;
225
262
  }
226
- console.log((0, ui_1.warn)(`Symlink failed for ${item.name}, copied instead (enable Developer Mode)`));
227
- }
228
- else {
229
- throw _err;
230
263
  }
231
- }
264
+ });
232
265
  }
233
266
  // Preserve original behavior: linkSharedDirectories always concludes by
234
267
  // normalizing plugin + marketplace metadata for the freshly linked
235
268
  // instance. migrateFromV311 relies on this side effect.
236
- (0, plugin_metadata_normalizer_1.normalizePluginRegistryPaths)(roots, instancePath);
237
- (0, plugin_metadata_normalizer_1.normalizeMarketplaceRegistryPaths)(roots, instancePath);
269
+ runInstanceMutationStage(assertInstanceIdentity, () => (0, plugin_metadata_normalizer_1.normalizePluginRegistryPaths)(roots, instancePath));
270
+ runInstanceMutationStage(assertInstanceIdentity, () => (0, plugin_metadata_normalizer_1.normalizeMarketplaceRegistryPaths)(roots, instancePath));
238
271
  }
239
272
  exports.linkSharedDirectories = linkSharedDirectories;
240
273
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"shared-dir-linker.js","sourceRoot":"","sources":["../../../src/management/shared-manager/shared-dir-linker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared-dir-linker.js","sourceRoot":"","sources":["../../../src/management/shared-manager/shared-dir-linker.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,17 @@ export interface SharedItem {
14
14
  name: string;
15
15
  type: 'directory' | 'file';
16
16
  }
17
+ export interface ManagedSharedDirectoryItem extends SharedItem {
18
+ type: 'directory';
19
+ }
20
+ export interface ManagedSharedFileItem extends SharedItem {
21
+ type: 'file';
22
+ /** Exact bytes used when no canonical or adoptable source file exists. */
23
+ seedContent: string;
24
+ /** Controls whether an instance may replace an existing canonical file. */
25
+ divergencePolicy: 'newer-wins' | 'canonical-first';
26
+ }
27
+ export type ManagedSharedItem = ManagedSharedDirectoryItem | ManagedSharedFileItem;
17
28
  /**
18
29
  * Default content for a freshly provisioned installed_plugins.json registry.
19
30
  * Version 2 schema with an empty plugins map.
@@ -26,7 +37,7 @@ export declare const DEFAULT_INSTALLED_PLUGIN_REGISTRY: string;
26
37
  * Order matters: consumers rely on a stable iteration order when reconciling
27
38
  * symlinks, and 'plugins' is special-cased by the linker.
28
39
  */
29
- export declare const SHARED_ITEMS: readonly SharedItem[];
40
+ export declare const SHARED_ITEMS: readonly ManagedSharedItem[];
30
41
  /**
31
42
  * Plugin layout entries that always exist under ~/.claude/plugins and are
32
43
  * linked as-is into each instance's plugins directory.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/management/shared-manager/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;CAC5B;AAED;;;GAGG;AACH,eAAO,MAAM,iCAAiC,QAO7C,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,EAAE,SAAS,UAAU,EAM7C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,UAAU,EAItD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oCAAoC,aAAuC,CAAC;AAEzF;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EAKtD,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/management/shared-manager/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,0BAA2B,SAAQ,UAAU;IAC5D,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,MAAM,WAAW,qBAAsB,SAAQ,UAAU;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,gBAAgB,EAAE,YAAY,GAAG,iBAAiB,CAAC;CACpD;AAED,MAAM,MAAM,iBAAiB,GAAG,0BAA0B,GAAG,qBAAqB,CAAC;AAEnF;;;GAGG;AACH,eAAO,MAAM,iCAAiC,QAO7C,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,EAAE,SAAS,iBAAiB,EAiBpD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,UAAU,EAItD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oCAAoC,aAAuC,CAAC;AAEzF;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EAKtD,CAAC"}
@@ -28,7 +28,18 @@ exports.SHARED_ITEMS = [
28
28
  { name: 'skills', type: 'directory' },
29
29
  { name: 'agents', type: 'directory' },
30
30
  { name: 'plugins', type: 'directory' },
31
- { name: 'settings.json', type: 'file' },
31
+ {
32
+ name: 'settings.json',
33
+ type: 'file',
34
+ seedContent: JSON.stringify({}, null, 2),
35
+ divergencePolicy: 'newer-wins',
36
+ },
37
+ {
38
+ name: 'CLAUDE.md',
39
+ type: 'file',
40
+ seedContent: '',
41
+ divergencePolicy: 'canonical-first',
42
+ },
32
43
  ];
33
44
  /**
34
45
  * Plugin layout entries that always exist under ~/.claude/plugins and are
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/management/shared-manager/types.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAYH;;;GAGG;AACU,QAAA,iCAAiC,GAAG,IAAI,CAAC,SAAS,CAC7D;IACE,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,EAAE;CACZ,EACD,IAAI,EACJ,CAAC,CACF,CAAC;AAEF;;;;;;GAMG;AACU,QAAA,YAAY,GAA0B;IACjD,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE;IACvC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE;IACrC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE;IACrC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE;IACtC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE;CACxC,CAAC;AAEF;;;GAGG;AACU,QAAA,qBAAqB,GAA0B;IAC1D,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE;IACpC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE;IAC3C,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,MAAM,EAAE;CACjD,CAAC;AAEF;;;GAGG;AACU,QAAA,oCAAoC,GAAG,IAAI,GAAG,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC;AAEzF;;;GAGG;AACU,QAAA,yBAAyB,GAAsB;IAC1D,aAAa;IACb,cAAc;IACd,iBAAiB;IACjB,OAAO;CACR,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/management/shared-manager/types.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AA0BH;;;GAGG;AACU,QAAA,iCAAiC,GAAG,IAAI,CAAC,SAAS,CAC7D;IACE,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,EAAE;CACZ,EACD,IAAI,EACJ,CAAC,CACF,CAAC;AAEF;;;;;;GAMG;AACU,QAAA,YAAY,GAAiC;IACxD,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE;IACvC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE;IACrC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE;IACrC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE;IACtC;QACE,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,gBAAgB,EAAE,YAAY;KAC/B;IACD;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,EAAE;QACf,gBAAgB,EAAE,iBAAiB;KACpC;CACF,CAAC;AAEF;;;GAGG;AACU,QAAA,qBAAqB,GAA0B;IAC1D,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE;IACpC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE;IAC3C,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,MAAM,EAAE;CACjD,CAAC;AAEF;;;GAGG;AACU,QAAA,oCAAoC,GAAG,IAAI,GAAG,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC;AAEzF;;;GAGG;AACU,QAAA,yBAAyB,GAAsB;IAC1D,aAAa;IACb,cAAc;IACd,iBAAiB;IACjB,OAAO;CACR,CAAC"}
@@ -100,9 +100,17 @@ function startRuntime(options) {
100
100
  });
101
101
  server.once('error', (error) => {
102
102
  process.stderr.write(String(error.message) + '\n');
103
- process.exit(1);
103
+ void (0, proxy_server_1.closeOpenAICompatProxyServer)(server).finally(() => {
104
+ process.exitCode = 1;
105
+ });
104
106
  });
105
- const shutdown = () => server.close();
107
+ let shutdownPromise;
108
+ const shutdown = () => {
109
+ shutdownPromise ?? (shutdownPromise = (0, proxy_server_1.closeOpenAICompatProxyServer)(server).catch((error) => {
110
+ process.stderr.write(`Proxy shutdown failed: ${String(error.message)}\n`);
111
+ process.exitCode = 1;
112
+ }));
113
+ };
106
114
  process.on('SIGTERM', shutdown);
107
115
  process.on('SIGINT', shutdown);
108
116
  }
@@ -1 +1 @@
1
- {"version":3,"file":"proxy-daemon-entry.js","sourceRoot":"","sources":["../../src/proxy/proxy-daemon-entry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proxy-daemon-entry.js","sourceRoot":"","sources":["../../src/proxy/proxy-daemon-entry.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  import * as http from 'http';
5
5
  import type { Dispatcher } from 'undici';
6
6
  import type { OpenAICompatProfileConfig } from '../profile-router';
7
- import { type UpstreamAgentTimeoutOptions } from '../../utils/fetch-proxy-setup';
7
+ import type { UpstreamAgentTimeoutOptions } from '../../utils/fetch-proxy-setup';
8
8
  export declare function extractIncomingProxyToken(headers: http.IncomingHttpHeaders): string | null;
9
9
  export declare function validateIncomingProxyAuth(headers: http.IncomingHttpHeaders, expectedToken: string): boolean;
10
10
  /**
@@ -17,6 +17,6 @@ export declare function validateIncomingProxyAuth(headers: http.IncomingHttpHead
17
17
  */
18
18
  export declare function buildUpstreamAgentTimeouts(): UpstreamAgentTimeoutOptions;
19
19
  export declare function attachDisconnectAbortHandlers(req: http.IncomingMessage, res: http.ServerResponse, controller: AbortController, onDisconnect: (source: string) => void): () => void;
20
- export declare function handleProxyMessagesRequest(req: http.IncomingMessage, res: http.ServerResponse, profile: OpenAICompatProfileConfig, expectedAuthToken: string, insecureDispatcher?: Dispatcher): Promise<void>;
20
+ export declare function handleProxyMessagesRequest(req: http.IncomingMessage, res: http.ServerResponse, profile: OpenAICompatProfileConfig, expectedAuthToken: string, insecureDispatcher?: Dispatcher, sharedUpstreamDispatcher?: Dispatcher, upstreamFetch?: typeof globalThis.fetch, forceInsecureTls?: boolean): Promise<void>;
21
21
  export declare function handleProxyModelsRequest(res: http.ServerResponse, profile: OpenAICompatProfileConfig): void;
22
22
  //# sourceMappingURL=messages-route.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"messages-route.d.ts","sourceRoot":"","sources":["../../../src/proxy/server/messages-route.ts"],"names":[],"mappings":";;;AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AASnE,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,+BAA+B,CAAC;AA+UvC,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,GAAG,MAAM,GAAG,IAAI,CAmB1F;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EACjC,aAAa,EAAE,MAAM,GACpB,OAAO,CAET;AAkCD;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,IAAI,2BAA2B,CAGxE;AAgCD,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,UAAU,EAAE,eAAe,EAC3B,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GACrC,MAAM,IAAI,CA0BZ;AAED,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,OAAO,EAAE,yBAAyB,EAClC,iBAAiB,EAAE,MAAM,EACzB,kBAAkB,CAAC,EAAE,UAAU,GAC9B,OAAO,CAAC,IAAI,CAAC,CA4Lf;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,OAAO,EAAE,yBAAyB,GACjC,IAAI,CAWN"}
1
+ {"version":3,"file":"messages-route.d.ts","sourceRoot":"","sources":["../../../src/proxy/server/messages-route.ts"],"names":[],"mappings":";;;AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AASnE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAqVjF,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,GAAG,MAAM,GAAG,IAAI,CAmB1F;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EACjC,aAAa,EAAE,MAAM,GACpB,OAAO,CAET;AAkCD;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,IAAI,2BAA2B,CAGxE;AAqBD,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,UAAU,EAAE,eAAe,EAC3B,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GACrC,MAAM,IAAI,CA0BZ;AAED,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,OAAO,EAAE,yBAAyB,EAClC,iBAAiB,EAAE,MAAM,EACzB,kBAAkB,CAAC,EAAE,UAAU,EAC/B,wBAAwB,CAAC,EAAE,UAAU,EACrC,aAAa,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,EACvC,gBAAgB,UAAQ,GACvB,OAAO,CAAC,IAAI,CAAC,CAmNf;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,OAAO,EAAE,yBAAyB,GACjC,IAAI,CAWN"}
@@ -1,14 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.handleProxyModelsRequest = exports.handleProxyMessagesRequest = exports.attachDisconnectAbortHandlers = exports.buildUpstreamAgentTimeouts = exports.validateIncomingProxyAuth = exports.extractIncomingProxyToken = void 0;
4
- const undici_1 = require("undici");
5
4
  const request_router_1 = require("../request-router");
6
5
  const request_transformer_1 = require("../transformers/request-transformer");
7
6
  const sse_stream_transformer_1 = require("../transformers/sse-stream-transformer");
8
7
  const upstream_url_1 = require("../upstream-url");
9
8
  const logging_1 = require("../../services/logging");
10
- const fetch_proxy_setup_1 = require("../../utils/fetch-proxy-setup");
11
9
  const http_helpers_1 = require("./http-helpers");
10
+ const upstream_transport_1 = require("./upstream-transport");
12
11
  const REQUEST_TIMEOUT_MS = 600000;
13
12
  // Keep undici's per-phase timeouts above the explicit request timeout so the
14
13
  // AbortController is the single authority on when an upstream request dies.
@@ -335,15 +334,6 @@ function buildUpstreamAgentTimeouts() {
335
334
  return { headersTimeout: ceiling, bodyTimeout: ceiling };
336
335
  }
337
336
  exports.buildUpstreamAgentTimeouts = buildUpstreamAgentTimeouts;
338
- let defaultUpstreamDispatcher = null;
339
- function getDefaultUpstreamDispatcher() {
340
- if (!defaultUpstreamDispatcher) {
341
- const timeouts = buildUpstreamAgentTimeouts();
342
- // Honor HTTP(S)_PROXY routing when configured; otherwise a plain Agent.
343
- defaultUpstreamDispatcher = (0, fetch_proxy_setup_1.createGlobalFetchProxyDispatcher)(timeouts) ?? new undici_1.Agent(timeouts);
344
- }
345
- return defaultUpstreamDispatcher;
346
- }
347
337
  function formatTimeoutDuration(timeoutMs) {
348
338
  return timeoutMs % 1000 === 0 ? `${timeoutMs / 1000} seconds` : `${timeoutMs}ms`;
349
339
  }
@@ -381,7 +371,7 @@ function attachDisconnectAbortHandlers(req, res, controller, onDisconnect) {
381
371
  };
382
372
  }
383
373
  exports.attachDisconnectAbortHandlers = attachDisconnectAbortHandlers;
384
- async function handleProxyMessagesRequest(req, res, profile, expectedAuthToken, insecureDispatcher) {
374
+ async function handleProxyMessagesRequest(req, res, profile, expectedAuthToken, insecureDispatcher, sharedUpstreamDispatcher, upstreamFetch, forceInsecureTls = false) {
385
375
  const transformer = new sse_stream_transformer_1.ProxySseStreamTransformer();
386
376
  const startedAt = Date.now();
387
377
  logger.stage('intake', 'request.received', 'Proxy /v1/messages request received', {
@@ -430,18 +420,22 @@ async function handleProxyMessagesRequest(req, res, profile, expectedAuthToken,
430
420
  source,
431
421
  });
432
422
  });
433
- const useSharedInsecureDispatcher = insecureDispatcher !== undefined &&
434
- upstream.route.profile.profileName === profile.profileName;
423
+ const routeStaysOnActiveProfile = upstream.route.profile.profileName === profile.profileName;
424
+ const useSharedInsecureDispatcher = insecureDispatcher !== undefined && routeStaysOnActiveProfile;
425
+ const useServerInsecureTls = forceInsecureTls && routeStaysOnActiveProfile;
435
426
  const useProfileInsecureTls = upstream.route.profile.insecure === true;
436
- const ephemeralInsecureDispatcher = useProfileInsecureTls && !useSharedInsecureDispatcher
437
- ? new undici_1.Agent({ connect: { rejectUnauthorized: false }, ...buildUpstreamAgentTimeouts() })
427
+ const ephemeralInsecureDispatcher = useProfileInsecureTls && !useSharedInsecureDispatcher && !useServerInsecureTls
428
+ ? (0, upstream_transport_1.createUpstreamDispatcher)(buildUpstreamAgentTimeouts(), true)
438
429
  : undefined;
439
- const insecureTls = useSharedInsecureDispatcher || useProfileInsecureTls;
430
+ const insecureTls = useSharedInsecureDispatcher || useServerInsecureTls || useProfileInsecureTls;
431
+ const ownedUpstreamDispatcher = sharedUpstreamDispatcher || insecureTls
432
+ ? undefined
433
+ : (0, upstream_transport_1.createUpstreamDispatcher)(buildUpstreamAgentTimeouts());
440
434
  const dispatcher = useSharedInsecureDispatcher
441
435
  ? insecureDispatcher
442
436
  : useProfileInsecureTls
443
437
  ? ephemeralInsecureDispatcher
444
- : getDefaultUpstreamDispatcher();
438
+ : (sharedUpstreamDispatcher ?? ownedUpstreamDispatcher);
445
439
  try {
446
440
  logger.stage('dispatch', 'upstream.dispatch', 'Dispatching upstream fetch', {
447
441
  profileName: profile.profileName,
@@ -452,7 +446,13 @@ async function handleProxyMessagesRequest(req, res, profile, expectedAuthToken,
452
446
  const upstreamUrl = (0, upstream_url_1.resolveOpenAIChatCompletionsUrl)(upstream.route.profile.baseUrl, {
453
447
  passthrough,
454
448
  });
455
- const upstreamResponse = await fetch(upstreamUrl, buildFetchInit(upstream.route.profile, upstream.body, controller.signal, req.headers, passthrough, dispatcher));
449
+ const fetchInit = buildFetchInit(upstream.route.profile, upstream.body, controller.signal, req.headers, passthrough, dispatcher);
450
+ const upstreamResponse = upstreamFetch
451
+ ? await upstreamFetch(upstreamUrl, fetchInit)
452
+ : await (0, upstream_transport_1.fetchWithUpstreamTransport)(upstreamUrl, fetchInit, {
453
+ dispatcher,
454
+ insecureTls,
455
+ });
456
456
  logger.stage('upstream', 'upstream.response', 'Received upstream response', {
457
457
  profileName: profile.profileName,
458
458
  routedProfileName: upstream.route.profile.profileName,
@@ -475,7 +475,7 @@ async function handleProxyMessagesRequest(req, res, profile, expectedAuthToken,
475
475
  cleanupDisconnectHandlers();
476
476
  if (ephemeralInsecureDispatcher) {
477
477
  try {
478
- await ephemeralInsecureDispatcher.close();
478
+ await (0, upstream_transport_1.closeUpstreamDispatcher)(ephemeralInsecureDispatcher);
479
479
  }
480
480
  catch (closeError) {
481
481
  logger.stage('cleanup', 'request.dispatcher_close_failed', 'Failed to close per-request insecure dispatcher', {
@@ -485,14 +485,23 @@ async function handleProxyMessagesRequest(req, res, profile, expectedAuthToken,
485
485
  }, { level: 'warn' });
486
486
  }
487
487
  }
488
+ if (ownedUpstreamDispatcher) {
489
+ try {
490
+ await (0, upstream_transport_1.closeUpstreamDispatcher)(ownedUpstreamDispatcher);
491
+ }
492
+ catch (closeError) {
493
+ logger.stage('cleanup', 'request.dispatcher_close_failed', 'Failed to close per-request upstream dispatcher', {
494
+ profileName: profile.profileName,
495
+ routedProfileName: upstream.route.profile.profileName,
496
+ error: closeError instanceof Error ? closeError.message : String(closeError),
497
+ }, { level: 'warn' });
498
+ }
499
+ }
488
500
  }
489
501
  }
490
502
  catch (error) {
491
503
  const message = error instanceof Error ? error.message : 'Unknown proxy error';
492
- const errInfo = {
493
- name: error instanceof Error ? error.name : 'Error',
494
- message,
495
- };
504
+ const errInfo = (0, upstream_transport_1.toLogErrorInfo)(error);
496
505
  logger.stage('cleanup', 'request.failed', 'Proxy message request failed', {
497
506
  profileName: profile.profileName,
498
507
  abort: error instanceof Error && error.name === 'AbortError',