@kodax-ai/kodax 0.7.90 → 0.7.92

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 (82) hide show
  1. package/CHANGELOG.md +106 -0
  2. package/README.md +43 -0
  3. package/README_CN.md +28 -0
  4. package/dist/chunks/{agent-W35WYLTH.js → agent-YHHFIH7N.js} +1 -1
  5. package/dist/chunks/argument-completer-6ZTRBNZM.js +2 -0
  6. package/dist/chunks/{chunk-DBFWNUGB.js → chunk-5CIKWSCA.js} +2 -2
  7. package/dist/chunks/{chunk-R3BXINQ2.js → chunk-7XSZVOG7.js} +135 -135
  8. package/dist/chunks/chunk-A6GNPNGB.js +383 -0
  9. package/dist/chunks/{chunk-NCK7ASJL.js → chunk-AGZNXFHZ.js} +206 -205
  10. package/dist/chunks/chunk-BV3SVH36.js +519 -0
  11. package/dist/chunks/chunk-FBL7IVMK.js +123 -0
  12. package/dist/chunks/{chunk-6FLHNFYV.js → chunk-GH3KBC2H.js} +1 -1
  13. package/dist/chunks/{chunk-4KJQ7QGO.js → chunk-GRWUC6H7.js} +1 -1
  14. package/dist/chunks/chunk-OSQIYUGD.js +408 -0
  15. package/dist/chunks/{chunk-KG3QIIDU.js → chunk-PKPBII4F.js} +2 -2
  16. package/dist/chunks/{chunk-5247AKGN.js → chunk-QFV6YCIH.js} +2 -2
  17. package/dist/chunks/chunk-QKLS4BYA.js +320 -0
  18. package/dist/chunks/{chunk-7KPBUO2F.js → chunk-QPBN3J4E.js} +2 -2
  19. package/dist/chunks/chunk-RJIYXB62.js +415 -0
  20. package/dist/chunks/{chunk-JNBAIFJR.js → chunk-THZVJ6R7.js} +1 -1
  21. package/dist/chunks/{chunk-O2ZV775M.js → chunk-X75UGXP3.js} +1 -1
  22. package/dist/chunks/{chunk-ZVICRZVA.js → chunk-YVG6OKN7.js} +1 -1
  23. package/dist/chunks/{client-RWXK22GN.js → client-OVYKC3ND.js} +1 -1
  24. package/dist/chunks/compaction-config-2TVSYSB4.js +2 -0
  25. package/dist/chunks/{construction-bootstrap-KB6GB6IY.js → construction-bootstrap-QVLJPFTL.js} +1 -1
  26. package/dist/chunks/{dist-WILA35IA.js → dist-WNMK42WE.js} +1 -1
  27. package/dist/chunks/dist-XC5M7UYX.js +2 -0
  28. package/dist/chunks/host-B3TK2U43.js +2 -0
  29. package/dist/chunks/run-manager-5AV3MR4W.js +2 -0
  30. package/dist/chunks/{utils-SDMYKIZG.js → utils-HPVZCR2J.js} +1 -1
  31. package/dist/index.d.ts +15 -15
  32. package/dist/index.js +5 -5
  33. package/dist/kodax_bootstrap.js +1 -1
  34. package/dist/kodax_cli.js +1550 -1552
  35. package/dist/runtime-worker.js +1421 -1423
  36. package/dist/sandbox-workspace-session.js +269 -268
  37. package/dist/sdk-a2a.d.ts +11 -11
  38. package/dist/sdk-a2a.js +1 -1
  39. package/dist/sdk-agent.d.ts +15 -8
  40. package/dist/sdk-agent.js +1 -1
  41. package/dist/sdk-coding.d.ts +12 -12
  42. package/dist/sdk-coding.js +1 -1
  43. package/dist/sdk-experimental-memory.js +1 -1
  44. package/dist/sdk-llm.d.ts +1 -1
  45. package/dist/sdk-llm.js +1 -1
  46. package/dist/sdk-mcp.js +1 -1
  47. package/dist/sdk-media.js +1 -1
  48. package/dist/sdk-repl.d.ts +8 -8
  49. package/dist/sdk-repl.js +2 -2
  50. package/dist/sdk-runtime.d.ts +112 -11
  51. package/dist/sdk-runtime.js +1 -1
  52. package/dist/sdk-sandbox.d.ts +1 -1
  53. package/dist/sdk-sandbox.js +1 -1
  54. package/dist/sdk-session.d.ts +4 -4
  55. package/dist/sdk-session.js +1 -1
  56. package/dist/sdk-skills.js +1 -1
  57. package/dist/semantic-worker.js +77 -76
  58. package/dist/types-chunks/{bash-prefix-extractor.d-DBxWweqC.d.ts → bash-prefix-extractor.d-BMi_TJIY.d.ts} +53 -6
  59. package/dist/types-chunks/{capsule.d-Bc1-UYaj.d.ts → capsule.d-nYbM4MNL.d.ts} +1 -1
  60. package/dist/types-chunks/{controller.d-CnQqfSI5.d.ts → controller.d-Bm1i9RVj.d.ts} +13 -5
  61. package/dist/types-chunks/{guardrail.d-DqP4s46f.d.ts → guardrail.d-CKkoea7y.d.ts} +2 -2
  62. package/dist/types-chunks/{public-api.d-CrBB7m8F.d.ts → public-api.d-BsZWOq3P.d.ts} +4 -2
  63. package/dist/types-chunks/{repl.d-qijzfmA1.d.ts → repl.d-DxD0Olm0.d.ts} +10 -5
  64. package/dist/types-chunks/{resolver.d-bKttRr1V.d.ts → resolver.d-DparsV6Y.d.ts} +6 -4
  65. package/dist/types-chunks/{run-manager.d-PEct-5KE.d.ts → run-manager.d-BeSEc2OL.d.ts} +1 -1
  66. package/dist/types-chunks/{sdk-session-BIeiLU8G.d.ts → sdk-session-BTzblJTQ.d.ts} +1 -1
  67. package/dist/types-chunks/{shell-command-sets.d-RvEIrqHQ.d.ts → shell-command-sets.d-C2cc9Hwi.d.ts} +1 -1
  68. package/dist/types-chunks/{types.d-B9Fhknxd.d.ts → types.d-Dc3kwcjC.d.ts} +1 -1
  69. package/dist/types-chunks/{types.d-Do_AsIIs.d.ts → types.d-DrtP1ceI.d.ts} +1 -1
  70. package/dist/types-chunks/{utils.d-BvayexqQ.d.ts → utils.d-50Q24Few.d.ts} +4 -4
  71. package/package.json +5 -2
  72. package/dist/chunks/argument-completer-SRCHPEMA.js +0 -2
  73. package/dist/chunks/chunk-KINDGE7G.js +0 -382
  74. package/dist/chunks/chunk-T256QEDN.js +0 -412
  75. package/dist/chunks/chunk-TDSTNXNR.js +0 -519
  76. package/dist/chunks/chunk-UNEC2WXJ.js +0 -123
  77. package/dist/chunks/chunk-ZACJCRHT.js +0 -415
  78. package/dist/chunks/chunk-ZDOLJSTE.js +0 -320
  79. package/dist/chunks/compaction-config-MD2PQSAM.js +0 -2
  80. package/dist/chunks/dist-2NRXEHLI.js +0 -2
  81. package/dist/chunks/host-JAXBBRCV.js +0 -2
  82. package/dist/chunks/run-manager-EI264JTO.js +0 -2
