@retaw106/mmc-oc 2.2.0 → 2.3.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 (211) hide show
  1. package/dist/cli.js +2 -2
  2. package/dist/config/deprecated-config.d.ts +4 -0
  3. package/dist/config/deprecated-config.d.ts.map +1 -0
  4. package/dist/config/index.d.ts.map +1 -1
  5. package/dist/config/project-security.d.ts +2 -2
  6. package/dist/config/schema/magic-context.d.ts +3 -3
  7. package/dist/config/schema/magic-context.d.ts.map +1 -1
  8. package/dist/config-init.js +2 -2
  9. package/dist/{context-mrvm92n8.js → context-wt7g4f8k.js} +1641 -1543
  10. package/dist/{derive-budgets-rjjz5f7y.js → derive-budgets-s1p37t2g.js} +2 -2
  11. package/dist/features/magic-context/compaction-marker.d.ts.map +1 -1
  12. package/dist/features/magic-context/historian-failure-reason.d.ts +7 -0
  13. package/dist/features/magic-context/historian-failure-reason.d.ts.map +1 -0
  14. package/dist/features/magic-context/message-index-async.d.ts +21 -3
  15. package/dist/features/magic-context/message-index-async.d.ts.map +1 -1
  16. package/dist/features/magic-context/message-index.d.ts +7 -1
  17. package/dist/features/magic-context/message-index.d.ts.map +1 -1
  18. package/dist/features/magic-context/migrations.d.ts.map +1 -1
  19. package/dist/features/magic-context/pi-content-decisions.d.ts +7 -1
  20. package/dist/features/magic-context/pi-content-decisions.d.ts.map +1 -1
  21. package/dist/features/magic-context/search.d.ts +29 -0
  22. package/dist/features/magic-context/search.d.ts.map +1 -1
  23. package/dist/features/magic-context/storage-clone.d.ts +2 -0
  24. package/dist/features/magic-context/storage-clone.d.ts.map +1 -1
  25. package/dist/features/magic-context/storage-compartment-history-version.d.ts +4 -0
  26. package/dist/features/magic-context/storage-compartment-history-version.d.ts.map +1 -0
  27. package/dist/features/magic-context/storage-db.d.ts +1 -1
  28. package/dist/features/magic-context/storage-db.d.ts.map +1 -1
  29. package/dist/features/magic-context/storage-historian-runs.d.ts.map +1 -1
  30. package/dist/features/magic-context/storage-meta-persisted.d.ts +23 -5
  31. package/dist/features/magic-context/storage-meta-persisted.d.ts.map +1 -1
  32. package/dist/features/magic-context/storage-meta-session.d.ts +7 -1
  33. package/dist/features/magic-context/storage-meta-session.d.ts.map +1 -1
  34. package/dist/features/magic-context/storage-session-tables.d.ts +5 -1
  35. package/dist/features/magic-context/storage-session-tables.d.ts.map +1 -1
  36. package/dist/features/magic-context/storage-tag-identity-revision.d.ts +50 -0
  37. package/dist/features/magic-context/storage-tag-identity-revision.d.ts.map +1 -0
  38. package/dist/features/magic-context/storage-tags.d.ts +155 -5
  39. package/dist/features/magic-context/storage-tags.d.ts.map +1 -1
  40. package/dist/features/magic-context/tagger.d.ts +2 -0
  41. package/dist/features/magic-context/tagger.d.ts.map +1 -1
  42. package/dist/features/magic-context/transform-decision-log.d.ts +3 -0
  43. package/dist/features/magic-context/transform-decision-log.d.ts.map +1 -1
  44. package/dist/hooks/magic-context/active-anthropic-turn.d.ts +2 -0
  45. package/dist/hooks/magic-context/active-anthropic-turn.d.ts.map +1 -1
  46. package/dist/hooks/magic-context/apply-operations.d.ts +7 -0
  47. package/dist/hooks/magic-context/apply-operations.d.ts.map +1 -1
  48. package/dist/hooks/magic-context/auto-search-runner.d.ts +2 -2
  49. package/dist/hooks/magic-context/auto-search-runner.d.ts.map +1 -1
  50. package/dist/hooks/magic-context/heuristic-cleanup.d.ts.map +1 -1
  51. package/dist/hooks/magic-context/history-boundary-repair.d.ts +11 -2
  52. package/dist/hooks/magic-context/history-boundary-repair.d.ts.map +1 -1
  53. package/dist/hooks/magic-context/hook-handlers.d.ts.map +1 -1
  54. package/dist/hooks/magic-context/lkg-measured-request.d.ts +3 -1
  55. package/dist/hooks/magic-context/lkg-measured-request.d.ts.map +1 -1
  56. package/dist/hooks/magic-context/lkg-persist.d.ts +10 -13
  57. package/dist/hooks/magic-context/lkg-persist.d.ts.map +1 -1
  58. package/dist/hooks/magic-context/lkg-recovery-fence.d.ts +62 -0
  59. package/dist/hooks/magic-context/lkg-recovery-fence.d.ts.map +1 -0
  60. package/dist/hooks/magic-context/lkg-recovery-prefix.d.ts +38 -0
  61. package/dist/hooks/magic-context/lkg-recovery-prefix.d.ts.map +1 -0
  62. package/dist/hooks/magic-context/lkg-replay.d.ts +16 -9
  63. package/dist/hooks/magic-context/lkg-replay.d.ts.map +1 -1
  64. package/dist/hooks/magic-context/lkg-slot.d.ts +141 -2
  65. package/dist/hooks/magic-context/lkg-slot.d.ts.map +1 -1
  66. package/dist/hooks/magic-context/opaque-thinking.d.ts +12 -0
  67. package/dist/hooks/magic-context/opaque-thinking.d.ts.map +1 -0
  68. package/dist/hooks/magic-context/pass-outcome.d.ts +1 -0
  69. package/dist/hooks/magic-context/pass-outcome.d.ts.map +1 -1
  70. package/dist/hooks/magic-context/pending-materialization.d.ts +8 -0
  71. package/dist/hooks/magic-context/pending-materialization.d.ts.map +1 -0
  72. package/dist/hooks/magic-context/postprocess-read-cache.d.ts.map +1 -1
  73. package/dist/hooks/magic-context/provider-visible-parts.d.ts +45 -0
  74. package/dist/hooks/magic-context/provider-visible-parts.d.ts.map +1 -0
  75. package/dist/hooks/magic-context/read-session-chunk.d.ts +22 -1
  76. package/dist/hooks/magic-context/read-session-chunk.d.ts.map +1 -1
  77. package/dist/hooks/magic-context/read-session-db.d.ts +3 -0
  78. package/dist/hooks/magic-context/read-session-db.d.ts.map +1 -1
  79. package/dist/hooks/magic-context/read-session-formatting.d.ts +5 -0
  80. package/dist/hooks/magic-context/read-session-formatting.d.ts.map +1 -1
  81. package/dist/hooks/magic-context/read-session-raw.d.ts +123 -1
  82. package/dist/hooks/magic-context/read-session-raw.d.ts.map +1 -1
  83. package/dist/hooks/magic-context/read-session-true-raw-tokens.d.ts.map +1 -1
  84. package/dist/hooks/magic-context/reasoning-budget.d.ts.map +1 -1
  85. package/dist/hooks/magic-context/sentinel.d.ts +41 -1
  86. package/dist/hooks/magic-context/sentinel.d.ts.map +1 -1
  87. package/dist/hooks/magic-context/strict-thinking-prefix.d.ts +8 -0
  88. package/dist/hooks/magic-context/strict-thinking-prefix.d.ts.map +1 -0
  89. package/dist/hooks/magic-context/strip-content.d.ts +38 -24
  90. package/dist/hooks/magic-context/strip-content.d.ts.map +1 -1
  91. package/dist/hooks/magic-context/system-date-refresh.d.ts +29 -0
  92. package/dist/hooks/magic-context/system-date-refresh.d.ts.map +1 -0
  93. package/dist/hooks/magic-context/system-prompt-dates.d.ts +6 -0
  94. package/dist/hooks/magic-context/system-prompt-dates.d.ts.map +1 -0
  95. package/dist/hooks/magic-context/system-prompt-delivery.d.ts +47 -0
  96. package/dist/hooks/magic-context/system-prompt-delivery.d.ts.map +1 -0
  97. package/dist/hooks/magic-context/system-prompt-hash.d.ts +18 -5
  98. package/dist/hooks/magic-context/system-prompt-hash.d.ts.map +1 -1
  99. package/dist/hooks/magic-context/tag-messages.d.ts +19 -0
  100. package/dist/hooks/magic-context/tag-messages.d.ts.map +1 -1
  101. package/dist/hooks/magic-context/tag-owner-warmup.d.ts +14 -0
  102. package/dist/hooks/magic-context/tag-owner-warmup.d.ts.map +1 -0
  103. package/dist/hooks/magic-context/token-count-exact.d.ts +35 -0
  104. package/dist/hooks/magic-context/token-count-exact.d.ts.map +1 -0
  105. package/dist/hooks/magic-context/tool-drop-target.d.ts +2 -0
  106. package/dist/hooks/magic-context/tool-drop-target.d.ts.map +1 -1
  107. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts +7 -0
  108. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
  109. package/dist/hooks/magic-context/transform.d.ts +21 -4
  110. package/dist/hooks/magic-context/transform.d.ts.map +1 -1
  111. package/dist/index-18yrysyj.js +1477 -0
  112. package/dist/{index-g2z2k5m4.js → index-3gj1ak4c.js} +2 -2
  113. package/dist/{index-5cep2r9n.js → index-5ty9rnbx.js} +60 -258
  114. package/dist/{index-amycb7b1.js → index-a5mw0xp3.js} +3 -3
  115. package/dist/{index-1j34a56j.js → index-czba8tw3.js} +266 -32
  116. package/dist/{index-qbkzdkk0.js → index-k59af64t.js} +6 -2
  117. package/dist/{index-53g38ggt.js → index-kmbme1v1.js} +1 -1
  118. package/dist/{index-5b7x80ec.js → index-kw21z5pe.js} +6055 -3973
  119. package/dist/{index-33gprt9g.js → index-yjv8dpht.js} +1 -1
  120. package/dist/{index-btp5tdc8.js → index-z2w1eq3y.js} +840 -456
  121. package/dist/index.d.ts.map +1 -1
  122. package/dist/index.js +114 -2
  123. package/dist/{message-time-backfill-phrwp2fz.js → message-time-backfill-sykevdax.js} +3 -3
  124. package/dist/plugin/rpc-handlers.d.ts.map +1 -1
  125. package/dist/{read-session-chunk-2xm4sc4y.js → read-session-chunk-863d6c06.js} +6 -4
  126. package/dist/recomp-orchestrator-wrjy3qym.js +21 -0
  127. package/dist/{safe-notification-target-ph3xd1ve.js → safe-notification-target-1jkf0m82.js} +2 -2
  128. package/dist/{send-session-notification-rnc4nrsr.js → send-session-notification-cz6ev088.js} +5 -5
  129. package/dist/shared/auto-search-lifecycle.d.ts +14 -0
  130. package/dist/shared/auto-search-lifecycle.d.ts.map +1 -1
  131. package/dist/shared/logger.d.ts.map +1 -1
  132. package/dist/shared/models-dev-cache.d.ts.map +1 -1
  133. package/dist/shared/models-dev-temperature.d.ts +18 -0
  134. package/dist/shared/models-dev-temperature.d.ts.map +1 -0
  135. package/dist/shared/processed-image-eligibility.d.ts +22 -0
  136. package/dist/shared/processed-image-eligibility.d.ts.map +1 -0
  137. package/dist/shared/project-directory-key.d.ts +16 -0
  138. package/dist/shared/project-directory-key.d.ts.map +1 -1
  139. package/dist/shared/recovery-reasoning-prefix.d.ts +9 -0
  140. package/dist/shared/recovery-reasoning-prefix.d.ts.map +1 -0
  141. package/dist/shared/sqlite.d.ts +33 -1
  142. package/dist/shared/sqlite.d.ts.map +1 -1
  143. package/dist/shared/stable-json.d.ts.map +1 -1
  144. package/dist/shared/storage-file-mutex.d.ts +9 -0
  145. package/dist/shared/storage-file-mutex.d.ts.map +1 -0
  146. package/dist/shared/storage-permissions.d.ts +6 -0
  147. package/dist/shared/storage-permissions.d.ts.map +1 -1
  148. package/dist/shared/subagent-temperature.d.ts +46 -0
  149. package/dist/shared/subagent-temperature.d.ts.map +1 -0
  150. package/dist/shared/tag-owner-id.d.ts +1 -0
  151. package/dist/shared/tag-owner-id.d.ts.map +1 -1
  152. package/dist/shared/tag-transcript.d.ts +9 -0
  153. package/dist/shared/tag-transcript.d.ts.map +1 -1
  154. package/dist/shared/window-geometry.d.ts +9 -66
  155. package/dist/shared/window-geometry.d.ts.map +1 -1
  156. package/dist/standalone-plugin-marker.d.ts +8 -0
  157. package/dist/standalone-plugin-marker.d.ts.map +1 -0
  158. package/dist/tools/ctx-expand/search-archive.d.ts +4 -0
  159. package/dist/tools/ctx-expand/search-archive.d.ts.map +1 -0
  160. package/dist/tools/ctx-expand/tools.d.ts.map +1 -1
  161. package/dist/tools/ctx-reduce/constants.d.ts +1 -2
  162. package/dist/tools/ctx-reduce/constants.d.ts.map +1 -1
  163. package/dist/tools/ctx-reduce/tools.d.ts +1 -1
  164. package/dist/tools/ctx-reduce/tools.d.ts.map +1 -1
  165. package/dist/v2/hooks/context.d.ts +1 -1
  166. package/dist/v2/hooks/context.d.ts.map +1 -1
  167. package/dist/v2/hooks/copied-tag-notation.d.ts +19 -0
  168. package/dist/v2/hooks/copied-tag-notation.d.ts.map +1 -0
  169. package/dist/v2/hooks/generate.d.ts +9 -2
  170. package/dist/v2/hooks/generate.d.ts.map +1 -1
  171. package/dist/v2/hooks/payload.d.ts.map +1 -1
  172. package/dist/v2/hooks/system-prompt-response.d.ts +5 -0
  173. package/dist/v2/hooks/system-prompt-response.d.ts.map +1 -0
  174. package/dist/v2/server.d.ts.map +1 -1
  175. package/dist/v2/server.js +34550 -30855
  176. package/dist/web/main.js +373 -19
  177. package/dist/{wrapup-orchestrator-yknks3ad.js → wrapup-orchestrator-bmybc5p5.js} +10 -10
  178. package/package.json +1 -1
  179. package/src/config/deprecated-config.ts +18 -0
  180. package/src/config/index.test.ts +13 -37
  181. package/src/config/index.ts +2 -2
  182. package/src/config/project-security.ts +3 -3
  183. package/src/config/schema/magic-context.ts +10 -6
  184. package/src/shared/auto-search-lifecycle.ts +43 -0
  185. package/src/shared/logger.ts +10 -2
  186. package/src/shared/models-dev-cache.ts +1 -7
  187. package/src/shared/models-dev-temperature.ts +107 -0
  188. package/src/shared/processed-image-eligibility.test.ts +68 -0
  189. package/src/shared/processed-image-eligibility.ts +41 -0
  190. package/src/shared/processed-image-position-review.json +20 -0
  191. package/src/shared/processed-image-position-review.test.ts +19 -0
  192. package/src/shared/project-directory-key.ts +20 -0
  193. package/src/shared/recovery-reasoning-prefix.test.ts +34 -0
  194. package/src/shared/recovery-reasoning-prefix.ts +35 -0
  195. package/src/shared/sqlite-acquisition-routing.test.ts +4 -3
  196. package/src/shared/sqlite-foreground-wait.test.ts +68 -0
  197. package/src/shared/sqlite-pass-scope.test.ts +4 -4
  198. package/src/shared/sqlite-writer-diagnostics.test.ts +52 -12
  199. package/src/shared/sqlite.ts +380 -39
  200. package/src/shared/stable-json.ts +37 -7
  201. package/src/shared/storage-file-mutex.test.ts +50 -0
  202. package/src/shared/storage-file-mutex.ts +130 -0
  203. package/src/shared/storage-permissions.ts +46 -0
  204. package/src/shared/subagent-temperature.ts +110 -0
  205. package/src/shared/tag-owner-id.ts +13 -0
  206. package/src/shared/tag-transcript.ts +118 -0
  207. package/src/shared/window-geometry.test.ts +102 -236
  208. package/src/shared/window-geometry.ts +23 -413
  209. package/dist/index-ramz5kkm.js +0 -514
  210. package/dist/recomp-orchestrator-frmwj9hz.js +0 -21
  211. package/src/shared/__fixtures__/window-overlay.v1.json +0 -337
