glimmervoid 0.41.0 → 0.42.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.
Files changed (29) hide show
  1. package/dist/bin/glimmervoid.js +13 -13
  2. package/dist/chunks/{adapters-JDV45XpZ.js → adapters-C8GfnK2r.js} +1 -1
  3. package/dist/chunks/{adapters-yVOK5me4.js → adapters-D2u85MEH.js} +30 -15
  4. package/dist/chunks/{agent-api-cli-BSY2jR0P.js → agent-api-cli-B-1MqjKc.js} +1 -1
  5. package/dist/chunks/{agent-api-cli-1xk9WryE.js → agent-api-cli-D7JPxNso.js} +10 -5
  6. package/dist/chunks/{agent-api-core-syEPHs7j.js → agent-api-core-PwO7fPoc.js} +19 -5
  7. package/dist/chunks/{agent-setup-cli-py1gUMvJ.js → agent-setup-cli-C9qDV2g5.js} +1 -1
  8. package/dist/chunks/config-store-BL8LDBuM.js +1 -0
  9. package/dist/chunks/{config-store-BEaaXTd5.js → config-store-BxCW2IwK.js} +2 -2
  10. package/dist/chunks/{contracts-V_hfT23R.js → contracts-LXlDbl4R.js} +2 -2
  11. package/dist/chunks/{control-messages-Ci4g6gD1.js → control-messages-88sdxt-U.js} +9 -2
  12. package/dist/chunks/{git-version-D_iXgYTZ.js → git-version-DqagvnAZ.js} +1 -1
  13. package/dist/chunks/{grok-BUGgQVE3.js → grok-DwrAcNHC.js} +1 -1
  14. package/dist/chunks/{main-Bbh8ky2x.js → main-DZzDU4Q4.js} +403 -123
  15. package/dist/chunks/{pair-cli-DkItUGpT.js → pair-cli-3KKNhZ22.js} +2 -2
  16. package/dist/chunks/{remote-config-DFwmHWed.js → remote-config-Ce5nN0zL.js} +1 -1
  17. package/dist/chunks/{session-C8IpFmGQ.js → session-3eSP3t1i.js} +8 -2
  18. package/dist/chunks/{session-routes-nySS7DUE.js → session-routes-B2oSzmQn.js} +1 -1
  19. package/dist/chunks/{settings-cli-CaYd3bUH.js → settings-cli-BYY991YC.js} +5 -5
  20. package/dist/chunks/{settings-readout-core-Du7n-zyD.js → settings-readout-core-CWAhwZKN.js} +2 -2
  21. package/dist/chunks/{ssh-sign-cli-BLzmQ3Vh.js → ssh-sign-cli-BbqYIPwh.js} +2 -2
  22. package/dist/client/assets/index-C9wfiVqt.js +176 -0
  23. package/dist/client/assets/index-PnaYWtoe.css +2 -0
  24. package/dist/client/index.html +2 -2
  25. package/dist/server/index.js +1 -1
  26. package/package.json +1 -1
  27. package/dist/chunks/config-store-DE_r4DP8.js +0 -1
  28. package/dist/client/assets/index-D7QFo-gy.js +0 -176
  29. package/dist/client/assets/index-DKnOk67Z.css +0 -2
@@ -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 { a as packageRoot } from "../chunks/runtime-paths-BkeftE60.js";
5
- import { t as AGENT_API_VERBS } from "../chunks/session-C8IpFmGQ.js";
5
+ import { t as AGENT_API_VERBS } from "../chunks/session-3eSP3t1i.js";
6
6
  import { i as execSync } from "../chunks/child-process-safe-D4hyVIXj.js";
7
- import { r as agentCommandHelpLines } from "../chunks/agent-api-core-syEPHs7j.js";
7
+ import { r as agentCommandHelpLines } from "../chunks/agent-api-core-PwO7fPoc.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
- import { i as parseCommandLine, r as gitDoctorRows, t as probeGitVersion } from "../chunks/git-version-D_iXgYTZ.js";
10
+ import { i as parseCommandLine, r as gitDoctorRows, t as probeGitVersion } from "../chunks/git-version-DqagvnAZ.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-DkItUGpT.js");
68
+ const { runPairCli } = await import("../chunks/pair-cli-3KKNhZ22.js");
69
69
  return runPairCli(subcommandArgs);
70
70
  }],
