glimmervoid 0.29.1 → 0.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -9
- package/dist/bin/glimmervoid.js +28 -12
- package/dist/chunks/{adapters-DIavI9-i.js → adapters-Dho1VSY5.js} +1 -1
- package/dist/chunks/{adapters-Dlvu1FVB.js → adapters-zPDx1Xox.js} +23 -14
- package/dist/chunks/{agent-api-cli-ClOzm28U.js → agent-api-cli-D0MmtEdz.js} +2 -2
- package/dist/chunks/{agent-api-core-D6LHrpSL.js → agent-api-core-Dz0r21y9.js} +1 -1
- package/dist/chunks/{agent-setup-cli-C1CQ8Nkk.js → agent-setup-cli-B5Atxr3F.js} +5 -3
- package/dist/chunks/{child-process-safe-Cz22RwlG.js → child-process-safe-DRGsp0TE.js} +1 -1
- package/dist/chunks/child-process-safe-DvQjXsgz.js +2 -0
- package/dist/chunks/config-store-CC8T3okC.js +2 -0
- package/dist/chunks/{config-store-DtPUFVaO.js → config-store-mm7MgzoL.js} +13 -1
- package/dist/chunks/{contracts-JKChPhZ0.js → contracts-DGkKNh9W.js} +25 -3
- package/dist/chunks/{grok-COekzawt.js → grok-DuU8xVLZ.js} +54 -25
- package/dist/chunks/hook-command-core-DclEoE9e.js +14 -0
- package/dist/chunks/hook-tools-pSJia7ks.js +74 -0
- package/dist/chunks/{main-BVDjy7vH.js → main-CuIZQPhZ.js} +975 -156
- package/dist/chunks/{pair-cli-BQQnhkkc.js → pair-cli-w-gCAF-1.js} +2 -2
- package/dist/chunks/{remote-config-BHoDFCpo.js → remote-config-C2ytQwrs.js} +8 -4
- package/dist/chunks/rtk-hook-core-Bl6gYHPN.js +133 -0
- package/dist/chunks/rtk-resolver-CLo-gZzw.js +21 -0
- package/dist/chunks/rtk-resolver-CMQAidlI.js +2 -0
- package/dist/chunks/{runtime-paths-CVvq20A4.js → runtime-paths-Ci_ksSkj.js} +26 -2
- package/dist/chunks/runtime-paths-JLrZ3wyi.js +2 -0
- package/dist/chunks/{sandbox-deps-BwvbDBDl.js → sandbox-deps-Dd5-kZnf.js} +1 -1
- package/dist/chunks/{session-CJtOveHl.js → session-Cez8aIWg.js} +3 -1
- package/dist/chunks/{visions-cli-DUZnopGY.js → visions-cli-BXQFIBCX.js} +1 -1
- package/dist/chunks/{visions-setup-C_kJobsy.js → visions-setup-CvVnOe1r.js} +2 -2
- package/dist/client/assets/index-B1MFijjb.css +1 -0
- package/dist/client/assets/index-CU1iPPdn.js +249 -0
- package/dist/client/index.html +2 -2
- package/dist/scripts/postinstall-path-check.js +1 -1
- package/dist/server/index.js +2 -2
- package/dist/session/{rtk-relay.js → hook-tool-relay.js} +32 -15
- package/dist/session/statusline-relay.js +1 -1
- package/package.json +2 -1
- package/dist/chunks/config-store-DtUGwi4-.js +0 -2
- package/dist/chunks/rtk-hook-core-DRYrKwYP.js +0 -26
- package/dist/chunks/rtk-resolver-DDVVNRBT.js +0 -2
- package/dist/chunks/rtk-resolver-oGmO-ew7.js +0 -58
- package/dist/client/assets/index-BTwYgSAH.js +0 -248
- package/dist/client/assets/index-DgA708PE.css +0 -1
package/dist/client/index.html
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
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);margin:0;padding:0;font-family:Segoe UI,system-ui,sans-serif}.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: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: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: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-
|
|
11
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
10
|
+
<script type="module" crossorigin src="/assets/index-CU1iPPdn.js"></script>
|
|
11
|
+
<link rel="stylesheet" crossorigin href="/assets/index-B1MFijjb.css">
|
|
12
12
|
</head>
|
|
13
13
|
<body>
|
|
14
14
|
<div class="loading-screen" id="loading-screen">
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as sandboxInstallNotice, r as probeSandboxDependencies } from "../chunks/sandbox-deps-
|
|
1
|
+
import { a as sandboxInstallNotice, r as probeSandboxDependencies } from "../chunks/sandbox-deps-Dd5-kZnf.js";
|
|
2
2
|
import { n as npmGlobalBinDir, r as onPath, t as formatPathNotice } from "../chunks/path-doctor-C23VAqeu.js";
|
|
3
3
|
import os from "node:os";
|
|
4
4
|
//#region scripts/postinstall-path-check.ts
|
package/dist/server/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { a as formatNodePtyBootRefusal, t as probeNodePty } from "../chunks/node-pty-preflight-CK1knGIR.js";
|
|
2
|
-
import { a as packageRoot } from "../chunks/runtime-paths-
|
|
2
|
+
import { a as packageRoot } from "../chunks/runtime-paths-Ci_ksSkj.js";
|
|
3
3
|
import fs from "node:fs";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import { pathToFileURL } from "node:url";
|
|
@@ -87,6 +87,6 @@ if (!nodePty.ok) {
|
|
|
87
87
|
}));
|
|
88
88
|
process.exit(1);
|
|
89
89
|
}
|
|
90
|
-
await import("../chunks/main-
|
|
90
|
+
await import("../chunks/main-CuIZQPhZ.js");
|
|
91
91
|
//#endregion
|
|
92
92
|
export {};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { o as spawn } from "../chunks/child-process-safe-DRGsp0TE.js";
|
|
2
2
|
import { t as readStdin } from "../chunks/relay-stdin-CpHvLu6M.js";
|
|
3
|
-
import { n as RTK_PATH_ENV, r as normalizeRtkHookResponse } from "../chunks/rtk-hook-core-
|
|
4
|
-
//#region session/
|
|
3
|
+
import { a as SANE_YOLO_PATH_ENV, n as RTK_PATH_ENV, r as normalizeRtkHookResponse } from "../chunks/rtk-hook-core-Bl6gYHPN.js";
|
|
4
|
+
//#region session/hook-tool-relay.ts
|
|
5
5
|
var RTK_TIMEOUT_MS = 3e3;
|
|
6
|
-
function
|
|
6
|
+
function runHookTool(toolId, binPath, body) {
|
|
7
7
|
return new Promise((resolve) => {
|
|
8
8
|
let settled = false;
|
|
9
9
|
let timer = null;
|
|
@@ -15,7 +15,12 @@ function runRtk(rtkPath, body) {
|
|
|
15
15
|
};
|
|
16
16
|
let child;
|
|
17
17
|
try {
|
|
18
|
-
|
|
18
|
+
const command = toolId === "rtk" ? binPath : process.execPath;
|
|
19
|
+
child = spawn(command, toolId === "rtk" ? ["hook", "claude"] : [
|
|
20
|
+
binPath,
|
|
21
|
+
"hook",
|
|
22
|
+
"--grok-build"
|
|
23
|
+
], { stdio: [
|
|
19
24
|
"pipe",
|
|
20
25
|
"pipe",
|
|
21
26
|
"ignore"
|
|
@@ -64,27 +69,39 @@ function runRtk(rtkPath, body) {
|
|
|
64
69
|
}
|
|
65
70
|
});
|
|
66
71
|
}
|
|
67
|
-
async function main(env = process.env, stdin = process.stdin, stdout = process.stdout, runner =
|
|
68
|
-
|
|
69
|
-
|
|
72
|
+
async function main(toolId = process.argv[2] ?? "", env = process.env, stdin = process.stdin, stdout = process.stdout, runner = (binPath, body) => runHookTool(toolId === "rtk" ? "rtk" : "saneYolo", binPath, body)) {
|
|
73
|
+
if (toolId !== "rtk" && toolId !== "saneYolo") return {
|
|
74
|
+
code: 0,
|
|
75
|
+
reason: "unknown-tool"
|
|
76
|
+
};
|
|
77
|
+
const configuredPath = env[toolId === "rtk" ? RTK_PATH_ENV : SANE_YOLO_PATH_ENV];
|
|
78
|
+
const binPath = typeof configuredPath === "string" ? configuredPath.trim() : "";
|
|
79
|
+
if (!binPath) return {
|
|
80
|
+
code: 0,
|
|
81
|
+
reason: "no-tool-path"
|
|
82
|
+
};
|
|
70
83
|
const body = await readStdin(stdin);
|
|
71
|
-
if (
|
|
84
|
+
if (body.length === 0) return {
|
|
72
85
|
code: 0,
|
|
73
|
-
reason:
|
|
86
|
+
reason: "empty-payload"
|
|
74
87
|
};
|
|
75
|
-
const
|
|
88
|
+
const toolOutput = await runner(binPath, body);
|
|
89
|
+
const response = toolId === "rtk" ? normalizeRtkHookResponse(toolOutput) : toolOutput;
|
|
76
90
|
if (!response) return {
|
|
77
91
|
code: 0,
|
|
78
|
-
reason: "no-
|
|
92
|
+
reason: "no-response"
|
|
79
93
|
};
|
|
80
94
|
try {
|
|
81
|
-
stdout.write(`${response}\n`);
|
|
95
|
+
stdout.write(toolId === "rtk" ? `${response}\n` : response);
|
|
82
96
|
} catch {}
|
|
83
97
|
return {
|
|
84
98
|
code: 0,
|
|
85
|
-
reason: "
|
|
99
|
+
reason: "forwarded"
|
|
86
100
|
};
|
|
87
101
|
}
|
|
88
102
|
if (process.argv[1] === import.meta.filename) main().then((result) => process.exit(result.code)).catch(() => process.exit(0));
|
|
103
|
+
function runRtk(binPath, body) {
|
|
104
|
+
return runHookTool("rtk", binPath, body);
|
|
105
|
+
}
|
|
89
106
|
//#endregion
|
|
90
|
-
export { RTK_TIMEOUT_MS, main, runRtk };
|
|
107
|
+
export { RTK_TIMEOUT_MS, main, runHookTool, runRtk };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { o as spawn } from "../chunks/child-process-safe-DRGsp0TE.js";
|
|
2
2
|
import { t as readStdin } from "../chunks/relay-stdin-CpHvLu6M.js";
|
|
3
3
|
import { t as postPayload } from "../chunks/loopback-post-C7C22eYi.js";
|
|
4
4
|
//#region session/statusline-relay.ts
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "glimmervoid",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.30.0",
|
|
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",
|
|
@@ -77,6 +77,7 @@
|
|
|
77
77
|
"@xterm/addon-webgl": "^0.19.0",
|
|
78
78
|
"@xterm/headless": "^6.0.0",
|
|
79
79
|
"@xterm/xterm": "^6.0.0",
|
|
80
|
+
"cc-safety-net": "2.6.0",
|
|
80
81
|
"express": "^5.2.1",
|
|
81
82
|
"node-pty": "^1.1.0",
|
|
82
83
|
"ws": "^8.22.0",
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
//#region session/core/rtk-hook-core.ts
|
|
2
|
-
var RTK_PATH_ENV = "GLIMMERVOID_RTK_PATH";
|
|
3
|
-
var MAX_RTK_STDOUT_BYTES = 65536;
|
|
4
|
-
function isPlainObject(value) {
|
|
5
|
-
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
6
|
-
}
|
|
7
|
-
function normalizeRtkHookResponse(stdoutText) {
|
|
8
|
-
if (typeof stdoutText !== "string") return "";
|
|
9
|
-
const trimmed = stdoutText.trim();
|
|
10
|
-
if (!trimmed) return "";
|
|
11
|
-
if (Buffer.byteLength(trimmed) > 65536) return "";
|
|
12
|
-
let parsed = null;
|
|
13
|
-
try {
|
|
14
|
-
parsed = JSON.parse(trimmed);
|
|
15
|
-
} catch {
|
|
16
|
-
return "";
|
|
17
|
-
}
|
|
18
|
-
if (!isPlainObject(parsed)) return "";
|
|
19
|
-
const hookSpecificOutput = parsed.hookSpecificOutput;
|
|
20
|
-
if (isPlainObject(hookSpecificOutput) && isPlainObject(hookSpecificOutput.updatedInput)) {
|
|
21
|
-
if (typeof hookSpecificOutput.permissionDecision !== "string") hookSpecificOutput.permissionDecision = "allow";
|
|
22
|
-
}
|
|
23
|
-
return JSON.stringify(parsed);
|
|
24
|
-
}
|
|
25
|
-
//#endregion
|
|
26
|
-
export { RTK_PATH_ENV as n, normalizeRtkHookResponse as r, MAX_RTK_STDOUT_BYTES as t };
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { i as execSync } from "./child-process-safe-Cz22RwlG.js";
|
|
2
|
-
import { n as glimmervoidHomeDir } from "./config-path-core-DFt-TemS.js";
|
|
3
|
-
import { r as resolvePathCommandMatches } from "./spawn-command-Cc40FiZI.js";
|
|
4
|
-
import fs from "node:fs";
|
|
5
|
-
import path from "node:path";
|
|
6
|
-
import os from "node:os";
|
|
7
|
-
//#region session/core/rtk-command.ts
|
|
8
|
-
function firstExistingFile(candidates, fsApi) {
|
|
9
|
-
for (const candidate of candidates) try {
|
|
10
|
-
if (fsApi.statSync(candidate).isFile()) return path.resolve(candidate);
|
|
11
|
-
} catch {}
|
|
12
|
-
return null;
|
|
13
|
-
}
|
|
14
|
-
function resolveRtkPath({ glimmervoidHome, platform, exec, fsApi }) {
|
|
15
|
-
const bundled = firstExistingFile([path.join(glimmervoidHome, "bin", "rtk.exe"), path.join(glimmervoidHome, "bin", "rtk")], fsApi);
|
|
16
|
-
if (bundled) return bundled;
|
|
17
|
-
const matches = resolvePathCommandMatches("rtk", {
|
|
18
|
-
platform,
|
|
19
|
-
exec
|
|
20
|
-
});
|
|
21
|
-
if (matches.length === 0) return null;
|
|
22
|
-
const firstMatch = matches[0];
|
|
23
|
-
if (!firstMatch) return null;
|
|
24
|
-
return path.resolve(firstMatch);
|
|
25
|
-
}
|
|
26
|
-
function quoteCommandPath(commandPath) {
|
|
27
|
-
if (!/\s/.test(commandPath)) return commandPath;
|
|
28
|
-
return `"${commandPath}"`;
|
|
29
|
-
}
|
|
30
|
-
function toForwardSlashes(commandPath) {
|
|
31
|
-
return commandPath.replace(/\\/g, "/");
|
|
32
|
-
}
|
|
33
|
-
function buildRtkHookEntry(rtkPath) {
|
|
34
|
-
return {
|
|
35
|
-
matcher: "Bash",
|
|
36
|
-
hooks: [{
|
|
37
|
-
type: "command",
|
|
38
|
-
command: `${quoteCommandPath(toForwardSlashes(rtkPath))} hook claude`
|
|
39
|
-
}]
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
//#endregion
|
|
43
|
-
//#region server/rtk-resolver.ts
|
|
44
|
-
function resolveRtkPathFromSystem() {
|
|
45
|
-
return resolveRtkPath({
|
|
46
|
-
glimmervoidHome: glimmervoidHomeDir(os.homedir(), process.env),
|
|
47
|
-
platform: process.platform,
|
|
48
|
-
exec: execSync,
|
|
49
|
-
fsApi: fs
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
var cachedRtkPath = null;
|
|
53
|
-
function getRtkPath(resolve = resolveRtkPathFromSystem) {
|
|
54
|
-
if (!cachedRtkPath) cachedRtkPath = resolve();
|
|
55
|
-
return cachedRtkPath;
|
|
56
|
-
}
|
|
57
|
-
//#endregion
|
|
58
|
-
export { buildRtkHookEntry as n, getRtkPath as t };
|