@cortexkit/opencode-magic-context 0.33.1 → 0.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/dist/config/agent-disable.d.ts +22 -0
  2. package/dist/config/agent-disable.d.ts.map +1 -1
  3. package/dist/config/index.d.ts.map +1 -1
  4. package/dist/config/project-security.d.ts +7 -0
  5. package/dist/config/project-security.d.ts.map +1 -1
  6. package/dist/config/schema/magic-context.d.ts +82 -2
  7. package/dist/config/schema/magic-context.d.ts.map +1 -1
  8. package/dist/config/transform-mode.d.ts +2 -0
  9. package/dist/config/transform-mode.d.ts.map +1 -1
  10. package/dist/{conflict-warning-hook-n48c783v.js → conflict-warning-hook-fvpfvt0w.js} +1 -1
  11. package/dist/{derive-budgets-e9j09sjr.js → derive-budgets-9crp0cvd.js} +1 -1
  12. package/dist/features/builtin-commands/commands.d.ts +1 -1
  13. package/dist/features/builtin-commands/commands.d.ts.map +1 -1
  14. package/dist/features/magic-context/compaction-marker.d.ts +57 -0
  15. package/dist/features/magic-context/compaction-marker.d.ts.map +1 -1
  16. package/dist/features/magic-context/compartment-chunk-embedding.d.ts.map +1 -1
  17. package/dist/features/magic-context/dreamer/classify.d.ts.map +1 -1
  18. package/dist/features/magic-context/dreamer/evaluate-smart-notes.d.ts.map +1 -1
  19. package/dist/features/magic-context/dreamer/map-memories.d.ts.map +1 -1
  20. package/dist/features/magic-context/dreamer/refresh-primers.d.ts.map +1 -1
  21. package/dist/features/magic-context/dreamer/task-executor.d.ts.map +1 -1
  22. package/dist/features/magic-context/dreamer/verify.d.ts.map +1 -1
  23. package/dist/features/magic-context/fail-closed-block.d.ts +10 -0
  24. package/dist/features/magic-context/fail-closed-block.d.ts.map +1 -1
  25. package/dist/features/magic-context/git-commits/storage-git-commit-embeddings.d.ts.map +1 -1
  26. package/dist/features/magic-context/git-commits/storage-git-commits.d.ts.map +1 -1
  27. package/dist/features/magic-context/memory/embedding-identity.d.ts.map +1 -1
  28. package/dist/features/magic-context/memory/embedding-local.d.ts +7 -1
  29. package/dist/features/magic-context/memory/embedding-local.d.ts.map +1 -1
  30. package/dist/features/magic-context/memory/embedding.d.ts.map +1 -1
  31. package/dist/features/magic-context/memory/memory-migration.d.ts.map +1 -1
  32. package/dist/features/magic-context/memory/project-identity.d.ts +2 -6
  33. package/dist/features/magic-context/memory/project-identity.d.ts.map +1 -1
  34. package/dist/features/magic-context/memory/storage-memory-embeddings.d.ts.map +1 -1
  35. package/dist/features/magic-context/migrations.d.ts.map +1 -1
  36. package/dist/features/magic-context/mural/compress-cues.d.ts.map +1 -1
  37. package/dist/features/magic-context/mural/render-mural.d.ts.map +1 -1
  38. package/dist/features/magic-context/overflow-detection.d.ts +8 -1
  39. package/dist/features/magic-context/overflow-detection.d.ts.map +1 -1
  40. package/dist/features/magic-context/project-embedding-registry.d.ts.map +1 -1
  41. package/dist/features/magic-context/scheduler.d.ts.map +1 -1
  42. package/dist/features/magic-context/schema-fence-probe.d.ts +28 -0
  43. package/dist/features/magic-context/schema-fence-probe.d.ts.map +1 -0
  44. package/dist/features/magic-context/sidekick/agent.d.ts.map +1 -1
  45. package/dist/features/magic-context/smart-notes/compiler.d.ts.map +1 -1
  46. package/dist/features/magic-context/storage-db.d.ts +35 -1
  47. package/dist/features/magic-context/storage-db.d.ts.map +1 -1
  48. package/dist/features/magic-context/storage-meta-persisted.d.ts +38 -4
  49. package/dist/features/magic-context/storage-meta-persisted.d.ts.map +1 -1
  50. package/dist/features/magic-context/storage-meta.d.ts +1 -1
  51. package/dist/features/magic-context/storage-meta.d.ts.map +1 -1
  52. package/dist/features/magic-context/storage.d.ts +1 -1
  53. package/dist/features/magic-context/storage.d.ts.map +1 -1
  54. package/dist/features/magic-context/user-memory/review-user-memories.d.ts.map +1 -1
  55. package/dist/hooks/magic-context/boundary-execution.d.ts +1 -1
  56. package/dist/hooks/magic-context/boundary-execution.d.ts.map +1 -1
  57. package/dist/hooks/magic-context/cache-busting-signals.d.ts +1 -0
  58. package/dist/hooks/magic-context/cache-busting-signals.d.ts.map +1 -1
  59. package/dist/hooks/magic-context/child-session-spawn.d.ts +26 -0
  60. package/dist/hooks/magic-context/child-session-spawn.d.ts.map +1 -0
  61. package/dist/hooks/magic-context/command-handler.d.ts +2 -0
  62. package/dist/hooks/magic-context/command-handler.d.ts.map +1 -1
  63. package/dist/hooks/magic-context/compaction-off-transition.d.ts +96 -0
  64. package/dist/hooks/magic-context/compaction-off-transition.d.ts.map +1 -0
  65. package/dist/hooks/magic-context/compartment-runner-historian.d.ts +2 -0
  66. package/dist/hooks/magic-context/compartment-runner-historian.d.ts.map +1 -1
  67. package/dist/hooks/magic-context/compartment-runner-incremental.d.ts.map +1 -1
  68. package/dist/hooks/magic-context/compartment-runner-mapping.d.ts.map +1 -1
  69. package/dist/hooks/magic-context/compartment-runner-partial-recomp.d.ts.map +1 -1
  70. package/dist/hooks/magic-context/compartment-runner-recomp.d.ts.map +1 -1
  71. package/dist/hooks/magic-context/compartment-trigger.d.ts +12 -5
  72. package/dist/hooks/magic-context/compartment-trigger.d.ts.map +1 -1
  73. package/dist/hooks/magic-context/ctx-reduce-availability.d.ts +47 -1
  74. package/dist/hooks/magic-context/ctx-reduce-availability.d.ts.map +1 -1
  75. package/dist/hooks/magic-context/emergency-drop.d.ts +2 -2
  76. package/dist/hooks/magic-context/event-handler.d.ts +7 -0
  77. package/dist/hooks/magic-context/event-handler.d.ts.map +1 -1
  78. package/dist/hooks/magic-context/event-resolvers.d.ts +13 -21
  79. package/dist/hooks/magic-context/event-resolvers.d.ts.map +1 -1
  80. package/dist/hooks/magic-context/final-wire-token-estimate.d.ts +2 -0
  81. package/dist/hooks/magic-context/final-wire-token-estimate.d.ts.map +1 -1
  82. package/dist/hooks/magic-context/heuristic-cleanup.d.ts +1 -1
  83. package/dist/hooks/magic-context/hook-handlers.d.ts +1 -0
  84. package/dist/hooks/magic-context/hook-handlers.d.ts.map +1 -1
  85. package/dist/hooks/magic-context/hook.d.ts +11 -1
  86. package/dist/hooks/magic-context/hook.d.ts.map +1 -1
  87. package/dist/hooks/magic-context/inject-compartments.d.ts +9 -0
  88. package/dist/hooks/magic-context/inject-compartments.d.ts.map +1 -1
  89. package/dist/hooks/magic-context/protected-tail-boundary.d.ts.map +1 -1
  90. package/dist/hooks/magic-context/read-session-db.d.ts.map +1 -1
  91. package/dist/hooks/magic-context/read-session-true-raw-tokens.d.ts.map +1 -1
  92. package/dist/hooks/magic-context/rust-mode-transform.d.ts +3 -0
  93. package/dist/hooks/magic-context/rust-mode-transform.d.ts.map +1 -1
  94. package/dist/hooks/magic-context/send-session-notification.d.ts +20 -1
  95. package/dist/hooks/magic-context/send-session-notification.d.ts.map +1 -1
  96. package/dist/hooks/magic-context/transform-compartment-phase.d.ts +3 -0
  97. package/dist/hooks/magic-context/transform-compartment-phase.d.ts.map +1 -1
  98. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts +30 -0
  99. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
  100. package/dist/hooks/magic-context/transform.d.ts +27 -0
  101. package/dist/hooks/magic-context/transform.d.ts.map +1 -1
  102. package/dist/{index-ey1bc14z.js → index-b563sga5.js} +7 -264
  103. package/dist/{index-y1c9tcm3.js → index-cn960ffd.js} +101 -20
  104. package/dist/{index-xyaekybw.js → index-dtas91s5.js} +6 -4
  105. package/dist/index-fcyvznch.js +279 -0
  106. package/dist/{index-63dq2g4d.js → index-ry8rh8cv.js} +138 -24
  107. package/dist/{index-c2gahrks.js → index-s0mdn690.js} +1599 -892
  108. package/dist/index.d.ts.map +1 -1
  109. package/dist/index.js +1292 -623
  110. package/dist/plugin/embedding-bootstrap.d.ts.map +1 -1
  111. package/dist/plugin/hooks/create-session-hooks.d.ts +11 -0
  112. package/dist/plugin/hooks/create-session-hooks.d.ts.map +1 -1
  113. package/dist/plugin/messages-transform.d.ts +10 -0
  114. package/dist/plugin/messages-transform.d.ts.map +1 -1
  115. package/dist/plugin/rpc-handlers.d.ts +3 -7
  116. package/dist/plugin/rpc-handlers.d.ts.map +1 -1
  117. package/dist/plugin/tool-registry.d.ts +8 -0
  118. package/dist/plugin/tool-registry.d.ts.map +1 -1
  119. package/dist/{recomp-orchestrator-2yb2hfh2.js → recomp-orchestrator-8e82vmvb.js} +6 -4
  120. package/dist/send-session-notification-6njqewzk.js +20 -0
  121. package/dist/shared/conflict-detector.d.ts +38 -1
  122. package/dist/shared/conflict-detector.d.ts.map +1 -1
  123. package/dist/shared/conflict-fixer.d.ts +18 -1
  124. package/dist/shared/conflict-fixer.d.ts.map +1 -1
  125. package/dist/shared/context-limit-provenance.d.ts +3 -0
  126. package/dist/shared/context-limit-provenance.d.ts.map +1 -0
  127. package/dist/shared/escalation-bands.d.ts +9 -0
  128. package/dist/shared/escalation-bands.d.ts.map +1 -0
  129. package/dist/shared/format-threshold.d.ts +1 -1
  130. package/dist/shared/models-dev-cache.d.ts +29 -3
  131. package/dist/shared/models-dev-cache.d.ts.map +1 -1
  132. package/dist/shared/rpc-server.d.ts.map +1 -1
  133. package/dist/shared/rpc-types.d.ts +46 -1
  134. package/dist/shared/rpc-types.d.ts.map +1 -1
  135. package/dist/shared/storage-permissions.d.ts +5 -0
  136. package/dist/shared/storage-permissions.d.ts.map +1 -0
  137. package/dist/{storage-meta-session-td6bwtky.js → storage-meta-session-xt41zbw4.js} +2 -1
  138. package/dist/tui/compaction-off.d.ts +13 -0
  139. package/dist/tui/compaction-off.d.ts.map +1 -0
  140. package/dist/tui/data/context-db.d.ts.map +1 -1
  141. package/dist/tui-compiled/compaction-off.d.ts +13 -0
  142. package/dist/tui-compiled/compaction-off.d.ts.map +1 -0
  143. package/dist/tui-compiled/data/context-db.d.ts.map +1 -1
  144. package/package.json +7 -2
  145. package/src/agents/dreamer.ts +68 -0
  146. package/src/agents/hidden-agent-registrations.ts +331 -0
  147. package/src/agents/historian.ts +3 -0
  148. package/src/agents/language-directive.test.ts +138 -0
  149. package/src/agents/language-directive.ts +121 -0
  150. package/src/agents/magic-context-prompt.language.test.ts +35 -0
  151. package/src/agents/magic-context-prompt.test.ts +292 -0
  152. package/src/agents/magic-context-prompt.ts +182 -0
  153. package/src/agents/permissions.test.ts +252 -0
  154. package/src/agents/permissions.ts +186 -0
  155. package/src/agents/sidekick.ts +1 -0
  156. package/src/agents/smart-note-compiler.ts +1 -0
  157. package/src/config/agent-disable.ts +106 -0
  158. package/src/config/compaction-accessor-guard.test.ts +82 -0
  159. package/src/config/compaction-backcompat.test.ts +52 -0
  160. package/src/config/index.test.ts +904 -0
  161. package/src/config/index.ts +601 -0
  162. package/src/config/migrate-config-location.test.ts +332 -0
  163. package/src/config/migrate-config-location.ts +635 -0
  164. package/src/config/migrate-dreamer-v2.test.ts +287 -0
  165. package/src/config/migrate-dreamer-v2.ts +336 -0
  166. package/src/config/migrate-experimental.ts +159 -0
  167. package/src/config/project-security.test.ts +366 -0
  168. package/src/config/project-security.ts +588 -0
  169. package/src/config/prune-config-leaf.test.ts +78 -0
  170. package/src/config/prune-config-leaf.ts +68 -0
  171. package/src/config/removed-config-keys.test.ts +116 -0
  172. package/src/config/schema/agent-overrides.ts +45 -0
  173. package/src/config/schema/magic-context.test.ts +358 -0
  174. package/src/config/schema/magic-context.ts +1002 -0
  175. package/src/config/transform-mode.test.ts +62 -0
  176. package/src/config/transform-mode.ts +34 -0
  177. package/src/config/variable.test.ts +323 -0
  178. package/src/config/variable.ts +192 -0
  179. package/src/features/magic-context/defaults.ts +1 -0
  180. package/src/features/magic-context/dreamer/cron.ts +243 -0
  181. package/src/features/magic-context/dreamer/task-registry.ts +104 -0
  182. package/src/shared/conflict-detector.test.ts +121 -0
  183. package/src/shared/conflict-detector.ts +50 -3
  184. package/src/shared/conflict-fixer.test.ts +309 -0
  185. package/src/shared/conflict-fixer.ts +82 -5
  186. package/src/shared/context-limit-provenance.ts +6 -0
  187. package/src/shared/escalation-bands.test.ts +23 -0
  188. package/src/shared/escalation-bands.ts +18 -0
  189. package/src/shared/format-threshold.ts +1 -1
  190. package/src/shared/models-dev-cache.test.ts +171 -0
  191. package/src/shared/models-dev-cache.ts +195 -38
  192. package/src/shared/rpc-server.ts +27 -18
  193. package/src/shared/rpc-types.ts +46 -1
  194. package/src/shared/storage-permissions.ts +20 -0
  195. package/src/tui/compaction-off.test.ts +56 -0
  196. package/src/tui/compaction-off.ts +29 -0
  197. package/src/tui/data/context-db.ts +6 -0
  198. package/src/tui/index.tsx +113 -65
  199. package/src/tui/slots/sidebar-content.tsx +139 -83
  200. package/src/tui-compiled/compaction-off.ts +29 -0
  201. package/src/tui-compiled/data/context-db.ts +6 -0
  202. package/src/tui-compiled/index.tsx +558 -455
  203. package/src/tui-compiled/slots/sidebar-content.tsx +237 -161
  204. package/dist/send-session-notification-tghq9gnh.js +0 -11
  205. /package/dist/{index-v7fmc1s2.js → index-ygcng9t8.js} +0 -0
