glimmervoid 0.44.0 → 0.44.2
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 +1 -1
- package/dist/bin/glimmervoid.js +8 -8
- package/dist/chunks/{adapters-CSRTLFiZ.js → adapters-7AfJ6yb3.js} +2 -2
- package/dist/chunks/{adapters-DjDtNufj.js → adapters-B_ss_kZh.js} +1 -1
- package/dist/chunks/{agent-api-cli-ep_5T7Hx.js → agent-api-cli-prUJ5ZGN.js} +1 -1
- package/dist/chunks/{agent-api-cli-CVgij_62.js → agent-api-cli-zwuWZlwk.js} +1 -1
- package/dist/chunks/{agent-api-core-DmPT6Hc_.js → agent-api-core-DQwd2ClI.js} +1 -1
- package/dist/chunks/{config-CGRYpcBQ.js → config-DlKkg6IX.js} +16 -1
- package/dist/chunks/{config-store-B1u3WA5t.js → config-store-DIrwF5iQ.js} +51 -7
- package/dist/chunks/config-store-LYSRHNQs.js +1 -0
- package/dist/chunks/{contracts-Fup4hhP9.js → contracts-lxJ0sQEl.js} +48 -15
- package/dist/chunks/{main-DPtmg7Bn.js → main-BCbulgNv.js} +352 -45
- package/dist/chunks/{pair-cli-BwOTWShx.js → pair-cli-B3VRcrHm.js} +2 -2
- package/dist/chunks/{remote-config-DWWnz5dP.js → remote-config-C91HwjWq.js} +1 -1
- package/dist/chunks/{settings-cli-C_owm3rw.js → settings-cli-C9eCc60b.js} +4 -4
- package/dist/chunks/{settings-readout-core-C_JzSeF7.js → settings-readout-core-DK1m5TUq.js} +1 -1
- package/dist/chunks/{ssh-sign-cli-CDjUtDKa.js → ssh-sign-cli-DCnHgHqo.js} +1 -1
- package/dist/client/assets/action-status-DXcC95xv.js +1 -0
- package/dist/client/assets/action-status-DXcC95xv.js.br +0 -0
- package/dist/client/assets/benchmark-panel-Cssmnd3z.js +1 -0
- package/dist/client/assets/benchmark-panel-Cssmnd3z.js.br +0 -0
- package/dist/client/assets/dom-helpers-CcEFPh-F.js +4 -0
- package/dist/client/assets/dom-helpers-CcEFPh-F.js.br +0 -0
- package/dist/client/assets/hooks-panel-Cli8EeBB.js +1 -0
- package/dist/client/assets/hooks-panel-Cli8EeBB.js.br +0 -0
- package/dist/client/assets/index-C3nOrTwM.css +2 -0
- package/dist/client/assets/index-C3nOrTwM.css.br +0 -0
- package/dist/client/assets/index-C8u3ZjM3.js +173 -0
- package/dist/client/assets/index-C8u3ZjM3.js.br +0 -0
- package/dist/client/assets/issues-panel-Bev1wadi.js +1 -0
- package/dist/client/assets/issues-panel-Bev1wadi.js.br +0 -0
- package/dist/client/assets/modal-CvDX5-_2.js +1 -0
- package/dist/client/assets/modal-CvDX5-_2.js.br +0 -0
- package/dist/client/assets/poll-ago-Dj148faJ.js +1 -0
- package/dist/client/assets/poll-ago-Dj148faJ.js.br +0 -0
- package/dist/client/assets/pr-queue-columns-Jleg5z3W.js +1 -0
- package/dist/client/assets/pr-queue-columns-Jleg5z3W.js.br +0 -0
- package/dist/client/assets/radar-panel-Dtp4ZzT3.js +1 -0
- package/dist/client/assets/radar-panel-Dtp4ZzT3.js.br +0 -0
- package/dist/client/assets/review-queue-panel-BQvU_-xl.js +2 -0
- package/dist/client/assets/review-queue-panel-BQvU_-xl.js.br +0 -0
- package/dist/client/assets/settings-panel-DegKCsoZ.js +3 -0
- package/dist/client/assets/settings-panel-DegKCsoZ.js.br +0 -0
- package/dist/client/assets/sprite-bee-DwCVghaj.png +0 -0
- package/dist/client/assets/sprite-cat-DRx9MYM3.png +0 -0
- package/dist/client/assets/sprite-cow-BX3Phf6B.png +0 -0
- package/dist/client/assets/sprite-deer-DwQYMzDV.png +0 -0
- package/dist/client/assets/sprite-dragon-CTIHOQJ3.png +0 -0
- package/dist/client/assets/sprite-fox-BI43RV3z.png +0 -0
- package/dist/client/assets/sprite-frog-CwGTpt-c.png +0 -0
- package/dist/client/assets/sprite-giraffe-DwM3MmKG.png +0 -0
- package/dist/client/assets/sprite-hamster-WN4q03Wr.png +0 -0
- package/dist/client/assets/sprite-hedgehog-CM9XZtPS.png +0 -0
- package/dist/client/assets/sprite-horse-B5CMO0Ue.png +0 -0
- package/dist/client/assets/sprite-owl-BybpXmvP.png +0 -0
- package/dist/client/assets/sprite-panda-DxAHDNb3.png +0 -0
- package/dist/client/assets/sprite-penguin-Du588fg8.png +0 -0
- package/dist/client/assets/sprite-pig-BTuwvuhq.png +0 -0
- package/dist/client/assets/sprite-red-panda-5y9J8xSy.png +0 -0
- package/dist/client/assets/sprite-sheep-vHUTjc5U.png +0 -0
- package/dist/client/assets/sprite-unicorn-CJ3g8Zet.png +0 -0
- package/dist/client/assets/sprite-whale-C3Galw4z.png +0 -0
- package/dist/client/assets/trace-panel-DFqImX92.js +1 -0
- package/dist/client/assets/trace-panel-DFqImX92.js.br +0 -0
- package/dist/client/assets/trail-acacia-5Fr79eBl.png +0 -0
- package/dist/client/assets/trail-acacia-frame2-D83GtoaY.png +0 -0
- package/dist/client/assets/trail-acacia-frame3-BBXTo5I-.png +0 -0
- package/dist/client/assets/trail-acacia-frame4-Xv9ZEsyD.png +0 -0
- package/dist/client/assets/trail-acorns-BOCEZemb.png +0 -0
- package/dist/client/assets/trail-acorns-frame2-BhHnaBud.png +0 -0
- package/dist/client/assets/trail-acorns-frame3-DKXXievy.png +0 -0
- package/dist/client/assets/trail-acorns-frame4-Ch2VXeMA.png +0 -0
- package/dist/client/assets/trail-bamboo-GqKJxCTV.png +0 -0
- package/dist/client/assets/trail-bamboo-frame2-bHacG8f_.png +0 -0
- package/dist/client/assets/trail-bamboo-frame3-CaoctCwJ.png +0 -0
- package/dist/client/assets/trail-bamboo-frame4-CqBfq3ff.png +0 -0
- package/dist/client/assets/trail-bubbles-frame2-eNpysXFZ.png +0 -0
- package/dist/client/assets/trail-bubbles-frame3-CWwqOJLM.png +0 -0
- package/dist/client/assets/trail-bubbles-frame4-Dj9TUXsV.png +0 -0
- package/dist/client/assets/trail-bubbles-pZ5FzCq7.png +0 -0
- package/dist/client/assets/trail-clouds-D18nQlSc.png +0 -0
- package/dist/client/assets/trail-clouds-frame2-W-_5l_i2.png +0 -0
- package/dist/client/assets/trail-clouds-frame3-CGQnOEBI.png +0 -0
- package/dist/client/assets/trail-clouds-frame4-CvlkFN6d.png +0 -0
- package/dist/client/assets/trail-clover-Ci7hUdO0.png +0 -0
- package/dist/client/assets/trail-clover-frame2-Z6NRhQ3U.png +0 -0
- package/dist/client/assets/trail-clover-frame3-0srIKU22.png +0 -0
- package/dist/client/assets/trail-clover-frame4-BO9UjM_-.png +0 -0
- package/dist/client/assets/trail-daisies-DVEPmnHq.png +0 -0
- package/dist/client/assets/trail-daisies-frame2-C_3-bnO5.png +0 -0
- package/dist/client/assets/trail-daisies-frame3-CR7GzXzm.png +0 -0
- package/dist/client/assets/trail-daisies-frame4-CKQDb8cR.png +0 -0
- package/dist/client/assets/trail-dust-Cf48D_ja.png +0 -0
- package/dist/client/assets/trail-dust-frame2-DAisulyH.png +0 -0
- package/dist/client/assets/trail-dust-frame3-BLi-DUzo.png +0 -0
- package/dist/client/assets/trail-dust-frame4-DGXo_Q2f.png +0 -0
- package/dist/client/assets/trail-embers-c-vlGDDo.png +0 -0
- package/dist/client/assets/trail-embers-frame2-wCK1DXpW.png +0 -0
- package/dist/client/assets/trail-embers-frame3-C5QS1ZRt.png +0 -0
- package/dist/client/assets/trail-embers-frame4-DA-O9bwZ.png +0 -0
- package/dist/client/assets/trail-hearts-DQwkXjr0.png +0 -0
- package/dist/client/assets/trail-hearts-frame2-DbyTUdl2.png +0 -0
- package/dist/client/assets/trail-hearts-frame3-XHaluU_W.png +0 -0
- package/dist/client/assets/trail-hearts-frame4-BA0W9inL.png +0 -0
- package/dist/client/assets/trail-honey-BC7CvXOJ.png +0 -0
- package/dist/client/assets/trail-honey-frame2-C4tRQx2J.png +0 -0
- package/dist/client/assets/trail-honey-frame3-V4pdDsZr.png +0 -0
- package/dist/client/assets/trail-honey-frame4-BqfUOIZk.png +0 -0
- package/dist/client/assets/trail-leaves-Di39skyY.png +0 -0
- package/dist/client/assets/trail-leaves-frame2-Dibep-05.png +0 -0
- package/dist/client/assets/trail-leaves-frame3-ByxojOFR.png +0 -0
- package/dist/client/assets/trail-leaves-frame4-CQGuAWJE.png +0 -0
- package/dist/client/assets/trail-logomarks-eIe8WIQx.png +0 -0
- package/dist/client/assets/trail-logomarks-frame2-Dw7X4i4F.png +0 -0
- package/dist/client/assets/trail-logomarks-frame3-CwoFgR8k.png +0 -0
- package/dist/client/assets/trail-logomarks-frame4-B7tFxRZO.png +0 -0
- package/dist/client/assets/trail-paws-C4cgGpTt.png +0 -0
- package/dist/client/assets/trail-paws-frame2-D8gNCPFb.png +0 -0
- package/dist/client/assets/trail-paws-frame3-BiEhbm80.png +0 -0
- package/dist/client/assets/trail-paws-frame4-BLLXXSyZ.png +0 -0
- package/dist/client/assets/trail-rainbow-BavE03WZ.png +0 -0
- package/dist/client/assets/trail-rainbow-frame2-BGZ7ZuQD.png +0 -0
- package/dist/client/assets/trail-rainbow-frame3-CY3FOgWe.png +0 -0
- package/dist/client/assets/trail-rainbow-frame4-DPWH6W3T.png +0 -0
- package/dist/client/assets/trail-seeds-BVCYzFRY.png +0 -0
- package/dist/client/assets/trail-seeds-frame2-CgopUUJh.png +0 -0
- package/dist/client/assets/trail-seeds-frame3-D2rIJzox.png +0 -0
- package/dist/client/assets/trail-seeds-frame4-WbnqCHlJ.png +0 -0
- package/dist/client/assets/trail-snow-BmXmGNtx.png +0 -0
- package/dist/client/assets/trail-snow-frame2-BQC5GITf.png +0 -0
- package/dist/client/assets/trail-snow-frame3-1GIpb4hr.png +0 -0
- package/dist/client/assets/trail-snow-frame4-BB4B66p3.png +0 -0
- package/dist/client/assets/trail-sparkles-D3Ivb6ob.png +0 -0
- package/dist/client/assets/trail-sparkles-frame2-DR03q4T0.png +0 -0
- package/dist/client/assets/trail-sparkles-frame3-DtdWWuVM.png +0 -0
- package/dist/client/assets/trail-sparkles-frame4-ea8pBjiu.png +0 -0
- package/dist/client/assets/trail-stars-EgySiFbH.png +0 -0
- package/dist/client/assets/trail-stars-frame2-BOXk5jcm.png +0 -0
- package/dist/client/assets/trail-stars-frame3-DJ2AW0RA.png +0 -0
- package/dist/client/assets/trail-stars-frame4-BcSJ1AVu.png +0 -0
- package/dist/client/assets/ui-prefs-CavQQH-s.js +1 -0
- package/dist/client/assets/ui-prefs-CavQQH-s.js.br +0 -0
- package/dist/client/assets/usage-panel-CEJqXYIA.js +1 -0
- package/dist/client/assets/usage-panel-CEJqXYIA.js.br +0 -0
- package/dist/client/assets/visions-panel-Dm3iKlhv.js +1 -0
- package/dist/client/assets/visions-panel-Dm3iKlhv.js.br +0 -0
- package/dist/client/assets/xterm-BdQ2Kshh.js +79 -0
- package/dist/client/assets/xterm-BdQ2Kshh.js.br +0 -0
- package/dist/client/assets/zod-BRLv4KqJ.js.br +0 -0
- package/dist/client/fonts/CommitMono-OFL.txt.br +0 -0
- package/dist/client/fonts/commit-mono-400-regular-core.woff2 +0 -0
- package/dist/client/fonts/commit-mono-700-regular-core.woff2 +0 -0
- package/dist/client/index.html +10 -5
- package/dist/client/index.html.br +0 -0
- package/dist/client/octicons-LICENSE.txt.br +3 -0
- package/dist/server/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunks/config-store-D4vUBcUX.js +0 -1
- package/dist/client/assets/index-BedqDfKJ.js +0 -177
- package/dist/client/assets/index-o9J4_Orv.css +0 -2
- package/dist/client/assets/xterm-kR64YvZ-.js +0 -79
- package/dist/client/fonts/commit-mono-400-italic.woff2 +0 -0
- package/dist/client/fonts/commit-mono-700-italic.woff2 +0 -0
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
Glimmervoid takes a feature from start to finish. Every agent works in its own git worktree, status comes from the agent's own hooks, and the one session that needs you comes to the front. Review and merge from the same page.
|
|
14
14
|
|
|
15
|
-
It is an orchestrator, not a harness. Claude Code, Codex and Grok run unmodified, as real processes in real terminals on your own machine. No cloud service, no account. Glimmervoid is developed inside Glimmervoid.
|
|
15
|
+
It is an orchestrator, not a harness. Claude Code, Codex and Grok run unmodified, as real processes in real terminals on your own machine, with your own login, subscription, skills, hooks and settings, talking straight to their model. No cloud service, no account. Glimmervoid is developed inside Glimmervoid.
|
|
16
16
|
|
|
17
17
|

