glimmervoid 0.32.0 → 0.33.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 (28) hide show
  1. package/dist/bin/glimmervoid.js +15 -9
  2. package/dist/chunks/{adapters-BU74M4QZ.js → adapters-C9gI2MHS.js} +1 -1
  3. package/dist/chunks/{adapters-CoC18rdt.js → adapters-CUBEhjOR.js} +3 -3
  4. package/dist/chunks/agent-api-cli-CRJYxzVU.js +2 -0
  5. package/dist/chunks/{agent-api-cli-V_BkYhBI.js → agent-api-cli-DuT7437B.js} +12 -3
  6. package/dist/chunks/{agent-api-core-B3YI8SYs.js → agent-api-core-Ddg15j2j.js} +10 -1
  7. package/dist/chunks/{agent-setup-cli-D4956BfN.js → agent-setup-cli-CFielF2o.js} +1 -1
  8. package/dist/chunks/{config-CZ4H51D0.js → config-Cneb8Ujj.js} +1 -11
  9. package/dist/chunks/{config-store-BVtdHkDK.js → config-store-DYsZJDux.js} +2 -4
  10. package/dist/chunks/config-store-DaRS2c2d.js +2 -0
  11. package/dist/chunks/{contracts-DXujp-Zn.js → contracts-DWv6q8ir.js} +43 -41
  12. package/dist/chunks/{grok-C4lzPFEg.js → grok-BYKnBgdr.js} +2 -1
  13. package/dist/chunks/{knowledge-graph-cli-Bjy9_kv5.js → knowledge-graph-cli-C7G-x5sY.js} +1 -1
  14. package/dist/chunks/{main-DSbpYn2Y.js → main-J6y2RTri.js} +2002 -1525
  15. package/dist/chunks/{pair-cli-CKn-wUw9.js → pair-cli-BuyzST-U.js} +2 -2
  16. package/dist/chunks/{remote-config-DP44Ybt9.js → remote-config-DJHVb-HU.js} +1 -1
  17. package/dist/chunks/{session-B8fJb_Or.js → session-C7rstCmA.js} +25 -2
  18. package/dist/chunks/ssh-sign-cli-SWtTF00D.js +133 -0
  19. package/dist/chunks/ssh-signing-core-CRhVVWNW.js +49 -0
  20. package/dist/client/assets/index-BxU3Ww0L.css +1 -0
  21. package/dist/client/assets/index-CoFsm_PF.js +254 -0
  22. package/dist/client/index.html +2 -2
  23. package/dist/server/index.js +1 -1
  24. package/dist/session/sandbox-open-launcher.js +42 -2
  25. package/package.json +1 -1
  26. package/dist/chunks/config-store-Cp62jN1O.js +0 -2
  27. package/dist/client/assets/index-C_XKsDFx.css +0 -1
  28. package/dist/client/assets/index-CoqWjYxP.js +0 -254
@@ -2,7 +2,7 @@
2
2
  import { o as nodePtyRebuildHint, r as firstLine, t as probeNodePty } from "../chunks/node-pty-preflight-C8QIlrtU.js";
3
3
  import { i as errorText } from "../chunks/text-DoirglWV.js";
4
4
  import { a as packageRoot } from "../chunks/runtime-paths-BPoxENmK.js";
5
- import { t as AGENT_API_VERBS } from "../chunks/session-B8fJb_Or.js";
5
+ import { t as AGENT_API_VERBS } from "../chunks/session-C7rstCmA.js";
6
6
  import { i as execSync } from "../chunks/child-process-safe-DDELk9XC.js";
7
7
  import { t as renderTable } from "../chunks/ascii-figure-core-pDAwtlKO.js";
8
8
  import { n as glimmervoidHomeDir, t as decideConfigPath } from "../chunks/config-path-core-DFt-TemS.js";
@@ -108,6 +108,8 @@ Commands:
108
108
  attention <note> From inside a Glimmervoid session, flag it as needing the operator
109
109
  board From inside a Glimmervoid session, list the live sessions
110
110
  push From inside a Glimmervoid session, land its commits on the integration branch and push it
111
+ edit <path> From inside a Glimmervoid session, surface a text file for the operator to edit in the dashboard
112
+ ssh-sign What git runs inside a Glimmervoid session to sign a commit with the operator's forwarded ssh agent
111
113
  kg [command] Experimental typed knowledge and task graph (Settings > Lanes > Knowledge graph)
112
114
 
113
115
  Options:
@@ -133,23 +135,27 @@ var SUBCOMMAND_RUNNERS = new Map([
133
135
  return 0;
134
136
  }],
