glimmervoid 0.31.0 → 0.32.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/dist/bin/glimmervoid.js +18 -14
- package/dist/chunks/{adapters-ClA_GbtA.js → adapters-BU74M4QZ.js} +1 -1
- package/dist/chunks/{adapters-gn7ulNO4.js → adapters-CoC18rdt.js} +28 -23
- package/dist/chunks/{agent-api-cli-DAA7Jx8N.js → agent-api-cli-V_BkYhBI.js} +12 -5
- package/dist/chunks/agent-api-core-B3YI8SYs.js +192 -0
- package/dist/chunks/{agent-setup-cli-CiJSDWSo.js → agent-setup-cli-D4956BfN.js} +1 -1
- package/dist/chunks/child-process-safe-B3zcPdFM.js +2 -0
- package/dist/chunks/{child-process-safe-Ch-Zgxqs.js → child-process-safe-DDELk9XC.js} +2 -1
- package/dist/chunks/{config-W1Sv-iPK.js → config-CZ4H51D0.js} +20 -6
- package/dist/chunks/{config-store-BCy4FHNG.js → config-store-BVtdHkDK.js} +14 -5
- package/dist/chunks/config-store-Cp62jN1O.js +2 -0
- package/dist/chunks/{contracts-3LkrilQX.js → contracts-DXujp-Zn.js} +60 -7
- package/dist/chunks/git-version-CrLW4a6r.js +58 -0
- package/dist/chunks/{grok-CXKeSt2z.js → grok-C4lzPFEg.js} +1 -2
- package/dist/chunks/{knowledge-graph-cli-D2tt5hPn.js → knowledge-graph-cli-Bjy9_kv5.js} +2 -2
- package/dist/chunks/{main-DyTCWIu2.js → main-DSbpYn2Y.js} +3337 -1965
- package/dist/chunks/{pair-cli-BbCBfd6l.js → pair-cli-CKn-wUw9.js} +2 -2
- package/dist/chunks/{remote-config-DKIH_VxM.js → remote-config-DP44Ybt9.js} +2 -2
- package/dist/chunks/rtk-resolver-CIVLE_xk.js +2 -0
- package/dist/chunks/{rtk-resolver-BGDzw5XK.js → rtk-resolver-jJxy_Mrt.js} +1 -1
- package/dist/chunks/{sandbox-deps-BPKE-ylr.js → sandbox-deps-DuaNFq7n.js} +1 -1
- package/dist/chunks/{session-fc4pFbon.js → session-B8fJb_Or.js} +19 -2
- package/dist/chunks/{visions-cli-CT5rjiwf.js → visions-cli-BhFdym5n.js} +1 -1
- package/dist/chunks/{visions-setup-BmOkI-QE.js → visions-setup-CfgNHiG3.js} +1 -1
- package/dist/client/assets/index-C_XKsDFx.css +1 -0
- package/dist/client/assets/index-CoqWjYxP.js +254 -0
- package/dist/client/index.html +2 -2
- package/dist/scripts/postinstall-path-check.js +1 -1
- package/dist/server/index.js +1 -1
- package/dist/session/hook-tool-relay.js +1 -1
- package/dist/session/sandbox-open-launcher.js +1 -1
- package/dist/session/statusline-relay.js +1 -1
- package/package.json +1 -1
- package/dist/chunks/agent-api-core-hVcT26JW.js +0 -112
- package/dist/chunks/child-process-safe-BKPZ-5qQ.js +0 -2
- package/dist/chunks/config-store-DbBp7LJZ.js +0 -2
- package/dist/chunks/rtk-resolver-D4Nke1Fr.js +0 -2
- package/dist/client/assets/index-C6KD8lgZ.css +0 -1
- package/dist/client/assets/index-CThQEAEy.js +0 -249
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);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-
|
|
11
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
10
|
+
<script type="module" crossorigin src="/assets/index-CoqWjYxP.js"></script>
|
|
11
|
+
<link rel="stylesheet" crossorigin href="/assets/index-C_XKsDFx.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-DuaNFq7n.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,4 +1,4 @@
|
|
|
1
|
-
import { o as spawn } from "../chunks/child-process-safe-
|
|
1
|
+
import { o as spawn } from "../chunks/child-process-safe-DDELk9XC.js";
|
|
2
2
|
import { t as readStdin } from "../chunks/relay-stdin-CpHvLu6M.js";
|
|
3
3
|
import { a as SANE_YOLO_PATH_ENV, n as RTK_PATH_ENV, r as normalizeRtkHookResponse } from "../chunks/rtk-hook-core-BmEz2aq9.js";
|
|
4
4
|
//#region session/hook-tool-relay.ts
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { r as errorMessage } from "../chunks/text-DoirglWV.js";
|
|
2
|
-
import { o as spawn } from "../chunks/child-process-safe-
|
|
2
|
+
import { o as spawn } from "../chunks/child-process-safe-DDELk9XC.js";
|
|
3
3
|
import fs from "node:fs";
|
|
4
4
|
import { FilesystemConfigSchema, SandboxManager } from "@anthropic-ai/sandbox-runtime";
|
|
5
5
|
//#region session/sandbox-open-launcher.ts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { o as spawn } from "../chunks/child-process-safe-
|
|
1
|
+
import { o as spawn } from "../chunks/child-process-safe-DDELk9XC.js";
|
|
2
2
|
import { t as readStdin } from "../chunks/relay-stdin-CpHvLu6M.js";
|
|
3
3
|
import { t as postPayload } from "../chunks/loopback-post-DepQfdcM.js";
|
|
4
4
|
import { n as isRecord } from "../chunks/coerce-NSst8oRP.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "glimmervoid",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.32.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",
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import { a as AgentDispatchRequest, i as AgentAttentionRequest, o as AgentSpawnRequest, t as AGENT_API_VERBS } from "./session-fc4pFbon.js";
|
|
2
|
-
import crypto from "node:crypto";
|
|
3
|
-
var MAX_SPAWNS_IN_FLIGHT = 1;
|
|
4
|
-
var SPAWNABLE_DEPTH = 0;
|
|
5
|
-
var REFUSAL_REASON = "unknown session";
|
|
6
|
-
var INVALID_BODY_STATUS = 400;
|
|
7
|
-
function tokensMatch(presented, expected) {
|
|
8
|
-
if (presented.length !== expected.length) return false;
|
|
9
|
-
try {
|
|
10
|
-
return crypto.timingSafeEqual(Buffer.from(presented, "utf8"), Buffer.from(expected, "utf8"));
|
|
11
|
-
} catch {
|
|
12
|
-
return false;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
function refused() {
|
|
16
|
-
return {
|
|
17
|
-
ok: false,
|
|
18
|
-
status: 404,
|
|
19
|
-
reason: REFUSAL_REASON
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
function decideAgentRequest({ sessionId, presentedToken, expectedToken, isLoopback, enabled }) {
|
|
23
|
-
if (!enabled) return refused();
|
|
24
|
-
if (!isLoopback) return refused();
|
|
25
|
-
if (!sessionId) return refused();
|
|
26
|
-
if (!expectedToken) return refused();
|
|
27
|
-
if (!presentedToken) return refused();
|
|
28
|
-
if (!tokensMatch(presentedToken, expectedToken)) return refused();
|
|
29
|
-
return { ok: true };
|
|
30
|
-
}
|
|
31
|
-
function decideSpawnAllowance({ liveChildren, lifetimeSpawns, inFlight, depth }) {
|
|
32
|
-
if (depth !== SPAWNABLE_DEPTH) return {
|
|
33
|
-
ok: false,
|
|
34
|
-
status: 403,
|
|
35
|
-
reason: "a spawned session may not spawn another"
|
|
36
|
-
};
|
|
37
|
-
if (inFlight >= MAX_SPAWNS_IN_FLIGHT) return {
|
|
38
|
-
ok: false,
|
|
39
|
-
status: 429,
|
|
40
|
-
reason: "a spawn is already in flight"
|
|
41
|
-
};
|
|
42
|
-
if (liveChildren >= 3) return {
|
|
43
|
-
ok: false,
|
|
44
|
-
status: 429,
|
|
45
|
-
reason: `at most 3 spawned sessions may be live at once`
|
|
46
|
-
};
|
|
47
|
-
if (lifetimeSpawns >= 10) return {
|
|
48
|
-
ok: false,
|
|
49
|
-
status: 429,
|
|
50
|
-
reason: `this session has used its 10 spawns`
|
|
51
|
-
};
|
|
52
|
-
return { ok: true };
|
|
53
|
-
}
|
|
54
|
-
function isAgentApiVerb(verb) {
|
|
55
|
-
return AGENT_API_VERBS.includes(verb);
|
|
56
|
-
}
|
|
57
|
-
function refuseInvalidBody(issues) {
|
|
58
|
-
return {
|
|
59
|
-
ok: false,
|
|
60
|
-
status: INVALID_BODY_STATUS,
|
|
61
|
-
error: issues[0]?.message || "invalid request"
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
function parseAgentVerb(verb, payload) {
|
|
65
|
-
if (!isAgentApiVerb(verb)) return {
|
|
66
|
-
ok: false,
|
|
67
|
-
status: 404,
|
|
68
|
-
error: REFUSAL_REASON
|
|
69
|
-
};
|
|
70
|
-
if (verb === "dispatch") {
|
|
71
|
-
const parsed = AgentDispatchRequest.safeParse(payload);
|
|
72
|
-
if (!parsed.success) return refuseInvalidBody(parsed.error.issues);
|
|
73
|
-
return {
|
|
74
|
-
ok: true,
|
|
75
|
-
verb,
|
|
76
|
-
request: parsed.data
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
if (verb === "board") return {
|
|
80
|
-
ok: true,
|
|
81
|
-
verb
|
|
82
|
-
};
|
|
83
|
-
if (verb === "attention") {
|
|
84
|
-
const parsed = AgentAttentionRequest.safeParse(payload);
|
|
85
|
-
if (!parsed.success) return refuseInvalidBody(parsed.error.issues);
|
|
86
|
-
return {
|
|
87
|
-
ok: true,
|
|
88
|
-
verb,
|
|
89
|
-
request: parsed.data
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
const parsed = AgentSpawnRequest.safeParse(payload);
|
|
93
|
-
if (!parsed.success) return refuseInvalidBody(parsed.error.issues);
|
|
94
|
-
return {
|
|
95
|
-
ok: true,
|
|
96
|
-
verb,
|
|
97
|
-
request: parsed.data
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
function deriveChildSessionName(parentName, existingNames) {
|
|
101
|
-
const base = `${String(parentName || "").trim() || "session"} agent`;
|
|
102
|
-
const taken = new Set(existingNames);
|
|
103
|
-
let candidate = base;
|
|
104
|
-
let suffix = 1;
|
|
105
|
-
while (taken.has(candidate)) {
|
|
106
|
-
suffix += 1;
|
|
107
|
-
candidate = `${base} ${suffix}`;
|
|
108
|
-
}
|
|
109
|
-
return candidate;
|
|
110
|
-
}
|
|
111
|
-
//#endregion
|
|
112
|
-
export { isAgentApiVerb as a, deriveChildSessionName as i, decideAgentRequest as n, parseAgentVerb as o, decideSpawnAllowance as r, REFUSAL_REASON as t };
|