|
|
18
18
|
|
package/dist/bin/glimmervoid.js
CHANGED
|
@@ -4,7 +4,7 @@ import { i as errorText } from "../chunks/text-DoirglWV.js";
|
|
|
4
4
|
import { o as packageRoot } from "../chunks/runtime-paths-ghcH9CeW.js";
|
|
5
5
|
import { t as AGENT_API_VERBS } from "../chunks/session-CUc6d7aS.js";
|
|
6
6
|
import { i as execSync } from "../chunks/child-process-safe-D4hyVIXj.js";
|
|
7
|
-
import { r as agentCommandHelpLines } from "../chunks/agent-api-core-
|
|
7
|
+
import { r as agentCommandHelpLines } from "../chunks/agent-api-core-DQwd2ClI.js";
|
|
8
8
|
import { t as renderTable } from "../chunks/ascii-figure-core-pDAwtlKO.js";
|
|
9
9
|
import { n as glimmervoidHomeDir, t as decideConfigPath } from "../chunks/config-path-core-DFt-TemS.js";
|
|
10
10
|
import { i as parseCommandLine, r as gitDoctorRows, t as probeGitVersion } from "../chunks/git-version-C3lznLS_.js";
|
|
@@ -65,7 +65,7 @@ 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-B3VRcrHm.js");
|
|
69
69
|
return runPairCli(subcommandArgs);
|
|
70
70
|
}],
|
|
71
71
|
["agent", async (subcommandArgs) => {
|
|
@@ -73,7 +73,7 @@ var OWN_SUBCOMMAND_RUNNERS = [
|
|
|
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-C9eCc60b.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-DCnHgHqo.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-prUJ5ZGN.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-prUJ5ZGN.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-LYSRHNQs.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-B_ss_kZh.js");
|
|
238
238
|
const declaredCustomAgents = await readDeclaredCustomAgents();
|
|
239
239
|
if (declaredCustomAgents.error) line("config", declaredCustomAgents.error);
|
|
240
240
|
setCustomAgents(declaredCustomAgents.declared);
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { s as relayPath } from "./runtime-paths-ghcH9CeW.js";
|
|
2
2
|
import { Vt as shortSha$1, zt as FULL_SHA_RE } from "./session-CUc6d7aS.js";
|
|
3
3
|
import { n as execFileAsync, r as execFileSync } from "./child-process-safe-D4hyVIXj.js";
|
|
4
|
-
import {
|
|
4
|
+
import { S as InstallFlavor } from "./config-DlKkg6IX.js";
|
|
5
5
|
import { o as supervisionLine } from "./session-routes--hrsvv7a.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
9
|
import { i as isSpinnerChar, n as classifyAgentTitle, r as isBrailleChar, s as buildAgentEnv, t as grok } from "./grok-Di4aQGre.js";
|
|
10
10
|
import { t as buildHookCommand } from "./hook-command-core-qTNK-xMF.js";
|
|
11
|
-
import "./contracts-
|
|
11
|
+
import "./contracts-lxJ0sQEl.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";
|
|
@@ -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-7AfJ6yb3.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-zwuWZlwk.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as errorCode } from "./text-DoirglWV.js";
|
|
2
2
|
import { c as AgentLimitsReply, n as AGENT_URL_ENV } from "./session-CUc6d7aS.js";
|
|
3
3
|
import { i as formatSessionLimits } from "./session-routes--hrsvv7a.js";
|
|
4
|
-
import { f as isAgentApiVerb, t as AGENT_COMMAND_HELP } from "./agent-api-core-
|
|
4
|
+
import { f as isAgentApiVerb, t as AGENT_COMMAND_HELP } from "./agent-api-core-DQwd2ClI.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";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { R as TASK_TITLE_CONTROL_CHARACTERS, T as RefinedTaskTitle, 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 } from "./session-CUc6d7aS.js";
|
|
2
|
-
import {
|
|
2
|
+
import { D as pullRequestKeyFromReference, c as TASK_TITLE_SOURCE_PRIORITY, o as PersistedTaskTitle } from "./config-DlKkg6IX.js";
|
|
3
3
|
import { n as NO_OWN_WORKTREE_REASON, t as COMMAND_ROUTES } from "./session-routes--hrsvv7a.js";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import crypto from "node:crypto";
|
|
@@ -1269,6 +1269,8 @@ var CommitComparison = z.object({
|
|
|
1269
1269
|
});
|
|
1270
1270
|
//#endregion
|
|
1271
1271
|
//#region shared/contracts/control-messages.ts
|
|
1272
|
+
var CHANGES_POLL_INTERVAL_MS = 4e3;
|
|
1273
|
+
var CHANGES_WATCH_LEASE_MS = 1e4;
|
|
1272
1274
|
var requestId = z.string().nullable().optional();
|
|
1273
1275
|
var sessionId = z.string();
|
|
1274
1276
|
var KeptWorkPath = z.object({
|
|
@@ -1405,6 +1407,11 @@ var ClientErrorReport = z.object({
|
|
|
1405
1407
|
name: z.string().max(128),
|
|
1406
1408
|
stack: z.string().max(8192)
|
|
1407
1409
|
}).strict();
|
|
1410
|
+
var CLIENT_LOG_TEXT_MAX_CHARS = 1e3;
|
|
1411
|
+
var ClientLogReport = z.object({
|
|
1412
|
+
scope: z.string().min(1).max(64),
|
|
1413
|
+
text: z.string().min(1).max(CLIENT_LOG_TEXT_MAX_CHARS)
|
|
1414
|
+
}).strict();
|
|
1408
1415
|
var DASHBOARD_TELEMETRY_EVENTS = Object.freeze([
|
|
1409
1416
|
"view_shown",
|
|
1410
1417
|
"operator_action",
|
|
@@ -1672,6 +1679,7 @@ var clientVariants = [
|
|
|
1672
1679
|
loose("restart-server"),
|
|
1673
1680
|
loose("focus-change", { focused: z.boolean() }),
|
|
1674
1681
|
loose("request-health-snapshot"),
|
|
1682
|
+
loose("request-telemetry-deletion", { requestId }),
|
|
1675
1683
|
loose("update-check"),
|
|
1676
1684
|
loose("update-apply"),
|
|
1677
1685
|
loose("session-trace", {
|
|
@@ -1722,6 +1730,7 @@ var clientVariants = [
|
|
|
1722
1730
|
requestId
|
|
1723
1731
|
}),
|
|
1724
1732
|
loose("client-error", ClientErrorReport.shape),
|
|
1733
|
+
loose("client-log", ClientLogReport.shape),
|
|
1725
1734
|
loose("dashboard-telemetry", {
|
|
1726
1735
|
event: z.enum(DASHBOARD_TELEMETRY_EVENTS),
|
|
1727
1736
|
properties: z.record(z.string(), z.unknown())
|
|
@@ -1731,6 +1740,7 @@ var clientVariants = [
|
|
|
1731
1740
|
force: z.unknown().optional(),
|
|
1732
1741
|
expectedState: SessionState.optional()
|
|
1733
1742
|
}),
|
|
1743
|
+
loose("watch-session-changes", { id: sessionId.nullable() }),
|
|
1734
1744
|
...idOnlyClientVariants
|
|
1735
1745
|
];
|
|
1736
1746
|
var ClientMessage = z.discriminatedUnion("type", clientVariants);
|
|
@@ -1807,6 +1817,7 @@ Object.freeze([
|
|
|
1807
1817
|
"open-issue-session-result",
|
|
1808
1818
|
"open-team-review-session-result",
|
|
1809
1819
|
"radar-issue-action-result",
|
|
1820
|
+
"telemetry-deletion-result",
|
|
1810
1821
|
"team-review-action-result",
|
|
1811
1822
|
"benchmark-action-result",
|
|
1812
1823
|
"my-pr-merge-result",
|
|
@@ -2267,6 +2278,10 @@ var serverVariants = [
|
|
|
2267
2278
|
...TeamReviewActionResult.shape,
|
|
2268
2279
|
requestId
|
|
2269
2280
|
}),
|
|
2281
|
+
loose("telemetry-deletion-result", {
|
|
2282
|
+
requestId,
|
|
2283
|
+
ok: z.boolean()
|
|
2284
|
+
}),
|
|
2270
2285
|
loose("benchmark-action-result", {
|
|
2271
2286
|
...BenchmarkActionResult.shape,
|
|
2272
2287
|
requestId
|
|
@@ -2937,4 +2952,4 @@ function configIssueMessage(error) {
|
|
|
2937
2952
|
return error.issues[0]?.message || "settings are invalid";
|
|
2938
2953
|
}
|
|
2939
2954
|
//#endregion
|
|
2940
|
-
export {
|
|
2955
|
+
export { MEMORY_RESERVE_MB_RANGE as $, BenchmarkId as A, parseExitPlanModeHookPayload as At, GithubPrKey as B, ONBOARDING_STEPS as C, PLAN_BODY_CAP_BYTES as Ct, pullRequestKeyFromReference as D, PLAN_TOOL_NAME as Dt, OPERATOR_SURFACES as E, PLAN_RESULT_HOOK_EVENT as Et, CommitComparison as F, IssueUpdate as Ft, WorkflowLabelName as G, GithubPrsFrame as H, MergedPrListing as I, IssuesSearchResponse as It, FLYING_ANIMALS_DEFAULTS as J, WorkflowsSettings as K, MinedPrReviewData as L, IssuesState as Lt, BenchmarkRun as M, GithubIssuePullRequestsRepository as Mt, BenchmarkStatus as N, GithubIssueResponse as Nt, BenchmarkActionRequest as O, PlanDecision as Ot, BenchmarkSuite as P, IssueKey as Pt, KEEP_MERGEABLE_TIMEOUT_MINUTES_RANGE as Q, PrCheckoutCaseInput as R, IssuesStatus as Rt, InstallFlavor as S, changeMapFactId as St, OPERATOR_ACTIONS_BY_SURFACE as T, PLAN_HOOK_OUTPUT_MAX_CHARS as Tt, comparablePrKey as U, GithubPrLightSearchNode as V, WorkflowCommentBody as W, FLYING_ANIMALS_GAP_RANGE as X, FLYING_ANIMALS_DURATION_RANGE as Y, FLYING_ANIMALS_SCALE_RANGE as Z, CHANGES_WATCH_LEASE_MS as _, MAX_RAW_LINE_CHARS as _t, ConfigUpdate as a, POSTHOG_TRAFFIC_MIN_USERS_RANGE as at, ClientMessage as b, CoherenceJournalOutput as bt, TASK_TITLE_SOURCE_PRIORITY as c, TASK_TITLE_TIMEOUT_RANGE as ct, POST_TURN_CHECK_MODES as d, USAGE_RETAIN_DAYS_RANGE as dt, NON_NEGATIVE_NUMBER_RANGE as et, UPDATE_CHANNELS as f, USAGE_SCAN_INTERVAL_RANGE as ft, CHANGES_POLL_INTERVAL_MS as g, SessionSetup as gt, normalizeLegacyConfigNumbers as h, UpdateJournal as ht, Config as i, POSTHOG_TRAFFIC_BASELINE_RANGE as it, BenchmarkJudgement as j, planTitle as jt, BenchmarkCase as k, PlanRevision as kt, configIssueMessage as l, USAGE_BUDGET_RANGE as lt, USAGE_VENDOR_KEYS as m, WORKFLOWS_MAX_CONCURRENT_SESSIONS_RANGE as mt, BUILTIN_AGENT_IDS as n, POSITIVE_NUMBER_RANGE as nt, PersistedTaskTitle as o, POSTHOG_TRAFFIC_MULTIPLIER_RANGE as ot, USAGE_COST_MODES as p, WORKFLOWS_MAX_ACTIONS_PER_POLL_RANGE as pt, WorkflowsState as q, BrowserConfig as r, POSTHOG_FIX_TIMEOUT_RANGE as rt, RUNTIME_CONFIG_SCALAR_KEYS as s, REPLAY_BUFFER_KB_RANGE as st, AGENT_ID_SHAPE_MESSAGE as t, PORT_RANGE as tt, BranchGcFileSettings as u, USAGE_INTEGER_RANGES as ut, CLIENT_LOG_TEXT_MAX_CHARS as v, TraceCheckpoint as vt, ONBOARDING_STEP_STATES as w, PLAN_HOOK_EVENT as wt, DASHBOARD_VIEWS as x, ChangeMap as xt, CONTROL_FRAME_MAX_BYTES as y, TraceRecord as yt, GithubPrDetailNode as z, issuePullRequestStateFromGithub as zt };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { n as errorLabel, r as errorMessage } from "./text-DoirglWV.js";
|
|
2
2
|
import { n as equalsIgnoringCaseOnWindows } from "./paths-Bu4eH1Yd.js";
|
|
3
|
-
import { $ as
|
|
3
|
+
import { $ as MEMORY_RESERVE_MB_RANGE, J as FLYING_ANIMALS_DEFAULTS, Q as KEEP_MERGEABLE_TIMEOUT_MINUTES_RANGE, X as FLYING_ANIMALS_GAP_RANGE, Y as FLYING_ANIMALS_DURATION_RANGE, Z as FLYING_ANIMALS_SCALE_RANGE, at as POSTHOG_TRAFFIC_MIN_USERS_RANGE, ct as TASK_TITLE_TIMEOUT_RANGE, d as POST_TURN_CHECK_MODES, dt as USAGE_RETAIN_DAYS_RANGE, et as NON_NEGATIVE_NUMBER_RANGE, f as UPDATE_CHANNELS, ft as USAGE_SCAN_INTERVAL_RANGE, h as normalizeLegacyConfigNumbers, i as Config, it as POSTHOG_TRAFFIC_BASELINE_RANGE, l as configIssueMessage, lt as USAGE_BUDGET_RANGE, mt as WORKFLOWS_MAX_CONCURRENT_SESSIONS_RANGE, n as BUILTIN_AGENT_IDS, nt as POSITIVE_NUMBER_RANGE, ot as POSTHOG_TRAFFIC_MULTIPLIER_RANGE, p as USAGE_COST_MODES, pt as WORKFLOWS_MAX_ACTIONS_PER_POLL_RANGE, rt as POSTHOG_FIX_TIMEOUT_RANGE, s as RUNTIME_CONFIG_SCALAR_KEYS, st as REPLAY_BUFFER_KB_RANGE, t as AGENT_ID_SHAPE_MESSAGE, tt as PORT_RANGE, u as BranchGcFileSettings, ut as USAGE_INTEGER_RANGES } from "./config-DlKkg6IX.js";
|
|
4
4
|
import { n as isRecord } from "./coerce-NSst8oRP.js";
|
|
5
5
|
import { n as glimmervoidHomeDir$1, t as decideConfigPath } from "./config-path-core-DFt-TemS.js";
|
|
6
6
|
import { d as writeJsonAtomicSync, f as writeTextAtomic, p as writeTextAtomicSync } from "./json-file-DFCTvPjj.js";
|
|
7
|
-
import { s as FeatureFlagsResponse, u as TELEMETRY_KILL_SWITCH_FLAG } from "./contracts-
|
|
7
|
+
import { s as FeatureFlagsResponse, u as TELEMETRY_KILL_SWITCH_FLAG } from "./contracts-lxJ0sQEl.js";
|
|
8
8
|
import fs from "node:fs";
|
|
9
9
|
import path from "node:path";
|
|
10
10
|
import os from "node:os";
|
|
@@ -264,7 +264,11 @@ var POSTHOG_INGEST_HOST = "https://us.i.posthog.com";
|
|
|
264
264
|
var TELEMETRY_BATCH_URL = `${POSTHOG_INGEST_HOST}/batch/`;
|
|
265
265
|
var TELEMETRY_FLAGS_URL = `${POSTHOG_INGEST_HOST}/flags?v=2`;
|
|
266
266
|
var MAX_STACK_LENGTH = 16384;
|
|
267
|
-
var
|
|
267
|
+
var ACCOUNT_HASH_SALT = "glimmervoid-account-hash-v1";
|
|
268
|
+
var OPENAI_AUTH_CLAIM = "https://api.openai.com/auth";
|
|
269
|
+
var UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
270
|
+
var OPENAI_USER_ID_PATTERN = /^user-[A-Za-z0-9]+$/;
|
|
271
|
+
var FIRST_RUN_NOTICE = ["Glimmervoid collects usage data to help us improve it. No prompts or project information are collected.", "Turn it off in Settings > Privacy, or GLIMMERVOID_TELEMETRY=0."].join("\n");
|
|
268
272
|
var TRUTHY_FLAGS = /* @__PURE__ */ new Set([
|
|
269
273
|
"1",
|
|
270
274
|
"true",
|
|
@@ -573,6 +577,45 @@ function decideIsDevInstall({ installFlavor, isBundled, homeDir, defaultHomeDir
|
|
|
573
577
|
if (installFlavor === "clone" || !isBundled) return true;
|
|
574
578
|
return comparablePath(homeDir) !== comparablePath(defaultHomeDir);
|
|
575
579
|
}
|
|
580
|
+
function parseJsonOrNull(text) {
|
|
581
|
+
try {
|
|
582
|
+
return JSON.parse(text);
|
|
583
|
+
} catch {
|
|
584
|
+
return null;
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
function fieldOf(value, key) {
|
|
588
|
+
if (typeof value !== "object" || value === null || !(key in value)) return void 0;
|
|
589
|
+
return Reflect.get(value, key);
|
|
590
|
+
}
|
|
591
|
+
function hashAccountId(rawAccountId) {
|
|
592
|
+
return createHash("sha256").update(`${ACCOUNT_HASH_SALT}:${rawAccountId}`).digest("hex");
|
|
593
|
+
}
|
|
594
|
+
function claudeAccountUuidOf(claudeConfigText) {
|
|
595
|
+
const accountUuid = fieldOf(fieldOf(parseJsonOrNull(claudeConfigText), "oauthAccount"), "accountUuid");
|
|
596
|
+
return typeof accountUuid === "string" && UUID_PATTERN.test(accountUuid) ? accountUuid : null;
|
|
597
|
+
}
|
|
598
|
+
function codexUserIdOf(codexAuthText) {
|
|
599
|
+
const idToken = fieldOf(fieldOf(parseJsonOrNull(codexAuthText), "tokens"), "id_token");
|
|
600
|
+
if (typeof idToken !== "string") return null;
|
|
601
|
+
const encodedClaims = idToken.split(".")[1];
|
|
602
|
+
if (!encodedClaims) return null;
|
|
603
|
+
const userId = fieldOf(fieldOf(parseJsonOrNull(Buffer.from(encodedClaims, "base64url").toString("utf8")), OPENAI_AUTH_CLAIM), "user_id");
|
|
604
|
+
return typeof userId === "string" && OPENAI_USER_ID_PATTERN.test(userId) ? userId : null;
|
|
605
|
+
}
|
|
606
|
+
function buildPersonProperties(accountIds, firstSeen) {
|
|
607
|
+
return {
|
|
608
|
+
$set: {
|
|
609
|
+
...accountIds.claudeAccountUuid ? { claude_account_hash: hashAccountId(accountIds.claudeAccountUuid) } : {},
|
|
610
|
+
...accountIds.codexUserId ? { codex_user_hash: hashAccountId(accountIds.codexUserId) } : {}
|
|
611
|
+
},
|
|
612
|
+
$set_once: {
|
|
613
|
+
first_app_version: firstSeen.appVersion.slice(0, 512),
|
|
614
|
+
first_os_platform: firstSeen.osPlatform.slice(0, 512),
|
|
615
|
+
first_install_flavor: firstSeen.installFlavor.slice(0, 512)
|
|
616
|
+
}
|
|
617
|
+
};
|
|
618
|
+
}
|
|
576
619
|
function nodeMajorVersion(nodeVersion) {
|
|
577
620
|
const major = Number.parseInt(nodeVersion.replace(/^v/, ""), 10);
|
|
578
621
|
return Number.isFinite(major) ? major : 0;
|
|
@@ -1834,8 +1877,8 @@ var SECTIONS = Object.freeze([
|
|
|
1834
1877
|
settings: [{
|
|
1835
1878
|
id: "telemetry-enabled",
|
|
1836
1879
|
path: "telemetry.enabled",
|
|
1837
|
-
title: "Send
|
|
1838
|
-
description: "
|
|
1880
|
+
title: "Send usage data",
|
|
1881
|
+
description: "Helps us improve Glimmervoid. Sent under a random install id: version, platform, app starts, daily activity, session starts and ends with agent kind, exit kind and duration, errors as their type, error code and scrubbed stack frames, per session token counts, models and estimated costs from the usage scan, and a salted one-way hash of your Claude and Codex account ids so installs of one account count together. Never prompts, project information, error messages, paths, repository or branch names, objectives, terminal output, emails or names. Delete my data asks for everything sent under this install to be erased and starts a new install id. GLIMMERVOID_TELEMETRY=0, DO_NOT_TRACK=1 or CI=true turn it off regardless.",
|
|
1839
1882
|
control: "toggle",
|
|
1840
1883
|
keywords: [
|
|
1841
1884
|
"telemetry",
|
|
@@ -3697,7 +3740,7 @@ function retiredGuardrailKeysWarning(config) {
|
|
|
3697
3740
|
if (retiredKeys.length === 0) return null;
|
|
3698
3741
|
return `[guardrails] config.json still has ${retiredKeys.join(" and ")}. These keys are ignored, so their unreadable paths and opt-outs do not apply until you move them.`;
|
|
3699
3742
|
}
|
|
3700
|
-
function createConfigStore({ settingsDefaults } = {}) {
|
|
3743
|
+
function createConfigStore({ settingsDefaults, readTelemetryInstallId } = {}) {
|
|
3701
3744
|
const configPath = resolveConfigPath();
|
|
3702
3745
|
const effectiveDefaults = {
|
|
3703
3746
|
...DEFAULT_CONFIG,
|
|
@@ -3847,6 +3890,7 @@ function createConfigStore({ settingsDefaults } = {}) {
|
|
|
3847
3890
|
...config.telemetry
|
|
3848
3891
|
}),
|
|
3849
3892
|
telemetryForcedOff: isTelemetryForcedOff(process.env),
|
|
3893
|
+
telemetryInstallId: readTelemetryInstallId?.() ?? null,
|
|
3850
3894
|
rtk: config.rtk ?? effectiveDefaults.rtk,
|
|
3851
3895
|
rtkInstallSupported: assetForPlatform(process.platform, process.arch) !== null,
|
|
3852
3896
|
saneYolo: config.saneYolo ?? effectiveDefaults.saneYolo,
|
|
@@ -3993,4 +4037,4 @@ function createConfigStore({ settingsDefaults } = {}) {
|
|
|
3993
4037
|
};
|
|
3994
4038
|
}
|
|
3995
4039
|
//#endregion
|
|
3996
|
-
export {
|
|
4040
|
+
export { readEnvSecrets as $, settingsOf as A, buildExceptionProperties as B, deleteValueAtPath as C, scoreSettingsSearch as D, parsePosthogProjectSelection as E, TELEMETRY_BATCH_URL as F, decideIsDevInstall as G, classifySessionExit as H, TELEMETRY_FLAGS_URL as I, exceptionFingerprint as J, decideRemoteTelemetryState as K, adapterBucket as L, FILE_ONLY_GROUPS as M, SETTINGS_REGISTRY as N, setValueAtPath as O, FIRST_RUN_NOTICE as P, ENV_SECRET_BINDINGS as Q, buildAiGenerationEvents as R, cloneValue as S, hasScaledUnit as T, claudeAccountUuidOf as U, buildPersonProperties as V, codexUserIdOf as W, parsePosthogReleaseId as X, nodeMajorVersion as Y, resolveProjectToken as Z, SECRET_PRESENCE_SUFFIX as _, generateProjectId as a, planWorktreeGc as at, validateSettingsBlock as b, resolveConfigPath as c, worktreeIntegrationTips as ct, assetForPlatform as d, isSameDirectoryPath as dt, stableConfigKey as et, decideRtkInstall as f, verifyDigest as g, isRtkBinaryName as h, ensureProjectIds as i, planBranchGc as it, valueAtPath as j, settingsGroupOf as k, saveConfigFileOnce as l, canonicalizePath as lt, installTargetPath as m, DEFAULT_CONFIG as n, DEFAULT_BRANCH_GC_PREFIXES as nt, glimmervoidHomeDir as o, sessionIdFromBranch as ot, findEscapingArchiveMember as p, decideTelemetryConsent as q, createConfigStore as r, matchedPrefix as rt, loadConfigFile as s, usablePrefixes as st, ABORT_CONFIG_SAVE as t, withEnvSecrets as tt, validateConfig as u, comparableDirectoryPath as ut, mergeSettingsBlock as v, displayText as w, SETTINGS_INDEX as x, settingsBlockSpecFor as y, buildBrowserExceptionProperties as z };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { s as loadConfigFile } from "./config-store-DIrwF5iQ.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import "./session-CUc6d7aS.js";
|
|
2
|
-
import { C as
|
|
2
|
+
import { C as ONBOARDING_STEPS, E as OPERATOR_SURFACES, T as OPERATOR_ACTIONS_BY_SURFACE, n as BUILTIN_AGENT_IDS, w as ONBOARDING_STEP_STATES, x as DASHBOARD_VIEWS } from "./config-DlKkg6IX.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"]);
|
|
@@ -62,8 +62,27 @@ var RADAR_HANDOFF_STEPS = Object.freeze([
|
|
|
62
62
|
var OPERATOR_ACTIONS = Object.freeze([...new Set(Object.values(OPERATOR_ACTIONS_BY_SURFACE).flat())]);
|
|
63
63
|
var nonNegativeInteger = z.number().int().nonnegative();
|
|
64
64
|
var boundedText = z.string().max(512);
|
|
65
|
-
var
|
|
66
|
-
var
|
|
65
|
+
var sha256Hex = z.string().regex(/^[0-9a-f]{64}$/);
|
|
66
|
+
var PersonProperties = z.object({
|
|
67
|
+
$set: z.object({
|
|
68
|
+
claude_account_hash: sha256Hex.optional(),
|
|
69
|
+
codex_user_hash: sha256Hex.optional()
|
|
70
|
+
}).strict(),
|
|
71
|
+
$set_once: z.object({
|
|
72
|
+
first_app_version: boundedText,
|
|
73
|
+
first_os_platform: boundedText,
|
|
74
|
+
first_install_flavor: boundedText
|
|
75
|
+
}).strict()
|
|
76
|
+
}).strict();
|
|
77
|
+
var AppStartedProperties = z.object({
|
|
78
|
+
is_first_start: z.boolean(),
|
|
79
|
+
...PersonProperties.partial().shape
|
|
80
|
+
}).strict();
|
|
81
|
+
var AppActiveProperties = z.object({
|
|
82
|
+
active_session_count: nonNegativeInteger,
|
|
83
|
+
...PersonProperties.partial().shape
|
|
84
|
+
}).strict();
|
|
85
|
+
var DataDeletionRequestedProperties = z.object({}).strict();
|
|
67
86
|
var SessionStartedProperties = z.object({ adapter: z.enum(TELEMETRY_ADAPTERS) }).strict();
|
|
68
87
|
var SessionEndedProperties = z.object({
|
|
69
88
|
adapter: z.enum(TELEMETRY_ADAPTERS),
|
|
@@ -162,16 +181,17 @@ var TELEMETRY_EVENT_SCHEMAS = Object.freeze({
|
|
|
162
181
|
team_review_settled: TeamReviewSettledProperties,
|
|
163
182
|
team_review_post_refused: TeamReviewPostRefusedProperties,
|
|
164
183
|
radar_investigation_finished: RadarInvestigationFinishedProperties,
|
|
165
|
-
radar_fix_handoff_failed: RadarFixHandoffFailedProperties
|
|
184
|
+
radar_fix_handoff_failed: RadarFixHandoffFailedProperties,
|
|
185
|
+
data_deletion_requested: DataDeletionRequestedProperties
|
|
166
186
|
});
|
|
167
187
|
Object.freeze([
|
|
168
188
|
{
|
|
169
189
|
name: "app_started",
|
|
170
|
-
description: "The server started listening."
|
|
190
|
+
description: "The server started listening, and whether this is the first start, with no Glimmervoid config file yet. Also sets the person properties: a one-way hash of the Claude Code account id and the Codex user id when logged in, and the first version, platform and install flavor seen."
|
|
171
191
|
},
|
|
172
192
|
{
|
|
173
193
|
name: "app_active",
|
|
174
|
-
description: "Once a day while the server runs, with how many sessions are live."
|
|
194
|
+
description: "Once a day while the server runs, with how many sessions are live, and the same person properties as app_started."
|
|
175
195
|
},
|
|
176
196
|
{
|
|
177
197
|
name: "session_started",
|
|
@@ -220,6 +240,10 @@ Object.freeze([
|
|
|
220
240
|
{
|
|
221
241
|
name: "radar_fix_handoff_failed",
|
|
222
242
|
description: "Handing a Radar fix over as a pull request failed, with which step failed. Never the branch or the error text."
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
name: "data_deletion_requested",
|
|
246
|
+
description: "Delete my data was confirmed in Settings > Privacy, with no properties. Sent under the old install id even when telemetry is off, unless the maintainers stopped all sending, and then the install id is replaced. PostHog deletes the person and every event under that id on receipt."
|
|
223
247
|
}
|
|
224
248
|
]);
|
|
225
249
|
Object.freeze([
|
|
@@ -261,13 +285,17 @@ var DataClientMessage = z.discriminatedUnion("type", [
|
|
|
261
285
|
z.object({ type: z.literal("pause-output") }),
|
|
262
286
|
z.object({ type: z.literal("resume-output") })
|
|
263
287
|
]);
|
|
264
|
-
z.object({
|
|
288
|
+
var PtySizeFrame = z.object({
|
|
265
289
|
type: z.literal("pty-size"),
|
|
266
290
|
cols: viewerCols,
|
|
267
291
|
rows: viewerRows,
|
|
268
292
|
seq: z.number().int().nonnegative()
|
|
269
293
|
});
|
|
294
|
+
var OutputBeatFrame = z.object({ type: z.literal("output-beat") });
|
|
295
|
+
z.discriminatedUnion("type", [PtySizeFrame, OutputBeatFrame]);
|
|
270
296
|
var DATA_ATTACH_HISTORY_PARAM = "history";
|
|
297
|
+
var DATA_ATTACH_OUTPUT_PARAM = "output";
|
|
298
|
+
var DATA_ATTACH_PAUSED_OUTPUT = "paused";
|
|
271
299
|
var DEEP_HISTORY_SCROLLBACK_LINES = 5e3;
|
|
272
300
|
var DataAttachHistory = z.enum(["screen", "deep"]);
|
|
273
301
|
function decodeJson(raw) {
|
|
@@ -282,14 +310,19 @@ function parseDataClientMessage(raw) {
|
|
|
282
310
|
if (!parsed.success) return null;
|
|
283
311
|
return parsed.data;
|
|
284
312
|
}
|
|
285
|
-
function
|
|
286
|
-
if (typeof rawUrl !== "string") return
|
|
313
|
+
function attachQueryOf(rawUrl) {
|
|
314
|
+
if (typeof rawUrl !== "string") return new URLSearchParams();
|
|
287
315
|
const queryAt = rawUrl.indexOf("?");
|
|
288
|
-
if (queryAt === -1) return
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
316
|
+
if (queryAt === -1) return new URLSearchParams();
|
|
317
|
+
return new URLSearchParams(rawUrl.slice(queryAt + 1).split("#")[0]);
|
|
318
|
+
}
|
|
319
|
+
function parseDataAttach(rawUrl) {
|
|
320
|
+
const query = attachQueryOf(rawUrl);
|
|
321
|
+
const history = DataAttachHistory.safeParse(query.get(DATA_ATTACH_HISTORY_PARAM));
|
|
322
|
+
return {
|
|
323
|
+
history: history.success ? history.data : "screen",
|
|
324
|
+
isOutputPaused: query.get(DATA_ATTACH_OUTPUT_PARAM) === DATA_ATTACH_PAUSED_OUTPUT
|
|
325
|
+
};
|
|
293
326
|
}
|
|
294
327
|
//#endregion
|
|
295
328
|
//#region shared/contracts/hooks.ts
|
|
@@ -314,4 +347,4 @@ z.object({
|
|
|
314
347
|
projects: z.array(z.string()).optional()
|
|
315
348
|
}).passthrough();
|
|
316
349
|
//#endregion
|
|
317
|
-
export { parseDataClientMessage as a, PendingCrashReport as c, TelemetryState as d,
|
|
350
|
+
export { parseDataClientMessage as a, PendingCrashReport as c, TelemetryState as d, parseDataAttach as i, TELEMETRY_EVENT_SCHEMAS as l, HookEnvelope as n, DashboardTelemetryReport as o, DEEP_HISTORY_SCROLLBACK_LINES as r, FeatureFlagsResponse as s, HTTP_URL_RE as t, TELEMETRY_KILL_SWITCH_FLAG as u };
|