glimmervoid 0.43.4 → 0.44.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-Du4HJLMG.js → adapters-CSRTLFiZ.js} +5 -5
  3. package/dist/chunks/{adapters-C7wGqlhU.js → adapters-DjDtNufj.js} +1 -1
  4. package/dist/chunks/{agent-api-cli-DRTVOR2W.js → agent-api-cli-CVgij_62.js} +17 -3
  5. package/dist/chunks/{agent-api-cli-BC2i4XNI.js → agent-api-cli-ep_5T7Hx.js} +1 -1
  6. package/dist/chunks/{agent-api-core-9mdbvlfc.js → agent-api-core-DmPT6Hc_.js} +13 -6
  7. package/dist/chunks/{agent-setup-cli-DAPHGpRA.js → agent-setup-cli-7hG401Io.js} +1 -1
  8. package/dist/chunks/{config-D0YwCXFd.js → config-CGRYpcBQ.js} +28 -5
  9. package/dist/chunks/{config-store-BpsH_oWP.js → config-store-B1u3WA5t.js} +3 -3
  10. package/dist/chunks/config-store-D4vUBcUX.js +1 -0
  11. package/dist/chunks/{contracts-Dxc9Gp0Y.js → contracts-Fup4hhP9.js} +34 -12
  12. package/dist/chunks/{git-version-ByOV7a_h.js → git-version-C3lznLS_.js} +1 -1
  13. package/dist/chunks/{grok-2z-LqPHN.js → grok-Di4aQGre.js} +1 -1
  14. package/dist/chunks/{main-Bzy6xXUF.js → main-DPtmg7Bn.js} +4381 -3932
  15. package/dist/chunks/{pair-cli-DSZFFEkT.js → pair-cli-BwOTWShx.js} +2 -2
  16. package/dist/chunks/{remote-config-Cd_FC7bd.js → remote-config-DWWnz5dP.js} +1 -1
  17. package/dist/chunks/{session-BUcx9uJa.js → session-CUc6d7aS.js} +24 -4
  18. package/dist/chunks/{session-routes-BQPy81dm.js → session-routes--hrsvv7a.js} +2 -1
  19. package/dist/chunks/{settings-cli-DOpMn6-A.js → settings-cli-C_owm3rw.js} +5 -5
  20. package/dist/chunks/{settings-readout-core-D1ZP4UIs.js → settings-readout-core-C_JzSeF7.js} +2 -2
  21. package/dist/chunks/{ssh-sign-cli-ynkhYkLs.js → ssh-sign-cli-CDjUtDKa.js} +2 -2
  22. package/dist/client/assets/index-BedqDfKJ.js +177 -0
  23. package/dist/client/assets/index-o9J4_Orv.css +2 -0
  24. package/dist/client/index.html +3 -3
  25. package/dist/server/index.js +1 -1
  26. package/package.json +6 -5
  27. package/dist/chunks/config-store-DcJKvInM.js +0 -1
  28. package/dist/client/assets/index-583DiM8X.css +0 -2
  29. package/dist/client/assets/index-CsyFNXR2.js +0 -177
@@ -1,6 +1,6 @@
1
1
  import { r as errorMessage } from "./text-DoirglWV.js";
2
- import { c as resolveConfigPath } from "./config-store-BpsH_oWP.js";
3
- import { c as defaultPairingsPath, i as REVOCATION_PROPAGATION_SECONDS, l as defaultSeenPath, n as normalizeRemoteConfig, o as createPairingsStore, s as createSeenStore } from "./remote-config-Cd_FC7bd.js";
2
+ import { c as resolveConfigPath } from "./config-store-B1u3WA5t.js";
3
+ import { c as defaultPairingsPath, i as REVOCATION_PROPAGATION_SECONDS, l as defaultSeenPath, n as normalizeRemoteConfig, o as createPairingsStore, s as createSeenStore } from "./remote-config-DWWnz5dP.js";
4
4
  import fs from "node:fs";
5
5
  //#region server/text-format.ts
