glimmervoid 0.44.2 → 0.45.1-next.45

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 (110) hide show
  1. package/dist/bin/glimmervoid.js +15 -15
  2. package/dist/chunks/{adapters-7AfJ6yb3.js → adapters-BE9BKVW0.js} +24 -24
  3. package/dist/chunks/{adapters-B_ss_kZh.js → adapters-CPaysZkO.js} +1 -1
  4. package/dist/chunks/{agent-api-cli-prUJ5ZGN.js → agent-api-cli-B0l8uLos.js} +1 -1
  5. package/dist/chunks/{agent-api-cli-zwuWZlwk.js → agent-api-cli-Bq9J0_D5.js} +148 -15
  6. package/dist/chunks/{agent-api-core-DQwd2ClI.js → agent-api-core-ClU9-5K3.js} +10 -4
  7. package/dist/chunks/{agent-setup-cli-7hG401Io.js → agent-setup-cli-BA_1AdhQ.js} +2 -2
  8. package/dist/chunks/{contracts-lxJ0sQEl.js → build-channel-qgKwNssc.js} +37 -3
  9. package/dist/chunks/{config-DlKkg6IX.js → config-BqJTnPae.js} +27 -34
  10. package/dist/chunks/{config-path-core-DFt-TemS.js → config-path-core-DUWk0Lui.js} +5 -1
  11. package/dist/chunks/config-store-5xpRLHFo.js +1 -0
  12. package/dist/chunks/{config-store-DIrwF5iQ.js → config-store-BGTg8oKO.js} +77 -78
  13. package/dist/chunks/{git-version-C3lznLS_.js → git-version-BpdkKH2j.js} +1 -1
  14. package/dist/chunks/{grok-Di4aQGre.js → grok-7jK8ZNtf.js} +1 -1
  15. package/dist/chunks/{json-file-DFCTvPjj.js → json-file-BjFK_eSH.js} +2 -7
  16. package/dist/chunks/{main-BCbulgNv.js → main-x9ygUnoL.js} +1226 -1012
  17. package/dist/chunks/{pair-cli-B3VRcrHm.js → pair-cli-Cph4TZ2R.js} +2 -2
  18. package/dist/chunks/{remote-config-C91HwjWq.js → remote-config-CmP36r_s.js} +2 -2
  19. package/dist/chunks/{rtk-resolver-BDHi6RMv.js → rtk-resolver-C_IReILP.js} +1 -1
  20. package/dist/chunks/rtk-resolver-DgnNb1or.js +1 -0
  21. package/dist/chunks/{session-CUc6d7aS.js → session-BwlLY_mv.js} +36 -14
  22. package/dist/chunks/{session-routes--hrsvv7a.js → session-routes-CviNvxcz.js} +9 -1
  23. package/dist/chunks/{settings-cli-C9eCc60b.js → settings-cli-Bete5oVk.js} +11 -10
  24. package/dist/chunks/{settings-readout-core-DK1m5TUq.js → settings-readout-core-CS8MPaIE.js} +14 -8
  25. package/dist/chunks/shown-files-core-soMzCQ1D.js +145 -0
  26. package/dist/chunks/{ssh-sign-cli-DCnHgHqo.js → ssh-sign-cli-DXhuqzuy.js} +2 -2
  27. package/dist/client/assets/action-status-BwqYb9eF.js +1 -0
  28. package/dist/client/assets/action-status-BwqYb9eF.js.br +0 -0
  29. package/dist/client/assets/benchmark-panel-BulIdLtq.js +1 -0
  30. package/dist/client/assets/benchmark-panel-BulIdLtq.js.br +0 -0
  31. package/dist/client/assets/card-dom-DkZgkeG9.js +1 -0
  32. package/dist/client/assets/card-dom-DkZgkeG9.js.br +0 -0
  33. package/dist/client/assets/control-ws-CAcwW-r9.js +4 -0
  34. package/dist/client/assets/control-ws-CAcwW-r9.js.br +0 -0
  35. package/dist/client/assets/dialogs-CCP1ipXD.js +79 -0
  36. package/dist/client/assets/dialogs-CCP1ipXD.js.br +0 -0
  37. package/dist/client/assets/dom-helpers-xJduxDcc.js +1 -0
  38. package/dist/client/assets/dom-helpers-xJduxDcc.js.br +0 -0
  39. package/dist/client/assets/hooks-panel-BWDeSHtM.js +1 -0
  40. package/dist/client/assets/hooks-panel-BWDeSHtM.js.br +0 -0
  41. package/dist/client/assets/index-D6m--U7B.js +84 -0
  42. package/dist/client/assets/index-D6m--U7B.js.br +0 -0
  43. package/dist/client/assets/index-DF3BLGk9.css +2 -0
  44. package/dist/client/assets/index-DF3BLGk9.css.br +0 -0
  45. package/dist/client/assets/issues-panel-B7Y1Lpyx.js +1 -0
  46. package/dist/client/assets/issues-panel-B7Y1Lpyx.js.br +0 -0
  47. package/dist/client/assets/modal-mWl2H7A_.js +1 -0
  48. package/dist/client/assets/modal-mWl2H7A_.js.br +0 -0
  49. package/dist/client/assets/plan-face-DpzZfVeG.js +3 -0
  50. package/dist/client/assets/plan-face-DpzZfVeG.js.br +0 -0
  51. package/dist/client/assets/{poll-ago-Dj148faJ.js → poll-ago-Bc-8mMFj.js} +1 -1
  52. package/dist/client/assets/poll-ago-Bc-8mMFj.js.br +0 -0
  53. package/dist/client/assets/pr-scope-tabs-DftvVYU8.js +1 -0
  54. package/dist/client/assets/pr-scope-tabs-DftvVYU8.js.br +0 -0
  55. package/dist/client/assets/radar-panel-hxjF7m9Z.js +1 -0
  56. package/dist/client/assets/radar-panel-hxjF7m9Z.js.br +0 -0
  57. package/dist/client/assets/review-queue-panel-8bP8Q7RR.js +10 -0
  58. package/dist/client/assets/review-queue-panel-8bP8Q7RR.js.br +0 -0
  59. package/dist/client/assets/roving-keys-core-BDobx2It.js +1 -0
  60. package/dist/client/assets/settings-panel-B50lNcrt.js +4 -0
  61. package/dist/client/assets/settings-panel-B50lNcrt.js.br +0 -0
  62. package/dist/client/assets/trace-panel-Dy-fgi9c.js +2 -0
  63. package/dist/client/assets/trace-panel-Dy-fgi9c.js.br +0 -0
  64. package/dist/client/assets/ui-prefs-CNf6fId2.js +1 -0
  65. package/dist/client/assets/ui-prefs-CNf6fId2.js.br +0 -0
  66. package/dist/client/assets/usage-panel-D2JuiQ4G.js +1 -0
  67. package/dist/client/assets/usage-panel-D2JuiQ4G.js.br +0 -0
  68. package/dist/client/assets/visions-panel-CI6CRn42.js +1 -0
  69. package/dist/client/assets/visions-panel-CI6CRn42.js.br +0 -0
  70. package/dist/client/index.html +14 -8
  71. package/dist/client/index.html.br +0 -0
  72. package/dist/server/index.js +99 -1
  73. package/dist/session/guardrails-open-launcher.js +28 -16
  74. package/dist/session/visions-relay.js +1 -1
  75. package/package.json +1 -1
  76. package/dist/chunks/config-store-LYSRHNQs.js +0 -1
  77. package/dist/chunks/rtk-resolver-Dr4iJsiS.js +0 -1
  78. package/dist/client/assets/action-status-DXcC95xv.js +0 -1
  79. package/dist/client/assets/action-status-DXcC95xv.js.br +0 -0
  80. package/dist/client/assets/benchmark-panel-Cssmnd3z.js +0 -1
  81. package/dist/client/assets/benchmark-panel-Cssmnd3z.js.br +0 -0
  82. package/dist/client/assets/dom-helpers-CcEFPh-F.js +0 -4
  83. package/dist/client/assets/dom-helpers-CcEFPh-F.js.br +0 -0
  84. package/dist/client/assets/hooks-panel-Cli8EeBB.js +0 -1
  85. package/dist/client/assets/hooks-panel-Cli8EeBB.js.br +0 -0
  86. package/dist/client/assets/index-C3nOrTwM.css +0 -2
  87. package/dist/client/assets/index-C3nOrTwM.css.br +0 -0
  88. package/dist/client/assets/index-C8u3ZjM3.js +0 -173
  89. package/dist/client/assets/index-C8u3ZjM3.js.br +0 -0
  90. package/dist/client/assets/issues-panel-Bev1wadi.js +0 -1
  91. package/dist/client/assets/issues-panel-Bev1wadi.js.br +0 -0
  92. package/dist/client/assets/modal-CvDX5-_2.js +0 -1
  93. package/dist/client/assets/modal-CvDX5-_2.js.br +0 -0
  94. package/dist/client/assets/poll-ago-Dj148faJ.js.br +0 -0
  95. package/dist/client/assets/pr-queue-columns-Jleg5z3W.js +0 -1
  96. package/dist/client/assets/pr-queue-columns-Jleg5z3W.js.br +0 -0
  97. package/dist/client/assets/radar-panel-Dtp4ZzT3.js +0 -1
  98. package/dist/client/assets/radar-panel-Dtp4ZzT3.js.br +0 -0
  99. package/dist/client/assets/review-queue-panel-BQvU_-xl.js +0 -2
  100. package/dist/client/assets/review-queue-panel-BQvU_-xl.js.br +0 -0
  101. package/dist/client/assets/settings-panel-DegKCsoZ.js +0 -3
  102. package/dist/client/assets/settings-panel-DegKCsoZ.js.br +0 -0
  103. package/dist/client/assets/trace-panel-DFqImX92.js +0 -1
  104. package/dist/client/assets/trace-panel-DFqImX92.js.br +0 -0
  105. package/dist/client/assets/ui-prefs-CavQQH-s.js +0 -1
  106. package/dist/client/assets/ui-prefs-CavQQH-s.js.br +0 -0
  107. package/dist/client/assets/usage-panel-CEJqXYIA.js +0 -1
  108. package/dist/client/assets/usage-panel-CEJqXYIA.js.br +0 -0
  109. package/dist/client/assets/visions-panel-Dm3iKlhv.js +0 -1
  110. package/dist/client/assets/visions-panel-Dm3iKlhv.js.br +0 -0