71
71
  ["agent", async (subcommandArgs) => {
72
- const { runAgentSetupCli } = await import("../chunks/agent-setup-cli-py1gUMvJ.js");
72
+ const { runAgentSetupCli } = await import("../chunks/agent-setup-cli-C9qDV2g5.js");
73
73
  return runAgentSetupCli(subcommandArgs);
74
74
  }],
75
75
  ["settings", async (subcommandArgs) => {
76
- const { runSettingsCli } = await import("../chunks/settings-cli-CaYd3bUH.js");
76
+ const { runSettingsCli } = await import("../chunks/settings-cli-BYY991YC.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-BLzmQ3Vh.js");
84
+ const { runSshSignCli } = await import("../chunks/ssh-sign-cli-BbqYIPwh.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-BSY2jR0P.js");
90
+ const { runAgentApiCli } = await import("../chunks/agent-api-cli-B-1MqjKc.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-BSY2jR0P.js");
104
+ const { sessionLimitsHelpLines } = await import("../chunks/agent-api-cli-B-1MqjKc.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-DE_r4DP8.js");
161
+ const { loadConfigFile } = await import("../chunks/config-store-BL8LDBuM.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-JDV45XpZ.js");
237
+ const { listAgentIds, describeAgentResolvability, setCustomAgents } = await import("../chunks/adapters-C8GfnK2r.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-py1gUMvJ.js");
245
+ const { inspectGrokAgentSetup } = await import("../chunks/agent-setup-cli-C9qDV2g5.js");
246
246
  const grokSetup = inspectGrokAgentSetup();
247
247
  line("grok hook setup", `${grokSetup.classification}: ${grokSetup.filePath}`);
248
248
  } catch (err) {
@@ -259,7 +259,7 @@ async function runDoctor() {
259
259
  try {
260
260
  const { resolvePackageBin } = await import("../chunks/runtime-paths-DSmormp7.js");
261
261
  const { execFileSync } = await import("../chunks/child-process-safe-CjVtRjDD.js");
262
- const { inspectGrokAgentSetup } = await import("../chunks/agent-setup-cli-py1gUMvJ.js");
262
+ const { inspectGrokAgentSetup } = await import("../chunks/agent-setup-cli-C9qDV2g5.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 +1 @@
1
- export { a as describeAgentResolvability, l as listAgentIds, f as setCustomAgents } from "./adapters-yVOK5me4.js";
1
+ export { a as describeAgentResolvability, l as listAgentIds, f as setCustomAgents } from "./adapters-D2u85MEH.js";
@@ -1,14 +1,14 @@
1
1
  import { o as relayPath } from "./runtime-paths-BkeftE60.js";
2
- import { Lt as FULL_SHA_RE, zt as shortSha$1 } from "./session-C8IpFmGQ.js";
2
+ import { Bt as shortSha$1, Rt as FULL_SHA_RE } from "./session-3eSP3t1i.js";
3
3
  import { n as execFileAsync, r as execFileSync } from "./child-process-safe-D4hyVIXj.js";
4
- import { a as InstallFlavor } from "./control-messages-Ci4g6gD1.js";
5
- import { o as supervisionLine } from "./session-routes-nySS7DUE.js";
4
+ import { a as InstallFlavor } from "./control-messages-88sdxt-U.js";
5
+ import { o as supervisionLine } from "./session-routes-B2oSzmQn.js";
6
6
  import { n as resolveAgentCommand, t as buildAgentSpawnCommand } from "./spawn-command-Cc40FiZI.js";
7
7
  import { c as textOr, s as rawTextOr } from "./coerce-NSst8oRP.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-BUGgQVE3.js";
9
+ import { i as isSpinnerChar, n as classifyAgentTitle, r as isBrailleChar, s as buildAgentEnv, t as grok } from "./grok-DwrAcNHC.js";
10
10
  import { t as buildHookCommand } from "./hook-command-core-qTNK-xMF.js";
11
- import "./contracts-V_hfT23R.js";
11
+ import "./contracts-LXlDbl4R.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";
@@ -656,21 +656,34 @@ var titleProfile = {
656
656
  agentSuffix: ` - ${ID}`
657
657
  }
658
658
  };
659
- function mapHookToSignal(event) {
660
- switch (String(event || "").toLowerCase()) {
659
+ var REQUEST_USER_INPUT_TOOL_NAME = "request_user_input";
660
+ function isRequestUserInput(event, payload) {
661
+ return event === "pretooluse" && payload?.tool_name === REQUEST_USER_INPUT_TOOL_NAME;
662
+ }
663
+ function mapHookToSignal(event, payload) {
664
+ const e = String(event || "").toLowerCase();
665
+ switch (e) {
661
666
  case "sessionstart": return "session-start";
662
667
  case "sessionend": return "session-end";
663
668
  case "userpromptsubmit": return "resume";
664
669
  case "stop": return "ready";
665
670
  case "permissionrequest": return "awaiting-input";
671
+ case "precompact": return "compaction-start";
672
+ case "postcompact": return "compaction-end";
673
+ case "subagentstart": return "subagent-start";
674
+ case "subagentstop": return "subagent-stop";
675
+ case "pretooluse": return isRequestUserInput(e, payload) ? "awaiting-input" : null;
666
676
  default: return null;
667
677
  }
668
678
  }
669
679
  function mapHookConfidence() {
670
680
  return null;
671
681
  }
672
- function mapHookPromptKind(event) {
673
- return String(event || "").toLowerCase() === "permissionrequest" ? "permission" : null;
682
+ function mapHookPromptKind(event, payload) {
683
+ const e = String(event || "").toLowerCase();
684
+ if (e === "permissionrequest") return "permission";
685
+ if (isRequestUserInput(e, payload)) return "elicitation";
686
+ return null;
674
687
  }
675
688
  function sessionIdOf(payload) {
676
689
  return payload?.session_id;
@@ -692,11 +705,13 @@ function userConfigFolders(env) {
692
705
  return codexHomes(env, null);
693
706
  }
694
707
  var TOML_LITERAL_STRING_FORBIDDEN = /[\x00-\x08\x0a-\x1f\x27\x7f]/;
695
- function buildHookArgs({ relayPath = RELAY_PATH, events = HOOK_EVENTS, matchedRelayHooks = [], bypassHookTrust = false, hookTools = [], hookToolRelayPath = HOOK_TOOL_RELAY_PATH, userHooks = [] } = {}) {
708
+ function buildHookArgs({ relayPath = RELAY_PATH, events = HOOK_EVENTS, matchedRelayHooks = [], bypassHookTrust = false, hookTools = [], hookToolRelayPath = HOOK_TOOL_RELAY_PATH, userHooks = [], observeToolCalls = false } = {}) {
696
709
  const args = bypassHookTrust ? [TRUST_BYPASS_FLAG] : [];
697
710
  const preToolUseGroups = [];
698
711
  const groupsByEvent = /* @__PURE__ */ new Map();
699
- for (const event of events) {
712
+ const relayedEvents = observeToolCalls && !events.includes("PreToolUse") ? [...events, "PreToolUse"] : events;
713
+ const relayedMatchedHooks = observeToolCalls ? matchedRelayHooks.filter(({ event }) => event !== "PreToolUse") : matchedRelayHooks;
714
+ for (const event of relayedEvents) {
700
715
  const command = buildHookCommand(relayPath, event);
701
716
  if (!command) return null;
702
717
  if (event === "PreToolUse") {
@@ -705,7 +720,7 @@ function buildHookArgs({ relayPath = RELAY_PATH, events = HOOK_EVENTS, matchedRe
705
720
  }
706
721
  groupsByEvent.set(event, [`{hooks=[{type='command',command='${command}'}]}`]);
707
722
  }
708
- for (const { event, matcher } of matchedRelayHooks) {
723
+ for (const { event, matcher } of relayedMatchedHooks) {
709
724
  const command = buildHookCommand(relayPath, event);
710
725
  if (!command) return null;
711
726
  const group = `{matcher='${matcher}',hooks=[{type='command',command='${command}'}]}`;
@@ -890,12 +905,12 @@ var codex = {
890
905
  capabilities: {
891
906
  hooks: true,
892
907
  awaitingInput: true,
893
- backgroundAgents: false,
908
+ backgroundAgents: true,
894
909
  resume: true,
895
- statusLine: false,
910
+ statusLine: true,
896
911
  rtk: true,
897
912
  saneYolo: true,
898
- compactQuiet: false,
913
+ compactQuiet: true,
899
914
  skipPermissionsFlag: true,
900
915
  headless: true
901
916
  }
@@ -1 +1 @@
1
- export { t as askAgentApi, r as runAgentApiCli, i as sessionLimitsHelpLines } from "./agent-api-cli-1xk9WryE.js";
1
+ export { t as askAgentApi, r as runAgentApiCli, i as sessionLimitsHelpLines } from "./agent-api-cli-D7JPxNso.js";
@@ -1,7 +1,7 @@
1
1
  import { t as errorCode } from "./text-DoirglWV.js";
2
- import { n as AGENT_URL_ENV, s as AgentLimitsReply } from "./session-C8IpFmGQ.js";
3
- import { i as formatSessionLimits } from "./session-routes-nySS7DUE.js";
4
- import { l as isAgentApiVerb, t as AGENT_COMMAND_HELP } from "./agent-api-core-syEPHs7j.js";
2
+ import { n as AGENT_URL_ENV, s as AgentLimitsReply } from "./session-3eSP3t1i.js";
3
+ import { i as formatSessionLimits } from "./session-routes-B2oSzmQn.js";
4
+ import { f as isAgentApiVerb, t as AGENT_COMMAND_HELP } from "./agent-api-core-PwO7fPoc.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";
@@ -26,8 +26,13 @@ var BODY_BUILDERS = {
26
26
  return child ? { child } : {};
27
27
  },
28
28
  close: (rest) => {
29
- const child = rest.join(" ").trim();
30
- return child ? { child } : null;
29
+ const discard = rest.includes("--discard");
30
+ const child = rest.filter((word) => word !== "--discard").join(" ").trim();
31
+ if (!child) return null;
32
+ return discard ? {
33
+ child,
34
+ discard
35
+ } : { child };
31
36
  },
32
37
  attention: (rest) => {
33
38
  const note = rest.join(" ").trim();
@@ -1,6 +1,6 @@
1
- import { a as AgentCloseRequest, c as AgentPullRequestRequest, f as AgentSettingsRequest, i as AgentAttentionRequest, l as AgentReadRequest, o as AgentEditRequest, p as AgentSpawnRequest, t as AGENT_API_VERBS, u as AgentSendRequest } from "./session-C8IpFmGQ.js";
2
- import { c as pullRequestKeyFromReference } from "./control-messages-Ci4g6gD1.js";
3
- import { n as NO_OWN_WORKTREE_REASON, t as COMMAND_ROUTES } from "./session-routes-nySS7DUE.js";
1
+ import { a as AgentCloseRequest, c as AgentPullRequestRequest, f as AgentSettingsRequest, i as AgentAttentionRequest, l as AgentReadRequest, o as AgentEditRequest, p as AgentSpawnRequest, t as AGENT_API_VERBS, u as AgentSendRequest } from "./session-3eSP3t1i.js";
2
+ import { c as pullRequestKeyFromReference } from "./control-messages-88sdxt-U.js";
3
+ import { n as NO_OWN_WORKTREE_REASON, t as COMMAND_ROUTES } from "./session-routes-B2oSzmQn.js";
4
4
  import crypto from "node:crypto";
5
5
  var MAX_SPAWNS_IN_FLIGHT = 1;
6
6
  var REFUSAL_REASON = "unknown session";
@@ -145,6 +145,20 @@ function parseAgentVerb(verb, payload) {
145
145
  request: parsed.request
146
146
  };
147
147
  }
148
+ function describeChildWorktree({ worktreeDir, branch }) {
149
+ return branch ? `branch ${branch} at ${worktreeDir}` : worktreeDir;
150
+ }
151
+ function describeUnpushedCloseRefusal(childName, childId, worktree) {
152
+ return `${childName} holds work that is not on the integration branch (${describeChildWorktree(worktree)}), so it was not closed. Ask it to land the work with glimmervoid push (glimmervoid send ${childId} <text>), or run glimmervoid close ${childId} --discard to end it and throw the work away`;
153
+ }
154
+ function describeChildEndNote(childName, outcome) {
155
+ if (outcome.kind === "kept") return `${childName} ended holding work that is not on the integration branch, so its worktree was kept: ${describeChildWorktree(outcome.worktree)}. The operator decides whether to merge or discard it`;
156
+ if (outcome.kind === "discarded") return `${childName} ended and its worktree was discarded`;
157
+ return `${childName} ended`;
158
+ }
159
+ function describeKeptChildAttention(childName, worktree) {
160
+ return `${childName}, a session this one spawned, ended holding unpushed work: ${describeChildWorktree(worktree)}`;
161
+ }
148
162
  function describePushLanding(landing) {
149
163
  if (!landing.merged) {
150
164
  const reason = landing.reason || "unknown";
@@ -261,7 +275,7 @@ var AGENT_COMMAND_HELP = Object.freeze({
261
275
  },
262
276
  close: {
263
277
  usage: "close <child>",
264
- summary: "End a session this one spawned, once its task is done",
278
+ summary: "End a session this one spawned and discard its worktree; refused while it holds unpushed work unless --discard",
265
279
  missingArgumentHint: "glimmervoid close: this command needs the spawned session, for example \"glimmervoid close <child>\""
266
280
  },
267
281
  attention: {
@@ -319,4 +333,4 @@ function agentCommandHelpLines() {
319
333
  return Object.values(AGENT_COMMAND_HELP).map(({ usage, summary }) => ` ${usage.padEnd(USAGE_COLUMN_WIDTH)}${summary}`);
320
334
  }
321
335
  //#endregion
322
- export { decideSpawnAllowance as a, describeRoleRefusal as c, projectMyPrs as d, projectReviews as f, decideAgentRequest as i, isAgentApiVerb as l, REFUSAL_REASON as n, deriveChildSessionName as o, agentCommandHelpLines as r, describePushLanding as s, AGENT_COMMAND_HELP as t, parseAgentVerb as u };
336
+ export { decideSpawnAllowance as a, describeKeptChildAttention as c, describeUnpushedCloseRefusal as d, isAgentApiVerb as f, projectReviews as h, decideAgentRequest as i, describePushLanding as l, projectMyPrs as m, REFUSAL_REASON as n, deriveChildSessionName as o, parseAgentVerb as p, agentCommandHelpLines as r, describeChildEndNote as s, AGENT_COMMAND_HELP as t, describeRoleRefusal as u };
@@ -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-BUGgQVE3.js";
2
+ import { a as classifyGrokHooksFile, o as renderGrokHooksFile, t as grok } from "./grok-DwrAcNHC.js";
3
3
  import { p as writeTextAtomicSync } from "./json-file-DFCTvPjj.js";
4
4
  import fs from "node:fs";
5
5
  import path from "node:path";
@@ -0,0 +1 @@
1
+ export { s as loadConfigFile } from "./config-store-BxCW2IwK.js";
@@ -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 { B as PORT_RANGE, F as FLYING_ANIMALS_GAP_RANGE, I as FLYING_ANIMALS_SCALE_RANGE, L as KEEP_MERGEABLE_TIMEOUT_MINUTES_RANGE, M as CHANGE_MAP_NARRATOR_TIMEOUT_RANGE, N as FLYING_ANIMALS_DEFAULTS, P as FLYING_ANIMALS_DURATION_RANGE, Q as POSTHOG_TRAFFIC_MULTIPLIER_RANGE, R as MEMORY_RESERVE_MB_RANGE, U as POSTHOG_FIX_TIMEOUT_RANGE, V as POSITIVE_NUMBER_RANGE, Y as POSTHOG_TRAFFIC_BASELINE_RANGE, Z as POSTHOG_TRAFFIC_MIN_USERS_RANGE, at as USAGE_SCAN_INTERVAL_RANGE, et as REPLAY_BUFFER_KB_RANGE, ft as WORKFLOWS_MAX_ACTIONS_PER_POLL_RANGE, it as USAGE_RETAIN_DAYS_RANGE, nt as USAGE_BUDGET_RANGE, pt as WORKFLOWS_MAX_CONCURRENT_SESSIONS_RANGE, rt as USAGE_INTEGER_RANGES, tt as TASK_TITLE_TIMEOUT_RANGE, z as NON_NEGATIVE_NUMBER_RANGE } from "./control-messages-Ci4g6gD1.js";
3
+ import { B as PORT_RANGE, F as FLYING_ANIMALS_GAP_RANGE, I as FLYING_ANIMALS_SCALE_RANGE, L as KEEP_MERGEABLE_TIMEOUT_MINUTES_RANGE, M as CHANGE_MAP_NARRATOR_TIMEOUT_RANGE, N as FLYING_ANIMALS_DEFAULTS, P as FLYING_ANIMALS_DURATION_RANGE, Q as POSTHOG_TRAFFIC_MULTIPLIER_RANGE, R as MEMORY_RESERVE_MB_RANGE, U as POSTHOG_FIX_TIMEOUT_RANGE, V as POSITIVE_NUMBER_RANGE, Y as POSTHOG_TRAFFIC_BASELINE_RANGE, Z as POSTHOG_TRAFFIC_MIN_USERS_RANGE, at as USAGE_SCAN_INTERVAL_RANGE, et as REPLAY_BUFFER_KB_RANGE, ft as WORKFLOWS_MAX_ACTIONS_PER_POLL_RANGE, it as USAGE_RETAIN_DAYS_RANGE, nt as USAGE_BUDGET_RANGE, pt as WORKFLOWS_MAX_CONCURRENT_SESSIONS_RANGE, rt as USAGE_INTEGER_RANGES, tt as TASK_TITLE_TIMEOUT_RANGE, z as NON_NEGATIVE_NUMBER_RANGE } from "./control-messages-88sdxt-U.js";
4
4
  import { n as glimmervoidHomeDir$1, t as decideConfigPath } from "./config-path-core-DFt-TemS.js";
5
5
  import { n as isRecord } from "./coerce-NSst8oRP.js";
6
6
  import { d as writeJsonAtomicSync, f as writeTextAtomic, p as writeTextAtomicSync } from "./json-file-DFCTvPjj.js";
7
- import { C as POST_TURN_CHECK_MODES, D as normalizeLegacyConfigNumbers, S as CHANGE_MAP_NARRATOR_ENGINES, T as USAGE_COST_MODES, b as configIssueMessage, f as AGENT_ID_SHAPE_MESSAGE, h as Config, p as BUILTIN_AGENT_IDS, s as FeatureFlagsResponse, u as TELEMETRY_KILL_SWITCH_FLAG, v as RUNTIME_CONFIG_SCALAR_KEYS, w as UPDATE_CHANNELS, x as BranchGcFileSettings } from "./contracts-V_hfT23R.js";
7
+ import { C as POST_TURN_CHECK_MODES, D as normalizeLegacyConfigNumbers, S as CHANGE_MAP_NARRATOR_ENGINES, T as USAGE_COST_MODES, b as configIssueMessage, f as AGENT_ID_SHAPE_MESSAGE, h as Config, p as BUILTIN_AGENT_IDS, s as FeatureFlagsResponse, u as TELEMETRY_KILL_SWITCH_FLAG, v as RUNTIME_CONFIG_SCALAR_KEYS, w as UPDATE_CHANNELS, x as BranchGcFileSettings } from "./contracts-LXlDbl4R.js";
8
8
  import fs from "node:fs";
9
9
  import path from "node:path";
10
10
  import os from "node:os";
@@ -1,5 +1,5 @@
1
- import { R as TaskTitle, Ut as repoParts, at as SessionPrLinks } from "./session-C8IpFmGQ.js";
2
- import { $ as POSTHOG_TRANSIENT_RECURRENCE_RANGE, A as BRANCH_GC_INTERVAL_MS_RANGE, B as PORT_RANGE, D as WorkflowsSettings, G as POSTHOG_INVESTIGATION_TIMEOUT_RANGE, H as POSTHOG_ESCALATION_RANGE, J as POSTHOG_RECURRENCE_WINDOW_RANGE, K as POSTHOG_MAX_CONCURRENT_RANGE, L as KEEP_MERGEABLE_TIMEOUT_MINUTES_RANGE, M as CHANGE_MAP_NARRATOR_TIMEOUT_RANGE, O as WorkflowsSettingsUpdate, Q as POSTHOG_TRAFFIC_MULTIPLIER_RANGE, R as MEMORY_RESERVE_MB_RANGE, U as POSTHOG_FIX_TIMEOUT_RANGE, V as POSITIVE_NUMBER_RANGE, W as POSTHOG_INTERVAL_RANGE, X as POSTHOG_TRAFFIC_COOLDOWN_RANGE, Y as POSTHOG_TRAFFIC_BASELINE_RANGE, Z as POSTHOG_TRAFFIC_MIN_USERS_RANGE, ct as VISIONS_DISPATCH_TIMEOUT_RANGE, dt as VISIONS_QUIET_MS_RANGE, et as REPLAY_BUFFER_KB_RANGE, j as BRANCH_GC_STALE_DAYS_RANGE, lt as VISIONS_INTENT_THREAD_TTL_MS_RANGE, o as OPERATOR_ACTIONS_BY_SURFACE, ot as VISIONS_ACTIVITY_MAX_PER_HOUR_RANGE, q as POSTHOG_MIN_USERS_RANGE, r as DASHBOARD_VIEWS, rt as USAGE_INTEGER_RANGES, s as OPERATOR_SURFACES, st as VISIONS_COOLDOWN_MS_RANGE, tt as TASK_TITLE_TIMEOUT_RANGE, ut as VISIONS_MAX_PER_HOUR_RANGE } from "./control-messages-Ci4g6gD1.js";
1
+ import { R as TaskTitle, Wt as repoParts, ot as SessionPrLinks } from "./session-3eSP3t1i.js";
2
+ import { $ as POSTHOG_TRANSIENT_RECURRENCE_RANGE, A as BRANCH_GC_INTERVAL_MS_RANGE, B as PORT_RANGE, D as WorkflowsSettings, G as POSTHOG_INVESTIGATION_TIMEOUT_RANGE, H as POSTHOG_ESCALATION_RANGE, J as POSTHOG_RECURRENCE_WINDOW_RANGE, K as POSTHOG_MAX_CONCURRENT_RANGE, L as KEEP_MERGEABLE_TIMEOUT_MINUTES_RANGE, M as CHANGE_MAP_NARRATOR_TIMEOUT_RANGE, O as WorkflowsSettingsUpdate, Q as POSTHOG_TRAFFIC_MULTIPLIER_RANGE, R as MEMORY_RESERVE_MB_RANGE, U as POSTHOG_FIX_TIMEOUT_RANGE, V as POSITIVE_NUMBER_RANGE, W as POSTHOG_INTERVAL_RANGE, X as POSTHOG_TRAFFIC_COOLDOWN_RANGE, Y as POSTHOG_TRAFFIC_BASELINE_RANGE, Z as POSTHOG_TRAFFIC_MIN_USERS_RANGE, ct as VISIONS_DISPATCH_TIMEOUT_RANGE, dt as VISIONS_QUIET_MS_RANGE, et as REPLAY_BUFFER_KB_RANGE, j as BRANCH_GC_STALE_DAYS_RANGE, lt as VISIONS_INTENT_THREAD_TTL_MS_RANGE, o as OPERATOR_ACTIONS_BY_SURFACE, ot as VISIONS_ACTIVITY_MAX_PER_HOUR_RANGE, q as POSTHOG_MIN_USERS_RANGE, r as DASHBOARD_VIEWS, rt as USAGE_INTEGER_RANGES, s as OPERATOR_SURFACES, st as VISIONS_COOLDOWN_MS_RANGE, tt as TASK_TITLE_TIMEOUT_RANGE, ut as VISIONS_MAX_PER_HOUR_RANGE } from "./control-messages-88sdxt-U.js";
3
3
  import { n as isRecord } from "./coerce-NSst8oRP.js";
4
4
  import path from "node:path";
5
5
  import { z } from "zod";
@@ -1,4 +1,4 @@
1
- import { $ as MyPrSearchNode, B as MyPr, Bt as GH_SEGMENT, C as PendingWakeup, D as SESSION_DOC_PATH_MAX_CHARS, Ft as hasRequiredActionHead, G as MyPrKeepMergeableResult, Gt as GithubPollingRefreshResult, Ht as REPO_SLUG_RE, J as MyPrMergeRequest, Kt as GithubPrsFreshness, M as SessionDoc, N as SessionSnapshot, P as SessionState, Q as MyPrMergeWhenReadyResult, R as TaskTitle, Tt as TeamReviewActionResult, W as MyPrKeepMergeableRequest, Wt as GithubPollingRefreshRequest, Y as MyPrMergeResult, Z as MyPrMergeWhenReadyRequest, _t as ReviewChecksState, at as SessionPrLinks, b as ConversationApproval, ct as CommitSha, ft as GithubReviewDecision, it as MyPrsStatus, kt as TeamReviewStatus, ot as pullRequestKeyFormat, qt as githubPollingShape, st as repositoryName, v as CoherenceHooksState, wt as TeamReviewActionRequest, x as ConversationApprovalDecision, y as ConversationAnswers, z as LinkedPr } from "./session-C8IpFmGQ.js";
1
+ import { $ as MyPrMergeWhenReadyResult, At as TeamReviewStatus, B as LinkedPr, C as PendingWakeup, D as SESSION_DOC_PATH_MAX_CHARS, Et as TeamReviewActionResult, G as MyPrKeepMergeableRequest, Gt as GithubPollingRefreshRequest, It as hasRequiredActionHead, Jt as githubPollingShape, K as MyPrKeepMergeableResult, Kt as GithubPollingRefreshResult, M as SessionDoc, N as SessionSnapshot, P as SessionState, Q as MyPrMergeWhenReadyRequest, R as TaskTitle, Tt as TeamReviewActionRequest, Ut as REPO_SLUG_RE, V as MyPr, Vt as GH_SEGMENT, X as MyPrMergeResult, Y as MyPrMergeRequest, at as MyPrsStatus, b as ConversationApproval, ct as repositoryName, et as MyPrSearchNode, lt as CommitSha, ot as SessionPrLinks, pt as GithubReviewDecision, qt as GithubPrsFreshness, st as pullRequestKeyFormat, v as CoherenceHooksState, vt as ReviewChecksState, x as ConversationApprovalDecision, y as ConversationAnswers, z as UnseenOutcome } from "./session-3eSP3t1i.js";
2
2
  import { z } from "zod";
3
3
  //#region shared/contracts/issues.ts
4
4
  var IssueRepoSlug = z.string().regex(REPO_SLUG_RE);
@@ -1376,6 +1376,7 @@ var SessionCardFields = z.object({
1376
1376
  saneYolo: z.boolean(),
1377
1377
  worktree: z.boolean(),
1378
1378
  workspace: z.boolean().optional(),
1379
+ remoteWorkspace: z.string().optional(),
1379
1380
  guarded: z.boolean().optional(),
1380
1381
  guardrailsReleased: z.boolean().optional(),
1381
1382
  resumeSessionId: nullableString,
@@ -1935,6 +1936,11 @@ var serverVariants = [
1935
1936
  awaitingBackgroundTasks: z.boolean(),
1936
1937
  timestamp
1937
1938
  }),
1939
+ loose("session-unseen", {
1940
+ id: sessionId,
1941
+ unseenOutcome: UnseenOutcome.nullable(),
1942
+ timestamp
1943
+ }),
1938
1944
  loose("session-wakeup", {
1939
1945
  id: sessionId,
1940
1946
  pendingWakeup: PendingWakeup.nullable(),
@@ -2321,7 +2327,8 @@ var serverVariants = [
2321
2327
  ts: timestamp,
2322
2328
  fiveHour: z.unknown().nullable(),
2323
2329
  sevenDay: z.unknown().nullable(),
2324
- source: z.string()
2330
+ source: z.string(),
2331
+ vendor: z.enum(["claude", "codex"]).optional()
2325
2332
  }),
2326
2333
  loose("usage-budget-alert", {
2327
2334
  scope: z.string(),
@@ -1,4 +1,4 @@
1
- import { t as AGENT_API_VERBS } from "./session-C8IpFmGQ.js";
1
+ import { t as AGENT_API_VERBS } from "./session-3eSP3t1i.js";
2
2
  import { r as execFileSync } from "./child-process-safe-D4hyVIXj.js";
3
3
  //#region server/core/command-line-core.ts
4
4
  var SUBCOMMANDS_HONORING_TRAILING_GLOBAL_OPTIONS = /* @__PURE__ */ new Set([
@@ -1,6 +1,6 @@
1
1
  import { r as errorMessage } from "./text-DoirglWV.js";
2
2
  import { o as relayPath } from "./runtime-paths-BkeftE60.js";
3
- import { A as SIGN_URL_ENV, n as AGENT_URL_ENV } from "./session-C8IpFmGQ.js";
3
+ import { A as SIGN_URL_ENV, n as AGENT_URL_ENV } from "./session-3eSP3t1i.js";
4
4
  import { t as HOOK_URL_ENV } from "./hook-relay-core-DA_bz2KA.js";
5
5
  import { n as isRecord } from "./coerce-NSst8oRP.js";
6
6
  import { a as SANE_YOLO_PATH_ENV, o as saneYoloEnv, r as RTK_PATH_ENV } from "./rtk-hook-core-B-MpzPin.js";