@@ -4,10 +4,10 @@ import {
4
4
  renderUserFacingFailure,
5
5
  userFacingFailureCode,
6
6
  executeContextRecomp
7
- } from "./index-5b7x80ec.js";
7
+ } from "./index-kw21z5pe.js";
8
8
  import {
9
9
  sessionLog
10
- } from "./index-qbkzdkk0.js";
10
+ } from "./index-k59af64t.js";
11
11
 
12
12
  // src/hooks/magic-context/recomp-orchestrator.ts
13
13
  function resolveLiveModelKey(liveSessionState, sessionId) {
@@ -1,10 +1,9 @@
1
1
  import {
2
2
  getHarness,
3
- getDataDir,
4
3
  getMagicContextStorageDir,
5
4
  log,
6
5
  sessionLog
7
- } from "./index-qbkzdkk0.js";
6
+ } from "./index-k59af64t.js";
8
7
  import {
9
8
  modelRefLookupOrder,
10
9
  localBudget,
@@ -12,8 +11,8 @@ import {
12
11
  } from "./index-x37vg474.js";
13
12
 
14
13
  // src/shared/models-dev-cache.ts
15
- import { readFileSync as readFileSync2 } from "node:fs";
16
- import { join as join3 } from "node:path";
14
+ import { readFileSync } from "node:fs";
15
+ import { join as join2 } from "node:path";
17
16
 
18
17
  // src/shared/storage-permissions.ts
19
18
  import { randomBytes } from "node:crypto";
@@ -21,6 +20,7 @@ import {
21
20
  chmodSync,
22
21
  closeSync,
23
22
  createWriteStream,
23
+ fsyncSync,
24
24
  lstatSync,
25
25
  mkdirSync,
26
26
  openSync,
@@ -46,6 +46,14 @@ function ensureStorageDirectorySync(directory, forcePrivate = false, recursive =
46
46
  ...privateMode ? { mode: 448 } : {}
47
47
  });
48
48
  }
