@runweave/server-linux-x64 0.1.23 → 0.1.25

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 (119) hide show
  1. package/manifest.json +231 -226
  2. package/native.tar.gz +0 -0
  3. package/package.json +1 -1
  4. package/payload/app-server/build-info.json +4 -4
  5. package/payload/app-server/index.cjs +46 -25
  6. package/payload/app-server/index.cjs.map +1 -1
  7. package/payload/backend/activity-sqlite-worker.cjs +33 -21
  8. package/payload/backend/build-info.json +4 -4
  9. package/payload/backend/dev-resources/control.cjs +158 -59
  10. package/payload/backend/index.cjs +3512 -2764
  11. package/payload/backend/scheduled-tasks-sqlite-worker.cjs +12 -0
  12. package/payload/frontend/dist/assets/{_baseUniq-V9OGBCCp.js → _baseUniq-pNlq_DCQ.js} +1 -1
  13. package/payload/frontend/dist/assets/{access-Bw9yaM2u.js → access-BJmFgyT9.js} +1 -1
  14. package/payload/frontend/dist/assets/{advanced-BspSUvyf.js → advanced-B1_D3p4w.js} +1 -1
  15. package/payload/frontend/dist/assets/{appearance-BHYR2QUj.js → appearance-CSQVEVTh.js} +1 -1
  16. package/payload/frontend/dist/assets/{arc-C4bVuMy6.js → arc-DE1dO7p3.js} +1 -1
  17. package/payload/frontend/dist/assets/{architectureDiagram-Q4EWVU46-B_EOBe6n.js → architectureDiagram-Q4EWVU46-QKJomhdt.js} +1 -1
  18. package/payload/frontend/dist/assets/{blockDiagram-DXYQGD6D-aAkbmNO9.js → blockDiagram-DXYQGD6D-CV58X8VO.js} +1 -1
  19. package/payload/frontend/dist/assets/{c4Diagram-AHTNJAMY-DKeUolGU.js → c4Diagram-AHTNJAMY-DPu-RnDw.js} +1 -1
  20. package/payload/frontend/dist/assets/channel-DWLRGtq3.js +1 -0
  21. package/payload/frontend/dist/assets/{chunk-4BX2VUAB-cB5sH0Mw.js → chunk-4BX2VUAB-COwHdW0x.js} +1 -1
  22. package/payload/frontend/dist/assets/{chunk-4TB4RGXK-CxVRfINM.js → chunk-4TB4RGXK-StHcdOx9.js} +1 -1
  23. package/payload/frontend/dist/assets/{chunk-55IACEB6-BFRLEEBY.js → chunk-55IACEB6-D7PMYZ35.js} +1 -1
  24. package/payload/frontend/dist/assets/{chunk-EDXVE4YY-DA5BuoT3.js → chunk-EDXVE4YY-D84apqdf.js} +1 -1
  25. package/payload/frontend/dist/assets/{chunk-FMBD7UC4-DIvA96Y1.js → chunk-FMBD7UC4-CJmwcVvj.js} +1 -1
  26. package/payload/frontend/dist/assets/{chunk-OYMX7WX6-8Zl-vtJp.js → chunk-OYMX7WX6-DQhh6xQp.js} +1 -1
  27. package/payload/frontend/dist/assets/{chunk-QZHKN3VN-DnW4X6Wx.js → chunk-QZHKN3VN-C6X5cUuc.js} +1 -1
  28. package/payload/frontend/dist/assets/{chunk-YZCP3GAM-CH4YkXv-.js → chunk-YZCP3GAM-CryVThNG.js} +1 -1
  29. package/payload/frontend/dist/assets/classDiagram-6PBFFD2Q-B2WrDPFz.js +1 -0
  30. package/payload/frontend/dist/assets/classDiagram-v2-HSJHXN6E-B2WrDPFz.js +1 -0
  31. package/payload/frontend/dist/assets/clone-BJQLpgjC.js +1 -0
  32. package/payload/frontend/dist/assets/{connection-CINMNAPm.js → connection-425RE3U4.js} +1 -1
  33. package/payload/frontend/dist/assets/{connections-DsHGQRR2.js → connections-Dx05bPzL.js} +1 -1
  34. package/payload/frontend/dist/assets/{cose-bilkent-S5V4N54A-Dm1QOjDr.js → cose-bilkent-S5V4N54A-DqICEhiJ.js} +1 -1
  35. package/payload/frontend/dist/assets/{dagre-KV5264BT-BEbPPDoW.js → dagre-KV5264BT-SyIBcIz3.js} +1 -1
  36. package/payload/frontend/dist/assets/{desktop-1jdcRQ7b.js → desktop-DBzea7Bt.js} +1 -1
  37. package/payload/frontend/dist/assets/{diagram-5BDNPKRD-C-DmBIhV.js → diagram-5BDNPKRD-xS_FVHQR.js} +1 -1
  38. package/payload/frontend/dist/assets/{diagram-G4DWMVQ6-Ddv6Kw2_.js → diagram-G4DWMVQ6-CLuycLkG.js} +1 -1
  39. package/payload/frontend/dist/assets/{diagram-MMDJMWI5-Xae79J8R.js → diagram-MMDJMWI5-BTNd9OzE.js} +1 -1
  40. package/payload/frontend/dist/assets/{diagram-TYMM5635-CavrGRG2.js → diagram-TYMM5635-DyxLhyoy.js} +1 -1
  41. package/payload/frontend/dist/assets/{erDiagram-SMLLAGMA-BRRD8F-e.js → erDiagram-SMLLAGMA-C2a9uz8_.js} +1 -1
  42. package/payload/frontend/dist/assets/{flowDiagram-DWJPFMVM-C-ewssi0.js → flowDiagram-DWJPFMVM-DndbO3ER.js} +1 -1
  43. package/payload/frontend/dist/assets/{ganttDiagram-T4ZO3ILL-BcZnXV6L.js → ganttDiagram-T4ZO3ILL-BSV1btDD.js} +1 -1
  44. package/payload/frontend/dist/assets/{gitGraphDiagram-UUTBAWPF-ZcfWVMGG.js → gitGraphDiagram-UUTBAWPF-DnYc3Xm2.js} +1 -1
  45. package/payload/frontend/dist/assets/{graph-DRJG1bKF.js → graph-iOswNacw.js} +1 -1
  46. package/payload/frontend/dist/assets/{image-GQYH_1h4.js → image-BaXi5ATy.js} +1 -1
  47. package/payload/frontend/dist/assets/index-BRwhFF-d.js +1258 -0
  48. package/payload/frontend/dist/assets/{infoDiagram-42DDH7IO-BWsoBaYn.js → infoDiagram-42DDH7IO-BoWdmtBx.js} +1 -1
  49. package/payload/frontend/dist/assets/{ishikawaDiagram-UXIWVN3A-C3ayGr4G.js → ishikawaDiagram-UXIWVN3A-B8KC_SgA.js} +1 -1
  50. package/payload/frontend/dist/assets/{journeyDiagram-VCZTEJTY-DB1DxZ1v.js → journeyDiagram-VCZTEJTY-CN_MxT78.js} +1 -1
  51. package/payload/frontend/dist/assets/{kanban-definition-6JOO6SKY-CtZWN0CK.js → kanban-definition-6JOO6SKY-j17QaQ4r.js} +1 -1
  52. package/payload/frontend/dist/assets/{layout-KX5XwX_6.js → layout-CLR2o63S.js} +1 -1
  53. package/payload/frontend/dist/assets/{linear-DMZrhooi.js → linear-CL0d3XrR.js} +1 -1
  54. package/payload/frontend/dist/assets/main-BO-hQK7n.css +33 -0
  55. package/payload/frontend/dist/assets/{main-LH8ULGFT.js → main-DWkxAGaw.js} +142 -142
  56. package/payload/frontend/dist/assets/{min-CWc1cxEQ.js → min-2aYi0G6U.js} +1 -1
  57. package/payload/frontend/dist/assets/{mindmap-definition-QFDTVHPH-tj_8hDDH.js → mindmap-definition-QFDTVHPH-CxVQlE5J.js} +1 -1
  58. package/payload/frontend/dist/assets/{monitoring-BaUd-PhH.js → monitoring-GwSez8fI.js} +1 -1
  59. package/payload/frontend/dist/assets/{notifications-CTv1WVBh.js → notifications-Bx24ROH2.js} +1 -1
  60. package/payload/frontend/dist/assets/{pieDiagram-DEJITSTG-Cwc4Gfp4.js → pieDiagram-DEJITSTG-CpRHmWOC.js} +1 -1
  61. package/payload/frontend/dist/assets/{quadrantDiagram-34T5L4WZ-Clq2RqDJ.js → quadrantDiagram-34T5L4WZ-CZG_QGX1.js} +1 -1
  62. package/payload/frontend/dist/assets/{record-content-DQ0F1zbW.js → record-content-Di3pmXSa.js} +1 -1
  63. package/payload/frontend/dist/assets/{requirementDiagram-MS252O5E-gaTHj3JP.js → requirementDiagram-MS252O5E-C1PCFhMe.js} +1 -1
  64. package/payload/frontend/dist/assets/{sankeyDiagram-XADWPNL6-CyBolt3D.js → sankeyDiagram-XADWPNL6-RxkobNrx.js} +1 -1
  65. package/payload/frontend/dist/assets/{sequenceDiagram-FGHM5R23-CO4UgRHw.js → sequenceDiagram-FGHM5R23-Bem61Ef-.js} +1 -1
  66. package/payload/frontend/dist/assets/{stateDiagram-FHFEXIEX-ygBwN1Az.js → stateDiagram-FHFEXIEX-DaHV-La3.js} +1 -1
  67. package/payload/frontend/dist/assets/stateDiagram-v2-QKLJ7IA2-VVMK0Gty.js +1 -0
  68. package/payload/frontend/dist/assets/{status-BOcUUbE9.js → status-DytAqsKi.js} +1 -1
  69. package/payload/frontend/dist/assets/suiji-ClmlHdOg.js +1 -0
  70. package/payload/frontend/dist/assets/{svg-BfkbqvDT.js → svg-BNFCoAlV.js} +1 -1
  71. package/payload/frontend/dist/assets/{tabs-88TVAJwX.js → tabs-CNVBHmw-.js} +1 -1
  72. package/payload/frontend/dist/assets/{timeline-definition-GMOUNBTQ-8Iy3eg4l.js → timeline-definition-GMOUNBTQ-xVCcgT05.js} +1 -1
  73. package/payload/frontend/dist/assets/{vennDiagram-DHZGUBPP-DLcttV2t.js → vennDiagram-DHZGUBPP-D4YvcLlt.js} +1 -1
  74. package/payload/frontend/dist/assets/{wardley-RL74JXVD-DUvr0OYP.js → wardley-RL74JXVD-WtdSbuj2.js} +1 -1
  75. package/payload/frontend/dist/assets/{wardleyDiagram-NUSXRM2D-Dm-sdRY6.js → wardleyDiagram-NUSXRM2D-Br4RBb8X.js} +1 -1
  76. package/payload/frontend/dist/assets/{xychartDiagram-5P7HB3ND-DR_MOYh1.js → xychartDiagram-5P7HB3ND-Dx8RJOfi.js} +1 -1
  77. package/payload/frontend/dist/build-info.json +4 -4
  78. package/payload/frontend/dist/companion.html +1 -1
  79. package/payload/frontend/dist/index.html +3 -3
  80. package/payload/plugins/toolkit/.codex-plugin/plugin.json +1 -1
  81. package/payload/plugins/toolkit/README.md +3 -3
  82. package/payload/plugins/toolkit/skills/acceptance/SKILL.md +4 -2
  83. package/payload/plugins/toolkit/skills/acceptance/references/delivery.md +11 -1
  84. package/payload/plugins/toolkit/skills/acceptance/references/gallery-contract.md +62 -39
  85. package/payload/plugins/toolkit/skills/acceptance/references/gallery-copy.md +8 -0
  86. package/payload/plugins/toolkit/skills/acceptance/scripts/delivery_check.py +151 -0
  87. package/payload/plugins/toolkit/skills/acceptance/scripts/gallery.py +67 -11
  88. package/payload/plugins/toolkit/skills/acceptance/scripts/preview.py +21 -2
  89. package/payload/plugins/toolkit/skills/acceptance/templates/reader.css +1 -14
  90. package/payload/plugins/toolkit/skills/acceptance/templates/reader.html +23 -4
  91. package/payload/plugins/toolkit/skills/acceptance/templates/reader.js +76 -3
  92. package/payload/plugins/toolkit/skills/acceptance/templates/report.css +80 -0
  93. package/payload/plugins/toolkit/skills/architecture-flow-prototyping/SKILL.md +2 -2
  94. package/payload/plugins/toolkit/skills/playwright-cli/SKILL.md +19 -6
  95. package/payload/plugins/toolkit/skills/review-only/SKILL.md +29 -4
  96. package/payload/plugins/toolkit/skills/review-only/references/delivery-verification.md +38 -0
  97. package/payload/plugins/toolkit/skills/using-rw/SKILL.md +37 -1
  98. package/payload/plugins/toolkit/skills/visual-plan-review/SKILL.md +45 -0
  99. package/payload/plugins/toolkit/skills/visual-plan-review/agents/openai.yaml +3 -0
  100. package/payload/plugins/toolkit/skills/visual-plan-review/references/review-checklist.md +13 -0
  101. package/payload/plugins/toolkit/skills/visual-plan-review/references/visual-plan-template.html +8 -0
  102. package/payload/plugins/toolkit-release.json +1 -1
  103. package/payload/pty-host/index.cjs +217 -41
  104. package/payload/server/index.cjs +40 -20
  105. package/payload/frontend/dist/assets/channel-CBjt7igT.js +0 -1
  106. package/payload/frontend/dist/assets/classDiagram-6PBFFD2Q-HmoWChAG.js +0 -1
  107. package/payload/frontend/dist/assets/classDiagram-v2-HSJHXN6E-HmoWChAG.js +0 -1
  108. package/payload/frontend/dist/assets/clone-CiD5LYOe.js +0 -1
  109. package/payload/frontend/dist/assets/index-UR7g5PLZ.js +0 -448
  110. package/payload/frontend/dist/assets/main-D4_uoZQa.css +0 -33
  111. package/payload/frontend/dist/assets/stateDiagram-v2-QKLJ7IA2-DTtHtWkN.js +0 -1
  112. package/payload/frontend/dist/assets/suiji-DPDKlWVi.js +0 -1
  113. package/payload/plugins/toolkit/skills/prototype-first-development/SKILL.md +0 -134
  114. package/payload/plugins/toolkit/skills/prototype-first-development/references/html-prototype-template/README.md +0 -88
  115. package/payload/plugins/toolkit/skills/prototype-first-development/references/html-prototype-template/app.js +0 -145
  116. package/payload/plugins/toolkit/skills/prototype-first-development/references/html-prototype-template/index.html +0 -229
  117. package/payload/plugins/toolkit/skills/prototype-first-development/references/html-prototype-template/mock-state.json +0 -60
  118. package/payload/plugins/toolkit/skills/prototype-first-development/references/implementation-plan-handoff-template.md +0 -61
  119. package/payload/plugins/toolkit/skills/prototype-first-development/references/prototype-workflow-checklist.md +0 -64
