glimmervoid 0.45.0 → 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-D99c4zCx.js → adapters-BE9BKVW0.js} +24 -24
  3. package/dist/chunks/{adapters-BGuI5U_-.js → adapters-CPaysZkO.js} +1 -1
  4. package/dist/chunks/{agent-api-cli-DdrR2vnB.js → agent-api-cli-B0l8uLos.js} +1 -1
  5. package/dist/chunks/{agent-api-cli-DIGH1v3_.js → agent-api-cli-Bq9J0_D5.js} +148 -15
  6. package/dist/chunks/{agent-api-core-D49OzKho.js → agent-api-core-ClU9-5K3.js} +9 -3
  7. package/dist/chunks/{agent-setup-cli-7hG401Io.js → agent-setup-cli-BA_1AdhQ.js} +2 -2
  8. package/dist/chunks/{contracts-CucdticH.js → build-channel-qgKwNssc.js} +37 -3
  9. package/dist/chunks/{config-BLeRKmn9.js → config-BqJTnPae.js} +16 -33
  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-CXLnauAa.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-CX9CkTDx.js → main-x9ygUnoL.js} +1030 -988
  17. package/dist/chunks/{pair-cli-BPyh48--.js → pair-cli-Cph4TZ2R.js} +2 -2
  18. package/dist/chunks/{remote-config-B0zBDBak.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-DzIasX94.js → settings-cli-Bete5oVk.js} +11 -10
  24. package/dist/chunks/{settings-readout-core-BOv6tqdK.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-C_QYhDvI.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-ItO-gOWA.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-DlaaBY9p.js +0 -1
  77. package/dist/chunks/rtk-resolver-Dr4iJsiS.js +0 -1
  78. package/dist/client/assets/action-status-DrMQzohk.js +0 -1
  79. package/dist/client/assets/action-status-DrMQzohk.js.br +0 -0
  80. package/dist/client/assets/benchmark-panel-D09qvrAY.js +0 -1
  81. package/dist/client/assets/benchmark-panel-D09qvrAY.js.br +0 -0
  82. package/dist/client/assets/dom-helpers-CZ8NZKxw.js +0 -4
  83. package/dist/client/assets/dom-helpers-CZ8NZKxw.js.br +0 -0
  84. package/dist/client/assets/hooks-panel-R-L7DuIz.js +0 -1
  85. package/dist/client/assets/hooks-panel-R-L7DuIz.js.br +0 -0
  86. package/dist/client/assets/index-B7TvZo7W.js +0 -173
  87. package/dist/client/assets/index-B7TvZo7W.js.br +0 -0
  88. package/dist/client/assets/index-C3nOrTwM.css +0 -2
  89. package/dist/client/assets/index-C3nOrTwM.css.br +0 -0
  90. package/dist/client/assets/issues-panel-CyB4oq9Z.js +0 -1
  91. package/dist/client/assets/issues-panel-CyB4oq9Z.js.br +0 -0
  92. package/dist/client/assets/modal-M_mJ8--V.js +0 -1
  93. package/dist/client/assets/modal-M_mJ8--V.js.br +0 -0
  94. package/dist/client/assets/poll-ago-ItO-gOWA.js.br +0 -0
  95. package/dist/client/assets/pr-queue-columns-Cu3-PADL.js +0 -1
  96. package/dist/client/assets/pr-queue-columns-Cu3-PADL.js.br +0 -0
  97. package/dist/client/assets/radar-panel-Cl3yPWed.js +0 -1
  98. package/dist/client/assets/radar-panel-Cl3yPWed.js.br +0 -0
  99. package/dist/client/assets/review-queue-panel-CVujzadC.js +0 -2
  100. package/dist/client/assets/review-queue-panel-CVujzadC.js.br +0 -0
  101. package/dist/client/assets/settings-panel-DW5An8lQ.js +0 -3
  102. package/dist/client/assets/settings-panel-DW5An8lQ.js.br +0 -0
  103. package/dist/client/assets/trace-panel-B6TiM5pb.js +0 -1
  104. package/dist/client/assets/trace-panel-B6TiM5pb.js.br +0 -0
  105. package/dist/client/assets/ui-prefs-CQHZFVx6.js +0 -1
  106. package/dist/client/assets/ui-prefs-CQHZFVx6.js.br +0 -0
  107. package/dist/client/assets/usage-panel-D2RX3LtG.js +0 -1
  108. package/dist/client/assets/usage-panel-D2RX3LtG.js.br +0 -0
  109. package/dist/client/assets/visions-panel-BV9EKCBw.js +0 -1
  110. package/dist/client/assets/visions-panel-BV9EKCBw.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",
@@ -1771,7 +1772,6 @@ Object.freeze([
1771
1772
  "session-git",
1772
1773
  "session-coherence-hooks",
1773
1774
  "session-agents",
1774
- "session-wakeup",
1775
1775
  "session-prompt",
1776
1776
  "session-conversation",
1777
1777
  "session-merge-status",
@@ -1783,7 +1783,6 @@ Object.freeze([
1783
1783
  "change-map",
1784
1784
  "branch-sync-status",
1785
1785
  "session-changed",
1786
- "post-turn-result",
1787
1786
  "debug-state-response",
1788
1787
  "session-trace-response",
1789
1788
  "session-trace-changed",
@@ -1980,13 +1979,7 @@ var serverVariants = [
1980
1979
  unseenOutcome: UnseenOutcome.nullable(),
1981
1980
  timestamp
1982
1981
  }),
1983
- loose("session-wakeup", {
1984
- id: sessionId,
1985
- pendingWakeup: PendingWakeup.nullable(),
1986
- timestamp
1987
- }),
1988
1982
  loose("session-prompt", {
1989
- isCompacting: z.boolean().optional(),
1990
1983
  id: sessionId,
1991
1984
  pendingPromptKind: nullableString,
1992
1985
  timestamp
@@ -2057,18 +2050,6 @@ var serverVariants = [
2057
2050
  error: optionalError
2058
2051
  }),
2059
2052
  loose("session-changed", { id: sessionId }),
2060
- loose("post-turn-result", {
2061
- id: sessionId,
2062
- mode: z.string(),
2063
- skipped: nullableString,
2064
- filesFixed: z.number().int().nonnegative(),
2065
- findings: z.array(openObject({
2066
- file: z.string(),
2067
- rule: z.string(),
2068
- count: z.number().int().nonnegative()
2069
- })),
2070
- timestamp
2071
- }),
2072
2053
  loose("debug-state-response", {
2073
2054
  id: sessionId,
2074
2055
  payload: opaqueObject
@@ -2091,6 +2072,11 @@ var serverVariants = [
2091
2072
  docs: z.array(SessionDoc)
2092
2073
  }),
2093
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)) }),
2094
2080
  loose("session-doc-response", {
2095
2081
  requestId,
2096
2082
  id: sessionId,
@@ -2538,8 +2524,6 @@ var optionalWholeNumber = (field, range) => optionalNumber(field, range).unwrap(
2538
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();
2539
2525
  var optionalObject = (field, shape) => z.object(shape, { error: `${field} must be an object` }).nullable().optional();
2540
2526
  var optionalLooseObject = (field) => z.object({}, { error: `${field} must be an object` }).passthrough().nullable().optional();
2541
- var UPDATE_CHANNELS = Object.freeze(["release", "main"]);
2542
- var POST_TURN_CHECK_MODES = Object.freeze(["report", "fix"]);
2543
2527
  var TaskTitleSettings = z.object({ refiner: z.object({
2544
2528
  enabled: optionalBoolean("taskTitle.refiner.enabled"),
2545
2529
  model: optionalString("taskTitle.refiner.model", true),
@@ -2564,7 +2548,6 @@ var BranchGcControlSettings = BranchGcFileSettings.omit({
2564
2548
  }).nullable().optional();
2565
2549
  Object.freeze(["enabled", "deleteUnmerged"]);
2566
2550
  Object.freeze(["staleDays", "intervalMs"]);
2567
- var PostTurnChecksSettings = optionalObject("postTurnChecks", { mode: z.enum(POST_TURN_CHECK_MODES, { error: "postTurnChecks.mode must be one of report, fix" }).optional() });
2568
2551
  var VisionsSettings = optionalObject("visions", {
2569
2552
  enabled: optionalBoolean("visions.enabled"),
2570
2553
  autoFix: optionalBoolean("visions.autoFix"),
@@ -2594,6 +2577,7 @@ var TeamReviewSettings = optionalObject("teamReview", {
2594
2577
  skipIdleAfterDays: optionalNumber("teamReview.skipIdleAfterDays")
2595
2578
  });
2596
2579
  var BenchmarksSettings = optionalObject("benchmarks", { enabled: optionalBoolean("benchmarks.enabled") });
2580
+ var IssuesSettings = optionalObject("issues", { enabled: optionalBoolean("issues.enabled") });
2597
2581
  var CoherenceSettings = optionalObject("coherence", { enabled: optionalBoolean("coherence.enabled") });
2598
2582
  var posthogNumberRanges = {
2599
2583
  intervalMinutes: POSTHOG_INTERVAL_RANGE,
@@ -2670,7 +2654,6 @@ var createBrowserConfigShape = (isAbsolutePath) => ({
2670
2654
  debugMode: optionalBoolean("debugMode"),
2671
2655
  conversationView: optionalBoolean("conversationView"),
2672
2656
  streamerMode: optionalBoolean("streamerMode"),
2673
- zenView: optionalBoolean("zenView"),
2674
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(),
2675
2658
  remoteSessions: optionalBoolean("remoteSessions"),
2676
2659
  detectBackgroundAgents: optionalBoolean("detectBackgroundAgents"),
@@ -2679,7 +2662,7 @@ var createBrowserConfigShape = (isAbsolutePath) => ({
2679
2662
  saneYolo: optionalBoolean("saneYolo"),
2680
2663
  skipPermissionsByDefault: optionalBoolean("skipPermissionsByDefault"),
2681
2664
  checkForUpdates: optionalBoolean("checkForUpdates"),
2682
- updateChannel: z.enum(UPDATE_CHANNELS, { error: "updateChannel must be one of release, main" }).optional(),
2665
+ updateChannel: UpdateChannel.optional(),
2683
2666
  autoResume: optionalBoolean("autoResume"),
2684
2667
  telegramNotifications: optionalBoolean("telegramNotifications"),
2685
2668
  integrationBranch: optionalString("integrationBranch").nullable(),
@@ -2688,12 +2671,12 @@ var createBrowserConfigShape = (isAbsolutePath) => ({
2688
2671
  repoRoots: z.array(z.string()).optional(),
2689
2672
  taskTitle: TaskTitleSettings,
2690
2673
  branchGc: BranchGcSettings,
2691
- postTurnChecks: PostTurnChecksSettings,
2692
2674
  visions: VisionsSettings,
2693
2675
  github: GithubSettings,
2694
2676
  teamReview: TeamReviewSettings,
2695
2677
  benchmarks: BenchmarksSettings,
2696
2678
  coherence: CoherenceSettings,
2679
+ issues: IssuesSettings,
2697
2680
  posthog: PosthogSettings,
2698
2681
  usage: createUsageSettings(isAbsolutePath),
2699
2682
  telegram: TelegramSettings,
@@ -2860,6 +2843,7 @@ var FILE_CONFIG_SHAPE = {
2860
2843
  teamReview: optionalLooseObject("teamReview"),
2861
2844
  benchmarks: optionalLooseObject("benchmarks"),
2862
2845
  coherence: optionalLooseObject("coherence"),
2846
+ issues: optionalLooseObject("issues"),
2863
2847
  posthog: optionalLooseObject("posthog"),
2864
2848
  usage: optionalLooseObject("usage"),
2865
2849
  telegram: optionalLooseObject("telegram"),
@@ -2877,7 +2861,6 @@ var Config = z.object({
2877
2861
  worktreeAutoRebase: optionalBoolean("worktreeAutoRebase"),
2878
2862
  worktreeSyncOnStart: optionalBoolean("worktreeSyncOnStart"),
2879
2863
  worktreeRerere: optionalBoolean("worktreeRerere"),
2880
- postTurnChecks: z.record(z.string(), z.unknown()).optional(),
2881
2864
  hooks: z.unknown().optional(),
2882
2865
  remote: z.object({
2883
2866
  enabled: z.boolean().optional(),
@@ -2924,12 +2907,12 @@ var Config = z.object({
2924
2907
  var CONFIG_BLOCK_KEYS = Object.freeze([
2925
2908
  "taskTitle",
2926
2909
  "branchGc",
2927
- "postTurnChecks",
2928
2910
  "visions",
2929
2911
  "github",
2930
2912
  "teamReview",
2931
2913
  "benchmarks",
2932
2914
  "coherence",
2915
+ "issues",
2933
2916
  "posthog",
2934
2917
  "usage",
2935
2918
  "telegram",
@@ -2962,4 +2945,4 @@ function configIssueMessage(error) {
2962
2945
  return error.issues[0]?.message || "settings are invalid";
2963
2946
  }
2964
2947
  //#endregion
2965
- 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-BLeRKmn9.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-CucdticH.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);