glimmervoid 0.34.0 → 0.34.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.
@@ -7,7 +7,7 @@
7
7
  <link rel="icon" type="image/svg+xml" href="/assets/favicon-CKygeLwW.svg">
8
8
  <title>Glimmervoid</title>
9
9
  <style>html,body{background:var(--bg,#0a0810);height:100%;color:var(--text,#c8c0e0);font-family:var(--font-mono,"CommitMono", "Cascadia Code", "Fira Code", "Consolas", "Menlo", monospace);margin:0;padding:0}.app-shell{display:none}html:not([data-layout=phone]) .app-ready .app-shell{display:contents}.loading-screen{z-index:9999;background:#0a0810;flex-direction:column;justify-content:center;align-items:center;gap:20px;transition:opacity .3s;display:flex;position:fixed;inset:0}.loading-screen.fade-out{opacity:0;pointer-events:none}.loading-title{letter-spacing:.1em;color:#e8e0ff;text-transform:uppercase;font-family:CommitMono,Cascadia Code,Fira Code,Consolas,Menlo,monospace;font-size:20px;font-weight:700}.loading-title:before{content:"▸";color:#c084fc}.loading-status{color:#8276b0;letter-spacing:.04em;font-family:CommitMono,Cascadia Code,Fira Code,Consolas,Menlo,monospace;font-size:12px}.loading-spinner{border:2px solid #2a2440;border-top-color:#c084fc;border-radius:50%;width:28px;height:28px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.shutdown-screen{z-index:9999;-webkit-backdrop-filter:blur();backdrop-filter:blur();pointer-events:none;opacity:0;background:#0a081000;flex-direction:column;justify-content:center;align-items:center;gap:20px;transition:background .4s,-webkit-backdrop-filter .4s,backdrop-filter .4s,opacity .3s;display:flex;position:fixed;inset:0}.shutdown-screen.active{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);pointer-events:auto;opacity:1;background:#0a0810eb}.shutdown-status{color:#8276b0;letter-spacing:.04em;font-family:CommitMono,Cascadia Code,Fira Code,Consolas,Menlo,monospace;font-size:12px;transition:color .3s}.shutdown-screen.done .loading-spinner{opacity:.3;border-color:#2a2440;animation:none}.shutdown-screen.done .shutdown-status{color:#4a4268}</style>
10
- <script type="module" crossorigin src="/assets/index-BiTwrj1H.js"></script>
10
+ <script type="module" crossorigin src="/assets/index-b9goyXSa.js"></script>
11
11
  <link rel="stylesheet" crossorigin href="/assets/index-BxU3Ww0L.css">
12
12
  </head>
13
13
  <body>
@@ -87,6 +87,6 @@ if (!nodePty.ok) {
87
87
  }));
88
88
  process.exit(1);
89
89
  }
90
- await import("../chunks/main-Dh4udE7P.js");
90
+ await import("../chunks/main-VMWdsGC6.js");
91
91
  //#endregion
92
92
  export {};
@@ -31,7 +31,7 @@ var FORWARDED_SIGNALS = [
31
31
  "SIGTERM",
32
32
  "SIGHUP"
33
33
  ];
34
- var OPEN_NETWORK = { allowAllUnixSockets: false };
34
+ var ANY_TERMINAL_SCOPE = "any";
35
35
  var DEVICE_FOLDER = "/dev";
36
36
  var PSEUDO_TERMINAL_PREFIX = "ttys";
37
37
  function fieldOf(record, field) {
@@ -41,14 +41,28 @@ function fieldOf(record, field) {
41
41
  function shellQuote(word) {
42
42
  return `'${word.replace(/'/g, `'\\''`)}'`;
43
43
  }
44
+ function openNetworkOf(policy) {
45
+ const network = fieldOf(policy, "network");
46
+ const machServices = fieldOf(network, "allowMachLookup");
47
+ const allowMachLookup = Array.isArray(machServices) ? machServices.filter((service) => typeof service === "string") : [];
48
+ return {
49
+ allowAllUnixSockets: fieldOf(network, "allowAllUnixSockets") === true,
50
+ ...allowMachLookup.length === 0 ? {} : { allowMachLookup }
51
+ };
52
+ }
44
53
  function readOpenPolicy(policyPath) {
45
54
  const policy = JSON.parse(fs.readFileSync(policyPath, "utf8"));
46
55
  if (fieldOf(fieldOf(policy, "network"), "allowedDomains") !== void 0) throw new Error("a policy with a domain list must run through the sandbox runtime CLI");
56
+ const filesystem = FilesystemConfigSchema.parse(fieldOf(policy, "filesystem"));
47
57
  return {
48
- network: OPEN_NETWORK,
49
- filesystem: FilesystemConfigSchema.parse(fieldOf(policy, "filesystem")),
50
- allowPty: fieldOf(policy, "allowPty") === true,
51
- enableWeakerNetworkIsolation: true
58
+ runtimeConfig: {
59
+ network: openNetworkOf(policy),
60
+ filesystem,
61
+ allowPty: fieldOf(policy, "allowPty") === true,
62
+ enableWeakerNetworkIsolation: true,
63
+ allowAppleEvents: fieldOf(policy, "allowAppleEvents") === true
64
+ },
65
+ isAnyTerminalAllowed: fieldOf(policy, "terminalScope") === ANY_TERMINAL_SCOPE
52
66
  };
53
67
  }
54
68
  function ownTerminalPath() {
@@ -58,8 +72,8 @@ function ownTerminalPath() {
58
72
  if (ownName === void 0) throw new Error("the launcher terminal is not a pseudo-terminal under /dev");
59
73
  return path.join(DEVICE_FOLDER, ownName);
60
74
  }
61
- function sandboxArgv(argv, policy) {
62
- if (policy.allowPty !== true || process.platform !== "darwin") return argv;
75
+ function sandboxArgv(argv, { runtimeConfig, isAnyTerminalAllowed }) {
76
+ if (runtimeConfig.allowPty !== true || isAnyTerminalAllowed || process.platform !== "darwin") return argv;
63
77
  const confinement = confineToOwnTerminal(argv, ownTerminalPath());
64
78
  if (!confinement.ok) throw new Error(confinement.reason);
65
79
  return confinement.argv;
@@ -89,7 +103,7 @@ async function launchInOpenNetworkSandbox() {
89
103
  const exitWhenInterrupted = () => {
90
104
  if (beforeSpawn.interruptedBy !== null) process.exit(exitCodeFor(null, beforeSpawn.interruptedBy));
91
105
  };
92
- await SandboxManager.initialize(openPolicy);
106
+ await SandboxManager.initialize(openPolicy.runtimeConfig);
93
107
  const commandLine = command.map(shellQuote).join(" ");
94
108
  const wrapped = await SandboxManager.wrapWithSandboxArgv(commandLine, void 0, void 0, interrupted.signal).catch((wrapFailure) => {
95
109
  exitWhenInterrupted();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "glimmervoid",
3
- "version": "0.34.0",
3
+ "version": "0.34.1",
4
4
  "description": "Mission control for coding agents: run and supervise Claude Code, Codex and Grok sessions in parallel git worktrees from one local browser dashboard",
5
5
  "main": "dist/server/index.js",
6
6
  "type": "module",
@@ -1,2 +0,0 @@
1
- import { c as loadConfigFile } from "./config-store-CggAQLUB.js";
2
- export { loadConfigFile };