glimmervoid 0.35.0 → 0.36.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 +2 -0
- package/dist/bin/glimmervoid.js +17 -12
- package/dist/chunks/{adapters-B37wqNti.js → adapters-BVozg-Lg.js} +1 -1
- package/dist/chunks/{adapters-CADejSpq.js → adapters-BdnLyJjf.js} +10 -49
- package/dist/chunks/{agent-api-cli-CRj_FYbz.js → agent-api-cli-DIqRLvu3.js} +1 -1
- package/dist/chunks/{agent-api-cli-vGwstJ1j.js → agent-api-cli-d-Bgsshx.js} +3 -3
- package/dist/chunks/{agent-api-core-D1233u1U.js → agent-api-core-BUC9WND7.js} +2 -2
- package/dist/chunks/{agent-setup-cli-BTAFcckd.js → agent-setup-cli-CH7EHsAX.js} +1 -1
- package/dist/chunks/{config-rPbbL4nW.js → config-CuZ16F9W.js} +47 -771
- package/dist/chunks/config-store-LqQ7MuyV.js +4181 -0
- package/dist/chunks/config-store-tVmt_nfm.js +1 -0
- package/dist/chunks/{contracts-DjIgIuDk.js → contracts-BLZAOP57.js} +55 -6
- package/dist/chunks/{grok-KKgdSe-7.js → grok-Ch4-35_r.js} +3 -3
- package/dist/chunks/{hook-command-core-DclEoE9e.js → hook-command-core-qTNK-xMF.js} +4 -1
- package/dist/chunks/{hook-tools-UX2fmt81.js → hook-tools-BkxllUHE.js} +9 -16
- package/dist/chunks/{knowledge-graph-cli-Rj5nj87L.js → knowledge-graph-cli-DD7QvcFd.js} +1 -1
- package/dist/chunks/{main-BTI0J5QE.js → main-Rmo83Ow-.js} +3087 -834
- package/dist/chunks/{pair-cli-Dcyzv3In.js → pair-cli-DzFeAmq5.js} +2 -2
- package/dist/chunks/{remote-config-Dd1T-VJA.js → remote-config-CPdSF2Xi.js} +1 -1
- package/dist/chunks/{rtk-hook-core-BmEz2aq9.js → rtk-hook-core-VrUafGAp.js} +15 -5
- package/dist/chunks/rtk-resolver-B8BPgN9L.js +1 -0
- package/dist/chunks/{rtk-resolver-B9pzjLsM.js → rtk-resolver-C_micGrL.js} +1 -1
- package/dist/chunks/session-B8RhqQJe.js +986 -0
- package/dist/chunks/{session-routes-BYy3am9m.js → session-routes-DB5aDKsx.js} +1 -1
- package/dist/chunks/settings-cli-C2TY6hl-.js +484 -0
- package/dist/chunks/{ssh-sign-cli-DPHpT22B.js → ssh-sign-cli-C2nUwJC-.js} +2 -2
- package/dist/client/assets/index-BIaSyXwH.css +1 -0
- package/dist/client/assets/index-Ddu7M4Ad.js +259 -0
- package/dist/client/index.html +5 -3
- package/dist/server/index.js +1 -1
- package/dist/session/hook-tool-relay.js +3 -3
- package/package.json +3 -3
- package/dist/chunks/config-store-BeIxAZNn.js +0 -1
- package/dist/chunks/config-store-BtsYbNC3.js +0 -1713
- package/dist/chunks/rtk-resolver-SWU5VVM7.js +0 -1
- package/dist/chunks/session-D6xXN0UU.js +0 -232
- package/dist/client/assets/index-DE2GUmqs.css +0 -1
- package/dist/client/assets/index-Ds4ngkHp.js +0 -254
package/README.md
CHANGED
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
|
|
8
8
|
**Mission control for your coding agents. Run dozens of Claude Code, Codex and Grok sessions at once. See every one. Miss nothing.**
|
|
9
9
|
|
|
10
|
+
Website: [glimmervoid.dev](https://glimmervoid.dev)
|
|
11
|
+
|
|
10
12
|
Running more than a couple of coding agents at once turns into alt-tabbing between terminal windows, missing the exact moment one finishes or silently blocks on a prompt, and merging work you never watched happen. Glimmervoid is one browser dashboard with live terminal output for every session, exact status instead of a guess, a notification the moment an agent needs you, and per-agent git worktrees you can review and merge without leaving the page.
|
|
11
13
|
|
|
12
14
|
Glimmervoid is an agent orchestrator, sometimes called an agent manager or an agentic development environment. It is not an agent harness: Claude Code, Codex and Grok are the harnesses, the loop that turns a model into an agent. Glimmervoid runs those harnesses unmodified, as real processes in real terminals on your own machine, and supervises all of them from one screen. No cloud service, no account.
|
package/dist/bin/glimmervoid.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { o as nodePtyRebuildHint, r as firstLine, t as probeNodePty } from "../chunks/node-pty-preflight-C8QIlrtU.js";
|
|
3
3
|
import { i as errorText } from "../chunks/text-DoirglWV.js";
|
|
4
4
|
import { a as packageRoot } from "../chunks/runtime-paths-BkeftE60.js";
|
|
5
|
-
import { t as AGENT_API_VERBS } from "../chunks/session-
|
|
5
|
+
import { t as AGENT_API_VERBS } from "../chunks/session-B8RhqQJe.js";
|
|
6
6
|
import { i as execSync } from "../chunks/child-process-safe-CbQnyh7D.js";
|
|
7
7
|
import { t as renderTable } from "../chunks/ascii-figure-core-pDAwtlKO.js";
|
|
8
8
|
import { n as glimmervoidHomeDir, t as decideConfigPath } from "../chunks/config-path-core-DFt-TemS.js";
|
|
@@ -112,6 +112,7 @@ Commands:
|
|
|
112
112
|
limits From inside a Glimmervoid session, list which of these commands answer and what its guardrails block
|
|
113
113
|
ssh-sign What git runs inside a Glimmervoid session to sign a commit with the operator's forwarded ssh agent
|
|
114
114
|
kg [command] Experimental typed knowledge and task graph (Settings > Lanes > Knowledge graph)
|
|
115
|
+
settings <cmd> Read and change config.json: list, get, set, unset, search, schema (each takes --json)
|
|
115
116
|
|
|
116
117
|
Options:
|
|
117
118
|
--name <label> Label for the device being paired (with: pair)
|
|
@@ -138,33 +139,37 @@ var SUBCOMMAND_RUNNERS = new Map([
|
|
|
138
139
|
return 0;
|
|
139
140
|
}],
|
|
140
141
|
["pair", async (subcommandArgs) => {
|
|
141
|
-
const { runPairCli } = await import("../chunks/pair-cli-
|
|
142
|
+
const { runPairCli } = await import("../chunks/pair-cli-DzFeAmq5.js");
|
|
142
143
|
return runPairCli(subcommandArgs);
|
|
143
144
|
}],
|
|
144
145
|
["agent", async (subcommandArgs) => {
|
|
145
|
-
const { runAgentSetupCli } = await import("../chunks/agent-setup-cli-
|
|
146
|
+
const { runAgentSetupCli } = await import("../chunks/agent-setup-cli-CH7EHsAX.js");
|
|
146
147
|
return runAgentSetupCli(subcommandArgs);
|
|
147
148
|
}],
|
|
148
149
|
["kg", async (subcommandArgs) => {
|
|
149
|
-
const { runKnowledgeGraphCommand } = await import("../chunks/knowledge-graph-cli-
|
|
150
|
+
const { runKnowledgeGraphCommand } = await import("../chunks/knowledge-graph-cli-DD7QvcFd.js");
|
|
150
151
|
return runKnowledgeGraphCommand(subcommandArgs);
|
|
151
152
|
}],
|
|
153
|
+
["settings", async (subcommandArgs) => {
|
|
154
|
+
const { runSettingsCommand } = await import("../chunks/settings-cli-C2TY6hl-.js");
|
|
155
|
+
return runSettingsCommand(subcommandArgs);
|
|
156
|
+
}],
|
|
152
157
|
["visions", async (subcommandArgs) => {
|
|
153
158
|
const { runVisionsCli } = await import("../chunks/visions-cli-CYujESdJ.js");
|
|
154
159
|
return runVisionsCli(subcommandArgs);
|
|
155
160
|
}],
|
|
156
161
|
["ssh-sign", async (subcommandArgs) => {
|
|
157
|
-
const { runSshSignCli } = await import("../chunks/ssh-sign-cli-
|
|
162
|
+
const { runSshSignCli } = await import("../chunks/ssh-sign-cli-C2nUwJC-.js");
|
|
158
163
|
return runSshSignCli(subcommandArgs);
|
|
159
164
|
}],
|
|
160
165
|
...AGENT_API_VERBS.map((verb) => [verb, async (subcommandArgs, subcommandName) => {
|
|
161
|
-
const { runAgentApiCli } = await import("../chunks/agent-api-cli-
|
|
166
|
+
const { runAgentApiCli } = await import("../chunks/agent-api-cli-DIqRLvu3.js");
|
|
162
167
|
return runAgentApiCli([subcommandName, ...subcommandArgs]);
|
|
163
168
|
}])
|
|
164
169
|
]);
|
|
165
170
|
async function printSessionLimits() {
|
|
166
171
|
if (!process.env["GLIMMERVOID_AGENT_URL"]) return;
|
|
167
|
-
const { sessionLimitsHelpLines } = await import("../chunks/agent-api-cli-
|
|
172
|
+
const { sessionLimitsHelpLines } = await import("../chunks/agent-api-cli-DIqRLvu3.js");
|
|
168
173
|
const limitsLines = await sessionLimitsHelpLines();
|
|
169
174
|
console.log(`\n${limitsLines.join("\n")}`);
|
|
170
175
|
}
|
|
@@ -221,7 +226,7 @@ async function readDeclaredCustomAgents() {
|
|
|
221
226
|
declared: [],
|
|
222
227
|
error: null
|
|
223
228
|
};
|
|
224
|
-
const { loadConfigFile } = await import("../chunks/config-store-
|
|
229
|
+
const { loadConfigFile } = await import("../chunks/config-store-tVmt_nfm.js");
|
|
225
230
|
try {
|
|
226
231
|
const loaded = loadConfigFile(decided.path, { exitOnError: false });
|
|
227
232
|
if (!loaded.config) return {
|
|
@@ -297,7 +302,7 @@ async function runDoctor() {
|
|
|
297
302
|
}
|
|
298
303
|
switchSection("Agents");
|
|
299
304
|
try {
|
|
300
|
-
const { listAgentIds, describeAgentResolvability, setCustomAgents } = await import("../chunks/adapters-
|
|
305
|
+
const { listAgentIds, describeAgentResolvability, setCustomAgents } = await import("../chunks/adapters-BVozg-Lg.js");
|
|
301
306
|
const declaredCustomAgents = await readDeclaredCustomAgents();
|
|
302
307
|
if (declaredCustomAgents.error) line("config", declaredCustomAgents.error);
|
|
303
308
|
setCustomAgents(declaredCustomAgents.declared);
|
|
@@ -305,7 +310,7 @@ async function runDoctor() {
|
|
|
305
310
|
const { label, path: resolvedPath } = describeAgentResolvability(id);
|
|
306
311
|
line(`${id} (${label})`, resolvedPath ?? "not found on PATH");
|
|
307
312
|
}
|
|
308
|
-
const { inspectGrokAgentSetup } = await import("../chunks/agent-setup-cli-
|
|
313
|
+
const { inspectGrokAgentSetup } = await import("../chunks/agent-setup-cli-CH7EHsAX.js");
|
|
309
314
|
const grokSetup = inspectGrokAgentSetup();
|
|
310
315
|
line("grok hook setup", `${grokSetup.classification}: ${grokSetup.filePath}`);
|
|
311
316
|
} catch (err) {
|
|
@@ -313,7 +318,7 @@ async function runDoctor() {
|
|
|
313
318
|
}
|
|
314
319
|
switchSection("rtk");
|
|
315
320
|
try {
|
|
316
|
-
const { getRtkPath } = await import("../chunks/rtk-resolver-
|
|
321
|
+
const { getRtkPath } = await import("../chunks/rtk-resolver-B8BPgN9L.js");
|
|
317
322
|
line("rtk", getRtkPath() || "not installed (Glimmervoid installs it when the rtk setting is on)");
|
|
318
323
|
} catch (err) {
|
|
319
324
|
line("rtk", `probe failed: ${firstLine(errorText(err))}`);
|
|
@@ -322,7 +327,7 @@ async function runDoctor() {
|
|
|
322
327
|
try {
|
|
323
328
|
const { resolvePackageBin } = await import("../chunks/runtime-paths-DSmormp7.js");
|
|
324
329
|
const { execFileSync } = await import("../chunks/child-process-safe-ChRmWAJP.js");
|
|
325
|
-
const { inspectGrokAgentSetup } = await import("../chunks/agent-setup-cli-
|
|
330
|
+
const { inspectGrokAgentSetup } = await import("../chunks/agent-setup-cli-CH7EHsAX.js");
|
|
326
331
|
const binPath = resolvePackageBin("cc-safety-net", "cc-safety-net");
|
|
327
332
|
line("Sane YOLO", binPath || "not installed");
|
|
328
333
|
if (binPath) line("cc-safety-net version", execFileSync(process.execPath, [binPath, "--version"], {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { a as describeAgentResolvability, l as listAgentIds, d as setCustomAgents } from "./adapters-
|
|
1
|
+
export { a as describeAgentResolvability, l as listAgentIds, d as setCustomAgents } from "./adapters-BdnLyJjf.js";
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { o as relayPath } from "./runtime-paths-BkeftE60.js";
|
|
2
|
-
import { A as toolDetailFieldValue, d as PROMPT_DETAIL_HIDDEN_CHARACTERS, k as firstDetailLine, p as PendingPromptQuestion } from "./session-D6xXN0UU.js";
|
|
3
2
|
import { r as execFileSync } from "./child-process-safe-CbQnyh7D.js";
|
|
4
3
|
import { n as resolveAgentCommand, t as buildAgentSpawnCommand } from "./spawn-command-Cc40FiZI.js";
|
|
5
|
-
import {
|
|
4
|
+
import { s as rawTextOr } from "./coerce-NSst8oRP.js";
|
|
6
5
|
import { r as nextBackoffMs } from "./backoff-DjVpfHk7.js";
|
|
7
|
-
import { l as supervisionLine } from "./session-routes-
|
|
8
|
-
import { c as buildAgentEnv, i as isSpinnerChar, n as classifyAgentTitle, r as isBrailleChar, t as grok } from "./grok-
|
|
9
|
-
import { t as buildHookCommand } from "./hook-command-core-
|
|
10
|
-
import "./contracts-
|
|
11
|
-
import { n as mergeCodexPreToolUse, t as HOOK_TOOLS } from "./hook-tools-
|
|
6
|
+
import { l as supervisionLine } from "./session-routes-DB5aDKsx.js";
|
|
7
|
+
import { c as buildAgentEnv, i as isSpinnerChar, n as classifyAgentTitle, r as isBrailleChar, t as grok } from "./grok-Ch4-35_r.js";
|
|
8
|
+
import { t as buildHookCommand } from "./hook-command-core-qTNK-xMF.js";
|
|
9
|
+
import "./contracts-BLZAOP57.js";
|
|
10
|
+
import { n as mergeCodexPreToolUse, t as HOOK_TOOLS } from "./hook-tools-BkxllUHE.js";
|
|
12
11
|
import fs from "node:fs";
|
|
13
12
|
import path from "node:path";
|
|
14
13
|
//#region session/adapters/claude-code.ts
|
|
@@ -62,50 +61,12 @@ function mapHookPromptKind$1(event, payload) {
|
|
|
62
61
|
}
|
|
63
62
|
return null;
|
|
64
63
|
}
|
|
65
|
-
function
|
|
64
|
+
function mapHookPromptToolName(event, payload) {
|
|
66
65
|
if (String(event || "").toLowerCase() !== "permissionrequest") return null;
|
|
67
66
|
if (mapHookPromptKind$1(event, payload) !== "permission") return null;
|
|
68
67
|
const toolName = payload?.tool_name;
|
|
69
68
|
if (typeof toolName !== "string" || !toolName) return null;
|
|
70
|
-
|
|
71
|
-
const summary = fieldValue === null ? "" : firstDetailLine(fieldValue);
|
|
72
|
-
const isComplete = isWholeBashCommandShown(toolName, payload?.tool_input, fieldValue, summary);
|
|
73
|
-
return {
|
|
74
|
-
toolName: firstDetailLine(toolName),
|
|
75
|
-
summary,
|
|
76
|
-
isComplete,
|
|
77
|
-
question: answerableQuestionOf(toolName, payload?.tool_input)
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
function answerableQuestionOf(toolName, toolInput) {
|
|
81
|
-
if (toolName !== "AskUserQuestion" || !isRecord(toolInput)) return null;
|
|
82
|
-
const questions = toolInput.questions;
|
|
83
|
-
if (!Array.isArray(questions) || questions.length !== 1) return null;
|
|
84
|
-
const [entry] = questions;
|
|
85
|
-
if (!isRecord(entry) || typeof entry.question !== "string" || !Array.isArray(entry.options)) return null;
|
|
86
|
-
const optionLabels = entry.options.flatMap((option) => isRecord(option) && typeof option.label === "string" ? [option.label] : []);
|
|
87
|
-
if (optionLabels.length !== entry.options.length) return null;
|
|
88
|
-
const parsedQuestion = PendingPromptQuestion.safeParse({
|
|
89
|
-
text: entry.question,
|
|
90
|
-
options: optionLabels,
|
|
91
|
-
multiSelect: entry.multiSelect === true
|
|
92
|
-
});
|
|
93
|
-
return parsedQuestion.success ? parsedQuestion.data : null;
|
|
94
|
-
}
|
|
95
|
-
var DISPLAY_IRRELEVANT_BASH_INPUT_KEYS = /* @__PURE__ */ new Set([
|
|
96
|
-
"command",
|
|
97
|
-
"description",
|
|
98
|
-
"timeout"
|
|
99
|
-
]);
|
|
100
|
-
function hasOnlyDisplayIrrelevantBashInputKeys(toolInput) {
|
|
101
|
-
if (!toolInput || typeof toolInput !== "object") return false;
|
|
102
|
-
return Reflect.ownKeys(toolInput).every((key) => typeof key === "string" && DISPLAY_IRRELEVANT_BASH_INPUT_KEYS.has(key));
|
|
103
|
-
}
|
|
104
|
-
function isWholeBashCommandShown(toolName, toolInput, fieldValue, summary) {
|
|
105
|
-
if (toolName !== "Bash" || fieldValue === null) return false;
|
|
106
|
-
if (!hasOnlyDisplayIrrelevantBashInputKeys(toolInput)) return false;
|
|
107
|
-
if (PROMPT_DETAIL_HIDDEN_CHARACTERS.test(fieldValue)) return false;
|
|
108
|
-
return summary === fieldValue;
|
|
69
|
+
return toolName;
|
|
109
70
|
}
|
|
110
71
|
function mapHookToSignal$1(event, payload) {
|
|
111
72
|
switch (String(event || "").toLowerCase()) {
|
|
@@ -141,7 +102,7 @@ var hooks$1 = {
|
|
|
141
102
|
mapSignal: mapHookToSignal$1,
|
|
142
103
|
mapConfidence: mapHookConfidence$1,
|
|
143
104
|
mapPromptKind: mapHookPromptKind$1,
|
|
144
|
-
|
|
105
|
+
mapPromptToolName: mapHookPromptToolName,
|
|
145
106
|
injection: { kind: "settings-file" }
|
|
146
107
|
};
|
|
147
108
|
function resolveCommand$1({ platform, execFile = execFileSync, pathExists = fs.existsSync } = {}) {
|
|
@@ -239,7 +200,7 @@ var claudeCode = {
|
|
|
239
200
|
mapHookToSignal: mapHookToSignal$1,
|
|
240
201
|
mapHookConfidence: mapHookConfidence$1,
|
|
241
202
|
mapHookPromptKind: mapHookPromptKind$1,
|
|
242
|
-
|
|
203
|
+
mapHookPromptToolName
|
|
243
204
|
};
|
|
244
205
|
//#endregion
|
|
245
206
|
//#region server/usage/core/usage-scan-core.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { n as runAgentApiCli, r as sessionLimitsHelpLines } from "./agent-api-cli-
|
|
1
|
+
export { n as runAgentApiCli, r as sessionLimitsHelpLines } from "./agent-api-cli-d-Bgsshx.js";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { t as errorCode } from "./text-DoirglWV.js";
|
|
2
|
-
import { a as AgentDispatchRequest, l as AgentTicketRequest, n as AGENT_URL_ENV, s as AgentLimitsReply } from "./session-
|
|
2
|
+
import { a as AgentDispatchRequest, l as AgentTicketRequest, n as AGENT_URL_ENV, s as AgentLimitsReply } from "./session-B8RhqQJe.js";
|
|
3
3
|
import { i as resolveHookTarget } from "./hook-relay-core-DA_bz2KA.js";
|
|
4
4
|
import { n as decideSandboxProxy } from "./sandbox-proxy-core-hnQgKR0T.js";
|
|
5
5
|
import { t as parseJsonOrNull } from "./json-core-dfa_7Fak.js";
|
|
6
|
-
import { a as formatSessionLimits } from "./session-routes-
|
|
7
|
-
import { d as isOrchestratorAgentVerb, u as isAgentApiVerb } from "./agent-api-core-
|
|
6
|
+
import { a as formatSessionLimits } from "./session-routes-DB5aDKsx.js";
|
|
7
|
+
import { d as isOrchestratorAgentVerb, u as isAgentApiVerb } from "./agent-api-core-BUC9WND7.js";
|
|
8
8
|
import path from "node:path";
|
|
9
9
|
import http from "node:http";
|
|
10
10
|
//#region server/agent-api-cli.ts
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as AgentDispatchRequest, c as AgentSpawnRequest, i as AgentAttentionRequest, o as AgentEditRequest, t as AGENT_API_VERBS
|
|
2
|
-
import { c as spawnRoute, i as editRoute, n as attentionRoute, s as pushRoute, t as NO_OWN_WORKTREE_REASON } from "./session-routes-
|
|
1
|
+
import { a as AgentDispatchRequest, c as AgentSpawnRequest, f as ORCHESTRATOR_AGENT_VERBS, i as AgentAttentionRequest, o as AgentEditRequest, t as AGENT_API_VERBS } from "./session-B8RhqQJe.js";
|
|
2
|
+
import { c as spawnRoute, i as editRoute, n as attentionRoute, s as pushRoute, t as NO_OWN_WORKTREE_REASON } from "./session-routes-DB5aDKsx.js";
|
|
3
3
|
import crypto from "node:crypto";
|
|
4
4
|
var MAX_SPAWNS_IN_FLIGHT = 1;
|
|
5
5
|
var SPAWNABLE_DEPTH = 0;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { a as isMissingFileError, r as errorMessage } from "./text-DoirglWV.js";
|
|
2
|
-
import { a as classifyGrokHooksFile, o as renderGrokHooksFile, t as grok } from "./grok-
|
|
2
|
+
import { a as classifyGrokHooksFile, o as renderGrokHooksFile, t as grok } from "./grok-Ch4-35_r.js";
|
|
3
3
|
import { p as writeTextAtomicSync } from "./json-file-BaxGcB2R.js";
|
|
4
4
|
import fs from "node:fs";
|
|
5
5
|
import path from "node:path";
|