@@ -9,11 +9,14 @@ import { createComponent as _$createComponent } from "opentui:runtime-module:%40
9
9
  /** @jsxImportSource @opentui/solid */
10
10
  // @ts-nocheck
11
11
  import { createMemo } from "opentui:runtime-module:solid-js";
12
- import { createSidebarContentSlot, kickRecompProgressRefresh } from "./slots/sidebar-content";
12
+ import { createSidebarContentSlot, kickRecompProgressRefresh, refreshSidebarSnapshot } from "./slots/sidebar-content";
13
13
  import packageJson from "../../package.json";
14
14
  import { closeRpc, dismissUpgradeReminder, getAnnouncement, getCompartmentCount, getRpcGeneration, initRpcClient, loadEmbedDetail, loadStatusDetail, loadToastDurationMs, markAnnounced, requestRecomp, requestUpgrade } from "./data/context-db";
15
15
  import { startNotificationSocket, stopNotificationSocket } from "./data/notification-socket";
16
16
  import { formatThresholdPercent } from "../shared/format-threshold";
17
+ import { compactionOffSidebarRows, nativeCompactionContextLabel } from "./compaction-off";
18
+ import { isCompactionEnabled } from "../config/agent-disable";
19
+ import { loadPluginConfig } from "../config";
17
20
  import { detectConflicts } from "../shared/conflict-detector";
