pi-outpost 0.6.0 → 0.6.1

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 (100) hide show
  1. package/dist/pi-outpost.mjs +85 -5
  2. package/dist/pi-outpost.sea.mjs +83 -4
  3. package/dist/sea-prep.blob +0 -0
  4. package/dist/web/assets/{abnfDiagram-VRR7QNED-Ddbaevlx.js → abnfDiagram-VRR7QNED-H5_VO-B1.js} +1 -1
  5. package/dist/web/assets/{arc-DKRCl6TA.js → arc-CE2zETyi.js} +1 -1
  6. package/dist/web/assets/architecture-TIHT7OUA-quq76HPk.js +1 -0
  7. package/dist/web/assets/{architectureDiagram-ZJ3FMSHR-9NxjIUZS.js → architectureDiagram-ZJ3FMSHR-CIvYQchB.js} +1 -1
  8. package/dist/web/assets/{blockDiagram-677ZJIJ3-RZPAuAVe.js → blockDiagram-677ZJIJ3-DGQEZrPB.js} +1 -1
  9. package/dist/web/assets/{c4Diagram-LMCZKHZV-CtnM3Ckx.js → c4Diagram-LMCZKHZV-BirInSYC.js} +1 -1
  10. package/dist/web/assets/channel-CZQNpXwJ.js +1 -0
  11. package/dist/web/assets/{chunk-32BRIVSS-QnUqBdzD.js → chunk-32BRIVSS-B7fJk0ll.js} +1 -1
  12. package/dist/web/assets/{chunk-52WLFC77-EpnBnafN.js → chunk-52WLFC77-C56wZyRg.js} +1 -1
  13. package/dist/web/assets/{chunk-C7G6YPKG--UKrostC.js → chunk-C7G6YPKG-BVEnGhWm.js} +1 -1
  14. package/dist/web/assets/{chunk-EX3LRPZG-Ce4UE9ek.js → chunk-EX3LRPZG-qrTscY2a.js} +1 -1
  15. package/dist/web/assets/{chunk-FWX5IMBZ-CpoeAqxN.js → chunk-FWX5IMBZ-DE1AOCYK.js} +2 -2
  16. package/dist/web/assets/{chunk-HOUHSVGY-C_0OHgvt.js → chunk-HOUHSVGY-ByqVYtdv.js} +1 -1
  17. package/dist/web/assets/{chunk-ICXQ74PX-BuQxyBm4.js → chunk-ICXQ74PX-DXqI_eYD.js} +1 -1
  18. package/dist/web/assets/{chunk-MOJQB5TN-nQbQpJtl.js → chunk-MOJQB5TN-CtF6fAD2.js} +1 -1
  19. package/dist/web/assets/{chunk-OGEWGWER-qmp8nYAi.js → chunk-OGEWGWER-BN9LPPms.js} +1 -1
  20. package/dist/web/assets/{chunk-PUDLZKDR-CfrXFVaP.js → chunk-PUDLZKDR-W3AI4jJR.js} +1 -1
  21. package/dist/web/assets/{chunk-Q4XR5HBZ-B_ZVMZ1_.js → chunk-Q4XR5HBZ-DyN60MoF.js} +1 -1
  22. package/dist/web/assets/{chunk-RYQCIY6F-BNLDnl1E.js → chunk-RYQCIY6F-BasDWW7n.js} +1 -1
  23. package/dist/web/assets/{chunk-V7JOEXUC-CCJ4gaG4.js → chunk-V7JOEXUC-o82vAXi1.js} +1 -1
  24. package/dist/web/assets/{chunk-VAUOI2AC-DH_aJUsJ.js → chunk-VAUOI2AC-C9EyY67a.js} +1 -1
  25. package/dist/web/assets/{chunk-VR4S4FIN-BvhW0AYV.js → chunk-VR4S4FIN-CeQJxF3W.js} +1 -1
  26. package/dist/web/assets/{chunk-WYO6CB5R-BnZu-GH5.js → chunk-WYO6CB5R-krESB1wz.js} +3 -3
  27. package/dist/web/assets/{chunk-XXDRQBXY-CIhKgouH.js → chunk-XXDRQBXY-DwNOw26j.js} +1 -1
  28. package/dist/web/assets/{chunk-ZGVPDNZ5-CG5sR8Hi.js → chunk-ZGVPDNZ5-Ch60IWeh.js} +1 -1
  29. package/dist/web/assets/classDiagram-OUVF2IWQ-cofE0NaO.js +1 -0
  30. package/dist/web/assets/classDiagram-v2-EOCWNBFH-cofE0NaO.js +1 -0
  31. package/dist/web/assets/{core-DY7rIyDC.js → core-BYdjv-3f.js} +1 -1
  32. package/dist/web/assets/{cose-bilkent-JH36ORCC-Dr8iIC07.js → cose-bilkent-JH36ORCC-7oO-5ii0.js} +1 -1
  33. package/dist/web/assets/{cynefin-VYW2F7L2-Csc5Skqi.js → cynefin-VYW2F7L2-BXr0328D.js} +1 -1
  34. package/dist/web/assets/{cynefinDiagram-TSTJHNR4-sGiyDLSd.js → cynefinDiagram-TSTJHNR4-BjcrCkzf.js} +1 -1
  35. package/dist/web/assets/{dagre-VKFMJZFB-C5vxZhtT.js → dagre-VKFMJZFB-C6__cGMT.js} +1 -1
  36. package/dist/web/assets/{diagram-FQU43EPY-8B2nlFf4.js → diagram-FQU43EPY-Cv5jVU9J.js} +1 -1
  37. package/dist/web/assets/{diagram-G47NLZAW-C6vzPEqq.js → diagram-G47NLZAW-Cr471EU0.js} +1 -1
  38. package/dist/web/assets/{diagram-NH7WQ7WH-Cug03yLJ.js → diagram-NH7WQ7WH-goB_dq72.js} +1 -1
  39. package/dist/web/assets/{diagram-OA4YK3LP-CucHVkAE.js → diagram-OA4YK3LP-DmY1Aze_.js} +1 -1
  40. package/dist/web/assets/{diagram-WEI45ONY-CrS4YdfL.js → diagram-WEI45ONY-WkHev95e.js} +1 -1
  41. package/dist/web/assets/{dist-4WHbW7kW.js → dist-eoi0_oI4.js} +1 -1
  42. package/dist/web/assets/{ebnfDiagram-CCIWWBDH-CXGiUUds.js → ebnfDiagram-CCIWWBDH-9LnP4grp.js} +1 -1
  43. package/dist/web/assets/{erDiagram-Q63AITRT-By3BwsLJ.js → erDiagram-Q63AITRT-DLfvk9F1.js} +1 -1
  44. package/dist/web/assets/eventmodeling-45OFAUF4-B5yLU1sh.js +1 -0
  45. package/dist/web/assets/flowDiagram-23GEKE2U-YSOb8q4v.js +1 -0
  46. package/dist/web/assets/{ganttDiagram-NO4QXBWP-7cpdUdRJ.js → ganttDiagram-NO4QXBWP-BmevG3Zb.js} +1 -1
  47. package/dist/web/assets/{gitGraph-TEB2WS4Q-8uES_n1N.js → gitGraph-TEB2WS4Q-DJhMk0an.js} +1 -1
  48. package/dist/web/assets/{gitGraphDiagram-IHSO6WYX-5Ob04v9V.js → gitGraphDiagram-IHSO6WYX-m9L6aHPB.js} +1 -1
  49. package/dist/web/assets/index-B1kaPMNw.css +2 -0
  50. package/dist/web/assets/{index-DpbRLjEE.js → index-CATcFyvk.js} +7 -7
  51. package/dist/web/assets/{info-DKCQHKI2-CwnMgns7.js → info-DKCQHKI2-B4Vc-IRj.js} +1 -1
  52. package/dist/web/assets/{infoDiagram-FWYZ7A6U-ClO-D-F6.js → infoDiagram-FWYZ7A6U-Ba1fhnL8.js} +1 -1
  53. package/dist/web/assets/{ishikawaDiagram-FXEZZL3T-D-Ze2Ql8.js → ishikawaDiagram-FXEZZL3T-ChAwvE3-.js} +1 -1
  54. package/dist/web/assets/{journeyDiagram-5HDEW3XC-Tc3Wdzm9.js → journeyDiagram-5HDEW3XC-BirgNixk.js} +1 -1
  55. package/dist/web/assets/{kanban-definition-HUTT4EX6-CcVQNWZZ.js → kanban-definition-HUTT4EX6-Chp-drog.js} +1 -1
  56. package/dist/web/assets/{line-LCszX-93.js → line-D_9HoxN3.js} +1 -1
  57. package/dist/web/assets/{linear-D4uAB447.js → linear-DgrpbYUZ.js} +1 -1
  58. package/dist/web/assets/{mermaid-parser.core-DEPnbzQd.js → mermaid-parser.core-BqDBKvZM.js} +3 -3
  59. package/dist/web/assets/{mermaid.core-BwWIg80u.js → mermaid.core-BhqnioBn.js} +3 -3
  60. package/dist/web/assets/{mindmap-definition-LN4V7U3C-B0t31b8v.js → mindmap-definition-LN4V7U3C-JRUH2JOn.js} +1 -1
  61. package/dist/web/assets/{packet-7NZHBO7P-Cq4ml33w.js → packet-7NZHBO7P-BgUQPLIU.js} +1 -1
  62. package/dist/web/assets/{pegDiagram-2B236MQR-GehivSub.js → pegDiagram-2B236MQR-VvS6nn8t.js} +1 -1
  63. package/dist/web/assets/{pie-RZYD4A2V-hKQqRwR1.js → pie-RZYD4A2V-B2jlWZgR.js} +1 -1
  64. package/dist/web/assets/{pieDiagram-ENE6RG2P-Di20TWWF.js → pieDiagram-ENE6RG2P-BKW9rLOB.js} +1 -1
  65. package/dist/web/assets/{quadrantDiagram-ABIIQ3AL-BS2DM0o1.js → quadrantDiagram-ABIIQ3AL-VnibnYiD.js} +1 -1
  66. package/dist/web/assets/{radar-I7S5WNFK-DIelC7WS.js → radar-I7S5WNFK-DMqKgGE4.js} +1 -1
  67. package/dist/web/assets/{railroad-3IZDKUUU-BGqOpgb2.js → railroad-3IZDKUUU-CQISkGus.js} +1 -1
  68. package/dist/web/assets/railroad-abnf-AHOZXSZD-Cqb4QybP.js +1 -0
  69. package/dist/web/assets/railroad-ebnf-EBAXGLYW-B2HJhkLZ.js +1 -0
  70. package/dist/web/assets/railroad-peg-LSFZ7HO6-BAkQmUhL.js +1 -0
  71. package/dist/web/assets/{railroadDiagram-RFXS5EU6-JnUSd2SZ.js → railroadDiagram-RFXS5EU6-B2mmn-YE.js} +1 -1
  72. package/dist/web/assets/{requirementDiagram-TGXJPOKE-BOl8gS8C.js → requirementDiagram-TGXJPOKE-Dr95ZcIq.js} +1 -1
  73. package/dist/web/assets/{sankeyDiagram-HTMAVEWB-DcywXXIN.js → sankeyDiagram-HTMAVEWB-BdQaFrYL.js} +1 -1
  74. package/dist/web/assets/{sequenceDiagram-DBY2YBRQ-ONvF5cHm.js → sequenceDiagram-DBY2YBRQ-Bw4pvzkf.js} +1 -1
  75. package/dist/web/assets/{src-BuJdKDww.js → src-D_DMwmBd.js} +1 -1
  76. package/dist/web/assets/{stateDiagram-2N3HPSRC-xg3Onc8v.js → stateDiagram-2N3HPSRC-Q0qvHsf_.js} +1 -1
  77. package/dist/web/assets/stateDiagram-v2-6OUMAXLB-ChUyBpFH.js +1 -0
  78. package/dist/web/assets/{swimlanes-5IMT3BWC-DPJceuSw.js → swimlanes-5IMT3BWC-K22dJ96l.js} +1 -1
  79. package/dist/web/assets/swimlanesDiagram-G3AALYLV-0kss8Lg_.js +8 -0
  80. package/dist/web/assets/{timeline-definition-FHXFAJF6-4Q0cNBZa.js → timeline-definition-FHXFAJF6-DBnf2O5F.js} +1 -1
  81. package/dist/web/assets/{treeView-QDETBFTQ-BFyEFFDW.js → treeView-QDETBFTQ-vEgp8rG6.js} +1 -1
  82. package/dist/web/assets/{treemap-6X3UGDF4-CLak8Uij.js → treemap-6X3UGDF4-DTG5XbMU.js} +1 -1
  83. package/dist/web/assets/{vennDiagram-L72KCM5P-CnMeax8n.js → vennDiagram-L72KCM5P-yvzldEn_.js} +1 -1
  84. package/dist/web/assets/{wardley-OPB4EBWU-CUMtRrUi.js → wardley-OPB4EBWU-CiJqxxnE.js} +1 -1
  85. package/dist/web/assets/{wardleyDiagram-EHGQE667-CzFqvDxe.js → wardleyDiagram-EHGQE667-CGhW5qOc.js} +1 -1
  86. package/dist/web/assets/{xychartDiagram-FW5EYKEG-C86ZCbK8.js → xychartDiagram-FW5EYKEG-DuI96QQ9.js} +1 -1
  87. package/dist/web/index.html +2 -2
  88. package/package.json +1 -1
  89. package/dist/web/assets/architecture-TIHT7OUA-CXs7lqrB.js +0 -1
  90. package/dist/web/assets/channel-BRTsEjH0.js +0 -1
  91. package/dist/web/assets/classDiagram-OUVF2IWQ-oxDyX2ry.js +0 -1
  92. package/dist/web/assets/classDiagram-v2-EOCWNBFH-oxDyX2ry.js +0 -1
  93. package/dist/web/assets/eventmodeling-45OFAUF4-BBqgpOjt.js +0 -1
  94. package/dist/web/assets/flowDiagram-23GEKE2U-DUiF3T5Y.js +0 -1
  95. package/dist/web/assets/index-Bz_82pCM.css +0 -2
  96. package/dist/web/assets/railroad-abnf-AHOZXSZD-CY8YCNrM.js +0 -1
  97. package/dist/web/assets/railroad-ebnf-EBAXGLYW-DK8c1XBp.js +0 -1
  98. package/dist/web/assets/railroad-peg-LSFZ7HO6-3FkEERnx.js +0 -1
  99. package/dist/web/assets/stateDiagram-v2-6OUMAXLB-D1aOFa-9.js +0 -1
  100. package/dist/web/assets/swimlanesDiagram-G3AALYLV-BDD3cg35.js +0 -8
