glimmervoid 0.34.1 → 0.35.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 (52) hide show
  1. package/dist/bin/glimmervoid.js +31 -19
  2. package/dist/chunks/adapters-B37wqNti.js +1 -0
  3. package/dist/chunks/{adapters-D-cRFZ_Q.js → adapters-CADejSpq.js} +219 -9
  4. package/dist/chunks/agent-api-cli-CRj_FYbz.js +1 -0
  5. package/dist/chunks/{agent-api-cli-DuT7437B.js → agent-api-cli-vGwstJ1j.js} +57 -17
  6. package/dist/chunks/{agent-api-core-Ddg15j2j.js → agent-api-core-D1233u1U.js} +35 -9
  7. package/dist/chunks/{agent-setup-cli-CFielF2o.js → agent-setup-cli-BTAFcckd.js} +2 -2
  8. package/dist/chunks/child-process-safe-ChRmWAJP.js +1 -0
  9. package/dist/chunks/{config-DTwMFUjx.js → config-rPbbL4nW.js} +12 -21
  10. package/dist/chunks/config-store-BeIxAZNn.js +1 -0
  11. package/dist/chunks/{config-store-D0lRWsAM.js → config-store-BtsYbNC3.js} +44 -14
  12. package/dist/chunks/{contracts-DZV9H8px.js → contracts-DjIgIuDk.js} +27 -27
  13. package/dist/chunks/{git-version-CrLW4a6r.js → git-version-CUcDtF5k.js} +3 -3
  14. package/dist/chunks/{grok-BYKnBgdr.js → grok-KKgdSe-7.js} +7 -3
  15. package/dist/chunks/{ingest-editor-core-vR6Wv6bP.js → ingest-editor-core-B2tycW_m.js} +4 -4
  16. package/dist/chunks/{json-file-oEH9vt-0.js → json-file-BaxGcB2R.js} +1 -1
  17. package/dist/chunks/{knowledge-graph-cli-BBE3R9DJ.js → knowledge-graph-cli-Rj5nj87L.js} +4 -4
  18. package/dist/chunks/{main-VMWdsGC6.js → main-BTI0J5QE.js} +325 -424
  19. package/dist/chunks/{pair-cli-CI848omy.js → pair-cli-Dcyzv3In.js} +2 -2
  20. package/dist/chunks/paths-Bu4eH1Yd.js +27 -0
  21. package/dist/chunks/{remote-config-Y6YtqoiO.js → remote-config-Dd1T-VJA.js} +3 -3
  22. package/dist/chunks/{rtk-resolver-jJxy_Mrt.js → rtk-resolver-B9pzjLsM.js} +1 -1
  23. package/dist/chunks/rtk-resolver-SWU5VVM7.js +1 -0
  24. package/dist/chunks/{runtime-paths-BPoxENmK.js → runtime-paths-BkeftE60.js} +3 -4
  25. package/dist/chunks/runtime-paths-DSmormp7.js +1 -0
  26. package/dist/chunks/{sandbox-deps-C63o3mZs.js → sandbox-deps-CWiH1d1w.js} +3 -3
  27. package/dist/chunks/{session-C7rstCmA.js → session-D6xXN0UU.js} +26 -4
  28. package/dist/chunks/session-routes-BYy3am9m.js +127 -0
  29. package/dist/chunks/{ssh-sign-cli-SWtTF00D.js → ssh-sign-cli-DPHpT22B.js} +11 -7
  30. package/dist/chunks/{visions-cli-BhFdym5n.js → visions-cli-CYujESdJ.js} +2 -2
  31. package/dist/chunks/{visions-setup-CfgNHiG3.js → visions-setup-B-ZeRdsi.js} +9 -9
  32. package/dist/client/assets/index-DE2GUmqs.css +1 -0
  33. package/dist/client/assets/index-Ds4ngkHp.js +254 -0
  34. package/dist/client/index.html +2 -2
  35. package/dist/scripts/postinstall-path-check.js +1 -1
  36. package/dist/server/index.js +2 -2
  37. package/dist/session/hook-tool-relay.js +2 -2
  38. package/dist/session/sandbox-open-launcher.js +1 -1
  39. package/dist/session/statusline-relay.js +1 -1
  40. package/dist/session/visions-relay.js +3 -3
  41. package/dist/tools/vscode-visions/visions-lsp-core.js +1 -1
  42. package/package.json +8 -8
  43. package/dist/chunks/adapters-CgbcceU3.js +0 -2
  44. package/dist/chunks/agent-api-cli-CRJYxzVU.js +0 -2
  45. package/dist/chunks/child-process-safe-B3zcPdFM.js +0 -2
  46. package/dist/chunks/config-store-DwTxLe8Y.js +0 -2
  47. package/dist/chunks/paths-CeJl2Vcg.js +0 -55
  48. package/dist/chunks/rtk-resolver-CIVLE_xk.js +0 -2
  49. package/dist/chunks/runtime-paths-DU5jBEEO.js +0 -2
  50. package/dist/client/assets/index-BxU3Ww0L.css +0 -1
  51. package/dist/client/assets/index-b9goyXSa.js +0 -254
  52. package/dist/chunks/{child-process-safe-DDELk9XC.js → child-process-safe-CbQnyh7D.js} +1 -1
@@ -1,4 +1,4 @@
1
- import { T as TaskTitle } from "./session-C7rstCmA.js";
1
+ import { D as TaskTitle } from "./session-D6xXN0UU.js";
2
2
  import { n as isRecord } from "./coerce-NSst8oRP.js";
3
3
  import path from "node:path";
4
4
  import { z } from "zod";