@@ -1,519 +0,0 @@
1
- // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{k as xn}from"./chunk-NCK7ASJL.js";import{Ia as X,Wa as ir,Ya as ar,_a as Te,db as _e,fb as bn,ib as vn,t as $,zc as se}from"./chunk-R3BXINQ2.js";import{a as s}from"./chunk-ONUPGMER.js";import{spawn as hr,spawnSync as Xe}from"node:child_process";import{createHash as un,randomUUID as H}from"node:crypto";import{once as dr}from"node:events";import{constants as tt,existsSync as br,lstatSync as vr,mkdirSync as cr,readFileSync as xr,readdirSync as Mn,realpathSync as ce,renameSync as $n,rmSync as Be,statSync as fn,writeFileSync as lr,writeSync as $o}from"node:fs";import{copyFile as kr,lstat as ot,mkdir as K,readFile as be,realpath as Fe,rename as st,rm as G,rmdir as it,stat as nn,writeFile as ve}from"node:fs/promises";import{createRequire as at}from"node:module";import{createServer as dt}from"node:net";import te from"node:os";import i from"node:path";import ct from"node:readline";import{fileURLToPath as ur,pathToFileURL as Ar}from"node:url";var ae="0.0.65",{DEFAULT_WINDOWS_PROXY_PORT_RANGE:lt,SandboxManager:kn,getSrtWinPath:ut,getWindowsSandboxUserStatus:jn,grantWindowsAcl:ft,installWindowsSandbox:pt,resolveSrtWin:wt,revokeWindowsAcl:Er}=await import("@anthropic-ai/sandbox-runtime");function mt(){let e=process.platform==="win32"?"windows-restricted-user":process.platform==="darwin"?"macos-seatbelt":process.platform==="linux"?"linux-bubblewrap":"unsupported";return{version:3,asrtVersion:ae,platform:process.platform,backend:e,genericCommandExecution:!0,controls:["filesystem","network","environment","timeout","output"],ordinaryCallsTriggerSetup:!1,setupMayElevate:process.platform==="win32",unavailableBehavior:"structured-no-execution",permissionFallback:"normal-permission-policy"}}s(mt,"sandboxRuntimeCapability");var qn=1048576,Kn=12e4,Xn=at(import.meta.url),Rr=process.env.KODAX_BUNDLED==="true"?void 0:Ar(Xn.resolve("@anthropic-ai/sandbox-runtime")).href,gt=new Set([".ssh",".aws",".azure",".gnupg",".kodax",".agents",".codex",".claude",".gemini",".direnv",".terraform.d"]),yt=new Set([".env",".envrc",".pgpass",".npmrc",".pypirc","credentials","id_rsa","id_ed25519"]),St=[".ssh",".aws",".azure",".gnupg",".kube",".docker",".kodax",".agents",".codex",".claude",".gemini",".direnv",".terraform.d",i.join(".cargo","credentials.toml"),i.join(".config","gcloud"),i.join(".config","gh"),i.join(".config","openai"),i.join(".config","anthropic"),".gitconfig",i.join(".config","git","config"),".terraformrc",i.join(".config","pypoetry","auth.toml"),".condarc",".bashrc",".bash_profile",".zshrc",".zprofile",".profile",i.join(".config","fish","config.fish"),i.join(".config","fish","fish_variables"),".bash_history",".zsh_history",i.join(".m2","settings.xml"),i.join(".m2","settings-security.xml"),i.join(".gradle","gradle.properties"),i.join(".nuget","NuGet","NuGet.Config"),i.join(".pip","pip.conf"),i.join(".config","pip","pip.conf"),i.join(".cache","huggingface","token"),i.join(".huggingface","token"),i.join(".config","rclone","rclone.conf"),i.join(".local","share","keyrings"),i.join("Library","Keychains"),i.join("AppData","Roaming","Microsoft","Protect"),i.join("AppData","Roaming","Microsoft","Credentials"),i.join("AppData","Roaming","Microsoft","Vault"),i.join("AppData","Local","Microsoft","Credentials"),i.join("AppData","Local","Microsoft","Protect"),i.join("AppData","Local","Microsoft","Vault"),".password-store",".env",".envrc",".pgpass",".env.local",".env.development",".env.production",".env.test",".env.staging",".npmrc",".pypirc",".netrc",".git-credentials","credentials","credentials.json","application_default_credentials.json","id_rsa","id_dsa","id_ecdsa","id_ed25519"],ht=["runtime","mcp-tokens","mcp-clients","integrations","sandbox-runtime","processes","learned","config.json","auth.json","trusted-project-rules.json",".env",".envrc",".pgpass",".npmrc",".pypirc",".netrc",".git-credentials","credentials","credentials.json","application_default_credentials.json"],Gn=["runtime","processes","learned"],bt=String.raw`
3
- $ErrorActionPreference = 'Stop'
4
- $payload = [Console]::In.ReadToEnd() | ConvertFrom-Json
5
- $mutex = [System.Threading.Mutex]::new($false, 'Local\KodaXAsrtAclGuard-v1')
6
- $held = $false
7
- $missing = [System.Collections.Generic.List[string]]::new()
8
- function Test-KodaXAsrtAclRule($acl, $sidValue, $rights, $inheritance) {
9
- foreach ($rule in $acl.Access) {
10
- try {
11
- $ruleSid = $rule.IdentityReference.Translate(
12
- [System.Security.Principal.SecurityIdentifier]
13
- ).Value
14
- } catch {
15
- continue
16
- }
17
- if (
18
- $ruleSid -eq $sidValue -and
19
- $rule.AccessControlType -eq [System.Security.AccessControl.AccessControlType]::Deny -and
20
- -not $rule.IsInherited -and
21
- $rule.InheritanceFlags -eq $inheritance -and
22
- $rule.PropagationFlags -eq [System.Security.AccessControl.PropagationFlags]::None -and
23
- (([int]$rule.FileSystemRights -band [int]$rights) -eq [int]$rights)
24
- ) {
25
- return $true
26
- }
27
- }
28
- return $false
29
- }
30
- function Test-KodaXParentDeleteChildSafe($acl, $tokenSidValues) {
31
- foreach ($rule in $acl.Access) {
32
- try {
33
- $ruleSid = $rule.IdentityReference.Translate(
34
- [System.Security.Principal.SecurityIdentifier]
35
- ).Value
36
- } catch {
37
- continue
38
- }
39
- if (
40
- $tokenSidValues -contains $ruleSid -and
41
- $rule.AccessControlType -eq [System.Security.AccessControl.AccessControlType]::Deny -and
42
- ($rule.PropagationFlags -band [System.Security.AccessControl.PropagationFlags]::InheritOnly) -eq 0 -and
43
- (([int]$rule.FileSystemRights -band [int][System.Security.AccessControl.FileSystemRights]::DeleteSubdirectoriesAndFiles) -ne 0)
44
- ) {
45
- return $true
46
- }
47
- }
48
- foreach ($rule in $acl.Access) {
49
- try {
50
- $ruleSid = $rule.IdentityReference.Translate(
51
- [System.Security.Principal.SecurityIdentifier]
52
- ).Value
53
- } catch {
54
- continue
55
- }
56
- if (
57
- $tokenSidValues -contains $ruleSid -and
58
- $rule.AccessControlType -eq [System.Security.AccessControl.AccessControlType]::Allow -and
59
- ($rule.PropagationFlags -band [System.Security.AccessControl.PropagationFlags]::InheritOnly) -eq 0 -and
60
- (([int]$rule.FileSystemRights -band [int][System.Security.AccessControl.FileSystemRights]::DeleteSubdirectoriesAndFiles) -ne 0)
61
- ) {
62
- return $false
63
- }
64
- }
65
- return $true
66
- }
67
- function Test-KodaXAsrtAclRuleReadsData($acl, $sidValue) {
68
- foreach ($rule in $acl.Access) {
69
- try {
70
- $ruleSid = $rule.IdentityReference.Translate(
71
- [System.Security.Principal.SecurityIdentifier]
72
- ).Value
73
- } catch {
74
- continue
75
- }
76
- if (
77
- $ruleSid -eq $sidValue -and
78
- $rule.AccessControlType -eq [System.Security.AccessControl.AccessControlType]::Deny -and
79
- -not $rule.IsInherited -and
80
- $rule.PropagationFlags -eq [System.Security.AccessControl.PropagationFlags]::None -and
81
- (([int]$rule.FileSystemRights -band ([int][System.Security.AccessControl.FileSystemRights]::ReadAndExecute -bor [int][System.Security.AccessControl.FileSystemRights]::Synchronize)) -ne 0)
82
- ) {
83
- return $true
84
- }
85
- }
86
- return $false
87
- }
88
- function Add-KodaXAsrtAclRule($target, $sid, $rights, $inheritance, $ruleText) {
89
- $acl = Get-Acl -LiteralPath $target
90
- if (Test-KodaXAsrtAclRule $acl $sid.Value $rights $inheritance) {
91
- return
92
- }
93
- $principal = '*' + $sid.Value
94
- & "$env:SystemRoot\System32\icacls.exe" $target '/deny' "$($principal):$ruleText" | Out-Null
95
- if ($LASTEXITCODE -ne 0) {
96
- throw "icacls failed to install a KodaX sandbox guard on $target."
97
- }
98
- }
99
- function Add-KodaXAsrtWriteAclRule($target, $sid, $rights, $inheritance) {
100
- $acl = Get-Acl -LiteralPath $target
101
- if (Test-KodaXAsrtAclRule $acl $sid.Value $rights $inheritance) {
102
- return
103
- }
104
- $rule = [System.Security.AccessControl.FileSystemAccessRule]::new(
105
- $sid,
106
- $rights,
107
- $inheritance,
108
- [System.Security.AccessControl.PropagationFlags]::None,
109
- [System.Security.AccessControl.AccessControlType]::Deny
110
- )
111
- [void]$acl.AddAccessRule($rule)
112
- Set-Acl -LiteralPath $target -AclObject $acl
113
- }
114
- try {
115
- try {
116
- $held = $mutex.WaitOne(10000)
117
- } catch [System.Threading.AbandonedMutexException] {
118
- $held = $true
119
- }
120
- if (-not $held) {
121
- throw 'Timed out waiting for the KodaX ASRT ACL guard mutex.'
122
- }
123
- $sid = [System.Security.Principal.SecurityIdentifier]::new([string]$payload.sid)
124
- $tokenSidValues = @($payload.tokenSids | ForEach-Object { [string]$_ })
125
- foreach ($entry in $payload.paths) {
126
- $target = [System.IO.Path]::GetFullPath([string]$entry.path)
127
- if (-not (Test-Path -LiteralPath $target)) {
128
- throw "ACL guard target disappeared before it could be protected: $target"
129
- }
130
- $inheritance = if ([bool]$entry.directory) {
131
- [System.Security.AccessControl.InheritanceFlags]::ContainerInherit -bor
132
- [System.Security.AccessControl.InheritanceFlags]::ObjectInherit
133
- } else {
134
- [System.Security.AccessControl.InheritanceFlags]::None
135
- }
136
- $writeRights = [System.Security.AccessControl.FileSystemRights]::Write -bor
137
- [System.Security.AccessControl.FileSystemRights]::Delete -bor
138
- [System.Security.AccessControl.FileSystemRights]::ChangePermissions -bor
139
- [System.Security.AccessControl.FileSystemRights]::TakeOwnership
140
- if ([bool]$entry.directory) {
141
- $writeRights = $writeRights -bor [System.Security.AccessControl.FileSystemRights]::DeleteSubdirectoriesAndFiles
142
- }
143
- $targetRights = if ([string]$entry.mode -eq 'write') {
144
- $writeRights
145
- } else {
146
- [System.Security.AccessControl.FileSystemRights]::FullControl
147
- }
148
- $parent = [System.IO.Path]::GetDirectoryName($target)
149
- $targetAcl = Get-Acl -LiteralPath $target
150
- $targetReady = Test-KodaXAsrtAclRule $targetAcl $sid.Value $targetRights $inheritance
151
- $targetTooBroad = [string]$entry.mode -eq 'write' -and (Test-KodaXAsrtAclRuleReadsData $targetAcl $sid.Value)
152
- if ($targetTooBroad) {
153
- $targetReady = $false
154
- }
155
- $parentReady = -not $parent -or $parent -eq $target -or -not (Test-Path -LiteralPath $parent)
156
- if (-not $parentReady) {
157
- $parentAcl = Get-Acl -LiteralPath $parent
158
- $parentReady = (Test-KodaXAsrtAclRule $parentAcl $sid.Value ([System.Security.AccessControl.FileSystemRights]::DeleteSubdirectoriesAndFiles) ([System.Security.AccessControl.InheritanceFlags]::None)) -or (Test-KodaXParentDeleteChildSafe $parentAcl $tokenSidValues)
159
- }
160
- if (-not [bool]$payload.install) {
161
- if (-not $targetReady -or -not $parentReady) {
162
- [void]$missing.Add($target)
163
- }
164
- continue
165
- }
166
- if ($targetTooBroad) {
167
- $principal = '*' + $sid.Value
168
- & "$env:SystemRoot\System32\icacls.exe" $target '/remove:d' $principal | Out-Null
169
- if ($LASTEXITCODE -ne 0) {
170
- throw "icacls failed to remove an obsolete KodaX sandbox guard from $target."
171
- }
172
- }
173
- if (-not $targetReady) {
174
- if ([string]$entry.mode -eq 'write') {
175
- Add-KodaXAsrtWriteAclRule $target $sid $targetRights $inheritance
176
- } else {
177
- $targetRule = if ([bool]$entry.directory) { '(OI)(CI)(F)' } else { '(F)' }
178
- Add-KodaXAsrtAclRule $target $sid $targetRights $inheritance $targetRule
179
- }
180
- }
181
- if (-not $parentReady) {
182
- Add-KodaXAsrtAclRule $parent $sid ([System.Security.AccessControl.FileSystemRights]::DeleteSubdirectoriesAndFiles) ([System.Security.AccessControl.InheritanceFlags]::None) '(DC)'
183
- }
184
- }
185
- [Console]::Out.Write((@{ missing = @($missing) } | ConvertTo-Json -Compress))
186
- } finally {
187
- if ($held) {
188
- [void]$mutex.ReleaseMutex()
189
- }
190
- $mutex.Dispose()
191
- }
192
- `,Wn=new Set,Pr=new Set,fr=JSON.stringify(ar),An=JSON.stringify(ir),vt=String.raw`
193
- const { spawn } = require('node:child_process');
194
- const { writeSync } = require('node:fs');
195
- const input = JSON.parse(Buffer.from(process.argv[2], 'base64').toString('utf8'));
196
- const childEnv = { ...process.env };
197
- for (const name of Object.keys(childEnv)) {
198
- if (name.toLowerCase() === 'electron_run_as_node') delete childEnv[name];
199
- }
200
- if (input.electronRunAsNode === true) childEnv.ELECTRON_RUN_AS_NODE = '1';
201
- const child = spawn(input.command, input.args, {
202
- cwd: input.cwd,
203
- env: childEnv,
204
- shell: false,
205
- stdio: ['inherit', 'inherit', 'pipe'],
206
- windowsHide: true,
207
- windowsVerbatimArguments: input.windowsVerbatimArguments === true,
208
- });
209
- const stop = (signal) => child.kill(signal);
210
- process.once('SIGINT', () => stop('SIGINT'));
211
- process.once('SIGTERM', () => stop('SIGTERM'));
212
- child.once('spawn', () => {
213
- writeSync(2, input.targetStartedMarker);
214
- child.stderr.pipe(process.stderr);
215
- });
216
- child.once('error', (error) => {
217
- process.stderr.write((error instanceof Error ? error.message : String(error)) + '\n');
218
- process.exitCode = 1;
219
- });
220
- child.once('exit', (code, signal) => {
221
- process.exitCode = signal ? 1 : code ?? 1;
222
- });
223
- `,xt="eval(Buffer.from(process.argv[1],'base64').toString('utf8'))",kt=JSON.stringify(xt),At=Buffer.from(vt,"utf8").toString("base64"),Et=JSON.stringify(At),Cr=String.raw`
224
- import { spawn } from 'node:child_process';
225
- import { randomUUID } from 'node:crypto';
226
- import { readFile, rm, writeFile } from 'node:fs/promises';
227
- import { dirname } from 'node:path';
228
- let SandboxManager;
229
- const request = JSON.parse(await readFile(process.argv[2], 'utf8'));
230
- await rm(process.argv[2], { force: true });
231
- const targetStartedMarker = request.targetStartedMarker
232
- ?? '\u0000KODAX_ASRT_TARGET_STARTED:' + randomUUID() + '\u0000\n';
233
- const endpoints = new Set(request.endpoints.map((item) => item.host.toLowerCase() + ':' + item.port));
234
- const callback = request.allowAllNetwork === true
235
- ? async () => true
236
- : request.endpoints.length === 0
237
- ? undefined
238
- : async ({ host, port }) => endpoints.has(host.toLowerCase() + ':' + port);
239
- const withWindowsChildEnvironment = (argv, environment) => {
240
- const separator = argv.lastIndexOf('--');
241
- if (separator < 0) throw new Error('ASRT Windows wrapper omitted its child separator.');
242
- const requested = [];
243
- const requestedNames = new Set();
244
- for (const [name, value] of Object.entries(environment ?? {})) {
245
- if (value === undefined) continue;
246
- if (!name || name.includes('=') || name.includes('\0') || value.includes('\0')) {
247
- throw new Error('Invalid environment entry for ASRT Windows child.');
248
- }
249
- const normalized = name.toLowerCase();
250
- if (requestedNames.has(normalized)) {
251
- throw new Error('Ambiguous Windows child environment variable: ' + name + '.');
252
- }
253
- requestedNames.add(normalized);
254
- requested.push([name, value]);
255
- }
256
- const requestedOverrides = new Set(requested.flatMap(([name]) => (
257
- ['path', 'pathext'].includes(name.toLowerCase()) ? [name.toLowerCase()] : []
258
- )));
259
- const controlled = new Set();
260
- const prefix = [];
261
- for (let index = 0; index < separator; index += 1) {
262
- if (argv[index] !== '--env' || index + 1 >= separator) {
263
- prefix.push(argv[index]);
264
- continue;
265
- }
266
- const assignment = argv[index + 1];
267
- const name = assignment.split('=', 1)[0]?.toLowerCase();
268
- if (name) controlled.add(name);
269
- if (!name || !requestedOverrides.has(name)) prefix.push(argv[index], assignment);
270
- index += 1;
271
- }
272
- const injected = [];
273
- for (const [name, value] of requested) {
274
- const normalized = name.toLowerCase();
275
- if (controlled.has(normalized) && normalized !== 'path' && normalized !== 'pathext') continue;
276
- injected.push('--env', name + '=' + value);
277
- }
278
- const result = [...prefix, ...injected, ...argv.slice(separator)];
279
- const estimate = result.reduce((size, value) => size + value.length + 3, 0);
280
- if (estimate > 30000) throw new Error('ASRT Windows child environment exceeds the CreateProcess command-line limit.');
281
- return result;
282
- };
283
- const writeObservation = async (observation) => {
284
- if (typeof request.observationFile !== 'string') return;
285
- await writeFile(request.observationFile, JSON.stringify(observation), { mode: 0o600 });
286
- };
287
- const waitForTarget = (target, observation) => {
288
- const marker = Buffer.from(targetStartedMarker, 'utf8');
289
- let pending = Buffer.alloc(0);
290
- let diagnostic = Buffer.alloc(0);
291
- let processError;
292
- let wrapperSpawned = false;
293
- let targetStarted = false;
294
- let observationWrite = Promise.resolve();
295
- return new Promise((resolve, reject) => {
296
- let settled = false;
297
- target.once('spawn', () => {
298
- wrapperSpawned = true;
299
- });
300
- const finish = (result) => {
301
- if (settled) return;
302
- settled = true;
303
- void observationWrite.then(() => resolve(result), reject);
304
- };
305
- target.stderr.on('data', (chunk) => {
306
- if (targetStarted) {
307
- process.stderr.write(chunk);
308
- return;
309
- }
310
- pending = Buffer.concat([pending, Buffer.from(chunk)]);
311
- const markerOffset = pending.indexOf(marker);
312
- if (markerOffset >= 0) {
313
- targetStarted = true;
314
- const suffix = pending.subarray(markerOffset + marker.length);
315
- pending = Buffer.alloc(0);
316
- diagnostic = Buffer.alloc(0);
317
- observationWrite = writeObservation(observation).catch(() => undefined);
318
- if (suffix.length > 0) process.stderr.write(suffix);
319
- return;
320
- }
321
- const retained = Math.max(0, marker.length - 1);
322
- if (pending.length > retained) {
323
- diagnostic = Buffer.concat([
324
- diagnostic,
325
- pending.subarray(0, pending.length - retained),
326
- ]).subarray(-65536);
327
- pending = pending.subarray(pending.length - retained);
328
- }
329
- });
330
- target.once('error', (error) => {
331
- processError = error instanceof Error ? error.message : String(error);
332
- });
333
- target.once('close', (exitCode, signal) => {
334
- const preTarget = Buffer.concat([diagnostic, pending]).toString('utf8').trim();
335
- finish({
336
- exitCode: signal ? 1 : exitCode ?? 1,
337
- targetStarted,
338
- spawnFailedBeforeSpawn: processError !== undefined && !wrapperSpawned,
339
- diagnostic: preTarget || processError || undefined,
340
- });
341
- });
342
- });
343
- };
344
- let child;
345
- let targetStarted = false;
346
- let normalFallbackAttempted = false;
347
- const runDirect = async () => {
348
- const internalElectronNode = request.command === process.execPath && process.versions.electron !== undefined;
349
- const directArgs = internalElectronNode
350
- ? ['--import', ${fr}, ...request.args]
351
- : request.args;
352
- const directEnv = internalElectronNode
353
- ? { ...request.env, [${An}]: '1' }
354
- : request.env;
355
- child = spawn(request.command, directArgs, {
356
- cwd: request.cwd,
357
- env: directEnv,
358
- shell: false,
359
- stdio: 'inherit',
360
- windowsHide: true,
361
- windowsVerbatimArguments: request.windowsVerbatimArguments === true,
362
- });
363
- return await new Promise((resolve, reject) => {
364
- child.once('error', reject);
365
- child.once('exit', (exitCode, signal) => resolve(signal ? 1 : exitCode ?? 1));
366
- });
367
- };
368
- const runNormalFallback = async () => {
369
- if (
370
- request.fallbackToNormalExecution !== true
371
- || targetStarted
372
- || normalFallbackAttempted
373
- ) return false;
374
- await writeObservation({
375
- version: 1,
376
- state: 'fallback',
377
- reason: 'backend_failed',
378
- execution: 'normal_permission_policy',
379
- }).catch(() => undefined);
380
- normalFallbackAttempted = true;
381
- process.exitCode = await runDirect();
382
- return true;
383
- };
384
- try {
385
- if (request.wrappedInvocation) {
386
- const wrapped = request.wrappedInvocation;
387
- child = spawn(wrapped.executable, wrapped.args, {
388
- cwd: request.cwd,
389
- env: wrapped.env,
390
- shell: wrapped.shell,
391
- stdio: ['inherit', 'inherit', 'pipe'],
392
- windowsHide: true,
393
- });
394
- const result = await waitForTarget(child, {
395
- version: 1,
396
- state: 'applied',
397
- backend: request.observationBackend ?? 'unsupported',
398
- policyId: 'kodax-workspace-shell-v1',
399
- });
400
- targetStarted = result.targetStarted;
401
- const fellBack = result.spawnFailedBeforeSpawn
402
- ? await runNormalFallback()
403
- : false;
404
- if (!targetStarted && !fellBack) {
405
- process.stderr.write((result.diagnostic || 'Sandbox target launch could not be attested.') + '\n');
406
- }
407
- if (!fellBack) process.exitCode = targetStarted ? result.exitCode : 1;
408
- } else {
409
- ({ SandboxManager } = await import(process.argv[1]));
410
- const bootstrap = request.bootstrapCommand ?? 'node';
411
- const bootstrapIsAbsolute = /^(?:[A-Za-z]:[\\/]|\\\\)/.test(bootstrap);
412
- const bootstrapIsElectronNode = bootstrap === process.execPath
413
- && process.versions.electron !== undefined;
414
- const config = process.platform === 'win32' && bootstrapIsAbsolute
415
- ? {
416
- ...request.config,
417
- filesystem: {
418
- ...request.config.filesystem,
419
- allowRead: [...new Set([
420
- ...request.config.filesystem.allowRead,
421
- bootstrap,
422
- dirname(bootstrap),
423
- ])],
424
- },
425
- }
426
- : request.config;
427
- await SandboxManager.initialize(config, callback);
428
- const quote = (value) => process.platform === 'win32'
429
- ? '"' + value.replaceAll('"', '""') + '"'
430
- : "'" + value.replaceAll("'", "'\"'\"'") + "'";
431
- const internalElectronNode = request.command === process.execPath && process.versions.electron !== undefined;
432
- const childArgs = internalElectronNode
433
- ? ['--import', ${fr}, ...request.args]
434
- : request.args;
435
- const command = [
436
- quote(bootstrap),
437
- '-e',
438
- quote(${kt}),
439
- ${Et},
440
- Buffer.from(JSON.stringify({
441
- command: request.command,
442
- args: childArgs,
443
- windowsVerbatimArguments: request.windowsVerbatimArguments === true,
444
- cwd: request.cwd,
445
- targetStartedMarker,
446
- electronRunAsNode: internalElectronNode,
447
- }), 'utf8').toString('base64'),
448
- ].join(' ');
449
- if (process.platform === 'win32') {
450
- const wrapped = await SandboxManager.wrapWithSandboxArgv(command, 'cmd', undefined, undefined, request.cwd);
451
- const requestedEnv = internalElectronNode || bootstrapIsElectronNode
452
- ? { ...request.env, [${An}]: '1' }
453
- : request.env;
454
- const childArgv = withWindowsChildEnvironment(wrapped.argv, requestedEnv);
455
- child = spawn(childArgv[0], childArgv.slice(1), {
456
- cwd: request.cwd,
457
- env: wrapped.env,
458
- shell: false,
459
- stdio: ['inherit', 'inherit', 'pipe'],
460
- windowsHide: true,
461
- });
462
- } else {
463
- const wrapped = await SandboxManager.wrapWithSandbox(command);
464
- const childEnv = internalElectronNode || bootstrapIsElectronNode
465
- ? { ...request.env, [${An}]: '1' }
466
- : request.env;
467
- child = spawn(wrapped, {
468
- cwd: request.cwd,
469
- env: childEnv,
470
- shell: true,
471
- stdio: ['inherit', 'inherit', 'pipe'],
472
- });
473
- }
474
- const stop = () => child?.kill('SIGTERM');
475
- process.once('SIGINT', stop);
476
- process.once('SIGTERM', stop);
477
- const result = await waitForTarget(child, {
478
- version: 1,
479
- state: 'applied',
480
- backend: request.observationBackend ?? 'unsupported',
481
- policyId: 'kodax-workspace-shell-v1',
482
- });
483
- targetStarted = result.targetStarted;
484
- try { SandboxManager.cleanupAfterCommand(); } catch {}
485
- await SandboxManager.reset().catch(() => undefined);
486
- const fellBack = result.spawnFailedBeforeSpawn
487
- ? await runNormalFallback()
488
- : false;
489
- if (!targetStarted && !fellBack) {
490
- process.stderr.write((result.diagnostic || 'Sandbox target launch could not be attested.') + '\n');
491
- }
492
- if (!fellBack) process.exitCode = targetStarted ? result.exitCode : 1;
493
- }
494
- } catch (error) {
495
- await SandboxManager?.reset().catch(() => undefined);
496
- if (
497
- request.fallbackToNormalExecution === true
498
- && !targetStarted
499
- && !normalFallbackAttempted
500
- && child === undefined
501
- ) {
502
- try {
503
- await runNormalFallback();
504
- } catch (fallbackError) {
505
- process.stderr.write((fallbackError instanceof Error ? fallbackError.message : String(fallbackError)) + '\n');
506
- process.exitCode = 1;
507
- }
508
- } else {
509
- process.stderr.write((error instanceof Error ? error.message : String(error)) + '\n');
510
- process.exitCode = 1;
511
- }
512
- }
513
- `,ge,He=0,Rt=3e4,Oe,Me,Tn=!1,ie;function de(e){return e instanceof Error?e.message:String(e)}s(de,"errorText");function je(e,...n){return e instanceof Error&&"code"in e&&typeof e.code=="string"&&n.includes(e.code)}s(je,"isFileSystemError");async function pr(e){try{return await be(e)}catch(n){if(je(n,"ENOENT"))return;throw n}}s(pr,"readFileIfPresent");async function Pt(e,n){let r=await pr(n);if(r?.equals(e))return;if(r!==void 0)throw new Error(`Prepared Windows sandbox runner failed integrity verification: ${n}.`);let t=`${n}.${process.pid}.${H()}.tmp`;try{await ve(t,e,{flag:"wx",mode:448});try{await st(t,n)}catch(o){if(!(await pr(n))?.equals(e))throw o}}finally{await G(t,{force:!0})}}s(Pt,"installWindowsRunnerCopy");async function _n(){if(Oe===void 0){let e=(async()=>{let n=await be(ut()),r=un("sha256").update(n).digest("hex").slice(0,16),t=i.join(i.resolve(X()),"sandbox-runtime","runner",ae,process.arch,r),o=i.join(t,"srt-win.exe");await K(mn(),{recursive:!0,mode:448}),await K(t,{recursive:!0,mode:448}),await Pt(n,o);let a={path:o,directory:t,srtWin:wt({path:o})};return Me=a,a})();Oe=e,e.catch(()=>{Oe===e&&(Oe=void 0,Me=void 0)})}return Oe}s(_n,"prepareWindowsSandboxRunner");function Ae(){if(process.platform!=="win32")throw new Error("A prepared Windows sandbox runner was requested on a non-Windows platform.");if(Me===void 0)throw new Error("Windows sandbox runner is not prepared; run the sandbox readiness check first.");return Me}s(Ae,"requirePreparedWindowsRunner");var O=new Set,q=new Map,En,xe=35e3,le="[acl_cleanup_unconfirmed]",Z=class extends Error{static{s(this,"WindowsSandboxAclAdmissionError")}constructor(n,r){super(n,r),this.name="WindowsSandboxAclAdmissionError"}};function pn(e){return e.diagnostics.some(n=>n.startsWith(le))}s(pn,"doctorHasWindowsSandboxAclCleanupBlock");function wn(){let e=Object.entries(process.env).find(([n,r])=>n.toUpperCase()==="PROGRAMDATA"&&r!==void 0)?.[1]??"C:\\ProgramData";return i.join(i.resolve(e),"KodaX","sandbox-runtime","acl-poison")}s(wn,"windowsSandboxAclPoisonDirectory");function mn(){return i.dirname(wn())}s(mn,"windowsSandboxAclCoordinationDirectory");function Jn(){return i.join(i.resolve(X()),"sandbox-runtime","acl-poison")}s(Jn,"legacyWindowsSandboxAclPoisonDirectory");function Ct(){return i.join(mn(),"acl-poison-staging")}s(Ct,"windowsSandboxAclPoisonStagingDirectory");function $t(){return i.join(i.resolve(X()),"sandbox-runtime","acl-poison-staging")}s($t,"legacyWindowsSandboxAclPoisonStagingDirectory");function ke(){return i.join(mn(),"acl-recovery.lock")}s(ke,"windowsSandboxAclRecoveryLockFile");function $r(e){let n=JSON.parse(e);if(typeof n!="object"||n===null)throw new Error("Windows sandbox ACL poison marker is not an object.");let r=n;if(r.version!==1&&r.version!==2||r.state!==void 0&&r.state!=="active"&&r.state!=="unconfirmed"||r.policyKey!==void 0&&typeof r.policyKey!="string"||r.holderPid!==void 0&&(typeof r.holderPid!="number"||!Number.isSafeInteger(r.holderPid)||r.holderPid<=0)||r.holderProcessStartIdentity!==void 0&&typeof r.holderProcessStartIdentity!="string"||r.pid!==void 0&&(typeof r.pid!="number"||!Number.isSafeInteger(r.pid)||r.pid<=0)||r.processStartIdentity!==void 0&&typeof r.processStartIdentity!="string"||r.windowsBootIdentity!==void 0&&typeof r.windowsBootIdentity!="string")throw new Error("Windows sandbox ACL poison marker has an invalid owner identity.");return{version:r.version,...r.state==="active"||r.state==="unconfirmed"?{state:r.state}:{},...typeof r.policyKey=="string"?{policyKey:r.policyKey}:{},...typeof r.holderPid=="number"?{holderPid:r.holderPid}:{},...typeof r.holderProcessStartIdentity=="string"?{holderProcessStartIdentity:r.holderProcessStartIdentity}:{},...typeof r.pid=="number"?{pid:r.pid}:{},...typeof r.processStartIdentity=="string"?{processStartIdentity:r.processStartIdentity}:{},...typeof r.windowsBootIdentity=="string"?{windowsBootIdentity:r.windowsBootIdentity}:{}}}s($r,"parseWindowsSandboxAclPoisonOwner");function Ge(){return[...new Set([wn(),Jn()])].flatMap(n=>{let r;try{r=Mn(n)}catch(t){if(je(t,"ENOENT"))return[];throw t}return r.filter(t=>t.endsWith(".json")).map(t=>{let o=i.join(n,t);try{let a=$r(xr(o,"utf8"));return{file:o,owner:i.basename(o).startsWith("unconfirmed-")?{...a,state:"unconfirmed"}:a}}catch(a){throw new Z(`Windows sandbox ACL cleanup was not confirmed because its poison marker is unreadable: ${o}. `+On(),{cause:a})}})})}s(Ge,"readWindowsSandboxAclPoisonOwners");function Ee(){if(process.platform!=="win32")return;if(En!==void 0)return En??void 0;let e=String.raw`
514
- # KodaXWindowsBootIdentity-v1
515
- $boot = (Get-CimInstance Win32_OperatingSystem -ErrorAction Stop).LastBootUpTime
516
- [Console]::Out.Write($boot.ToUniversalTime().Ticks.ToString([Globalization.CultureInfo]::InvariantCulture))
517
- `,n=Xe(Gr(),["-NoProfile","-NonInteractive","-EncodedCommand",Buffer.from(e,"utf16le").toString("base64")],{encoding:"utf8",timeout:5e3,windowsHide:!0}),r=n.status===0?n.stdout.trim():"",t=/^\d+$/.test(r)?`windows-boot-${r}`:void 0;return En=t??null,t}s(Ee,"readWindowsBootIdentity");function On(){return`After stopping every KodaX and KodaX Space process, run "${Me?.path??"srt-win.exe"}" acl recover --force --json, then delete "${wn()}" and "${Jn()}".`}s(On,"windowsSandboxAclManualRecoveryInstruction");function Wr(e,n=Ee()){if(e.find(({windowsBootIdentity:a})=>a===void 0||n===void 0)!==void 0)return new Z("An unconfirmed Windows sandbox process tree has no verifiable Windows boot identity. "+On());let t=e[0],o=t?.pid===void 0?"":` (last root PID ${t.pid})`;return new Z(`An unconfirmed Windows sandbox process tree${o} from the same Windows boot may still have live descendants; restart Windows before retrying. `+On())}s(Wr,"persistentWindowsSandboxAclPoisonError");function Nn(e,n,r="unconfirmed",t){if(process.platform!=="win32")return;let o=Ee(),a=_e(process.pid),c=H(),d=`${r==="unconfirmed"?"unconfirmed-":""}owner-${c}.json`,l=JSON.stringify({version:1,state:r,...t===void 0?{}:{policyKey:t},holderPid:process.pid,...a===void 0?{}:{holderProcessStartIdentity:a},...e===void 0?{}:{pid:e},...n===void 0?{}:{processStartIdentity:n},...o===void 0?{}:{windowsBootIdentity:o}}),u=s((f,p)=>{cr(f,{recursive:!0,mode:448});let w=i.join(f,d);if(r==="unconfirmed")return lr(w,l,{flag:"wx",mode:384}),w;cr(p,{recursive:!0,mode:448});let h=i.join(p,`owner-${c}.tmp`);return lr(h,l,{flag:"wx",mode:384}),$n(h,w),w},"persist"),g=u(wn(),Ct());try{let f=u(Jn(),$t());q.set(g,f)}catch(f){if(r==="active")try{Be(g,{force:!0})}catch(p){throw new AggregateError([f,p],"Windows sandbox owner compatibility marker and primary rollback both failed.")}throw f}return g}s(Nn,"persistWindowsSandboxAclPoisonOwner");function Wt(e){let n=Nn(void 0,void 0,"active",e);if(n!==void 0){O.add(n);let r=q.get(n);r!==void 0&&O.add(r)}return n}s(Wt,"createWindowsSandboxAclOwnerMarker");function Ne(e){if(e===void 0)return;let n=q.get(e);try{n!==void 0&&Be(n,{force:!0}),Be(e,{force:!0}),O.delete(e),n!==void 0&&O.delete(n),q.delete(e)}catch(r){throw O.delete(e),n!==void 0&&O.delete(n),ue(r),new Error("Windows sandbox owner poison marker could not be cleared.",{cause:r})}}s(Ne,"confirmWindowsSandboxAclOwnerStopped");async function ze(e,n){ue(n);let r=await Un(e,void 0,void 0,n);if(ue(r),r!==n)throw r}s(ze,"retainWindowsSandboxAclOwnerPoison");function Tr(e,n,r){if(e===void 0)return Nn(n,r,"unconfirmed");let t=q.get(e),o=i.join(i.dirname(e),`unconfirmed-${i.basename(e)}`),a=t===void 0?void 0:i.join(i.dirname(t),`unconfirmed-${i.basename(t)}`);if(br(o))return O.delete(e),t!==void 0&&O.delete(t),a!==void 0&&q.set(o,a),q.delete(e),o;try{return $n(e,o),t!==void 0&&a!==void 0&&$n(t,a),O.delete(e),t!==void 0&&O.delete(t),a!==void 0&&q.set(o,a),q.delete(e),o}catch(c){try{let d=Nn(n,r,"unconfirmed");return O.delete(e),t!==void 0&&O.delete(t),q.delete(e),d}catch(d){throw O.delete(e),t!==void 0&&O.delete(t),q.delete(e),new AggregateError([c,d],"Windows sandbox ACL poison write-ahead failed.")}}}s(Tr,"writeAheadWindowsSandboxAclOwnerPoison");async function Un(e,n,r,t){if(process.platform!=="win32")return t;let o;try{return o=Tr(e,n,r),await se(ke(),async()=>{},xe),t}catch(a){return new AggregateError([t,a],o===void 0?"Windows sandbox owner termination and durable ACL poison recording both failed.":"Windows sandbox owner termination was not confirmed and ACL poison serialization failed.")}}s(Un,"transitionWindowsSandboxAclOwnerToPoison");function Tt(e,n){return O.has(e)}s(Tt,"isVerifiedActiveWindowsSandboxAclOwner");function Vn(e){if(e.state!=="active"||e.holderPid===void 0||e.holderProcessStartIdentity===void 0)return"stale";let n=_e(e.holderPid);if(n!==void 0)return n===e.holderProcessStartIdentity?"live":"stale";try{return process.kill(e.holderPid,0),"unknown"}catch(r){return je(r,"ESRCH")?"stale":"unknown"}}s(Vn,"windowsSandboxAclOwnerLiveness");function Hn(e,n,r){return n.state!=="active"?!1:O.has(e)?r===void 0||n.policyKey===r:r!==void 0&&n.policyKey===r&&Vn(n)==="live"}s(Hn,"isCompatibleWindowsSandboxAclOwner");function zn(e){let n=Ge().filter(({file:r,owner:t})=>!Hn(r,t,e));if(n.length!==0)throw Wr(n.map(({owner:r})=>r))}s(zn,"assertNoPersistentWindowsSandboxAclPoison");async function _r(e,n,r,t){let o=new Error(r);if(process.platform==="win32"){let a=await Un(t,e,n,o);return ue(a),a instanceof Error?a:o}return ue(o),o}s(_r,"recordUnconfirmedWindowsSandboxOwner");function Or(e){return process.platform==="win32"?`${e} process-tree termination was not confirmed; restart Windows before retrying.`:`${e} process-tree termination was not confirmed; stop the retained process tree before retrying.`}s(Or,"unconfirmedSandboxProcessTreeMessage");function rn(){let e=Ae(),n=Xe(e.srtWin.exe,[...e.srtWin.prependArgs,"acl","recover","--json"],{cwd:e.directory,encoding:"utf8",timeout:3e4,windowsHide:!0}),r=(n.stderr??"").trim();if(n.error)throw new Error(`Windows sandbox ACL recovery failed to start: ${n.error.message}`,{cause:n.error});let t;try{t=JSON.parse((n.stdout??"").trim())}catch(a){throw new Error(`Windows sandbox ACL recovery failed with unparseable output (exit ${String(n.status)}): ${r||"(empty stderr)"}.`,{cause:a})}let o=typeof t=="object"&&t!==null?t:void 0;if(n.status!==0||typeof o?.deadBrokers!="number"||!Number.isSafeInteger(o.deadBrokers)||o.deadBrokers<0||typeof o.acesRevoked!="number"||!Number.isSafeInteger(o.acesRevoked)||o.acesRevoked<0)throw new Error(`Windows sandbox ACL recovery failed (exit ${String(n.status)}${n.signal?`, signal ${n.signal}`:""}): ${r||"(empty stderr)"}.`);Tn=!0}s(rn,"recoverWindowsSandboxAcls");function _t(e){return e instanceof Error&&e.message.startsWith("learning store lock timed out:")}s(_t,"isWindowsSandboxAclRecoveryLockTimeout");var tn=class extends Z{static{s(this,"ForeignWindowsSandboxAclOwnerContentionError")}constructor(n){super("Another Windows sandbox owner is active for the shared sandbox account; wait for it to close or stop the other KodaX/KodaX Space process, then retry.",{cause:n}),this.name="ForeignWindowsSandboxAclOwnerContentionError"}},on=class extends Z{static{s(this,"StaleWindowsSandboxAclOwnerContentionError")}constructor(n){super(n.message,{cause:n}),this.name="StaleWindowsSandboxAclOwnerContentionError"}};function Nr(e){!_t(e)&&!(e instanceof tn)&&!(e instanceof on)&&ue(e)}s(Nr,"recordWindowsSandboxAclAdmissionFailure");function qe(e,n=Ee()){let r=Wr(e.map(({owner:t})=>t),n);return e.every(({owner:t})=>t.state==="active")?e.some(({owner:t})=>Vn(t)==="stale")?new on(r):new tn(r):r}s(qe,"windowsSandboxAclPoisonSnapshotError");function Ot(){let e=Ge();if(e.length===0)return;let n=Ee();if(n!==void 0&&e.every(({owner:t})=>t.windowsBootIdentity!==void 0&&t.windowsBootIdentity!==n)){rn();for(let t of e)Be(t.file,{force:!0});zn();return}return e.every(({owner:t})=>Vn(t)!=="stale")?new Z("Windows sandbox setup cannot run while a sandbox owner is active for the shared Windows sandbox account; wait for sandboxed commands to finish and stop other KodaX or KodaX Space processes, then retry."):qe(e,n)}s(Ot,"windowsSandboxAclSetupBlockWithLock");function wr(e,n){return{...e,ready:!1,diagnostics:[...e.diagnostics.filter(r=>!r.startsWith(le)),`${le} ${n.message}`]}}s(wr,"withWindowsSandboxAclSetupBlock");function Ir(e){yn();let n=Ge(),r=n.filter(({file:t,owner:o})=>!Hn(t,o,e));if(Tn){if(r.length>0)throw qe(r);return}if(r.length>0){let t=Ee();if(!(t!==void 0&&r.every(({owner:a})=>a.windowsBootIdentity!==void 0&&a.windowsBootIdentity!==t)))throw qe(r,t)}if(n.length>0){Tn=!0;return}rn();for(let t of r)Be(t.file,{force:!0});zn(e)}s(Ir,"ensureWindowsSandboxAclRecoveryWithLock");async function sn(e){if(process.platform==="win32")try{await se(ke(),async()=>Ir(e),xe)}catch(n){throw Nr(n),n}}s(sn,"ensureWindowsSandboxAclRecovery");async function Lr(e){if(process.platform!=="win32")return;let n;try{return await se(ke(),async()=>{try{Ir(e)}catch(r){throw Nr(r),r}return n=Wt(e),n},xe)}catch(r){if(n===void 0)throw r;try{Ne(n)}catch(t){throw new AggregateError([r,t],"Windows sandbox owner admission and marker cleanup both failed.")}throw r}}s(Lr,"admitWindowsSandboxAclOwner");async function In(e){if(process.platform!=="win32")return;let n;try{if(e===void 0||!O.has(e))return;if(n=$r(xr(e,"utf8")).policyKey,n!==void 0){await se(ke(),async()=>{let t=q.get(e),o=new Set([e,t].filter(d=>d!==void 0)),a=Ge().filter(({file:d})=>!o.has(d)),c=a.filter(({file:d,owner:l})=>!Hn(d,l,n));if(c.length>0)throw qe(c);if(a.length>0){Ne(e);return}rn(),Ne(e)},xe);return}let r=Tr(e,void 0,void 0);await se(ke(),async()=>{rn(),Ne(r),e!==r&&Ne(e)},xe)}catch(r){let t=n===void 0?r:await Un(e,void 0,void 0,r);throw ue(t),t}}s(In,"confirmWindowsSandboxAclRecovery");function Rn(){ie!==void 0&&(Er({sandboxUserSid:ie.sandboxUserSid,holderPid:process.pid,srtWin:ie.runner.srtWin}),ie=void 0)}s(Rn,"releasePreparedWindowsRunnerGrant");function Nt(e,n){if(!(ie?.runner.path===e.path&&ie.sandboxUserSid===n)){process.removeListener("exit",Rn),Rn();try{ft({read:[e.directory,e.path],write:[],sandboxUserSid:n,holderPid:process.pid,srtWin:e.srtWin})}catch(r){try{Er({sandboxUserSid:n,holderPid:process.pid,srtWin:e.srtWin})}catch(t){throw new AggregateError([r,t],"Windows sandbox runner ACL grant failed and its partial grant could not be revoked.")}throw r}ie={runner:e,sandboxUserSid:n},process.once("exit",Rn)}}s(Nt,"retainPreparedWindowsRunnerGrant");async function It(){let[e,n]=lt;for(let r=0;r<5;r+=1){let t=dt();t.listen(0,"127.0.0.1"),await dr(t,"listening");let o=t.address();if(typeof o=="object"&&o!==null&&(o.port<e||o.port>n))return{server:t,target:`127.0.0.1:${o.port}`};let a=dr(t,"close");t.close(),await a}throw new Error(`[wfp_probe_bind_failed] Could not bind a loopback listener outside the Windows sandbox proxy range [${e},${n}].`)}s(It,"bindWindowsWfpProbe");function mr(e){return/0x80070005|access (?:is )?denied|拒绝访问/i.test(e)?"runner_launch_access_denied":/seclogon|secondary logon/i.test(e)?"secondary_logon_unavailable":"wfp_probe_failed"}s(mr,"windowsRunnerFailureCode");function Lt(e){return je(e,"ETIMEDOUT")?"wfp_probe_timeout":je(e,"EACCES","EPERM")?"runner_launch_access_denied":"runner_spawn_failed"}s(Lt,"windowsRunnerSpawnFailureCode");async function Dt(e){let{server:n,target:r}=await It();try{let t=Xe(e.srtWin.exe,[...e.srtWin.prependArgs,"wfp","verify","--target",r],{cwd:e.directory,encoding:"utf8",timeout:3e4,windowsHide:!0}),o=(t.stderr??"").trim();if(t.error)throw new Error(`[${Lt(t.error)}] Windows sandbox runner failed to start: ${t.error.message}`);let a;try{a=JSON.parse((t.stdout??"").trim())}catch{let c=t.status===null?"wfp_probe_timeout":mr(o);throw new Error(`[${c}] Windows sandbox WFP probe exited ${String(t.status)}${t.signal?` (signal ${t.signal})`:""} with unparseable output; stderr: ${o||"(empty)"}.`)}if(t.status===3)throw new Error(`[wfp_fence_inactive] Direct outbound access to ${String(a.target??r)} succeeded. Run "kodax sandbox setup" to reinstall the Windows network policy.`);if(t.status!==0||a.egress_probe!=="blocked")throw new Error(`[${mr(o)}] Windows sandbox WFP probe to ${String(a.target??r)} was ${String(a.egress_probe)} (exit ${String(t.status)}): ${o||"(empty stderr)"}.`)}finally{n.close()}}s(Dt,"verifyPreparedWindowsWfp");function Dr(e){let n=[];return e.provisioned||n.push("Windows sandbox account does not exist."),e.sid||n.push("Windows sandbox account SID is unavailable."),(!e.groupExists||!e.groupSid)&&n.push("Windows sandbox local group is unavailable."),e.inBuiltinUsers||n.push("Windows sandbox account is not in the built-in Users group."),e.inSandboxGroup||n.push("Windows sandbox account is not in the sandbox-runtime-users group."),e.hiddenFromLogon||n.push("Windows sandbox account is not hidden from interactive logon."),e.credPresent||n.push("Windows sandbox account credential is unavailable."),n}s(Dr,"windowsSandboxAccountDiagnostics");function Bt(e){let n=JSON.parse(e);if(typeof n!="object"||n===null)return;let r=n;if(r.version===1&&(r.state==="applied"&&r.policyId==="kodax-workspace-shell-v1"&&(r.backend==="windows-restricted-user"||r.backend==="macos-seatbelt"||r.backend==="linux-bubblewrap"||r.backend==="unsupported")||r.state==="fallback"&&r.reason==="backend_failed"&&r.execution==="normal_permission_policy"))return r}s(Bt,"parseBrokerObservation");function gn(){return process.env.KODAX_A2A_NODE!==void 0?process.env.KODAX_A2A_NODE:process.versions.electron!==void 0?process.execPath:process.env.KODAX_BUNDLED==="true"?"node":process.execPath}s(gn,"sandboxJavaScriptCommand");async function Y(e={}){if(e.refresh||ge===void 0||Date.now()>=He){let n=Ft();ge=n,He=Number.POSITIVE_INFINITY,n.then(r=>{ge===n&&(He=r.ready?Number.POSITIVE_INFINITY:Date.now()+Rt)},()=>{ge===n&&(ge=void 0,He=0)})}return ge}s(Y,"doctorSandboxRuntime");async function Ft(){let e=[],n=!1;kn.isSupportedPlatform()||e.push(`Unsupported platform: ${process.platform}.`);let r=process.platform==="win32"?{errors:[],warnings:[]}:kn.checkDependencies();e.push(...r.warnings,...r.errors);let t=r.errors.length>0;if(process.env.KODAX_BUNDLED!=="true")try{let d=JSON.parse(await be(Xn.resolve("@anthropic-ai/sandbox-runtime/package.json"),"utf8"));d.version!==ae&&(t=!0,e.push(`ASRT package version mismatch: expected ${ae}, found ${String(d.version)}.`))}catch(d){t=!0,e.push(`ASRT package provenance check failed: ${de(d)}`)}let o=gn(),a=Te({args:["--version"],env:Re(),isElectron:o===process.execPath&&process.versions.electron!==void 0}),c=Xe(o,a.args,{env:a.env,shell:!1,encoding:"utf8",windowsHide:!0,timeout:5e3});if(c.status!==0){t=!0;let d=c.error?.message??(c.stderr.trim()||o);e.push(`JavaScript Skill interpreter is unavailable: ${d}.`)}if(process.platform==="win32"){try{let d=await _n(),l=jn({srtWin:d.srtWin}),u=Dr(l);if(u.length>0||!l.sid)t=!0,e.push(...u);else{Nt(d,l.sid);let g=Xr(an(),l.sid,l.groupSid,!1,"read");g.length>0&&(t=!0,e.push(`[acl_guards_missing] ${g.length} persistent Windows sandbox ACL guard(s) are missing. Run "kodax sandbox setup" once to install them outside the startup path.`)),await Dt(d)}}catch(d){t=!0,e.push(de(d))}try{let d=Ge().filter(({file:l,owner:u})=>!Tt(l,u));if(d.length>0){let l=Ee();l!==void 0&&d.every(({owner:g})=>g.windowsBootIdentity!==void 0&&g.windowsBootIdentity!==l)||(n=!0,e.push(`${le} `+qe(d,l).message))}}catch(d){n=!0,e.push(`${le} ${de(d)}`)}}return{ready:kn.isSupportedPlatform()&&!t&&!n,platform:process.platform,version:ae,diagnostics:e,setupRequired:t}}s(Ft,"inspectSandboxRuntime");async function Mt(){let e=await Y({refresh:!0});try{let t=Ot();if(t!==void 0)return wr(e,t)}catch(t){let o=t instanceof Error?t:new Error(String(t));return wr(e,o)}if(e.ready||pn(e)||!e.setupRequired)return e;let n=!1;try{let t=await _n(),o=jn({srtWin:t.srtWin});n=Dr(o).length===0&&o.sid!==void 0}catch{n=!1}if(n){Dn(an(),"read");let t=await Y({refresh:!0});if(t.ready)return t}if(pt().cancelled)throw new Error("Sandbox setup was cancelled.");return await _n(),Dn(an(),"read"),Y({refresh:!0})}s(Mt,"setupWindowsSandboxRuntimeWithLock");async function jt(){return process.platform!=="win32"?Y({refresh:!0}):se(ke(),Mt,xe)}s(jt,"setupSandboxRuntime");function ye(e){if(e.ready)return[`KodaX sandbox is active (${e.platform}, ASRT ${e.version}).`];if(e.platform==="win32"){let n=e.diagnostics.find(r=>r.startsWith(le));return n!==void 0?[n.slice(le.length).trim()]:['Run "kodax sandbox setup". Windows will show a UAC prompt for the one-time sandbox account and network policy setup.',"The terminal itself does not need to be started as Administrator; approve the UAC prompt when it appears."]}return e.platform==="darwin"?['KodaX uses macOS Seatbelt through sandbox-exec. Install the missing dependency, then rerun "kodax sandbox doctor".',"Homebrew: brew install ripgrep"]:e.platform==="linux"?['KodaX uses bubblewrap on Linux. Install bubblewrap, socat, and ripgrep, then rerun "kodax sandbox doctor".',"Debian/Ubuntu: sudo apt install bubblewrap socat ripgrep","Fedora/RHEL: sudo dnf install bubblewrap socat ripgrep","Arch Linux: sudo pacman -S bubblewrap socat ripgrep"]:[`KodaX sandbox is not supported on ${e.platform}.`]}s(ye,"sandboxSetupGuidance");async function Xo(e={}){let n=await Y({refresh:!0});if(n.ready)return{status:"ready",attempted:!1,doctor:n,guidance:ye(n)};if(pn(n))return{status:"unavailable",attempted:!1,doctor:n,guidance:ye(n)};if(!n.setupRequired)return{status:"unavailable",attempted:!1,doctor:n,guidance:ye(n)};if(n.platform!=="win32"||e.allowElevation===!1)return{status:"unavailable",attempted:!1,doctor:n,guidance:ye(n)};try{let r=await jt();return{status:r.ready?"ready":"unavailable",attempted:!0,doctor:r,guidance:ye(r)}}catch(r){let t=await Y({refresh:!0}),o=de(r);return{status:/cancelled/i.test(o)?"cancelled":"unavailable",attempted:!0,doctor:t,guidance:ye(t),error:o}}}s(Xo,"prepareSandboxRuntimeForSetup");function re(e,n){let r=e.replaceAll("\\","/").replace(/^\.\//,"");if(!r||i.posix.isAbsolute(r)||r.split("/").includes(".."))throw new Error(`${n} must be a safe relative path.`);return r}s(re,"canonicalRelative");function _(e,n){let r=i.relative(e,n);return r===""||!r.startsWith("..")&&!i.isAbsolute(r)}s(_,"isInside");function Br(e){let n=e.split(i.sep).map(r=>r.toLowerCase());return n.some(r=>gt.has(r))||n.some(r=>yt.has(r)||r.startsWith(".env."))}s(Br,"isSensitiveRelative");async function qt(e,n){await K(n,{recursive:!0,mode:448});let r=[...(e.scripts??[]).map(t=>({folder:"scripts",file:t})),...(e.references??[]).map(t=>({folder:"references",file:t})),...(e.assets??[]).map(t=>({folder:"assets",file:t})),...(e.templates??[]).map(t=>({folder:"templates",file:t})),...(e.resources??[]).map(t=>({folder:"resources",file:t}))];await ve(i.join(n,"SKILL.md"),await be(e.skillFilePath),{mode:384});for(let{folder:t,file:o}of r){let a=re(o.relativePath,`Skill ${e.name} support file`),c=i.join(n,t,...a.split("/"));await K(i.dirname(c),{recursive:!0,mode:448}),await ve(c,await be(o.path),{mode:384})}}s(qt,"copySkillSnapshot");async function Kt(e,n){let r=new Map;for(let[t,o]of Object.entries(e.admissions)){let a=await e.registry.loadFull(t),c=new Map((a.scripts??[]).map(l=>[`scripts/${re(l.relativePath,`Skill ${t} script`)}`,l])),d=i.join(n,t.replace(/[^A-Za-z0-9._-]/g,"_"));await qt(a,d);for(let l of o){let u=re(l,`toolPolicy.skillScripts.${t}`);if(!c.has(u))throw new Error(`Skill "${t}" has no script "${u}".`);r.set(`${t}\0${u}`,{skill:t,relativePath:u,snapshotPath:i.join(d,...u.split("/"))})}}return r}s(Kt,"snapshotAdmissions");function Xt(e){return e.mode==="deny"?[]:e.origins.map(n=>{let r=new URL(n);return{host:r.hostname.toLowerCase(),port:r.port?Number(r.port):r.protocol==="https:"?443:80}})}s(Xt,"networkEndpoints");function Re(){let e=["PATH","Path","PATHEXT","SystemRoot","COMSPEC","TEMP","TMP","HOME","USERPROFILE","LOCALAPPDATA","LANG"],n={NO_COLOR:"1"};for(let r of e)process.env[r]!==void 0&&(n[r]=process.env[r]);for(let[r,t]of Object.entries(process.env))r.startsWith("LC_")&&t!==void 0&&(n[r]=t);return Yn(n)}s(Re,"sanitizedEnvironment");function Yn(e){if(process.platform!=="win32")return{...e};let n=new Map;for(let[r,t]of Object.entries(e))t!==void 0&&n.set(r.toLowerCase(),[r,t]);return Object.fromEntries(n.values())}s(Yn,"normalizedSandboxEnvironment");function Fr(e,n){return Yn({...e,...n})}s(Fr,"mergeSandboxEnvironment");function Gt(e){let n=i.extname(e).toLowerCase();if([".js",".mjs",".cjs"].includes(n))return{command:process.env.KODAX_A2A_NODE??(process.env.KODAX_BUNDLED==="true"?"node":process.execPath),args:[e]};if(n===".py")return{command:process.env.KODAX_A2A_PYTHON??(process.platform==="win32"?"python.exe":"python3"),args:[e]};if(n===".ps1")return{command:process.env.KODAX_A2A_POWERSHELL??(process.platform==="win32"?i.join(process.env.SystemRoot??"C:\\Windows","System32","WindowsPowerShell","v1.0","powershell.exe"):"pwsh"),args:["-NoProfile","-NonInteractive","-File",e]};if(n===".sh"&&process.platform!=="win32")return{command:"/bin/sh",args:[e]};if([".cmd",".bat"].includes(n)&&process.platform==="win32")return{command:process.env.COMSPEC??i.join(process.env.SystemRoot??"C:\\Windows","System32","cmd.exe"),args:["/d","/s","/c",e]};throw new Error(`Unsupported admitted Skill script type: ${n||"<none>"}.`)}s(Gt,"interpreterFor");var gr=250,Jt=1500;async function Ut(e,n,r=Kn,t=qn,o){let a=[],c=[],d=e.pid===void 0?void 0:_e(e.pid),l=0,u,g=s(()=>{},"reportStopRequested"),f,p,w=new Promise(S=>{g=S}),h=s(S=>{if(u!==void 0)return;u=S,g();let A=!1,E,L;f=new Promise((R,M)=>{E=R,L=M}),f.catch(()=>{});let P=s(async R=>{let M=await _r(e.pid,d,Or("Sandbox broker"),o);return R===void 0?M:new AggregateError([M,R],"Sandbox broker termination failed and its process tree may still be alive.")},"unconfirmedTermination"),z=s(R=>{A||(A=!0,p!==void 0&&clearTimeout(p),R===void 0?E():L(R))},"finish");p=setTimeout(()=>{try{e.kill("SIGKILL"),P().then(z)}catch(R){P(R).then(z)}},Jt),vn(e,{expectedProcessStartIdentity:d,forceMs:gr,taskkillMs:gr}).then(async R=>z(R.status==="unknown"?await P():void 0),async R=>z(await P(R)))},"requestStop"),k=s((S,A)=>{l+=A.byteLength,l>t?h(new Error(`Sandboxed command output exceeded ${t} bytes.`)):S.push(A)},"append");e.stdout?.on("data",S=>{k(a,S)}),e.stderr?.on("data",S=>{k(c,S)});let b=setTimeout(()=>{h(new Error(`Sandboxed command exceeded its ${r} ms timeout.`))},r),v=s(()=>{let S=n?.reason;h(S instanceof Error?S:new Error("Sandboxed command was cancelled."))},"abort");n?.addEventListener("abort",v,{once:!0}),n?.aborted&&v();try{let S=new Promise((E,L)=>{e.once("error",L),e.once("close",P=>E(P??1))}),A=await Promise.race([S,w.then(()=>1)]);if(u!==void 0)throw await f,u;return{exitCode:A,stdout:Buffer.concat(a).toString("utf8"),stderr:Buffer.concat(c).toString("utf8")}}finally{clearTimeout(b),p!==void 0&&clearTimeout(p),n?.removeEventListener("abort",v)}}s(Ut,"collectProcess");async function Mr(e,n,r=Kn,t=qn){let o=process.platform==="win32"?await hn():te.tmpdir(),a=i.join(o,`kodax-asrt-${process.pid}-${H()}.json`),c=process.platform==="win32"?nr(e.config):{...e.config,filesystem:{...e.config.filesystem,denyRead:[...e.config.filesystem.denyRead,a]}},d={...e,bootstrapCommand:e.bootstrapCommand??gn(),config:c};await ve(a,JSON.stringify(d),{mode:384});let l,u,g;try{if(process.platform==="win32"){await rr(),g=await xn();let h=await tr(!0);if(h.length===1)throw h[0];if(h.length>1)throw new AggregateError(h,"Cached workspace sandbox reset was not confirmed before standalone execution.")}let f=process.env.KODAX_BUNDLED==="true"?["__asrt-broker",a]:["--input-type=module","-e",Cr,Rr,a],p=Te({args:f,env:Re(),isElectron:process.versions.electron!==void 0});u=await Lr();let w=hr(process.execPath,p.args,{cwd:process.platform==="win32"?Ae().directory:void 0,env:p.env,shell:!1,stdio:["ignore","pipe","pipe"],windowsHide:!0,detached:process.platform!=="win32"});return bn(w),await Ut(w,n,r,t,u)}catch(f){throw l=f,f}finally{let f=[];try{await G(a,{force:!0})}catch(p){f.push(p)}try{await In(u)}catch(p){f.push(p)}if(g!==void 0)try{await g()}catch(p){f.push(p)}if(f.length>0)throw l!==void 0&&f.unshift(l),f.length===1?f[0]:new AggregateError(f,"Sandbox broker cleanup was not confirmed.")}}s(Mr,"runBrokerResult");async function Vt(e,n){let r=await Mr(e,n);if(r.exitCode!==0){let t=r.stderr.trim()||r.stdout.trim();throw new Error(`Sandboxed Skill script failed (${r.exitCode}): ${t}`)}return r.stdout}s(Vt,"runBroker");async function Ht(e,n){let r=await Fe(e),t=i.resolve(e,re(n,"Skill script input")),o=await Fe(t);if(!_(r,o)||Br(i.relative(r,o)))throw new Error("Skill script input is outside the permitted workspace surface.");if(!(await nn(o)).isFile())throw new Error("Skill script inputs must be files.");return o}s(Ht,"workspaceSource");async function zt(e,n){let r=await Fe(e),t=i.resolve(e,re(n,"Skill script output target"));if(!_(i.resolve(e),t)||Br(i.relative(i.resolve(e),t)))throw new Error("Skill script output target is outside the permitted workspace surface.");if(await K(i.dirname(t),{recursive:!0}),!_(r,await Fe(i.dirname(t))))throw new Error("Skill script output target escapes through a symlink.");try{throw await nn(t),new Error("Skill script output target already exists.")}catch(o){if(o.code!=="ENOENT")throw o}return t}s(zt,"workspaceTarget");async function Yt(e,n,r,t){if(r.inputs.length>0&&t==="none")throw new Error("Skill script inputs require workspace read access.");for(let o of r.inputs){let a=await Ht(e,o.path),c=re(o.as??i.basename(a),"Skill script staged input"),d=i.resolve(n,"inputs",...c.split("/"));if(!_(i.join(n,"inputs"),d))throw new Error("Skill script staged input escapes staging.");await K(i.dirname(d),{recursive:!0,mode:448}),await kr(a,d)}}s(Yt,"stageInputFiles");async function Zt(e,n,r,t,o){if(r.outputs.length>0&&t!=="write")throw new Error("Skill script outputs require workspace write access.");let a=[];for(let c of r.outputs){let d=re(c.path,"Skill script staged output"),l=i.resolve(n,"outputs",...d.split("/")),u=await Fe(l);if(!_(i.join(n,"outputs"),u)||(await ot(l)).isSymbolicLink()||!(await nn(l)).isFile())throw new Error(`Skill script did not produce output "${d}".`);let g=await zt(e,c.target);if(o!==void 0&&jr(e,!0)+(await nn(l)).size>o)throw new Error("Skill script outputs would exceed the remote workspace byte quota.");await kr(l,g,tt.COPYFILE_EXCL),a.push(i.relative(e,g))}return a}s(Zt,"promoteOutputs");function jr(e,n=!1){let r=0;for(let t of Mn(e,{withFileTypes:!0})){if(n&&t.name===".kodax-a2a-script"||t.isSymbolicLink())continue;let o=i.join(e,t.name);t.isDirectory()?r+=jr(o):t.isFile()&&(r+=fn(o).size)}return r}s(jr,"directorySize");function Zn(e){if(process.platform!=="win32")return e;let n=Ae();return{...e,windows:{...e.windows,srtWin:{path:n.path}},filesystem:{...e.filesystem,allowRead:[...new Set([...e.filesystem.allowRead,n.directory])],denyWrite:process.platform==="win32"?e.filesystem.denyWrite:[...new Set([...e.filesystem.denyWrite??[],n.directory])]}}}s(Zn,"withPreparedWindowsRunner");function Qt(e,n,r,t){let o=te.homedir(),a=process.platform==="win32"?an():[o],c=s(d=>i.isAbsolute(d)?process.platform==="win32"?[d,i.dirname(d)]:[d]:[],"executableReadScopes");return Zn({network:{allowedDomains:[],deniedDomains:[],strictAllowlist:r.length===0,allowUnixSockets:[],allowAllUnixSockets:!1,allowLocalBinding:!1},filesystem:{denyRead:a,allowRead:[e,n,...new Set([...c(process.execPath),...c(t)])],allowWrite:[e],denyWrite:a}})}s(Qt,"sandboxConfig");function eo(){let e=[te.tmpdir(),process.env.TEMP,process.env.TMP,process.env.TMPDIR,...process.platform==="win32"?[]:["/tmp","/var/tmp"]];return[...new Set(e.filter(n=>typeof n=="string"&&i.isAbsolute(n)).map(n=>i.resolve(n)))]}s(eo,"canonicalTempDirectories");function qr(e){return[i.join(e,".git","config"),i.join(e,".git","hooks")].filter(r=>{try{return fn(r),!0}catch{return!1}})}s(qr,"existingWorkspaceDenyWrites");function Qn(e,n,r){let t=St.map(a=>i.resolve(e,a)).filter(a=>i.relative(a,n)!==""),o=process.platform==="win32"?[i.resolve(n),mn()]:[i.resolve(r),...ht.map(a=>i.resolve(n,a))];return[...new Set([...o,...t])]}s(Qn,"workspaceShellSensitiveReadDenies");function er(e){let n=[...new Set(e.map(t=>i.resolve(t)))].filter(t=>fn(t,{throwIfNoEntry:!1})!==void 0).sort((t,o)=>t.length-o.length),r=[];for(let t of n)r.some(o=>_(o,t))||r.push(t);return r}s(er,"existingMinimalWindowsAclGuardRoots");function Kr(e){return i.resolve(e).toLowerCase()}s(Kr,"windowsAclGuardKey");function Ln(e,n){let r=Kr(e),t=n==="read"?Wn:new Set([...Wn,...Pr]);for(let o of t)if(r===o||r.startsWith(o.endsWith(i.sep)?o:`${o}${i.sep}`))return!0;return!1}s(Ln,"windowsAclGuardCovers");function an(){let e=i.resolve(te.homedir()),n=i.resolve(X());return er(Qn(e,n,i.join(n,"sandbox-runtime")))}s(an,"windowsPersistentAclGuardRoots");function Xr(e,n,r,t,o){let a=er(e);if(a.length===0)return[];let c=JSON.stringify({sid:n,tokenSids:[n,r,"S-1-1-0","S-1-5-11","S-1-5-32-545"].filter(g=>g!==void 0),install:t,paths:a.map(g=>({path:g,directory:fn(g).isDirectory(),mode:o}))}),d=Gr(),l=Xe(d,["-NoProfile","-NonInteractive","-EncodedCommand",Buffer.from(bt,"utf16le").toString("base64")],{input:c,encoding:"utf8",timeout:t&&o==="read"?15*6e4:t?15e3:5e3,windowsHide:!0});if(l.error||l.status!==0){let g=(l.error?.message||l.stderr||l.stdout||"no diagnostics").trim().slice(-4096);throw new Error(`Windows sandbox ACL guard failed: ${g}`)}let u;try{let g=JSON.parse(l.stdout.trim());u=Array.isArray(g.missing)?g.missing.filter(f=>typeof f=="string"):[]}catch(g){throw new Error(`Windows sandbox ACL guard returned invalid output: ${de(g)}`)}if(u.length===0){let g=o==="read"?Wn:Pr;for(let f of a)g.add(Kr(f))}return u}s(Xr,"runWindowsAclGuard");function Gr(){let e=process.env.ProgramFiles??"C:\\Program Files",n=i.join(e,"PowerShell","7","pwsh.exe");return br(n)?n:i.join(process.env.SystemRoot??"C:\\Windows","System32","WindowsPowerShell","v1.0","powershell.exe")}s(Gr,"windowsAclPowerShellExecutable");function Dn(e,n){if(process.platform!=="win32"||e.length===0)return;let r=e.filter(c=>!Ln(c,n));if(r.length===0)return;let t=Ae(),o=jn({srtWin:t.srtWin});if(!o.sid)throw new Error("Windows sandbox account SID is unavailable for ACL guards.");if(Xr(r,o.sid,o.groupSid,!0,n).length>0)throw new Error("Windows sandbox ACL guards were not installed completely.")}s(Dn,"installWindowsAclGuards");function nr(e){return process.platform!=="win32"?e:{...e,filesystem:{...e.filesystem,denyRead:e.filesystem.denyRead.filter(n=>!Ln(n,"read")),denyWrite:e.filesystem.denyWrite?.filter(n=>!Ln(n,"write"))}}}s(nr,"withoutWindowsAsrtDenyPropagation");function no(e,n){let r;try{r=ce.native(n)}catch{return[]}let t=[];for(let o of e){let a;try{a=ce.native(o)}catch{continue}if(!_(a,r))t.push(o);else if(a!==r){let c=i.relative(a,r).split(i.sep),d=a;try{for(let l of c){for(let u of Mn(d,{withFileTypes:!0}))u.name!==l&&t.push(i.join(d,u.name));d=i.join(d,l)}}catch{}}}return process.platform!=="win32"&&t.push(n),[...new Set(t)]}s(no,"workspaceShellWriteRoots");function ro(e,n){let r=process.platform==="win32"?n:i.resolve(e);return i.join(te.tmpdir(),"kodax-sandbox",un("sha256").update(r).digest("hex").slice(0,16))}s(ro,"workspaceShellTempRoot");function to(e,n){return i.join(ro(e,n),`${process.pid}-${H()}`)}s(to,"createWorkspaceShellTempDirectory");async function Pn(e){await G(e,{recursive:!0,force:!0}),await it(i.dirname(e)).catch(n=>{if(n.code!=="ENOENT"&&n.code!=="ENOTEMPTY")throw n})}s(Pn,"removeWorkspaceShellTempDirectory");function oo(e){return process.platform==="win32"?e===void 0?[]:[i.dirname(e)]:eo()}s(oo,"workspaceShellTempWriteRoots");function so(e,n,r){try{let t=ce.native(n),o=i.resolve(n),a=i.resolve(e);if(!_(o,a)||a===o)return;for(;a!==o;)try{let c=ce.native(a);if(c===t||!_(t,c))return;let d=i.relative(t,c).split(i.sep)[0]?.toLowerCase();return d==="sandbox-runtime"||r&&Gn.some(l=>l===d)?void 0:c}catch(c){if(!r||c.code!=="ENOENT")return;try{vr(a);return}catch(l){if(l.code!=="ENOENT")return}let d=i.dirname(a);if(d===a)return;a=d}return}catch{return}}s(so,"windowsAgentHomeAccessRoot");function Jr(e,n){if(!n)return{read:[],write:[]};let r=s((t,o)=>[...new Set(t.flatMap(a=>{let c=so(a,e,o);return c?[c]:[]}))],"roots");return{read:r(n.read,!1),write:r(n.write,!0),...n.ephemeral===!0?{ephemeral:!0}:{}}}s(Jr,"windowsAgentHomeAccessRoots");function Ke(e){return e??(process.platform==="win32"?process.env.COMSPEC??i.join(process.env.SystemRoot??"C:\\Windows","System32","cmd.exe"):"/bin/sh")}s(Ke,"workspaceShellExecutable");function io(e,n){return Object.entries(e).find(([r,t])=>r.toUpperCase()===n&&t!==void 0)?.[1]}s(io,"shellEnvironmentValue");function ao(e){let n=process.env.LOCALAPPDATA,r=[n===void 0?void 0:i.join(n,"Programs"),n,process.env.APPDATA,i.join(e,"AppData","Local","Programs"),i.join(e,"AppData","Local"),i.join(e,"AppData","Roaming"),e];return[...new Set(r.flatMap(t=>t===void 0?[]:[i.resolve(t)]))].filter(t=>_(e,t)).sort((t,o)=>o.length-t.length)}s(ao,"workspaceShellUserDataBoundaries");function co(e,n,r){if(process.platform!=="win32"||e.toLowerCase()===n.toLowerCase())return[];try{if(!vr(e).isSymbolicLink())return[]}catch{return[]}let t=r.find(d=>d.toLowerCase()!==n.toLowerCase()&&_(d,n));if(t===void 0)return[];let[o]=i.relative(t,n).split(i.sep);if(!o)return[];let a=i.join(t,o),c=[];for(let d=i.dirname(n);d.toLowerCase()!==a.toLowerCase()&&_(a,d);d=i.dirname(d))c.push(d);return c}s(co,"workspaceShellLinkedTargetAncestors");function dn(e,n){let r=i.resolve(te.homedir()),t=i.resolve(X()),o=Qn(r,t,i.join(t,"sandbox-runtime")),a=ao(r),c=new Map,d=s(f=>{let p=i.resolve(f);if(!(p===i.parse(p).root||p.toLowerCase()===r.toLowerCase()||_(t,p)||_(p,t)||o.some(w=>_(w,p))))return p},"safe"),l=s((f,p)=>{let w=d(f);if(w===void 0)return;let h;try{h=ce(w)}catch{return}if(d(h)===void 0)return;let k=p?[w,h].filter(b=>_(r,b)):[w,h];for(let b of k)c.set(process.platform==="win32"?b.toLowerCase():b,b);if(p&&k.includes(h))for(let b of co(w,h,a)){let v=d(b);v!==void 0&&_(r,v)&&c.set(v.toLowerCase(),v)}},"remember");for(let f of(io(e,"PATH")??"").split(i.delimiter)){let p=f.trim().replace(/^"(.*)"$/,"$1");p&&i.isAbsolute(p)&&l(p,!0)}let u=Ke(n);i.isAbsolute(u)&&l(i.dirname(u),!0);let g=gn();if(i.isAbsolute(g)){let f=d(g);f!==void 0&&c.set(process.platform==="win32"?f.toLowerCase():f,f),l(i.dirname(g),!1)}return[...c.values()].sort((f,p)=>f.toLowerCase().localeCompare(p.toLowerCase()))}s(dn,"workspaceShellRuntimeReadScopes");function Ur(e,n,r,t,o=dn(process.env,Ke())){let a=i.resolve(X()),c=i.join(a,"sandbox-runtime"),d=i.resolve(te.homedir()),l=Qn(d,a,c),u=process.platform==="win32"?er(l):l.filter(p=>p!==a),g=process.platform==="win32"?Jr(a,r):{read:[],write:[]},f=no([e,...oo(n),...g.write,...t?.write??[]],a);return Zn({network:{allowedDomains:[],deniedDomains:[],strictAllowlist:!1,allowUnixSockets:[],allowAllUnixSockets:!1,allowLocalBinding:!1},filesystem:{denyRead:u,allowRead:[...new Set([...o,...g.read,...t?.read??[]])],allowWrite:f,denyWrite:[c,...Gn.map(p=>i.join(a,p)),...qr(e)]}})}s(Ur,"workspaceShellSandboxConfig");function Vr(e,n,r,t,o){let a=Ur(e,n,r,t,o);return process.platform!=="win32"?a:Hr(a)}s(Vr,"workspaceShellSessionSandboxConfig");function Hr(e){let n=e.filesystem.allowWrite;return{...e,filesystem:{...e.filesystem,denyRead:e.filesystem.denyRead,denyWrite:e.filesystem.denyWrite.filter(r=>n.some(t=>_(t,r)))}}}s(Hr,"boundedWindowsWorkspaceDenies");function lo(e,n,r,t,o){let a=Ur(e,n,r,t,o);return process.platform==="win32"?Hr(a):a}s(lo,"workspaceShellCommandSandboxConfig");function Ye(e,n){return[...new Set((e??[]).map(r=>i.resolve(n,r)))]}s(Ye,"normalizedSandboxPaths");function uo(e){return e.mode!=="allowlist"?[]:e.origins.map(n=>{let r=new URL(n);if(r.protocol!=="http:"&&r.protocol!=="https:"||r.username||r.password||r.pathname!=="/"||r.search||r.hash)throw new Error(`Sandbox network origin must be an HTTP(S) origin: ${n}`);return{host:r.hostname.toLowerCase(),port:r.port?Number(r.port):r.protocol==="https:"?443:80}})}s(uo,"sdkSandboxEndpoints");async function Go(e){if(!e.command.trim())throw new Error("Sandbox command must not be empty.");if(e.timeoutMs!==void 0&&(!Number.isFinite(e.timeoutMs)||e.timeoutMs<=0))throw new Error("Sandbox timeoutMs must be a positive finite number.");if(e.maxOutputBytes!==void 0&&(!Number.isSafeInteger(e.maxOutputBytes)||e.maxOutputBytes<=0))throw new Error("Sandbox maxOutputBytes must be a positive safe integer.");let n=i.resolve(e.cwd),r=e.network??{mode:"deny"},t=uo(r),o=await Y();if(!o.ready){if(!pn(o))return{status:"unavailable",sandboxed:!1,doctor:o};if(await sn(),o.setupRequired)return{status:"unavailable",sandboxed:!1,doctor:o}}let a=Fr(e.inheritEnvironment===!0?process.env:Re(),e.env??{}),c={config:Zn({network:{allowedDomains:[],deniedDomains:[],strictAllowlist:r.mode==="deny",allowUnixSockets:[],allowAllUnixSockets:!1,allowLocalBinding:!1},filesystem:{allowRead:Ye(e.filesystem.allowRead,n),allowWrite:Ye(e.filesystem.allowWrite,n),denyRead:Ye(e.filesystem.denyRead,n),denyWrite:Ye(e.filesystem.denyWrite,n)}}),command:e.command,args:e.args??[],cwd:n,env:a,endpoints:t,allowAllNetwork:r.mode==="allow"},d=await Mr(c,e.signal,e.timeoutMs??Kn,e.maxOutputBytes??qn);return{status:"completed",sandboxed:!0,exitCode:d.exitCode,stdout:d.stdout,stderr:d.stderr}}s(Go,"runKodaXSandboxed");var fo=5*6e4,po=3e4,wo=3e4,Ze=1500,zr=13e4,mo=zr,go=wo,yo=mo,So=8,I=new Map,De=new Set,Se=new Set,he=new Set,Ie,Bn,cn=!1;function ue(e){let n=e instanceof Error?e:new Error(String(e));if(process.platform!=="win32"){Bn??=n;return}Ie??=n}s(ue,"recordWindowsSandboxAclFailure");function yn(){if(process.platform!=="win32"&&Bn!==void 0)throw new Error("Sandbox process cleanup was not confirmed; stop the retained process tree before more sandboxed commands.",{cause:Bn});if(process.platform==="win32"&&Ie!==void 0)throw Ie instanceof Z?Ie:new Error("Windows sandbox ACL cleanup was not confirmed; stop the retained owner or restart Windows before more sandboxed commands.",{cause:Ie})}s(yn,"assertWindowsSandboxAclProcessSafe");function Sn(e){yn(),process.platform==="win32"&&zn(e)}s(Sn,"assertWindowsSandboxAclSafe");function Yr(e){Se.add(e),e.then(()=>Se.delete(e),()=>Se.delete(e))}s(Yr,"trackWorkspaceSessionReset");function ho(e){he.add(e),e.then(()=>he.delete(e),n=>{he.delete(e),$({source:"sandbox:workspace-session",level:"error",message:"Workspace sandbox durable ACL poison transition failed.",detail:n})})}s(ho,"trackWindowsSandboxAclTransition");async function bo(){for(;he.size>0;)await Promise.allSettled([...he])}s(bo,"waitForWindowsSandboxAclTransitions");async function rr(){for(;Se.size>0;)await Promise.allSettled([...Se]);await bo(),yn()}s(rr,"waitForWorkspaceSessionResets");async function tr(e=!1){let n=[...I.values()];I.clear();let r=[];for(let t of n)try{await(await t).close(e)}catch(o){r.push(o),$({source:"sandbox:workspace-session",level:"warn",message:"Workspace sandbox shutdown could not confirm ACL reset.",detail:o})}return r}s(tr,"closeCachedWorkspaceSessions");var Zr=s(()=>{cn=!1,tr()},"closeWorkspaceSessionsBeforeExit");function vo(){cn||(cn=!0,process.once("beforeExit",Zr))}s(vo,"registerWorkspaceSessionBeforeExit");async function Jo(){for(process.removeListener("beforeExit",Zr),cn=!1;De.size>0;)await Promise.allSettled([...De]);let e=await tr();try{await rr()}catch(n){e.push(n)}if(e.length===1)throw e[0];if(e.length>1)throw new AggregateError(e,"Workspace sandbox shutdown was not confirmed.")}s(Jo,"shutdownAsrtWorkspaceSessions");function Qr(){let e=new Error("ASRT workspace session preparation timed out.");return e.name="TimeoutError",e}s(Qr,"workspacePreparationTimeoutError");function ln(e,n){if(e?.aborted)throw new DOMException("Operation aborted","AbortError");if(n!==void 0&&Date.now()>=n)throw Qr()}s(ln,"throwIfWorkspacePreparationStopped");function Fn(e,n,r){return ln(n,r),n===void 0&&r===void 0?e:new Promise((t,o)=>{let a=!1,c,d=s(u=>{a||(a=!0,c&&clearTimeout(c),n?.removeEventListener("abort",l),u())},"finish"),l=s(()=>{d(()=>o(new DOMException("Operation aborted","AbortError")))},"onAbort");n?.addEventListener("abort",l,{once:!0}),r!==void 0&&(c=setTimeout(()=>{d(()=>o(Qr()))},Math.max(0,r-Date.now())),c.unref()),e.then(u=>d(()=>t(u)),u=>d(()=>o(u)))})}s(Fn,"waitForWorkspacePreparation");async function hn(){let e=i.join(X(),"sandbox-runtime");return await K(e,{recursive:!0,mode:448}),e}s(hn,"sandboxControlDirectory");function xo(e){if(process.env.KODAX_BUNDLED==="true")return["__asrt-workspace-session",e];if(import.meta.url.endsWith(".ts"))return["--import",Ar(Xn.resolve("tsx")).href,ur(new URL("./sandbox-workspace-session-entry.ts",import.meta.url)),e];let n=i.dirname(ur(import.meta.url)),r=i.basename(n)==="chunks"?i.dirname(n):n;return[i.join(r,"sandbox-workspace-session.js"),e]}s(xo,"workspaceSessionEntryArgs");function Qe(e,n){let r=n?"ref":"unref";e[r]();for(let t of e.stdio){if(!t)continue;t[r]?.()}}s(Qe,"setWorkspaceSessionReferenced");async function et(e,n,r){if(e)return n();let t=await xn(r);try{return await n()}finally{await t()}}s(et,"withExclusiveFileSystemEffectFence");async function ko(e,n,r,t,o,a,c){let d=process.platform==="win32"?to(e,o):void 0;d!==void 0&&await K(d,{recursive:!0,mode:448});let l=await hn();process.platform==="win32"&&Dn(qr(e),"write");let u=i.join(l,`workspace-${process.pid}-${H()}.json`),g=nr(Vr(e,d,n,r,t));await ve(u,JSON.stringify({config:g}),{mode:384});let f=Te({args:xo(u),env:Re(),isElectron:process.versions.electron!==void 0}),p;try{p=await Lr(o)}catch(y){let m=await Promise.allSettled([G(u,{force:!0}),...d===void 0?[]:[Pn(d)]]),x=[y,...m.flatMap(C=>C.status==="rejected"?[C.reason]:[])];throw x.length===1?y:new AggregateError(x,"Workspace sandbox owner admission and pre-launch cleanup both failed.")}let w;try{w=hr(process.execPath,f.args,{cwd:process.platform==="win32"?Ae().directory:void 0,env:f.env,shell:!1,stdio:["pipe","pipe","pipe","pipe"],windowsHide:!0})}catch(y){let m=[y];try{await In(p)}catch(C){await ze(p,C),m.push(C)}let x=await Promise.allSettled([G(u,{force:!0}),...d===void 0?[]:[Pn(d)]]);throw m.push(...x.flatMap(C=>C.status==="rejected"?[C.reason]:[])),m.length===1?y:new AggregateError(m,"Workspace sandbox owner launch cleanup failed.")}bn(w);let h=w.pid===void 0?void 0:_e(w.pid),k=w.stdio[3];if(!k)throw new Error("ASRT workspace session control pipe was not created.");let b=ct.createInterface({input:k}),v=new Map,S="",A=!1,E=!1,L=!1,P=!1,z=0,R=0,M,j,oe,fe=new Promise(y=>{w.once("exit",(m,x)=>y({code:m,signal:x}))}),pe=fe.then(async()=>{if(d!==void 0)try{await Pn(d)}catch(y){$({source:"sandbox:workspace-session",level:"warn",message:"Workspace sandbox temp cleanup failed.",detail:y})}}),Je=s(async(y=!1)=>{let m=await fe;await pe;let x=[];if(!y&&(m.code!==0||m.signal!==null)){let C=m.signal===null?`code ${m.code??"unknown"}`:`signal ${m.signal}`;x.push(new Error(`ASRT workspace session ACL reset was not confirmed (${C}): ${S.trim()||"no diagnostics"}`))}try{await In(p)}catch(C){x.push(C)}if(x.length===1)throw x[0];if(x.length>1)throw new AggregateError(x,"Workspace sandbox cleanup was not confirmed.")},"confirmCleanReset"),B,J,F=new Promise((y,m)=>{B=y,J=m}),Pe=s(()=>{P||(P=!0,c())},"evict"),Ue=s(async()=>{if(!E||!L||R!==0||w.exitCode!==null||w.signalCode!==null||!w.stdin.writable)return!1;try{w.stdin.end()}catch{return!1}let y;try{let m=await Promise.race([fe,new Promise(x=>{y=setTimeout(x,process.platform==="win32"?zr:Ze)})]);return m!==void 0&&m.code===0&&m.signal===null}finally{y!==void 0&&clearTimeout(y)}},"waitForOrderlyClose"),N,Ce=!1,or=!1,Q=s(()=>N||(or=!0,N=(async()=>{try{if(await Ue())return;if((await vn(w,{gracefulStdinEnd:!1,gracefulMs:Ze,forceMs:Ze,taskkillMs:Ze})).status==="unknown")throw await _r(w.pid,h,Or("ASRT workspace session"),p);Ce=!0}finally{b.close(),k.destroy(),w.stdin.destroy()}})().finally(Pe),N),"terminate"),ee=s(y=>{if(!A){A=!0,J(y);for(let m of v.values())m.reject(y);v.clear()}},"fail");w.stderr.on("data",y=>{S=(S+y.toString("utf8")).slice(-16384)}),w.stdout.on("data",y=>{S=(S+y.toString("utf8")).slice(-16384)}),b.on("line",y=>{let m;try{m=JSON.parse(y)}catch{ee(new Error("ASRT workspace session returned malformed control data.")),Q();return}if(m.type==="ready"){m.ok?(L=!0,B()):J(new Error(m.error??"ASRT workspace session failed."));return}if(m.type!=="result"||!m.id){ee(new Error("ASRT workspace session returned an invalid control response.")),Q();return}let x=v.get(m.id);x&&(v.delete(m.id),x.resolve(m))}),w.once("error",y=>{ee(y),Q()}),b.once("close",()=>{E||A||(ee(new Error("ASRT workspace session control pipe closed unexpectedly.")),Q())}),w.once("exit",(y,m)=>{j&&clearTimeout(j);let x=new Error(`ASRT workspace session exited ${m??y??1}: ${S.trim()||"no diagnostics"}`);!or&&(y!==0||m!==null||!E)&&ho(ze(p,x)),ee(x),Pe()});let rt=setTimeout(()=>{ee(new Error("ASRT workspace session initialization timed out.")),Q()},po);try{await F.finally(()=>clearTimeout(rt))}catch(y){E=!0;let m=[y],x=!1;try{await Q(),x=!0}catch(C){m.push(C)}if(x)try{await Je(Ce)}catch(C){await ze(p,C),m.push(C)}throw await G(u,{force:!0}),m.length===1?y:new AggregateError(m,`Workspace sandbox startup cleanup failed: ${de(m.at(-1))}`)}let Ve=s(async(y,m)=>{if(A||E&&y==="wrap")throw new Error("ASRT workspace session is unavailable.");let x=`workspace_${++z}`,C=new Promise((D,me)=>{v.set(x,{resolve:D,reject:me})}),ne=setTimeout(()=>{ee(new Error(`ASRT workspace session ${y} request timed out.`)),we.close(a).catch(D=>{$({source:"sandbox:workspace-session",level:"warn",message:"Timed-out workspace sandbox request could not retire its session.",detail:D})})},y==="cleanup"?yo:go);ne.unref();try{await new Promise((D,me)=>{w.stdin.write(`${JSON.stringify({id:x,type:y,request:m})}
518
- `,$e=>$e?me($e):D())})}catch(D){throw v.delete(x),clearTimeout(ne),ee(D instanceof Error?D:new Error(String(D))),Q(),D}return C.finally(()=>clearTimeout(ne))},"request"),sr=s(()=>{if(j&&clearTimeout(j),!(R>0||E||A)){if(process.platform==="win32"){Qe(w,!1);return}j=setTimeout(()=>{we.close().catch(y=>{$({source:"sandbox:workspace-session",level:"warn",message:"Idle workspace sandbox session could not confirm ACL reset.",detail:y})})},fo),j.unref(),Qe(w,!1)}},"scheduleIdleClose"),we={policyKey:o,...d===void 0?{}:{tempDirectory:d},async acquire(y,m,x){if(Sn(o),ln(m,x),A||E)throw new Error("ASRT workspace session is unavailable.");j&&clearTimeout(j),Qe(w,!0),R+=1;let C=!1,ne=s(()=>{if(C)return!1;C=!0,R-=1;let U=R===0;return R===0&&(M?.(),M=void 0),sr(),U},"finalize"),D=s(async()=>{ne()&&process.platform==="win32"&&await we.close(a)},"finalizeAndCloseIfIdle"),me=s((U,W)=>{$({source:"sandbox:workspace-session",level:"warn",message:U,detail:W}),ne()&&we.close(a).catch(V=>{$({source:"sandbox:workspace-session",level:"warn",message:"Failed workspace sandbox cleanup could not retire its session.",detail:V})})},"retireAfterCleanupFailure"),$e=Ve("wrap",y),We;try{We=await Fn($e,m,x)}catch(U){throw $e.then(async W=>{if(!W.ok||!W.invocation)return;let T=await Ve("cleanup");if(!T.ok)throw new Error(T.error??"ASRT command cleanup failed.")}).then(D,W=>me("Late workspace sandbox preparation cleanup failed.",W)),U}try{if(!We.ok||!We.invocation){ne();let W=new Error(We.error??"ASRT workspace wrapping failed.");try{await we.close(a)}catch(T){let V=T instanceof Error?T.message:String(T);throw new Error(`${W.message} Workspace session reset failed: ${V}`,{cause:W})}throw W}try{ln(m,x)}catch(W){try{let T=await Ve("cleanup");if(!T.ok)throw new Error(T.error??"ASRT command cleanup failed.")}catch(T){me("Cancelled workspace sandbox preparation cleanup failed.",T)}throw await D(),W}let U=!1;return{invocation:We.invocation,async release(){if(U)return;U=!0;let W;try{let V=await Ve("cleanup");if(!V.ok)throw new Error(V.error??"ASRT command cleanup failed.")}catch(V){W=V}let T;try{await D()}catch(V){T=V}if(W!==void 0&&T!==void 0)throw new AggregateError([W,T],"Workspace sandbox command cleanup and policy-group reset both failed.");if(W!==void 0)throw W;if(T!==void 0)throw T}}}catch(U){throw ne(),U}},async close(y=!1){return oe||(E=!0,Pe(),oe=(async()=>{j&&clearTimeout(j),Qe(w,!0),R>0&&await new Promise(m=>{M=m}),await et(a||y,async()=>{await Q(),await Je()},o)})().catch(async m=>{throw await ze(p,m),m}),Yr(oe),oe)}};return sr(),we}s(ko,"startWorkspaceSessionClientWithFence");function yr(e,n,r,t,o,a,c){return et(a,async()=>{if(nt(e,n,r,t)!==o)throw new Error("Sandbox policy paths changed before ACL initialization.");return Sn(o),await sn(o),ko(e,n,r,t,o,a,c)},o)}s(yr,"startWorkspaceSessionClient");function Cn(e){return[...new Set(e.map(n=>{let r=i.resolve(n);return process.platform==="win32"?r.toLowerCase():r}))].sort()}s(Cn,"normalizedWorkspacePolicyPaths");function Le(e){let n=s(t=>{let o=i.resolve(t);return process.platform==="win32"?o.toLowerCase():o},"normalize"),r=null;try{r=n(ce.native(e))}catch{}return{lexical:n(e),canonical:r}}s(Le,"workspacePolicyPathIdentity");function en(e){let n=new Map;for(let r of e){let t=Le(r);n.set(`${t.lexical}\0${t.canonical??""}`,t)}return[...n.values()].sort((r,t)=>r.lexical.localeCompare(t.lexical)||(r.canonical??"").localeCompare(t.canonical??""))}s(en,"workspacePolicyPathIdentities");function nt(e,n,r,t){let o=Vr(e,void 0,n,r,t);return un("sha256").update(JSON.stringify({workspace:Le(e),agentHome:Le(X()),tempBase:Le(te.tmpdir()),filesystem:{allowRead:en(o.filesystem.allowRead),allowWrite:en(o.filesystem.allowWrite),denyRead:en(o.filesystem.denyRead),denyWrite:en(o.filesystem.denyWrite)},network:o.network,windowsRunner:process.platform==="win32"?{version:ae,architecture:process.arch,path:Le(Ae().path)}:null,ephemeral:n?.ephemeral===!0})).digest("hex")}s(nt,"workspaceShellPolicyKey");function Ao(e){return process.platform!=="win32"?!0:(e?.write??[]).every(n=>{try{return ce.native(n),!0}catch{return!1}})}s(Ao,"workspaceShellFilesystemAccessIsRepresentable");async function Sr(e,n,r,t=dn(process.env,Ke()),o=t,a=!1){if(process.platform==="win32"){if(Se.size>0||he.size>0)return}else await rr();yn();let c=await Y();if(!c.ready&&!pn(c))return;if(process.platform!=="win32"){let v=X();await Promise.all([hn(),...Gn.map(S=>K(i.join(v,S),{recursive:!0,mode:448}))])}let d=nt(e,process.platform==="win32"?n:void 0,r,t);if(!c.ready&&(await sn(d),c.setupRequired))return;await sn(d),Sn(d),vo();let l=process.platform==="win32"?n:void 0,u=process.platform==="win32"?e.toLowerCase():e,g=Cn,f=g(t),p=JSON.stringify(f)===JSON.stringify(g(o)),w=(r?.read.length??0)>0||(r?.write.length??0)>0,h=l===void 0&&!w&&p?"workspace":un("sha256").update(JSON.stringify({read:[...l?.read??[]].map(v=>v.toLowerCase()).sort(),write:[...l?.write??[]].map(v=>v.toLowerCase()).sort(),additionalRead:Cn(r?.read??[]),additionalWrite:Cn(r?.write??[]),runtimeReadScopes:f})).digest("hex"),k=process.platform==="win32"?d:`${u}\0${h}`;if(process.platform==="win32"&&a){let v=l?.ephemeral===!0?void 0:k;for(let[S,A]of[...I])if(S!==v){I.delete(S);try{await(await A).close(!0)}catch(E){throw $({source:"sandbox:workspace-session",level:"warn",message:"Retiring the previous Windows workspace sandbox scope failed.",detail:E}),E}}}if(l?.ephemeral===!0)return yr(e,l,r,t,d,a,()=>{});let b=I.get(k);if(b&&(I.delete(k),I.set(k,b)),!b){if(process.platform!=="win32"&&h!=="workspace"){let v=[...I.keys()].filter(S=>!S.endsWith("\0workspace"));if(v.length>=So){let S=v[0],A=I.get(S);if(I.delete(S),A)try{await(await A).close()}catch(E){throw $({source:"sandbox:workspace-session",level:"warn",message:"Retiring an old scoped workspace sandbox failed.",detail:E}),E}}}b=yr(e,l,r,t,d,a,()=>{I.get(k)===b&&I.delete(k)}),I.set(k,b),b.catch(()=>{I.get(k)===b&&I.delete(k)})}return b}s(Sr,"getWorkspaceSession");function Uo(e){let n=i.resolve(e.workspaceRoot),r=dn(process.platform==="win32"?{}:process.env,Ke()),t=process.platform==="win32"?void 0:Sr(n,void 0,void 0,r,r);return t!==void 0&&(De.add(t),t.then(()=>De.delete(t),()=>De.delete(t)),t.catch(o=>{$({source:"sandbox:workspace-session",level:"warn",message:"Workspace sandbox warm-up failed; admitted commands will use normal permission fallback.",detail:o})})),{processTreeContainment:process.platform==="linux"?"root-exit-drains":void 0,async prepare(o){if(!o.toolCallId){o.reportObservation?.({version:1,state:"not_selected"});return}let a={id:o.toolCallId,name:"bash",input:{...o.toolInput}},c=await e.shouldSandbox(a);if(!c){o.reportObservation?.({version:1,state:"not_selected"});return}let d=typeof c=="object"?c.agentHomeAccess:void 0,l=process.platform==="win32"&&d!==void 0?Jr(i.resolve(X()),d):d,u=typeof c=="object"?c.filesystemAccess:void 0;if(!Ao(u)){o.reportObservation?.({version:1,state:"fallback",reason:"not_ready",execution:"normal_permission_policy"});return}let g=process.platform==="win32"&&l?.ephemeral===!0,f=Ke(o.executable),p=o.args??(process.platform==="win32"?["/d","/s","/c",o.command]:["-c",o.command]),w=Yn(o.env),h=dn(w,f),k,b;try{t!==void 0&&(await Fn(t.then(()=>{},()=>{}),o.signal,o.deadlineAt),ln(o.signal,o.deadlineAt));let v=Sr(n,l,u,h,r),S;try{S=await Fn(v,o.signal,o.deadlineAt)}catch(B){if(process.platform==="win32"&&(o.signal?.aborted||o.deadlineAt!==void 0&&Date.now()>=o.deadlineAt)){let J=v.then(async F=>{F&&await F.close()},async()=>{});Yr(J),J.catch(F=>{$({source:"sandbox:workspace-session",level:"warn",message:"Late cancelled workspace session rollback failed.",detail:F})})}throw B}if(!S){o.reportObservation?.({version:1,state:"fallback",reason:"not_ready",execution:"normal_permission_policy"});return}let A=S.policyKey;b=S;let E=await hn(),L=i.join(E,`kodax-asrt-shell-${process.pid}-${H()}.json`),P=i.join(E,`kodax-asrt-observation-${process.pid}-${H()}.json`),z=w;if(process.platform==="win32"){let B=S.tempDirectory;if(B===void 0)throw new Error("Windows workspace sandbox temp directory is unavailable.");z=Fr(w,{TEMP:B,TMP:B,TMPDIR:B,GIT_CONFIG_GLOBAL:"NUL",GIT_CONFIG_NOSYSTEM:"1"})}let R={config:nr(lo(n,S.tempDirectory,l,u,h)),command:f,args:p,windowsVerbatimArguments:o.windowsVerbatimArguments===!0,cwd:o.cwd,env:z,endpoints:[],allowAllNetwork:!0,bootstrapCommand:gn(),fallbackToNormalExecution:!0,observationBackend:mt().backend,observationFile:P,targetStartedMarker:`\0KODAX_ASRT_TARGET_STARTED:${H()}\0
519
- `},M=await S.acquire(R,o.signal,o.deadlineAt);k=M;let j={...R,wrappedInvocation:M.invocation},oe=process.env.KODAX_BUNDLED==="true"?["__asrt-broker",L]:["--input-type=module","-e",Cr,Rr,L],fe=Te({args:oe,env:Re(),isElectron:process.versions.electron!==void 0});await ve(L,JSON.stringify(j),{mode:384});let pe,Je=s(async()=>{g||(pe===void 0&&(pe=b?.close(!1)??Promise.resolve(),pe.catch(B=>{$({source:"sandbox:workspace-session",level:"warn",message:"Workspace sandbox session retirement failed.",detail:B})})),process.platform==="win32"&&await pe)},"retireWorkspaceSession");return{executable:process.execPath,args:fe.args,env:fe.env,fileSystemEffectPolicyKey:A,authorizeStart:s(()=>Sn(A),"authorizeStart"),async cleanup(B){let J,F=[];try{J=await be(P,"utf8").then(Bt).catch(N=>{if(N.code!=="ENOENT")throw N})}catch(N){F.push(N)}let Pe=await Promise.allSettled([G(L,{force:!0}),G(P,{force:!0})]);for(let N of Pe)N.status==="rejected"&&F.push(N.reason);try{await M.release()}catch(N){F.push(N)}let Ue=B?.execution==="started_or_unknown"&&J===void 0;if(Ue&&F.push(new Error("Required OS sandbox execution could not be attested; the workspace session must be retired and the command was not retried")),F.length>0){let N=Ue?"Required OS sandbox execution could not be attested and request cleanup failed; the workspace session must be retired and the command was not retried.":"Required OS sandbox request cleanup failed; the workspace session must be retired.",Ce=new AggregateError(F,N);throw $({source:"sandbox:workspace-session",level:"warn",message:"Workspace sandbox command cleanup failed.",detail:Ce}),Ce}return J},retire:Je}}catch(v){let S=[v],A=o.signal?.aborted||o.deadlineAt!==void 0&&Date.now()>=o.deadlineAt,E=!1;if(k)try{await k.release()}catch(P){E=!0,S.push(P),$({source:"sandbox:workspace-session",level:"warn",message:"Workspace sandbox lease release failed.",detail:P})}if(A&&process.platform==="win32"&&b&&k===void 0)throw b.close().catch(P=>{$({source:"sandbox:workspace-session",level:"warn",message:"Cancelled workspace preparation cleanup could not retire its session.",detail:P})}),v;if(process.platform==="win32"&&b)try{await b.close()}catch(P){S.push(P),$({source:"sandbox:workspace-session",level:"warn",message:"Failed workspace lease cleanup could not retire its session.",detail:P})}else E&&b&&b.close().catch(P=>{$({source:"sandbox:workspace-session",level:"warn",message:"Failed workspace lease cleanup could not retire its session.",detail:P})});if(A)throw v;let L=S.length===1?v:new AggregateError(S,`Workspace sandbox preparation failed and cleanup was incomplete: ${S.map(de).join(" | ")}`);$({source:"sandbox:workspace-session",level:"warn",message:"Workspace sandbox preparation failed; using normal permission fallback.",detail:L}),o.reportObservation?.({version:1,state:"fallback",reason:"prepare_failed",execution:"normal_permission_policy"});return}}}}s(Uo,"createAsrtShellSandbox");async function Vo(e){let n=await Y();if(!n.ready)throw new Error(`ASRT ${ae} is not ready: ${n.diagnostics.join(" ")||"run kodax sandbox setup"}`);let r=i.join(e.snapshotRoot,H()),t=i.join(r,"skills");await K(t,{recursive:!0,mode:448});try{let o=await Kt(e,t),a=Xt(e.network),c=Promise.resolve();return{async run(d,l){let u=c,g;if(c=new Promise(f=>{g=f}),await u,l.signal?.aborted)throw g?.(),l.signal.reason??new Error("Sandboxed Skill script was cancelled.");try{if(d.args.length>64||d.args.some(h=>h.length>8192))throw new Error("Skill script arguments exceed the bounded remote contract.");if(d.inputs.length>32||d.outputs.length>32)throw new Error("Skill script file mappings exceed the bounded remote contract.");let f=re(d.script,"Skill script"),p=o.get(`${d.skill}\0${f}`);if(!p)throw new Error("Skill script is not admitted by this Runtime binding.");if([".cmd",".bat"].includes(i.extname(p.snapshotPath).toLowerCase())&&d.args.some(h=>/[&|<>^]/.test(h)))throw new Error("Batch Skill script arguments cannot contain command operators.");let w=i.join(l.workspaceRoot,".kodax-a2a-script",H());try{await K(i.join(w,"inputs"),{recursive:!0,mode:448}),await K(i.join(w,"outputs"),{recursive:!0,mode:448}),await Yt(l.workspaceRoot,w,d,e.workspaceAccess);let h=Gt(p.snapshotPath),k=await Vt({config:Qt(w,r,a,h.command),command:h.command,args:[...h.args,...d.args],cwd:w,env:Re(),endpoints:a},l.signal),b=await Zt(l.workspaceRoot,w,d,e.workspaceAccess,e.workspaceByteLimit);return JSON.stringify({stdout:k.trim(),outputs:b})}finally{await G(w,{recursive:!0,force:!0})}}finally{g?.()}},async dispose(){await c,await G(r,{recursive:!0,force:!0})}}}catch(o){throw await G(r,{recursive:!0,force:!0}),o}}s(Vo,"createAsrtSkillScriptRunner");export{ae as a,mt as b,Y as c,jt as d,ye as e,Xo as f,Go as g,Jo as h,Uo as i,Vo as j};