18
21
  import { fixConflicts } from "../shared/conflict-fixer";
19
22
  const DEFAULT_TOAST_DURATION_MS = 5000;
@@ -132,6 +135,7 @@ const StatusDialog = props => {
132
135
  const theme = createMemo(() => props.api.theme.current);
133
136
  const t = () => theme();
134
137
  const s = () => props.s;
138
+ const compactionOff = () => s().compaction_enabled === false;
135
139
 
136
140
  // Prefer the RPC-provided model context limit (what the sidebar shows) so the
137
141
  // two surfaces never disagree. Fall back to deriving from usage% only when the
@@ -169,7 +173,7 @@ const StatusDialog = props => {
169
173
  tokens: d.docsTokens,
170
174
  color: COLORS.docs
171
175
  });
172
- if (d.compartmentTokens > 0) segs.push({
176
+ if (!compactionOff() && d.compartmentTokens > 0) segs.push({
173
177
  label: "Compartments",
174
178
  tokens: d.compartmentTokens,
175
179
  color: COLORS.compartments,
@@ -227,45 +231,19 @@ const StatusDialog = props => {
227
231
  _el$0 = _$createTextNode(`v`),
228
232
  _el$1 = _$createElement("box"),
229
233
  _el$10 = _$createElement("text"),
230
- _el$11 = _$createElement("b"),
231
- _el$12 = _$createTextNode(`%`),
232
- _el$13 = _$createTextNode(` / `),
233
- _el$14 = _$createTextNode(`%`),
234
- _el$15 = _$createElement("text"),
235
- _el$16 = _$createTextNode(` / `),
236
- _el$17 = _$createTextNode(` tokens`),
237
- _el$18 = _$createElement("box"),
238
- _el$19 = _$createElement("box"),
239
- _el$20 = _$createElement("box"),
240
- _el$21 = _$createElement("box"),
241
- _el$22 = _$createElement("text"),
242
- _el$23 = _$createElement("b"),
243
- _el$25 = _$createElement("box"),
244
- _el$26 = _$createElement("text"),
245
- _el$27 = _$createElement("b"),
246
- _el$29 = _$createElement("box"),
247
- _el$30 = _$createElement("text"),
248
- _el$31 = _$createElement("b"),
249
- _el$33 = _$createElement("box"),
250
- _el$34 = _$createElement("text"),
251
- _el$35 = _$createElement("b"),
252
- _el$37 = _$createElement("box"),
253
- _el$38 = _$createElement("text"),
254
- _el$39 = _$createElement("b"),
255
- _el$41 = _$createElement("box"),
256
- _el$42 = _$createElement("text"),
257
- _el$43 = _$createElement("b"),
258
- _el$45 = _$createElement("box"),
259
- _el$46 = _$createElement("text"),
260
- _el$47 = _$createElement("b"),
261
- _el$49 = _$createElement("box"),
262
- _el$50 = _$createElement("text");
234
+ _el$11 = _$createTextNode(` / `),
235
+ _el$12 = _$createTextNode(` tokens`),
236
+ _el$13 = _$createElement("box"),
237
+ _el$14 = _$createElement("box"),
238
+ _el$15 = _$createElement("box"),
239
+ _el$16 = _$createElement("box"),
240
+ _el$17 = _$createElement("text");
263
241
  _$insertNode(_el$4, _el$5);
264
242
  _$insertNode(_el$4, _el$1);
265
- _$insertNode(_el$4, _el$18);
266
- _$insertNode(_el$4, _el$19);
267
- _$insertNode(_el$4, _el$20);
268
- _$insertNode(_el$4, _el$49);
243
+ _$insertNode(_el$4, _el$13);
244
+ _$insertNode(_el$4, _el$14);
245
+ _$insertNode(_el$4, _el$15);
246
+ _$insertNode(_el$4, _el$16);
269
247
  _$setProp(_el$4, "flexDirection", "column");
270
248
  _$setProp(_el$4, "width", "100%");
271
249
  _$setProp(_el$4, "paddingLeft", 2);
@@ -284,102 +262,120 @@ const StatusDialog = props => {
284
262
  _$insertNode(_el$9, _el$0);
285
263
  _$insert(_el$9, () => packageJson.version, null);
286
264
  _$insertNode(_el$1, _el$10);
287
- _$insertNode(_el$1, _el$15);
288
265
  _$setProp(_el$1, "flexDirection", "row");
289
266
  _$setProp(_el$1, "justifyContent", "space-between");
290
267
  _$setProp(_el$1, "width", "100%");
268
+ _$insert(_el$1, (() => {
269
+ var _c$ = _$memo(() => !!compactionOff());
270
+ return () => _c$() ? (() => {
271
+ var _el$19 = _$createElement("text"),
272
+ _el$20 = _$createElement("b");
273
+ _$insertNode(_el$19, _el$20);
274
+ _$insert(_el$20, () => nativeCompactionContextLabel(s()));
275
+ _$effect(_$p => _$setProp(_el$19, "fg", t().accent, _$p));
276
+ return _el$19;
277
+ })() : (() => {
278
+ var _el$21 = _$createElement("text"),
279
+ _el$22 = _$createElement("b"),
280
+ _el$23 = _$createTextNode(`%`),
281
+ _el$24 = _$createTextNode(` / `),
282
+ _el$25 = _$createTextNode(`%`);
283
+ _$insertNode(_el$21, _el$22);
284
+ _$insertNode(_el$21, _el$24);
285
+ _$insertNode(_el$21, _el$25);
286
+ _$insertNode(_el$22, _el$23);
287
+ _$insert(_el$22, () => s().usagePercentage.toFixed(1), _el$23);
288
+ _$insert(_el$21, () => formatThresholdPercent(s().executeThreshold), _el$25);
289
+ _$insert(_el$21, () => s().executeThresholdClamped ? "*" : "", null);
290
+ _$effect(_$p => _$setProp(_el$21, "fg", s().usagePercentage >= 80 ? t().error : s().usagePercentage >= 65 ? t().warning : t().accent, _$p));
291
+ return _el$21;
292
+ })();
293
+ })(), _el$10);
291
294
  _$insertNode(_el$10, _el$11);
292
- _$insertNode(_el$10, _el$13);
293
- _$insertNode(_el$10, _el$14);
294
- _$insertNode(_el$11, _el$12);
295
- _$insert(_el$11, () => s().usagePercentage.toFixed(1), _el$12);
296
- _$insert(_el$10, () => formatThresholdPercent(s().executeThreshold), _el$14);
297
- _$insert(_el$10, () => s().executeThresholdClamped ? "*" : "", null);
298
- _$insertNode(_el$15, _el$16);
299
- _$insertNode(_el$15, _el$17);
300
- _$insert(_el$15, () => fmt(s().inputTokens), _el$16);
301
- _$insert(_el$15, (() => {
302
- var _c$ = _$memo(() => contextLimit() > 0);
303
- return () => _c$() ? fmt(contextLimit()) : "?";
304
- })(), _el$17);
305
- _$setProp(_el$18, "width", "100%");
306
- _$setProp(_el$18, "flexDirection", "row");
307
- _$setProp(_el$18, "height", 1);
308
- _$insert(_el$18, () => barSegments().map(seg => (() => {
309
- var _el$52 = _$createElement("box");
310
- _$setProp(_el$52, "flexBasis", 0);
311
- _$setProp(_el$52, "height", 1);
295
+ _$insertNode(_el$10, _el$12);
296
+ _$insert(_el$10, () => fmt(s().inputTokens), _el$11);
297
+ _$insert(_el$10, (() => {
298
+ var _c$2 = _$memo(() => contextLimit() > 0);
299
+ return () => _c$2() ? fmt(contextLimit()) : "?";
300
+ })(), _el$12);
301
+ _$setProp(_el$13, "width", "100%");
302
+ _$setProp(_el$13, "flexDirection", "row");
303
+ _$setProp(_el$13, "height", 1);
304
+ _$insert(_el$13, () => barSegments().map(seg => (() => {
305
+ var _el$26 = _$createElement("box");
306
+ _$setProp(_el$26, "flexBasis", 0);
307
+ _$setProp(_el$26, "height", 1);
312
308
  _$effect(_p$ => {
313
- var _v$13 = seg.label,
314
- _v$14 = Math.max(1, seg.tokens),
315
- _v$15 = seg.color;
316
- _v$13 !== _p$.e && (_p$.e = _$setProp(_el$52, "key", _v$13, _p$.e));
317
- _v$14 !== _p$.t && (_p$.t = _$setProp(_el$52, "flexGrow", _v$14, _p$.t));
318
- _v$15 !== _p$.a && (_p$.a = _$setProp(_el$52, "backgroundColor", _v$15, _p$.a));
309
+ var _v$7 = seg.label,
310
+ _v$8 = Math.max(1, seg.tokens),
311
+ _v$9 = seg.color;
312
+ _v$7 !== _p$.e && (_p$.e = _$setProp(_el$26, "key", _v$7, _p$.e));
313
+ _v$8 !== _p$.t && (_p$.t = _$setProp(_el$26, "flexGrow", _v$8, _p$.t));
314
+ _v$9 !== _p$.a && (_p$.a = _$setProp(_el$26, "backgroundColor", _v$9, _p$.a));
319
315
  return _p$;
320
316
  }, {
321
317
  e: undefined,
322
318
  t: undefined,
323
319
  a: undefined
324
320
  });
325
- return _el$52;
321
+ return _el$26;
326
322
  })()));
327
- _$setProp(_el$19, "flexDirection", "column");
328
- _$insert(_el$19, () => breakdownSegments().segs.map(seg => {
323
+ _$setProp(_el$14, "flexDirection", "column");
324
+ _$insert(_el$14, () => breakdownSegments().segs.map(seg => {
329
325
  const pct = (seg.tokens / breakdownSegments().total * 100).toFixed(1);
330
326
  return (() => {
331
- var _el$53 = _$createElement("box"),
332
- _el$54 = _$createElement("text"),
333
- _el$55 = _$createTextNode(` `),
334
- _el$56 = _$createElement("text"),
335
- _el$57 = _$createTextNode(` (`),
336
- _el$58 = _$createTextNode(`%)`);
337
- _$insertNode(_el$53, _el$54);
338
- _$insertNode(_el$53, _el$56);
339
- _$setProp(_el$53, "width", "100%");
340
- _$setProp(_el$53, "flexDirection", "row");
341
- _$setProp(_el$53, "justifyContent", "space-between");
342
- _$insertNode(_el$54, _el$55);
343
- _$insert(_el$54, () => seg.label, _el$55);
344
- _$insert(_el$54, () => seg.detail ?? "", null);
345
- _$insertNode(_el$56, _el$57);
346
- _$insertNode(_el$56, _el$58);
347
- _$insert(_el$56, () => fmt(seg.tokens), _el$57);
348
- _$insert(_el$56, pct, _el$58);
327
+ var _el$27 = _$createElement("box"),
328
+ _el$28 = _$createElement("text"),
329
+ _el$29 = _$createTextNode(` `),
330
+ _el$30 = _$createElement("text"),
331
+ _el$31 = _$createTextNode(` (`),
332
+ _el$32 = _$createTextNode(`%)`);
333
+ _$insertNode(_el$27, _el$28);
334
+ _$insertNode(_el$27, _el$30);
335
+ _$setProp(_el$27, "width", "100%");
336
+ _$setProp(_el$27, "flexDirection", "row");
337
+ _$setProp(_el$27, "justifyContent", "space-between");
338
+ _$insertNode(_el$28, _el$29);
339
+ _$insert(_el$28, () => seg.label, _el$29);
340
+ _$insert(_el$28, () => seg.detail ?? "", null);
341
+ _$insertNode(_el$30, _el$31);
342
+ _$insertNode(_el$30, _el$32);
343
+ _$insert(_el$30, () => fmt(seg.tokens), _el$31);
344
+ _$insert(_el$30, pct, _el$32);
349
345
  _$effect(_p$ => {
350
- var _v$16 = seg.label,
351
- _v$17 = seg.color,
352
- _v$18 = t().textMuted;
353
- _v$16 !== _p$.e && (_p$.e = _$setProp(_el$53, "key", _v$16, _p$.e));
354
- _v$17 !== _p$.t && (_p$.t = _$setProp(_el$54, "fg", _v$17, _p$.t));
355
- _v$18 !== _p$.a && (_p$.a = _$setProp(_el$56, "fg", _v$18, _p$.a));
346
+ var _v$0 = seg.label,
347
+ _v$1 = seg.color,
348
+ _v$10 = t().textMuted;
349
+ _v$0 !== _p$.e && (_p$.e = _$setProp(_el$27, "key", _v$0, _p$.e));
350
+ _v$1 !== _p$.t && (_p$.t = _$setProp(_el$28, "fg", _v$1, _p$.t));
351
+ _v$10 !== _p$.a && (_p$.a = _$setProp(_el$30, "fg", _v$10, _p$.a));
356
352
  return _p$;
357
353
  }, {
358
354
  e: undefined,
359
355
  t: undefined,
360
356
  a: undefined
361
357
  });
362
- return _el$53;
358
+ return _el$27;
363
359
  })();
364
360
  }));
365
361
  _$insert(_el$4, (() => {
366
- var _c$2 = _$memo(() => !!s().recompProgress);
367
- return () => _c$2() && (() => {
362
+ var _c$3 = _$memo(() => !!(!compactionOff() && s().recompProgress));
363
+ return () => _c$3() && (() => {
368
364
  const p = s().recompProgress;
369
365
  // Label follows the flow that started the run, so a plain
370
366
  // /ctx-recomp never reads as an "Upgrade" (dogfood 2026-06-04).
371
367
  const verb = p.kind === "upgrade" ? "Upgrade" : p.kind === "embed" ? "Embed" : "Recomp";
372
368
  return (() => {
373
- var _el$59 = _$createElement("box"),
374
- _el$60 = _$createElement("text"),
375
- _el$61 = _$createElement("b");
376
- _$insertNode(_el$59, _el$60);
377
- _$setProp(_el$59, "marginTop", 1);
378
- _$setProp(_el$59, "width", "100%");
379
- _$setProp(_el$59, "flexDirection", "column");
380
- _$insertNode(_el$60, _el$61);
381
- _$insert(_el$61, verb);
382
- _$insert(_el$59, () => {
369
+ var _el$33 = _$createElement("box"),
370
+ _el$34 = _$createElement("text"),
371
+ _el$35 = _$createElement("b");
372
+ _$insertNode(_el$33, _el$34);
373
+ _$setProp(_el$33, "marginTop", 1);
374
+ _$setProp(_el$33, "width", "100%");
375
+ _$setProp(_el$33, "flexDirection", "column");
376
+ _$insertNode(_el$34, _el$35);
377
+ _$insert(_el$35, verb);
378
+ _$insert(_el$33, () => {
383
379
  if (p.phase === "recomp") {
384
380
  const frac = p.totalMessages > 0 ? p.processedMessages / p.totalMessages : 0;
385
381
  const width = 24;
@@ -479,335 +475,423 @@ const StatusDialog = props => {
479
475
  }
480
476
  });
481
477
  }, null);
482
- _$effect(_$p => _$setProp(_el$60, "fg", t().text, _$p));
483
- return _el$59;
478
+ _$effect(_$p => _$setProp(_el$34, "fg", t().text, _$p));
479
+ return _el$33;
484
480
  })();
485
481
  })();
486
- })(), _el$20);
487
- _$insertNode(_el$20, _el$21);
488
- _$insertNode(_el$20, _el$37);
489
- _$setProp(_el$20, "flexDirection", "row");
490
- _$setProp(_el$20, "width", "100%");
491
- _$setProp(_el$20, "marginTop", 1);
492
- _$setProp(_el$20, "gap", 4);
493
- _$insertNode(_el$21, _el$22);
494
- _$insertNode(_el$21, _el$25);
495
- _$insertNode(_el$21, _el$29);
496
- _$insertNode(_el$21, _el$33);
497
- _$setProp(_el$21, "flexDirection", "column");
498
- _$setProp(_el$21, "flexGrow", 1);
499
- _$setProp(_el$21, "flexBasis", 0);
500
- _$insertNode(_el$22, _el$23);
501
- _$insertNode(_el$23, _$createTextNode(`Tags`));
502
- _$insert(_el$21, _$createComponent(R, {
503
- get t() {
504
- return t();
505
- },
506
- l: "Active",
507
- get v() {
508
- return `${s().activeTags} (~${fmtBytes(s().activeBytes)})`;
509
- }
510
- }), _el$25);
511
- _$insert(_el$21, _$createComponent(R, {
512
- get t() {
513
- return t();
514
- },
515
- l: "Dropped",
516
- get v() {
517
- return String(s().droppedTags);
518
- }
519
- }), _el$25);
520
- _$insert(_el$21, _$createComponent(R, {
521
- get t() {
522
- return t();
523
- },
524
- l: "Total",
525
- get v() {
526
- return String(s().totalTags);
527
- },
528
- get fg() {
529
- return t().textMuted;
530
- }
531
- }), _el$25);
532
- _$insertNode(_el$25, _el$26);
533
- _$setProp(_el$25, "marginTop", 1);
534
- _$insertNode(_el$26, _el$27);
535
- _$insertNode(_el$27, _$createTextNode(`Pending Queue`));
536
- _$insert(_el$21, _$createComponent(R, {
537
- get t() {
538
- return t();
539
- },
540
- l: "Drops",
541
- get v() {
542
- return String(s().pendingOpsCount);
543
- },
544
- get fg() {
545
- return _$memo(() => s().pendingOpsCount > 0)() ? t().warning : t().textMuted;
546
- }
547
- }), _el$29);
548
- _$insertNode(_el$29, _el$30);
549
- _$setProp(_el$29, "marginTop", 1);
550
- _$insertNode(_el$30, _el$31);
551
- _$insertNode(_el$31, _$createTextNode(`Cache TTL`));
552
- _$insert(_el$21, _$createComponent(R, {
553
- get t() {
554
- return t();
555
- },
556
- l: "Configured",
557
- get v() {
558
- return s().cacheTtl;
559
- }
560
- }), _el$33);
561
- _$insert(_el$21, _$createComponent(R, {
562
- get t() {
563
- return t();
564
- },
565
- l: "Last response",
566
- get v() {
567
- return _$memo(() => s().lastResponseTime > 0)() ? `${Math.round(elapsed() / 1000)}s ago` : "never";
568
- }
569
- }), _el$33);
570
- _$insert(_el$21, _$createComponent(R, {
571
- get t() {
572
- return t();
573
- },
574
- l: "Remaining",
575
- get v() {
576
- return _$memo(() => !!s().cacheExpired)() ? "expired" : `${Math.round(s().cacheRemainingMs / 1000)}s`;
577
- },
578
- get fg() {
579
- return _$memo(() => !!s().cacheExpired)() ? t().warning : t().textMuted;
580
- }
581
- }), _el$33);
582
- _$insert(_el$21, _$createComponent(R, {
583
- get t() {
584
- return t();
585
- },
586
- l: "Auto-execute",
587
- get v() {
588
- return _$memo(() => !!s().cacheExpired)() ? "yes (expired)" : `at TTL or ≥${formatThresholdPercent(s().executeThreshold)}%`;
589
- },
590
- get fg() {
591
- return t().textMuted;
592
- }
593
- }), _el$33);
594
- _$insertNode(_el$33, _el$34);
595
- _$setProp(_el$33, "marginTop", 1);
596
- _$insertNode(_el$34, _el$35);
597
- _$insertNode(_el$35, _$createTextNode(`Memory`));
598
- _$insert(_el$21, _$createComponent(R, {
599
- get t() {
600
- return t();
601
- },
602
- l: "Active",
603
- get v() {
604
- return String(s().memoryCount);
605
- },
606
- get fg() {
607
- return t().accent;
608
- }
609
- }), null);
610
- _$insert(_el$21, _$createComponent(R, {
611
- get t() {
612
- return t();
613
- },
614
- l: "Injected",
615
- get v() {
616
- return String(s().memoryBlockCount);
617
- },
618
- get fg() {
619
- return t().textMuted;
620
- }
621
- }), null);
622
- _$insertNode(_el$37, _el$38);
623
- _$insertNode(_el$37, _el$41);
624
- _$insertNode(_el$37, _el$45);
625
- _$setProp(_el$37, "flexDirection", "column");
626
- _$setProp(_el$37, "flexGrow", 1);
627
- _$setProp(_el$37, "flexBasis", 0);
628
- _$insertNode(_el$38, _el$39);
629
- _$insertNode(_el$39, _$createTextNode(`Reductions`));
630
- _$insert(_el$37, _$createComponent(R, {
631
- get t() {
632
- return t();
633
- },
634
- l: "Execute threshold",
635
- get v() {
636
- return `${formatThresholdPercent(s().executeThreshold)}%${s().executeThresholdClamped ? "*" : ""}`;
637
- }
638
- }), _el$41);
639
- _$insert(_el$37, _$createComponent(R, {
640
- get t() {
641
- return t();
642
- },
643
- l: "Last reduce anchor",
644
- get v() {
645
- return `${fmt(s().lastNudgeTokens)} tok`;
646
- }
647
- }), _el$41);
648
- _$insertNode(_el$41, _el$42);
649
- _$setProp(_el$41, "marginTop", 1);
650
- _$insertNode(_el$42, _el$43);
651
- _$insertNode(_el$43, _$createTextNode(`Context Details`));
652
- _$insert(_el$37, _$createComponent(R, {
653
- get t() {
654
- return t();
655
- },
656
- l: "Protected tags",
657
- get v() {
658
- return String(s().protectedTagCount);
659
- },
660
- get fg() {
661
- return t().textMuted;
662
- }
663
- }), _el$45);
664
- _$insert(_el$37, _$createComponent(R, {
665
- get t() {
666
- return t();
667
- },
668
- l: "Subagent",
669
- get v() {
670
- return s().isSubagent ? "yes" : "no";
671
- },
672
- get fg() {
673
- return t().textMuted;
674
- }
675
- }), _el$45);
676
- _$insertNode(_el$45, _el$46);
677
- _$setProp(_el$45, "marginTop", 1);
678
- _$insertNode(_el$46, _el$47);
679
- _$insertNode(_el$47, _$createTextNode(`History Compression`));
680
- _$insert(_el$37, (() => {
681
- var _c$3 = _$memo(() => typeof s().boundaryPresent === "boolean");
682
- return () => _c$3() && _$createComponent(R, {
683
- get t() {
684
- return t();
685
- },
686
- l: "Boundary",
687
- get v() {
688
- return s().boundaryPresent ? "present" : "absent";
689
- }
690
- });
691
- })(), null);
692
- _$insert(_el$37, (() => {
693
- var _c$4 = _$memo(() => s().coverageOrdinal !== undefined);
694
- return () => _c$4() && _$createComponent(R, {
695
- get t() {
696
- return t();
697
- },
698
- l: "Coverage ordinal",
699
- get v() {
700
- return _$memo(() => s().coverageOrdinal == null)() ? "none" : String(s().coverageOrdinal);
701
- }
702
- });
703
- })(), null);
704
- _$insert(_el$37, (() => {
705
- var _c$5 = _$memo(() => typeof s().boundaryPresent === "boolean");
706
- return () => _c$5() && _$createComponent(R, {
707
- get t() {
708
- return t();
709
- },
710
- l: "Compartments",
711
- get v() {
712
- return String(s().compartmentCount);
713
- }
714
- });
715
- })(), null);
716
- _$insert(_el$37, _$createComponent(R, {
717
- get t() {
718
- return t();
719
- },
720
- l: "History block",
721
- get v() {
722
- return `~${fmt(s().historyBlockTokens)} tok`;
723
- }
724
- }), null);
725
- _$insert(_el$37, (() => {
726
- var _c$6 = _$memo(() => s().compressionBudget != null);
727
- return () => _c$6() && _$createComponent(R, {
728
- get t() {
729
- return t();
730
- },
731
- l: "Budget",
732
- get v() {
733
- return `~${fmt(s().compressionBudget)} tok (${s().compressionUsage} used)`;
734
- }
735
- });
736
- })(), null);
737
- _$insert(_el$37, (() => {
738
- var _c$7 = _$memo(() => !!s().lastDreamerRunAt);
739
- return () => _c$7() && _$createComponent(R, {
740
- get t() {
741
- return t();
742
- },
743
- l: "Dreamer",
744
- get v() {
745
- return `last ${relTime(s().lastDreamerRunAt)}`;
746
- },
747
- get fg() {
748
- return t().textMuted;
749
- }
750
- });
751
- })(), null);
482
+ })(), _el$15);
483
+ _$setProp(_el$15, "flexDirection", "row");
484
+ _$setProp(_el$15, "width", "100%");
485
+ _$setProp(_el$15, "marginTop", 1);
486
+ _$setProp(_el$15, "gap", 4);
487
+ _$insert(_el$15, (() => {
488
+ var _c$4 = _$memo(() => !!compactionOff());
489
+ return () => _c$4() ? (() => {
490
+ var _el$36 = _$createElement("box"),
491
+ _el$37 = _$createElement("text"),
492
+ _el$38 = _$createElement("b");
493
+ _$insertNode(_el$36, _el$37);
494
+ _$setProp(_el$36, "flexDirection", "column");
495
+ _$setProp(_el$36, "flexGrow", 1);
496
+ _$setProp(_el$36, "flexBasis", 0);
497
+ _$insertNode(_el$37, _el$38);
498
+ _$insertNode(_el$38, _$createTextNode(`Knowledge`));
499
+ _$insert(_el$36, () => compactionOffSidebarRows(s()).map(row => _$createComponent(R, {
500
+ get t() {
501
+ return t();
502
+ },
503
+ get l() {
504
+ return row.label;
505
+ },
506
+ get v() {
507
+ return row.value;
508
+ },
509
+ get fg() {
510
+ return _$memo(() => row.label === "Memories")() ? t().accent : t().textMuted;
511
+ }
512
+ })), null);
513
+ _$insert(_el$36, (() => {
514
+ var _c$6 = _$memo(() => s().readySmartNoteCount > 0);
515
+ return () => _c$6() && _$createComponent(R, {
516
+ get t() {
517
+ return t();
518
+ },
519
+ l: "Smart Notes",
520
+ get v() {
521
+ return `${s().readySmartNoteCount} ready`;
522
+ },
523
+ get fg() {
524
+ return t().accent;
525
+ }
526
+ });
527
+ })(), null);
528
+ _$insert(_el$36, (() => {
529
+ var _c$7 = _$memo(() => !!s().lastDreamerRunAt);
530
+ return () => _c$7() && _$createComponent(R, {
531
+ get t() {
532
+ return t();
533
+ },
534
+ l: "Dreamer",
535
+ get v() {
536
+ return `last ${relTime(s().lastDreamerRunAt)}`;
537
+ },
538
+ get fg() {
539
+ return t().textMuted;
540
+ }
541
+ });
542
+ })(), null);
543
+ _$effect(_$p => _$setProp(_el$37, "fg", t().text, _$p));
544
+ return _el$36;
545
+ })() : [(() => {
546
+ var _el$40 = _$createElement("box"),
547
+ _el$41 = _$createElement("text"),
548
+ _el$42 = _$createElement("b"),
549
+ _el$44 = _$createElement("box"),
550
+ _el$45 = _$createElement("text"),
551
+ _el$46 = _$createElement("b"),
552
+ _el$48 = _$createElement("box"),
553
+ _el$49 = _$createElement("text"),
554
+ _el$50 = _$createElement("b"),
555
+ _el$52 = _$createElement("box"),
556
+ _el$53 = _$createElement("text"),
557
+ _el$54 = _$createElement("b");
558
+ _$insertNode(_el$40, _el$41);
559
+ _$insertNode(_el$40, _el$44);
560
+ _$insertNode(_el$40, _el$48);
561
+ _$insertNode(_el$40, _el$52);
562
+ _$setProp(_el$40, "flexDirection", "column");
563
+ _$setProp(_el$40, "flexGrow", 1);
564
+ _$setProp(_el$40, "flexBasis", 0);
565
+ _$insertNode(_el$41, _el$42);
566
+ _$insertNode(_el$42, _$createTextNode(`Tags`));
567
+ _$insert(_el$40, _$createComponent(R, {
568
+ get t() {
569
+ return t();
570
+ },
571
+ l: "Active",
572
+ get v() {
573
+ return `${s().activeTags} (~${fmtBytes(s().activeBytes)})`;
574
+ }
575
+ }), _el$44);
576
+ _$insert(_el$40, _$createComponent(R, {
577
+ get t() {
578
+ return t();
579
+ },
580
+ l: "Dropped",
581
+ get v() {
582
+ return String(s().droppedTags);
583
+ }
584
+ }), _el$44);
585
+ _$insert(_el$40, _$createComponent(R, {
586
+ get t() {
587
+ return t();
588
+ },
589
+ l: "Total",
590
+ get v() {
591
+ return String(s().totalTags);
592
+ },
593
+ get fg() {
594
+ return t().textMuted;
595
+ }
596
+ }), _el$44);
597
+ _$insertNode(_el$44, _el$45);
598
+ _$setProp(_el$44, "marginTop", 1);
599
+ _$insertNode(_el$45, _el$46);
600
+ _$insertNode(_el$46, _$createTextNode(`Pending Queue`));
601
+ _$insert(_el$40, _$createComponent(R, {
602
+ get t() {
603
+ return t();
604
+ },
605
+ l: "Drops",
606
+ get v() {
607
+ return String(s().pendingOpsCount);
608
+ },
609
+ get fg() {
610
+ return _$memo(() => s().pendingOpsCount > 0)() ? t().warning : t().textMuted;
611
+ }
612
+ }), _el$48);
613
+ _$insertNode(_el$48, _el$49);
614
+ _$setProp(_el$48, "marginTop", 1);
615
+ _$insertNode(_el$49, _el$50);
616
+ _$insertNode(_el$50, _$createTextNode(`Cache TTL`));
617
+ _$insert(_el$40, _$createComponent(R, {
618
+ get t() {
619
+ return t();
620
+ },
621
+ l: "Configured",
622
+ get v() {
623
+ return s().cacheTtl;
624
+ }
625
+ }), _el$52);
626
+ _$insert(_el$40, _$createComponent(R, {
627
+ get t() {
628
+ return t();
629
+ },
630
+ l: "Last response",
631
+ get v() {
632
+ return _$memo(() => s().lastResponseTime > 0)() ? `${Math.round(elapsed() / 1000)}s ago` : "never";
633
+ }
634
+ }), _el$52);
635
+ _$insert(_el$40, _$createComponent(R, {
636
+ get t() {
637
+ return t();
638
+ },
639
+ l: "Remaining",
640
+ get v() {
641
+ return _$memo(() => !!s().cacheExpired)() ? "expired" : _$memo(() => !!s().cacheNeverExpires)() ? "never expires (always-warm lane)" : `${Math.round(s().cacheRemainingMs / 1000)}s`;
642
+ },
643
+ get fg() {
644
+ return _$memo(() => !!s().cacheExpired)() ? t().warning : t().textMuted;
645
+ }
646
+ }), _el$52);
647
+ _$insert(_el$40, _$createComponent(R, {
648
+ get t() {
649
+ return t();
650
+ },
651
+ l: "Auto-execute",
652
+ get v() {
653
+ return _$memo(() => !!s().cacheExpired)() ? "yes (expired)" : _$memo(() => !!s().cacheNeverExpires)() ? `at ≥${formatThresholdPercent(s().executeThreshold)}%` : `at TTL or ≥${formatThresholdPercent(s().executeThreshold)}%`;
654
+ },
655
+ get fg() {
656
+ return t().textMuted;
657
+ }
658
+ }), _el$52);
659
+ _$insertNode(_el$52, _el$53);
660
+ _$setProp(_el$52, "marginTop", 1);
661
+ _$insertNode(_el$53, _el$54);
662
+ _$insertNode(_el$54, _$createTextNode(`Memory`));
663
+ _$insert(_el$40, _$createComponent(R, {
664
+ get t() {
665
+ return t();
666
+ },
667
+ l: "Active",
668
+ get v() {
669
+ return String(s().memoryCount);
670
+ },
671
+ get fg() {
672
+ return t().accent;
673
+ }
674
+ }), null);
675
+ _$insert(_el$40, _$createComponent(R, {
676
+ get t() {
677
+ return t();
678
+ },
679
+ l: "Injected",
680
+ get v() {
681
+ return String(s().memoryBlockCount);
682
+ },
683
+ get fg() {
684
+ return t().textMuted;
685
+ }
686
+ }), null);
687
+ _$effect(_p$ => {
688
+ var _v$11 = t().text,
689
+ _v$12 = t().text,
690
+ _v$13 = t().text,
691
+ _v$14 = t().text;
692
+ _v$11 !== _p$.e && (_p$.e = _$setProp(_el$41, "fg", _v$11, _p$.e));
693
+ _v$12 !== _p$.t && (_p$.t = _$setProp(_el$45, "fg", _v$12, _p$.t));
694
+ _v$13 !== _p$.a && (_p$.a = _$setProp(_el$49, "fg", _v$13, _p$.a));
695
+ _v$14 !== _p$.o && (_p$.o = _$setProp(_el$53, "fg", _v$14, _p$.o));
696
+ return _p$;
697
+ }, {
698
+ e: undefined,
699
+ t: undefined,
700
+ a: undefined,
701
+ o: undefined
702
+ });
703
+ return _el$40;
704
+ })(), (() => {
705
+ var _el$56 = _$createElement("box"),
706
+ _el$57 = _$createElement("text"),
707
+ _el$58 = _$createElement("b"),
708
+ _el$60 = _$createElement("box"),
709
+ _el$61 = _$createElement("text"),
710
+ _el$62 = _$createElement("b"),
711
+ _el$64 = _$createElement("box"),
712
+ _el$65 = _$createElement("text"),
713
+ _el$66 = _$createElement("b");
714
+ _$insertNode(_el$56, _el$57);
715
+ _$insertNode(_el$56, _el$60);
716
+ _$insertNode(_el$56, _el$64);
717
+ _$setProp(_el$56, "flexDirection", "column");
718
+ _$setProp(_el$56, "flexGrow", 1);
719
+ _$setProp(_el$56, "flexBasis", 0);
720
+ _$insertNode(_el$57, _el$58);
721
+ _$insertNode(_el$58, _$createTextNode(`Reductions`));
722
+ _$insert(_el$56, _$createComponent(R, {
723
+ get t() {
724
+ return t();
725
+ },
726
+ l: "Execute threshold",
727
+ get v() {
728
+ return `${formatThresholdPercent(s().executeThreshold)}%${s().executeThresholdClamped ? "*" : ""}`;
729
+ }
730
+ }), _el$60);
731
+ _$insert(_el$56, _$createComponent(R, {
732
+ get t() {
733
+ return t();
734
+ },
735
+ l: "Last reduce anchor",
736
+ get v() {
737
+ return `${fmt(s().lastNudgeTokens)} tok`;
738
+ }
739
+ }), _el$60);
740
+ _$insertNode(_el$60, _el$61);
741
+ _$setProp(_el$60, "marginTop", 1);
742
+ _$insertNode(_el$61, _el$62);
743
+ _$insertNode(_el$62, _$createTextNode(`Context Details`));
744
+ _$insert(_el$56, _$createComponent(R, {
745
+ get t() {
746
+ return t();
747
+ },
748
+ l: "Protected tags",
749
+ get v() {
750
+ return String(s().protectedTagCount);
751
+ },
752
+ get fg() {
753
+ return t().textMuted;
754
+ }
755
+ }), _el$64);
756
+ _$insert(_el$56, _$createComponent(R, {
757
+ get t() {
758
+ return t();
759
+ },
760
+ l: "Subagent",
761
+ get v() {
762
+ return s().isSubagent ? "yes" : "no";
763
+ },
764
+ get fg() {
765
+ return t().textMuted;
766
+ }
767
+ }), _el$64);
768
+ _$insertNode(_el$64, _el$65);
769
+ _$setProp(_el$64, "marginTop", 1);
770
+ _$insertNode(_el$65, _el$66);
771
+ _$insertNode(_el$66, _$createTextNode(`History Compression`));
772
+ _$insert(_el$56, (() => {
773
+ var _c$8 = _$memo(() => typeof s().boundaryPresent === "boolean");
774
+ return () => _c$8() && _$createComponent(R, {
775
+ get t() {
776
+ return t();
777
+ },
778
+ l: "Boundary",
779
+ get v() {
780
+ return s().boundaryPresent ? "present" : "absent";
781
+ }
782
+ });
783
+ })(), null);
784
+ _$insert(_el$56, (() => {
785
+ var _c$9 = _$memo(() => s().coverageOrdinal !== undefined);
786
+ return () => _c$9() && _$createComponent(R, {
787
+ get t() {
788
+ return t();
789
+ },
790
+ l: "Coverage ordinal",
791
+ get v() {
792
+ return _$memo(() => s().coverageOrdinal == null)() ? "none" : String(s().coverageOrdinal);
793
+ }
794
+ });
795
+ })(), null);
796
+ _$insert(_el$56, (() => {
797
+ var _c$0 = _$memo(() => typeof s().boundaryPresent === "boolean");
798
+ return () => _c$0() && _$createComponent(R, {
799
+ get t() {
800
+ return t();
801
+ },
802
+ l: "Compartments",
803
+ get v() {
804
+ return String(s().compartmentCount);
805
+ }
806
+ });
807
+ })(), null);
808
+ _$insert(_el$56, _$createComponent(R, {
809
+ get t() {
810
+ return t();
811
+ },
812
+ l: "History block",
813
+ get v() {
814
+ return `~${fmt(s().historyBlockTokens)} tok`;
815
+ }
816
+ }), null);
817
+ _$insert(_el$56, (() => {
818
+ var _c$1 = _$memo(() => s().compressionBudget != null);
819
+ return () => _c$1() && _$createComponent(R, {
820
+ get t() {
821
+ return t();
822
+ },
823
+ l: "Budget",
824
+ get v() {
825
+ return `~${fmt(s().compressionBudget)} tok (${s().compressionUsage} used)`;
826
+ }
827
+ });
828
+ })(), null);
829
+ _$insert(_el$56, (() => {
830
+ var _c$10 = _$memo(() => !!s().lastDreamerRunAt);
831
+ return () => _c$10() && _$createComponent(R, {
832
+ get t() {
833
+ return t();
834
+ },
835
+ l: "Dreamer",
836
+ get v() {
837
+ return `last ${relTime(s().lastDreamerRunAt)}`;
838
+ },
839
+ get fg() {
840
+ return t().textMuted;
841
+ }
842
+ });
843
+ })(), null);
844
+ _$effect(_p$ => {
845
+ var _v$15 = t().text,
846
+ _v$16 = t().text,
847
+ _v$17 = t().text;
848
+ _v$15 !== _p$.e && (_p$.e = _$setProp(_el$57, "fg", _v$15, _p$.e));
849
+ _v$16 !== _p$.t && (_p$.t = _$setProp(_el$61, "fg", _v$16, _p$.t));
850
+ _v$17 !== _p$.a && (_p$.a = _$setProp(_el$65, "fg", _v$17, _p$.a));
851
+ return _p$;
852
+ }, {
853
+ e: undefined,
854
+ t: undefined,
855
+ a: undefined
856
+ });
857
+ return _el$56;
858
+ })()];
859
+ })());
752
860
  _$insert(_el$4, (() => {
753
- var _c$8 = _$memo(() => !!s().lastTransformError);
754
- return () => _c$8() && (() => {
755
- var _el$62 = _$createElement("box"),
756
- _el$63 = _$createElement("text"),
757
- _el$64 = _$createTextNode(`⚠ `);
758
- _$insertNode(_el$62, _el$63);
759
- _$setProp(_el$62, "marginTop", 1);
760
- _$setProp(_el$62, "width", "100%");
761
- _$insertNode(_el$63, _el$64);
762
- _$insert(_el$63, () => s().lastTransformError, null);
763
- _$effect(_$p => _$setProp(_el$63, "fg", t().error, _$p));
764
- return _el$62;
861
+ var _c$5 = _$memo(() => !!s().lastTransformError);
862
+ return () => _c$5() && (() => {
863
+ var _el$68 = _$createElement("box"),
864
+ _el$69 = _$createElement("text"),
865
+ _el$70 = _$createTextNode(`⚠ `);
866
+ _$insertNode(_el$68, _el$69);
867
+ _$setProp(_el$68, "marginTop", 1);
868
+ _$setProp(_el$68, "width", "100%");
869
+ _$insertNode(_el$69, _el$70);
870
+ _$insert(_el$69, () => s().lastTransformError, null);
871
+ _$effect(_$p => _$setProp(_el$69, "fg", t().error, _$p));
872
+ return _el$68;
765
873
  })();
766
- })(), _el$49);
767
- _$insertNode(_el$49, _el$50);
768
- _$setProp(_el$49, "marginTop", 1);
769
- _$setProp(_el$49, "justifyContent", "flex-end");
770
- _$setProp(_el$49, "width", "100%");
771
- _$insertNode(_el$50, _$createTextNode(`Esc to close`));
874
+ })(), _el$16);
875
+ _$insertNode(_el$16, _el$17);
876
+ _$setProp(_el$16, "marginTop", 1);
877
+ _$setProp(_el$16, "justifyContent", "flex-end");
878
+ _$setProp(_el$16, "width", "100%");
879
+ _$insertNode(_el$17, _$createTextNode(`Esc to close`));
772
880
  _$effect(_p$ => {
773
881
  var _v$3 = t().accent,
774
882
  _v$4 = t().textMuted,
775
- _v$5 = s().usagePercentage >= 80 ? t().error : s().usagePercentage >= 65 ? t().warning : t().accent,
776
- _v$6 = s().usagePercentage >= 80 ? t().error : s().usagePercentage >= 65 ? t().warning : t().accent,
777
- _v$7 = t().text,
778
- _v$8 = t().text,
779
- _v$9 = t().text,
780
- _v$0 = t().text,
781
- _v$1 = t().text,
782
- _v$10 = t().text,
783
- _v$11 = t().text,
784
- _v$12 = t().textMuted;
883
+ _v$5 = compactionOff() ? t().accent : s().usagePercentage >= 80 ? t().error : s().usagePercentage >= 65 ? t().warning : t().accent,
884
+ _v$6 = t().textMuted;
785
885
  _v$3 !== _p$.e && (_p$.e = _$setProp(_el$6, "fg", _v$3, _p$.e));
786
886
  _v$4 !== _p$.t && (_p$.t = _$setProp(_el$9, "fg", _v$4, _p$.t));
787
887
  _v$5 !== _p$.a && (_p$.a = _$setProp(_el$10, "fg", _v$5, _p$.a));
788
- _v$6 !== _p$.o && (_p$.o = _$setProp(_el$15, "fg", _v$6, _p$.o));
789
- _v$7 !== _p$.i && (_p$.i = _$setProp(_el$22, "fg", _v$7, _p$.i));
790
- _v$8 !== _p$.n && (_p$.n = _$setProp(_el$26, "fg", _v$8, _p$.n));
791
- _v$9 !== _p$.s && (_p$.s = _$setProp(_el$30, "fg", _v$9, _p$.s));
792
- _v$0 !== _p$.h && (_p$.h = _$setProp(_el$34, "fg", _v$0, _p$.h));
793
- _v$1 !== _p$.r && (_p$.r = _$setProp(_el$38, "fg", _v$1, _p$.r));
794
- _v$10 !== _p$.d && (_p$.d = _$setProp(_el$42, "fg", _v$10, _p$.d));
795
- _v$11 !== _p$.l && (_p$.l = _$setProp(_el$46, "fg", _v$11, _p$.l));
796
- _v$12 !== _p$.u && (_p$.u = _$setProp(_el$50, "fg", _v$12, _p$.u));
888
+ _v$6 !== _p$.o && (_p$.o = _$setProp(_el$17, "fg", _v$6, _p$.o));
797
889
  return _p$;
798
890
  }, {
799
891
  e: undefined,
800
892
  t: undefined,
801
893
  a: undefined,
802
- o: undefined,
803
- i: undefined,
804
- n: undefined,
805
- s: undefined,
806
- h: undefined,
807
- r: undefined,
808
- d: undefined,
809
- l: undefined,
810
- u: undefined
894
+ o: undefined
811
895
  });
812
896
  return _el$4;
813
897
  })();
@@ -957,31 +1041,31 @@ const EmbedDialog = props => {
957
1041
  const t = () => theme();
958
1042
  const lines = () => props.detail.statusText.split("\n");
959
1043
  return (() => {
960
- var _el$65 = _$createElement("box"),
961
- _el$66 = _$createElement("box"),
962
- _el$67 = _$createElement("text"),
963
- _el$68 = _$createElement("b");
964
- _$insertNode(_el$65, _el$66);
965
- _$setProp(_el$65, "flexDirection", "column");
966
- _$setProp(_el$65, "width", "100%");
967
- _$setProp(_el$65, "paddingLeft", 2);
968
- _$setProp(_el$65, "paddingRight", 2);
969
- _$setProp(_el$65, "paddingTop", 1);
970
- _$setProp(_el$65, "paddingBottom", 1);
971
- _$insertNode(_el$66, _el$67);
972
- _$setProp(_el$66, "justifyContent", "center");
973
- _$setProp(_el$66, "width", "100%");
974
- _$setProp(_el$66, "marginBottom", 1);
975
- _$insertNode(_el$67, _el$68);
976
- _$insertNode(_el$68, _$createTextNode(`Embedding`));
977
- _$insert(_el$65, () => lines().map(line => (() => {
978
- var _el$70 = _$createElement("text");
979
- _$insert(_el$70, line);
980
- _$effect(_$p => _$setProp(_el$70, "fg", t().text, _$p));
981
- return _el$70;
1044
+ var _el$71 = _$createElement("box"),
1045
+ _el$72 = _$createElement("box"),
1046
+ _el$73 = _$createElement("text"),
1047
+ _el$74 = _$createElement("b");
1048
+ _$insertNode(_el$71, _el$72);
1049
+ _$setProp(_el$71, "flexDirection", "column");
1050
+ _$setProp(_el$71, "width", "100%");
1051
+ _$setProp(_el$71, "paddingLeft", 2);
1052
+ _$setProp(_el$71, "paddingRight", 2);
1053
+ _$setProp(_el$71, "paddingTop", 1);
1054
+ _$setProp(_el$71, "paddingBottom", 1);
1055
+ _$insertNode(_el$72, _el$73);
1056
+ _$setProp(_el$72, "justifyContent", "center");
1057
+ _$setProp(_el$72, "width", "100%");
1058
+ _$setProp(_el$72, "marginBottom", 1);
1059
+ _$insertNode(_el$73, _el$74);
1060
+ _$insertNode(_el$74, _$createTextNode(`Embedding`));
1061
+ _$insert(_el$71, () => lines().map(line => (() => {
1062
+ var _el$76 = _$createElement("text");
1063
+ _$insert(_el$76, line);
1064
+ _$effect(_$p => _$setProp(_el$76, "fg", t().text, _$p));
1065
+ return _el$76;
982
1066
  })()), null);
983
- _$effect(_$p => _$setProp(_el$67, "fg", t().accent, _$p));
984
- return _el$65;
1067
+ _$effect(_$p => _$setProp(_el$73, "fg", t().accent, _$p));
1068
+ return _el$71;
985
1069
  })();
986
1070
  };
987
1071
  async function showEmbedDialog(api, targetSessionId = getSessionId(api)) {
@@ -1047,11 +1131,11 @@ function renderTuiProbeCustomArm(api, result) {
1047
1131
  api.ui.dialog.replace(() => {
1048
1132
  try {
1049
1133
  return (() => {
1050
- var _el$71 = _$createElement("box"),
1051
- _el$72 = _$createElement("text");
1052
- _$insertNode(_el$71, _el$72);
1053
- _$insertNode(_el$72, _$createTextNode(`probe`));
1054
- return _el$71;
1134
+ var _el$77 = _$createElement("box"),
1135
+ _el$78 = _$createElement("text");
1136
+ _$insertNode(_el$77, _el$78);
1137
+ _$insertNode(_el$78, _$createTextNode(`probe`));
1138
+ return _el$77;
1055
1139
  })();
1056
1140
  } catch (error) {
1057
1141
  result.customThrew = probeErrorMessage(error);
@@ -1124,11 +1208,11 @@ function reportTuiProbe(api, result) {
1124
1208
  if (result.customThrew === null) {
1125
1209
  try {
1126
1210
  api.ui.dialog.replace(() => (() => {
1127
- var _el$74 = _$createElement("box"),
1128
- _el$75 = _$createElement("text");
1129
- _$insertNode(_el$74, _el$75);
1130
- _$insert(_el$75, summary);
1131
- return _el$74;
1211
+ var _el$80 = _$createElement("box"),
1212
+ _el$81 = _$createElement("text");
1213
+ _$insertNode(_el$80, _el$81);
1214
+ _$insert(_el$81, summary);
1215
+ return _el$80;
1132
1216
  })());
1133
1217
  return;
1134
1218
  } catch (error) {
@@ -1311,7 +1395,21 @@ const tui = async (api, _options, meta) => {
1311
1395
  const directory = api.state.path.directory ?? "";
1312
1396
  // A conflicted installation intentionally has no server. Gate before RPC
1313
1397
  // discovery or socket startup so disabled installs perform no idle work.
1314
- const conflictResult = detectConflicts(directory);
1398
+ // The resolved MC compaction mode is threaded in explicitly via the same
1399
+ // loader + accessor the plugin boot uses, so the TUI never re-derives the
1400
+ // compaction decision from directory alone. On config load failure the
1401
+ // accessor resolves default-on (mode-on), preserving today's conflict
1402
+ // gate rather than silently skipping the check.
1403
+ let pluginConfig;
1404
+ try {
1405
+ pluginConfig = loadPluginConfig(directory);
1406
+ } catch {
1407
+ // Config load failure: fail toward mode-on (today's behavior) by
1408
+ // leaving pluginConfig undefined so isCompactionEnabled defaults true.
1409
+ }
1410
+ const conflictResult = detectConflicts(directory, {
1411
+ compactionEnabled: isCompactionEnabled(pluginConfig ?? {})
1412
+ });
1315
1413
  if (conflictResult.hasConflict) {
1316
1414
  showConflictDialog(api, directory, conflictResult.reasons, conflictResult.conflicts);
1317
1415
  return;
@@ -1381,6 +1479,11 @@ const tui = async (api, _options, meta) => {
1381
1479
  if (action === "show-embed-dialog") {
1382
1480
  return stillActive() && (await showEmbedDialog(api, requestedSessionId));
1383
1481
  }
1482
+ if (action === "refresh-sidebar") {
1483
+ if (!stillActive()) return false;
1484
+ refreshSidebarSnapshot();
1485
+ return true;
1486
+ }
1384
1487
  if (action === "wrapup-progress-kick") {
1385
1488
  // /ctx-wrapup blocks its command turn and fires no message events, so
1386
1489
  // the sidebar poll would never notice the run. Kick the fast progress