49
+ function ensurePrivateStorageDirectorySync(directory) {
50
+ ensureStorageDirectorySync(directory, true);
51
+ const stat = lstatSync(directory);
52
+ if (!stat.isDirectory() || stat.isSymbolicLink())
53
+ throw new Error("Private storage directory is not a real directory");
54
+ if (process.platform !== "win32")
55
+ chmodSync(directory, 448);
56
+ }
49
57
  function writeStorageFileSync(filePath, content, options = {}) {
50
58
  const { forcePrivate = false, ...writeOptions } = options;
51
59
  const privateMode = forcePrivate || shouldEnforcePrivateStoragePermissions();
@@ -65,6 +73,35 @@ function writeStorageFileAtomicSync(filePath, content, forcePrivate = false) {
65
73
  throw error;
66
74
  }
67
75
  }
76
+ function syncStorageDirectorySync(directory) {
77
+ const fd = openSync(directory, "r");
78
+ try {
79
+ fsyncSync(fd);
80
+ } finally {
81
+ closeSync(fd);
82
+ }
83
+ }
84
+ function writeStorageFileDurableAtomicSync(filePath, content, afterTempSync) {
85
+ const directory = dirname(filePath);
86
+ ensurePrivateStorageDirectorySync(directory);
87
+ const tempPath = `${filePath}.${process.pid}.${randomBytes(12).toString("hex")}.tmp`;
88
+ let fd;
89
+ try {
90
+ fd = openStorageFileSync(tempPath, "wx", true);
91
+ writeFileSync(fd, content, "utf8");
92
+ fsyncSync(fd);
93
+ closeSync(fd);
94
+ fd = undefined;
95
+ afterTempSync?.();
96
+ renameSync(tempPath, filePath);
97
+ syncStorageDirectorySync(directory);
98
+ syncStorageDirectorySync(dirname(directory));
99
+ } finally {
100
+ if (fd !== undefined)
101
+ closeSync(fd);
102
+ rmSync(tempPath, { force: true });
103
+ }
104
+ }
68
105
  function copyStorageFileSync(sourcePath, destinationPath, forcePrivate = false) {
69
106
  ensureStorageDirectorySync(dirname(destinationPath), forcePrivate);
70
107
  const privateMode = forcePrivate || shouldEnforcePrivateStoragePermissions();
@@ -92,6 +129,11 @@ function copyStorageFileSync(sourcePath, destinationPath, forcePrivate = false)
92
129
  closeSync(destinationFd);
93
130
  }
