glimmervoid 0.34.0 → 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-BY8slY95.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-CggAQLUB.js → config-store-BtsYbNC3.js} +44 -14
  12. package/dist/chunks/{contracts-D1wLN5iO.js → contracts-DjIgIuDk.js} +51 -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-Dh4udE7P.js → main-BTI0J5QE.js} +499 -539
  19. package/dist/chunks/{pair-cli-Nnrd0il_.js → pair-cli-Dcyzv3In.js} +2 -2
  20. package/dist/chunks/paths-Bu4eH1Yd.js +27 -0
  21. package/dist/chunks/{remote-config-DKMQEIZh.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 +23 -9
  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-_HwpLy0R.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-BmdXeUz1.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-BiTwrj1H.js +0 -254
  51. package/dist/client/assets/index-BxU3Ww0L.css +0 -1
  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-D1wLN5iO.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,
@@ -1370,6 +1370,15 @@ var clientVariants = [
1370
1370
  id: sessionId,
1371
1371
  newName: z.string()
1372
1372
  }),
1373
+ loose("get-workspace-repos", {
1374
+ id: sessionId,
1375
+ requestId
1376
+ }),
1377
+ loose("set-workspace-repos", {
1378
+ id: sessionId,
1379
+ repos: z.array(z.string()),
1380
+ requestId
1381
+ }),
1373
1382
  loose("set-session-title", {
1374
1383
  id: sessionId,
1375
1384
  title: TaskTitle
@@ -1383,11 +1392,11 @@ var clientVariants = [
1383
1392
  }),
1384
1393
  loose("scan-repo-roots", { requestId }),
1385
1394
  loose("list-agents", { requestId }),
1386
- loose("get-posthog-report", {
1395
+ loose("get-radar-report", {
1387
1396
  issueId: z.union([z.string(), z.number()]),
1388
1397
  requestId
1389
1398
  }),
1390
- loose("posthog-open-session", {
1399
+ loose("radar-open-session", {
1391
1400
  projectId: z.union([z.string(), z.number()]),
1392
1401
  issueId: z.union([z.string(), z.number()]),
1393
1402
  requestId
@@ -1403,7 +1412,7 @@ var clientVariants = [
1403
1412
  repo: IssueRepoSlug,
1404
1413
  issueNumber: z.number().int().positive()
1405
1414
  }),
1406
- loose("posthog-issue-action", {
1415
+ loose("radar-issue-action", {
1407
1416
  projectId: z.union([z.string(), z.number()]),
1408
1417
  issueId: z.union([z.string(), z.number()]),
1409
1418
  action: z.string(),
@@ -1437,11 +1446,11 @@ var clientVariants = [
1437
1446
  ...MyPrMergeWhenReadyRequest.shape,
1438
1447
  requestId
1439
1448
  }),
1440
- loose("reviews-refresh", {
1441
- ...ReviewsRefreshRequest.shape,
1449
+ loose("github-polling-refresh", {
1450
+ ...GithubPollingRefreshRequest.shape,
1442
1451
  requestId
1443
1452
  }),
1444
- loose("posthog-archive-investigation", {
1453
+ loose("radar-archive-investigation", {
1445
1454
  id: z.unknown().optional(),
1446
1455
  requestId
1447
1456
  }),
@@ -1511,6 +1520,8 @@ Object.freeze([
1511
1520
  "hooks-report",
1512
1521
  "save-hook-result",
1513
1522
  "delete-hook-result",
1523
+ "workspace-repos",
1524
+ "set-workspace-repos-result",
1514
1525
  "hooks-updated",
1515
1526
  "state-change",
1516
1527
  "session-added",
@@ -1559,14 +1570,14 @@ Object.freeze([
1559
1570
  "conversations",
1560
1571
  "resume-conversation-ack",
1561
1572
  "health-snapshot",
1562
- "posthog-status",
1563
- "posthog-investigation-activity",
1564
- "posthog-investigation-finished",
1565
- "posthog-report",
1566
- "posthog-open-session-result",
1573
+ "radar-status",
1574
+ "radar-investigation-activity",
1575
+ "radar-investigation-finished",
1576
+ "radar-report",
1577
+ "radar-open-session-result",
1567
1578
  "issue-detail-result",
1568
1579
  "open-issue-session-result",
1569
- "posthog-issue-action-result",
1580
+ "radar-issue-action-result",
1570
1581
  "team-review-action-result",
1571
1582
  "benchmark-action-result",
1572
1583
  "factory-queue-intent-result",
@@ -1574,8 +1585,8 @@ Object.freeze([
1574
1585
  "my-pr-merge-result",
1575
1586
  "my-pr-keep-mergeable-result",
1576
1587
  "my-pr-merge-when-ready-result",
1577
- "reviews-refresh-result",
1578
- "posthog-archive-investigation-result",
1588
+ "github-polling-refresh-result",
1589
+ "radar-archive-investigation-result",
1579
1590
  "team-review-status",
1580
1591
  "benchmark-status",
1581
1592
  "factory-state",
@@ -1635,6 +1646,19 @@ var serverVariants = [
1635
1646
  error: optionalError,
1636
1647
  id: z.string().optional()
1637
1648
  }),
1649
+ loose("workspace-repos", {
1650
+ requestId,
1651
+ id: sessionId,
1652
+ ok: z.boolean(),
1653
+ repos: z.array(z.string()),
1654
+ error: optionalError
1655
+ }),
1656
+ loose("set-workspace-repos-result", {
1657
+ requestId,
1658
+ id: sessionId,
1659
+ ok: z.boolean(),
1660
+ error: optionalError
1661
+ }),
1638
1662
  loose("hooks-updated", { count: z.number().int().nonnegative() }),
1639
1663
  loose("state-change", {
1640
1664
  id: sessionId,
@@ -1880,20 +1904,20 @@ var serverVariants = [
1880
1904
  requestId
1881
1905
  }),
1882
1906
  loose("health-snapshot", { stats: opaqueObject }),
1883
- loose("posthog-status", {
1907
+ loose("radar-status", {
1884
1908
  ts: timestamp,
1885
1909
  intervalMinutes: z.number(),
1886
1910
  projects: z.array(opaqueObject),
1887
1911
  investigations: z.array(opaqueObject)
1888
1912
  }),
1889
- loose("posthog-investigation-activity", {
1913
+ loose("radar-investigation-activity", {
1890
1914
  projectId: z.union([z.string(), z.number()]),
1891
1915
  issueId: z.string(),
1892
1916
  inFlight: z.literal(true),
1893
1917
  startedAt: timestamp.nullable(),
1894
1918
  trail: trailSteps
1895
1919
  }),
1896
- loose("posthog-investigation-finished", {
1920
+ loose("radar-investigation-finished", {
1897
1921
  projectId: z.union([z.string(), z.number()]),
1898
1922
  issueId: z.string(),
1899
1923
  verdict: z.string(),
@@ -1901,7 +1925,7 @@ var serverVariants = [
1901
1925
  startedAt: timestamp.nullable(),
1902
1926
  trail: trailSteps
1903
1927
  }),
1904
- loose("posthog-report", {
1928
+ loose("radar-report", {
1905
1929
  requestId,
1906
1930
  ok: z.boolean(),
1907
1931
  found: z.boolean(),
@@ -1911,7 +1935,7 @@ var serverVariants = [
1911
1935
  message: z.string().optional(),
1912
1936
  error: z.string().optional()
1913
1937
  }),
1914
- loose("posthog-open-session-result", {
1938
+ loose("radar-open-session-result", {
1915
1939
  requestId,
1916
1940
  ok: z.boolean(),
1917
1941
  error: optionalError,
@@ -1934,7 +1958,7 @@ var serverVariants = [
1934
1958
  pending: z.boolean().optional(),
1935
1959
  existing: z.boolean().optional()
1936
1960
  }),
1937
- loose("posthog-issue-action-result", {
1961
+ loose("radar-issue-action-result", {
1938
1962
  requestId,
1939
1963
  ok: z.boolean(),
1940
1964
  error: optionalError,
@@ -1968,11 +1992,11 @@ var serverVariants = [
1968
1992
  ...MyPrMergeWhenReadyResult.shape,
1969
1993
  requestId
1970
1994
  }),
1971
- loose("reviews-refresh-result", {
1972
- ...ReviewsRefreshResult.shape,
1995
+ loose("github-polling-refresh-result", {
1996
+ ...GithubPollingRefreshResult.shape,
1973
1997
  requestId
1974
1998
  }),
1975
- loose("posthog-archive-investigation-result", {
1999
+ loose("radar-archive-investigation-result", {
1976
2000
  requestId,
1977
2001
  ok: z.boolean(),
1978
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 = [