@@ -1,4 +1,4 @@
1
- import { $ as MyPrMergeWhenReadyRequest, B as UnseenOutcome, Dt as TeamReviewActionResult, Et as TeamReviewActionRequest, F as SessionState, Gt as repoParts, H as MyPr, Ht as GH_SEGMENT, Jt as GithubPrsFreshness, K as MyPrKeepMergeableRequest, Kt as GithubPollingRefreshRequest, Lt as hasRequiredActionHead, N as SessionDoc, O as SESSION_DOC_PATH_MAX_CHARS, P as SessionSnapshot, S as ConversationApprovalDecision, V as LinkedPr, Wt as REPO_SLUG_RE, X as MyPrMergeRequest, Yt as githubPollingShape, Z as MyPrMergeResult, b as ConversationAnswers, ct as pullRequestKeyFormat, et as MyPrMergeWhenReadyResult, jt as TeamReviewStatus, lt as repositoryName, mt as GithubReviewDecision, ot as MyPrsStatus, q as MyPrKeepMergeableResult, qt as GithubPollingRefreshResult, st as SessionPrLinks, tt as MyPrSearchNode, ut as CommitSha, w as PendingWakeup, x as ConversationApproval, y as CoherenceHooksState, yt as ReviewChecksState, z as TaskTitle } from "./session-CUc6d7aS.js";
1
+ import { B as TaskTitle, D as SESSION_DOC_PATH_MAX_CHARS, Dt as TeamReviewActionRequest, F as SessionState, Gt as REPO_SLUG_RE, H as LinkedPr, I as ShownFile, J as MyPrKeepMergeableResult, Jt as GithubPollingRefreshResult, Kt as repoParts, Mt as TeamReviewStatus, N as SessionDoc, Ot as TeamReviewActionResult, P as SessionSnapshot, Q as MyPrMergeResult, Rt as hasRequiredActionHead, S as ConversationApprovalDecision, U as MyPr, Ut as GH_SEGMENT, V as UnseenOutcome, Xt as githubPollingShape, Yt as GithubPrsFreshness, Z as MyPrMergeRequest, b as ConversationAnswers, bt as ReviewChecksState, ct as SessionPrLinks, dt as CommitSha, et as MyPrMergeWhenReadyRequest, ht as GithubReviewDecision, lt as pullRequestKeyFormat, nt as MyPrSearchNode, q as MyPrKeepMergeableRequest, qt as GithubPollingRefreshRequest, st as MyPrsStatus, tt as MyPrMergeWhenReadyResult, ut as repositoryName, x as ConversationApproval, y as CoherenceHooksState } from "./session-BwlLY_mv.js";
2
2
  import { n as isRecord } from "./coerce-NSst8oRP.js";
3
3
  import path from "node:path";
4
4
  import { z } from "zod";
@@ -605,7 +605,9 @@ var SessionSetup = z.object({
605
605
  });
606
606
  //#endregion
607
607
  //#region shared/contracts/update-journal.ts