94
131
  }
132
+ function openStorageFileSync(filePath, flags, forcePrivate = false) {
133
+ ensureStorageDirectorySync(dirname(filePath), forcePrivate);
134
+ const privateMode = forcePrivate || shouldEnforcePrivateStoragePermissions();
135
+ return openSync(filePath, flags, privateMode ? 384 : 438);
136
+ }
95
137
  async function writeStorageFileAsync(filePath, content, forcePrivate = false) {
96
138
  const privateMode = forcePrivate || shouldEnforcePrivateStoragePermissions();
97
139
  ensureStorageDirectorySync(dirname(filePath), privateMode);
@@ -143,9 +185,6 @@ function tightenStorageTreeSync(root) {
143
185
  }
144
186
 
145
187
  // src/shared/window-geometry.ts
146
- import { readFileSync } from "node:fs";
147
- import { join as join2 } from "node:path";
148
- var WINDOW_OVERLAY_SCHEMA = "fusiform-window-overlay/v1";
149
188
  var PROMPT_WALL_MARGIN = 4096;
150
189
  var PI_OUTPUT_FLOOR = 4096;
151
190
  var OPENCODE_OUTPUT_CAP = 32000;
@@ -160,241 +199,10 @@ var PROVIDER_GEOMETRY = {
160
199
  google: "separate",
161
200
  "google-antigravity": "separate"
162
201
  };
163
- var GRADES = new Set([
164
- "provider_asserted_runtime",
165
- "measured",
166
- "provider_asserted_doc",
167
- "catalog",
168
- "unknown"
169
- ]);
170
- var UNITS = new Set(["provider", "estimate"]);
171
- var BOUNDARIES = new Set(["Observed", "Asserted", "Corrected"]);
172
- var UNKNOWN_REASONS = new Set([
173
- "placeholder_output_equals_context",
174
- "placeholder_zero",
175
- "never_measured",
176
- "not_single_valued_at_key",
177
- "retracted"
178
- ]);
179
- var NUMERIC_FACT_KEYS = new Set([
180
- "window.advertised",
181
- "window.enforced",
182
- "output.advertised",
183
- "output.enforced",
184
- "output.default"
185
- ]);
186
- var configuredOverlayPath;
187
- var loadedOverlayPath;
188
- var loadedOverlay;
189
202
  var geometryClampLogSeen = new Set;
190
- function isRecord(value) {
191
- return typeof value === "object" && value !== null && !Array.isArray(value);
192
- }
193
203
  function isFinitePositive(value) {
194
204
  return typeof value === "number" && Number.isFinite(value) && value > 0;
195
205
  }
196
- function scalarizeFact(value) {
197
- if (value.kind === "stated")
198
- return isFinitePositive(value.value) ? value.value : undefined;
199
- if (value.kind === "bracket") {
200
- return isFinitePositive(value.at_least) ? value.at_least : undefined;
201
- }
202
- return;
203
- }
204
- function parseFactValue(value) {
205
- if (!isRecord(value) || typeof value.kind !== "string")
206
- return;
207
- if (value.kind === "stated") {
208
- if ((typeof value.value !== "number" || !Number.isFinite(value.value)) && typeof value.value !== "string") {
209
- return;
210
- }
211
- return { kind: "stated", value: value.value };
212
- }
213
- if (value.kind === "bracket") {
214
- const atLeast = value.at_least;
215
- const below = value.below;
216
- if (atLeast === undefined && below === undefined)
217
- return { kind: "bracket" };
218
- if (atLeast !== undefined && !isFinitePositive(atLeast))
219
- return;
220
- if (below !== undefined && !isFinitePositive(below))
221
- return;
222
- if (isFinitePositive(atLeast) && isFinitePositive(below) && below <= atLeast) {
223
- return;
224
- }
225
- return {
226
- kind: "bracket",
227
- ...isFinitePositive(atLeast) ? { at_least: atLeast } : {},
228
- ...isFinitePositive(below) ? { below } : {}
229
- };
230
- }
231
- if (value.kind === "unknown" && UNKNOWN_REASONS.has(value.why)) {
232
- return { kind: "unknown", why: value.why };
233
- }
234
- return;
235
- }
236
- function parseFact(key, value) {
237
- if (!isRecord(value))
238
- return;
239
- const parsedValue = parseFactValue(value.value);
240
- if (!parsedValue || !GRADES.has(value.grade) || !UNITS.has(value.units) || !BOUNDARIES.has(value.boundary) || typeof value.source_ref !== "string" || value.source_ref.length === 0 || typeof value.observed_at !== "string" || value.observed_at.length === 0) {
241
- return;
242
- }
243
- if (NUMERIC_FACT_KEYS.has(key) && parsedValue.kind === "stated" && !isFinitePositive(parsedValue.value)) {
244
- return;
245
- }
246
- if (key === "geometry" && parsedValue.kind === "stated" && !["shared_upfront", "shared_truncating", "separate"].includes(String(parsedValue.value))) {
247
- return;
248
- }
249
- return {
250
- ...value,
251
- value: parsedValue,
252
- grade: value.grade,
253
- units: value.units,
254
- boundary: value.boundary,
255
- source_ref: value.source_ref,
256
- observed_at: value.observed_at
257
- };
258
- }
259
- function parseWindowOverlay(value) {
260
- if (!isRecord(value)) {
261
- return { badCells: 0, refusal: "overlay root is not an object" };
262
- }
263
- if (value.schema !== WINDOW_OVERLAY_SCHEMA) {
264
- return {
265
- badCells: 0,
266
- refusal: `unrecognized schema ${JSON.stringify(value.schema)}`
267
- };
268
- }
269
- if (typeof value.generated_at !== "string" || !Array.isArray(value.minted_provider_ids) || !value.minted_provider_ids.every((id) => typeof id === "string" && id.length > 0) || !Array.isArray(value.cells)) {
270
- return { badCells: 0, refusal: "invalid v1 envelope" };
271
- }
272
- const cells = [];
273
- let badCells = 0;
274
- for (const rawCell of value.cells) {
275
- if (!isRecord(rawCell) || typeof rawCell.provider_id !== "string" || rawCell.provider_id.length === 0 || typeof rawCell.model_id !== "string" || rawCell.model_id.length === 0 || !isRecord(rawCell.facts)) {
276
- badCells++;
277
- continue;
278
- }
279
- const facts = {};
280
- let valid = true;
281
- for (const [key, rawFact] of Object.entries(rawCell.facts)) {
282
- const fact = parseFact(key, rawFact);
283
- if (!fact) {
284
- valid = false;
285
- break;
286
- }
287
- facts[key] = fact;
288
- }
289
- if (!valid) {
290
- badCells++;
291
- continue;
292
- }
293
- cells.push({
294
- provider_id: rawCell.provider_id,
295
- model_id: rawCell.model_id,
296
- facts
297
- });
298
- }
299
- return {
300
- overlay: {
301
- schema: WINDOW_OVERLAY_SCHEMA,
302
- generated_at: value.generated_at,
303
- minted_provider_ids: [...value.minted_provider_ids],
304
- cells
305
- },
306
- badCells
307
- };
308
- }
309
- function defaultWindowOverlayPath() {
310
- return join2(getDataDir(), "fusiform", "window-overlay.json");
311
- }
312
- function readWindowOverlayFile(path, log = (message) => sessionLog("global", message)) {
313
- let raw;
314
- try {
315
- raw = readFileSync(path, "utf8");
316
- } catch (error) {
317
- if (error.code === "ENOENT")
318
- return;
319
- log(`window-overlay: unable to read ${path}; overlay ignored`);
320
- return;
321
- }
322
- let decoded;
323
- try {
324
- decoded = JSON.parse(raw);
325
- } catch {
326
- log(`window-overlay: invalid JSON in ${path}; overlay ignored`);
327
- return;
328
- }
329
- const parsed = parseWindowOverlay(decoded);
330
- if (parsed.refusal) {
331
- log(`window-overlay: ${parsed.refusal} in ${path}; entire overlay ignored`);
332
- return;
333
- }
334
- if (parsed.badCells > 0) {
335
- log(`window-overlay: skipped ${parsed.badCells} invalid cell(s) from ${path}`);
336
- }
337
- return parsed.overlay;
338
- }
339
- function setWindowOverlayPath(path) {
340
- if (configuredOverlayPath === path)
341
- return;
342
- reloadWindowOverlay(path);
343
- }
344
- function reloadWindowOverlay(path) {
345
- configuredOverlayPath = path;
346
- loadedOverlayPath = undefined;
347
- loadedOverlay = undefined;
348
- }
349
- function getWindowOverlay() {
350
- const path = configuredOverlayPath ?? defaultWindowOverlayPath();
351
- if (loadedOverlayPath === path && loadedOverlay !== undefined) {
352
- return loadedOverlay ?? undefined;
353
- }
354
- loadedOverlayPath = path;
355
- loadedOverlay = readWindowOverlayFile(path) ?? null;
356
- return loadedOverlay ?? undefined;
357
- }
358
- function resolveWindowOverlayFacts(providerID, modelID, overlay = getWindowOverlay()) {
359
- if (!overlay)
360
- return;
361
- const modelRefs = modelRefLookupOrder(`${providerID}/${modelID}`);
362
- const providerCandidates = new Set(modelRefs.map((ref) => ref.slice(0, ref.indexOf("/"))));
363
- const modelCandidates = new Set([
364
- modelID,
365
- ...modelRefs.map((ref) => ref.slice(ref.indexOf("/") + 1))
366
- ]);
367
- const colon = modelID.lastIndexOf(":");
368
- if (colon > 0)
369
- modelCandidates.add(modelID.slice(0, colon));
370
- const wildcardFacts = {};
371
- const specificFacts = {};
372
- for (const cell of overlay.cells) {
373
- if (!providerCandidates.has(cell.provider_id))
374
- continue;
375
- if (cell.model_id === "*")
376
- Object.assign(wildcardFacts, cell.facts);
377
- else if (modelCandidates.has(cell.model_id))
378
- Object.assign(specificFacts, cell.facts);
379
- }
380
- const facts = { ...wildcardFacts, ...specificFacts };
381
- return Object.keys(facts).length > 0 ? { facts } : undefined;
382
- }
383
- function numericOverlayFact(overlay, key) {
384
- const fact = overlay?.facts[key];
385
- return fact ? scalarizeFact(fact.value) : undefined;
386
- }
387
- function overlayGeometry(overlay) {
388
- const fact = overlay?.facts.geometry;
389
- if (fact === undefined)
390
- return;
391
- if (fact.value.kind === "unknown")
392
- return { kind: "unknown" };
393
- if (fact.value.kind !== "stated")
394
- return;
395
- const value = fact.value.value;
396
- return value === "shared_upfront" || value === "shared_truncating" || value === "separate" ? { kind: "stated", value } : undefined;
397
- }
398
206
  function placeholderFilteredOutput(output, context) {
399
207
  if (!isFinitePositive(output))
400
208
  return;
@@ -402,8 +210,8 @@ function placeholderFilteredOutput(output, context) {
402
210
  return;
403
211
  return output;
404
212
  }
405
- function mergePositive(overlayValue, providerValue) {
406
- return isFinitePositive(providerValue) ? providerValue : overlayValue;
213
+ function mergePositive(catalogValue, providerValue) {
214
+ return isFinitePositive(providerValue) ? providerValue : catalogValue;
407
215
  }
408
216
  function logGeometryClampOnce(key, message, log) {
409
217
  if (geometryClampLogSeen.has(key))
@@ -417,10 +225,8 @@ function deriveWindowGeometry(providerID, modelID, catalogLimit, options = {}) {
417
225
  const providerLimit = options.providerLimit;
418
226
  const catalogContext = isFinitePositive(catalogLimit?.context) ? catalogLimit.context : undefined;
419
227
  const providerContext = isFinitePositive(providerLimit?.context) ? providerLimit.context : undefined;
420
- const advertised = numericOverlayFact(options.overlay, "window.advertised");
421
- const enforced = numericOverlayFact(options.overlay, "window.enforced");
422
- let softContext = mergePositive(enforced ?? advertised ?? catalogContext, providerContext);
423
- let hardContext = mergePositive(enforced ?? softContext, providerContext);
228
+ let softContext = mergePositive(catalogContext, providerContext);
229
+ let hardContext = mergePositive(softContext, providerContext);
424
230
  const contextCap = isFinitePositive(options.contextCap) ? options.contextCap : undefined;
425
231
  const hasContextCap = contextCap !== undefined;
426
232
  if (contextCap !== undefined) {
@@ -430,13 +236,10 @@ function deriveWindowGeometry(providerID, modelID, catalogLimit, options = {}) {
430
236
  const input = mergePositive(isFinitePositive(catalogLimit?.input) ? catalogLimit.input : undefined, providerLimit?.input);
431
237
  if (!isFinitePositive(softContext) && !isFinitePositive(input))
432
238
  return;
433
- const catalogOutput = options.overlay === undefined && options.providerLimit === undefined ? isFinitePositive(catalogLimit?.output) ? catalogLimit.output : undefined : placeholderFilteredOutput(catalogLimit?.output, softContext);
434
- const overlayOutput = placeholderFilteredOutput(numericOverlayFact(options.overlay, "output.enforced") ?? numericOverlayFact(options.overlay, "output.default") ?? numericOverlayFact(options.overlay, "output.advertised"), softContext);
239
+ const catalogOutput = options.providerLimit === undefined ? isFinitePositive(catalogLimit?.output) ? catalogLimit.output : undefined : placeholderFilteredOutput(catalogLimit?.output, softContext);
435
240
  const providerOutput = placeholderFilteredOutput(providerLimit?.output, softContext);
436
- const output = providerOutput ?? overlayOutput ?? catalogOutput;
437
- const geometryFact = overlayGeometry(options.overlay);
438
- const geometry = geometryFact?.kind === "stated" ? geometryFact.value : geometryFact?.kind === "unknown" ? "shared_upfront" : PROVIDER_GEOMETRY[providerID] ?? "shared_upfront";
439
- const geometryOverride = geometryFact?.kind === "stated" ? geometryFact.value : undefined;
241
+ const output = providerOutput ?? catalogOutput;
242
+ const geometry = PROVIDER_GEOMETRY[providerID] ?? "shared_upfront";
440
243
  const preCarvedInput = isFinitePositive(input) && (!isFinitePositive(softContext) || input < softContext);
441
244
  const outputReserveOverride = typeof options.outputReserveOverride === "number" && Number.isFinite(options.outputReserveOverride) && options.outputReserveOverride >= 0 ? options.outputReserveOverride : undefined;
442
245
  let derivationWindow = softContext ?? input;
@@ -464,14 +267,14 @@ function deriveWindowGeometry(providerID, modelID, catalogLimit, options = {}) {
464
267
  reserveSource = "output_catalog";
465
268
  }
466
269
  } else if (isFinitePositive(softContext)) {
467
- if (geometry === "separate" && (options.overlay === undefined || options.harness === "pi" || geometryOverride !== undefined)) {
270
+ if (geometry === "separate") {
468
271
  softReserve = 0;
469
272
  reserveSource = "none";
470
273
  } else {
471
274
  softReserve = output ?? 0;
472
275
  reserveSource = output === undefined ? "none" : "output_catalog";
473
276
  const cap = softContext * OUTPUT_RESERVE_CAP_RATIO;
474
- softReserve = Math.min(softReserve, options.harness === "pi" || options.overlay === undefined ? cap : Math.min(cap, OPENCODE_OUTPUT_CAP));
277
+ softReserve = Math.min(softReserve, cap);
475
278
  }
476
279
  const floor = Math.max(MIN_PLAUSIBLE_CONTEXT_LIMIT, softContext * 0.5);
477
280
  const flooredReserve = Math.min(softReserve, Math.max(0, softContext - floor));
@@ -486,7 +289,7 @@ function deriveWindowGeometry(providerID, modelID, catalogLimit, options = {}) {
486
289
  const hardWindow = hardContext ?? softContext ?? input;
487
290
  if (!isFinitePositive(hardWindow))
488
291
  return;
489
- const windowSource = hasContextCap ? "detected" : providerContext !== undefined ? "provider" : enforced !== undefined || advertised !== undefined ? "overlay" : "catalog";
292
+ const windowSource = hasContextCap ? "detected" : providerContext !== undefined ? "provider" : "catalog";
490
293
  let usableHard;
491
294
  if (geometry === "separate") {
492
295
  usableHard = hardWindow;
@@ -502,7 +305,7 @@ function deriveWindowGeometry(providerID, modelID, catalogLimit, options = {}) {
502
305
  }
503
306
  usableHard = Math.max(MIN_PLAUSIBLE_CONTEXT_LIMIT, Math.floor(usableHard));
504
307
  if (usableHard < usableSoft) {
505
- logGeometryClampOnce(`${providerID}/${modelID}|${usableSoft}|${usableHard}`, `usable hard limit clamped for ${providerID}/${modelID}: ${usableHard} → ${usableSoft} (overlay/provider inversion)`, options.log);
308
+ logGeometryClampOnce(`${providerID}/${modelID}|${usableSoft}|${usableHard}`, `usable hard limit clamped for ${providerID}/${modelID}: ${usableHard} → ${usableSoft} (window limit inversion)`, options.log);
506
309
  usableHard = usableSoft;
507
310
  }
508
311
  const resolvedWindow = derivationWindow ?? usableSoft;
@@ -569,14 +372,14 @@ var apiCache = null;
569
372
  var apiLoadedAt = 0;
570
373
  var persistSeedLoaded = false;
571
374
  function persistFilePath() {
572
- return join3(getMagicContextStorageDir(), `model-context-limits-${getHarness()}.json`);
375
+ return join2(getMagicContextStorageDir(), `model-context-limits-${getHarness()}.json`);
573
376
  }
574
377
  function loadPersistedApiCacheOnce() {
575
378
  if (persistSeedLoaded || apiCache !== null)
576
379
  return;
577
380
  persistSeedLoaded = true;
578
381
  try {
579
- const raw = readFileSync2(persistFilePath(), "utf-8");
382
+ const raw = readFileSync(persistFilePath(), "utf-8");
580
383
  const obj = JSON.parse(raw);
581
384
  const map = new Map;
582
385
  for (const [key, persisted] of Object.entries(obj)) {
@@ -766,7 +569,6 @@ function getSdkWindowGeometry(providerID, modelID, detectedContextLimit, options
766
569
  input: metadata.inputLimit,
767
570
  output: metadata.outputLimit
768
571
  }, {
769
- overlay: resolveWindowOverlayFacts(providerID, modelID, getWindowOverlay()),
770
572
  outputReserveOverride: resolveOutputReserve(providerID, modelID),
771
573
  harness: options?.harness ?? "opencode",
772
574
  contextCap: promptOnlyDetected === undefined && isFinitePositive2(detectedContextLimit) ? detectedContextLimit : undefined
@@ -905,4 +707,4 @@ function producerSourceLocalBudget2(providerTokens, modelKey) {
905
707
  return ratio === 1 ? providerTokens : localBudget(providerTokens, ratio);
906
708
  }
907
709
 
908
- export { shouldEnforcePrivateStoragePermissions, ensureStorageDirectorySync, writeStorageFileSync, writeStorageFileAtomicSync, copyStorageFileSync, writeStorageFileAsync, createStorageWriteStream, tightenStorageTreeSync, catalogOutputReserve, setWindowOverlayPath, hasTrustedAbsoluteWall, applyProvenInputFloor, isSaneLimit, setOutputReserveConfig, resolveLimit, refreshModelLimitsFromApi, getSdkWindowGeometry, getSdkContextLimit, getSdkOutputLimit, getModelsDevCacheState, deriveTriggerBudget2, deriveHistorianChunkTokens2, resolveKnownHistorianContextLimit2, resolveHistorianProducerLimits2, resolveHistorianContextLimit2, producerSourceLocalBudget2 };
710
+ export { shouldEnforcePrivateStoragePermissions, ensureStorageDirectorySync, ensurePrivateStorageDirectorySync, writeStorageFileSync, writeStorageFileAtomicSync, syncStorageDirectorySync, writeStorageFileDurableAtomicSync, copyStorageFileSync, writeStorageFileAsync, createStorageWriteStream, tightenStorageTreeSync, catalogOutputReserve, hasTrustedAbsoluteWall, applyProvenInputFloor, isSaneLimit, setOutputReserveConfig, resolveLimit, refreshModelLimitsFromApi, getSdkWindowGeometry, getSdkContextLimit, getSdkOutputLimit, getModelsDevCacheState, deriveTriggerBudget2, deriveHistorianChunkTokens2, resolveKnownHistorianContextLimit2, resolveHistorianProducerLimits2, resolveHistorianContextLimit2, producerSourceLocalBudget2 };
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  sessionLog
3
- } from "./index-qbkzdkk0.js";
3
+ } from "./index-k59af64t.js";
4
4
  import {
5
5
  shouldHoldIgnoredNotification
6
- } from "./index-ramz5kkm.js";
6
+ } from "./index-18yrysyj.js";
7
7
 
8
8
  // src/shared/error-message.ts
9
9
  function getErrorMessage(error) {
@@ -180,7 +180,7 @@ async function sendIgnoredMessageNow(client, sessionId, text, params, forcePersi
180
180
  holdIgnoredNotification({ client, sessionId, text, params, forcePersist }, "during target checks");
181
181
  return "queued";
182
182
  }
183
- const { waitForSafeNotificationTarget } = await import("./safe-notification-target-ph3xd1ve.js");
183
+ const { waitForSafeNotificationTarget } = await import("./safe-notification-target-1jkf0m82.js");
184
184
  if (await waitForSafeNotificationTarget(client, sessionId) === "skip") {
185
185
  sessionLog(sessionId, "notification skipped (session not titled yet)");
186
186
  return "skipped";