6
6
  function trimIso(iso) {
@@ -3,7 +3,7 @@ import { n as equalsIgnoringCaseOnWindows } from "./paths-Bu4eH1Yd.js";
3
3
  import { n as isRecord } from "./coerce-NSst8oRP.js";
4
4
  import { n as unrefTimer, t as DEFAULT_TIMER_FNS } from "./timer-deps-u2DAQLok.js";
5
5
  import { a as jsonStateLoadError, d as writeJsonAtomicSync, l as sleepSync, s as loadJsonStateFileSync, u as writeJsonAtomic } from "./json-file-DFCTvPjj.js";
6
- import { o as glimmervoidHomeDir, ot as canonicalizePath } from "./config-store-BpsH_oWP.js";
6
+ import { o as glimmervoidHomeDir, ot as canonicalizePath } from "./config-store-B1u3WA5t.js";
7
7
  import fs from "node:fs";
8
8
  import path from "node:path";
9
9
  import crypto from "node:crypto";
@@ -75,9 +75,12 @@ function repoParts(repo) {
75
75
  if (parts.length !== 2 || !parts.every((part) => GH_SEGMENT.test(part))) return null;
76
76
  return [parts[0], parts[1]];
77
77
  }
78
+ //#endregion
79
+ //#region shared/git-text.ts
80
+ var SHORT_SHA_CHARS = 7;
78
81
  var HEX_SHA_RE = /^[0-9a-f]{7,40}$/i;
79
82
  var FULL_SHA_RE = /^[0-9a-f]{40}$/;
80
- function shortSha(sha, { chars = 7, validate = false } = {}) {
83
+ function shortSha(sha, { chars = SHORT_SHA_CHARS, validate = false } = {}) {
81
84
  if (typeof sha !== "string" || !sha) return "";
82
85
  if (!validate) return sha.slice(0, chars);
83
86
  const text = sha.trim();
@@ -154,11 +157,17 @@ var ReviewFinding = z.object({
154
157
  ]).nullable(),
155
158
  body: z.string().min(1)
156
159
  });
160
+ var HandCheck = z.object({
161
+ text: z.string().min(1),
162
+ paths: z.array(z.string()),
163
+ isFallback: z.boolean().default(false)
164
+ });
157
165
  var ReviewAssessment = z.object({
158
166
  goal: z.string().default(""),
159
167
  change: z.string(),
160
168
  checked: z.array(z.string()),
161
- gaps: z.array(z.string())
169
+ gaps: z.array(z.string()),
170
+ handChecks: z.array(HandCheck).default([])
162
171
  });
163
172
  var ReviewResult = z.object({
164
173
  verdict: ReviewVerdict,
@@ -992,7 +1001,11 @@ var SESSION_COMMANDS = [
992
1001
  "link-pr",
993
1002
  "settings"
994
1003
  ];
995
- var AGENT_API_VERBS = [...SESSION_COMMANDS, "limits"];
1004
+ var AGENT_API_VERBS = [
1005
+ ...SESSION_COMMANDS,
1006
+ "limits",
1007
+ "answer"
1008
+ ];
996
1009
  var AgentSpawnRequest = z.object({
997
1010
  prompt: z.string({ error: "prompt must be a string" }).min(1, { error: "prompt must not be empty" }).max(2e4, { error: "prompt must be at most 20000 characters" }).refine((prompt) => !prompt.trimStart().startsWith("-"), { message: "prompt must not start with a dash, which the agent CLI would read as an option" }),
998
1011
  name: z.string({ error: "name must be a string" }).min(1, { error: "name must not be empty" }).max(200, { error: "name must be at most 200 characters" }).optional(),
@@ -1005,6 +1018,13 @@ var AgentCloseRequest = z.object({
1005
1018
  child: SessionTarget,
1006
1019
  discard: z.boolean().optional()
1007
1020
  }).strict();
1021
+ var AgentAnswerRequest = z.union([z.object({
1022
+ child: SessionTarget,
1023
+ answers: z.record(z.string(), z.string().min(1))
1024
+ }).strict(), z.object({
1025
+ child: SessionTarget,
1026
+ toOperator: z.literal(true)
1027
+ }).strict()]);
1008
1028
  var AgentChannelEntry = z.object({
1009
1029
  from: z.enum([
1010
1030
  "parent",
@@ -1124,4 +1144,4 @@ var AgentLimitsReply = z.object({
1124
1144
  }).strict())
1125
1145
  }).strict().extend({ ok: z.literal(true) }).strict();
1126
1146
  //#endregion
1127
- export { MyPrMergeWhenReadyResult as $, STATES as $t, SIGN_URL_ENV as A, TeamReviewStatus as At, LinkedPr as B, shortSha as Bt, PendingWakeup as C, ReviewThreadId as Ct, SESSION_DOC_PATH_MAX_CHARS as D, TeamReviewCompareFiles as Dt, SESSION_DOC_BODY_CAP_BYTES as E, TeamReviewActionResult as Et, SshSignReply as F, decisionAsIfApprovalRequired as Ft, MyPrKeepMergeableRequest as G, GithubPollingRefreshRequest as Gt, MyPrAutoRebase as H, NODE_ID_RE as Ht, SshSignRequest as I, hasRequiredActionHead as It, MyPrMergeMethod as J, githubPollingShape as Jt, MyPrKeepMergeableResult as K, GithubPollingRefreshResult as Kt, TASK_TITLE_CONTROL_CHARACTERS as L, hasStandingViewerApproval as Lt, SessionDoc as M, TeamReviewThreadResult as Mt, SessionSnapshot as N, TeamReviewThreadsRepository as Nt, SESSION_NAME_PATTERN as O, TeamReviewResolveResponse as Ot, SessionState as P, canApproveAfterComment as Pt, MyPrMergeWhenReadyRequest as Q, RESTARTABLE_STATES as Qt, TaskTitle as R, FULL_SHA_RE as Rt, ConversationQuestion as S, ReviewResult as St, SESSION_COMMANDS as T, TeamReviewActionRequest as Tt, MyPrCheckContext as U, REPO_SLUG_RE as Ut, MyPr as V, GH_SEGMENT as Vt, MyPrCheckContextsResponse as W, repoParts as Wt, MyPrMergeResult as X, KILLABLE_STATES as Xt, MyPrMergeRequest as Y, BADGE_LABELS as Yt, MyPrMergeStateResponse as Z, MERGEABLE_LIVE_STATES as Zt, CONVERSATION_TOOL_RESULT_HOOK_EVENT as _, QueuedReview as _t, AgentCloseRequest as a, MyPrsStatus as at, ConversationApproval as b, ReviewDraft as bt, AgentPullRequestRequest as c, repositoryName as ct, AgentSettingsReply as d, EarlierReview as dt, MyPrSearchNode as et, AgentSettingsRequest as f, FindingSeverity as ft, CONVERSATION_PERMISSION_HOOK_EVENT as g, PrDetail as gt, CONVERSATION_APPROVAL_SUMMARY_MAX_CHARS as h, PostingPlan as ht, AgentAttentionRequest as i, MyPrsState as it, SSH_SIGN_BODY_CAP_BYTES as j, TeamReviewThreadCommentsResponse as jt, SESSION_NAME_RULE_TEXT as k, TeamReviewStateEntry as kt, AgentReadRequest as l, CommitSha as lt, COHERENCE_HOOKS_INACTIVE as m, GithubReviewState as mt, AGENT_URL_ENV as n, MyPrThreadsResponse as nt, AgentEditRequest as o, SessionPrLinks as ot, AgentSpawnRequest as p, GithubReviewDecision as pt, MyPrLaneEntry as q, GithubPrsFreshness as qt, ASK_USER_QUESTION_TOOL_NAME as r, MyPrsSnapshot as rt, AgentLimitsReply as s, pullRequestKeyFormat as st, AGENT_API_VERBS as t, MyPrThreadNode as tt, AgentSendRequest as u, DECIDING_REVIEW_STATES as ut, CoherenceHooksState as v, ReviewChecksState as vt, RefinedTaskTitle as w, ReviewVerdict as wt, ConversationApprovalDecision as x, ReviewFinding as xt, ConversationAnswers as y, ReviewComment as yt, UnseenOutcome as z, HEX_SHA_RE as zt };
1147
+ export { MyPrMergeWhenReadyRequest as $, RESTARTABLE_STATES as $t, SESSION_NAME_RULE_TEXT as A, TeamReviewStateEntry as At, UnseenOutcome as B, HEX_SHA_RE as Bt, ConversationQuestion as C, ReviewResult as Ct, SESSION_DOC_BODY_CAP_BYTES as D, TeamReviewActionResult as Dt, SESSION_COMMANDS as E, TeamReviewActionRequest as Et, SessionState as F, canApproveAfterComment as Ft, MyPrCheckContextsResponse as G, repoParts as Gt, MyPr as H, GH_SEGMENT as Ht, SshSignReply as I, decisionAsIfApprovalRequired as It, MyPrLaneEntry as J, GithubPrsFreshness as Jt, MyPrKeepMergeableRequest as K, GithubPollingRefreshRequest as Kt, SshSignRequest as L, hasRequiredActionHead as Lt, SSH_SIGN_BODY_CAP_BYTES as M, TeamReviewThreadCommentsResponse as Mt, SessionDoc as N, TeamReviewThreadResult as Nt, SESSION_DOC_PATH_MAX_CHARS as O, TeamReviewCompareFiles as Ot, SessionSnapshot as P, TeamReviewThreadsRepository as Pt, MyPrMergeStateResponse as Q, MERGEABLE_LIVE_STATES as Qt, TASK_TITLE_CONTROL_CHARACTERS as R, hasStandingViewerApproval as Rt, ConversationApprovalDecision as S, ReviewFinding as St, RefinedTaskTitle as T, ReviewVerdict as Tt, MyPrAutoRebase as U, NODE_ID_RE as Ut, LinkedPr as V, shortSha as Vt, MyPrCheckContext as W, REPO_SLUG_RE as Wt, MyPrMergeRequest as X, BADGE_LABELS as Xt, MyPrMergeMethod as Y, githubPollingShape as Yt, MyPrMergeResult as Z, KILLABLE_STATES as Zt, CONVERSATION_PERMISSION_HOOK_EVENT as _, PrDetail as _t, AgentAttentionRequest as a, MyPrsState as at, ConversationAnswers as b, ReviewComment as bt, AgentLimitsReply as c, pullRequestKeyFormat as ct, AgentSendRequest as d, DECIDING_REVIEW_STATES as dt, STATES as en, MyPrMergeWhenReadyResult as et, AgentSettingsReply as f, EarlierReview as ft, CONVERSATION_APPROVAL_SUMMARY_MAX_CHARS as g, PostingPlan as gt, COHERENCE_HOOKS_INACTIVE as h, GithubReviewState as ht, AgentAnswerRequest as i, MyPrsSnapshot as it, SIGN_URL_ENV as j, TeamReviewStatus as jt, SESSION_NAME_PATTERN as k, TeamReviewResolveResponse as kt, AgentPullRequestRequest as l, repositoryName as lt, AgentSpawnRequest as m, GithubReviewDecision as mt, AGENT_URL_ENV as n, MyPrThreadNode as nt, AgentCloseRequest as o, MyPrsStatus as ot, AgentSettingsRequest as p, FindingSeverity as pt, MyPrKeepMergeableResult as q, GithubPollingRefreshResult as qt, ASK_USER_QUESTION_TOOL_NAME as r, MyPrThreadsResponse as rt, AgentEditRequest as s, SessionPrLinks as st, AGENT_API_VERBS as t, MyPrSearchNode as tt, AgentReadRequest as u, CommitSha as ut, CONVERSATION_TOOL_RESULT_HOOK_EVENT as v, QueuedReview as vt, PendingWakeup as w, ReviewThreadId as wt, ConversationApproval as x, ReviewDraft as xt, CoherenceHooksState as y, ReviewChecksState as yt, TaskTitle as z, FULL_SHA_RE as zt };
@@ -1,4 +1,4 @@
1
- import { T as SESSION_COMMANDS } from "./session-BUcx9uJa.js";
1
+ import { E as SESSION_COMMANDS } from "./session-CUc6d7aS.js";
2
2
  //#region session/core/session-routes.ts
3
3
  var SUPERVISION_LINE = "Glimmervoid supervises this session. Run glimmervoid --help for the commands it gives you and this session's limits.";
4
4
  var SPAWN_LINE = "To delegate work that edits files or runs long, use glimmervoid spawn rather than an in-process subagent: the spawned session gets its own dashboard card the operator can watch. An in-process subagent stays fine for a quick read-only lookup.";
@@ -111,6 +111,7 @@ var COMMAND_ROUTES = Object.freeze({
111
111
  send: channelRoute,
112
112
  read: channelRoute,
113
113
  close: closeRoute,
114
+ answer: closeRoute,
114
115
  attention: attentionRoute,
115
116
  board: () => ANSWERS,
116
117
  edit: editRoute,
@@ -1,11 +1,11 @@
1
1
  import { r as errorMessage, t as errorCode } from "./text-DoirglWV.js";
2
- import { d as AgentSettingsReply } from "./session-BUcx9uJa.js";
3
- import { r as BrowserConfig } from "./config-D0YwCXFd.js";
2
+ import { f as AgentSettingsReply } from "./session-CUc6d7aS.js";
3
+ import { r as BrowserConfig } from "./config-CGRYpcBQ.js";
4
4
  import { n as isRecord } from "./coerce-NSst8oRP.js";
5
5
  import { t as renderTable } from "./ascii-figure-core-pDAwtlKO.js";
6
6
  import { n as glimmervoidHomeDir, t as decideConfigPath } from "./config-path-core-DFt-TemS.js";
7
- import { C as deleteValueAtPath, D as scoreSettingsSearch, E as parsePosthogProjectSelection, N as SETTINGS_REGISTRY, O as setValueAtPath, Q as withEnvSecrets, S as cloneValue, X as readEnvSecrets, Y as ENV_SECRET_BINDINGS, j as valueAtPath, l as saveConfigFileOnce, s as loadConfigFile, u as validateConfig } from "./config-store-BpsH_oWP.js";
8
- import { a as fail, c as listSettings, d as renderSectionTables, f as requireConfigFileSetting, g as valueText, h as succeed, i as describeSetting, l as readSetting, m as settingsRequestForServer, n as configFileViewOf, o as fitColumn, p as sectionOf, r as defaultText, s as getSetting, t as ALL_SETTINGS } from "./settings-readout-core-D1ZP4UIs.js";
7
+ import { C as deleteValueAtPath, D as scoreSettingsSearch, E as parsePosthogProjectSelection, N as SETTINGS_REGISTRY, O as setValueAtPath, Q as withEnvSecrets, S as cloneValue, X as readEnvSecrets, Y as ENV_SECRET_BINDINGS, j as valueAtPath, l as saveConfigFileOnce, s as loadConfigFile, u as validateConfig } from "./config-store-B1u3WA5t.js";
8
+ import { a as fail, c as listSettings, d as renderSectionTables, f as requireConfigFileSetting, g as valueText, h as succeed, i as describeSetting, l as readSetting, m as settingsRequestForServer, n as configFileViewOf, o as fitColumn, p as sectionOf, r as defaultText, s as getSetting, t as ALL_SETTINGS } from "./settings-readout-core-C_JzSeF7.js";
9
9
  import fs from "node:fs";
10
10
  import os from "node:os";
11
11
  import { parseArgs } from "node:util";
@@ -329,7 +329,7 @@ function processIo() {
329
329
  async function runSettingsCli(commandArguments, io = processIo()) {
330
330
  const serverRequest = settingsRequestForServer(commandArguments, process.env);
331
331
  if (!serverRequest) return runSettingsCommand(commandArguments, io);
332
- const { askAgentApi } = await import("./agent-api-cli-BC2i4XNI.js");
332
+ const { askAgentApi } = await import("./agent-api-cli-ep_5T7Hx.js");
333
333
  const reply = AgentSettingsReply.safeParse(await askAgentApi("settings", serverRequest).catch((error) => ({
334
334
  ok: false,
335
335
  error: errorMessage(error)
@@ -1,6 +1,6 @@
1
- import { f as AgentSettingsRequest } from "./session-BUcx9uJa.js";
1
+ import { p as AgentSettingsRequest } from "./session-CUc6d7aS.js";
2
2
  import { t as renderTable } from "./ascii-figure-core-pDAwtlKO.js";
3
- import { A as settingsOf, M as FILE_ONLY_GROUPS, N as SETTINGS_REGISTRY, S as cloneValue, T as hasScaledUnit, X as readEnvSecrets, j as valueAtPath, k as settingsGroupOf, w as displayText, x as SETTINGS_INDEX } from "./config-store-BpsH_oWP.js";
3
+ import { A as settingsOf, M as FILE_ONLY_GROUPS, N as SETTINGS_REGISTRY, S as cloneValue, T as hasScaledUnit, X as readEnvSecrets, j as valueAtPath, k as settingsGroupOf, w as displayText, x as SETTINGS_INDEX } from "./config-store-B1u3WA5t.js";
4
4
  import { parseArgs } from "node:util";
5
5
  //#region server/core/settings-readout-core.ts
6
6
  var VALUE_COLUMN_WIDTH = 40;
@@ -1,8 +1,8 @@
1
1
  import { r as errorMessage } from "./text-DoirglWV.js";
2
- import { A as SIGN_URL_ENV, F as SshSignReply } from "./session-BUcx9uJa.js";
2
+ import { I as SshSignReply, j as SIGN_URL_ENV } from "./session-CUc6d7aS.js";
3
3
  import { n as execFileAsync, o as spawn } from "./child-process-safe-D4hyVIXj.js";
4
4
  import { a as isLoopbackHostname } from "./hook-relay-core-DA_bz2KA.js";
5
- import { n as postToAgentIngress } from "./agent-api-cli-DRTVOR2W.js";
5
+ import { n as postToAgentIngress } from "./agent-api-cli-CVgij_62.js";
6
6
  import { l as parseSshPublicKey } from "./ssh-signing-core-CRhVVWNW.js";
7
7
  import path from "node:path";
8
8
  import fs from "node:fs/promises";