135
137
  ["pair", async (subcommandArgs) => {
136
- const { runPairCli } = await import("../chunks/pair-cli-CKn-wUw9.js");
138
+ const { runPairCli } = await import("../chunks/pair-cli-BuyzST-U.js");
137
139
  return runPairCli(subcommandArgs);
138
140
  }],
139
141
  ["agent", async (subcommandArgs) => {
140
- const { runAgentSetupCli } = await import("../chunks/agent-setup-cli-D4956BfN.js");
142
+ const { runAgentSetupCli } = await import("../chunks/agent-setup-cli-CFielF2o.js");
141
143
  return runAgentSetupCli(subcommandArgs);
142
144
  }],
143
145
  ["kg", async (subcommandArgs) => {
144
- const { runKnowledgeGraphCommand } = await import("../chunks/knowledge-graph-cli-Bjy9_kv5.js");
146
+ const { runKnowledgeGraphCommand } = await import("../chunks/knowledge-graph-cli-C7G-x5sY.js");
145
147
  return runKnowledgeGraphCommand(subcommandArgs);
146
148
  }],
147
149
  ["visions", async (subcommandArgs) => {
148
150
  const { runVisionsCli } = await import("../chunks/visions-cli-BhFdym5n.js");
149
151
  return runVisionsCli(subcommandArgs);
150
152
  }],
153
+ ["ssh-sign", async (subcommandArgs) => {
154
+ const { runSshSignCli } = await import("../chunks/ssh-sign-cli-SWtTF00D.js");
155
+ return runSshSignCli(subcommandArgs);
156
+ }],
151
157
  ...AGENT_API_VERBS.map((verb) => [verb, async (subcommandArgs, subcommandName) => {
152
- const { runAgentApiCli } = await import("../chunks/agent-api-cli-V_BkYhBI.js");
158
+ const { runAgentApiCli } = await import("../chunks/agent-api-cli-CRJYxzVU.js");
153
159
  return runAgentApiCli([subcommandName, ...subcommandArgs]);
154
160
  }])
155
161
  ]);
@@ -203,7 +209,7 @@ async function readDeclaredCustomAgents() {
203
209
  declared: [],
204
210
  error: null
205
211
  };