608
- var UpdateChannel = z.enum(["release", "main"]);
608
+ var UPDATE_CHANNELS = Object.freeze(["release", "experimental"]);
609
+ var RETIRED_MAIN_CHANNEL = "main";
610
+ var UpdateChannel = z.preprocess((channel) => channel === RETIRED_MAIN_CHANNEL ? "experimental" : channel, z.enum(UPDATE_CHANNELS, { error: `updateChannel must be one of ${UPDATE_CHANNELS.join(", ")}` }));
609
611
  var UpdateRunState = z.enum([
610
612
  "idle",
611
613
  "running",
@@ -1396,7 +1398,6 @@ var updateStatusShape = {
1396
1398
  isTreeClean: z.boolean().nullable(),
1397
1399
  lastCheckAt: timestamp,
1398
1400
  channel: UpdateChannel,
1399
- behindCount: z.number().int().nonnegative().nullable(),
1400
1401
  reason: nullableString,
1401
1402
  deprecation: nullableString,
1402
1403
  journalSummary: UpdateJournalSummary.nullable(),
@@ -1419,7 +1420,6 @@ var DASHBOARD_TELEMETRY_EVENTS = Object.freeze([
1419
1420
  ]);
1420
1421
  var DASHBOARD_VIEWS = Object.freeze([
1421
1422
  "focus",
1422
- "zen",
1423
1423
  "prs",
1424
1424
  "issues",
1425
1425
  "usage",
@@ -1467,6 +1467,7 @@ var OPERATOR_ACTIONS_BY_SURFACE = Object.freeze({
1467
1467
  "approve",
1468
1468
  "approve-only",
1469
1469
  "comment",
1470
+ "request-changes",
1470
1471
  "discard",
1471
1472
  "requeue",
1472
1473
  "resolve-thread",
@@ -1530,6 +1531,10 @@ var clientVariants = [
1530
1531
  environment: z.string().optional(),
1531
1532
  requestId
1532
1533
  }),
1534
+ loose("quick-session", {
1535
+ id: sessionId,
1536
+ requestId
1537
+ }),
1533
1538
  loose("remove-session", {
1534
1539
  id: sessionId,
1535
1540
  force: z.unknown().optional(),
@@ -1759,6 +1764,7 @@ Object.freeze([
1759
1764
  "state-change",
1760
1765
  "session-added",
1761
1766
  "session-removed",
1767
+ "session-close-confirm",
1762
1768
  "session-renamed",
1763
1769
  "session-title",
1764
1770
  "session-prs",
@@ -1766,7 +1772,6 @@ Object.freeze([
1766
1772
  "session-git",
1767
1773
  "session-coherence-hooks",
1768
1774
  "session-agents",
1769
- "session-wakeup",
1770
1775
  "session-prompt",
1771
1776
  "session-conversation",
1772
1777
  "session-merge-status",
@@ -1778,7 +1783,6 @@ Object.freeze([
1778
1783
  "change-map",
1779
1784
  "branch-sync-status",
1780
1785
  "session-changed",
1781
- "post-turn-result",
1782
1786
  "debug-state-response",
1783
1787
  "session-trace-response",
1784
1788
  "session-trace-changed",
@@ -1879,7 +1883,8 @@ var serverVariants = [
1879
1883
  requestId,
1880
1884
  ok: z.boolean(),
1881
1885
  error: optionalError,
1882
- reason: z.enum(["not-git"]).optional()
1886
+ reason: z.enum(["not-git"]).optional(),
1887
+ sessionId: z.string().optional()
1883
1888
  }),
1884
1889
  loose("remove-session-result", {
1885
1890
  requestId,
@@ -1937,6 +1942,10 @@ var serverVariants = [
1937
1942
  id: sessionId,
1938
1943
  session: z.string()
1939
1944
  }),
1945
+ loose("session-close-confirm", {
1946
+ id: sessionId,
1947
+ mergeStatus: z.string()
1948
+ }),
1940
1949
  loose("session-renamed", {
1941
1950
  id: sessionId,
1942
1951
  oldName: z.string(),
@@ -1970,13 +1979,7 @@ var serverVariants = [
1970
1979
  unseenOutcome: UnseenOutcome.nullable(),
1971
1980
  timestamp
1972
1981
  }),
1973
- loose("session-wakeup", {
1974
- id: sessionId,
1975
- pendingWakeup: PendingWakeup.nullable(),
1976
- timestamp
1977
- }),
1978
1982
  loose("session-prompt", {
1979
- isCompacting: z.boolean().optional(),
1980
1983
  id: sessionId,
1981
1984
  pendingPromptKind: nullableString,
1982
1985
  timestamp
@@ -2047,18 +2050,6 @@ var serverVariants = [
2047
2050
  error: optionalError
2048
2051
  }),
2049
2052
  loose("session-changed", { id: sessionId }),
2050
- loose("post-turn-result", {
2051
- id: sessionId,
2052
- mode: z.string(),
2053
- skipped: nullableString,
2054
- filesFixed: z.number().int().nonnegative(),
2055
- findings: z.array(openObject({
2056
- file: z.string(),
2057
- rule: z.string(),
2058
- count: z.number().int().nonnegative()
2059
- })),
2060
- timestamp
2061
- }),
2062
2053
  loose("debug-state-response", {
2063
2054
  id: sessionId,
2064
2055
  payload: opaqueObject
@@ -2081,6 +2072,11 @@ var serverVariants = [
2081
2072
  docs: z.array(SessionDoc)
2082
2073
  }),
2083
2074
  loose("session-docs-snapshot", { sessions: z.record(z.string(), z.array(SessionDoc)) }),
2075
+ loose("session-shown", {
2076
+ id: sessionId,
2077
+ files: z.array(ShownFile)
2078
+ }),
2079
+ loose("session-shown-snapshot", { sessions: z.record(z.string(), z.array(ShownFile)) }),
2084
2080
  loose("session-doc-response", {
2085
2081
  requestId,
2086
2082
  id: sessionId,
@@ -2528,8 +2524,6 @@ var optionalWholeNumber = (field, range) => optionalNumber(field, range).unwrap(
2528
2524
  var optionalInteger = (field, range) => z.number({ error: `${field} must be an integer between ${range.min} and ${range.max}` }).int({ error: `${field} must be an integer between ${range.min} and ${range.max}` }).min(range.min, { error: `${field} must be an integer between ${range.min} and ${range.max}` }).max(range.max, { error: `${field} must be an integer between ${range.min} and ${range.max}` }).optional();
2529
2525
  var optionalObject = (field, shape) => z.object(shape, { error: `${field} must be an object` }).nullable().optional();
2530
2526
  var optionalLooseObject = (field) => z.object({}, { error: `${field} must be an object` }).passthrough().nullable().optional();
2531
- var UPDATE_CHANNELS = Object.freeze(["release", "main"]);
2532
- var POST_TURN_CHECK_MODES = Object.freeze(["report", "fix"]);
2533
2527
  var TaskTitleSettings = z.object({ refiner: z.object({
2534
2528
  enabled: optionalBoolean("taskTitle.refiner.enabled"),
2535
2529
  model: optionalString("taskTitle.refiner.model", true),
@@ -2554,7 +2548,6 @@ var BranchGcControlSettings = BranchGcFileSettings.omit({
2554
2548
  }).nullable().optional();
2555
2549
  Object.freeze(["enabled", "deleteUnmerged"]);
2556
2550
  Object.freeze(["staleDays", "intervalMs"]);
2557
- var PostTurnChecksSettings = optionalObject("postTurnChecks", { mode: z.enum(POST_TURN_CHECK_MODES, { error: "postTurnChecks.mode must be one of report, fix" }).optional() });
2558
2551
  var VisionsSettings = optionalObject("visions", {
2559
2552
  enabled: optionalBoolean("visions.enabled"),
2560
2553
  autoFix: optionalBoolean("visions.autoFix"),
@@ -2584,6 +2577,7 @@ var TeamReviewSettings = optionalObject("teamReview", {
2584
2577
  skipIdleAfterDays: optionalNumber("teamReview.skipIdleAfterDays")
2585
2578
  });
2586
2579
  var BenchmarksSettings = optionalObject("benchmarks", { enabled: optionalBoolean("benchmarks.enabled") });
2580
+ var IssuesSettings = optionalObject("issues", { enabled: optionalBoolean("issues.enabled") });
2587
2581
  var CoherenceSettings = optionalObject("coherence", { enabled: optionalBoolean("coherence.enabled") });
2588
2582
  var posthogNumberRanges = {
2589
2583
  intervalMinutes: POSTHOG_INTERVAL_RANGE,
@@ -2660,7 +2654,6 @@ var createBrowserConfigShape = (isAbsolutePath) => ({
2660
2654
  debugMode: optionalBoolean("debugMode"),
2661
2655
  conversationView: optionalBoolean("conversationView"),
2662
2656
  streamerMode: optionalBoolean("streamerMode"),
2663
- zenView: optionalBoolean("zenView"),
2664
2657
  viewTabOrder: z.array(z.string({ error: "viewTabOrder must be an array of view ids" }), { error: "viewTabOrder must be an array of view ids" }).optional(),
2665
2658
  remoteSessions: optionalBoolean("remoteSessions"),
2666
2659
  detectBackgroundAgents: optionalBoolean("detectBackgroundAgents"),
@@ -2669,7 +2662,7 @@ var createBrowserConfigShape = (isAbsolutePath) => ({
2669
2662
  saneYolo: optionalBoolean("saneYolo"),
2670
2663
  skipPermissionsByDefault: optionalBoolean("skipPermissionsByDefault"),
2671
2664
  checkForUpdates: optionalBoolean("checkForUpdates"),
2672
- updateChannel: z.enum(UPDATE_CHANNELS, { error: "updateChannel must be one of release, main" }).optional(),
2665
+ updateChannel: UpdateChannel.optional(),
2673
2666
  autoResume: optionalBoolean("autoResume"),
2674
2667
  telegramNotifications: optionalBoolean("telegramNotifications"),
2675
2668
  integrationBranch: optionalString("integrationBranch").nullable(),
@@ -2678,12 +2671,12 @@ var createBrowserConfigShape = (isAbsolutePath) => ({
2678
2671
  repoRoots: z.array(z.string()).optional(),
2679
2672
  taskTitle: TaskTitleSettings,
2680
2673
  branchGc: BranchGcSettings,
2681
- postTurnChecks: PostTurnChecksSettings,
2682
2674
  visions: VisionsSettings,
2683
2675
  github: GithubSettings,
2684
2676
  teamReview: TeamReviewSettings,
2685
2677
  benchmarks: BenchmarksSettings,
2686
2678
  coherence: CoherenceSettings,
2679
+ issues: IssuesSettings,
2687
2680
  posthog: PosthogSettings,
2688
2681
  usage: createUsageSettings(isAbsolutePath),
2689
2682
  telegram: TelegramSettings,
@@ -2850,6 +2843,7 @@ var FILE_CONFIG_SHAPE = {
2850
2843
  teamReview: optionalLooseObject("teamReview"),
2851
2844
  benchmarks: optionalLooseObject("benchmarks"),
2852
2845
  coherence: optionalLooseObject("coherence"),
2846
+ issues: optionalLooseObject("issues"),
2853
2847
  posthog: optionalLooseObject("posthog"),
2854
2848
  usage: optionalLooseObject("usage"),
2855
2849
  telegram: optionalLooseObject("telegram"),
@@ -2867,7 +2861,6 @@ var Config = z.object({
2867
2861
  worktreeAutoRebase: optionalBoolean("worktreeAutoRebase"),
2868
2862
  worktreeSyncOnStart: optionalBoolean("worktreeSyncOnStart"),
2869
2863
  worktreeRerere: optionalBoolean("worktreeRerere"),
2870
- postTurnChecks: z.record(z.string(), z.unknown()).optional(),
2871
2864
  hooks: z.unknown().optional(),
2872
2865
  remote: z.object({
2873
2866
  enabled: z.boolean().optional(),
@@ -2914,12 +2907,12 @@ var Config = z.object({
2914
2907
  var CONFIG_BLOCK_KEYS = Object.freeze([
2915
2908
  "taskTitle",
2916
2909
  "branchGc",
2917
- "postTurnChecks",
2918
2910
  "visions",
2919
2911
  "github",
2920
2912
  "teamReview",
2921
2913
  "benchmarks",
2922
2914
  "coherence",
2915
+ "issues",
2923
2916
  "posthog",
2924
2917
  "usage",
2925
2918
  "telegram",
@@ -2952,4 +2945,4 @@ function configIssueMessage(error) {
2952
2945
  return error.issues[0]?.message || "settings are invalid";
2953
2946
  }
2954
2947
  //#endregion
2955
- export { MEMORY_RESERVE_MB_RANGE as $, BenchmarkId as A, parseExitPlanModeHookPayload as At, GithubPrKey as B, ONBOARDING_STEPS as C, PLAN_BODY_CAP_BYTES as Ct, pullRequestKeyFromReference as D, PLAN_TOOL_NAME as Dt, OPERATOR_SURFACES as E, PLAN_RESULT_HOOK_EVENT as Et, CommitComparison as F, IssueUpdate as Ft, WorkflowLabelName as G, GithubPrsFrame as H, MergedPrListing as I, IssuesSearchResponse as It, FLYING_ANIMALS_DEFAULTS as J, WorkflowsSettings as K, MinedPrReviewData as L, IssuesState as Lt, BenchmarkRun as M, GithubIssuePullRequestsRepository as Mt, BenchmarkStatus as N, GithubIssueResponse as Nt, BenchmarkActionRequest as O, PlanDecision as Ot, BenchmarkSuite as P, IssueKey as Pt, KEEP_MERGEABLE_TIMEOUT_MINUTES_RANGE as Q, PrCheckoutCaseInput as R, IssuesStatus as Rt, InstallFlavor as S, changeMapFactId as St, OPERATOR_ACTIONS_BY_SURFACE as T, PLAN_HOOK_OUTPUT_MAX_CHARS as Tt, comparablePrKey as U, GithubPrLightSearchNode as V, WorkflowCommentBody as W, FLYING_ANIMALS_GAP_RANGE as X, FLYING_ANIMALS_DURATION_RANGE as Y, FLYING_ANIMALS_SCALE_RANGE as Z, CHANGES_WATCH_LEASE_MS as _, MAX_RAW_LINE_CHARS as _t, ConfigUpdate as a, POSTHOG_TRAFFIC_MIN_USERS_RANGE as at, ClientMessage as b, CoherenceJournalOutput as bt, TASK_TITLE_SOURCE_PRIORITY as c, TASK_TITLE_TIMEOUT_RANGE as ct, POST_TURN_CHECK_MODES as d, USAGE_RETAIN_DAYS_RANGE as dt, NON_NEGATIVE_NUMBER_RANGE as et, UPDATE_CHANNELS as f, USAGE_SCAN_INTERVAL_RANGE as ft, CHANGES_POLL_INTERVAL_MS as g, SessionSetup as gt, normalizeLegacyConfigNumbers as h, UpdateJournal as ht, Config as i, POSTHOG_TRAFFIC_BASELINE_RANGE as it, BenchmarkJudgement as j, planTitle as jt, BenchmarkCase as k, PlanRevision as kt, configIssueMessage as l, USAGE_BUDGET_RANGE as lt, USAGE_VENDOR_KEYS as m, WORKFLOWS_MAX_CONCURRENT_SESSIONS_RANGE as mt, BUILTIN_AGENT_IDS as n, POSITIVE_NUMBER_RANGE as nt, PersistedTaskTitle as o, POSTHOG_TRAFFIC_MULTIPLIER_RANGE as ot, USAGE_COST_MODES as p, WORKFLOWS_MAX_ACTIONS_PER_POLL_RANGE as pt, WorkflowsState as q, BrowserConfig as r, POSTHOG_FIX_TIMEOUT_RANGE as rt, RUNTIME_CONFIG_SCALAR_KEYS as s, REPLAY_BUFFER_KB_RANGE as st, AGENT_ID_SHAPE_MESSAGE as t, PORT_RANGE as tt, BranchGcFileSettings as u, USAGE_INTEGER_RANGES as ut, CLIENT_LOG_TEXT_MAX_CHARS as v, TraceCheckpoint as vt, ONBOARDING_STEP_STATES as w, PLAN_HOOK_EVENT as wt, DASHBOARD_VIEWS as x, ChangeMap as xt, CONTROL_FRAME_MAX_BYTES as y, TraceRecord as yt, GithubPrDetailNode as z, issuePullRequestStateFromGithub as zt };
2948
+ export { PORT_RANGE as $, BenchmarkRun as A, parseExitPlanModeHookPayload as At, GithubPrsFrame as B, OPERATOR_ACTIONS_BY_SURFACE as C, PLAN_BODY_CAP_BYTES as Ct, BenchmarkCase as D, PLAN_TOOL_NAME as Dt, BenchmarkActionRequest as E, PLAN_RESULT_HOOK_EVENT as Et, MinedPrReviewData as F, IssueUpdate as Ft, WorkflowsState as G, WorkflowCommentBody as H, PrCheckoutCaseInput as I, IssuesSearchResponse as It, FLYING_ANIMALS_GAP_RANGE as J, FLYING_ANIMALS_DEFAULTS as K, GithubPrDetailNode as L, IssuesState as Lt, BenchmarkSuite as M, GithubIssuePullRequestsRepository as Mt, CommitComparison as N, GithubIssueResponse as Nt, BenchmarkId as O, PlanDecision as Ot, MergedPrListing as P, IssueKey as Pt, NON_NEGATIVE_NUMBER_RANGE as Q, GithubPrKey as R, IssuesStatus as Rt, ONBOARDING_STEP_STATES as S, changeMapFactId as St, pullRequestKeyFromReference as T, PLAN_HOOK_OUTPUT_MAX_CHARS as Tt, WorkflowLabelName as U, comparablePrKey as V, WorkflowsSettings as W, KEEP_MERGEABLE_TIMEOUT_MINUTES_RANGE as X, FLYING_ANIMALS_SCALE_RANGE as Y, MEMORY_RESERVE_MB_RANGE as Z, CONTROL_FRAME_MAX_BYTES as _, MAX_RAW_LINE_CHARS as _t, ConfigUpdate as a, REPLAY_BUFFER_KB_RANGE as at, InstallFlavor as b, CoherenceJournalOutput as bt, TASK_TITLE_SOURCE_PRIORITY as c, USAGE_INTEGER_RANGES as ct, USAGE_COST_MODES as d, WORKFLOWS_MAX_ACTIONS_PER_POLL_RANGE as dt, POSITIVE_NUMBER_RANGE as et, USAGE_VENDOR_KEYS as f, WORKFLOWS_MAX_CONCURRENT_SESSIONS_RANGE as ft, CLIENT_LOG_TEXT_MAX_CHARS as g, SessionSetup as gt, CHANGES_WATCH_LEASE_MS as h, UpdateJournal as ht, Config as i, POSTHOG_TRAFFIC_MULTIPLIER_RANGE as it, BenchmarkStatus as j, planTitle as jt, BenchmarkJudgement as k, PlanRevision as kt, configIssueMessage as l, USAGE_RETAIN_DAYS_RANGE as lt, CHANGES_POLL_INTERVAL_MS as m, UpdateChannel as mt, BUILTIN_AGENT_IDS as n, POSTHOG_TRAFFIC_BASELINE_RANGE as nt, PersistedTaskTitle as o, TASK_TITLE_TIMEOUT_RANGE as ot, normalizeLegacyConfigNumbers as p, UPDATE_CHANNELS as pt, FLYING_ANIMALS_DURATION_RANGE as q, BrowserConfig as r, POSTHOG_TRAFFIC_MIN_USERS_RANGE as rt, RUNTIME_CONFIG_SCALAR_KEYS as s, USAGE_BUDGET_RANGE as st, AGENT_ID_SHAPE_MESSAGE as t, POSTHOG_FIX_TIMEOUT_RANGE as tt, BranchGcFileSettings as u, USAGE_SCAN_INTERVAL_RANGE as ut, ClientMessage as v, TraceCheckpoint as vt, OPERATOR_SURFACES as w, PLAN_HOOK_EVENT as wt, ONBOARDING_STEPS as x, ChangeMap as xt, DASHBOARD_VIEWS as y, TraceRecord as yt, GithubPrLightSearchNode as z, issuePullRequestStateFromGithub as zt };
@@ -4,6 +4,10 @@ function glimmervoidHomeDir(homeDirectory, env) {
4
4
  if (env.GLIMMERVOID_HOME) return path.resolve(env.GLIMMERVOID_HOME);
5
5
  return path.join(homeDirectory, ".glimmervoid");
6
6
  }
7
+ function isOperatorHomeUnderTest(homeDirectory, env) {
8
+ if (!env.NODE_TEST_CONTEXT) return false;
9
+ return glimmervoidHomeDir(homeDirectory, env) === glimmervoidHomeDir(homeDirectory, {});
10
+ }
7
11
  function decideConfigPath({ env = {}, homeDir }, exists) {
8
12
  const homePath = path.join(homeDir, "config.json");
9
13
  if (env.GLIMMERVOID_CONFIG) {
@@ -35,4 +39,4 @@ function decideConfigPath({ env = {}, homeDir }, exists) {
35
39
  };
36
40
  }
37
41
  //#endregion
38
- export { glimmervoidHomeDir as n, decideConfigPath as t };
42
+ export { glimmervoidHomeDir as n, isOperatorHomeUnderTest as r, decideConfigPath as t };
@@ -0,0 +1 @@
1
+ export { c as loadConfigFile } from "./config-store-BGTg8oKO.js";
@@ -1,10 +1,11 @@
1
1
  import { n as errorLabel, r as errorMessage } from "./text-DoirglWV.js";
2
2
  import { n as equalsIgnoringCaseOnWindows } from "./paths-Bu4eH1Yd.js";
3
- import { $ as MEMORY_RESERVE_MB_RANGE, J as FLYING_ANIMALS_DEFAULTS, Q as KEEP_MERGEABLE_TIMEOUT_MINUTES_RANGE, X as FLYING_ANIMALS_GAP_RANGE, Y as FLYING_ANIMALS_DURATION_RANGE, Z as FLYING_ANIMALS_SCALE_RANGE, at as POSTHOG_TRAFFIC_MIN_USERS_RANGE, ct as TASK_TITLE_TIMEOUT_RANGE, d as POST_TURN_CHECK_MODES, dt as USAGE_RETAIN_DAYS_RANGE, et as NON_NEGATIVE_NUMBER_RANGE, f as UPDATE_CHANNELS, ft as USAGE_SCAN_INTERVAL_RANGE, h as normalizeLegacyConfigNumbers, i as Config, it as POSTHOG_TRAFFIC_BASELINE_RANGE, l as configIssueMessage, lt as USAGE_BUDGET_RANGE, mt as WORKFLOWS_MAX_CONCURRENT_SESSIONS_RANGE, n as BUILTIN_AGENT_IDS, nt as POSITIVE_NUMBER_RANGE, ot as POSTHOG_TRAFFIC_MULTIPLIER_RANGE, p as USAGE_COST_MODES, pt as WORKFLOWS_MAX_ACTIONS_PER_POLL_RANGE, rt as POSTHOG_FIX_TIMEOUT_RANGE, s as RUNTIME_CONFIG_SCALAR_KEYS, st as REPLAY_BUFFER_KB_RANGE, t as AGENT_ID_SHAPE_MESSAGE, tt as PORT_RANGE, u as BranchGcFileSettings, ut as USAGE_INTEGER_RANGES } from "./config-DlKkg6IX.js";
3
+ import { o as packageRoot } from "./runtime-paths-ghcH9CeW.js";
4
+ import { n as glimmervoidHomeDir$1, t as decideConfigPath } from "./config-path-core-DUWk0Lui.js";
5
+ import { $ as PORT_RANGE, J as FLYING_ANIMALS_GAP_RANGE, K as FLYING_ANIMALS_DEFAULTS, Q as NON_NEGATIVE_NUMBER_RANGE, X as KEEP_MERGEABLE_TIMEOUT_MINUTES_RANGE, Y as FLYING_ANIMALS_SCALE_RANGE, Z as MEMORY_RESERVE_MB_RANGE, at as REPLAY_BUFFER_KB_RANGE, ct as USAGE_INTEGER_RANGES, d as USAGE_COST_MODES, dt as WORKFLOWS_MAX_ACTIONS_PER_POLL_RANGE, et as POSITIVE_NUMBER_RANGE, ft as WORKFLOWS_MAX_CONCURRENT_SESSIONS_RANGE, i as Config, it as POSTHOG_TRAFFIC_MULTIPLIER_RANGE, l as configIssueMessage, lt as USAGE_RETAIN_DAYS_RANGE, n as BUILTIN_AGENT_IDS, nt as POSTHOG_TRAFFIC_BASELINE_RANGE, ot as TASK_TITLE_TIMEOUT_RANGE, p as normalizeLegacyConfigNumbers, pt as UPDATE_CHANNELS, q as FLYING_ANIMALS_DURATION_RANGE, rt as POSTHOG_TRAFFIC_MIN_USERS_RANGE, s as RUNTIME_CONFIG_SCALAR_KEYS, st as USAGE_BUDGET_RANGE, t as AGENT_ID_SHAPE_MESSAGE, tt as POSTHOG_FIX_TIMEOUT_RANGE, u as BranchGcFileSettings, ut as USAGE_SCAN_INTERVAL_RANGE } from "./config-BqJTnPae.js";
4
6
  import { n as isRecord } from "./coerce-NSst8oRP.js";
5
- import { n as glimmervoidHomeDir$1, t as decideConfigPath } from "./config-path-core-DFt-TemS.js";
6
- import { d as writeJsonAtomicSync, f as writeTextAtomic, p as writeTextAtomicSync } from "./json-file-DFCTvPjj.js";
7
- import { s as FeatureFlagsResponse, u as TELEMETRY_KILL_SWITCH_FLAG } from "./contracts-lxJ0sQEl.js";
7
+ import { d as writeJsonAtomicSync, f as writeTextAtomic, p as writeTextAtomicSync } from "./json-file-BjFK_eSH.js";
8
+ import { f as TELEMETRY_KILL_SWITCH_FLAG, l as FeatureFlagsResponse, n as isExperimentalBuild } from "./build-channel-qgKwNssc.js";
8
9
  import fs from "node:fs";
9
10
  import path from "node:path";
10
11
  import os from "node:os";
@@ -1058,22 +1059,6 @@ var SECTIONS = Object.freeze([
1058
1059
  defaultValue: false,
1059
1060
  ...MACHINE_NOW
1060
1061
  },
1061
- {
1062
- id: "zen-view",
1063
- path: "zenView",
1064
- title: "Zen view (experimental)",
1065
- description: "Add a Zen tab that shows no terminal until a session needs you, then shows only that session and what it needs.",
1066
- control: "toggle",
1067
- keywords: [
1068
- "experimental",
1069
- "calm",
1070
- "focus",
1071
- "attention",
1072
- "needs you"
1073
- ],
1074
- defaultValue: false,
1075
- ...MACHINE_NOW
1076
- },
1077
1062
  {
1078
1063
  id: "tab-order",
1079
1064
  path: "viewTabOrder",
@@ -1231,17 +1216,6 @@ var SECTIONS = Object.freeze([
1231
1216
  defaultValue: false,
1232
1217
  ...MACHINE_NEW_SESSIONS
1233
1218
  },
1234
- {
1235
- id: "post-turn-checks-mode",
1236
- path: "postTurnChecks.mode",
1237
- title: "Post-turn checks mode",
1238
- description: "Default mode for post-turn checks. Project and individual rule modes override it, so Report can still allow file fixes.",
1239
- control: "select",
1240
- options: capitalizedOptions(POST_TURN_CHECK_MODES),
1241
- keywords: ["quality", "fixes"],
1242
- defaultValue: "report",
1243
- ...MACHINE_NOW
1244
- },
1245
1219
  {
1246
1220
  id: "branch-gc-delete-unmerged",
1247
1221
  path: "branchGc.deleteUnmerged",
@@ -1350,10 +1324,16 @@ var SECTIONS = Object.freeze([
1350
1324
  id: "update-channel",
1351
1325
  path: "updateChannel",
1352
1326
  title: "Channel",
1353
- description: "Track tagged releases or the upstream of the checked-out branch.",
1327
+ description: "Track stable releases, or Experimental builds published from every change to main before it reaches a release.",
1354
1328
  control: "select",
1355
1329
  options: capitalizedOptions(UPDATE_CHANNELS),
1356
- keywords: ["release", "branch"],
1330
+ keywords: [
1331
+ "release",
1332
+ "prerelease",
1333
+ "next",
1334
+ "beta",
1335
+ "early"
1336
+ ],
1357
1337
  defaultValue: "release",
1358
1338
  ...MACHINE_NOW
1359
1339
  },
@@ -1655,7 +1635,7 @@ var SECTIONS = Object.freeze([
1655
1635
  description: "Poll open pull requests from the team and draft a review of each one. Nothing is posted until you choose Approve or Comment.",
1656
1636
  control: "toggle",
1657
1637
  keywords: ["pull requests", "github"],
1658
- defaultValue: false,
1638
+ defaultValue: true,
1659
1639
  ...MACHINE_NOW
1660
1640
  },
1661
1641
  {
@@ -1868,6 +1848,27 @@ var SECTIONS = Object.freeze([
1868
1848
  ...MACHINE_NOW
1869
1849
  }]
1870
1850
  },
1851
+ {
1852
+ id: "lanes-issues",
1853
+ level: "lanes",
1854
+ title: "Issues (experimental)",
1855
+ description: "GitHub issues from your projects and teams in their own dashboard tab.",
1856
+ settings: [{
1857
+ id: "issues-enabled",
1858
+ path: "issues.enabled",
1859
+ title: "Show the Issues tab",
1860
+ description: "Poll GitHub issues for your projects and teams and list them in an Issues tab. Off stops the polling and hides the tab.",
1861
+ control: "toggle",
1862
+ keywords: [
1863
+ "experimental",
1864
+ "issues",
1865
+ "github",
1866
+ "tab"
1867
+ ],
1868
+ defaultValue: false,
1869
+ ...MACHINE_NOW
1870
+ }]
1871
+ },
1871
1872
  {
1872
1873
  id: "machine-privacy",
1873
1874
  level: "machine",
@@ -1893,8 +1894,8 @@ var SECTIONS = Object.freeze([
1893
1894
  {
1894
1895
  id: "browser-shortcuts",
1895
1896
  level: "browser",
1896
- title: "Shortcuts and about",
1897
- description: "Keyboard shortcuts, their reference and build information.",
1897
+ title: "Shortcuts",
1898
+ description: "Keyboard shortcuts and their reference.",
1898
1899
  legacyIds: ["shortcuts"],
1899
1900
  settings: [{
1900
1901
  id: "next-attention-key",
@@ -2170,28 +2171,6 @@ var FILE_ONLY_SETTINGS = Object.freeze([
2170
2171
  fileOnlyReason: TUNING_KNOB,
2171
2172
  ...FILE_ONLY
2172
2173
  },
2173
- {
2174
- id: "file-post-turn-checks",
2175
- path: "postTurnChecks",
2176
- title: "Post-turn checks",
2177
- group: "machine-detection-sessions",
2178
- description: "Deterministic checks run after eligible turns. The global mode is a default; project and individual rule modes can select fixes even when the global mode is report.",
2179
- control: "json",
2180
- keywords: ["quality", "fixes"],
2181
- defaultValue: {
2182
- enabled: true,
2183
- mode: "report",
2184
- rules: {
2185
- trailingWs: true,
2186
- finalNewline: true,
2187
- bom: true,
2188
- slop: false
2189
- }
2190
- },
2191
- takesEffect: "now",
2192
- fileOnlyReason: STRUCTURED_VALUE,
2193
- ...FILE_ONLY
2194
- },
2195
2174
  {
2196
2175
  id: "file-branch-gc-enabled",
2197
2176
  path: "branchGc.enabled",
@@ -2958,6 +2937,10 @@ var SETTINGS_REGISTRY = Object.freeze({
2958
2937
  sections: SECTIONS,
2959
2938
  fileOnly: FILE_ONLY_SETTINGS
2960
2939
  });
2940
+ var EXPERIMENTAL_KEYWORD = "experimental";
2941
+ function isExperimentalSetting(setting) {
2942
+ return setting.keywords.includes(EXPERIMENTAL_KEYWORD);
2943
+ }
2961
2944
  Object.freeze(Object.fromEntries(SECTIONS.flatMap((section) => (section.legacyIds ?? []).map((legacyId) => [legacyId, section.id]))));
2962
2945
  Object.freeze(SECTIONS.reduce((moved, section) => {
2963
2946
  for (const setting of section.settings) for (const legacy of setting.legacyIds ?? []) moved[legacy.sectionId] = {
@@ -3429,6 +3412,28 @@ function findEscapingArchiveMember(listingText) {
3429
3412
  return null;
3430
3413
  }
3431
3414
  //#endregion
3415
+ //#region server/core/experimental-gate-core.ts
3416
+ var EXPERIMENTAL_MACHINE_SETTINGS = settingsOf(SETTINGS_REGISTRY.sections).filter((setting) => setting.scope === "machine" && isExperimentalSetting(setting));
3417
+ function replaceAtPath(target, [key, ...nestedKeys], value) {
3418
+ if (nestedKeys.length === 0) {
3419
+ Reflect.set(target, key, value);
3420
+ return;
3421
+ }
3422
+ const child = Reflect.get(target, key);
3423
+ const copiedChild = isRecord(child) ? { ...child } : {};
3424
+ Reflect.set(target, key, copiedChild);
3425
+ replaceAtPath(copiedChild, nestedKeys, value);
3426
+ }
3427
+ function withExperimentalFeaturesGated(config, isExperimentalBuild) {
3428
+ if (isExperimentalBuild) return config;
3429
+ const gated = { ...config };
3430
+ for (const setting of EXPERIMENTAL_MACHINE_SETTINGS) replaceAtPath(gated, setting.path.split("."), setting.defaultValue);
3431
+ return gated;
3432
+ }
3433
+ function isSettingAvailable(setting, isExperimentalBuild) {
3434
+ return isExperimentalBuild || !isExperimentalSetting(setting);
3435
+ }
3436
+ //#endregion
3432
3437
  //#region server/config-store.ts
3433
3438
  var DEFAULT_CONFIG = {
3434
3439
  port: 3e3,
@@ -3438,7 +3443,6 @@ var DEFAULT_CONFIG = {
3438
3443
  debugMode: false,
3439
3444
  conversationView: false,
3440
3445
  streamerMode: false,
3441
- zenView: false,
3442
3446
  viewTabOrder: [],
3443
3447
  remoteSessions: false,
3444
3448
  detectBackgroundAgents: true,
@@ -3489,16 +3493,6 @@ var DEFAULT_CONFIG = {
3489
3493
  },
3490
3494
  repoRoots: [],
3491
3495
  customAgents: [],
3492
- postTurnChecks: {
3493
- enabled: true,
3494
- mode: "report",
3495
- rules: {
3496
- trailingWs: true,
3497
- finalNewline: true,
3498
- bom: true,
3499
- slop: false
3500
- }
3501
- },
3502
3496
  remote: {
3503
3497
  enabled: false,
3504
3498
  port: null,
@@ -3740,7 +3734,12 @@ function retiredGuardrailKeysWarning(config) {
3740
3734
  if (retiredKeys.length === 0) return null;
3741
3735
  return `[guardrails] config.json still has ${retiredKeys.join(" and ")}. These keys are ignored, so their unreadable paths and opt-outs do not apply until you move them.`;
3742
3736
  }
3743
- function createConfigStore({ settingsDefaults, readTelemetryInstallId } = {}) {
3737
+ function readIsExperimentalBuild() {
3738
+ const manifest = JSON.parse(fs.readFileSync(path.join(packageRoot, "package.json"), "utf8"));
3739
+ return isRecord(manifest) && isExperimentalBuild(manifest.version);
3740
+ }
3741
+ var IS_EXPERIMENTAL_BUILD = readIsExperimentalBuild();
3742
+ function createConfigStore({ settingsDefaults, readTelemetryInstallId, isExperimentalBuild = IS_EXPERIMENTAL_BUILD } = {}) {
3744
3743
  const configPath = resolveConfigPath();
3745
3744
  const effectiveDefaults = {
3746
3745
  ...DEFAULT_CONFIG,
@@ -3761,6 +3760,7 @@ function createConfigStore({ settingsDefaults, readTelemetryInstallId } = {}) {
3761
3760
  } catch (err) {
3762
3761
  console.warn("[config] Failed to persist auto-assigned project IDs:", errorMessage(err));
3763
3762
  }
3763
+ Object.assign(config, withExperimentalFeaturesGated(config, isExperimentalBuild));
3764
3764
  let _lastWrittenContent = null;
3765
3765
  let _lastAppliedContent = loadedConfig.loadedContent;
3766
3766
  let synchronousWriteRevision = 0;
@@ -3805,7 +3805,7 @@ function createConfigStore({ settingsDefaults, readTelemetryInstallId } = {}) {
3805
3805
  } catch (err) {
3806
3806
  return refuseSave(`[config] Failed to write config.json: ${errorLabel(err)}`);
3807
3807
  }
3808
- return effectiveConfig;
3808
+ return withExperimentalFeaturesGated(effectiveConfig, isExperimentalBuild);
3809
3809
  }
3810
3810
  function saveAsync(mutatorFn) {
3811
3811
  const scheduledSave = pendingSaves.then(async () => {
@@ -3841,7 +3841,7 @@ function createConfigStore({ settingsDefaults, readTelemetryInstallId } = {}) {
3841
3841
  }
3842
3842
  _lastWrittenContent = nextContent;
3843
3843
  _lastAppliedContent = null;
3844
- return effectiveConfig;
3844
+ return withExperimentalFeaturesGated(effectiveConfig, isExperimentalBuild);
3845
3845
  } catch (error) {
3846
3846
  console.warn("[config] Failed to save config.json asynchronously:", errorMessage(error));
3847
3847
  return null;
@@ -3872,7 +3872,6 @@ function createConfigStore({ settingsDefaults, readTelemetryInstallId } = {}) {
3872
3872
  debugMode: config.debugMode ?? effectiveDefaults.debugMode,
3873
3873
  conversationView: config.conversationView ?? effectiveDefaults.conversationView,
3874
3874
  streamerMode: config.streamerMode ?? effectiveDefaults.streamerMode,
3875
- zenView: config.zenView ?? effectiveDefaults.zenView,
3876
3875
  viewTabOrder: config.viewTabOrder ?? DEFAULT_CONFIG.viewTabOrder,
3877
3876
  remoteSessions: config.remoteSessions ?? effectiveDefaults.remoteSessions,
3878
3877
  detectBackgroundAgents: config.detectBackgroundAgents ?? effectiveDefaults.detectBackgroundAgents,
@@ -3906,12 +3905,12 @@ function createConfigStore({ settingsDefaults, readTelemetryInstallId } = {}) {
3906
3905
  repositoryRootCaseInsensitive: equalsIgnoringCaseOnWindows("root", "ROOT"),
3907
3906
  taskTitle: pickBlock("taskTitle", config.taskTitle ?? DEFAULT_CONFIG.taskTitle),
3908
3907
  branchGc: pickBlock("branchGc", config.branchGc),
3909
- postTurnChecks: pickBlock("postTurnChecks", config.postTurnChecks ?? DEFAULT_CONFIG.postTurnChecks),
3910
3908
  visions: pickBlock("visions", config.visions),
3911
3909
  github: pickBlock("github", config.github),
3912
3910
  teamReview: pickBlock("teamReview", config.teamReview),
3913
3911
  benchmarks: pickBlock("benchmarks", config.benchmarks),
3914
3912
  coherence: pickBlock("coherence", config.coherence),
3913
+ issues: pickBlock("issues", config.issues),
3915
3914
  workflows: config.workflows ?? null,
3916
3915
  posthog: pickBlock("posthog", config.posthog),
3917
3916
  secretSources: secretSourcesOf(process.env),
@@ -3947,8 +3946,6 @@ function createConfigStore({ settingsDefaults, readTelemetryInstallId } = {}) {
3947
3946
  config[key] = nextValue;
3948
3947
  }
3949
3948
  config.repoRoots = newConfig.repoRoots || [];
3950
- if (newConfig.postTurnChecks == null) delete config.postTurnChecks;
3951
- if (newConfig.postTurnChecks != null) config.postTurnChecks = newConfig.postTurnChecks;
3952
3949
  if (newConfig.worktreeShare == null) delete config.worktreeShare;
3953
3950
  if (newConfig.worktreeShare != null) config.worktreeShare = newConfig.worktreeShare;
3954
3951
  if (newConfig.taskTitle != null) config.taskTitle = newConfig.taskTitle;
@@ -3958,6 +3955,7 @@ function createConfigStore({ settingsDefaults, readTelemetryInstallId } = {}) {
3958
3955
  if (newConfig.teamReview != null) config.teamReview = newConfig.teamReview;
3959
3956
  if (newConfig.benchmarks != null) config.benchmarks = newConfig.benchmarks;
3960
3957
  if (newConfig.coherence != null) config.coherence = newConfig.coherence;
3958
+ if (newConfig.issues != null) config.issues = newConfig.issues;
3961
3959
  if (newConfig.posthog != null) config.posthog = newConfig.posthog;
3962
3960
  if (newConfig.usage != null) config.usage = newConfig.usage;
3963
3961
  if (newConfig.telegram != null) config.telegram = newConfig.telegram;
@@ -3996,7 +3994,7 @@ function createConfigStore({ settingsDefaults, readTelemetryInstallId } = {}) {
3996
3994
  }
3997
3995
  _lastAppliedContent = data;
3998
3996
  _lastWrittenContent = null;
3999
- callback(newConfig);
3997
+ callback(withExperimentalFeaturesGated(newConfig, isExperimentalBuild));
4000
3998
  console.log("[config] Reloaded config.json");
4001
3999
  }
4002
4000
  try {
@@ -4033,8 +4031,9 @@ function createConfigStore({ settingsDefaults, readTelemetryInstallId } = {}) {
4033
4031
  applySettings,
4034
4032
  isUnchosenLaunchDefault,
4035
4033
  watchForChanges,
4034
+ isExperimentalBuild,
4036
4035
  DEFAULT_CONFIG
4037
4036
  };
4038
4037
  }
4039
4038
  //#endregion
4040
- export { readEnvSecrets as $, settingsOf as A, buildExceptionProperties as B, deleteValueAtPath as C, scoreSettingsSearch as D, parsePosthogProjectSelection as E, TELEMETRY_BATCH_URL as F, decideIsDevInstall as G, classifySessionExit as H, TELEMETRY_FLAGS_URL as I, exceptionFingerprint as J, decideRemoteTelemetryState as K, adapterBucket as L, FILE_ONLY_GROUPS as M, SETTINGS_REGISTRY as N, setValueAtPath as O, FIRST_RUN_NOTICE as P, ENV_SECRET_BINDINGS as Q, buildAiGenerationEvents as R, cloneValue as S, hasScaledUnit as T, claudeAccountUuidOf as U, buildPersonProperties as V, codexUserIdOf as W, parsePosthogReleaseId as X, nodeMajorVersion as Y, resolveProjectToken as Z, SECRET_PRESENCE_SUFFIX as _, generateProjectId as a, planWorktreeGc as at, validateSettingsBlock as b, resolveConfigPath as c, worktreeIntegrationTips as ct, assetForPlatform as d, isSameDirectoryPath as dt, stableConfigKey as et, decideRtkInstall as f, verifyDigest as g, isRtkBinaryName as h, ensureProjectIds as i, planBranchGc as it, valueAtPath as j, settingsGroupOf as k, saveConfigFileOnce as l, canonicalizePath as lt, installTargetPath as m, DEFAULT_CONFIG as n, DEFAULT_BRANCH_GC_PREFIXES as nt, glimmervoidHomeDir as o, sessionIdFromBranch as ot, findEscapingArchiveMember as p, decideTelemetryConsent as q, createConfigStore as r, matchedPrefix as rt, loadConfigFile as s, usablePrefixes as st, ABORT_CONFIG_SAVE as t, withEnvSecrets as tt, validateConfig as u, comparableDirectoryPath as ut, mergeSettingsBlock as v, displayText as w, SETTINGS_INDEX as x, settingsBlockSpecFor as y, buildBrowserExceptionProperties as z };
4039
+ export { resolveProjectToken as $, setValueAtPath as A, buildAiGenerationEvents as B, SETTINGS_INDEX as C, hasScaledUnit as D, displayText as E, SETTINGS_REGISTRY as F, claudeAccountUuidOf as G, buildExceptionProperties as H, FIRST_RUN_NOTICE as I, decideRemoteTelemetryState as J, codexUserIdOf as K, TELEMETRY_BATCH_URL as L, settingsOf as M, valueAtPath as N, parsePosthogProjectSelection as O, FILE_ONLY_GROUPS as P, parsePosthogReleaseId as Q, TELEMETRY_FLAGS_URL as R, validateSettingsBlock as S, deleteValueAtPath as T, buildPersonProperties as U, buildBrowserExceptionProperties as V, classifySessionExit as W, exceptionFingerprint as X, decideTelemetryConsent as Y, nodeMajorVersion as Z, isRtkBinaryName as _, ensureProjectIds as a, matchedPrefix as at, mergeSettingsBlock as b, loadConfigFile as c, sessionIdFromBranch as ct, validateConfig as d, canonicalizePath as dt, ENV_SECRET_BINDINGS as et, isSettingAvailable as f, comparableDirectoryPath as ft, installTargetPath as g, findEscapingArchiveMember as h, createConfigStore as i, DEFAULT_BRANCH_GC_PREFIXES as it, settingsGroupOf as j, scoreSettingsSearch as k, resolveConfigPath as l, usablePrefixes as lt, decideRtkInstall as m, DEFAULT_CONFIG as n, stableConfigKey as nt, generateProjectId as o, planBranchGc as ot, assetForPlatform as p, isSameDirectoryPath as pt, decideIsDevInstall as q, IS_EXPERIMENTAL_BUILD as r, withEnvSecrets as rt, glimmervoidHomeDir as s, planWorktreeGc as st, ABORT_CONFIG_SAVE as t, readEnvSecrets as tt, saveConfigFileOnce as u, worktreeIntegrationTips as ut, verifyDigest as v, cloneValue as w, settingsBlockSpecFor as x, SECRET_PRESENCE_SUFFIX as y, adapterBucket as z };
@@ -1,4 +1,4 @@
1
- import { t as AGENT_API_VERBS } from "./session-CUc6d7aS.js";
1
+ import { t as AGENT_API_VERBS } from "./session-BwlLY_mv.js";
2
2
  import { r as execFileSync } from "./child-process-safe-D4hyVIXj.js";
3
3
  //#region server/core/command-line-core.ts
4
4
  var SUBCOMMANDS_HONORING_TRAILING_GLOBAL_OPTIONS = /* @__PURE__ */ new Set([
@@ -1,6 +1,6 @@
1
1
  import { r as errorMessage } from "./text-DoirglWV.js";
2
2
  import { s as relayPath } from "./runtime-paths-ghcH9CeW.js";
3
- import { j as SIGN_URL_ENV, n as AGENT_URL_ENV } from "./session-CUc6d7aS.js";
3
+ import { j as SIGN_URL_ENV, n as AGENT_URL_ENV } from "./session-BwlLY_mv.js";
4
4
  import { n as isRecord } from "./coerce-NSst8oRP.js";
5
5
  import { t as HOOK_URL_ENV } from "./hook-relay-core-DA_bz2KA.js";
6
6
  import { a as SANE_YOLO_PATH_ENV, o as saneYoloEnv, r as RTK_PATH_ENV } from "./rtk-hook-core-B-MpzPin.js";
@@ -203,13 +203,11 @@ function createSpawnGate({ memoryAdmission = null, kind = "session" } = {}) {
203
203
  if (flaggedStarts.has(queuedStart) || !queuedStart.isStillWanted()) return;
204
204
  flaggedStarts.add(queuedStart);
205
205
  admission.noteStartHeld(true);
206
- queuedStart.onMemoryWait(true);
207
206
  }
208
207
  function leaveQueue(queuedStart) {
209
208
  queuedStarts.delete(queuedStart);
210
209
  if (!flaggedStarts.delete(queuedStart)) return;
211
210
  admission.noteStartHeld(false);
212
- queuedStart.onMemoryWait(false);
213
211
  }
214
212
  function noteHeadStartHeld(isHeld) {
215
213
  isHeadStartHeld = isHeld;
@@ -217,11 +215,8 @@ function createSpawnGate({ memoryAdmission = null, kind = "session" } = {}) {
217
215
  for (const queuedStart of queuedStarts) flagWaitingForMemory(queuedStart);
218
216
  }
219
217
  function run(fn, options = {}) {
220
- const { isStillWanted = () => true, onMemoryWait = () => {} } = options;
221
- const queuedStart = {
222
- isStillWanted,
223
- onMemoryWait
224
- };
218
+ const { isStillWanted = () => true } = options;
219
+ const queuedStart = { isStillWanted };
225
220
  queuedStarts.add(queuedStart);
226
221
  if (isHeadStartHeld) flagWaitingForMemory(queuedStart);
227
222
  const release = () => leaveQueue(queuedStart);