@cortexkit/opencode-magic-context 0.37.0 → 0.38.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.
- package/README.md +2 -0
- package/dist/{derive-budgets-0f8xpyw2.js → derive-budgets-da4yg3tz.js} +1 -1
- package/dist/features/magic-context/dreamer/classify-prompt.d.ts +5 -1
- package/dist/features/magic-context/dreamer/classify-prompt.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/classify.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/manifest-parser.d.ts +8 -0
- package/dist/features/magic-context/dreamer/manifest-parser.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/map-memories-prompt.d.ts +7 -1
- package/dist/features/magic-context/dreamer/map-memories-prompt.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/map-memories.d.ts +18 -0
- package/dist/features/magic-context/dreamer/map-memories.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/storage-dream-runs.d.ts +5 -0
- package/dist/features/magic-context/dreamer/storage-dream-runs.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/task-executor.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/verify-prompt.d.ts +5 -1
- package/dist/features/magic-context/dreamer/verify-prompt.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/verify.d.ts.map +1 -1
- package/dist/features/magic-context/fail-closed-block.d.ts +6 -1
- package/dist/features/magic-context/fail-closed-block.d.ts.map +1 -1
- package/dist/features/magic-context/reclaim-protection.d.ts +13 -0
- package/dist/features/magic-context/reclaim-protection.d.ts.map +1 -0
- package/dist/features/magic-context/storage-db.d.ts +6 -1
- package/dist/features/magic-context/storage-db.d.ts.map +1 -1
- package/dist/features/magic-context/storage-meta-persisted.d.ts +7 -6
- package/dist/features/magic-context/storage-meta-persisted.d.ts.map +1 -1
- package/dist/features/magic-context/storage-tags.d.ts +13 -5
- package/dist/features/magic-context/storage-tags.d.ts.map +1 -1
- package/dist/hooks/auto-update-checker/checker.d.ts +8 -1
- package/dist/hooks/auto-update-checker/checker.d.ts.map +1 -1
- package/dist/hooks/auto-update-checker/index.d.ts.map +1 -1
- package/dist/hooks/magic-context/channel2-cycle.d.ts +16 -0
- package/dist/hooks/magic-context/channel2-cycle.d.ts.map +1 -0
- package/dist/hooks/magic-context/channel2-delivery.d.ts +3 -9
- package/dist/hooks/magic-context/channel2-delivery.d.ts.map +1 -1
- package/dist/hooks/magic-context/command-handler.d.ts +2 -0
- package/dist/hooks/magic-context/command-handler.d.ts.map +1 -1
- package/dist/hooks/magic-context/ctx-reduce-nudge.d.ts +33 -103
- package/dist/hooks/magic-context/ctx-reduce-nudge.d.ts.map +1 -1
- package/dist/hooks/magic-context/emergency-drop.d.ts.map +1 -1
- package/dist/hooks/magic-context/event-handler.d.ts.map +1 -1
- package/dist/hooks/magic-context/execute-status.d.ts +2 -1
- package/dist/hooks/magic-context/execute-status.d.ts.map +1 -1
- package/dist/hooks/magic-context/fold-execution-gate.d.ts +2 -0
- package/dist/hooks/magic-context/fold-execution-gate.d.ts.map +1 -0
- package/dist/hooks/magic-context/hook-handlers.d.ts.map +1 -1
- package/dist/hooks/magic-context/hook.d.ts.map +1 -1
- package/dist/hooks/magic-context/live-session-state.d.ts +3 -0
- package/dist/hooks/magic-context/live-session-state.d.ts.map +1 -1
- package/dist/hooks/magic-context/rust-mode-transform.d.ts +4 -2
- package/dist/hooks/magic-context/rust-mode-transform.d.ts.map +1 -1
- package/dist/hooks/magic-context/strip-content.d.ts +10 -8
- package/dist/hooks/magic-context/strip-content.d.ts.map +1 -1
- package/dist/hooks/magic-context/supersession-reclaim.d.ts.map +1 -1
- package/dist/hooks/magic-context/system-prompt-hash.d.ts.map +1 -1
- package/dist/hooks/magic-context/tail-hygiene-walk.d.ts +78 -0
- package/dist/hooks/magic-context/tail-hygiene-walk.d.ts.map +1 -0
- package/dist/hooks/magic-context/tool-reclaim.d.ts.map +1 -1
- package/dist/hooks/magic-context/transform-postprocess-phase.d.ts +3 -0
- package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
- package/dist/hooks/magic-context/transform.d.ts.map +1 -1
- package/dist/{index-q0t189ay.js → index-9zhhvr4w.js} +27 -35
- package/dist/{index-0ze9p983.js → index-mmvhrqqb.js} +1428 -191
- package/dist/index.js +604 -763
- package/dist/plugin/hooks/create-session-hooks.d.ts.map +1 -1
- package/dist/plugin/messages-transform.d.ts.map +1 -1
- package/dist/plugin/rpc-handlers.d.ts +2 -0
- package/dist/plugin/rpc-handlers.d.ts.map +1 -1
- package/dist/{recomp-orchestrator-c3ff16k7.js → recomp-orchestrator-jsde4ygw.js} +2 -2
- package/dist/shared/models-dev-cache.d.ts +2 -0
- package/dist/shared/models-dev-cache.d.ts.map +1 -1
- package/dist/shared/rpc-server.d.ts.map +1 -1
- package/dist/shared/rpc-types.d.ts +15 -0
- package/dist/shared/rpc-types.d.ts.map +1 -1
- package/dist/shared/rpc-utils.d.ts +9 -0
- package/dist/shared/rpc-utils.d.ts.map +1 -1
- package/dist/shared/tail-hygiene-status.d.ts +15 -0
- package/dist/shared/tail-hygiene-status.d.ts.map +1 -0
- package/dist/shared/window-geometry.d.ts +3 -2
- package/dist/shared/window-geometry.d.ts.map +1 -1
- package/package.json +3 -1
- package/src/config/schema/magic-context.ts +2 -2
- package/src/shared/models-dev-cache.test.ts +25 -0
- package/src/shared/models-dev-cache.ts +5 -4
- package/src/shared/rpc-server.ts +1 -0
- package/src/shared/rpc-types.ts +16 -0
- package/src/shared/rpc-utils.test.ts +25 -0
- package/src/shared/rpc-utils.ts +80 -0
- package/src/shared/tail-hygiene-status.ts +57 -0
- package/src/shared/window-geometry.test.ts +34 -1
- package/src/shared/window-geometry.ts +37 -40
- package/src/tui/index.tsx +11 -1
- package/src/tui/slots/sidebar-content.tsx +17 -5
- package/src/tui-compiled/index.tsx +311 -289
- package/src/tui-compiled/slots/sidebar-content.tsx +316 -287
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../../src/hooks/magic-context/transform.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AAGxE,OAAO,EACH,KAAK,eAAe,
|
|
1
|
+
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../../src/hooks/magic-context/transform.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AAGxE,OAAO,EACH,KAAK,eAAe,EAUvB,MAAM,sCAAsC,CAAC;AAgB9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAMlE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AA4BhF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAoB1D,OAAO,EAA2B,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AA0B3F,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAgDnE,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAOnF;AAkDD;;;;GAIG;AACH,wBAAgB,8BAA8B,CAC1C,SAAS,EAAE,MAAM,GAClB,GAAG,CAAC,MAAM,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAEzD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACnC,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,EACxB,GAAG,EAAE,MAAM,EACX,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GACrC,OAAO,CAaT;AA6DD,KAAK,0BAA0B,GAAG,WAAW,GAAG,WAAW,CAAC;AA+B5D;;;;GAIG;AACH,wBAAsB,yBAAyB,CAAC,IAAI,EAAE;IAClD,EAAE,EAAE,eAAe,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,oBAAoB,CAAC;CAChC,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAyDtC;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAC9C,EAAE,EAAE,eAAe,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;CACrD,GAAG,IAAI,CA8CP;AAED,MAAM,WAAW,aAAa;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,SAAS,CAAC;IACrB,eAAe,EAAE,GAAG,CAChB,MAAM,EACN;QACI,KAAK,EAAE,YAAY,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;KAC5B,CACJ,CAAC;IACF,EAAE,EAAE,eAAe,CAAC;IACpB;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,oBAAoB,EAAE,aAAa,CAAC,CAAC;IACjF,gIAAgI;IAChI,8BAA8B,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrD,aAAa,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH;;+EAE2E;IAC3E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,0EAA0E;IAC1E,oBAAoB,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAClE;;;;;OAKG;IACH,sBAAsB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,8BAA8B,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7C;;;;OAIG;IACH,8BAA8B,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5C,+BAA+B,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9C,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0GAA0G;IAC1G,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,qBAAqB,EAAE,MAAM,CAAC;QAC9B;;iFAEyE;QACzE,WAAW,EAAE,OAAO,CAAC;KACxB,CAAC;IACF,oFAAoF;IACpF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uBAAuB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpF;;;;;OAKG;IACH,uBAAuB,CAAC,EAAE,MAAM,MAAM,CAAC;IACvC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,0BAA0B,CAAC,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IACtF,sBAAsB,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;IACtF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,0DAA0D;IAC1D,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;;;;;;;;OAWG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qBAAqB,CAAC,EAAE,CACpB,SAAS,EAAE,MAAM,KAChB,OAAO,6BAA6B,EAAE,kBAAkB,CAAC;IAC9D,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACxD,kBAAkB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAEnC;;kEAE8D;IAC9D,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC;;4CAEwC;IACxC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;yFACqF;IACrF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC;;;;;OAKG;IACH,yBAAyB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD;;;;;;;OAOG;IACH,qBAAqB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC;;;+CAG2C;IAC3C,UAAU,CAAC,EAAE;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,uBAAuB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KACvF,CAAC;IACF;;;;;;OAMG;IACH,sBAAsB,CAAC,EAAE;QACrB,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,6EAA6E;IAC7E,qBAAqB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,yEAAyE;IACzE,aAAa,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IAC9B,oFAAoF;IACpF,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,gFAAgF;IAChF,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,6EAA6E;IAC7E,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,oFAAoF;IACpF,4CAA4C,CAAC,EAAE,OAAO,CAAC;IACvD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,+BAA+B,CAAC,EAAE,oBAAoB,CAAC;IACvD,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,yBAAyB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,+BAA+B,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACjD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,aAoBnC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,UACrB;IAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;CAAE,KAChC,OAAO,CAAC,IAAI,CAAC;uCAuyDuB,MAAM,GAAG,IAAI;gCAGpB,MAAM,GAAG,IAAI;EAIhD;AAED,wBAAgB,0BAA0B,CACtC,uBAAuB,EAAE,MAAM,GAAG,SAAS,EAC3C,YAAY,EAAE,YAAY,EAC1B,0BAA0B,EACpB,MAAM,GACN;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GAC/C,SAAS,EACf,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,sBAAsB,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CAAE,EACrF,oBAAoB,CAAC,EAAE,MAAM,GAC9B,MAAM,GAAG,SAAS,CAqCpB"}
|
|
@@ -71,28 +71,6 @@ function isRecord(value) {
|
|
|
71
71
|
function isFinitePositive(value) {
|
|
72
72
|
return typeof value === "number" && Number.isFinite(value) && value > 0;
|
|
73
73
|
}
|
|
74
|
-
function modelKeyLookupOrder(providerID, modelID) {
|
|
75
|
-
const candidates = [...modelRefLookupOrder(`${providerID}/${modelID}`), modelID];
|
|
76
|
-
const colon = modelID.lastIndexOf(":");
|
|
77
|
-
if (colon > 0) {
|
|
78
|
-
const bareModel = modelID.slice(0, colon);
|
|
79
|
-
candidates.push(...modelRefLookupOrder(`${providerID}/${bareModel}`), bareModel);
|
|
80
|
-
}
|
|
81
|
-
return [...new Set(candidates)];
|
|
82
|
-
}
|
|
83
|
-
function configuredOutputReserve(config, providerID, modelID) {
|
|
84
|
-
if (typeof config === "number") {
|
|
85
|
-
return Number.isFinite(config) && config >= 0 ? config : undefined;
|
|
86
|
-
}
|
|
87
|
-
if (!config)
|
|
88
|
-
return;
|
|
89
|
-
for (const candidate of modelKeyLookupOrder(providerID, modelID)) {
|
|
90
|
-
const value = config[candidate];
|
|
91
|
-
if (typeof value === "number" && Number.isFinite(value) && value >= 0)
|
|
92
|
-
return value;
|
|
93
|
-
}
|
|
94
|
-
return Number.isFinite(config.default) && config.default >= 0 ? config.default : undefined;
|
|
95
|
-
}
|
|
96
74
|
function scalarizeFact(value) {
|
|
97
75
|
if (value.kind === "stated")
|
|
98
76
|
return isFinitePositive(value.value) ? value.value : undefined;
|
|
@@ -329,21 +307,34 @@ function deriveWindowGeometry(providerID, modelID, catalogLimit, options = {}) {
|
|
|
329
307
|
const geometryFact = overlayGeometry(options.overlay);
|
|
330
308
|
const geometry = geometryFact?.kind === "stated" ? geometryFact.value : geometryFact?.kind === "unknown" ? "shared_upfront" : PROVIDER_GEOMETRY[providerID] ?? "shared_upfront";
|
|
331
309
|
const geometryOverride = geometryFact?.kind === "stated" ? geometryFact.value : undefined;
|
|
310
|
+
const preCarvedInput = isFinitePositive(input) && (!isFinitePositive(softContext) || input < softContext);
|
|
311
|
+
const outputReserveOverride = typeof options.outputReserveOverride === "number" && Number.isFinite(options.outputReserveOverride) && options.outputReserveOverride >= 0 ? options.outputReserveOverride : undefined;
|
|
312
|
+
let derivationWindow = softContext ?? input;
|
|
332
313
|
let usableSoft;
|
|
333
314
|
let softReserve = 0;
|
|
334
315
|
let reserveSource = "none";
|
|
335
|
-
if (
|
|
316
|
+
if (outputReserveOverride !== undefined) {
|
|
317
|
+
const reserveWindow = preCarvedInput ? input : softContext ?? input;
|
|
318
|
+
if (!isFinitePositive(reserveWindow))
|
|
319
|
+
return;
|
|
320
|
+
derivationWindow = reserveWindow;
|
|
321
|
+
softReserve = outputReserveOverride;
|
|
322
|
+
reserveSource = "output_config";
|
|
323
|
+
const floor = Math.max(MIN_PLAUSIBLE_CONTEXT_LIMIT, reserveWindow * 0.5);
|
|
324
|
+
const flooredReserve = Math.min(softReserve, Math.max(0, reserveWindow - floor));
|
|
325
|
+
if (flooredReserve < softReserve) {
|
|
326
|
+
logGeometryClampOnce(`soft-floor|${providerID}/${modelID}|${softReserve}|${flooredReserve}`, `output reserve clamped by the half-window floor for ${providerID}/${modelID}: reserve ${softReserve} → ${flooredReserve}`, options.log);
|
|
327
|
+
}
|
|
328
|
+
softReserve = flooredReserve;
|
|
329
|
+
usableSoft = Math.floor(reserveWindow - softReserve);
|
|
330
|
+
} else if (preCarvedInput) {
|
|
336
331
|
usableSoft = input;
|
|
337
332
|
if (isFinitePositive(softContext)) {
|
|
338
333
|
softReserve = Math.max(0, softContext - input);
|
|
339
334
|
reserveSource = "output_catalog";
|
|
340
335
|
}
|
|
341
336
|
} else if (isFinitePositive(softContext)) {
|
|
342
|
-
|
|
343
|
-
if (configuredReserve !== undefined) {
|
|
344
|
-
softReserve = configuredReserve;
|
|
345
|
-
reserveSource = "output_config";
|
|
346
|
-
} else if (geometry === "separate" && (options.overlay === undefined || options.harness === "pi" || geometryOverride !== undefined)) {
|
|
337
|
+
if (geometry === "separate" && (options.overlay === undefined || options.harness === "pi" || geometryOverride !== undefined)) {
|
|
347
338
|
softReserve = 0;
|
|
348
339
|
reserveSource = "none";
|
|
349
340
|
} else {
|
|
@@ -383,13 +374,14 @@ function deriveWindowGeometry(providerID, modelID, catalogLimit, options = {}) {
|
|
|
383
374
|
logGeometryClampOnce(`${providerID}/${modelID}|${usableSoft}|${usableHard}`, `usable hard limit clamped for ${providerID}/${modelID}: ${usableHard} → ${usableSoft} (overlay/provider inversion)`, options.log);
|
|
384
375
|
usableHard = usableSoft;
|
|
385
376
|
}
|
|
377
|
+
const resolvedWindow = derivationWindow ?? usableSoft;
|
|
386
378
|
return {
|
|
387
379
|
usableSoft,
|
|
388
380
|
usableHard,
|
|
389
381
|
geometry,
|
|
390
382
|
derivation: {
|
|
391
|
-
window: Math.floor(
|
|
392
|
-
reserve: Math.floor(Math.max(0,
|
|
383
|
+
window: Math.floor(resolvedWindow),
|
|
384
|
+
reserve: Math.floor(Math.max(0, resolvedWindow - usableSoft)),
|
|
393
385
|
reserveSource,
|
|
394
386
|
geometry
|
|
395
387
|
}
|
|
@@ -488,7 +480,7 @@ function persistApiCache() {
|
|
|
488
480
|
function isFinitePositive2(value) {
|
|
489
481
|
return typeof value === "number" && Number.isFinite(value) && value > 0;
|
|
490
482
|
}
|
|
491
|
-
function
|
|
483
|
+
function modelKeyLookupOrder(providerID, modelID) {
|
|
492
484
|
const candidates = [...modelRefLookupOrder(`${providerID}/${modelID}`), modelID];
|
|
493
485
|
const colon = modelID.lastIndexOf(":");
|
|
494
486
|
if (colon > 0) {
|
|
@@ -497,12 +489,12 @@ function modelKeyLookupOrder2(providerID, modelID) {
|
|
|
497
489
|
}
|
|
498
490
|
return [...new Set(candidates)];
|
|
499
491
|
}
|
|
500
|
-
function
|
|
492
|
+
function resolveOutputReserve(providerID, modelID, config = outputReserveConfig) {
|
|
501
493
|
if (typeof config === "number")
|
|
502
494
|
return Number.isFinite(config) && config >= 0 ? config : undefined;
|
|
503
495
|
if (!config)
|
|
504
496
|
return;
|
|
505
|
-
for (const candidate of
|
|
497
|
+
for (const candidate of modelKeyLookupOrder(providerID, modelID)) {
|
|
506
498
|
const value = config[candidate];
|
|
507
499
|
if (typeof value === "number" && Number.isFinite(value) && value >= 0)
|
|
508
500
|
return value;
|
|
@@ -527,7 +519,7 @@ function resolveLimit(limit, providerID, modelID, reserveConfig = outputReserveC
|
|
|
527
519
|
return input;
|
|
528
520
|
if (context === undefined)
|
|
529
521
|
return;
|
|
530
|
-
const configuredReserve =
|
|
522
|
+
const configuredReserve = resolveOutputReserve(providerID, modelID, reserveConfig);
|
|
531
523
|
let reserve;
|
|
532
524
|
if (configuredReserve !== undefined) {
|
|
533
525
|
reserve = configuredReserve;
|
|
@@ -640,7 +632,7 @@ function getSdkWindowGeometry(providerID, modelID, detectedContextLimit, options
|
|
|
640
632
|
output: metadata.outputLimit
|
|
641
633
|
}, {
|
|
642
634
|
overlay: resolveWindowOverlayFacts(providerID, modelID, getWindowOverlay()),
|
|
643
|
-
|
|
635
|
+
outputReserveOverride: resolveOutputReserve(providerID, modelID),
|
|
644
636
|
harness: options?.harness ?? "opencode",
|
|
645
637
|
contextCap: promptOnlyDetected === undefined && isFinitePositive2(detectedContextLimit) ? detectedContextLimit : undefined
|
|
646
638
|
});
|