206
- const { loadConfigFile } = await import("../chunks/config-store-Cp62jN1O.js");
212
+ const { loadConfigFile } = await import("../chunks/config-store-DaRS2c2d.js");
207
213
  try {
208
214
  const loaded = loadConfigFile(decided.path, { exitOnError: false });
209
215
  if (!loaded.config) return {
@@ -279,7 +285,7 @@ async function runDoctor() {
279
285
  }
280
286
  switchSection("Agents");
281
287
  try {
282
- const { listAgentIds, describeAgentResolvability, setCustomAgents } = await import("../chunks/adapters-BU74M4QZ.js");
288
+ const { listAgentIds, describeAgentResolvability, setCustomAgents } = await import("../chunks/adapters-C9gI2MHS.js");
283
289
  const declaredCustomAgents = await readDeclaredCustomAgents();
284
290
  if (declaredCustomAgents.error) line("config", declaredCustomAgents.error);
285
291
  setCustomAgents(declaredCustomAgents.declared);
@@ -287,7 +293,7 @@ async function runDoctor() {
287
293
  const { label, path: resolvedPath } = describeAgentResolvability(id);
288
294
  line(`${id} (${label})`, resolvedPath ?? "not found on PATH");
289
295
  }
290
- const { inspectGrokAgentSetup } = await import("../chunks/agent-setup-cli-D4956BfN.js");
296
+ const { inspectGrokAgentSetup } = await import("../chunks/agent-setup-cli-CFielF2o.js");
291
297
  const grokSetup = inspectGrokAgentSetup();
292
298
  line("grok hook setup", `${grokSetup.classification}: ${grokSetup.filePath}`);
293
299
  } catch (err) {
@@ -304,7 +310,7 @@ async function runDoctor() {
304
310
  try {
305
311
  const { resolvePackageBin } = await import("../chunks/runtime-paths-DU5jBEEO.js");
306
312
  const { execFileSync } = await import("../chunks/child-process-safe-B3zcPdFM.js");
307
- const { inspectGrokAgentSetup } = await import("../chunks/agent-setup-cli-D4956BfN.js");
313
+ const { inspectGrokAgentSetup } = await import("../chunks/agent-setup-cli-CFielF2o.js");
308
314
  const binPath = resolvePackageBin("cc-safety-net", "cc-safety-net");
309
315
  line("Sane YOLO", binPath || "not installed");
310
316
  if (binPath) line("cc-safety-net version", execFileSync(process.execPath, [binPath, "--version"], {
@@ -1,2 +1,2 @@
1
- import { a as describeAgentResolvability, d as setCustomAgents, l as listAgentIds } from "./adapters-CoC18rdt.js";
1
+ import { a as describeAgentResolvability, d as setCustomAgents, l as listAgentIds } from "./adapters-CUBEhjOR.js";
2
2
  export { describeAgentResolvability, listAgentIds, setCustomAgents };
@@ -1,11 +1,11 @@
1
1
  import { o as relayPath } from "./runtime-paths-BPoxENmK.js";
2
- import { b as toolDetailFieldValue, d as PendingPromptQuestion, l as PROMPT_DETAIL_HIDDEN_CHARACTERS, y as firstDetailLine } from "./session-B8fJb_Or.js";
2
+ import { D as firstDetailLine, O as toolDetailFieldValue, f as PendingPromptQuestion, u as PROMPT_DETAIL_HIDDEN_CHARACTERS } from "./session-C7rstCmA.js";
3
3
  import { r as execFileSync } from "./child-process-safe-DDELk9XC.js";
4
4
  import { n as resolveAgentCommand, t as buildAgentSpawnCommand } from "./spawn-command-Cc40FiZI.js";
5
5
  import { n as isRecord } from "./coerce-NSst8oRP.js";
6
- import { c as buildAgentEnv, i as isSpinnerChar, n as classifyAgentTitle, r as isBrailleChar, t as grok } from "./grok-C4lzPFEg.js";
6
+ import { c as buildAgentEnv, i as isSpinnerChar, n as classifyAgentTitle, r as isBrailleChar, t as grok } from "./grok-BYKnBgdr.js";
7
7
  import { t as buildHookCommand } from "./hook-command-core-DclEoE9e.js";
8
- import "./contracts-DXujp-Zn.js";
8
+ import "./contracts-DWv6q8ir.js";
9
9
  import { n as mergeCodexPreToolUse, t as HOOK_TOOLS } from "./hook-tools-UX2fmt81.js";
10
10
  import fs from "node:fs";
11
11
  //#region session/adapters/claude-code.ts
@@ -0,0 +1,2 @@
1
+ import { n as runAgentApiCli } from "./agent-api-cli-DuT7437B.js";
2
+ export { runAgentApiCli };
@@ -1,8 +1,9 @@
1
1
  import { t as errorCode } from "./text-DoirglWV.js";
2
- import { a as AgentDispatchRequest, n as AGENT_URL_ENV, s as AgentTicketRequest } from "./session-B8fJb_Or.js";
2
+ import { a as AgentDispatchRequest, c as AgentTicketRequest, n as AGENT_URL_ENV } from "./session-C7rstCmA.js";
3
3
  import { i as resolveHookTarget } from "./hook-relay-core-DA_bz2KA.js";
4
4
  import { n as decideSandboxProxy } from "./sandbox-proxy-core-hnQgKR0T.js";
5
- import { c as isAgentApiVerb, l as isOrchestratorAgentVerb } from "./agent-api-core-B3YI8SYs.js";
5
+ import { c as isAgentApiVerb, l as isOrchestratorAgentVerb } from "./agent-api-core-Ddg15j2j.js";
6
+ import path from "node:path";
6
7
  import http from "node:http";
7
8
  //#region server/agent-api-cli.ts
8
9
  var AGENT_PATH_PREFIX = "/agent/";
@@ -21,6 +22,10 @@ var BODY_BUILDERS = {
21
22
  },
22
23
  board: () => ({}),
23
24
  push: () => ({}),
25
+ edit: (rest) => {
26
+ const docPath = rest.join(" ").trim();
27
+ return docPath ? { path: path.resolve(docPath) } : null;
28
+ },
24
29
  dispatch: (rest) => {
25
30
  const parsed = AgentDispatchRequest.safeParse(rest[0] === "--ready" ? { readyIntent: rest[1] } : { workId: rest[0] });
26
31
  return parsed.success ? parsed.data : null;
@@ -121,6 +126,10 @@ async function runAgentApiCli(args) {
121
126
  console.error(`glimmervoid ${verb}: expected a work id matching wrk-[0-9a-f]{16}`);
122
127
  return 1;
123
128
  }
129
+ if (verb === "edit") {
130
+ console.error("glimmervoid edit: this command needs a file path, for example \"glimmervoid edit drafts/post.md\"");
131
+ return 1;
132
+ }
124
133
  console.error(`glimmervoid ${verb}: this command needs text, for example "glimmervoid ${verb} check the failing test"`);
125
134
  return 1;
126
135
  }
@@ -139,4 +148,4 @@ async function runAgentApiCli(args) {
139
148
  return reply.hasSuccessStatus && bodySaysOk(reply.text) ? 0 : 1;
140
149
  }
141
150
  //#endregion
142
- export { runAgentApiCli };
151
+ export { runAgentApiCli as n, postToAgentIngress as t };
@@ -1,4 +1,4 @@
1
- import { a as AgentDispatchRequest, c as ORCHESTRATOR_AGENT_VERBS, i as AgentAttentionRequest, o as AgentSpawnRequest, t as AGENT_API_VERBS } from "./session-B8fJb_Or.js";
1
+ import { a as AgentDispatchRequest, i as AgentAttentionRequest, l as ORCHESTRATOR_AGENT_VERBS, o as AgentEditRequest, s as AgentSpawnRequest, t as AGENT_API_VERBS } from "./session-C7rstCmA.js";
2
2
  import crypto from "node:crypto";
3
3
  var MAX_SPAWNS_IN_FLIGHT = 1;
4
4
  var SPAWNABLE_DEPTH = 0;
@@ -138,6 +138,15 @@ function parseAgentVerb(verb, payload) {
138
138
  request: parsed.data
139
139
  };
140
140
  }
141
+ if (verb === "edit") {
142
+ const parsed = AgentEditRequest.safeParse(payload);
143
+ if (!parsed.success) return refuseInvalidBody(parsed.error.issues);
144
+ return {
145
+ ok: true,
146
+ verb,
147
+ request: parsed.data
148
+ };
149
+ }
141
150
  const parsed = AgentSpawnRequest.safeParse(payload);
142
151
  if (!parsed.success) return refuseInvalidBody(parsed.error.issues);
143
152
  return {
@@ -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-C4lzPFEg.js";
2
+ import { a as classifyGrokHooksFile, o as renderGrokHooksFile, t as grok } from "./grok-BYKnBgdr.js";
3
3
  import { p as writeTextAtomicSync } from "./json-file-oEH9vt-0.js";
4
4
  import fs from "node:fs";
5
5
  import path from "node:path";
@@ -1,4 +1,4 @@
1
- import { _ as TaskTitle } from "./session-B8fJb_Or.js";
1
+ import { T as TaskTitle } from "./session-C7rstCmA.js";
2
2
  import { n as isRecord } from "./coerce-NSst8oRP.js";
3
3
  import path from "node:path";
4
4
  import { z } from "zod";
@@ -143,10 +143,6 @@ var CoherenceWorkCreated = z.looseObject({
143
143
  var CoherenceTicketCreated = CoherenceWorkCreated.extend({ parent: z.string().regex(/^wrk-[a-f0-9]{16}$/) });
144
144
  //#endregion
145
145
  //#region shared/settings-ranges.ts
146
- var FACTORY_WATCH_WINDOW_RANGE = Object.freeze({
147
- min: 1,
148
- max: 1440
149
- });
150
146
  var FACTORY_MAX_LIVE_WORKERS_RANGE = Object.freeze({ min: 1 });
151
147
  var POSITIVE_NUMBER_RANGE = Object.freeze({
152
148
  min: 0,
@@ -249,7 +245,6 @@ var WORKFLOWS_MAX_ACTIONS_PER_POLL_RANGE = Object.freeze({
249
245
  Object.freeze({
250
246
  NON_NEGATIVE_NUMBER_RANGE,
251
247
  FACTORY_MAX_LIVE_WORKERS_RANGE,
252
- FACTORY_WATCH_WINDOW_RANGE,
253
248
  FLYING_ANIMALS_GAP_RANGE,
254
249
  FLYING_ANIMALS_DURATION_RANGE,
255
250
  FLYING_ANIMALS_SCALE_RANGE,
@@ -1393,11 +1388,6 @@ var FactorySettings = z.object({
1393
1388
  checks: z.array(z.string().trim().min(1)).optional(),
1394
1389
  protectedPaths: z.array(z.string().trim().min(1)).optional(),
1395
1390
  reviewerModel: z.string().trim().min(1).nullable().optional(),
1396
- watchWindowMinutes: z.number().int().min(FACTORY_WATCH_WINDOW_RANGE.min).max(FACTORY_WATCH_WINDOW_RANGE.max).optional(),
1397
- watchProjects: z.array(z.object({
1398
- project: z.string().trim().min(1),
1399
- posthogProjectId: z.number().int().positive()
1400
- })).optional(),
1401
1391
  dailyBudgetUsd: z.number().finite().nonnegative().nullable().optional(),
1402
1392
  verifierModel: z.string().trim().min(1).nullable().optional(),
1403
1393
  mirrorHarnessRuns: optionalBoolean("factory.mirrorHarnessRuns")
@@ -3,8 +3,8 @@ import { i as equalsIgnoringCaseOnWindows, t as canonicalizePath } from "./paths
3
3
  import { n as glimmervoidHomeDir$1, t as decideConfigPath } from "./config-path-core-DFt-TemS.js";
4
4
  import { a as positiveIntOr, c as textOr, n as isRecord } from "./coerce-NSst8oRP.js";
5
5
  import { d as writeJsonAtomicSync, f as writeTextAtomic, p as writeTextAtomicSync } from "./json-file-oEH9vt-0.js";
6
- import { St as normalizeLegacyConfigNumbers, f as BranchGcFileSettings, i as Config, l as configIssueMessage, m as DEFAULT_FACTORY_PROTECTED_PATHS, n as BUILTIN_AGENT_IDS, p as DEFAULT_FACTORY_CHECKS, s as RUNTIME_CONFIG_SCALAR_KEYS, t as AGENT_ID_SHAPE_MESSAGE } from "./config-CZ4H51D0.js";
7
- import { V as FeatureFlagsResponse, W as TELEMETRY_KILL_SWITCH_FLAG } from "./contracts-DXujp-Zn.js";
6
+ import { St as normalizeLegacyConfigNumbers, f as BranchGcFileSettings, i as Config, l as configIssueMessage, m as DEFAULT_FACTORY_PROTECTED_PATHS, n as BUILTIN_AGENT_IDS, p as DEFAULT_FACTORY_CHECKS, s as RUNTIME_CONFIG_SCALAR_KEYS, t as AGENT_ID_SHAPE_MESSAGE } from "./config-Cneb8Ujj.js";
7
+ import { V as FeatureFlagsResponse, W as TELEMETRY_KILL_SWITCH_FLAG } from "./contracts-DWv6q8ir.js";
8
8
  import fs from "node:fs";
9
9
  import path from "node:path";
10
10
  import os from "node:os";
@@ -1108,8 +1108,6 @@ var DEFAULT_CONFIG = {
1108
1108
  checks: DEFAULT_FACTORY_CHECKS,
1109
1109
  protectedPaths: DEFAULT_FACTORY_PROTECTED_PATHS,
1110
1110
  reviewerModel: null,
1111
- watchWindowMinutes: 30,
1112
- watchProjects: [],
1113
1111
  dailyBudgetUsd: null,
1114
1112
  verifierModel: null,
1115
1113
  mirrorHarnessRuns: false
@@ -0,0 +1,2 @@
1
+ import { c as loadConfigFile } from "./config-store-DYsZJDux.js";
2
+ export { loadConfigFile };
@@ -1,27 +1,7 @@
1
- import { _ as TaskTitle, f as PendingWakeup, h as SessionState, m as SessionSnapshot, u as PendingPromptDetail } from "./session-B8fJb_Or.js";
2
- import { D as MyPrMergeWhenReadyRequest, Dt as CoherenceRisk, Et as CoherenceReadiness, F as CommitSha, O as MyPrMergeWhenReadyResult, P as MyPrsStatus, Q as TeamReviewActionResult, S as MyPrKeepMergeableResult, T as MyPrMergeResult, Tt as CoherenceOrient, Z as TeamReviewActionRequest, _t as ReviewsRefreshResult, gt as ReviewsRefreshRequest, jt as CoherenceWorkState, mt as REPO_SLUG_RE, n as BUILTIN_AGENT_IDS, nt as TeamReviewStatus, vt as reviewsPollingShape, w as MyPrMergeRequest, x as MyPrKeepMergeableRequest } from "./config-CZ4H51D0.js";
1
+ import { T as TaskTitle, b as SessionSnapshot, d as PendingPromptDetail, g as SESSION_DOC_PATH_MAX_CHARS, p as PendingWakeup, x as SessionState, y as SessionDoc } from "./session-C7rstCmA.js";
2
+ import { D as MyPrMergeWhenReadyRequest, Dt as CoherenceRisk, Et as CoherenceReadiness, F as CommitSha, O as MyPrMergeWhenReadyResult, P as MyPrsStatus, Q as TeamReviewActionResult, S as MyPrKeepMergeableResult, T as MyPrMergeResult, Tt as CoherenceOrient, Z as TeamReviewActionRequest, _t as ReviewsRefreshResult, gt as ReviewsRefreshRequest, jt as CoherenceWorkState, mt as REPO_SLUG_RE, n as BUILTIN_AGENT_IDS, nt as TeamReviewStatus, vt as reviewsPollingShape, w as MyPrMergeRequest, x as MyPrKeepMergeableRequest } from "./config-Cneb8Ujj.js";
3
3
  import { z } from "zod";
4
4
  //#region shared/contracts/factory.ts
5
- var FactoryIssue = z.object({
6
- issueId: z.string().min(1),
7
- firstSeenMs: z.number().finite(),
8
- framePaths: z.array(z.string())
9
- });
10
- var FactoryWatchEntry = z.object({
11
- workId: z.string().min(1),
12
- intentId: z.string().min(1),
13
- projectId: z.string().min(1),
14
- mergedSha: z.string().regex(/^[a-f0-9]{40,64}$/),
15
- mergedAt: z.iso.datetime(),
16
- writeScopes: z.array(z.string()),
17
- breaches: z.array(FactoryIssue).optional()
18
- });
19
- var FactoryHogQLResponse = z.looseObject({ results: z.array(z.unknown()) });
20
- var FactoryIssueQueryRow = z.object({
21
- issueId: z.string().min(1),
22
- firstSeen: z.string().min(1),
23
- framePaths: z.array(z.string())
24
- });
25
5
  var FactoryConsequences = z.looseObject({ records: z.array(z.looseObject({
26
6
  from: z.object({
27
7
  kind: z.string(),
@@ -50,7 +30,6 @@ var FactoryProjectState = z.object({
50
30
  sessionId: z.string()
51
31
  })).optional(),
52
32
  reviewing: z.array(z.string()).optional(),
53
- watches: z.array(FactoryWatchEntry).optional(),
54
33
  note: z.string().nullable().optional(),
55
34
  spentTodayUsd: z.number().finite().nonnegative().optional(),
56
35
  dailyBudgetUsd: z.number().finite().nonnegative().nullable().optional(),
@@ -189,7 +168,6 @@ var FactoryLaneState = z.object({
189
168
  ledgerPath: z.string().min(1).max(4096).nullable(),
190
169
  ledgerBranch: z.string().min(1).max(1024).nullable(),
191
170
  paused: z.boolean(),
192
- watch: z.array(FactoryWatchEntry).optional(),
193
171
  trustedVerifications: z.array(z.object({
194
172
  id: z.string().min(1),
195
173
  sha: z.string().regex(/^[a-f0-9]{40,64}$/)
@@ -210,7 +188,6 @@ var FactoryLaneState = z.object({
210
188
  tickets: z.array(FactoryIntentTicket).min(1).max(FACTORY_INTENT_TICKET_LIMIT)
211
189
  })).optional(),
212
190
  intentBaseShas: z.record(z.string().min(1), z.string().regex(/^[a-f0-9]{40,64}$/)).optional(),
213
- filedBreaches: z.array(z.string().min(1)).optional(),
214
191
  factoryLandedShas: z.array(z.string().regex(/^[a-f0-9]{40,64}$/)).optional(),
215
192
  unlandedFactoryRecords: z.array(FactoryUnlandedRecord).optional(),
216
193
  ticketBlockCounts: z.record(z.string().min(1), z.number().int().nonnegative()).optional(),
@@ -236,7 +213,6 @@ var FactoryDecisionKind = z.enum([
236
213
  "admission",
237
214
  "closeout",
238
215
  "merge",
239
- "watch",
240
216
  "verification",
241
217
  "exception",
242
218
  "landing",
@@ -251,9 +227,6 @@ var FactoryDecisionOutcome = z.enum([
251
227
  "block",
252
228
  "merge",
253
229
  "merged",
254
- "breach",
255
- "verified",
256
- "verified-unwatched",
257
230
  "failed",
258
231
  "stale",
259
232
  "passed",
@@ -269,7 +242,6 @@ var FactoryDecisionFailureClass = z.enum([
269
242
  "check",
270
243
  "review",
271
244
  "closeout",
272
- "breach",
273
245
  "verification",
274
246
  "stale",
275
247
  "exception",
@@ -331,15 +303,6 @@ var FactoryDecisionLogLine = z.discriminatedUnion("kind", [
331
303
  outcome: z.literal("merged"),
332
304
  mergedSha: z.string().regex(/^[a-f0-9]{40,64}$/)
333
305
  }),
334
- z.strictObject({
335
- ...decisionFields,
336
- kind: z.literal("watch"),
337
- outcome: z.enum([
338
- "breach",
339
- "verified",
340
- "verified-unwatched"
341
- ])
342
- }),
343
306
  z.strictObject({
344
307
  ...decisionFields,
345
308
  kind: z.literal("verification"),
@@ -369,7 +332,6 @@ var FactoryDecisionLogLine = z.discriminatedUnion("kind", [
369
332
  "refused",
370
333
  "retry",
371
334
  "block",
372
- "breach",
373
335
  "failed",
374
336
  "stale",
375
337
  "raised",
@@ -1287,6 +1249,7 @@ var optionalError = nullableString.optional();
1287
1249
  var opaqueObject = openObject();
1288
1250
  var opaqueArray = z.array(z.unknown());
1289
1251
  var planRevisionNumber = z.number().int().positive();
1252
+ var sessionDocPath = z.string().min(1).max(SESSION_DOC_PATH_MAX_CHARS);
1290
1253
  var trailSteps = z.array(openObject({
1291
1254
  at: timestamp,
1292
1255
  tool: z.string(),
@@ -1522,6 +1485,18 @@ var clientVariants = [
1522
1485
  draft: z.boolean().optional()
1523
1486
  }),
1524
1487
  loose("plan-decision", PlanDecision.shape),
1488
+ loose("session-doc-read", {
1489
+ id: sessionId,
1490
+ path: sessionDocPath,
1491
+ requestId
1492
+ }),
1493
+ loose("session-doc-save", {
1494
+ id: sessionId,
1495
+ path: sessionDocPath,
1496
+ text: z.string(),
1497
+ baseHash: z.string().min(1),
1498
+ requestId
1499
+ }),
1525
1500
  loose("client-error", ClientErrorReport.shape),
1526
1501
  loose("dismiss", {
1527
1502
  id: sessionId,
@@ -1566,6 +1541,10 @@ Object.freeze([
1566
1541
  "session-plan-changed",
1567
1542
  "session-plan-draft",
1568
1543
  "session-plan-response",
1544
+ "session-docs-changed",
1545
+ "session-docs-snapshot",
1546
+ "session-doc-response",
1547
+ "session-doc-save-result",
1569
1548
  "notify",
1570
1549
  "update-status",
1571
1550
  "update-progress",
@@ -1802,6 +1781,29 @@ var serverVariants = [
1802
1781
  loose("session-plan-changed", PlanChangedPush.shape),
1803
1782
  loose("session-plan-draft", PlanDraftPush.shape),
1804
1783
  loose("session-plan-response", PlanResponseFrame.shape),
1784
+ loose("session-docs-changed", {
1785
+ id: sessionId,
1786
+ docs: z.array(SessionDoc)
1787
+ }),
1788
+ loose("session-docs-snapshot", { sessions: z.record(z.string(), z.array(SessionDoc)) }),
1789
+ loose("session-doc-response", {
1790
+ requestId,
1791
+ id: sessionId,
1792
+ path: z.string(),
1793
+ ok: z.boolean(),
1794
+ text: z.string().optional(),
1795
+ hash: z.string().optional(),
1796
+ error: optionalError
1797
+ }),
1798
+ loose("session-doc-save-result", {
1799
+ requestId,
1800
+ id: sessionId,
1801
+ path: z.string(),
1802
+ ok: z.boolean(),
1803
+ hash: z.string().optional(),
1804
+ conflict: z.boolean().optional(),
1805
+ error: optionalError
1806
+ }),
1805
1807
  loose("notify", {
1806
1808
  session: z.string(),
1807
1809
  category: z.string(),
@@ -2128,4 +2130,4 @@ z.object({
2128
2130
  projects: z.array(z.string()).optional()
2129
2131
  }).passthrough();
2130
2132
  //#endregion
2131
- export { FactoryHarnessVerdict as $, BenchmarkActionRequest as A, PrCheckoutCaseInput as B, IssueKey as C, IssuesStatus as D, IssuesState as E, BenchmarkStatus as F, TelemetryState as G, PendingCrashReport as H, BenchmarkSuite as I, FACTORY_ERROR_MAX_CHARS as J, FACTORY_DECISION_OUTPUT_MAX_BYTES as K, CommitComparison as L, BenchmarkId as M, BenchmarkJudgement as N, ChangeMap as O, BenchmarkRun as P, FactoryHarnessStateLine as Q, MergedPrListing as R, GithubIssueResponse as S, IssuesSearchResponse as T, TELEMETRY_EVENT_SCHEMAS as U, FeatureFlagsResponse as V, TELEMETRY_KILL_SWITCH_FLAG as W, FactoryConsequences as X, FACTORY_PROTECTED_PATH_FLOOR as Y, FactoryControlRequest as Z, PlanDecision as _, ClientMessage as a, FactoryQueueIntentRequest as at, planTitle as b, UpdateJournal as c, FactoryWorkerEvent as ct, TraceRecord as d, FactoryHogQLResponse as et, PLAN_BODY_CAP_BYTES as f, PLAN_TOOL_NAME as g, PLAN_RESULT_HOOK_EVENT as h, CONTROL_FRAME_MAX_BYTES as i, FactoryProjectState as it, BenchmarkCase as j, changeMapFactId as k, MAX_RAW_LINE_CHARS as l, isSingleFactoryPathSegment as lt, PLAN_HOOK_OUTPUT_MAX_CHARS as m, HookEnvelope as n, FactoryIssueQueryRow as nt, DIFF_ANNOTATION_NOTE_MAX_CHARS as o, FactoryReviewVerdict as ot, PLAN_HOOK_EVENT as p, FactoryDecisionLogLine as q, parseDataClientMessage as r, FactoryLaneState as rt, InstallFlavor as s, FactoryReviewerOutput as st, HTTP_URL_RE as t, FactoryIssue as tt, TraceCheckpoint as u, PlanRevision as v, IssueUpdate as w, GithubIssuePullRequestsRepository as x, parseExitPlanModeHookPayload as y, MinedPrReviewData as z };
2133
+ export { FactoryHarnessVerdict as $, BenchmarkActionRequest as A, PrCheckoutCaseInput as B, IssueKey as C, IssuesStatus as D, IssuesState as E, BenchmarkStatus as F, TelemetryState as G, PendingCrashReport as H, BenchmarkSuite as I, FACTORY_ERROR_MAX_CHARS as J, FACTORY_DECISION_OUTPUT_MAX_BYTES as K, CommitComparison as L, BenchmarkId as M, BenchmarkJudgement as N, ChangeMap as O, BenchmarkRun as P, FactoryHarnessStateLine as Q, MergedPrListing as R, GithubIssueResponse as S, IssuesSearchResponse as T, TELEMETRY_EVENT_SCHEMAS as U, FeatureFlagsResponse as V, TELEMETRY_KILL_SWITCH_FLAG as W, FactoryConsequences as X, FACTORY_PROTECTED_PATH_FLOOR as Y, FactoryControlRequest as Z, PlanDecision as _, ClientMessage as a, FactoryWorkerEvent as at, planTitle as b, UpdateJournal as c, TraceRecord as d, FactoryLaneState as et, PLAN_BODY_CAP_BYTES as f, PLAN_TOOL_NAME as g, PLAN_RESULT_HOOK_EVENT as h, CONTROL_FRAME_MAX_BYTES as i, FactoryReviewerOutput as it, BenchmarkCase as j, changeMapFactId as k, MAX_RAW_LINE_CHARS as l, PLAN_HOOK_OUTPUT_MAX_CHARS as m, HookEnvelope as n, FactoryQueueIntentRequest as nt, DIFF_ANNOTATION_NOTE_MAX_CHARS as o, isSingleFactoryPathSegment as ot, PLAN_HOOK_EVENT as p, FactoryDecisionLogLine as q, parseDataClientMessage as r, FactoryReviewVerdict as rt, InstallFlavor as s, HTTP_URL_RE as t, FactoryProjectState as tt, TraceCheckpoint as u, PlanRevision as v, IssueUpdate as w, GithubIssuePullRequestsRepository as x, parseExitPlanModeHookPayload as y, MinedPrReviewData as z };
@@ -1,6 +1,6 @@
1
1
  import { r as errorMessage } from "./text-DoirglWV.js";
2
2
  import { o as relayPath } from "./runtime-paths-BPoxENmK.js";
3
- import { n as AGENT_URL_ENV } from "./session-B8fJb_Or.js";
3
+ import { _ as SIGN_URL_ENV, n as AGENT_URL_ENV } from "./session-C7rstCmA.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, n as RTK_PATH_ENV, o as saneYoloEnv } from "./rtk-hook-core-BmEz2aq9.js";
@@ -19,6 +19,7 @@ var GLIMMERVOID_SCRUB_KEYS = [
19
19
  "GLIMMERVOID_CONFIG",
20
20
  HOOK_URL_ENV,
21
21
  AGENT_URL_ENV,
22
+ SIGN_URL_ENV,
22
23
  RTK_PATH_ENV,
23
24
  SANE_YOLO_PATH_ENV,
24
25
  ...GLIMMERVOID_SECRET_KEYS
@@ -2,7 +2,7 @@ import { r as errorMessage } from "./text-DoirglWV.js";
2
2
  import { s as resolvePackageBin } from "./runtime-paths-BPoxENmK.js";
3
3
  import { r as execFileSync } from "./child-process-safe-DDELk9XC.js";
4
4
  import { n as glimmervoidHomeDir, t as decideConfigPath } from "./config-path-core-DFt-TemS.js";
5
- import { r as BrowserConfig } from "./config-CZ4H51D0.js";
5
+ import { r as BrowserConfig } from "./config-Cneb8Ujj.js";
6
6
  import fs, { closeSync, constants, existsSync, fstatSync, lstatSync, mkdirSync, openSync, readFileSync, readdirSync, realpathSync } from "node:fs";
7
7
  import path, { dirname, join, posix, resolve, win32 } from "node:path";
8
8
  import { parseArgs } from "node:util";