glimmervoid 0.45.0 → 0.45.1-next.45
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 +15 -15
- package/dist/chunks/{adapters-D99c4zCx.js → adapters-BE9BKVW0.js} +24 -24
- package/dist/chunks/{adapters-BGuI5U_-.js → adapters-CPaysZkO.js} +1 -1
- package/dist/chunks/{agent-api-cli-DdrR2vnB.js → agent-api-cli-B0l8uLos.js} +1 -1
- package/dist/chunks/{agent-api-cli-DIGH1v3_.js → agent-api-cli-Bq9J0_D5.js} +148 -15
- package/dist/chunks/{agent-api-core-D49OzKho.js → agent-api-core-ClU9-5K3.js} +9 -3
- package/dist/chunks/{agent-setup-cli-7hG401Io.js → agent-setup-cli-BA_1AdhQ.js} +2 -2
- package/dist/chunks/{contracts-CucdticH.js → build-channel-qgKwNssc.js} +37 -3
- package/dist/chunks/{config-BLeRKmn9.js → config-BqJTnPae.js} +16 -33
- package/dist/chunks/{config-path-core-DFt-TemS.js → config-path-core-DUWk0Lui.js} +5 -1
- package/dist/chunks/config-store-5xpRLHFo.js +1 -0
- package/dist/chunks/{config-store-CXLnauAa.js → config-store-BGTg8oKO.js} +77 -78
- package/dist/chunks/{git-version-C3lznLS_.js → git-version-BpdkKH2j.js} +1 -1
- package/dist/chunks/{grok-Di4aQGre.js → grok-7jK8ZNtf.js} +1 -1
- package/dist/chunks/{json-file-DFCTvPjj.js → json-file-BjFK_eSH.js} +2 -7
- package/dist/chunks/{main-CX9CkTDx.js → main-x9ygUnoL.js} +1030 -988
- package/dist/chunks/{pair-cli-BPyh48--.js → pair-cli-Cph4TZ2R.js} +2 -2
- package/dist/chunks/{remote-config-B0zBDBak.js → remote-config-CmP36r_s.js} +2 -2
- package/dist/chunks/{rtk-resolver-BDHi6RMv.js → rtk-resolver-C_IReILP.js} +1 -1
- package/dist/chunks/rtk-resolver-DgnNb1or.js +1 -0
- package/dist/chunks/{session-CUc6d7aS.js → session-BwlLY_mv.js} +36 -14
- package/dist/chunks/{session-routes--hrsvv7a.js → session-routes-CviNvxcz.js} +9 -1
- package/dist/chunks/{settings-cli-DzIasX94.js → settings-cli-Bete5oVk.js} +11 -10
- package/dist/chunks/{settings-readout-core-BOv6tqdK.js → settings-readout-core-CS8MPaIE.js} +14 -8
- package/dist/chunks/shown-files-core-soMzCQ1D.js +145 -0
- package/dist/chunks/{ssh-sign-cli-C_QYhDvI.js → ssh-sign-cli-DXhuqzuy.js} +2 -2
- package/dist/client/assets/action-status-BwqYb9eF.js +1 -0
- package/dist/client/assets/action-status-BwqYb9eF.js.br +0 -0
- package/dist/client/assets/benchmark-panel-BulIdLtq.js +1 -0
- package/dist/client/assets/benchmark-panel-BulIdLtq.js.br +0 -0
- package/dist/client/assets/card-dom-DkZgkeG9.js +1 -0
- package/dist/client/assets/card-dom-DkZgkeG9.js.br +0 -0
- package/dist/client/assets/control-ws-CAcwW-r9.js +4 -0
- package/dist/client/assets/control-ws-CAcwW-r9.js.br +0 -0
- package/dist/client/assets/dialogs-CCP1ipXD.js +79 -0
- package/dist/client/assets/dialogs-CCP1ipXD.js.br +0 -0
- package/dist/client/assets/dom-helpers-xJduxDcc.js +1 -0
- package/dist/client/assets/dom-helpers-xJduxDcc.js.br +0 -0
- package/dist/client/assets/hooks-panel-BWDeSHtM.js +1 -0
- package/dist/client/assets/hooks-panel-BWDeSHtM.js.br +0 -0
- package/dist/client/assets/index-D6m--U7B.js +84 -0
- package/dist/client/assets/index-D6m--U7B.js.br +0 -0
- package/dist/client/assets/index-DF3BLGk9.css +2 -0
- package/dist/client/assets/index-DF3BLGk9.css.br +0 -0
- package/dist/client/assets/issues-panel-B7Y1Lpyx.js +1 -0
- package/dist/client/assets/issues-panel-B7Y1Lpyx.js.br +0 -0
- package/dist/client/assets/modal-mWl2H7A_.js +1 -0
- package/dist/client/assets/modal-mWl2H7A_.js.br +0 -0
- package/dist/client/assets/plan-face-DpzZfVeG.js +3 -0
- package/dist/client/assets/plan-face-DpzZfVeG.js.br +0 -0
- package/dist/client/assets/{poll-ago-ItO-gOWA.js → poll-ago-Bc-8mMFj.js} +1 -1
- package/dist/client/assets/poll-ago-Bc-8mMFj.js.br +0 -0
- package/dist/client/assets/pr-scope-tabs-DftvVYU8.js +1 -0
- package/dist/client/assets/pr-scope-tabs-DftvVYU8.js.br +0 -0
- package/dist/client/assets/radar-panel-hxjF7m9Z.js +1 -0
- package/dist/client/assets/radar-panel-hxjF7m9Z.js.br +0 -0
- package/dist/client/assets/review-queue-panel-8bP8Q7RR.js +10 -0
- package/dist/client/assets/review-queue-panel-8bP8Q7RR.js.br +0 -0
- package/dist/client/assets/roving-keys-core-BDobx2It.js +1 -0
- package/dist/client/assets/settings-panel-B50lNcrt.js +4 -0
- package/dist/client/assets/settings-panel-B50lNcrt.js.br +0 -0
- package/dist/client/assets/trace-panel-Dy-fgi9c.js +2 -0
- package/dist/client/assets/trace-panel-Dy-fgi9c.js.br +0 -0
- package/dist/client/assets/ui-prefs-CNf6fId2.js +1 -0
- package/dist/client/assets/ui-prefs-CNf6fId2.js.br +0 -0
- package/dist/client/assets/usage-panel-D2JuiQ4G.js +1 -0
- package/dist/client/assets/usage-panel-D2JuiQ4G.js.br +0 -0
- package/dist/client/assets/visions-panel-CI6CRn42.js +1 -0
- package/dist/client/assets/visions-panel-CI6CRn42.js.br +0 -0
- package/dist/client/index.html +14 -8
- package/dist/client/index.html.br +0 -0
- package/dist/server/index.js +99 -1
- package/dist/session/guardrails-open-launcher.js +28 -16
- package/dist/session/visions-relay.js +1 -1
- package/package.json +1 -1
- package/dist/chunks/config-store-DlaaBY9p.js +0 -1
- package/dist/chunks/rtk-resolver-Dr4iJsiS.js +0 -1
- package/dist/client/assets/action-status-DrMQzohk.js +0 -1
- package/dist/client/assets/action-status-DrMQzohk.js.br +0 -0
- package/dist/client/assets/benchmark-panel-D09qvrAY.js +0 -1
- package/dist/client/assets/benchmark-panel-D09qvrAY.js.br +0 -0
- package/dist/client/assets/dom-helpers-CZ8NZKxw.js +0 -4
- package/dist/client/assets/dom-helpers-CZ8NZKxw.js.br +0 -0
- package/dist/client/assets/hooks-panel-R-L7DuIz.js +0 -1
- package/dist/client/assets/hooks-panel-R-L7DuIz.js.br +0 -0
- package/dist/client/assets/index-B7TvZo7W.js +0 -173
- package/dist/client/assets/index-B7TvZo7W.js.br +0 -0
- package/dist/client/assets/index-C3nOrTwM.css +0 -2
- package/dist/client/assets/index-C3nOrTwM.css.br +0 -0
- package/dist/client/assets/issues-panel-CyB4oq9Z.js +0 -1
- package/dist/client/assets/issues-panel-CyB4oq9Z.js.br +0 -0
- package/dist/client/assets/modal-M_mJ8--V.js +0 -1
- package/dist/client/assets/modal-M_mJ8--V.js.br +0 -0
- package/dist/client/assets/poll-ago-ItO-gOWA.js.br +0 -0
- package/dist/client/assets/pr-queue-columns-Cu3-PADL.js +0 -1
- package/dist/client/assets/pr-queue-columns-Cu3-PADL.js.br +0 -0
- package/dist/client/assets/radar-panel-Cl3yPWed.js +0 -1
- package/dist/client/assets/radar-panel-Cl3yPWed.js.br +0 -0
- package/dist/client/assets/review-queue-panel-CVujzadC.js +0 -2
- package/dist/client/assets/review-queue-panel-CVujzadC.js.br +0 -0
- package/dist/client/assets/settings-panel-DW5An8lQ.js +0 -3
- package/dist/client/assets/settings-panel-DW5An8lQ.js.br +0 -0
- package/dist/client/assets/trace-panel-B6TiM5pb.js +0 -1
- package/dist/client/assets/trace-panel-B6TiM5pb.js.br +0 -0
- package/dist/client/assets/ui-prefs-CQHZFVx6.js +0 -1
- package/dist/client/assets/ui-prefs-CQHZFVx6.js.br +0 -0
- package/dist/client/assets/usage-panel-D2RX3LtG.js +0 -1
- package/dist/client/assets/usage-panel-D2RX3LtG.js.br +0 -0
- package/dist/client/assets/visions-panel-BV9EKCBw.js +0 -1
- package/dist/client/assets/visions-panel-BV9EKCBw.js.br +0 -0
package/dist/bin/glimmervoid.js
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
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 { o as packageRoot } from "../chunks/runtime-paths-ghcH9CeW.js";
|
|
5
|
-
import { t as
|
|
5
|
+
import { n as glimmervoidHomeDir, t as decideConfigPath } from "../chunks/config-path-core-DUWk0Lui.js";
|
|
6
|
+
import { t as AGENT_API_VERBS } from "../chunks/session-BwlLY_mv.js";
|
|
6
7
|
import { i as execSync } from "../chunks/child-process-safe-D4hyVIXj.js";
|
|
7
|
-
import { r as agentCommandHelpLines } from "../chunks/agent-api-core-
|
|
8
|
+
import { r as agentCommandHelpLines } from "../chunks/agent-api-core-ClU9-5K3.js";
|
|
8
9
|
import { t as renderTable } from "../chunks/ascii-figure-core-pDAwtlKO.js";
|
|
9
|
-
import {
|
|
10
|
-
import { i as parseCommandLine, r as gitDoctorRows, t as probeGitVersion } from "../chunks/git-version-C3lznLS_.js";
|
|
10
|
+
import { i as parseCommandLine, r as gitDoctorRows, t as probeGitVersion } from "../chunks/git-version-BpdkKH2j.js";
|
|
11
11
|
import { i as guardrailsDoctorRows, r as probeGuardrailsDependencies } from "../chunks/guardrails-deps-BjPzk1rE.js";
|
|
12
12
|
import { i as pnpmGlobalBinDir, n as npmGlobalBinDir, r as onPath, t as formatPathNotice } from "../chunks/path-doctor-C23VAqeu.js";
|
|
13
13
|
import fs from "node:fs";
|
|
@@ -65,15 +65,15 @@ var OWN_SUBCOMMAND_RUNNERS = [
|
|
|
65
65
|
return 0;
|
|
66
66
|
}],
|
|
67
67
|
["pair", async (subcommandArgs) => {
|
|
68
|
-
const { runPairCli } = await import("../chunks/pair-cli-
|
|
68
|
+
const { runPairCli } = await import("../chunks/pair-cli-Cph4TZ2R.js");
|
|
69
69
|
return runPairCli(subcommandArgs);
|
|
70
70
|
}],
|
|
71
71
|
["agent", async (subcommandArgs) => {
|
|
72
|
-
const { runAgentSetupCli } = await import("../chunks/agent-setup-cli-
|
|
72
|
+
const { runAgentSetupCli } = await import("../chunks/agent-setup-cli-BA_1AdhQ.js");
|
|
73
73
|
return runAgentSetupCli(subcommandArgs);
|
|
74
74
|
}],
|
|
75
75
|
["settings", async (subcommandArgs) => {
|
|
76
|
-
const { runSettingsCli } = await import("../chunks/settings-cli-
|
|
76
|
+
const { runSettingsCli } = await import("../chunks/settings-cli-Bete5oVk.js");
|
|
77
77
|
return runSettingsCli(subcommandArgs);
|
|
78
78
|
}],
|
|
79
79
|
["visions", async (subcommandArgs) => {
|
|
@@ -81,13 +81,13 @@ var OWN_SUBCOMMAND_RUNNERS = [
|
|
|
81
81
|
return runVisionsCli(subcommandArgs);
|
|
82
82
|
}],
|
|
83
83
|
["ssh-sign", async (subcommandArgs) => {
|
|
84
|
-
const { runSshSignCli } = await import("../chunks/ssh-sign-cli-
|
|
84
|
+
const { runSshSignCli } = await import("../chunks/ssh-sign-cli-DXhuqzuy.js");
|
|
85
85
|
return runSshSignCli(subcommandArgs);
|
|
86
86
|
}]
|
|
87
87
|
];
|
|
88
88
|
var ownSubcommandNames = new Set(OWN_SUBCOMMAND_RUNNERS.map(([name]) => name));
|
|
89
89
|
var SUBCOMMAND_RUNNERS = new Map([...OWN_SUBCOMMAND_RUNNERS, ...AGENT_API_VERBS.filter((verb) => !ownSubcommandNames.has(verb)).map((verb) => [verb, async (subcommandArgs, subcommandName) => {
|
|
90
|
-
const { runAgentApiCli } = await import("../chunks/agent-api-cli-
|
|
90
|
+
const { runAgentApiCli } = await import("../chunks/agent-api-cli-B0l8uLos.js");
|
|
91
91
|
return runAgentApiCli([subcommandName, ...subcommandArgs]);
|
|
92
92
|
}])]);
|
|
93
93
|
var AGENT_INSTALL_COMMAND_BY_ID = {
|
|
@@ -101,7 +101,7 @@ function missingAgentText(agentId) {
|
|
|
101
101
|
}
|
|
102
102
|
async function printSessionLimits() {
|
|
103
103
|
if (!process.env["GLIMMERVOID_AGENT_URL"]) return;
|
|
104
|
-
const { sessionLimitsHelpLines } = await import("../chunks/agent-api-cli-
|
|
104
|
+
const { sessionLimitsHelpLines } = await import("../chunks/agent-api-cli-B0l8uLos.js");
|
|
105
105
|
const limitsLines = await sessionLimitsHelpLines();
|
|
106
106
|
console.log(`\n${limitsLines.join("\n")}`);
|
|
107
107
|
}
|
|
@@ -158,7 +158,7 @@ async function readDeclaredCustomAgents() {
|
|
|
158
158
|
declared: [],
|
|
159
159
|
error: null
|
|
160
160
|
};
|
|
161
|
-
const { loadConfigFile } = await import("../chunks/config-store-
|
|
161
|
+
const { loadConfigFile } = await import("../chunks/config-store-5xpRLHFo.js");
|
|
162
162
|
try {
|
|
163
163
|
const loaded = loadConfigFile(decided.path, { exitOnError: false });
|
|
164
164
|
if (!loaded.config) return {
|
|
@@ -234,7 +234,7 @@ async function runDoctor() {
|
|
|
234
234
|
}
|
|
235
235
|
switchSection("Agents");
|
|
236
236
|
try {
|
|
237
|
-
const { listAgentIds, describeAgentResolvability, setCustomAgents } = await import("../chunks/adapters-
|
|
237
|
+
const { listAgentIds, describeAgentResolvability, setCustomAgents } = await import("../chunks/adapters-CPaysZkO.js");
|
|
238
238
|
const declaredCustomAgents = await readDeclaredCustomAgents();
|
|
239
239
|
if (declaredCustomAgents.error) line("config", declaredCustomAgents.error);
|
|
240
240
|
setCustomAgents(declaredCustomAgents.declared);
|
|
@@ -242,7 +242,7 @@ async function runDoctor() {
|
|
|
242
242
|
const { label, path: resolvedPath } = describeAgentResolvability(id);
|
|
243
243
|
line(`${id} (${label})`, resolvedPath ?? missingAgentText(id));
|
|
244
244
|
}
|
|
245
|
-
const { inspectGrokAgentSetup } = await import("../chunks/agent-setup-cli-
|
|
245
|
+
const { inspectGrokAgentSetup } = await import("../chunks/agent-setup-cli-BA_1AdhQ.js");
|
|
246
246
|
const grokSetup = inspectGrokAgentSetup();
|
|
247
247
|
line("grok hook setup", `${grokSetup.classification}: ${grokSetup.filePath}`);
|
|
248
248
|
} catch (err) {
|
|
@@ -250,7 +250,7 @@ async function runDoctor() {
|
|
|
250
250
|
}
|
|
251
251
|
switchSection("rtk");
|
|
252
252
|
try {
|
|
253
|
-
const { getRtkPath } = await import("../chunks/rtk-resolver-
|
|
253
|
+
const { getRtkPath } = await import("../chunks/rtk-resolver-DgnNb1or.js");
|
|
254
254
|
line("rtk", getRtkPath() || "not installed (Glimmervoid installs it when the rtk setting is on)");
|
|
255
255
|
} catch (err) {
|
|
256
256
|
line("rtk", `probe failed: ${firstLine(errorText(err))}`);
|
|
@@ -259,7 +259,7 @@ async function runDoctor() {
|
|
|
259
259
|
try {
|
|
260
260
|
const { resolvePackageBin } = await import("../chunks/runtime-paths-Cc0_ZR6V.js");
|
|
261
261
|
const { execFileSync } = await import("../chunks/child-process-safe-CjVtRjDD.js");
|
|
262
|
-
const { inspectGrokAgentSetup } = await import("../chunks/agent-setup-cli-
|
|
262
|
+
const { inspectGrokAgentSetup } = await import("../chunks/agent-setup-cli-BA_1AdhQ.js");
|
|
263
263
|
const binPath = resolvePackageBin("cc-safety-net", "cc-safety-net");
|
|
264
264
|
line("Sane YOLO", binPath || "not installed");
|
|
265
265
|
if (binPath) line("cc-safety-net version", execFileSync(process.execPath, [binPath, "--version"], {
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { s as relayPath } from "./runtime-paths-ghcH9CeW.js";
|
|
2
|
-
import {
|
|
2
|
+
import { Bt as FULL_SHA_RE, Ht as shortSha$1 } from "./session-BwlLY_mv.js";
|
|
3
3
|
import { n as execFileAsync, r as execFileSync } from "./child-process-safe-D4hyVIXj.js";
|
|
4
|
-
import {
|
|
5
|
-
import { o as supervisionLine } from "./session-routes
|
|
4
|
+
import { b as InstallFlavor, mt as UpdateChannel } from "./config-BqJTnPae.js";
|
|
5
|
+
import { o as supervisionLine } from "./session-routes-CviNvxcz.js";
|
|
6
6
|
import { c as textOr, s as rawTextOr } from "./coerce-NSst8oRP.js";
|
|
7
7
|
import { n as resolveAgentCommand, t as buildAgentSpawnCommand } from "./spawn-command-Cc40FiZI.js";
|
|
8
8
|
import { r as nextBackoffMs } from "./backoff-DjVpfHk7.js";
|
|
9
|
-
import { i as isSpinnerChar, n as classifyAgentTitle, r as isBrailleChar, s as buildAgentEnv, t as grok } from "./grok-
|
|
9
|
+
import { i as isSpinnerChar, n as classifyAgentTitle, r as isBrailleChar, s as buildAgentEnv, t as grok } from "./grok-7jK8ZNtf.js";
|
|
10
10
|
import { t as buildHookCommand } from "./hook-command-core-qTNK-xMF.js";
|
|
11
|
-
import "./
|
|
11
|
+
import { n as isExperimentalBuild, t as compareReleaseVersions } from "./build-channel-qgKwNssc.js";
|
|
12
12
|
import { n as mergeCodexPreToolUse, t as HOOK_TOOLS } from "./hook-tools-Dl7-r2Eb.js";
|
|
13
13
|
import fs from "node:fs";
|
|
14
14
|
import path from "node:path";
|
|
@@ -411,8 +411,7 @@ var NODE_PTY_INSTALL_SCRIPT_FLAG = "--allow-scripts=node-pty";
|
|
|
411
411
|
var NPX_CACHE_DIRECTORY_NAME = "_npx";
|
|
412
412
|
var CLONE_COMMAND = "git pull --ff-only && npm ci && npm run build";
|
|
413
413
|
var INSTALL_FLAVORS = new Set(InstallFlavor.options);
|
|
414
|
-
var TAG_VERSION_RE = /^v(\d+\.\d+\.\d+)$/;
|
|
415
|
-
var UPDATE_CHANNELS = /* @__PURE__ */ new Set(["release", "main"]);
|
|
414
|
+
var TAG_VERSION_RE = /^v(\d+\.\d+\.\d+(?:-next\.\d+)?)$/;
|
|
416
415
|
var DEPRECATION_MESSAGE_MAX_CHARS = 500;
|
|
417
416
|
function normalizeSha(value) {
|
|
418
417
|
if (typeof value !== "string") return null;
|
|
@@ -486,7 +485,7 @@ function buildUpdateCommand(flavor, latestVersion, platform) {
|
|
|
486
485
|
}
|
|
487
486
|
function buildReleaseUrl(version) {
|
|
488
487
|
const releaseVersion = textOr(version, null);
|
|
489
|
-
if (!releaseVersion) return null;
|
|
488
|
+
if (!releaseVersion || isExperimentalBuild(releaseVersion)) return null;
|
|
490
489
|
return `https://github.com/${REPO_SLUG}/releases/tag/v${releaseVersion}`;
|
|
491
490
|
}
|
|
492
491
|
function parseVersionTriple(version) {
|
|
@@ -522,6 +521,15 @@ function parseRegistryLatest(doc) {
|
|
|
522
521
|
sha: normalizeSha(registryDocument.gitHead)
|
|
523
522
|
};
|
|
524
523
|
}
|
|
524
|
+
function pickNewestPublished(...publishedVersions) {
|
|
525
|
+
let newest = null;
|
|
526
|
+
for (const published of publishedVersions) {
|
|
527
|
+
if (!published) continue;
|
|
528
|
+
if (newest && compareReleaseVersions(published.version, newest.version) <= 0) continue;
|
|
529
|
+
newest = published;
|
|
530
|
+
}
|
|
531
|
+
return newest;
|
|
532
|
+
}
|
|
525
533
|
function parseRegistryDeprecation(doc) {
|
|
526
534
|
if (!doc || typeof doc !== "object") return null;
|
|
527
535
|
const deprecated = doc.deprecated;
|
|
@@ -535,30 +543,23 @@ function normalizeFlavor(flavor) {
|
|
|
535
543
|
return "unknown";
|
|
536
544
|
}
|
|
537
545
|
function normalizeUpdateChannel(channel) {
|
|
538
|
-
|
|
539
|
-
return "release";
|
|
540
|
-
}
|
|
541
|
-
function normalizeBehindCount(value) {
|
|
542
|
-
if (!Number.isInteger(value)) return null;
|
|
543
|
-
const count = Number(value);
|
|
544
|
-
if (count < 0) return null;
|
|
545
|
-
return count;
|
|
546
|
+
const parsed = UpdateChannel.safeParse(channel);
|
|
547
|
+
return parsed.success ? parsed.data : "release";
|
|
546
548
|
}
|
|
547
549
|
function decideUpdateReason({ isReleaseAlreadyCheckedOut, reason }) {
|
|
548
550
|
if (isReleaseAlreadyCheckedOut) return "release-already-checked-out";
|
|
549
551
|
return textOr(reason, null);
|
|
550
552
|
}
|
|
551
|
-
function decideUpdateStatus({ installedSha, latestSha: remoteSha, currentVersion, latestVersion, flavor, platform, channel,
|
|
553
|
+
function decideUpdateStatus({ installedSha, latestSha: remoteSha, currentVersion, latestVersion, flavor, platform, channel, reason, isLatestReleaseAncestorOfHead, deprecation } = {}) {
|
|
552
554
|
const currentSha = normalizeSha(installedSha);
|
|
553
555
|
const latestSha = normalizeSha(remoteSha);
|
|
554
556
|
const current = textOr(currentVersion, null);
|
|
555
557
|
const latest = textOr(latestVersion, null);
|
|
556
558
|
const normalizedFlavor = normalizeFlavor(flavor);
|
|
557
|
-
const
|
|
558
|
-
const
|
|
559
|
-
const isReleaseAlreadyCheckedOut = normalizedChannel === "release" && normalizedFlavor === "clone" && isLatestReleaseAncestorOfHead === true && compareSemver(latest, current) > 0;
|
|
559
|
+
const isTargetInCheckout = normalizedFlavor === "clone" && isLatestReleaseAncestorOfHead === true && compareReleaseVersions(latest, current) > 0;
|
|
560
|
+
const isReleaseAlreadyCheckedOut = isTargetInCheckout && !isExperimentalBuild(latest);
|
|
560
561
|
return {
|
|
561
|
-
updateAvailable:
|
|
562
|
+
updateAvailable: !isTargetInCheckout && compareReleaseVersions(latest, current) > 0,
|
|
562
563
|
current,
|
|
563
564
|
latest,
|
|
564
565
|
currentSha,
|
|
@@ -566,8 +567,7 @@ function decideUpdateStatus({ installedSha, latestSha: remoteSha, currentVersion
|
|
|
566
567
|
releaseUrl: buildReleaseUrl(latest),
|
|
567
568
|
command: buildUpdateCommand(flavor, latest, platform),
|
|
568
569
|
flavor: normalizedFlavor,
|
|
569
|
-
channel:
|
|
570
|
-
behindCount: normalizedBehindCount,
|
|
570
|
+
channel: normalizeUpdateChannel(channel),
|
|
571
571
|
reason: decideUpdateReason({
|
|
572
572
|
isReleaseAlreadyCheckedOut,
|
|
573
573
|
reason
|
|
@@ -1102,4 +1102,4 @@ function resetCommandCache() {
|
|
|
1102
1102
|
resolvedCommands.clear();
|
|
1103
1103
|
}
|
|
1104
1104
|
//#endregion
|
|
1105
|
-
export {
|
|
1105
|
+
export { decideFileRead as A, shouldEvaluateDespiteIoFailures as B, pickNewestPublished as C, codexRootCandidates as D, codexHomes as E, isUsageFile as F, splitLines as H, passOutcome as I, projectDirCandidates as L, expandTilde as M, grokHomes as N, codexSessionIdFromPath as O, grokRootCandidates as P, resolveProjectsDirs as R, parseResolvedSha as S, codexFallbackRoots as T, claudeCode as U, shouldPersistWarehouse as V, isCheckFresh as _, describeAgentResolvability as a, parseRegistryDeprecation as b, isKnownAgentId as c, resolveAdapter as d, setCustomAgents as f, decideUpdateStatus as g, decideInstallFlavor as h, customAgentFingerprint as i, dedupeCodexFiles as j, continuationDelayMs as k, listAgentIds as l, readHostCodexVersion as m, cachedAgentResolvability as n, getAdapter as o, codex as p, commandFor as r, hookProfileOf as s, DEFAULT_AGENT_ID as t, resetCommandCache as u, normalizeSha as v, shortSha as w, parseRegistryLatest as x, normalizeUpdateChannel as y, scopedClaudeRoots as z };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { a as describeAgentResolvability, l as listAgentIds, f as setCustomAgents } from "./adapters-
|
|
1
|
+
export { a as describeAgentResolvability, l as listAgentIds, f as setCustomAgents } from "./adapters-BE9BKVW0.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { t as askAgentApi, r as runAgentApiCli, i as sessionLimitsHelpLines } from "./agent-api-cli-
|
|
1
|
+
export { t as askAgentApi, r as runAgentApiCli, i as sessionLimitsHelpLines } from "./agent-api-cli-Bq9J0_D5.js";
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { t as errorCode } from "./text-DoirglWV.js";
|
|
2
|
-
import { c as AgentLimitsReply, n as AGENT_URL_ENV } from "./session-
|
|
3
|
-
import { i as formatSessionLimits } from "./session-routes
|
|
4
|
-
import { f as isAgentApiVerb, t as AGENT_COMMAND_HELP } from "./agent-api-core-
|
|
2
|
+
import { c as AgentLimitsReply, n as AGENT_URL_ENV } from "./session-BwlLY_mv.js";
|
|
3
|
+
import { i as formatSessionLimits } from "./session-routes-CviNvxcz.js";
|
|
4
|
+
import { f as isAgentApiVerb, t as AGENT_COMMAND_HELP } from "./agent-api-core-ClU9-5K3.js";
|
|
5
5
|
import { i as resolveHookTarget } from "./hook-relay-core-DA_bz2KA.js";
|
|
6
6
|
import { n as decideGuardrailsProxy } from "./guardrails-proxy-core-BI3rdY-m.js";
|
|
7
7
|
import { t as parseJsonOrNull } from "./json-core-dfa_7Fak.js";
|
|
8
|
+
import { r as describeOverCap } from "./shown-files-core-soMzCQ1D.js";
|
|
9
|
+
import fs from "node:fs";
|
|
8
10
|
import path from "node:path";
|
|
9
11
|
import http from "node:http";
|
|
12
|
+
import { pipeline } from "node:stream";
|
|
10
13
|
//#region server/agent-api-cli.ts
|
|
11
14
|
var AGENT_PATH_PREFIX = "/agent/";
|
|
12
15
|
var HELP_LIMITS_TIMEOUT_MS = 2e3;
|
|
@@ -109,20 +112,14 @@ async function postDirectly({ endpoint, headers, bodyText, deadline }) {
|
|
|
109
112
|
text: await response.text()
|
|
110
113
|
};
|
|
111
114
|
}
|
|
112
|
-
function
|
|
113
|
-
const proxyHeaders = guardrailsProxy.authorization ? { "proxy-authorization": guardrailsProxy.authorization } : {};
|
|
115
|
+
function requestOverHttp(target, deadline, sendBody) {
|
|
114
116
|
return new Promise((resolve, reject) => {
|
|
115
117
|
const request = http.request({
|
|
116
|
-
host:
|
|
117
|
-
port:
|
|
118
|
+
host: target.hostname,
|
|
119
|
+
port: target.port,
|
|
118
120
|
method: "POST",
|
|
119
|
-
path:
|
|
120
|
-
headers:
|
|
121
|
-
...headers,
|
|
122
|
-
...proxyHeaders,
|
|
123
|
-
host: endpoint.host,
|
|
124
|
-
"content-length": String(Buffer.byteLength(bodyText))
|
|
125
|
-
},
|
|
121
|
+
path: target.path,
|
|
122
|
+
headers: target.headers,
|
|
126
123
|
...deadline ? { signal: deadline } : {}
|
|
127
124
|
}, (response) => {
|
|
128
125
|
const chunks = [];
|
|
@@ -139,10 +136,30 @@ function postThroughGuardrailsProxy(guardrailsProxy, { endpoint, headers, bodyTe
|
|
|
139
136
|
});
|
|
140
137
|
});
|
|
141
138
|
request.on("error", reject);
|
|
142
|
-
request
|
|
139
|
+
sendBody(request);
|
|
143
140
|
});
|
|
144
141
|
}
|
|
142
|
+
function guardrailsProxyTarget(guardrailsProxy, endpoint, headers) {
|
|
143
|
+
const proxyHeaders = guardrailsProxy.authorization ? { "proxy-authorization": guardrailsProxy.authorization } : {};
|
|
144
|
+
return {
|
|
145
|
+
hostname: guardrailsProxy.hostname,
|
|
146
|
+
port: String(guardrailsProxy.port),
|
|
147
|
+
path: endpoint.href,
|
|
148
|
+
headers: {
|
|
149
|
+
...headers,
|
|
150
|
+
...proxyHeaders,
|
|
151
|
+
host: endpoint.host
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
function postThroughGuardrailsProxy(guardrailsProxy, { endpoint, headers, bodyText, deadline }) {
|
|
156
|
+
return requestOverHttp(guardrailsProxyTarget(guardrailsProxy, endpoint, {
|
|
157
|
+
...headers,
|
|
158
|
+
"content-length": String(Buffer.byteLength(bodyText))
|
|
159
|
+
}), deadline, (request) => request.end(bodyText));
|
|
160
|
+
}
|
|
145
161
|
function wasConnectionRefused(error) {
|
|
162
|
+
if (errorCode(error) === "ECONNREFUSED") return true;
|
|
146
163
|
return errorCode(error?.cause) === "ECONNREFUSED";
|
|
147
164
|
}
|
|
148
165
|
async function postToAgentIngress({ endpoint, token, body, deadline = null }) {
|
|
@@ -180,12 +197,128 @@ async function sessionLimitsHelpLines({ timeoutMs = HELP_LIMITS_TIMEOUT_MS } = {
|
|
|
180
197
|
return [HELP_LIMITS_UNKNOWN_LINE];
|
|
181
198
|
}
|
|
182
199
|
}
|
|
200
|
+
function parseShowArguments(words) {
|
|
201
|
+
const filePaths = [];
|
|
202
|
+
let caption = null;
|
|
203
|
+
for (let index = 0; index < words.length; index += 1) {
|
|
204
|
+
const word = words[index];
|
|
205
|
+
if (word === "--caption") {
|
|
206
|
+
caption = words[index + 1] ?? "";
|
|
207
|
+
index += 1;
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
if (word.startsWith("--caption=")) {
|
|
211
|
+
caption = word.slice(10);
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
filePaths.push(word);
|
|
215
|
+
}
|
|
216
|
+
if (filePaths.length === 0) return null;
|
|
217
|
+
return {
|
|
218
|
+
filePaths,
|
|
219
|
+
caption: caption?.trim().slice(0, 500) || null
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
async function statFileToShow(filePath) {
|
|
223
|
+
const absolutePath = path.resolve(filePath);
|
|
224
|
+
const stats = await fs.promises.stat(absolutePath).catch(() => null);
|
|
225
|
+
if (!stats?.isFile()) return `${filePath} is not a file this session can read`;
|
|
226
|
+
if (stats.size > 209715200) return describeOverCap(filePath, stats.size);
|
|
227
|
+
return {
|
|
228
|
+
filePath: absolutePath,
|
|
229
|
+
name: path.basename(absolutePath),
|
|
230
|
+
sizeBytes: stats.size
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
function showHeaders(token, file, caption) {
|
|
234
|
+
const headers = {
|
|
235
|
+
authorization: `Bearer ${token}`,
|
|
236
|
+
"content-type": "application/octet-stream",
|
|
237
|
+
"content-length": String(file.sizeBytes),
|
|
238
|
+
"x-glimmervoid-show-name": encodeURIComponent(file.name)
|
|
239
|
+
};
|
|
240
|
+
if (caption) headers["x-glimmervoid-show-caption"] = encodeURIComponent(caption);
|
|
241
|
+
return headers;
|
|
242
|
+
}
|
|
243
|
+
function streamFileBody(filePath) {
|
|
244
|
+
return (request) => {
|
|
245
|
+
pipeline(fs.createReadStream(filePath), request, (error) => {
|
|
246
|
+
if (error) request.destroy(error);
|
|
247
|
+
});
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
async function postFileToShow(endpoint, token, file, caption) {
|
|
251
|
+
const headers = showHeaders(token, file, caption);
|
|
252
|
+
const directTarget = {
|
|
253
|
+
hostname: endpoint.hostname,
|
|
254
|
+
port: endpoint.port,
|
|
255
|
+
path: `${endpoint.pathname}${endpoint.search}`,
|
|
256
|
+
headers
|
|
257
|
+
};
|
|
258
|
+
try {
|
|
259
|
+
return await requestOverHttp(directTarget, null, streamFileBody(file.filePath));
|
|
260
|
+
} catch (error) {
|
|
261
|
+
if (!wasConnectionRefused(error)) throw error;
|
|
262
|
+
const guardrailsProxy = decideGuardrailsProxy(process.env);
|
|
263
|
+
if (!guardrailsProxy) throw error;
|
|
264
|
+
return requestOverHttp(guardrailsProxyTarget(guardrailsProxy, endpoint, headers), null, streamFileBody(file.filePath));
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
function replyError(replyText) {
|
|
268
|
+
const reply = parseJsonOrNull(replyText);
|
|
269
|
+
const error = typeof reply === "object" && reply !== null ? reply.error : null;
|
|
270
|
+
return typeof error === "string" ? error : `Glimmervoid answered ${replyText || "nothing"}`;
|
|
271
|
+
}
|
|
272
|
+
async function runShowCommand(words) {
|
|
273
|
+
const request = parseShowArguments(words);
|
|
274
|
+
if (!request) {
|
|
275
|
+
console.error(AGENT_COMMAND_HELP.show.missingArgumentHint ?? "glimmervoid show: this command needs a file path");
|
|
276
|
+
return 1;
|
|
277
|
+
}
|
|
278
|
+
const target = sessionEndpoint("show");
|
|
279
|
+
if (!target.ok) {
|
|
280
|
+
console.error(target.error);
|
|
281
|
+
return 1;
|
|
282
|
+
}
|
|
283
|
+
const filesToShow = [];
|
|
284
|
+
for (const filePath of request.filePaths) {
|
|
285
|
+
const checked = await statFileToShow(filePath);
|
|
286
|
+
if (typeof checked === "string") {
|
|
287
|
+
console.log(JSON.stringify({
|
|
288
|
+
ok: false,
|
|
289
|
+
error: checked,
|
|
290
|
+
shown: []
|
|
291
|
+
}));
|
|
292
|
+
return 1;
|
|
293
|
+
}
|
|
294
|
+
filesToShow.push(checked);
|
|
295
|
+
}
|
|
296
|
+
const shown = [];
|
|
297
|
+
for (const file of filesToShow) {
|
|
298
|
+
const reply = await postFileToShow(target.endpoint, target.token, file, request.caption);
|
|
299
|
+
if (!reply.hasSuccessStatus || !bodySaysOk(reply.text)) {
|
|
300
|
+
console.log(JSON.stringify({
|
|
301
|
+
ok: false,
|
|
302
|
+
error: replyError(reply.text),
|
|
303
|
+
shown
|
|
304
|
+
}));
|
|
305
|
+
return 1;
|
|
306
|
+
}
|
|
307
|
+
shown.push(parseJsonOrNull(reply.text)?.shown ?? { name: file.name });
|
|
308
|
+
}
|
|
309
|
+
console.log(JSON.stringify({
|
|
310
|
+
ok: true,
|
|
311
|
+
shown
|
|
312
|
+
}));
|
|
313
|
+
return 0;
|
|
314
|
+
}
|
|
183
315
|
async function runAgentApiCli(args) {
|
|
184
316
|
const verb = args[0];
|
|
185
317
|
if (!verb || !isAgentApiVerb(verb)) {
|
|
186
318
|
console.error(`glimmervoid: ${verb || "that"} is not an agent command`);
|
|
187
319
|
return 1;
|
|
188
320
|
}
|
|
321
|
+
if (verb === "show") return runShowCommand(args.slice(1));
|
|
189
322
|
const body = BODY_BUILDERS[verb](args.slice(1));
|
|
190
323
|
if (!body) {
|
|
191
324
|
console.error(AGENT_COMMAND_HELP[verb].missingArgumentHint ?? `glimmervoid ${verb}: this command needs an argument`);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { n as NO_OWN_WORKTREE_REASON, t as COMMAND_ROUTES } from "./session-routes
|
|
1
|
+
import { a as AgentAttentionRequest, d as AgentSendRequest, i as AgentAnswerRequest, l as AgentPullRequestRequest, m as AgentSpawnRequest, o as AgentCloseRequest, p as AgentSettingsRequest, s as AgentEditRequest, t as AGENT_API_VERBS, u as AgentReadRequest, w as RefinedTaskTitle, z as TASK_TITLE_CONTROL_CHARACTERS } from "./session-BwlLY_mv.js";
|
|
2
|
+
import { T as pullRequestKeyFromReference, c as TASK_TITLE_SOURCE_PRIORITY, o as PersistedTaskTitle } from "./config-BqJTnPae.js";
|
|
3
|
+
import { n as NO_OWN_WORKTREE_REASON, t as COMMAND_ROUTES } from "./session-routes-CviNvxcz.js";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import crypto from "node:crypto";
|
|
6
6
|
//#region shared/session-naming.ts
|
|
@@ -565,6 +565,7 @@ var REQUEST_PARSERS = Object.freeze({
|
|
|
565
565
|
board: parseEmptyBody,
|
|
566
566
|
push: parseEmptyBody,
|
|
567
567
|
edit: bodyParser(AgentEditRequest),
|
|
568
|
+
show: parseEmptyBody,
|
|
568
569
|
limits: parseEmptyBody,
|
|
569
570
|
review: parsePullRequestBody,
|
|
570
571
|
reviews: parseEmptyBody,
|
|
@@ -751,6 +752,11 @@ var AGENT_COMMAND_HELP = Object.freeze({
|
|
|
751
752
|
summary: "Open a text file for the operator to edit in the dashboard",
|
|
752
753
|
missingArgumentHint: "glimmervoid edit: this command needs a file path, for example \"glimmervoid edit drafts/post.md\""
|
|
753
754
|
},
|
|
755
|
+
show: {
|
|
756
|
+
usage: "show <path>... [--caption <text>]",
|
|
757
|
+
summary: "Show the operator an image, video or HTML page on this session's card",
|
|
758
|
+
missingArgumentHint: "glimmervoid show: this command needs a file path, for example \"glimmervoid show out/diagram.png --caption 'the new layout'\""
|
|
759
|
+
},
|
|
754
760
|
review: {
|
|
755
761
|
usage: "review <pr>",
|
|
756
762
|
summary: "Queue a team review of a pull request; the draft waits in the Reviews tab for the operator to post",
|
|
@@ -1,6 +1,6 @@
|
|
|
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-
|
|
3
|
-
import { p as writeTextAtomicSync } from "./json-file-
|
|
2
|
+
import { a as classifyGrokHooksFile, o as renderGrokHooksFile, t as grok } from "./grok-7jK8ZNtf.js";
|
|
3
|
+
import { p as writeTextAtomicSync } from "./json-file-BjFK_eSH.js";
|
|
4
4
|
import fs from "node:fs";
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
//#region server/agent-setup-cli.ts
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import "./session-
|
|
2
|
-
import { C as
|
|
1
|
+
import "./session-BwlLY_mv.js";
|
|
2
|
+
import { C as OPERATOR_ACTIONS_BY_SURFACE, S as ONBOARDING_STEP_STATES, n as BUILTIN_AGENT_IDS, w as OPERATOR_SURFACES, x as ONBOARDING_STEPS, y as DASHBOARD_VIEWS } from "./config-BqJTnPae.js";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
//#region shared/contracts/telemetry.ts
|
|
5
5
|
var TELEMETRY_ADAPTERS = Object.freeze([...BUILTIN_AGENT_IDS, "custom"]);
|
|
@@ -18,6 +18,7 @@ var SESSION_EXIT_KINDS = Object.freeze([
|
|
|
18
18
|
var TEAM_REVIEW_SETTLED_OUTCOMES = Object.freeze([
|
|
19
19
|
"approve",
|
|
20
20
|
"comment",
|
|
21
|
+
"request-changes",
|
|
21
22
|
"approve-only",
|
|
22
23
|
"discarded"
|
|
23
24
|
]);
|
|
@@ -347,4 +348,37 @@ z.object({
|
|
|
347
348
|
projects: z.array(z.string()).optional()
|
|
348
349
|
}).passthrough();
|
|
349
350
|
//#endregion
|
|
350
|
-
|
|
351
|
+
//#region shared/build-channel.ts
|
|
352
|
+
var RELEASE_VERSION_RE = /^v?(\d+)\.(\d+)\.(\d+)(?:-next\.(\d+))?$/;
|
|
353
|
+
function parseReleaseVersion(version) {
|
|
354
|
+
if (typeof version !== "string") return null;
|
|
355
|
+
const matched = RELEASE_VERSION_RE.exec(version.trim());
|
|
356
|
+
if (!matched) return null;
|
|
357
|
+
return {
|
|
358
|
+
core: [
|
|
359
|
+
Number(matched[1]),
|
|
360
|
+
Number(matched[2]),
|
|
361
|
+
Number(matched[3])
|
|
362
|
+
],
|
|
363
|
+
experimentalBuildNumber: matched[4] === void 0 ? null : Number(matched[4])
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
function compareExperimentalBuildNumbers(a, b) {
|
|
367
|
+
if (a === b) return 0;
|
|
368
|
+
if (a === null) return 1;
|
|
369
|
+
if (b === null) return -1;
|
|
370
|
+
return Math.sign(a - b);
|
|
371
|
+
}
|
|
372
|
+
function compareReleaseVersions(a, b) {
|
|
373
|
+
const left = parseReleaseVersion(a);
|
|
374
|
+
const right = parseReleaseVersion(b);
|
|
375
|
+
if (!left || !right) return 0;
|
|
376
|
+
for (let i = 0; i < 3; i += 1) if (left.core[i] !== right.core[i]) return Math.sign(left.core[i] - right.core[i]);
|
|
377
|
+
return compareExperimentalBuildNumbers(left.experimentalBuildNumber, right.experimentalBuildNumber);
|
|
378
|
+
}
|
|
379
|
+
function isExperimentalBuild(version) {
|
|
380
|
+
const parsed = parseReleaseVersion(version);
|
|
381
|
+
return parsed !== null && parsed.experimentalBuildNumber !== null;
|
|
382
|
+
}
|
|
383
|
+
//#endregion
|
|
384
|
+
export { DEEP_HISTORY_SCROLLBACK_LINES as a, DashboardTelemetryReport as c, TELEMETRY_EVENT_SCHEMAS as d, TELEMETRY_KILL_SWITCH_FLAG as f, HookEnvelope as i, FeatureFlagsResponse as l, isExperimentalBuild as n, parseDataAttach as o, TelemetryState as p, HTTP_URL_RE as r, parseDataClientMessage as s, compareReleaseVersions as t, PendingCrashReport as u };
|