@@ -36973,7 +36973,8 @@ import {
36973
36973
  createAgentSessionRuntime,
36974
36974
  createAgentSessionServices,
36975
36975
  getAgentDir as getAgentDir2,
36976
- SessionManager
36976
+ SessionManager,
36977
+ VERSION as PI_SDK_VERSION
36977
36978
  } from "@earendil-works/pi-coding-agent";
36978
36979
 
36979
36980
  // ../shared/src/protocol.ts
@@ -37152,6 +37153,15 @@ function loadConfig(launchDir, flags = {}, env2 = process.env) {
37152
37153
  fail(`sandbox.writableRoot does not exist: ${config2.sandbox.writableRoot}`);
37153
37154
  }
37154
37155
  }
37156
+ if (raw.sandboxLocks !== void 0) {
37157
+ const locks = asObject(raw.sandboxLocks, "sandboxLocks");
37158
+ config2.sandboxLocks = {
37159
+ root: optionalBoolean(locks, "root", false),
37160
+ allowWrite: optionalBoolean(locks, "allowWrite", false),
37161
+ allowBash: optionalBoolean(locks, "allowBash", false),
37162
+ writableRoot: optionalBoolean(locks, "writableRoot", false)
37163
+ };
37164
+ }
37155
37165
  config2.tools = optionalStringArray(raw, "tools");