@@ -374,24 +374,24 @@ var USAGE_COST_MODES = Object.freeze([
374
374
  var USAGE_VENDOR_KEYS = Object.freeze(["codex", "grok"]);
375
375
  var USAGE_BUDGET_KEYS = Object.freeze(["dailyUsd", "monthlyUsd"]);
376
376
  //#endregion
377
- //#region shared/contracts/reviews.ts
378
- var ReviewsRetry = z.object({
377
+ //#region shared/contracts/github-polling.ts
378
+ var GithubPollingRetry = z.object({
379
379
  attempt: z.number().int().positive(),
380
380
  limit: z.number().int().positive()
381
381
  }).refine((retry) => retry.attempt <= retry.limit);
382
- var reviewsPollingShape = {
382
+ var githubPollingShape = {
383
383
  error: z.string().nullable().optional(),
384
384
  nextAttemptAt: z.number().finite().nonnegative().nullable().optional(),
385
- retry: ReviewsRetry.nullable().optional(),
385
+ retry: GithubPollingRetry.nullable().optional(),
386
386
  isRefreshing: z.boolean().optional(),
387
387
  refreshNotice: z.string().nullable().optional()
388
388
  };
389
- var ReviewsRefreshRequest = z.object({ lane: z.enum([
389
+ var GithubPollingRefreshRequest = z.object({ lane: z.enum([
390
390
  "my-prs",
391
391
  "team-review",
392
392
  "issues"
393
393
  ]) });
394
- var ReviewsRefreshResult = z.object({
394
+ var GithubPollingRefreshResult = z.object({
395
395
  ok: z.boolean(),
396
396
  error: z.string().optional()
397
397
  });
@@ -557,10 +557,6 @@ function hasStandingViewerApproval(draft) {
557
557
  if (draft.requeuedHead !== void 0 && draft.requeuedHead === (draft.liveHead ?? draft.reviewedHead)) return false;
558
558
  return (draft.githubReviews ?? []).some((review) => review.isViewer && review.state === "APPROVED");
559
559
  }
560
- z.object({
561
- head: CommitSha,
562
- reviews: z.array(GithubReview)
563
- });
564
560
  var PriorReview = z.object({
565
561
  head: CommitSha,
566
562
  base: CommitSha.optional(),
@@ -792,7 +788,7 @@ var InFlightReview = z.object({
792
788
  priorReviewedHead: CommitSha.optional()
793
789
  });
794
790
  var TeamReviewStatus = z.object({
795
- ...reviewsPollingShape,
791
+ ...githubPollingShape,
796
792
  type: z.literal("team-review-status"),
797
793
  ts: z.number().finite(),
798
794
  configured: z.boolean(),
@@ -977,7 +973,7 @@ var MyPr = z.object({
977
973
  isMergeQueueHeldForRepairPush: z.boolean().optional()
978
974
  }).refine((pr) => pr.key === `${pr.repo}#${pr.number}`);
979
975
  var MyPrsStatus = z.object({
980
- ...reviewsPollingShape,
976
+ ...githubPollingShape,
981
977
  type: z.literal("my-prs-status"),
982
978
  ts: z.number().finite(),
983
979
  configured: z.boolean(),
@@ -1155,6 +1151,7 @@ var WORKFLOW_ACTION_TYPES = Object.freeze([
1155
1151
  ]);
1156
1152
  var WORKFLOW_PROMPT_TEMPLATE_MAX_CHARACTERS = 2e4;
1157
1153
  var WORKFLOW_COMMENT_BODY_MAX_CHARACTERS = 65536;
1154
+ var WORKFLOW_LABEL_NAME_MAX_CHARACTERS = 50;
1158
1155
  var RULE_ID = /^[a-z0-9][a-z0-9-]{0,63}$/;
1159
1156
  var UNSAFE_LABEL_NAME = /[\x00-\x1f\x7f,]|^-/;
1160
1157
  var integerInRange = (field, range) => {
@@ -1165,7 +1162,7 @@ var workflowsEnabled = z.boolean({ error: "workflows.enabled must be a boolean"
1165
1162
  var workflowsMaxConcurrentSessions = integerInRange("workflows.maxConcurrentSessions", WORKFLOWS_MAX_CONCURRENT_SESSIONS_RANGE);
1166
1163
  var workflowsMaxActionsPerPoll = integerInRange("workflows.maxActionsPerPoll", WORKFLOWS_MAX_ACTIONS_PER_POLL_RANGE);
1167
1164
  var nonEmptyList = (field, item) => z.array(item, { error: `${field} must be an array` }).min(1, { error: `${field} must list at least one entry when present` });
1168
- var WorkflowLabelName = z.string({ error: "a workflow label name must be a string" }).trim().min(1, { error: "a workflow label name must not be empty" }).max(50, { error: `a workflow label name must be at most 50 characters` }).refine((name) => !UNSAFE_LABEL_NAME.test(name), { error: "a workflow label name must not start with a dash or hold a comma or control character" });
1165
+ var WorkflowLabelName = z.string({ error: "a workflow label name must be a string" }).trim().min(1, { error: "a workflow label name must not be empty" }).max(WORKFLOW_LABEL_NAME_MAX_CHARACTERS, { error: `a workflow label name must be at most ${WORKFLOW_LABEL_NAME_MAX_CHARACTERS} characters` }).refine((name) => !UNSAFE_LABEL_NAME.test(name), { error: "a workflow label name must not start with a dash or hold a comma or control character" });
1169
1166
  var WorkflowCommentBody = z.string({ error: "a workflow comment body must be a string" }).min(1, { error: "a workflow comment body must not be empty" }).max(WORKFLOW_COMMENT_BODY_MAX_CHARACTERS, { error: `a workflow comment body must be at most ${WORKFLOW_COMMENT_BODY_MAX_CHARACTERS} characters` }).refine((body) => body.trim().length > 0, { error: "a workflow comment body must not be blank" });
1170
1167
  var WorkflowTrigger = z.enum(WORKFLOW_TRIGGERS, { error: `workflows.rules[].trigger must be one of ${WORKFLOW_TRIGGERS.join(", ")}` });
1171
1168
  var WorkflowAction = z.discriminatedUnion("type", [
@@ -1443,9 +1440,6 @@ var TelegramSettings = optionalObject("telegram", {
1443
1440
  var IngestSettings = z.object({ enabled: optionalBoolean("ingest.enabled") }, { error: "ingest must be an object" }).passthrough().optional();
1444
1441
  var TraceSettings = z.object({ enabled: optionalBoolean("trace.enabled") }, { error: "trace must be an object" }).optional();
1445
1442
  var PlanReviewSettings = z.object({ enabled: optionalBoolean("planReview.enabled") }, { error: "planReview must be an object" }).optional();
1446
- var agentApiShape = { enabled: optionalBoolean("agentApi.enabled") };
1447
- var AgentApiSettings = z.object(agentApiShape, { error: "agentApi must be an object" }).strict().optional();
1448
- var AgentApiFileSettings = z.object(agentApiShape, { error: "agentApi must be an object" }).passthrough().optional();
1449
1443
  var optionalPathList = (field) => z.array(z.string({ error: `${field} must be an array of paths` }).trim().min(1, { error: `${field} must be an array of paths` }), { error: `${field} must be an array of paths` }).optional();
1450
1444
  var sandboxShape = {
1451
1445
  unguardedRepos: optionalPathList("guardrails.unguardedRepos"),
@@ -1499,7 +1493,6 @@ var createBrowserConfigShape = (isAbsolutePath) => ({
1499
1493
  usage: createUsageSettings(isAbsolutePath),
1500
1494
  telegram: TelegramSettings,
1501
1495
  ingest: IngestSettings,
1502
- agentApi: AgentApiSettings,
1503
1496
  guardrails: createSandboxSettings(isAbsolutePath),
1504
1497
  telemetry: TelemetrySettings,
1505
1498
  workflows: WorkflowsSettings.nullable().optional()
@@ -1615,7 +1608,6 @@ var FILE_CONFIG_SHAPE = {
1615
1608
  telegram: optionalLooseObject("telegram"),
1616
1609
  ingest: optionalLooseObject("ingest"),
1617
1610
  workflows: optionalLooseObject("workflows"),
1618
- agentApi: AgentApiFileSettings,
1619
1611
  guardrails: SandboxFileSettings,
1620
1612
  telemetry: TelemetryFileSettings,
1621
1613
  trace: TraceSettings,
@@ -1672,7 +1664,6 @@ var CONFIG_BLOCK_KEYS = Object.freeze([
1672
1664
  "usage",
1673
1665
  "telegram",
1674
1666
  "ingest",
1675
- "agentApi",
1676
1667
  "guardrails",
1677
1668
  "telemetry",
1678
1669
  "workflows",
@@ -1701,4 +1692,4 @@ function configIssueMessage(error) {
1701
1692
  return error.issues[0]?.message || "settings are invalid";
1702
1693
  }
1703
1694
  //#endregion
1704
- export { TeamReviewCompareFiles as $, MyPrSearchResponse as A, CoherenceWorkInspect as At, PostingPlan as B, MyPrMergeMethod as C, KEEP_MERGEABLE_TIMEOUT_MINUTES_RANGE as Ct, MyPrMergeWhenReadyRequest as D, CoherenceRisk as Dt, MyPrMergeStateResponse as E, CoherenceReadiness as Et, CommitSha as F, ReviewDraft as G, QueuedReview as H, DECIDING_REVIEW_STATES as I, ReviewThreadId as J, ReviewFinding as K, FindingSeverity as L, MyPrThreadsResponse as M, MyPrsState as N, MyPrMergeWhenReadyResult as O, CoherenceTicketCreated as Ot, MyPrsStatus as P, TeamReviewActionResult as Q, GithubReviewDecision as R, MyPrKeepMergeableResult as S, normalizeLegacyConfigNumbers as St, MyPrMergeResult as T, CoherenceOrient as Tt, ReviewChecksState as U, PrDetail as V, ReviewComment as W, SearchedPr as X, ReviewVerdict as Y, TeamReviewActionRequest as Z, WorkflowSearchNode as _, ReviewsRefreshResult as _t, ConfigUpdate as a, TeamReviewThreadsRepository as at, MyPrAutoRebase as b, USAGE_COST_MODES as bt, TASK_TITLE_SOURCE_PRIORITY as c, hasStandingViewerApproval as ct, BRANCH_GC_CONTROL_NUMERIC_KEYS as d, shortSha as dt, TeamReviewResolveResponse as et, BranchGcFileSettings as f, GH_SEGMENT as ft, WorkflowLabelName as g, ReviewsRefreshRequest as gt, WorkflowCommentBody as h, repoParts as ht, Config as i, TeamReviewThreadResult as it, MyPrThreadNode as j, CoherenceWorkState as jt, MyPrSearchNode as k, CoherenceWorkCreated as kt, configIssueMessage as l, FULL_SHA_RE as lt, DEFAULT_FACTORY_PROTECTED_PATHS as m, REPO_SLUG_RE as mt, BUILTIN_AGENT_IDS as n, TeamReviewStatus as nt, PersistedTaskTitle as o, canApproveAfterComment as ot, DEFAULT_FACTORY_CHECKS as p, NODE_ID_RE as pt, ReviewResult as q, BrowserConfig as r, TeamReviewThreadCommentsResponse as rt, RUNTIME_CONFIG_SCALAR_KEYS as s, decisionAsIfApprovalRequired as st, AGENT_ID_SHAPE_MESSAGE as t, TeamReviewStateEntry as tt, BRANCH_GC_CONTROL_BOOLEAN_KEYS as u, HEX_SHA_RE as ut, WorkflowsSettings as v, reviewsPollingShape as vt, MyPrMergeRequest as w, USAGE_INTEGER_RANGES as wt, MyPrKeepMergeableRequest as x, USAGE_VENDOR_KEYS as xt, WorkflowsState as y, USAGE_BUDGET_KEYS as yt, GithubReviewState as z };
1695
+ export { TeamReviewCompareFiles as $, MyPrSearchResponse as A, CoherenceWorkInspect as At, PostingPlan as B, MyPrMergeMethod as C, KEEP_MERGEABLE_TIMEOUT_MINUTES_RANGE as Ct, MyPrMergeWhenReadyRequest as D, CoherenceRisk as Dt, MyPrMergeStateResponse as E, CoherenceReadiness as Et, CommitSha as F, ReviewDraft as G, QueuedReview as H, DECIDING_REVIEW_STATES as I, ReviewThreadId as J, ReviewFinding as K, FindingSeverity as L, MyPrThreadsResponse as M, MyPrsState as N, MyPrMergeWhenReadyResult as O, CoherenceTicketCreated as Ot, MyPrsStatus as P, TeamReviewActionResult as Q, GithubReviewDecision as R, MyPrKeepMergeableResult as S, normalizeLegacyConfigNumbers as St, MyPrMergeResult as T, CoherenceOrient as Tt, ReviewChecksState as U, PrDetail as V, ReviewComment as W, SearchedPr as X, ReviewVerdict as Y, TeamReviewActionRequest as Z, WorkflowSearchNode as _, GithubPollingRefreshResult as _t, ConfigUpdate as a, TeamReviewThreadsRepository as at, MyPrAutoRebase as b, USAGE_COST_MODES as bt, TASK_TITLE_SOURCE_PRIORITY as c, hasStandingViewerApproval as ct, BRANCH_GC_CONTROL_NUMERIC_KEYS as d, shortSha as dt, TeamReviewResolveResponse as et, BranchGcFileSettings as f, GH_SEGMENT as ft, WorkflowLabelName as g, GithubPollingRefreshRequest as gt, WorkflowCommentBody as h, repoParts as ht, Config as i, TeamReviewThreadResult as it, MyPrThreadNode as j, CoherenceWorkState as jt, MyPrSearchNode as k, CoherenceWorkCreated as kt, configIssueMessage as l, FULL_SHA_RE as lt, DEFAULT_FACTORY_PROTECTED_PATHS as m, REPO_SLUG_RE as mt, BUILTIN_AGENT_IDS as n, TeamReviewStatus as nt, PersistedTaskTitle as o, canApproveAfterComment as ot, DEFAULT_FACTORY_CHECKS as p, NODE_ID_RE as pt, ReviewResult as q, BrowserConfig as r, TeamReviewThreadCommentsResponse as rt, RUNTIME_CONFIG_SCALAR_KEYS as s, decisionAsIfApprovalRequired as st, AGENT_ID_SHAPE_MESSAGE as t, TeamReviewStateEntry as tt, BRANCH_GC_CONTROL_BOOLEAN_KEYS as u, HEX_SHA_RE as ut, WorkflowsSettings as v, githubPollingShape as vt, MyPrMergeRequest as w, USAGE_INTEGER_RANGES as wt, MyPrKeepMergeableRequest as x, USAGE_VENDOR_KEYS as xt, WorkflowsState as y, USAGE_BUDGET_KEYS as yt, GithubReviewState as z };
@@ -0,0 +1 @@
1
+ export { c as loadConfigFile } from "./config-store-BtsYbNC3.js";
@@ -1,20 +1,52 @@
1
1
  import { n as errorLabel, r as errorMessage } from "./text-DoirglWV.js";
2
- import { i as equalsIgnoringCaseOnWindows, t as canonicalizePath } from "./paths-CeJl2Vcg.js";
2
+ import { n as equalsIgnoringCaseOnWindows } from "./paths-Bu4eH1Yd.js";
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
- 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-DTwMFUjx.js";
7
- import { V as FeatureFlagsResponse, W as TELEMETRY_KILL_SWITCH_FLAG } from "./contracts-DZV9H8px.js";
5
+ import { d as writeJsonAtomicSync, f as writeTextAtomic, p as writeTextAtomicSync } from "./json-file-BaxGcB2R.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-rPbbL4nW.js";
7
+ import { V as FeatureFlagsResponse, W as TELEMETRY_KILL_SWITCH_FLAG } from "./contracts-DjIgIuDk.js";
8
8
  import fs from "node:fs";
9
9
  import path from "node:path";
10
10
  import os from "node:os";
11
+ import { promisify } from "node:util";
11
12
  import crypto, { createHash } from "node:crypto";
12
- var DEFAULT_BRANCH_GC_PREFIXES = ["glimmervoid/session/", "worktree-agent-"];
13
+ //#region shared/canonical-paths.ts
14
+ var realpathNative = promisify(fs.realpath.native);
15
+ function canonicalizePath(p) {
16
+ try {
17
+ return fs.realpathSync.native(p);
18
+ } catch {
19
+ return p;
20
+ }
21
+ }
22
+ function isSameDirectoryPath(a, b) {
23
+ const resolvedA = path.resolve(String(a || ""));
24
+ const resolvedB = path.resolve(String(b || ""));
25
+ if (equalsIgnoringCaseOnWindows(resolvedA, resolvedB)) return true;
26
+ if (process.platform !== "win32" && process.platform !== "darwin") return false;
27
+ return equalsIgnoringCaseOnWindows(canonicalizePath(resolvedA), canonicalizePath(resolvedB));
28
+ }
29
+ async function comparableDirectoryPath(candidatePath) {
30
+ const resolvedPath = path.resolve(String(candidatePath || ""));
31
+ let canonicalPath;
32
+ try {
33
+ canonicalPath = await realpathNative(resolvedPath);
34
+ } catch {
35
+ canonicalPath = resolvedPath;
36
+ }
37
+ if (process.platform !== "win32") return canonicalPath;
38
+ return canonicalPath.toLowerCase();
39
+ }
40
+ //#endregion
41
+ //#region server/core/branch-gc-core.ts
42
+ var SESSION_BRANCH_PREFIX = "glimmervoid/session/";
43
+ var DEFAULT_BRANCH_GC_PREFIXES = [SESSION_BRANCH_PREFIX, "worktree-agent-"];
13
44
  var DAY_MS = 864e5;
45
+ var MERGED_DELETION_REASON = "merged-into-integration";
14
46
  var STALE_DELETION_REASON = "stale-orphan";
15
47
  var UNMERGED_KEPT_REASON = "not-merged-and-unmerged-deletion-off";
16
48
  function sessionIdFromBranch(branchName) {
17
- if (!branchName.startsWith("glimmervoid/session/")) return null;
49
+ if (!branchName.startsWith(SESSION_BRANCH_PREFIX)) return null;
18
50
  return branchName.slice(20);
19
51
  }
20
52
  function usablePrefixes(prefixes) {
@@ -63,7 +95,7 @@ function planBranchGc({ remoteBranches = [], integrationTips = [], liveSessionId
63
95
  if (remoteBranch.mergedIntoIntegration === true) {
64
96
  deletions.push({
65
97
  name,
66
- reason: remoteBranch.mergedReason ?? "merged-into-integration",
98
+ reason: remoteBranch.mergedReason ?? MERGED_DELETION_REASON,
67
99
  tipSha
68
100
  });
69
101
  continue;
@@ -609,7 +641,7 @@ function localDayKey(moment) {
609
641
  return `${date.getFullYear()}-${pad2(date.getMonth() + 1)}-${pad2(date.getDate())}`;
610
642
  }
611
643
  //#endregion
612
- //#region server/core/ingest-core.ts
644
+ //#region server/ingest/core/ingest-core.ts
613
645
  var SOURCE_NAMES = [
614
646
  "terminal",
615
647
  "agentLogs",
@@ -1112,7 +1144,6 @@ var DEFAULT_CONFIG = {
1112
1144
  verifierModel: null,
1113
1145
  mirrorHarnessRuns: false
1114
1146
  },
1115
- agentApi: { enabled: false },
1116
1147
  guardrails: {
1117
1148
  unguardedRepos: [],
1118
1149
  blockedPaths: [],
@@ -1174,6 +1205,7 @@ var DEFAULT_CONFIG = {
1174
1205
  };
1175
1206
  var DEFAULT_CONFIG_BY_KEY = DEFAULT_CONFIG;
1176
1207
  var ABORT_CONFIG_SAVE = "abort-config-save";
1208
+ var CONFIG_DIR_MODE = 448;
1177
1209
  function glimmervoidHomeDir() {
1178
1210
  return glimmervoidHomeDir$1(os.homedir(), process.env);
1179
1211
  }
@@ -1196,9 +1228,9 @@ function resolveConfigPath() {
1196
1228
  const homeConfig = decided.homePath;
1197
1229
  fs.mkdirSync(homeDir, {
1198
1230
  recursive: true,
1199
- mode: 448
1231
+ mode: CONFIG_DIR_MODE
1200
1232
  });
1201
- restrictMode(homeDir, 448);
1233
+ restrictMode(homeDir, CONFIG_DIR_MODE);
1202
1234
  writeJsonAtomicSync(homeConfig, DEFAULT_CONFIG, {
1203
1235
  mode: 384,
1204
1236
  enforceMode: true
@@ -1527,7 +1559,6 @@ function createConfigStore({ settingsDefaults } = {}) {
1527
1559
  detectBackgroundAgents: config.detectBackgroundAgents ?? effectiveDefaults.detectBackgroundAgents,
1528
1560
  recordSignals: config.recordSignals ?? effectiveDefaults.recordSignals,
1529
1561
  trace: { enabled: config.trace?.enabled ?? DEFAULT_CONFIG.trace.enabled },
1530
- agentApi: { enabled: config.agentApi?.enabled ?? DEFAULT_CONFIG.agentApi.enabled },
1531
1562
  guardrails: {
1532
1563
  ...DEFAULT_CONFIG.guardrails,
1533
1564
  ...config.guardrails
@@ -1605,7 +1636,6 @@ function createConfigStore({ settingsDefaults } = {}) {
1605
1636
  if (newConfig.usage != null) config.usage = newConfig.usage;
1606
1637
  if (newConfig.telegram != null) config.telegram = newConfig.telegram;
1607
1638
  if (newConfig.ingest != null) config.ingest = newConfig.ingest;
1608
- if (newConfig.agentApi != null) config.agentApi = newConfig.agentApi;
1609
1639
  if (newConfig.guardrails != null) config.guardrails = newConfig.guardrails;
1610
1640
  if (newConfig.telemetry != null) config.telemetry = newConfig.telemetry;
1611
1641
  if (newConfig.workflows == null) delete config.workflows;
@@ -1680,4 +1710,4 @@ function createConfigStore({ settingsDefaults } = {}) {
1680
1710
  };
1681
1711
  }
1682
1712
  //#endregion
1683
- export { sessionIdFromBranch as $, snapshotEvents as A, classifySessionExit as B, createIngestStore as C, resolveIngestConfig as D, publishEvent as E, adapterBucket as F, nodeMajorVersion as G, decideRemoteTelemetryState as H, buildAiGenerationEvents as I, stableConfigKey as J, parsePosthogReleaseId as K, buildBrowserExceptionProperties as L, FIRST_RUN_NOTICE as M, TELEMETRY_BATCH_URL as N, ringStats as O, TELEMETRY_FLAGS_URL as P, planWorktreeGc as Q, buildExceptionProperties as R, buildContextDigest as S, latestSeq as T, decideTelemetryConsent as U, decideIsDevInstall as V, exceptionFingerprint as W, matchedPrefix as X, DEFAULT_BRANCH_GC_PREFIXES as Y, planBranchGc as Z, INGEST_SPEC as _, ensureProjectIds as a, DEFAULT_DIGEST_BUDGET_CHARS as b, loadConfigFile as c, assetForPlatform as d, usablePrefixes as et, decideRtkInstall as f, verifyDigest as g, isRtkBinaryName as h, createConfigStore as i, localDayKey as j, scrubText as k, resolveConfigPath as l, installTargetPath as m, DEFAULT_CONFIG as n, generateProjectId as o, findEscapingArchiveMember as p, resolveProjectToken as q, SECRET_PRESENCE_SUFFIX as r, glimmervoidHomeDir as s, ABORT_CONFIG_SAVE as t, worktreeIntegrationTips as tt, validateConfig as u, mergeSettingsBlock as v, enabledSourceNames as w, SOURCE_DEFAULTS as x, validateSettingsBlock as y, buildFactoryDecisionEvent as z };
1713
+ export { sessionIdFromBranch as $, snapshotEvents as A, classifySessionExit as B, createIngestStore as C, resolveIngestConfig as D, publishEvent as E, adapterBucket as F, nodeMajorVersion as G, decideRemoteTelemetryState as H, buildAiGenerationEvents as I, stableConfigKey as J, parsePosthogReleaseId as K, buildBrowserExceptionProperties as L, FIRST_RUN_NOTICE as M, TELEMETRY_BATCH_URL as N, ringStats as O, TELEMETRY_FLAGS_URL as P, planWorktreeGc as Q, buildExceptionProperties as R, buildContextDigest as S, latestSeq as T, decideTelemetryConsent as U, decideIsDevInstall as V, exceptionFingerprint as W, matchedPrefix as X, DEFAULT_BRANCH_GC_PREFIXES as Y, planBranchGc as Z, INGEST_SPEC as _, ensureProjectIds as a, DEFAULT_DIGEST_BUDGET_CHARS as b, loadConfigFile as c, assetForPlatform as d, usablePrefixes as et, decideRtkInstall as f, verifyDigest as g, isRtkBinaryName as h, createConfigStore as i, isSameDirectoryPath as it, localDayKey as j, scrubText as k, resolveConfigPath as l, installTargetPath as m, DEFAULT_CONFIG as n, canonicalizePath as nt, generateProjectId as o, findEscapingArchiveMember as p, resolveProjectToken as q, SECRET_PRESENCE_SUFFIX as r, comparableDirectoryPath as rt, glimmervoidHomeDir as s, ABORT_CONFIG_SAVE as t, worktreeIntegrationTips as tt, validateConfig as u, mergeSettingsBlock as v, enabledSourceNames as w, SOURCE_DEFAULTS as x, validateSettingsBlock as y, buildFactoryDecisionEvent as z };
@@ -1,5 +1,5 @@
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-DTwMFUjx.js";
1
+ import { C as SessionState, D as TaskTitle, S as SessionSnapshot, f as PendingPromptDetail, m as PendingWakeup, v as SESSION_DOC_PATH_MAX_CHARS, x as SessionDoc } from "./session-D6xXN0UU.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 GithubPollingRefreshResult, gt as GithubPollingRefreshRequest, jt as CoherenceWorkState, mt as REPO_SLUG_RE, n as BUILTIN_AGENT_IDS, nt as TeamReviewStatus, vt as githubPollingShape, w as MyPrMergeRequest, x as MyPrKeepMergeableRequest } from "./config-rPbbL4nW.js";
3
3
  import { z } from "zod";
4
4
  //#region shared/contracts/factory.ts
5
5
  var FactoryConsequences = z.looseObject({ records: z.array(z.looseObject({
@@ -953,7 +953,7 @@ var IssuesStatus = z.object({
953
953
  reason: z.string().nullable(),
954
954
  lastSyncAt: z.number().finite().nonnegative().nullable(),
955
955
  issues: z.array(IssueRow),
956
- ...reviewsPollingShape
956
+ ...githubPollingShape
957
957
  }).passthrough();
958
958
  var PLAN_FEEDBACK_MAX_CHARS = 2e4;
959
959
  var PLAN_COMMENT_MAX_CHARS = 4e3;
@@ -1356,7 +1356,7 @@ var clientVariants = [
1356
1356
  repos: z.array(z.string()).optional(),
1357
1357
  agent: z.string().optional(),
1358
1358
  dangerouslySkipPermissions: z.boolean().optional(),
1359
- unconfined: z.boolean().optional()
1359
+ unguarded: z.boolean().optional()
1360
1360
  }),
1361
1361
  loose("list-conversations", {
1362
1362
  id: sessionId,
@@ -1392,11 +1392,11 @@ var clientVariants = [
1392
1392
  }),
1393
1393
  loose("scan-repo-roots", { requestId }),
1394
1394
  loose("list-agents", { requestId }),
1395
- loose("get-posthog-report", {
1395
+ loose("get-radar-report", {
1396
1396
  issueId: z.union([z.string(), z.number()]),
1397
1397
  requestId
1398
1398
  }),
1399
- loose("posthog-open-session", {
1399
+ loose("radar-open-session", {
1400
1400
  projectId: z.union([z.string(), z.number()]),
1401
1401
  issueId: z.union([z.string(), z.number()]),
1402
1402
  requestId
@@ -1412,7 +1412,7 @@ var clientVariants = [
1412
1412
  repo: IssueRepoSlug,
1413
1413
  issueNumber: z.number().int().positive()
1414
1414
  }),
1415
- loose("posthog-issue-action", {
1415
+ loose("radar-issue-action", {
1416
1416
  projectId: z.union([z.string(), z.number()]),
1417
1417
  issueId: z.union([z.string(), z.number()]),
1418
1418
  action: z.string(),
@@ -1446,11 +1446,11 @@ var clientVariants = [
1446
1446
  ...MyPrMergeWhenReadyRequest.shape,
1447
1447
  requestId
1448
1448
  }),
1449
- loose("reviews-refresh", {
1450
- ...ReviewsRefreshRequest.shape,
1449
+ loose("github-polling-refresh", {
1450
+ ...GithubPollingRefreshRequest.shape,
1451
1451
  requestId
1452
1452
  }),
1453
- loose("posthog-archive-investigation", {
1453
+ loose("radar-archive-investigation", {
1454
1454
  id: z.unknown().optional(),
1455
1455
  requestId
1456
1456
  }),
@@ -1570,14 +1570,14 @@ Object.freeze([
1570
1570
  "conversations",
1571
1571
  "resume-conversation-ack",
1572
1572
  "health-snapshot",
1573
- "posthog-status",
1574
- "posthog-investigation-activity",
1575
- "posthog-investigation-finished",
1576
- "posthog-report",
1577
- "posthog-open-session-result",
1573
+ "radar-status",
1574
+ "radar-investigation-activity",
1575
+ "radar-investigation-finished",
1576
+ "radar-report",
1577
+ "radar-open-session-result",
1578
1578
  "issue-detail-result",
1579
1579
  "open-issue-session-result",
1580
- "posthog-issue-action-result",
1580
+ "radar-issue-action-result",
1581
1581
  "team-review-action-result",
1582
1582
  "benchmark-action-result",
1583
1583
  "factory-queue-intent-result",
@@ -1585,8 +1585,8 @@ Object.freeze([
1585
1585
  "my-pr-merge-result",
1586
1586
  "my-pr-keep-mergeable-result",
1587
1587
  "my-pr-merge-when-ready-result",
1588
- "reviews-refresh-result",
1589
- "posthog-archive-investigation-result",
1588
+ "github-polling-refresh-result",
1589
+ "radar-archive-investigation-result",
1590
1590
  "team-review-status",
1591
1591
  "benchmark-status",
1592
1592
  "factory-state",
@@ -1904,20 +1904,20 @@ var serverVariants = [
1904
1904
  requestId
1905
1905
  }),
1906
1906
  loose("health-snapshot", { stats: opaqueObject }),
1907
- loose("posthog-status", {
1907
+ loose("radar-status", {
1908
1908
  ts: timestamp,
1909
1909
  intervalMinutes: z.number(),
1910
1910
  projects: z.array(opaqueObject),
1911
1911
  investigations: z.array(opaqueObject)
1912
1912
  }),
1913
- loose("posthog-investigation-activity", {
1913
+ loose("radar-investigation-activity", {
1914
1914
  projectId: z.union([z.string(), z.number()]),
1915
1915
  issueId: z.string(),
1916
1916
  inFlight: z.literal(true),
1917
1917
  startedAt: timestamp.nullable(),
1918
1918
  trail: trailSteps
1919
1919
  }),
1920
- loose("posthog-investigation-finished", {
1920
+ loose("radar-investigation-finished", {
1921
1921
  projectId: z.union([z.string(), z.number()]),
1922
1922
  issueId: z.string(),
1923
1923
  verdict: z.string(),
@@ -1925,7 +1925,7 @@ var serverVariants = [
1925
1925
  startedAt: timestamp.nullable(),
1926
1926
  trail: trailSteps
1927
1927
  }),
1928
- loose("posthog-report", {
1928
+ loose("radar-report", {
1929
1929
  requestId,
1930
1930
  ok: z.boolean(),
1931
1931
  found: z.boolean(),
@@ -1935,7 +1935,7 @@ var serverVariants = [
1935
1935
  message: z.string().optional(),
1936
1936
  error: z.string().optional()
1937
1937
  }),
1938
- loose("posthog-open-session-result", {
1938
+ loose("radar-open-session-result", {
1939
1939
  requestId,
1940
1940
  ok: z.boolean(),
1941
1941
  error: optionalError,
@@ -1958,7 +1958,7 @@ var serverVariants = [
1958
1958
  pending: z.boolean().optional(),
1959
1959
  existing: z.boolean().optional()
1960
1960
  }),
1961
- loose("posthog-issue-action-result", {
1961
+ loose("radar-issue-action-result", {
1962
1962
  requestId,
1963
1963
  ok: z.boolean(),
1964
1964
  error: optionalError,
@@ -1992,11 +1992,11 @@ var serverVariants = [
1992
1992
  ...MyPrMergeWhenReadyResult.shape,
1993
1993
  requestId
1994
1994
  }),
1995
- loose("reviews-refresh-result", {
1996
- ...ReviewsRefreshResult.shape,
1995
+ loose("github-polling-refresh-result", {
1996
+ ...GithubPollingRefreshResult.shape,
1997
1997
  requestId
1998
1998
  }),
1999
- loose("posthog-archive-investigation-result", {
1999
+ loose("radar-archive-investigation-result", {
2000
2000
  requestId,
2001
2001
  ok: z.boolean(),
2002
2002
  error: optionalError
@@ -1,5 +1,5 @@
1
- import { r as execFileSync } from "./child-process-safe-DDELk9XC.js";
2
- //#region server/core/git-version-core.ts
1
+ import { r as execFileSync } from "./child-process-safe-CbQnyh7D.js";
2
+ //#region server/git/core/git-version-core.ts
3
3
  var NEW_WORK_ISOLATION_FLOOR = Object.freeze({
4
4
  major: 2,
5
5
  minor: 48
@@ -36,7 +36,7 @@ function gitDoctorRows(report) {
36
36
  return [versionRow, ["hint", `${GIT_UPDATE_HINT}: on an older one ${WHOLE_RANGE_CONSEQUENCE}`]];
37
37
  }
38
38
  //#endregion
39
- //#region server/git-version.ts
39
+ //#region server/git/git-version.ts
40
40
  function readGitVersionOutput() {
41
41
  return execFileSync("git", ["--version"], {
42
42
  encoding: "utf8",
@@ -1,6 +1,6 @@
1
1
  import { r as errorMessage } from "./text-DoirglWV.js";
2
- import { o as relayPath } from "./runtime-paths-BPoxENmK.js";
3
- import { _ as SIGN_URL_ENV, n as AGENT_URL_ENV } from "./session-C7rstCmA.js";
2
+ import { o as relayPath } from "./runtime-paths-BkeftE60.js";
3
+ import { n as AGENT_URL_ENV, y as SIGN_URL_ENV } from "./session-D6xXN0UU.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";
@@ -164,6 +164,10 @@ function classifyGrokHooksFile(contents, { relayPath, events, managedEventSets =
164
164
  for (const event of actualEvents) if (!isManagedHookGroup(hooks[event], event)) return "foreign";
165
165
  return "managed-stale";
166
166
  }
167
+ //#endregion
168
+ //#region session/core/title-classifier-core.ts
169
+ var BRAILLE_MIN = 10240;
170
+ var BRAILLE_MAX = 10495;
167
171
  var CIRCLE_HALVES_SPINNER_CODEPOINTS = /* @__PURE__ */ new Set([
168
172
  9680,
169
173
  9681,
@@ -173,7 +177,7 @@ var CIRCLE_HALVES_SPINNER_CODEPOINTS = /* @__PURE__ */ new Set([
173
177
  function isBrailleChar(char) {
174
178
  if (!char) return false;
175
179
  const codePoint = char.codePointAt(0) ?? 0;
176
- return codePoint >= 10240 && codePoint <= 10495;
180
+ return codePoint >= BRAILLE_MIN && codePoint <= BRAILLE_MAX;
177
181
  }
178
182
  function isSpinnerChar(char) {
179
183
  if (!char) return false;
@@ -1,5 +1,5 @@
1
- import { a as isPathInside } from "./paths-CeJl2Vcg.js";
2
- //#region server/core/visions-buffer-core.ts
1
+ import { r as isPathInside } from "./paths-Bu4eH1Yd.js";
2
+ //#region server/visions/core/visions-buffer-core.ts
3
3
  function createDocStore() {
4
4
  return { docsByUri: Object.create(null) };
5
5
  }
@@ -272,7 +272,7 @@ function listDocs(store) {
272
272
  return Object.keys(store.docsByUri).map((uri) => getDoc(store, uri));
273
273
  }
274
274
  //#endregion
275
- //#region server/core/visions-scope-core.ts
275
+ //#region server/visions/core/visions-scope-core.ts
276
276
  function collapseDotSegments(value) {
277
277
  const out = [];
278
278
  for (const part of value.split("/")) {
@@ -391,7 +391,7 @@ function visionsLaneReloadSignature(ingest, visions, projects) {
391
391
  });
392
392
  }
393
393
  //#endregion
394
- //#region server/core/ingest-editor-core.ts
394
+ //#region server/ingest/core/ingest-editor-core.ts
395
395
  var SOURCE = "editor";
396
396
  var ACTIVITY_METHOD = "visions/editorActivity";
397
397
  var KIND_BY_METHOD = Object.freeze({
@@ -6,7 +6,7 @@ import crypto from "node:crypto";
6
6
  //#region server/spawn-gate.ts
7
7
  var QUEUE_ADMISSION_TIMED_OUT = "serial-queue-admission-timed-out";
8
8
  function isQueueAdmissionTimeout(error) {
9
- return error instanceof Error && error.message === "serial-queue-admission-timed-out";
9
+ return error instanceof Error && error.message === QUEUE_ADMISSION_TIMED_OUT;
10
10
  }
11
11
  function createSerialQueue() {
12
12
  let tail = Promise.resolve();
@@ -1,13 +1,13 @@
1
1
  import { r as errorMessage } from "./text-DoirglWV.js";
2
- import { s as resolvePackageBin } from "./runtime-paths-BPoxENmK.js";
3
- import { r as execFileSync } from "./child-process-safe-DDELk9XC.js";
2
+ import { s as resolvePackageBin } from "./runtime-paths-BkeftE60.js";
3
+ import { r as execFileSync } from "./child-process-safe-CbQnyh7D.js";
4
4
  import { n as glimmervoidHomeDir, t as decideConfigPath } from "./config-path-core-DFt-TemS.js";
5
- import { r as BrowserConfig } from "./config-DTwMFUjx.js";
5
+ import { r as BrowserConfig } from "./config-rPbbL4nW.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
- import { parseArgs } from "node:util";
9
8
  import os from "node:os";
10
9
  import { z } from "zod";
10
+ import { parseArgs } from "node:util";
11
11
  import { DatabaseSync } from "node:sqlite";
12
12
  //#region knowledge-graph/coherence-delta.ts
13
13
  var journalRecordKinds = [