@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.
- package/README.md +1 -0
- package/dist/auth/auth-commands.js +3 -3
- package/dist/auth/auth-commands.js.map +1 -1
- package/dist/ccs.d.ts +1 -1
- package/dist/ccs.d.ts.map +1 -1
- package/dist/ccs.js +5 -1
- package/dist/ccs.js.map +1 -1
- package/dist/config/schemas/auth.d.ts +2 -2
- package/dist/config/schemas/auth.d.ts.map +1 -1
- package/dist/management/instance-directory.d.ts +19 -0
- package/dist/management/instance-directory.d.ts.map +1 -1
- package/dist/management/instance-directory.js +130 -7
- package/dist/management/instance-directory.js.map +1 -1
- package/dist/management/instance-manager.d.ts +2 -5
- package/dist/management/instance-manager.d.ts.map +1 -1
- package/dist/management/instance-manager.js +26 -27
- package/dist/management/instance-manager.js.map +1 -1
- package/dist/management/shared-manager/canonical-first-file-claims.d.ts +6 -0
- package/dist/management/shared-manager/canonical-first-file-claims.d.ts.map +1 -0
- package/dist/management/shared-manager/canonical-first-file-claims.js +143 -0
- package/dist/management/shared-manager/canonical-first-file-claims.js.map +1 -0
- package/dist/management/shared-manager/canonical-first-file-reconciler.d.ts +15 -0
- package/dist/management/shared-manager/canonical-first-file-reconciler.d.ts.map +1 -0
- package/dist/management/shared-manager/canonical-first-file-reconciler.js +131 -0
- package/dist/management/shared-manager/canonical-first-file-reconciler.js.map +1 -0
- package/dist/management/shared-manager/plugin-layout-internals.d.ts +1 -1
- package/dist/management/shared-manager/plugin-layout-internals.d.ts.map +1 -1
- package/dist/management/shared-manager/plugin-layout-internals.js +25 -9
- package/dist/management/shared-manager/plugin-layout-internals.js.map +1 -1
- package/dist/management/shared-manager/shared-dir-linker.d.ts +1 -1
- package/dist/management/shared-manager/shared-dir-linker.d.ts.map +1 -1
- package/dist/management/shared-manager/shared-dir-linker.js +140 -107
- package/dist/management/shared-manager/shared-dir-linker.js.map +1 -1
- package/dist/management/shared-manager/types.d.ts +12 -1
- package/dist/management/shared-manager/types.d.ts.map +1 -1
- package/dist/management/shared-manager/types.js +12 -1
- package/dist/management/shared-manager/types.js.map +1 -1
- package/dist/proxy/proxy-daemon-entry.js +10 -2
- package/dist/proxy/proxy-daemon-entry.js.map +1 -1
- package/dist/proxy/server/messages-route.d.ts +2 -2
- package/dist/proxy/server/messages-route.d.ts.map +1 -1
- package/dist/proxy/server/messages-route.js +33 -24
- package/dist/proxy/server/messages-route.js.map +1 -1
- package/dist/proxy/server/proxy-server.d.ts +1 -0
- package/dist/proxy/server/proxy-server.d.ts.map +1 -1
- package/dist/proxy/server/proxy-server.js +57 -5
- package/dist/proxy/server/proxy-server.js.map +1 -1
- package/dist/proxy/server/upstream-transport.d.ts +14 -0
- package/dist/proxy/server/upstream-transport.d.ts.map +1 -0
- package/dist/proxy/server/upstream-transport.js +72 -0
- package/dist/proxy/server/upstream-transport.js.map +1 -0
- package/dist/services/logging/log-redaction.d.ts.map +1 -1
- package/dist/services/logging/log-redaction.js +4 -1
- package/dist/services/logging/log-redaction.js.map +1 -1
- package/dist/services/logging/log-types.d.ts +1 -0
- package/dist/services/logging/log-types.d.ts.map +1 -1
- package/dist/services/logging/log-types.js.map +1 -1
- package/dist/types/config.d.ts +2 -2
- package/dist/types/config.d.ts.map +1 -1
- package/dist/utils/fetch-proxy-setup.d.ts.map +1 -1
- package/dist/utils/fetch-proxy-setup.js +10 -6
- package/dist/utils/fetch-proxy-setup.js.map +1 -1
- package/package.json +2 -1
- 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
|
-
|
|
98
|
-
|
|
99
|
-
|
|
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
|
-
|
|
112
|
-
|
|
113
|
-
|
|
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
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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
|
-
|
|
137
|
-
|
|
127
|
+
if (item.type === 'file' && item.divergencePolicy === 'canonical-first') {
|
|
128
|
+
(0, canonical_first_file_reconciler_1.reconcileCanonicalFirstFile)(roots, item.name);
|
|
138
129
|
}
|
|
139
|
-
if (
|
|
140
|
-
|
|
141
|
-
|
|
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 (
|
|
144
|
-
|
|
138
|
+
if (detectCircularSymlink(claudePath, sharedDir)) {
|
|
139
|
+
console.log((0, ui_1.warn)(`Skipping ${item.name}: circular symlink detected`));
|
|
140
|
+
return;
|
|
145
141
|
}
|
|
146
|
-
|
|
147
|
-
|
|
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
|
-
|
|
175
|
+
return;
|
|
164
176
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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
|
-
|
|
170
|
-
|
|
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
|
-
|
|
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
|
-
|
|
189
|
-
(
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
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
|
-
|
|
239
|
+
return;
|
|
218
240
|
}
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
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
|
-
|
|
224
|
-
|
|
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":";AAAA;;;;;;;;;;;;;;GAcG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAE7B,uCAA4C;AAC5C,mEAIiC;AACjC,6CAOsB;AAEtB,6EAGsC;AACtC,uEAImC;AACnC,mCAAuC;AAQvC;;;GAGG;AACH,SAAgB,qBAAqB,CAAC,MAAc,EAAE,SAAiB;IACrE,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC;QACtE,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAE9C,wEAAwE;QACxE,uEAAuE;QACvE,uEAAuE;QACvE,oBAAoB;QACpB,IAAI,IAAA,kCAAqB,EAAC,cAAc,EAAE,aAAa,CAAC,EAAE,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,8BAA8B,MAAM,MAAM,cAAc,EAAE,CAAC,CAAC,CAAC;YAC9E,OAAO,IAAI,CAAC;QACd,CAAC;QAED,iEAAiE;QACjE,wEAAwE;QACxE,uEAAuE;QACvE,MAAM,kBAAkB,GAAG,IAAA,iCAAoB,EAAC,aAAa,CAAC,CAAC;QAC/D,MAAM,uBAAuB,GAAG,IAAA,iCAAoB,EAAC,cAAc,CAAC,CAAC;QAErE,IAAI,IAAA,kCAAqB,EAAC,uBAAuB,EAAE,kBAAkB,CAAC,EAAE,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,8BAA8B,MAAM,MAAM,cAAc,EAAE,CAAC,CAAC,CAAC;YAC9E,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAtCD,sDAsCC;AAED;;;GAGG;AACH,SAAgB,uBAAuB,
|
|
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
|
|
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,
|
|
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
|
-
{
|
|
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;;;
|
|
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
|
-
|
|
103
|
+
void (0, proxy_server_1.closeOpenAICompatProxyServer)(server).finally(() => {
|
|
104
|
+
process.exitCode = 1;
|
|
105
|
+
});
|
|
104
106
|
});
|
|
105
|
-
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,qDAAoE;AACpE,6DAAwE;AACxE,
|
|
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 {
|
|
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;
|
|
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
|
|
434
|
-
|
|
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
|
-
?
|
|
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
|
-
:
|
|
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
|
|
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
|
|
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',
|