37156
37166
  config2.noExtensions = optionalBoolean(raw, "noExtensions", false);
37157
37167
  config2.extensionPaths = (optionalStringArray(raw, "extensionPaths") ?? []).map(resolve2);
@@ -50569,7 +50579,7 @@ function searchSessions(sessions, query, limit) {
50569
50579
  var seaExtensionFactories = [];
50570
50580
 
50571
50581
  // ../server/src/index.ts
50572
- var VERSION2 = true ? "0.6.0" : "dev";
50582
+ var VERSION2 = true ? "0.6.1" : "dev";
50573
50583
  var LAUNCH_DIR = process.env.INIT_CWD ?? process.cwd();
50574
50584
  function complain(error) {
50575
50585
  const message = error instanceof Error ? error.message : String(error);
@@ -50938,7 +50948,20 @@ function snapshot() {
50938
50948
  contextUsage: contextUsage(),
50939
50949
  writableRoot: WRITABLE_ROOT,
50940
50950
  gitAvailable: GIT !== null,
50941
- credentials: credentialStatus()
50951
+ credentials: credentialStatus(),
50952
+ extensionPaths: session.extensionRunner.getExtensionPaths(),
50953
+ versions: { piOutpost: VERSION2, piSdk: PI_SDK_VERSION },
50954
+ sandbox: (() => {
50955
+ const v2 = config.sandbox ? {
50956
+ root: config.sandbox.root,
50957
+ allowWrite: config.sandbox.allowWrite ?? false,
50958
+ allowBash: config.sandbox.allowBash ?? false,
50959
+ writableRoot: config.sandbox.writableRoot,
50960
+ locks: config.sandboxLocks
50961
+ } : void 0;
50962
+ console.log("[snapshot] sandbox =", JSON.stringify(v2));
50963
+ return v2;
50964
+ })()
50942
50965
  };
50943
50966
  }
50944
50967
  var clients = /* @__PURE__ */ new Set();
@@ -51172,13 +51195,19 @@ async function bindExtensionsForSession() {
51172
51195
  var pendingFileMutations = /* @__PURE__ */ new Map();
51173
51196
  async function announceFileChange(args) {
51174
51197
  const targetPath = args?.path;
51198
+ console.log("[announceFileChange] args type=", typeof args, "targetPath=", targetPath);
51175
51199
  if (typeof targetPath !== "string") return;
51176
51200
  try {
51177
51201
  const resolved = await realResolve(path8.resolve(BROWSER_ROOT, targetPath));
51178
- if (!isWithin(BROWSER_ROOT, resolved)) return;
51202
+ if (!isWithin(BROWSER_ROOT, resolved)) {
51203
+ console.log("[announceFileChange] not within BROWSER_ROOT, skipping");
51204
+ return;
51205
+ }
51179
51206
  const relPath = path8.relative(BROWSER_ROOT, resolved).split(path8.sep).join("/");
51207
+ console.log("[announceFileChange] broadcasting file_changed path=", relPath);
51180
51208
  broadcast({ type: "file_changed", path: relPath });
51181
- } catch {
51209
+ } catch (e) {
51210
+ console.log("[announceFileChange] error:", e);
51182
51211
  }
51183
51212
  }
51184
51213
  function bindSession() {
@@ -51321,6 +51350,45 @@ async function handleSetCredential(socket, provider, apiKey) {
51321
51350
  await runtime.services.modelRuntime.refresh();
51322
51351
  await adoptUsableModel(socket);
51323
51352
  }
51353
+ async function handleUpdateConfig(socket, newSandbox) {
51354
+ if (replacingSession) {
51355
+ send(socket, { type: "error", message: "Session change already in progress" });
51356
+ return;
51357
+ }
51358
+ const locks = config.sandboxLocks ?? {};
51359
+ const mergedSandbox = {
51360
+ root: locks.root ? config.sandbox.root : newSandbox.root,
51361
+ allowWrite: locks.allowWrite ? config.sandbox.allowWrite : newSandbox.allowWrite,
51362
+ allowBash: locks.allowBash ? config.sandbox.allowBash : newSandbox.allowBash,
51363
+ writableRoot: locks.writableRoot ? config.sandbox.writableRoot : newSandbox.writableRoot
51364
+ };
51365
+ replacingSession = true;
51366
+ try {
51367
+ config.sandbox = {
51368
+ root: mergedSandbox.root,
51369
+ allowWrite: mergedSandbox.allowWrite,
51370
+ allowBash: mergedSandbox.allowBash,
51371
+ writableRoot: mergedSandbox.writableRoot,
51372
+ readExceptions: config.sandbox?.readExceptions ?? []
51373
+ };
51374
+ BROWSER_ROOT = await resolveBrowserRoot(config);
51375
+ WRITABLE_ROOT = await resolveWritableRoot(config, BROWSER_ROOT);
51376
+ GIT = await probeGit(BROWSER_ROOT);
51377
+ sandboxedTools = config.sandbox ? await createSandboxedTools(config.sandbox) : void 0;
51378
+ const { cancelled } = await runtime.newSession();
51379
+ if (!cancelled) await rebindAndAnnounce();
51380
+ } catch (error) {
51381
+ reportError(error);
51382
+ try {
51383
+ const { cancelled } = await runtime.newSession();
51384
+ if (!cancelled) await rebindAndAnnounce();
51385
+ } catch (recoveryError) {
51386
+ reportError(recoveryError);
51387
+ }
51388
+ } finally {
51389
+ replacingSession = false;
51390
+ }
51391
+ }
51324
51392
  async function handleDeclareProvider(socket, declaration) {
51325
51393
  try {
51326
51394
  runtime.services.modelRuntime.registerProvider(declaration.provider, providerConfig(declaration));
@@ -51857,6 +51925,18 @@ function handleClientMessage(socket, raw) {
51857
51925
  ...message.compat ? { compat: message.compat } : {}
51858
51926
  }).catch(reportError);
51859
51927
  break;
51928
+ case "update_config": {
51929
+ if (config.sandbox === void 0) {
51930
+ send(socket, { type: "error", message: "No sandbox configured \u2014 cannot update" });
51931
+ return;
51932
+ }
51933
+ if (typeof message.sandbox?.root !== "string" || typeof message.sandbox.allowWrite !== "boolean" || typeof message.sandbox.allowBash !== "boolean" || message.sandbox.writableRoot !== void 0 && typeof message.sandbox.writableRoot !== "string") {
51934
+ send(socket, { type: "error", message: "Invalid sandbox config" });
51935
+ return;
51936
+ }
51937
+ handleUpdateConfig(socket, message.sandbox).catch(reportError);
51938
+ break;
51939
+ }
51860
51940
  }
51861
51941
  }
51862
51942
  handleWsConnection = (socket) => {
@@ -371721,6 +371721,15 @@ function loadConfig(launchDir, flags = {}, env4 = process.env) {
371721
371721
  fail2(`sandbox.writableRoot does not exist: ${config3.sandbox.writableRoot}`);
371722
371722
  }
371723
371723
  }
371724
+ if (raw.sandboxLocks !== void 0) {
371725
+ const locks = asObject(raw.sandboxLocks, "sandboxLocks");
371726
+ config3.sandboxLocks = {
371727
+ root: optionalBoolean(locks, "root", false),
371728
+ allowWrite: optionalBoolean(locks, "allowWrite", false),
371729
+ allowBash: optionalBoolean(locks, "allowBash", false),
371730
+ writableRoot: optionalBoolean(locks, "writableRoot", false)
371731
+ };
371732
+ }
371724
371733
  config3.tools = optionalStringArray(raw, "tools");
371725
371734
  config3.noExtensions = optionalBoolean(raw, "noExtensions", false);
371726
371735
  config3.extensionPaths = (optionalStringArray(raw, "extensionPaths") ?? []).map(resolve15);
@@ -372807,7 +372816,7 @@ function searchSessions(sessions, query, limit2) {
372807
372816
  var seaExtensionFactories = [];
372808
372817
 
372809
372818
  // ../server/src/index.ts
372810
- var VERSION6 = true ? "0.6.0" : "dev";
372819
+ var VERSION6 = true ? "0.6.1" : "dev";
372811
372820
  var LAUNCH_DIR = process.env.INIT_CWD ?? process.cwd();
372812
372821
  function complain(error40) {
372813
372822
  const message = error40 instanceof Error ? error40.message : String(error40);
@@ -373176,7 +373185,20 @@ function snapshot() {
373176
373185
  contextUsage: contextUsage(),
373177
373186
  writableRoot: WRITABLE_ROOT,
373178
373187
  gitAvailable: GIT !== null,
373179
- credentials: credentialStatus()
373188
+ credentials: credentialStatus(),
373189
+ extensionPaths: session.extensionRunner.getExtensionPaths(),
373190
+ versions: { piOutpost: VERSION6, piSdk: VERSION },
373191
+ sandbox: (() => {
373192
+ const v3 = config2.sandbox ? {
373193
+ root: config2.sandbox.root,
373194
+ allowWrite: config2.sandbox.allowWrite ?? false,
373195
+ allowBash: config2.sandbox.allowBash ?? false,
373196
+ writableRoot: config2.sandbox.writableRoot,
373197
+ locks: config2.sandboxLocks
373198
+ } : void 0;
373199
+ console.log("[snapshot] sandbox =", JSON.stringify(v3));
373200
+ return v3;
373201
+ })()
373180
373202
  };
373181
373203
  }
373182
373204
  var clients = /* @__PURE__ */ new Set();
@@ -373410,13 +373432,19 @@ async function bindExtensionsForSession() {
373410
373432
  var pendingFileMutations = /* @__PURE__ */ new Map();
373411
373433
  async function announceFileChange(args) {
373412
373434
  const targetPath = args?.path;
373435
+ console.log("[announceFileChange] args type=", typeof args, "targetPath=", targetPath);
373413
373436
  if (typeof targetPath !== "string") return;
373414
373437
  try {
373415
373438
  const resolved = await realResolve(path22.resolve(BROWSER_ROOT, targetPath));
373416
- if (!isWithin(BROWSER_ROOT, resolved)) return;
373439
+ if (!isWithin(BROWSER_ROOT, resolved)) {
373440
+ console.log("[announceFileChange] not within BROWSER_ROOT, skipping");
373441
+ return;
373442
+ }
373417
373443
  const relPath = path22.relative(BROWSER_ROOT, resolved).split(path22.sep).join("/");
373444
+ console.log("[announceFileChange] broadcasting file_changed path=", relPath);
373418
373445
  broadcast({ type: "file_changed", path: relPath });
373419
- } catch {
373446
+ } catch (e2) {
373447
+ console.log("[announceFileChange] error:", e2);
373420
373448
  }
373421
373449
  }
373422
373450
  function bindSession() {
@@ -373559,6 +373587,45 @@ async function handleSetCredential(socket, provider, apiKey) {
373559
373587
  await runtime.services.modelRuntime.refresh();
373560
373588
  await adoptUsableModel(socket);
373561
373589
  }
373590
+ async function handleUpdateConfig(socket, newSandbox) {
373591
+ if (replacingSession) {
373592
+ send(socket, { type: "error", message: "Session change already in progress" });
373593
+ return;
373594
+ }
373595
+ const locks = config2.sandboxLocks ?? {};
373596
+ const mergedSandbox = {
373597
+ root: locks.root ? config2.sandbox.root : newSandbox.root,
373598
+ allowWrite: locks.allowWrite ? config2.sandbox.allowWrite : newSandbox.allowWrite,
373599
+ allowBash: locks.allowBash ? config2.sandbox.allowBash : newSandbox.allowBash,
373600
+ writableRoot: locks.writableRoot ? config2.sandbox.writableRoot : newSandbox.writableRoot
373601
+ };
373602
+ replacingSession = true;
373603
+ try {
373604
+ config2.sandbox = {
373605
+ root: mergedSandbox.root,
373606
+ allowWrite: mergedSandbox.allowWrite,
373607
+ allowBash: mergedSandbox.allowBash,
373608
+ writableRoot: mergedSandbox.writableRoot,
373609
+ readExceptions: config2.sandbox?.readExceptions ?? []
373610
+ };
373611
+ BROWSER_ROOT = await resolveBrowserRoot(config2);
373612
+ WRITABLE_ROOT = await resolveWritableRoot(config2, BROWSER_ROOT);
373613
+ GIT = await probeGit(BROWSER_ROOT);
373614
+ sandboxedTools = config2.sandbox ? await createSandboxedTools(config2.sandbox) : void 0;
373615
+ const { cancelled } = await runtime.newSession();
373616
+ if (!cancelled) await rebindAndAnnounce();
373617
+ } catch (error40) {
373618
+ reportError(error40);
373619
+ try {
373620
+ const { cancelled } = await runtime.newSession();
373621
+ if (!cancelled) await rebindAndAnnounce();
373622
+ } catch (recoveryError) {
373623
+ reportError(recoveryError);
373624
+ }
373625
+ } finally {
373626
+ replacingSession = false;
373627
+ }
373628
+ }
373562
373629
  async function handleDeclareProvider(socket, declaration) {
373563
373630
  try {
373564
373631
  runtime.services.modelRuntime.registerProvider(declaration.provider, providerConfig(declaration));
@@ -374095,6 +374162,18 @@ function handleClientMessage(socket, raw) {
374095
374162
  ...message.compat ? { compat: message.compat } : {}
374096
374163
  }).catch(reportError);
374097
374164
  break;
374165
+ case "update_config": {
374166
+ if (config2.sandbox === void 0) {
374167
+ send(socket, { type: "error", message: "No sandbox configured \u2014 cannot update" });
374168
+ return;
374169
+ }
374170
+ if (typeof message.sandbox?.root !== "string" || typeof message.sandbox.allowWrite !== "boolean" || typeof message.sandbox.allowBash !== "boolean" || message.sandbox.writableRoot !== void 0 && typeof message.sandbox.writableRoot !== "string") {
374171
+ send(socket, { type: "error", message: "Invalid sandbox config" });
374172
+ return;
374173
+ }
374174
+ handleUpdateConfig(socket, message.sandbox).catch(reportError);
374175
+ break;
374176
+ }
374098
374177
  }
374099
374178
  }
374100
374179
  handleWsConnection = (socket) => {
Binary file
@@ -1 +1 @@
1
- import{m as e,t}from"./mermaid-parser.core-DEPnbzQd.js";import{n}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import{m as r}from"./src-BuJdKDww.js";import"./chunk-WYO6CB5R-BnZu-GH5.js";import"./chunk-VAUOI2AC-DH_aJUsJ.js";import{n as i,r as a,t as o}from"./chunk-MOJQB5TN-nQbQpJtl.js";import{t as s}from"./chunk-JWPE2WC7-DVXcaiue.js";var c=e().RailroadAbnf.parser.LangiumParser,l=n(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=n(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=n(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=n(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=n(e=>{switch(e.$type){case`AbnfStringLiteral`:return{type:`terminal`,value:e.value};case`AbnfNumVal`:return{type:`terminal`,value:e.value};case`AbnfRuleName`:return{type:`nonterminal`,name:e.name};case`AbnfGroup`:return l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=n(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=n(e=>{s(e,o),e.title&&o.setTitle(e.title),e.rules.map(e=>o.addRule(m(e)))},`populateDb`),g={parser:{parse:n(e=>{o.clear(),r.debug(`[ABNF Parser] Starting Langium parse`);let n=c.parse(e);if(n.lexerErrors.length>0||n.parserErrors.length>0)throw new t(n);let i=n.value;r.debug(`[ABNF Parser] Parsed rules:`,i.rules.length),h(i),r.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:o}},db:o,renderer:a,styles:i};export{g as diagram};
1
+ import{m as e,t}from"./mermaid-parser.core-BqDBKvZM.js";import{n}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import{m as r}from"./src-D_DMwmBd.js";import"./chunk-WYO6CB5R-krESB1wz.js";import"./chunk-VAUOI2AC-C9EyY67a.js";import{n as i,r as a,t as o}from"./chunk-MOJQB5TN-CtF6fAD2.js";import{t as s}from"./chunk-JWPE2WC7-DVXcaiue.js";var c=e().RailroadAbnf.parser.LangiumParser,l=n(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=n(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=n(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=n(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=n(e=>{switch(e.$type){case`AbnfStringLiteral`:return{type:`terminal`,value:e.value};case`AbnfNumVal`:return{type:`terminal`,value:e.value};case`AbnfRuleName`:return{type:`nonterminal`,name:e.name};case`AbnfGroup`:return l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=n(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=n(e=>{s(e,o),e.title&&o.setTitle(e.title),e.rules.map(e=>o.addRule(m(e)))},`populateDb`),g={parser:{parse:n(e=>{o.clear(),r.debug(`[ABNF Parser] Starting Langium parse`);let n=c.parse(e);if(n.lexerErrors.length>0||n.parserErrors.length>0)throw new t(n);let i=n.value;r.debug(`[ABNF Parser] Parsed rules:`,i.rules.length),h(i),r.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:o}},db:o,renderer:a,styles:i};export{g as diagram};
@@ -1 +1 @@
1
- import{n as e,t}from"./path-BWPyau1x.js";import{a as n,c as r,d as i,f as a,i as o,l as s,m as c,n as l,o as u,p as d,r as f,u as p}from"./dist-4WHbW7kW.js";function m(e){return e.innerRadius}function h(e){return e.outerRadius}function g(e){return e.startAngle}function _(e){return e.endAngle}function v(e){return e&&e.padAngle}function y(e,t,n,r,i,a,o,s){var c=n-e,l=r-t,u=o-i,d=s-a,f=d*c-u*l;if(!(f*f<1e-12))return f=(u*(t-a)-d*(e-i))/f,[e+f*c,t+f*l]}function b(e,t,n,r,i,a,o){var c=e-n,l=t-r,u=(o?a:-a)/d(c*c+l*l),f=u*l,p=-u*c,m=e+f,h=t+p,g=n+f,_=r+p,v=(m+g)/2,y=(h+_)/2,b=g-m,x=_-h,S=b*b+x*x,C=i-a,w=m*_-g*h,T=(x<0?-1:1)*d(s(0,C*C*S-w*w)),E=(w*x-b*T)/S,D=(-w*b-x*T)/S,O=(w*x+b*T)/S,k=(-w*b+x*T)/S,A=E-v,j=D-y,M=O-v,N=k-y;return A*A+j*j>M*M+N*N&&(E=O,D=k),{cx:E,cy:D,x01:-f,y01:-p,x11:E*(i/C-1),y11:D*(i/C-1)}}function x(){var s=m,x=h,S=e(0),C=null,w=g,T=_,E=v,D=null,O=t(k);function k(){var e,t,m=+s.apply(this,arguments),h=+x.apply(this,arguments),g=w.apply(this,arguments)-r,_=T.apply(this,arguments)-r,v=l(_-g),k=_>g;if(D||=e=O(),h<m&&(t=h,h=m,m=t),!(h>1e-12))D.moveTo(0,0);else if(v>c-1e-12)D.moveTo(h*u(g),h*a(g)),D.arc(0,0,h,g,_,!k),m>1e-12&&(D.moveTo(m*u(_),m*a(_)),D.arc(0,0,m,_,g,k));else{var A=g,j=_,M=g,N=_,P=v,F=v,I=E.apply(this,arguments)/2,L=I>1e-12&&(C?+C.apply(this,arguments):d(m*m+h*h)),R=p(l(h-m)/2,+S.apply(this,arguments)),z=R,B=R,V,H;if(L>1e-12){var U=o(L/m*a(I)),W=o(L/h*a(I));(P-=U*2)>1e-12?(U*=k?1:-1,M+=U,N-=U):(P=0,M=N=(g+_)/2),(F-=W*2)>1e-12?(W*=k?1:-1,A+=W,j-=W):(F=0,A=j=(g+_)/2)}var G=h*u(A),K=h*a(A),q=m*u(N),J=m*a(N);if(R>1e-12){var Y=h*u(j),X=h*a(j),Z=m*u(M),Q=m*a(M),$;if(v<i)if($=y(G,K,Z,Q,Y,X,q,J)){var ee=G-$[0],te=K-$[1],ne=Y-$[0],re=X-$[1],ie=1/a(f((ee*ne+te*re)/(d(ee*ee+te*te)*d(ne*ne+re*re)))/2),ae=d($[0]*$[0]+$[1]*$[1]);z=p(R,(m-ae)/(ie-1)),B=p(R,(h-ae)/(ie+1))}else z=B=0}F>1e-12?B>1e-12?(V=b(Z,Q,G,K,h,B,k),H=b(Y,X,q,J,h,B,k),D.moveTo(V.cx+V.x01,V.cy+V.y01),B<R?D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,h,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),!k),D.arc(H.cx,H.cy,B,n(H.y11,H.x11),n(H.y01,H.x01),!k))):(D.moveTo(G,K),D.arc(0,0,h,A,j,!k)):D.moveTo(G,K),!(m>1e-12)||!(P>1e-12)?D.lineTo(q,J):z>1e-12?(V=b(q,J,Y,X,m,-z,k),H=b(G,K,Z,Q,m,-z,k),D.lineTo(V.cx+V.x01,V.cy+V.y01),z<R?D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,m,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),k),D.arc(H.cx,H.cy,z,n(H.y11,H.x11),n(H.y01,H.x01),!k))):D.arc(0,0,m,N,M,k)}if(D.closePath(),e)return D=null,e+``||null}return k.centroid=function(){var e=(+s.apply(this,arguments)+ +x.apply(this,arguments))/2,t=(+w.apply(this,arguments)+ +T.apply(this,arguments))/2-i/2;return[u(t)*e,a(t)*e]},k.innerRadius=function(t){return arguments.length?(s=typeof t==`function`?t:e(+t),k):s},k.outerRadius=function(t){return arguments.length?(x=typeof t==`function`?t:e(+t),k):x},k.cornerRadius=function(t){return arguments.length?(S=typeof t==`function`?t:e(+t),k):S},k.padRadius=function(t){return arguments.length?(C=t==null?null:typeof t==`function`?t:e(+t),k):C},k.startAngle=function(t){return arguments.length?(w=typeof t==`function`?t:e(+t),k):w},k.endAngle=function(t){return arguments.length?(T=typeof t==`function`?t:e(+t),k):T},k.padAngle=function(t){return arguments.length?(E=typeof t==`function`?t:e(+t),k):E},k.context=function(e){return arguments.length?(D=e??null,k):D},k}export{x as t};
1
+ import{n as e,t}from"./path-BWPyau1x.js";import{a as n,c as r,d as i,f as a,i as o,l as s,m as c,n as l,o as u,p as d,r as f,u as p}from"./dist-eoi0_oI4.js";function m(e){return e.innerRadius}function h(e){return e.outerRadius}function g(e){return e.startAngle}function _(e){return e.endAngle}function v(e){return e&&e.padAngle}function y(e,t,n,r,i,a,o,s){var c=n-e,l=r-t,u=o-i,d=s-a,f=d*c-u*l;if(!(f*f<1e-12))return f=(u*(t-a)-d*(e-i))/f,[e+f*c,t+f*l]}function b(e,t,n,r,i,a,o){var c=e-n,l=t-r,u=(o?a:-a)/d(c*c+l*l),f=u*l,p=-u*c,m=e+f,h=t+p,g=n+f,_=r+p,v=(m+g)/2,y=(h+_)/2,b=g-m,x=_-h,S=b*b+x*x,C=i-a,w=m*_-g*h,T=(x<0?-1:1)*d(s(0,C*C*S-w*w)),E=(w*x-b*T)/S,D=(-w*b-x*T)/S,O=(w*x+b*T)/S,k=(-w*b+x*T)/S,A=E-v,j=D-y,M=O-v,N=k-y;return A*A+j*j>M*M+N*N&&(E=O,D=k),{cx:E,cy:D,x01:-f,y01:-p,x11:E*(i/C-1),y11:D*(i/C-1)}}function x(){var s=m,x=h,S=e(0),C=null,w=g,T=_,E=v,D=null,O=t(k);function k(){var e,t,m=+s.apply(this,arguments),h=+x.apply(this,arguments),g=w.apply(this,arguments)-r,_=T.apply(this,arguments)-r,v=l(_-g),k=_>g;if(D||=e=O(),h<m&&(t=h,h=m,m=t),!(h>1e-12))D.moveTo(0,0);else if(v>c-1e-12)D.moveTo(h*u(g),h*a(g)),D.arc(0,0,h,g,_,!k),m>1e-12&&(D.moveTo(m*u(_),m*a(_)),D.arc(0,0,m,_,g,k));else{var A=g,j=_,M=g,N=_,P=v,F=v,I=E.apply(this,arguments)/2,L=I>1e-12&&(C?+C.apply(this,arguments):d(m*m+h*h)),R=p(l(h-m)/2,+S.apply(this,arguments)),z=R,B=R,V,H;if(L>1e-12){var U=o(L/m*a(I)),W=o(L/h*a(I));(P-=U*2)>1e-12?(U*=k?1:-1,M+=U,N-=U):(P=0,M=N=(g+_)/2),(F-=W*2)>1e-12?(W*=k?1:-1,A+=W,j-=W):(F=0,A=j=(g+_)/2)}var G=h*u(A),K=h*a(A),q=m*u(N),J=m*a(N);if(R>1e-12){var Y=h*u(j),X=h*a(j),Z=m*u(M),Q=m*a(M),$;if(v<i)if($=y(G,K,Z,Q,Y,X,q,J)){var ee=G-$[0],te=K-$[1],ne=Y-$[0],re=X-$[1],ie=1/a(f((ee*ne+te*re)/(d(ee*ee+te*te)*d(ne*ne+re*re)))/2),ae=d($[0]*$[0]+$[1]*$[1]);z=p(R,(m-ae)/(ie-1)),B=p(R,(h-ae)/(ie+1))}else z=B=0}F>1e-12?B>1e-12?(V=b(Z,Q,G,K,h,B,k),H=b(Y,X,q,J,h,B,k),D.moveTo(V.cx+V.x01,V.cy+V.y01),B<R?D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,h,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),!k),D.arc(H.cx,H.cy,B,n(H.y11,H.x11),n(H.y01,H.x01),!k))):(D.moveTo(G,K),D.arc(0,0,h,A,j,!k)):D.moveTo(G,K),!(m>1e-12)||!(P>1e-12)?D.lineTo(q,J):z>1e-12?(V=b(q,J,Y,X,m,-z,k),H=b(G,K,Z,Q,m,-z,k),D.lineTo(V.cx+V.x01,V.cy+V.y01),z<R?D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,m,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),k),D.arc(H.cx,H.cy,z,n(H.y11,H.x11),n(H.y01,H.x01),!k))):D.arc(0,0,m,N,M,k)}if(D.closePath(),e)return D=null,e+``||null}return k.centroid=function(){var e=(+s.apply(this,arguments)+ +x.apply(this,arguments))/2,t=(+w.apply(this,arguments)+ +T.apply(this,arguments))/2-i/2;return[u(t)*e,a(t)*e]},k.innerRadius=function(t){return arguments.length?(s=typeof t==`function`?t:e(+t),k):s},k.outerRadius=function(t){return arguments.length?(x=typeof t==`function`?t:e(+t),k):x},k.cornerRadius=function(t){return arguments.length?(S=typeof t==`function`?t:e(+t),k):S},k.padRadius=function(t){return arguments.length?(C=t==null?null:typeof t==`function`?t:e(+t),k):C},k.startAngle=function(t){return arguments.length?(w=typeof t==`function`?t:e(+t),k):w},k.endAngle=function(t){return arguments.length?(T=typeof t==`function`?t:e(+t),k):T},k.padAngle=function(t){return arguments.length?(E=typeof t==`function`?t:e(+t),k):E},k.context=function(e){return arguments.length?(D=e??null,k):D},k}export{x as t};
@@ -0,0 +1 @@
1
+ import"./chunk-KEIR6QF5-BfrZ3jm6.js";import{M as e}from"./mermaid-parser.core-BqDBKvZM.js";export{e as createArchitectureServices};