@ran-sh/dsh-crew 2.2.18 → 2.2.19
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/package.json
CHANGED
package/src/runtime-identity.mjs
CHANGED
|
@@ -36,7 +36,7 @@ export {
|
|
|
36
36
|
// included in the identity contract.
|
|
37
37
|
const RUNTIME_ID = randomUUID();
|
|
38
38
|
|
|
39
|
-
export const RUNTIME_VERSION = '2.2.
|
|
39
|
+
export const RUNTIME_VERSION = '2.2.19';
|
|
40
40
|
export const HUB_PROTOCOL_VERSION = 1;
|
|
41
41
|
|
|
42
42
|
export const HUB_CAPABILITIES = Object.freeze([
|
|
@@ -145,6 +145,60 @@ function Rotate-LaunchLog {
|
|
|
145
145
|
} catch { }
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
+
# A Crew-launched Harness process resolves its `env:` credential references from
|
|
149
|
+
# its own environment, and the launcher does not only run from a logon session.
|
|
150
|
+
# A terminal, a scheduled task, or an automation/agent shell can start it with a
|
|
151
|
+
# narrow environment, and then the Hub boots and answers every health check while
|
|
152
|
+
# its first job fails with CREDENTIAL_MISSING — the failure arrives long after the
|
|
153
|
+
# launch that caused it. The operator's persisted user scope is merged back in
|
|
154
|
+
# before any Harness process starts, which is what a logon start already had.
|
|
155
|
+
#
|
|
156
|
+
# Only names this process does not define are added, so a logon launch is
|
|
157
|
+
# unchanged and an explicitly exported value always wins over the registry. The
|
|
158
|
+
# skip list is what must not be taken from the user scope alone: its Path is one
|
|
159
|
+
# fragment of a real logon PATH (machine scope contributes the rest), and the rest
|
|
160
|
+
# describe the running process rather than the operator's profile.
|
|
161
|
+
$persistedEnvironmentSkip = @('Path', 'PATHEXT', 'ComSpec', 'SystemRoot', 'windir', 'TEMP', 'TMP', 'PSModulePath')
|
|
162
|
+
|
|
163
|
+
function Get-PersistedUserEnvironment {
|
|
164
|
+
$values = @{}
|
|
165
|
+
try {
|
|
166
|
+
$key = [Microsoft.Win32.Registry]::CurrentUser.OpenSubKey('Environment')
|
|
167
|
+
if ($key) {
|
|
168
|
+
try {
|
|
169
|
+
foreach ($name in $key.GetValueNames()) {
|
|
170
|
+
if ([string]::IsNullOrWhiteSpace($name)) { continue }
|
|
171
|
+
# GetValue expands REG_EXPAND_SZ, which is what a logon session sees.
|
|
172
|
+
$values[$name] = [string] $key.GetValue($name)
|
|
173
|
+
}
|
|
174
|
+
} finally { $key.Dispose() }
|
|
175
|
+
}
|
|
176
|
+
} catch { }
|
|
177
|
+
return $values
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
function Import-PersistedUserEnvironment {
|
|
181
|
+
$added = @()
|
|
182
|
+
$persisted = Get-PersistedUserEnvironment
|
|
183
|
+
if (-not $persisted) { return $added }
|
|
184
|
+
foreach ($entry in $persisted.GetEnumerator()) {
|
|
185
|
+
$name = [string] $entry.Key
|
|
186
|
+
if (-not $name) { continue }
|
|
187
|
+
if ($persistedEnvironmentSkip -contains $name) { continue }
|
|
188
|
+
if ($null -ne [Environment]::GetEnvironmentVariable($name, 'Process')) { continue }
|
|
189
|
+
[Environment]::SetEnvironmentVariable($name, [string] $entry.Value, 'Process')
|
|
190
|
+
$added += $name
|
|
191
|
+
}
|
|
192
|
+
return $added
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
function Remove-ImportedUserEnvironment {
|
|
196
|
+
param([string[]] $Names)
|
|
197
|
+
foreach ($name in @($Names)) {
|
|
198
|
+
if ($name) { [Environment]::SetEnvironmentVariable($name, $null, 'Process') }
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
148
202
|
function Resolve-OfficialHarnessCommand {
|
|
149
203
|
$shim = Get-Command dsh.cmd -CommandType Application -ErrorAction Stop | Select-Object -First 1
|
|
150
204
|
$root = Join-Path (Split-Path -Parent $shim.Source) 'node_modules\@deepseek-ai\dsh'
|
|
@@ -487,14 +541,19 @@ function Open-OfficialFrontend {
|
|
|
487
541
|
$stdout = Join-Path $logRoot ('dsh-official-web-{0}.out.log' -f $stamp)
|
|
488
542
|
$stderr = Join-Path $logRoot ('dsh-official-web-{0}.err.log' -f $stamp)
|
|
489
543
|
$previousHome = $env:DSH_HOME
|
|
544
|
+
$importedEnvironment = @()
|
|
490
545
|
try {
|
|
491
546
|
# The official application owns its normal state; no Crew plugin/profile
|
|
492
547
|
# registration or repair is performed in this home by the launcher.
|
|
493
548
|
$env:DSH_HOME = Join-Path $env:USERPROFILE '.dsh'
|
|
549
|
+
$importedEnvironment = Import-PersistedUserEnvironment
|
|
494
550
|
$arguments = @(('"{0}"' -f $official.Entry), 'web', '--patch', ('"{0}"' -f $frontend.Path), '--host', '127.0.0.1', '--port', '3080')
|
|
495
551
|
$process = Start-Process -FilePath $official.NodePath -ArgumentList $arguments -WindowStyle Hidden -PassThru `
|
|
496
552
|
-RedirectStandardOutput $stdout -RedirectStandardError $stderr
|
|
497
|
-
} finally {
|
|
553
|
+
} finally {
|
|
554
|
+
$env:DSH_HOME = $previousHome
|
|
555
|
+
Remove-ImportedUserEnvironment -Names $importedEnvironment
|
|
556
|
+
}
|
|
498
557
|
Write-LaunchLog ('Started official Harness on 3080; PID={0}. The official CLI opens the browser. Logs: {1}, {2}' -f $process.Id, $stdout, $stderr)
|
|
499
558
|
$deadline = (Get-Date).AddSeconds($TimeoutSeconds)
|
|
500
559
|
$nextProgress = (Get-Date).AddSeconds(5)
|
|
@@ -1306,8 +1365,10 @@ function Start-CrewService {
|
|
|
1306
1365
|
$stdout = Join-Path $logRoot ('dsh-crew-{0}-{1}-{2}.out.log' -f $Service.Profile, $Service.Port, $serviceRunStamp)
|
|
1307
1366
|
$stderr = Join-Path $logRoot ('dsh-crew-{0}-{1}-{2}.err.log' -f $Service.Profile, $Service.Port, $serviceRunStamp)
|
|
1308
1367
|
$previousHome = $env:DSH_HOME
|
|
1368
|
+
$importedEnvironment = @()
|
|
1309
1369
|
try {
|
|
1310
1370
|
$env:DSH_HOME = $Service.Home
|
|
1371
|
+
$importedEnvironment = Import-PersistedUserEnvironment
|
|
1311
1372
|
$arguments = @('--profile', $Service.Profile, '--host', '127.0.0.1', '--port', [string] $Service.Port, '--no-open')
|
|
1312
1373
|
$launchArguments = if ($dshCliIsNodeEntry) { @($dshCli) + $arguments } else { $arguments }
|
|
1313
1374
|
$process = Start-Process -FilePath $dshCommand -ArgumentList $launchArguments -WindowStyle Hidden -PassThru `
|
|
@@ -1326,6 +1387,7 @@ function Start-CrewService {
|
|
|
1326
1387
|
Write-LaunchLog ('Started {0} on port {1}; PID={2}; stdout={3}; stderr={4}' -f $Service.Profile, $Service.Port, $process.Id, $stdout, $stderr)
|
|
1327
1388
|
} finally {
|
|
1328
1389
|
$env:DSH_HOME = $previousHome
|
|
1390
|
+
Remove-ImportedUserEnvironment -Names $importedEnvironment
|
|
1329
1391
|
}
|
|
1330
1392
|
}
|
|
1331
1393
|
|