@@ -14607,9 +14607,9 @@ var import_node_fs = require("node:fs");
14607
14607
 
14608
14608
  // packages/config-node/src/windows-permissions.ts
14609
14609
  var import_node_child_process = require("node:child_process");
14610
- function assertWindowsPrivatePath(file) {
14611
- if (process.platform !== "win32") return;
14612
- const script = `
14610
+ var import_node_util = require("node:util");
14611
+ var executeFile = (0, import_node_util.promisify)(import_node_child_process.execFile);
14612
+ var script = `
14613
14613
  $ErrorActionPreference = 'Stop'
14614
14614
  try {
14615
14615
  # Use .NET directly: a parent pwsh may export a PSModulePath incompatible with Windows PowerShell.
@@ -14627,6 +14627,27 @@ foreach ($rule in $acl.GetAccessRules($true, $true, [Security.Principal.Security
14627
14627
  [Console]::Write('check-failed:' + $_.Exception.GetType().FullName + ':' + $_.Exception.HResult)
14628
14628
  }
14629
14629
  `;
14630
+ function checkFailure(file, startedAt, cause) {
14631
+ const error = cause;
14632
+ const timedOut = error.code === "ETIMEDOUT" || error.killed === true && error.signal === "SIGTERM" && error.code == null;
14633
+ return new ConfigurationError(
14634
+ timedOut ? "CONFIG_WINDOWS_ACL_CHECK_TIMEOUT" : "CONFIG_WINDOWS_ACL_CHECK_FAILED",
14635
+ [
14636
+ file,
14637
+ `exit=${error.status ?? "none"}`,
14638
+ `signal=${error.signal ?? "none"}`,
14639
+ `code=${error.code ?? "none"}`,
14640
+ `elapsedMs=${Math.round(performance.now() - startedAt)}`
14641
+ ]
14642
+ );
14643
+ }
14644
+ function assertResult(file, result) {
14645
+ if (result === "owner" || result === "access") throw new ConfigurationError("CONFIG_WINDOWS_ACL_NOT_PRIVATE", [file, result]);
14646
+ if (/^check-failed:[A-Za-z0-9_.]+:-?\d+$/.test(result)) throw new ConfigurationError("CONFIG_WINDOWS_ACL_CHECK_FAILED", [file, result]);
14647
+ if (result !== "private") throw new ConfigurationError("CONFIG_WINDOWS_ACL_CHECK_FAILED", [file, "invalid-result"]);
14648
+ }
14649
+ function assertWindowsPrivatePath(file) {
14650
+ if (process.platform !== "win32") return;
14630
14651
  const startedAt = performance.now();
14631
14652
  let result;
14632
14653
  try {
@@ -14639,34 +14660,31 @@ foreach ($rule in $acl.GetAccessRules($true, $true, [Security.Principal.Security
14639
14660
  windowsHide: true
14640
14661
  }).trim();
14641
14662
  } catch (cause) {
14642
- const error = cause;
14643
- throw new ConfigurationError(
14644
- error.code === "ETIMEDOUT" ? "CONFIG_WINDOWS_ACL_CHECK_TIMEOUT" : "CONFIG_WINDOWS_ACL_CHECK_FAILED",
14645
- [
14646
- file,
14647
- `exit=${error.status ?? "none"}`,
14648
- `signal=${error.signal ?? "none"}`,
14649
- `code=${error.code ?? "none"}`,
14650
- `elapsedMs=${Math.round(performance.now() - startedAt)}`
14651
- ]
14652
- );
14663
+ throw checkFailure(file, startedAt, cause);
14653
14664
  }
14654
- if (result === "owner" || result === "access") throw new ConfigurationError("CONFIG_WINDOWS_ACL_NOT_PRIVATE", [file, result]);
14655
- if (/^check-failed:[A-Za-z0-9_.]+:-?\d+$/.test(result)) throw new ConfigurationError("CONFIG_WINDOWS_ACL_CHECK_FAILED", [file, result]);
14656
- if (result !== "private") throw new ConfigurationError("CONFIG_WINDOWS_ACL_CHECK_FAILED", [file, "invalid-result"]);
14665
+ assertResult(file, result);
14657
14666
  }
14658
14667
 
14659
14668
  // packages/config-node/src/private-file.ts
14660
- function assertPrivateDirectory(directory) {
14669
+ function privateDirectoryStat(directory) {
14661
14670
  const stat = (0, import_node_fs.lstatSync)(directory);
14662
14671
  if (!stat.isDirectory() || stat.isSymbolicLink() || process.platform !== "win32" && stat.mode & 63 || typeof process.getuid === "function" && stat.uid !== process.getuid()) throw new ConfigurationError("CONFIG_ROOT_PERMISSIONS_INVALID");
14663
- assertWindowsPrivatePath(directory);
14672
+ return stat;
14664
14673
  }
14665
- function assertPrivateDescriptor(fd, maxBytes = 1024 * 1024, file) {
14674
+ function privateDescriptorStat(fd, maxBytes) {
14666
14675
  const stat = (0, import_node_fs.fstatSync)(fd);
14667
14676
  if (!stat.isFile() || stat.nlink !== 1) throw new ConfigurationError("CONFIG_FILE_NOT_PRIVATE_REGULAR");
14668
14677
  if (typeof process.getuid === "function" && stat.uid !== process.getuid()) throw new ConfigurationError("CONFIG_FILE_OWNER_MISMATCH");
14669
14678
  if (process.platform !== "win32" && stat.mode & 63) throw new ConfigurationError("CONFIG_FILE_PERMISSIONS_INVALID");
14679
+ if (stat.size > maxBytes) throw new ConfigurationError("CONFIG_FILE_TOO_LARGE");
14680
+ return stat;
14681
+ }
14682
+ function assertPrivateDirectory(directory) {
14683
+ privateDirectoryStat(directory);
14684
+ assertWindowsPrivatePath(directory);
14685
+ }
14686
+ function assertPrivateDescriptor(fd, maxBytes = 1024 * 1024, file) {
14687
+ const stat = privateDescriptorStat(fd, Infinity);
14670
14688
  if (process.platform === "win32") {
14671
14689
  if (!file) throw new ConfigurationError("CONFIG_PRIVATE_PATH_REQUIRED");
14672
14690
  assertWindowsPrivatePath(file);
@@ -14699,6 +14717,8 @@ function canonicalPath(value) {
14699
14717
  // packages/config-node/src/platform.ts
14700
14718
  var import_node_child_process2 = require("node:child_process");
14701
14719
  var import_node_fs3 = require("node:fs");
14720
+ var import_node_util2 = require("node:util");
14721
+ var executeFile2 = (0, import_node_util2.promisify)(import_node_child_process2.execFile);
14702
14722
  function processStartIdentity(pid) {
14703
14723
  if (!Number.isSafeInteger(pid) || pid < 1) return null;
14704
14724
  try {
@@ -19298,6 +19318,33 @@ function isInteractiveShellLaunch(launch2) {
19298
19318
 
19299
19319
  // packages/pty-host/src/input-operations.ts
19300
19320
  var import_node_crypto4 = require("node:crypto");
19321
+
19322
+ // packages/shared/src/terminal/runtime/responses.ts
19323
+ var ESCAPE = "\\u001b";
19324
+ var BELL = "\\u0007";
19325
+ var OSC_COLOR_RESPONSE_PATTERN = new RegExp(
19326
+ `${ESCAPE}\\]1[01];rgb:[0-9a-f/]+(?:${BELL}|${ESCAPE}\\\\)`,
19327
+ "i"
19328
+ );
19329
+ var DECRPM_RESPONSE_PATTERN = new RegExp(`${ESCAPE}\\[\\?[0-9;]+\\$y`);
19330
+ var DCS_RESPONSE_PATTERN = new RegExp(`${ESCAPE}P[01]\\$r.*${ESCAPE}\\\\`);
19331
+ var CURSOR_POSITION_RESPONSE_PATTERN = new RegExp(`${ESCAPE}\\[[0-9;]+R`);
19332
+ var DEVICE_ATTRIBUTES_RESPONSE_PATTERN = new RegExp(
19333
+ `${ESCAPE}\\[(?:\\?|>)[0-9;]+c`
19334
+ );
19335
+ var FOCUS_REPORTING_RESPONSE_PATTERN = new RegExp(`${ESCAPE}\\[(?:I|O)$`);
19336
+ var QUERY_RESPONSE_PATTERN = new RegExp(
19337
+ `^(?:${OSC_COLOR_RESPONSE_PATTERN.source}|${DECRPM_RESPONSE_PATTERN.source}|${DCS_RESPONSE_PATTERN.source}|${CURSOR_POSITION_RESPONSE_PATTERN.source}|${DEVICE_ATTRIBUTES_RESPONSE_PATTERN.source})+$`,
19338
+ "i"
19339
+ );
19340
+ function isTerminalQueryResponse(data) {
19341
+ return data.startsWith("\x1B") && QUERY_RESPONSE_PATTERN.test(data);
19342
+ }
19343
+
19344
+ // packages/shared/src/terminal/runtime/input.ts
19345
+ var TERMINAL_CLIPBOARD_FILE_MAX_BYTES = 100 * 1024 * 1024;
19346
+
19347
+ // packages/pty-host/src/input-operations.ts
19301
19348
  var InputOperations = class {
19302
19349
  constructor(write, isRunning, generation = () => 0) {
19303
19350
  this.write = write;
@@ -19363,8 +19410,9 @@ var InputOperations = class {
19363
19410
  for (const step of input.steps) {
19364
19411
  if (acceptedGeneration !== this.generation()) throw new Error("HOST_PROCESS_CHANGED");
19365
19412
  if (!this.isRunning()) throw new Error("HOST_SESSION_GONE");
19366
- if (step.type === "text") this.write(step.data);
19367
- else await new Promise((resolve) => setTimeout(resolve, step.ms));
19413
+ if (step.type === "text") {
19414
+ if (rawSequence === Infinity || !isTerminalQueryResponse(step.data)) this.write(step.data);
19415
+ } else await new Promise((resolve) => setTimeout(resolve, step.ms));
19368
19416
  }
19369
19417
  if (acceptedGeneration !== this.generation()) throw new Error("HOST_PROCESS_CHANGED");
19370
19418
  operation.result.state = "written";
@@ -19482,6 +19530,11 @@ var TerminalOutputRecoveryBuffer = class {
19482
19530
  readInitial() {
19483
19531
  return this.read({ streamId: this.streamId, offset: 0 });
19484
19532
  }
19533
+ /** Raw retained history for recording, not a complete renderer bootstrap. */
19534
+ retainedFrames() {
19535
+ this.prune(this.now());
19536
+ return Array.from(this.frames.values(), ({ data, range }) => ({ data, range }));
19537
+ }
19485
19538
  prune(now) {
19486
19539
  for (const [offset, frame] of this.frames) {
19487
19540
  const expired = now - frame.createdAt > RESUME_WINDOW_MS;
@@ -19661,9 +19714,11 @@ function serializeOutputScreen(terminal, addon, scrollback = 0) {
19661
19714
  }
19662
19715
 
19663
19716
  // packages/pty-host/src/output-screen.ts
19717
+ var MAX_QUEUED_OPERATIONS = 8192;
19664
19718
  var TerminalOutputScreen = class _TerminalOutputScreen {
19665
- constructor(cursor, onFailure, scrollback = 0) {
19719
+ constructor(cursor, onFailure, scrollback = 0, onResponse, onBackpressure) {
19666
19720
  this.onFailure = onFailure;
19721
+ this.onBackpressure = onBackpressure;
19667
19722
  this.cursor = cursor;
19668
19723
  this.terminal = new import_headless.default.Terminal({
19669
19724
  cols: 80,
@@ -19674,6 +19729,7 @@ var TerminalOutputScreen = class _TerminalOutputScreen {
19674
19729
  this.terminal.loadAddon(this.serializer);
19675
19730
  this.terminal.loadAddon(new import_addon_unicode11.default.Unicode11Addon());
19676
19731
  this.terminal.unicode.activeVersion = "11";
19732
+ if (onResponse) this.terminal.onData(onResponse);
19677
19733
  }
19678
19734
  static pendingSnapshots = 0;
19679
19735
  terminal;
@@ -19683,6 +19739,7 @@ var TerminalOutputScreen = class _TerminalOutputScreen {
19683
19739
  writing = false;
19684
19740
  partialControlBytes = 0;
19685
19741
  disposed = false;
19742
+ backpressured = false;
19686
19743
  cursor;
19687
19744
  snapshotFlight;
19688
19745
  completeSnapshot;
@@ -19690,7 +19747,7 @@ var TerminalOutputScreen = class _TerminalOutputScreen {
19690
19747
  append(frame) {
19691
19748
  if (this.disposed) return;
19692
19749
  this.pendingBytes += frame.range.toOffset - frame.range.fromOffset;
19693
- if (this.pendingBytes > RESUME_MAX_BYTES || this.queue.length >= 8192) {
19750
+ if (this.pendingBytes > RESUME_MAX_BYTES || this.queue.length >= MAX_QUEUED_OPERATIONS) {
19694
19751
  const failure = {
19695
19752
  code: this.pendingBytes > RESUME_MAX_BYTES ? "HOST_MIRROR_PENDING_LIMIT" : "HOST_MIRROR_QUEUE_LIMIT",
19696
19753
  bufferedBytes: this.pendingBytes,
@@ -19702,6 +19759,7 @@ var TerminalOutputScreen = class _TerminalOutputScreen {
19702
19759
  return;
19703
19760
  }
19704
19761
  this.queue.push({ frame });
19762
+ this.updateBackpressure();
19705
19763
  this.drain();
19706
19764
  }
19707
19765
  resize(cols, rows) {
@@ -19711,9 +19769,10 @@ var TerminalOutputScreen = class _TerminalOutputScreen {
19711
19769
  "Terminal size must be within 2..500 columns and 1..200 rows"
19712
19770
  );
19713
19771
  }
19714
- if (this.queue.length >= 8192)
19772
+ if (this.queue.length >= MAX_QUEUED_OPERATIONS)
19715
19773
  throw new Error("Terminal resize queue is full");
19716
19774
  this.queue.push({ cols, rows });
19775
+ this.updateBackpressure();
19717
19776
  this.drain();
19718
19777
  }
19719
19778
  snapshot() {
@@ -19747,6 +19806,7 @@ var TerminalOutputScreen = class _TerminalOutputScreen {
19747
19806
  throw new Error("Terminal snapshot exceeds 512 KiB");
19748
19807
  resolve({
19749
19808
  data,
19809
+ modes: { bracketedPasteMode: this.terminal.modes.bracketedPasteMode },
19750
19810
  cursor: { ...this.cursor },
19751
19811
  cols: this.terminal.cols,
19752
19812
  rows: this.terminal.rows
@@ -19781,8 +19841,16 @@ var TerminalOutputScreen = class _TerminalOutputScreen {
19781
19841
  this.rejectSnapshot?.(new Error("Terminal mirror disposed"));
19782
19842
  this.queue = [];
19783
19843
  this.pendingBytes = 0;
19844
+ this.updateBackpressure();
19784
19845
  this.terminal.dispose();
19785
19846
  }
19847
+ updateBackpressure() {
19848
+ const divisor = this.backpressured ? 4 : 2;
19849
+ const paused = !this.disposed && (this.pendingBytes >= RESUME_MAX_BYTES / divisor || this.queue.length >= MAX_QUEUED_OPERATIONS / divisor);
19850
+ if (paused === this.backpressured) return;
19851
+ this.backpressured = paused;
19852
+ this.onBackpressure?.(paused);
19853
+ }
19786
19854
  drain() {
19787
19855
  if (this.writing || this.disposed) return;
19788
19856
  while (this.queue.length) {
@@ -19796,6 +19864,7 @@ var TerminalOutputScreen = class _TerminalOutputScreen {
19796
19864
  this.terminal.write(frame.data, () => {
19797
19865
  if (this.disposed) return;
19798
19866
  this.pendingBytes -= frame.range.toOffset - frame.range.fromOffset;
19867
+ this.updateBackpressure();
19799
19868
  this.cursor = {
19800
19869
  streamId: frame.range.streamId,
19801
19870
  offset: frame.range.toOffset
@@ -19818,6 +19887,7 @@ var TerminalOutputScreen = class _TerminalOutputScreen {
19818
19887
  });
19819
19888
  return;
19820
19889
  }
19890
+ this.updateBackpressure();
19821
19891
  this.completeSnapshot?.();
19822
19892
  }
19823
19893
  };
@@ -19892,7 +19962,9 @@ var HostSession = class {
19892
19962
  terminalSessionId: options.terminalSessionId,
19893
19963
  ...failure
19894
19964
  });
19895
- }, TERMINAL_CLIENT_SCROLLBACK_LINES);
19965
+ }, TERMINAL_CLIENT_SCROLLBACK_LINES, (data) => {
19966
+ if (!this.nativeClosing && this.info.status === "running") this.terminal?.write(data);
19967
+ }, (paused) => this.setOutputPaused(paused));
19896
19968
  this.screen.resize(options.cols, options.rows);
19897
19969
  this.inputs = new InputOperations((data) => this.terminal.write(data), () => this.info.status === "running", () => this.processGeneration);
19898
19970
  try {
@@ -19919,6 +19991,8 @@ var HostSession = class {
19919
19991
  terminal;
19920
19992
  fallbackActivated = false;
19921
19993
  closing = false;
19994
+ nativeClosing = false;
19995
+ outputPaused = false;
19922
19996
  processGeneration = 0;
19923
19997
  startupDeadline = 0;
19924
19998
  emitOutput(data) {
@@ -19942,11 +20016,13 @@ var HostSession = class {
19942
20016
  cols: this.info.cols,
19943
20017
  rows: this.info.rows,
19944
20018
  cwd: this.options.cwd,
20019
+ useConptyDll: process.platform === "win32",
19945
20020
  env: { ...launch2.env, ...this.prepareEnv(this.info.gatewayToken, this.info.terminalSessionId) }
19946
20021
  });
19947
20022
  this.startupDeadline = this.options.fallback && isInteractiveShellLaunch(this.options) ? Date.now() + 1e3 : 0;
19948
20023
  this.processGeneration++;
19949
20024
  this.terminal = terminal;
20025
+ if (this.outputPaused) terminal.pause();
19950
20026
  this.info.pid = terminal.pid;
19951
20027
  this.info.launch = { command: launch2.command, args: [...launch2.args], ...fallbackReason ? { fallbackReason } : {} };
19952
20028
  for (const listener of this.launchListeners) listener(this.info.launch);
@@ -19993,7 +20069,7 @@ var HostSession = class {
19993
20069
  this.info.cols = cols;
19994
20070
  this.info.rows = rows;
19995
20071
  for (const listener of this.resizeListeners) listener(cols, rows);
19996
- this.terminal.resize(cols, rows);
20072
+ if (this.info.status === "running") this.terminal.resize(cols, rows);
19997
20073
  }
19998
20074
  signal(signal) {
19999
20075
  if (!["SIGINT", "SIGTERM", "SIGKILL"].includes(signal)) throw new Error("HOST_SIGNAL_INVALID");
@@ -20001,13 +20077,26 @@ var HostSession = class {
20001
20077
  if (process.platform === "win32") {
20002
20078
  if (signal === "SIGINT") this.terminal.write("");
20003
20079
  else this.close();
20004
- } else this.terminal.kill(signal);
20080
+ } else {
20081
+ this.nativeClosing = signal !== "SIGINT";
20082
+ if (this.nativeClosing) this.setOutputPaused(false);
20083
+ this.terminal.kill(signal);
20084
+ }
20005
20085
  }
20006
20086
  close() {
20007
20087
  if (this.info.status !== "running") return;
20008
20088
  this.closing = true;
20089
+ this.nativeClosing = true;
20090
+ this.setOutputPaused(false);
20009
20091
  this.terminal.kill();
20010
20092
  }
20093
+ setOutputPaused(paused) {
20094
+ const next = paused && !this.nativeClosing;
20095
+ if (next === this.outputPaused) return;
20096
+ this.outputPaused = next;
20097
+ if (next) this.terminal?.pause();
20098
+ else this.terminal?.resume();
20099
+ }
20011
20100
  snapshot() {
20012
20101
  if (this.degraded) return Promise.resolve({
20013
20102
  data: "\x1B[0m\x1B[2J\x1B[H[Runweave: screen recovery unavailable; the original process is still running.]\r\n",
@@ -20057,6 +20146,42 @@ function sendJson(socket, message) {
20057
20146
  return true;
20058
20147
  }
20059
20148
 
20149
+ // packages/pty-host/src/output-batcher.ts
20150
+ function createHostOutputBatcher(send) {
20151
+ let pending;
20152
+ let timer;
20153
+ let disposed = false;
20154
+ const flush = () => {
20155
+ if (timer) clearTimeout(timer);
20156
+ timer = void 0;
20157
+ const frame = pending;
20158
+ pending = void 0;
20159
+ if (frame && !disposed) send(frame);
20160
+ };
20161
+ return {
20162
+ push(frame) {
20163
+ if (disposed) return;
20164
+ if (pending && (pending.range.streamId !== frame.range.streamId || pending.range.toOffset !== frame.range.fromOffset || frame.range.toOffset - pending.range.fromOffset > OUTPUT_FRAME_MAX_BYTES)) flush();
20165
+ pending = pending ? {
20166
+ data: pending.data + frame.data,
20167
+ range: { ...pending.range, toOffset: frame.range.toOffset }
20168
+ } : frame;
20169
+ if (pending.range.toOffset - pending.range.fromOffset >= OUTPUT_FRAME_MAX_BYTES) flush();
20170
+ else if (!timer) {
20171
+ timer = setTimeout(flush, 16);
20172
+ timer.unref();
20173
+ }
20174
+ },
20175
+ flush,
20176
+ dispose() {
20177
+ disposed = true;
20178
+ pending = void 0;
20179
+ if (timer) clearTimeout(timer);
20180
+ timer = void 0;
20181
+ }
20182
+ };
20183
+ }
20184
+
20060
20185
  // packages/pty-host/src/server.ts
20061
20186
  var scopeSchema = external_exports.object({ kind: external_exports.enum(["stable", "dev"]), instanceId: external_exports.string().min(1), configRoot: external_exports.string().min(1) });
20062
20187
  var targetSchema = external_exports.object({ hostInstanceId: external_exports.string().uuid(), sessionInstanceId: external_exports.string().uuid(), terminalSessionId: external_exports.string().min(1), generation: external_exports.number().int().positive() });
@@ -20064,6 +20189,7 @@ var createSchema = external_exports.object({
20064
20189
  generation: external_exports.number().int().positive(),
20065
20190
  sessionInstanceId: external_exports.string().uuid(),
20066
20191
  terminalSessionId: external_exports.string().min(1).max(256),
20192
+ replacesSessionInstanceId: external_exports.string().uuid().optional(),
20067
20193
  projectId: external_exports.string().min(1).max(256),
20068
20194
  command: external_exports.string().min(1).max(32768),
20069
20195
  args: external_exports.array(external_exports.string()).max(256),
@@ -20094,7 +20220,10 @@ async function startHost(scope, release) {
20094
20220
  const shutdown = async () => {
20095
20221
  if (stopping) return;
20096
20222
  stopping = true;
20097
- for (const session of sessions.values()) session.close();
20223
+ for (const session of sessions.values()) {
20224
+ session.close();
20225
+ session.screen.dispose();
20226
+ }
20098
20227
  for (const socket of sockets) socket.destroy();
20099
20228
  await gateway.close();
20100
20229
  if (server.listening) await new Promise((resolve) => server.close(() => resolve()));
@@ -20131,7 +20260,7 @@ async function startHost(scope, release) {
20131
20260
  ...socketError instanceof HostTransportError ? { bufferedBytes: socketError.bufferedBytes, limitBytes: socketError.limitBytes } : {}
20132
20261
  });
20133
20262
  sockets.delete(socket);
20134
- for (const unsubscribe of subscriptions.values()) unsubscribe();
20263
+ for (const subscription of subscriptions.values()) subscription.dispose();
20135
20264
  });
20136
20265
  receiveJsonLines(socket, (message) => {
20137
20266
  const parsed = wireSchema.safeParse(message);
@@ -20141,7 +20270,10 @@ async function startHost(scope, release) {
20141
20270
  }
20142
20271
  const request = parsed.data;
20143
20272
  const startedAt = performance.now();
20144
- const reply = (result) => sendJson(socket, { requestId: request.requestId, result });
20273
+ const reply = (result) => {
20274
+ for (const subscription of subscriptions.values()) subscription.flush();
20275
+ return sendJson(socket, { requestId: request.requestId, result });
20276
+ };
20145
20277
  const fail = (error) => {
20146
20278
  reportHostDiagnostic(writeHostDiagnostic, {
20147
20279
  event: "pty-host.request.failed",
@@ -20172,7 +20304,14 @@ async function startHost(scope, release) {
20172
20304
  if (request.action === "hello") {
20173
20305
  const expected = scopeSchema.parse(request.body);
20174
20306
  if (expected.kind !== scope.kind || expected.instanceId !== scope.instanceId || expected.configRoot !== scope.configRoot) throw new Error("HOST_IDENTITY_MISMATCH");
20175
- return reply({ descriptor, generation, frozen, sessions: sessions.size, outboxIncomplete: gateway.outbox.incomplete });
20307
+ return reply({
20308
+ descriptor,
20309
+ generation,
20310
+ frozen,
20311
+ sessions: sessions.size,
20312
+ outboxIncomplete: gateway.outbox.incomplete,
20313
+ capabilities: { replaceExitedSession: true }
20314
+ });
20176
20315
  }
20177
20316
  if (request.action === "claimWriter") {
20178
20317
  const body2 = external_exports.object({ ownerId: external_exports.string().uuid(), expectedGeneration: external_exports.number().int().nonnegative() }).parse(request.body);
@@ -20188,8 +20327,13 @@ async function startHost(scope, release) {
20188
20327
  requireWriter(requested);
20189
20328
  const previous = sessions.get(body2.terminalSessionId);
20190
20329
  if (previous) {
20191
- if (previous.createDigest !== (0, import_node_crypto7.createHash)("sha256").update(JSON.stringify(body2)).digest("hex")) throw new Error("HOST_INPUT_CONFLICT");
20192
- return reply(await previous.ready());
20330
+ if (previous.createDigest === (0, import_node_crypto7.createHash)("sha256").update(JSON.stringify(body2)).digest("hex"))
20331
+ return reply(await previous.ready());
20332
+ if (previous.info.status !== "exited" || body2.replacesSessionInstanceId !== previous.info.sessionInstanceId || body2.sessionInstanceId === previous.info.sessionInstanceId) throw new Error("HOST_INPUT_CONFLICT");
20333
+ previous.screen.dispose();
20334
+ sessions.delete(body2.terminalSessionId);
20335
+ } else if (body2.replacesSessionInstanceId) {
20336
+ throw new Error("HOST_SESSION_GONE");
20193
20337
  }
20194
20338
  if ([...sessions.values()].filter((session3) => session3.info.status === "running").length >= 64) throw new Error("HOST_BUSY");
20195
20339
  if (sessions.size >= 256) {
@@ -20254,34 +20398,66 @@ async function startHost(scope, release) {
20254
20398
  return reply({ ok: true });
20255
20399
  }
20256
20400
  if (request.action === "attachSession") {
20257
- subscriptions.get(session.info.terminalSessionId)?.();
20401
+ subscriptions.get(session.info.terminalSessionId)?.flush();
20402
+ subscriptions.get(session.info.terminalSessionId)?.dispose();
20258
20403
  let ready = false;
20404
+ const batcher = createHostOutputBatcher((frame) => {
20405
+ sendJson(socket, {
20406
+ type: "output",
20407
+ terminalSessionId: session.info.terminalSessionId,
20408
+ data: frame.data,
20409
+ cursor: { streamId: frame.range.streamId, offset: frame.range.toOffset },
20410
+ range: frame.range
20411
+ });
20412
+ });
20259
20413
  const output = (frame) => {
20260
- if (ready) sendJson(socket, { type: "output", terminalSessionId: session.info.terminalSessionId, data: frame.data, cursor: session.buffer.cursor, range: frame.range });
20414
+ if (ready) batcher.push(frame);
20261
20415
  };
20262
20416
  const exited = (exitCode) => {
20417
+ batcher.flush();
20263
20418
  sendJson(socket, { type: "exit", terminalSessionId: session.info.terminalSessionId, exitCode });
20264
20419
  };
20265
20420
  const resized = (cols, rows) => {
20266
- if (ready) sendJson(socket, { type: "resize", terminalSessionId: session.info.terminalSessionId, cols, rows, cursor: session.buffer.cursor });
20421
+ if (ready) {
20422
+ batcher.flush();
20423
+ sendJson(socket, { type: "resize", terminalSessionId: session.info.terminalSessionId, cols, rows, cursor: session.buffer.cursor });
20424
+ }
20267
20425
  };
20268
20426
  const launched = (launch2) => {
20269
- if (ready) sendJson(socket, { type: "launch", terminalSessionId: session.info.terminalSessionId, launch: launch2 });
20427
+ if (ready) {
20428
+ batcher.flush();
20429
+ sendJson(socket, { type: "launch", terminalSessionId: session.info.terminalSessionId, launch: launch2 });
20430
+ }
20270
20431
  };
20271
20432
  session.launchListeners.add(launched);
20272
20433
  session.outputListeners.add(output);
20273
20434
  session.exitListeners.add(exited);
20274
20435
  session.resizeListeners.add(resized);
20275
- subscriptions.set(session.info.terminalSessionId, () => {
20436
+ subscriptions.set(session.info.terminalSessionId, { flush: batcher.flush, dispose() {
20437
+ batcher.dispose();
20276
20438
  session.launchListeners.delete(launched);
20277
20439
  session.outputListeners.delete(output);
20278
20440
  session.exitListeners.delete(exited);
20279
20441
  session.resizeListeners.delete(resized);
20280
- });
20442
+ } });
20281
20443
  const snapshot = await session.snapshot();
20282
20444
  const tail = session.buffer.read(snapshot.cursor);
20283
20445
  if (!tail.ok) throw new Error("HOST_OUTPUT_GAP");
20284
- reply({ session: session.describe(), snapshot, frames: tail.frames });
20446
+ const result = { session: session.describe(), snapshot, frames: tail.frames };
20447
+ if (body.includeHistory === true) {
20448
+ const history = [];
20449
+ result.history = history;
20450
+ let budget = 3 * 1024 * 1024 - Buffer.byteLength(JSON.stringify({ requestId: request.requestId, result }));
20451
+ for (const frame of session.buffer.retainedFrames().reverse()) {
20452
+ if (frame.range.toOffset > snapshot.cursor.offset) continue;
20453
+ const size = Buffer.byteLength(JSON.stringify(frame)) + 1;
20454
+ if (size > budget) break;
20455
+ history.push(frame);
20456
+ budget -= size;
20457
+ }
20458
+ history.reverse();
20459
+ }
20460
+ reply(result);
20285
20461
  ready = true;
20286
20462
  if (session.info.status === "exited") exited(session.info.exitCode ?? 0);
20287
20463
  return;
@@ -7350,9 +7350,9 @@ var import_node_fs = require("node:fs");
7350
7350
 
7351
7351
  // packages/config-node/src/windows-permissions.ts
7352
7352
  var import_node_child_process = require("node:child_process");
7353
- function assertWindowsPrivatePath(file) {
7354
- if (process.platform !== "win32") return;
7355
- const script = `
7353
+ var import_node_util = require("node:util");
7354
+ var executeFile = (0, import_node_util.promisify)(import_node_child_process.execFile);
7355
+ var script = `
7356
7356
  $ErrorActionPreference = 'Stop'
7357
7357
  try {
7358
7358
  # Use .NET directly: a parent pwsh may export a PSModulePath incompatible with Windows PowerShell.
@@ -7370,6 +7370,27 @@ foreach ($rule in $acl.GetAccessRules($true, $true, [Security.Principal.Security
7370
7370
  [Console]::Write('check-failed:' + $_.Exception.GetType().FullName + ':' + $_.Exception.HResult)
7371
7371
  }
7372
7372
  `;
7373
+ function checkFailure(file, startedAt, cause) {
7374
+ const error = cause;
7375
+ const timedOut = error.code === "ETIMEDOUT" || error.killed === true && error.signal === "SIGTERM" && error.code == null;
7376
+ return new ConfigurationError(
7377
+ timedOut ? "CONFIG_WINDOWS_ACL_CHECK_TIMEOUT" : "CONFIG_WINDOWS_ACL_CHECK_FAILED",
7378
+ [
7379
+ file,
7380
+ `exit=${error.status ?? "none"}`,
7381
+ `signal=${error.signal ?? "none"}`,
7382
+ `code=${error.code ?? "none"}`,
7383
+ `elapsedMs=${Math.round(performance.now() - startedAt)}`
7384
+ ]
7385
+ );
7386
+ }
7387
+ function assertResult(file, result) {
7388
+ if (result === "owner" || result === "access") throw new ConfigurationError("CONFIG_WINDOWS_ACL_NOT_PRIVATE", [file, result]);
7389
+ if (/^check-failed:[A-Za-z0-9_.]+:-?\d+$/.test(result)) throw new ConfigurationError("CONFIG_WINDOWS_ACL_CHECK_FAILED", [file, result]);
7390
+ if (result !== "private") throw new ConfigurationError("CONFIG_WINDOWS_ACL_CHECK_FAILED", [file, "invalid-result"]);
7391
+ }
7392
+ function assertWindowsPrivatePath(file) {
7393
+ if (process.platform !== "win32") return;
7373
7394
  const startedAt = performance.now();
7374
7395
  let result;
7375
7396
  try {
@@ -7382,34 +7403,31 @@ foreach ($rule in $acl.GetAccessRules($true, $true, [Security.Principal.Security
7382
7403
  windowsHide: true
7383
7404
  }).trim();
7384
7405
  } catch (cause) {
7385
- const error = cause;
7386
- throw new ConfigurationError(
7387
- error.code === "ETIMEDOUT" ? "CONFIG_WINDOWS_ACL_CHECK_TIMEOUT" : "CONFIG_WINDOWS_ACL_CHECK_FAILED",
7388
- [
7389
- file,
7390
- `exit=${error.status ?? "none"}`,
7391
- `signal=${error.signal ?? "none"}`,
7392
- `code=${error.code ?? "none"}`,
7393
- `elapsedMs=${Math.round(performance.now() - startedAt)}`
7394
- ]
7395
- );
7406
+ throw checkFailure(file, startedAt, cause);
7396
7407
  }
7397
- if (result === "owner" || result === "access") throw new ConfigurationError("CONFIG_WINDOWS_ACL_NOT_PRIVATE", [file, result]);
7398
- if (/^check-failed:[A-Za-z0-9_.]+:-?\d+$/.test(result)) throw new ConfigurationError("CONFIG_WINDOWS_ACL_CHECK_FAILED", [file, result]);
7399
- if (result !== "private") throw new ConfigurationError("CONFIG_WINDOWS_ACL_CHECK_FAILED", [file, "invalid-result"]);
7408
+ assertResult(file, result);
7400
7409
  }
7401
7410
 
7402
7411
  // packages/config-node/src/private-file.ts
7403
- function assertPrivateDirectory(directory) {
7412
+ function privateDirectoryStat(directory) {
7404
7413
  const stat = (0, import_node_fs.lstatSync)(directory);
7405
7414
  if (!stat.isDirectory() || stat.isSymbolicLink() || process.platform !== "win32" && stat.mode & 63 || typeof process.getuid === "function" && stat.uid !== process.getuid()) throw new ConfigurationError("CONFIG_ROOT_PERMISSIONS_INVALID");
7406
- assertWindowsPrivatePath(directory);
7415
+ return stat;
7407
7416
  }
7408
- function assertPrivateDescriptor(fd, maxBytes = 1024 * 1024, file) {
7417
+ function privateDescriptorStat(fd, maxBytes) {
7409
7418
  const stat = (0, import_node_fs.fstatSync)(fd);
7410
7419
  if (!stat.isFile() || stat.nlink !== 1) throw new ConfigurationError("CONFIG_FILE_NOT_PRIVATE_REGULAR");
7411
7420
  if (typeof process.getuid === "function" && stat.uid !== process.getuid()) throw new ConfigurationError("CONFIG_FILE_OWNER_MISMATCH");
7412
7421
  if (process.platform !== "win32" && stat.mode & 63) throw new ConfigurationError("CONFIG_FILE_PERMISSIONS_INVALID");
7422
+ if (stat.size > maxBytes) throw new ConfigurationError("CONFIG_FILE_TOO_LARGE");
7423
+ return stat;
7424
+ }
7425
+ function assertPrivateDirectory(directory) {
7426
+ privateDirectoryStat(directory);
7427
+ assertWindowsPrivatePath(directory);
7428
+ }
7429
+ function assertPrivateDescriptor(fd, maxBytes = 1024 * 1024, file) {
7430
+ const stat = privateDescriptorStat(fd, Infinity);
7413
7431
  if (process.platform === "win32") {
7414
7432
  if (!file) throw new ConfigurationError("CONFIG_PRIVATE_PATH_REQUIRED");
7415
7433
  assertWindowsPrivatePath(file);
@@ -7500,6 +7518,8 @@ function assertOwnedPath(context, value) {
7500
7518
  // packages/config-node/src/platform.ts
7501
7519
  var import_node_child_process2 = require("node:child_process");
7502
7520
  var import_node_fs3 = require("node:fs");
7521
+ var import_node_util2 = require("node:util");
7522
+ var executeFile2 = (0, import_node_util2.promisify)(import_node_child_process2.execFile);
7503
7523
  function processStartIdentity(pid) {
7504
7524
  if (!Number.isSafeInteger(pid) || pid < 1) return null;
7505
7525
  try {
@@ -1 +0,0 @@
1
- import{U as a,M as n}from"./index-UR7g5PLZ.js";const t=(r,o)=>a.lang.round(n.parse(r)[o]);export{t as c};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-4TB4RGXK-CxVRfINM.js";import{_ as i}from"./index-UR7g5PLZ.js";import"./chunk-FMBD7UC4-DIvA96Y1.js";import"./chunk-YZCP3GAM-CH4YkXv-.js";import"./chunk-55IACEB6-BFRLEEBY.js";import"./chunk-EDXVE4YY-DA5BuoT3.js";import"./main-LH8ULGFT.js";import"./index-D9-cSGu-.js";import"./record-content-DQ0F1zbW.js";var b={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{b as diagram};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-4TB4RGXK-CxVRfINM.js";import{_ as i}from"./index-UR7g5PLZ.js";import"./chunk-FMBD7UC4-DIvA96Y1.js";import"./chunk-YZCP3GAM-CH4YkXv-.js";import"./chunk-55IACEB6-BFRLEEBY.js";import"./chunk-EDXVE4YY-DA5BuoT3.js";import"./main-LH8ULGFT.js";import"./index-D9-cSGu-.js";import"./record-content-DQ0F1zbW.js";var b={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{b as diagram};
@@ -1 +0,0 @@
1
- import{b as r}from"./graph-DRJG1bKF.js";var e=4;function a(o){return r(o,e)}export{a as c};