frizz-server 0.14.2 → 0.14.4
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/dist/claude-agent-broker.js +13199 -13046
- package/dist/dev-child.js +80 -39
- package/package.json +1 -1
- package/web-dist/assets/{TerminalPane-ftTy20h9.js → TerminalPane-BbBcnZ23.js} +2 -2
- package/web-dist/assets/{abnfDiagram-VRR7QNED-DPYIADCF.js → abnfDiagram-VRR7QNED-B7Q1MCaG.js} +1 -1
- package/web-dist/assets/architecture-TIHT7OUA-CQ5OsBvt.js +1 -0
- package/web-dist/assets/{architectureDiagram-ZJ3FMSHR-CslwHJ59.js → architectureDiagram-ZJ3FMSHR-U_o3HwKX.js} +1 -1
- package/web-dist/assets/{blockDiagram-677ZJIJ3-C_YKDTK3.js → blockDiagram-677ZJIJ3-BVtitIzJ.js} +1 -1
- package/web-dist/assets/{c4Diagram-LMCZKHZV-CN2XoHEM.js → c4Diagram-LMCZKHZV-BS7Qpf8q.js} +1 -1
- package/web-dist/assets/channel-C8c70Euw.js +1 -0
- package/web-dist/assets/{chunk-32BRIVSS-CqQFWcuW.js → chunk-32BRIVSS-Cvq2fN6D.js} +1 -1
- package/web-dist/assets/{chunk-52WLFC77-DIA4ep-j.js → chunk-52WLFC77-VeXenKTG.js} +1 -1
- package/web-dist/assets/{chunk-C7G6YPKG-uYEufieL.js → chunk-C7G6YPKG-FJMI15e9.js} +1 -1
- package/web-dist/assets/{chunk-EX3LRPZG-Ctuj9M07.js → chunk-EX3LRPZG-zxGy4vd7.js} +1 -1
- package/web-dist/assets/{chunk-FWX5IMBZ-BSeGDrvG.js → chunk-FWX5IMBZ-wyhG39cd.js} +2 -2
- package/web-dist/assets/{chunk-HOUHSVGY-DFtB1XOE.js → chunk-HOUHSVGY-CzgfjFo5.js} +1 -1
- package/web-dist/assets/{chunk-ICXQ74PX-DvvNMH3B.js → chunk-ICXQ74PX-zI2FTOFt.js} +1 -1
- package/web-dist/assets/{chunk-MOJQB5TN-blCgZYTp.js → chunk-MOJQB5TN-BDoDmaWa.js} +1 -1
- package/web-dist/assets/{chunk-OGEWGWER-DiKWBhls.js → chunk-OGEWGWER-SslhMwtr.js} +1 -1
- package/web-dist/assets/{chunk-PUDLZKDR-CEZ-LRny.js → chunk-PUDLZKDR-GGjXXaFh.js} +1 -1
- package/web-dist/assets/{chunk-Q4XR5HBZ-BO1Y_Z4a.js → chunk-Q4XR5HBZ-BTPa3B0G.js} +1 -1
- package/web-dist/assets/{chunk-V7JOEXUC-ouWDihRg.js → chunk-V7JOEXUC-D6G1XcaO.js} +1 -1
- package/web-dist/assets/{chunk-VAUOI2AC-DCCN8ceH.js → chunk-VAUOI2AC-B5V7_Y8l.js} +1 -1
- package/web-dist/assets/{chunk-VR4S4FIN-D8VxxNLW.js → chunk-VR4S4FIN-DsGWvDSG.js} +1 -1
- package/web-dist/assets/{chunk-WYO6CB5R-_B7FSzZM.js → chunk-WYO6CB5R-BY_8sfg6.js} +1 -1
- package/web-dist/assets/{chunk-ZGVPDNZ5-BErRylCv.js → chunk-ZGVPDNZ5-BBoYc_fe.js} +1 -1
- package/web-dist/assets/classDiagram-OUVF2IWQ-yefBxIWV.js +1 -0
- package/web-dist/assets/classDiagram-v2-EOCWNBFH-yefBxIWV.js +1 -0
- package/web-dist/assets/{cynefin-VYW2F7L2-CgH8n1RK.js → cynefin-VYW2F7L2-CPup9cZx.js} +1 -1
- package/web-dist/assets/{cynefinDiagram-TSTJHNR4-Cp3iB5ig.js → cynefinDiagram-TSTJHNR4-Cl3irVoi.js} +1 -1
- package/web-dist/assets/{dagre-VKFMJZFB-DEJ5M2UQ.js → dagre-VKFMJZFB-CaVEsVrh.js} +1 -1
- package/web-dist/assets/{diagram-FQU43EPY-B7TBBYyA.js → diagram-FQU43EPY-DPf7R028.js} +1 -1
- package/web-dist/assets/{diagram-G47NLZAW-Djy0qteu.js → diagram-G47NLZAW-BeOq2gOT.js} +1 -1
- package/web-dist/assets/{diagram-NH7WQ7WH-C7ASxlCE.js → diagram-NH7WQ7WH-DW39nAyh.js} +1 -1
- package/web-dist/assets/{diagram-OA4YK3LP-DQs7Hn4c.js → diagram-OA4YK3LP-DSRy0QBE.js} +1 -1
- package/web-dist/assets/{diagram-WEI45ONY-DvjYq10q.js → diagram-WEI45ONY-DBZZ9-gh.js} +1 -1
- package/web-dist/assets/{ebnfDiagram-CCIWWBDH-D5dvO41S.js → ebnfDiagram-CCIWWBDH-BQhqbJ08.js} +1 -1
- package/web-dist/assets/{erDiagram-Q63AITRT-DGMDAMz2.js → erDiagram-Q63AITRT-YWFordnS.js} +1 -1
- package/web-dist/assets/eventmodeling-45OFAUF4-h7nF91S2.js +1 -0
- package/web-dist/assets/flowDiagram-23GEKE2U-DLwDjSwL.js +1 -0
- package/web-dist/assets/{ganttDiagram-NO4QXBWP-DE4sBbug.js → ganttDiagram-NO4QXBWP-C69Iv5AR.js} +1 -1
- package/web-dist/assets/{gitGraph-TEB2WS4Q-6iwymAqh.js → gitGraph-TEB2WS4Q-CrilrtQw.js} +1 -1
- package/web-dist/assets/{gitGraphDiagram-IHSO6WYX-B8M8HMMa.js → gitGraphDiagram-IHSO6WYX-DJx5Bqry.js} +1 -1
- package/web-dist/assets/index-BfUUFLv7.js +319 -0
- package/web-dist/assets/index-D956g6KI.css +1 -0
- package/web-dist/assets/{info-DKCQHKI2-D1rdRKv2.js → info-DKCQHKI2-CJW0Ce93.js} +1 -1
- package/web-dist/assets/{infoDiagram-FWYZ7A6U-DfXxAWG-.js → infoDiagram-FWYZ7A6U-BOWnq2zW.js} +1 -1
- package/web-dist/assets/{ishikawaDiagram-FXEZZL3T-C6huyjB4.js → ishikawaDiagram-FXEZZL3T-Biglx1ys.js} +1 -1
- package/web-dist/assets/{journeyDiagram-5HDEW3XC-Cz0dAdxo.js → journeyDiagram-5HDEW3XC-k3enathS.js} +1 -1
- package/web-dist/assets/{kanban-definition-HUTT4EX6-CnOJ2JGq.js → kanban-definition-HUTT4EX6-D8GEpRw0.js} +1 -1
- package/web-dist/assets/{line-BsyJpb4L.js → line-CHe_pa_l.js} +1 -1
- package/web-dist/assets/{mermaid-parser.core-B2YDnnfc.js → mermaid-parser.core-xAuEpTpK.js} +3 -3
- package/web-dist/assets/{mermaid.core-DZmxOzX_.js → mermaid.core-Cblk2suU.js} +3 -3
- package/web-dist/assets/{mindmap-definition-LN4V7U3C-C-cB8iLg.js → mindmap-definition-LN4V7U3C-zu5mHxT1.js} +1 -1
- package/web-dist/assets/{packet-7NZHBO7P-ByYSVaHA.js → packet-7NZHBO7P-BzmJzZyb.js} +1 -1
- package/web-dist/assets/{pegDiagram-2B236MQR-CiIbvo6V.js → pegDiagram-2B236MQR-NnlukGZG.js} +1 -1
- package/web-dist/assets/{pie-RZYD4A2V-DT0L5Lbg.js → pie-RZYD4A2V-BSxCIj_U.js} +1 -1
- package/web-dist/assets/{pieDiagram-ENE6RG2P-BpX1rkMn.js → pieDiagram-ENE6RG2P-DsDCAaSf.js} +1 -1
- package/web-dist/assets/{quadrantDiagram-ABIIQ3AL-Bl6eITpX.js → quadrantDiagram-ABIIQ3AL-Cs8GeNtT.js} +1 -1
- package/web-dist/assets/{radar-I7S5WNFK-Dc5znSZ_.js → radar-I7S5WNFK-CWwe4R07.js} +1 -1
- package/web-dist/assets/{railroad-3IZDKUUU-Ho4iVXCL.js → railroad-3IZDKUUU-D9VKEiaV.js} +1 -1
- package/web-dist/assets/railroad-abnf-AHOZXSZD-CtJSUXbE.js +1 -0
- package/web-dist/assets/railroad-ebnf-EBAXGLYW-Yc0BdBdp.js +1 -0
- package/web-dist/assets/railroad-peg-LSFZ7HO6-Dp0P5Iq6.js +1 -0
- package/web-dist/assets/{railroadDiagram-RFXS5EU6-D5afWytG.js → railroadDiagram-RFXS5EU6-BawT2JlG.js} +1 -1
- package/web-dist/assets/{requirementDiagram-TGXJPOKE-0L5V-_bC.js → requirementDiagram-TGXJPOKE-XDHPtPfx.js} +1 -1
- package/web-dist/assets/{sankeyDiagram-HTMAVEWB-CH-xRkM4.js → sankeyDiagram-HTMAVEWB-dSowfEdK.js} +1 -1
- package/web-dist/assets/{sequenceDiagram-DBY2YBRQ-CMUPviAU.js → sequenceDiagram-DBY2YBRQ-C__EROVn.js} +1 -1
- package/web-dist/assets/{stateDiagram-2N3HPSRC-ayE6u0KZ.js → stateDiagram-2N3HPSRC-Cg1Nddpd.js} +1 -1
- package/web-dist/assets/stateDiagram-v2-6OUMAXLB-QKgumchx.js +1 -0
- package/web-dist/assets/{swimlanes-5IMT3BWC-BggKIJzJ.js → swimlanes-5IMT3BWC-DKmvUdu_.js} +1 -1
- package/web-dist/assets/swimlanesDiagram-G3AALYLV-BSZ6jqLy.js +8 -0
- package/web-dist/assets/{timeline-definition-FHXFAJF6-B4mcBscv.js → timeline-definition-FHXFAJF6-DL8d36QS.js} +1 -1
- package/web-dist/assets/{treeView-QDETBFTQ-DAH6PHIx.js → treeView-QDETBFTQ-BwIXzEk2.js} +1 -1
- package/web-dist/assets/{treemap-6X3UGDF4-CUipyr2w.js → treemap-6X3UGDF4-Cduo02Iv.js} +1 -1
- package/web-dist/assets/{vennDiagram-L72KCM5P-CuKqAm0J.js → vennDiagram-L72KCM5P-DPgx-kOV.js} +1 -1
- package/web-dist/assets/{wardley-OPB4EBWU-D5Wfkjy9.js → wardley-OPB4EBWU-uOXCOFG6.js} +1 -1
- package/web-dist/assets/{wardleyDiagram-EHGQE667-M5MDAf53.js → wardleyDiagram-EHGQE667-DuqFuXjY.js} +1 -1
- package/web-dist/assets/{xychartDiagram-FW5EYKEG-BaSJmtNq.js → xychartDiagram-FW5EYKEG-BI6-eymd.js} +1 -1
- package/web-dist/index.html +16 -10
- package/web-dist/assets/architecture-TIHT7OUA-C4ce4EvA.js +0 -1
- package/web-dist/assets/channel-46DdEyrY.js +0 -1
- package/web-dist/assets/classDiagram-OUVF2IWQ-BvKONN2o.js +0 -1
- package/web-dist/assets/classDiagram-v2-EOCWNBFH-BvKONN2o.js +0 -1
- package/web-dist/assets/eventmodeling-45OFAUF4-eNNW0zlr.js +0 -1
- package/web-dist/assets/flowDiagram-23GEKE2U-C5RJ-lqT.js +0 -1
- package/web-dist/assets/index-C-jkL60P.js +0 -319
- package/web-dist/assets/index-D0gz-Bx-.css +0 -1
- package/web-dist/assets/railroad-abnf-AHOZXSZD-JkQWwE17.js +0 -1
- package/web-dist/assets/railroad-ebnf-EBAXGLYW-grVU10Bk.js +0 -1
- package/web-dist/assets/railroad-peg-LSFZ7HO6-BTqoHLa0.js +0 -1
- package/web-dist/assets/stateDiagram-v2-6OUMAXLB-DAjtM6iw.js +0 -1
- package/web-dist/assets/swimlanesDiagram-G3AALYLV-BS0jxTx_.js +0 -8
package/dist/dev-child.js
CHANGED
|
@@ -14086,7 +14086,7 @@ var init_src = __esm({
|
|
|
14086
14086
|
};
|
|
14087
14087
|
AWAITING_HINT_MAX = 8;
|
|
14088
14088
|
AWAITING_HINT_VALUE_MAX = 200;
|
|
14089
|
-
AWAITING_TITLE_MAX =
|
|
14089
|
+
AWAITING_TITLE_MAX = 120;
|
|
14090
14090
|
AWAITING_ITEM_KINDS = ["shell", "agent", "timer", "pr", "issue"];
|
|
14091
14091
|
AWAITING_DURATION_RE = /^(\d{1,5})(s|m|h|d)$/;
|
|
14092
14092
|
DURATION_UNIT_MS = { s: 1e3, m: 6e4, h: 36e5, d: 864e5 };
|
|
@@ -14935,13 +14935,13 @@ var init_src = __esm({
|
|
|
14935
14935
|
* to, not furniture you sit beside. Hidden, the way back is a breadcrumb in the status bar, which
|
|
14936
14936
|
* costs a click exactly when you meant to switch and nothing when you did not.
|
|
14937
14937
|
*
|
|
14938
|
-
* Machine-level
|
|
14938
|
+
* Machine-level: which chrome you want is a property of the person, not the repo.
|
|
14939
14939
|
*/
|
|
14940
14940
|
projectRail: external_exports.boolean(),
|
|
14941
|
-
//
|
|
14942
|
-
//
|
|
14943
|
-
//
|
|
14944
|
-
font
|
|
14941
|
+
// There is no `font` key any more. The interface rendered in one of two type families as a machine
|
|
14942
|
+
// setting until 2026-09-19 (maintainer: "let's drop monospace as an option"); every surface is sans
|
|
14943
|
+
// now, and index.html pins `data-font="sans"` on <html> directly. Settings is a non-strict object,
|
|
14944
|
+
// so a stored `font` is stripped the moment an old blob parses — no migration.
|
|
14945
14945
|
// Default action for a vetted non-image local path in agent markdown. Image clicks always use the
|
|
14946
14946
|
// OS default viewer so screenshots retain their expected behavior.
|
|
14947
14947
|
localFileOpener: LocalFileOpener.optional(),
|
|
@@ -20911,7 +20911,7 @@ var init_settings = __esm({
|
|
|
20911
20911
|
init_frizz_paths();
|
|
20912
20912
|
init_machine_config();
|
|
20913
20913
|
SETTINGS_KEY = "settings";
|
|
20914
|
-
MACHINE_KEYS = ["
|
|
20914
|
+
MACHINE_KEYS = ["notifications", "localFileOpener", "projectRail"];
|
|
20915
20915
|
MachineSettingsRecord = Settings.partial();
|
|
20916
20916
|
defaultSettings = () => ({
|
|
20917
20917
|
// `bypassPermissions` = claude's --dangerously-skip-permissions: a headless worker never stops on an
|
|
@@ -20924,7 +20924,6 @@ var init_settings = __esm({
|
|
|
20924
20924
|
model: void 0,
|
|
20925
20925
|
effort: void 0,
|
|
20926
20926
|
notifications: true,
|
|
20927
|
-
font: "sans",
|
|
20928
20927
|
localFileOpener: "system",
|
|
20929
20928
|
// 500K tokens: half the 1M window every Claude worker is dispatched with. See the schema for why a
|
|
20930
20929
|
// worker left to compact at 1M is the biggest single reason a Frizz thread out-spends the TUI.
|
|
@@ -31252,6 +31251,11 @@ function parseClaudeUsage(body, planType) {
|
|
|
31252
31251
|
if (windows.length === 0) return { status: "unavailable", windows: [], detail: "No usage windows reported" };
|
|
31253
31252
|
return { status: "ok", planType, windows };
|
|
31254
31253
|
}
|
|
31254
|
+
function retryAtFrom(res, now) {
|
|
31255
|
+
const seconds = Number(res.headers.get("retry-after"));
|
|
31256
|
+
const backoff = Number.isFinite(seconds) && seconds > 0 ? seconds * 1e3 : RATE_LIMIT_DEFAULT_BACKOFF_MS;
|
|
31257
|
+
return now + Math.min(backoff, RATE_LIMIT_MAX_BACKOFF_MS);
|
|
31258
|
+
}
|
|
31255
31259
|
function cachePaths(cacheDir, configDir) {
|
|
31256
31260
|
const profile = createHash9("sha256").update(configDir).digest("hex").slice(0, 12);
|
|
31257
31261
|
return {
|
|
@@ -31340,10 +31344,10 @@ async function refreshQuota(claudeBin, deps, now) {
|
|
|
31340
31344
|
const quota2 = parseClaudeUsage(body, planType);
|
|
31341
31345
|
if (quota2.status === "ok") return quota2;
|
|
31342
31346
|
} else if (res.status === 429 || res.status === 529) {
|
|
31343
|
-
throw new
|
|
31347
|
+
throw new UsageRateLimited(res.status, retryAtFrom(res, now));
|
|
31344
31348
|
}
|
|
31345
31349
|
} catch (err) {
|
|
31346
|
-
if (err instanceof
|
|
31350
|
+
if (err instanceof UsageRateLimited) throw err;
|
|
31347
31351
|
}
|
|
31348
31352
|
}
|
|
31349
31353
|
const quota = parseClaudeUsageOutput(await (deps.execUsage ?? runClaudeUsage)(claudeBin), now);
|
|
@@ -31433,14 +31437,30 @@ async function tryAcquireLock2(path3) {
|
|
|
31433
31437
|
}
|
|
31434
31438
|
return void 0;
|
|
31435
31439
|
}
|
|
31440
|
+
function rateLimited(shared, now) {
|
|
31441
|
+
return shared?.retryAt !== void 0 && now < shared.retryAt;
|
|
31442
|
+
}
|
|
31443
|
+
function serveRateLimited(shared, now) {
|
|
31444
|
+
if (shared.quota.status !== "ok" || now - shared.at >= STALE_MAX_AGE_MS) return UNAVAILABLE;
|
|
31445
|
+
const minutes = (ms, round) => Math.max(1, round(ms / 6e4));
|
|
31446
|
+
return {
|
|
31447
|
+
...shared.quota,
|
|
31448
|
+
detail: `Next refresh in ${minutes(shared.retryAt - now, Math.ceil)}m \xB7 last updated ${minutes(now - shared.at, Math.round)}m ago`
|
|
31449
|
+
};
|
|
31450
|
+
}
|
|
31436
31451
|
function refreshSharedInBackground(paths, claudeBin, deps, now) {
|
|
31437
31452
|
if (backgroundRefreshes.has(paths.data)) return;
|
|
31438
31453
|
const task = (async () => {
|
|
31454
|
+
if (rateLimited(await readShared(paths.data), now)) return;
|
|
31439
31455
|
const release = await tryAcquireLock2(paths.lock);
|
|
31440
31456
|
if (!release) return;
|
|
31441
31457
|
try {
|
|
31442
31458
|
const quota = await refreshQuota(claudeBin, deps, now);
|
|
31443
31459
|
await writeShared(paths.data, { at: now, quota });
|
|
31460
|
+
} catch (err) {
|
|
31461
|
+
if (!(err instanceof UsageRateLimited)) throw err;
|
|
31462
|
+
const current = await readShared(paths.data);
|
|
31463
|
+
await writeShared(paths.data, { ...current ?? { at: now, quota: UNAVAILABLE }, retryAt: err.retryAt });
|
|
31444
31464
|
} finally {
|
|
31445
31465
|
await release().catch(() => {
|
|
31446
31466
|
});
|
|
@@ -31458,7 +31478,10 @@ async function refreshClaudeQuotaInBackground(claudeBin = "claude", deps = {}) {
|
|
|
31458
31478
|
} catch {
|
|
31459
31479
|
return;
|
|
31460
31480
|
}
|
|
31461
|
-
|
|
31481
|
+
const paths = cachePaths(cacheDir, configDir);
|
|
31482
|
+
const current = await readShared(paths.data);
|
|
31483
|
+
if (current?.quota.status === "ok" && now - current.at < OK_TTL_MS) return;
|
|
31484
|
+
refreshSharedInBackground(paths, claudeBin, deps, now);
|
|
31462
31485
|
}
|
|
31463
31486
|
async function readClaudeQuota(claudeBin = "claude", deps = {}, options = {}) {
|
|
31464
31487
|
const now = (deps.now ?? Date.now)();
|
|
@@ -31481,36 +31504,44 @@ async function readClaudeQuota(claudeBin = "claude", deps = {}, options = {}) {
|
|
|
31481
31504
|
if (!options.force && initial?.quota.status === "ok" && now - initial.at < STALE_MAX_AGE_MS) {
|
|
31482
31505
|
refreshSharedInBackground(paths, claudeBin, deps, now);
|
|
31483
31506
|
const ageMs = now - initial.at;
|
|
31507
|
+
if (ageMs >= 10 * 6e4 && rateLimited(initial, now)) return serveRateLimited(initial, now);
|
|
31484
31508
|
if (ageMs < 10 * 6e4) return initial.quota;
|
|
31485
31509
|
return { ...initial.quota, detail: `Refreshing \xB7 last updated ${Math.round(ageMs / 6e4)}m ago` };
|
|
31486
31510
|
}
|
|
31511
|
+
if (rateLimited(initial, now)) return serveRateLimited(initial, now);
|
|
31487
31512
|
let release;
|
|
31488
31513
|
try {
|
|
31489
31514
|
release = await acquireLock(paths.lock);
|
|
31490
31515
|
const afterLock = await readShared(paths.data);
|
|
31516
|
+
if (rateLimited(afterLock, now)) return serveRateLimited(afterLock, now);
|
|
31491
31517
|
if (afterLock && afterLock.at !== initial?.at && now - afterLock.at < OK_TTL_MS) return afterLock.quota;
|
|
31492
31518
|
const quota = await refreshQuota(claudeBin, deps, now);
|
|
31493
31519
|
await writeShared(paths.data, { at: now, quota }).catch(() => {
|
|
31494
31520
|
});
|
|
31495
31521
|
return quota;
|
|
31496
|
-
} catch {
|
|
31522
|
+
} catch (err) {
|
|
31497
31523
|
const fallback = await readShared(paths.data);
|
|
31524
|
+
if (err instanceof UsageRateLimited) {
|
|
31525
|
+
const refused = { ...fallback ?? { at: now, quota: UNAVAILABLE }, retryAt: err.retryAt };
|
|
31526
|
+
await writeShared(paths.data, refused).catch(() => {
|
|
31527
|
+
});
|
|
31528
|
+
return serveRateLimited(refused, now);
|
|
31529
|
+
}
|
|
31498
31530
|
if (fallback?.quota.status === "ok" && now - fallback.at < STALE_MAX_AGE_MS) {
|
|
31499
31531
|
return {
|
|
31500
31532
|
...fallback.quota,
|
|
31501
31533
|
detail: `Could not refresh \xB7 last updated ${Math.max(1, Math.round((now - fallback.at) / 6e4))}m ago`
|
|
31502
31534
|
};
|
|
31503
31535
|
}
|
|
31504
|
-
|
|
31505
|
-
await writeShared(paths.data, { at: now, quota: unavailable }).catch(() => {
|
|
31536
|
+
await writeShared(paths.data, { at: now, quota: UNAVAILABLE }).catch(() => {
|
|
31506
31537
|
});
|
|
31507
|
-
return
|
|
31538
|
+
return UNAVAILABLE;
|
|
31508
31539
|
} finally {
|
|
31509
31540
|
await release?.().catch(() => {
|
|
31510
31541
|
});
|
|
31511
31542
|
}
|
|
31512
31543
|
}
|
|
31513
|
-
var execFileAsync2, USAGE_URL, OAUTH_BETA, USER_AGENT, ENDPOINT_TIMEOUT_MS, OK_TTL_MS, FAIL_TTL_MS, STALE_MAX_AGE_MS, CLI_TIMEOUT_MS, LOCK_STALE_MS, LOCK_WAIT_MS, LOCK_POLL_MS2, LINE_WINDOWS, MONTH_INDEX, backgroundRefreshes;
|
|
31544
|
+
var execFileAsync2, USAGE_URL, OAUTH_BETA, USER_AGENT, ENDPOINT_TIMEOUT_MS, OK_TTL_MS, FAIL_TTL_MS, STALE_MAX_AGE_MS, CLI_TIMEOUT_MS, LOCK_STALE_MS, LOCK_WAIT_MS, LOCK_POLL_MS2, RATE_LIMIT_DEFAULT_BACKOFF_MS, RATE_LIMIT_MAX_BACKOFF_MS, UsageRateLimited, LINE_WINDOWS, MONTH_INDEX, UNAVAILABLE, backgroundRefreshes;
|
|
31514
31545
|
var init_claude_quota = __esm({
|
|
31515
31546
|
"packages/server/src/backend/claude-quota.ts"() {
|
|
31516
31547
|
"use strict";
|
|
@@ -31528,6 +31559,14 @@ var init_claude_quota = __esm({
|
|
|
31528
31559
|
LOCK_STALE_MS = 4e4;
|
|
31529
31560
|
LOCK_WAIT_MS = 15e3;
|
|
31530
31561
|
LOCK_POLL_MS2 = 50;
|
|
31562
|
+
RATE_LIMIT_DEFAULT_BACKOFF_MS = 5 * 6e4;
|
|
31563
|
+
RATE_LIMIT_MAX_BACKOFF_MS = 60 * 6e4;
|
|
31564
|
+
UsageRateLimited = class extends Error {
|
|
31565
|
+
constructor(status, retryAt) {
|
|
31566
|
+
super(`Usage endpoint ${status}`);
|
|
31567
|
+
this.retryAt = retryAt;
|
|
31568
|
+
}
|
|
31569
|
+
};
|
|
31531
31570
|
LINE_WINDOWS = [
|
|
31532
31571
|
[/^Current session$/i, "5h", "5h"],
|
|
31533
31572
|
[/^Current week \(all models\)$/i, "weekly", "Weekly"],
|
|
@@ -31548,6 +31587,7 @@ var init_claude_quota = __esm({
|
|
|
31548
31587
|
nov: 10,
|
|
31549
31588
|
dec: 11
|
|
31550
31589
|
};
|
|
31590
|
+
UNAVAILABLE = { status: "unavailable", windows: [], detail: "Claude Code usage unavailable" };
|
|
31551
31591
|
backgroundRefreshes = /* @__PURE__ */ new Map();
|
|
31552
31592
|
}
|
|
31553
31593
|
});
|
|
@@ -36045,9 +36085,11 @@ exactly ONE of them.
|
|
|
36045
36085
|
until somebody notices. Long is free \u2014 real activity wakes you the moment it lands either way, and
|
|
36046
36086
|
the human snoozes or archives the thread when they want it gone. Hours are for a PR you control and
|
|
36047
36087
|
a check you expect to settle today.
|
|
36048
|
-
- \`title:\` \u2014 OPTIONAL, the card's heading:
|
|
36049
|
-
|
|
36050
|
-
|
|
36088
|
+
- \`title:\` \u2014 OPTIONAL, the card's heading: a short phrase in sentence case naming THIS wait
|
|
36089
|
+
("Fork-CI approval", "Nightly bench, arm 3 of 3", "Spread ask and soundness issue on two TypeScript
|
|
36090
|
+
issues"). It wraps, so name the wait fully; a HEADING, though, not the handoff \u2014 past 120
|
|
36091
|
+
characters it is trimmed on a word boundary. Without it the card is headed "Awaiting", which is
|
|
36092
|
+
true of every park and specific to none.
|
|
36051
36093
|
- **REGISTERING IS NOT PARKING, AND PARKING IS NOT REGISTERING.** Your shells, sub-agents, timers
|
|
36052
36094
|
and PR watchers are watched AUTOMATICALLY, fence or no fence \u2014 frizz wakes you when one finishes,
|
|
36053
36095
|
every time. The fence only declares that you have STOPPED, and names which of them you stopped
|
|
@@ -36569,10 +36611,11 @@ When delegation is explicitly authorized:
|
|
|
36569
36611
|
- \`gpt-5.6-luna\` + \`medium\` or \`gpt-5.6-terra\` + \`medium\` for fully specified mechanical QA,
|
|
36570
36612
|
documentation, straightforward tests, and exact collection or edits.
|
|
36571
36613
|
- \`gpt-5.6-terra\` + \`high\` only after observed cross-layer or concurrency ambiguity.
|
|
36572
|
-
- \`gpt-6-astra\` + \`high\` or \`xhigh\` (or \`gpt-5.6-sol
|
|
36573
|
-
model catalog) only for evidenced high-risk runtime, persistence,
|
|
36574
|
-
provider-protocol, or complex-concurrency work.
|
|
36575
|
-
observed evidence, the specific risk/ambiguity,
|
|
36614
|
+
- \`gpt-6-astra\` + \`high\` or \`xhigh\` (or \`gpt-6-sol\`, then \`gpt-5.6-sol\`, when the one above it
|
|
36615
|
+
is absent from the live model catalog) only for evidenced high-risk runtime, persistence,
|
|
36616
|
+
process-control, provider-protocol, or complex-concurrency work.
|
|
36617
|
+
Before any Astra, Sol or xhigh spawn, state the observed evidence, the specific risk/ambiguity,
|
|
36618
|
+
and why Terra + medium is inadequate.
|
|
36576
36619
|
|
|
36577
36620
|
## Automated waits in Codex
|
|
36578
36621
|
|
|
@@ -38716,18 +38759,12 @@ function hasDeclaredWait(tele, nowMs, armedTimerIds = /* @__PURE__ */ new Set(),
|
|
|
38716
38759
|
if (hasParkedTimerWatch(tele, armedTimerIds)) return true;
|
|
38717
38760
|
return (tele?.subAgents ?? []).some((a) => isDirectSubAgent(a) && a.state === "running");
|
|
38718
38761
|
}
|
|
38719
|
-
function heldByRunningChecks(
|
|
38720
|
-
if (
|
|
38721
|
-
|
|
38722
|
-
for (const hint of tele.lastFence.hints) {
|
|
38723
|
-
if (hint.kind !== "pr") continue;
|
|
38724
|
-
const ref = parsePrRef(hint.value);
|
|
38725
|
-
if (ref && registered.has(githubStatusKey(ref))) refs.push(githubStatusKey(ref));
|
|
38726
|
-
}
|
|
38727
|
-
if (refs.length === 0) return false;
|
|
38728
|
-
return refs.every((key) => {
|
|
38762
|
+
function heldByRunningChecks(github, registered) {
|
|
38763
|
+
if (registered.size === 0) return false;
|
|
38764
|
+
return [...registered].every((key) => {
|
|
38729
38765
|
const status = github[key];
|
|
38730
|
-
|
|
38766
|
+
if (!status || status.checks !== "running" || status.state !== "open") return false;
|
|
38767
|
+
return !(status.running === 0 && (status.gated ?? 0) > 0);
|
|
38731
38768
|
});
|
|
38732
38769
|
}
|
|
38733
38770
|
function hasLiveOwnWork(tele, registeredPrWatches) {
|
|
@@ -38828,7 +38865,7 @@ function deriveNeedsYou(row, tele, runtime, hasActionableInteraction = false, no
|
|
|
38828
38865
|
if (hasParkedExternalWait(tele, nowMs)) return false;
|
|
38829
38866
|
if (excuseLiveOwnWork && runtime !== "exited" && hasLiveBackgroundWork(tele) && !tele?.lastFence) return false;
|
|
38830
38867
|
if (excuseLiveOwnWork && runtime !== "exited" && (hasDeclaredBackgroundPark(tele, nowMs) || hasRegisteredBackgroundPark(tele, armedWatches, nowMs))) return false;
|
|
38831
|
-
if (excuseLiveOwnWork && runtime !== "exited" && heldByRunningChecks(
|
|
38868
|
+
if (excuseLiveOwnWork && runtime !== "exited" && heldByRunningChecks(github, registeredPrWatches)) return false;
|
|
38832
38869
|
if (runtime !== "exited" && (hasLiveOwnWork(tele, registeredPrWatches) || hasParkedTimerWatch(tele, armedTimerIds)) && tele?.lastFence?.kind !== "done") return !bgSnoozeArmed(row);
|
|
38833
38870
|
if (tele?.lastFence?.kind === "done") return true;
|
|
38834
38871
|
return true;
|
|
@@ -44886,7 +44923,7 @@ var init_context = __esm({
|
|
|
44886
44923
|
init_logging();
|
|
44887
44924
|
init_project_launch();
|
|
44888
44925
|
CONTEXT_STARTUP_CLEANUP_TIMEOUT_MS = 4e3;
|
|
44889
|
-
QUOTA_REFRESH_INTERVAL_MS =
|
|
44926
|
+
QUOTA_REFRESH_INTERVAL_MS = 3e4;
|
|
44890
44927
|
ContextStartupError = class extends Error {
|
|
44891
44928
|
startupError;
|
|
44892
44929
|
cleanupError;
|
|
@@ -54385,12 +54422,15 @@ a { color: inherit; }
|
|
|
54385
54422
|
(() => {
|
|
54386
54423
|
const notifyHeight = () => parent.postMessage({ type: "frizz-inline-vis-height", height: Math.ceil(document.documentElement.scrollHeight) }, "*");
|
|
54387
54424
|
addEventListener("message", (event) => {
|
|
54388
|
-
if (event.
|
|
54425
|
+
if (event.source !== parent) return;
|
|
54426
|
+
if (event.data?.type !== "frizz-inline-vis-theme" || !event.data.vars || !Number.isSafeInteger(event.data.requestId)) return;
|
|
54389
54427
|
for (const [name, value] of Object.entries(event.data.vars)) {
|
|
54390
54428
|
if (/^--[a-z0-9-]+$/.test(name) && typeof value === "string") document.documentElement.style.setProperty(name, value);
|
|
54391
54429
|
}
|
|
54392
54430
|
document.documentElement.style.colorScheme = event.data.colorScheme === "light" ? "light" : "dark";
|
|
54393
54431
|
requestAnimationFrame(notifyHeight);
|
|
54432
|
+
dispatchEvent(new CustomEvent("frizz-theme-change", { detail: { requestId: event.data.requestId, colorScheme: document.documentElement.style.colorScheme, vars: event.data.vars } }));
|
|
54433
|
+
parent.postMessage({ type: "frizz-inline-vis-applied", requestId: event.data.requestId }, "*");
|
|
54394
54434
|
});
|
|
54395
54435
|
window.openai = Object.freeze({
|
|
54396
54436
|
sendFollowUpMessage: async () => { throw new Error("Follow-up actions are not supported in Frizz visualizations yet"); }
|
|
@@ -54398,6 +54438,7 @@ a { color: inherit; }
|
|
|
54398
54438
|
addEventListener("DOMContentLoaded", () => {
|
|
54399
54439
|
new ResizeObserver(notifyHeight).observe(document.body);
|
|
54400
54440
|
notifyHeight();
|
|
54441
|
+
parent.postMessage({ type: "frizz-inline-vis-ready" }, "*");
|
|
54401
54442
|
});
|
|
54402
54443
|
})();
|
|
54403
54444
|
</script>
|
|
@@ -56353,8 +56394,8 @@ var init_runtimes = __esm({
|
|
|
56353
56394
|
init_codex_app_server();
|
|
56354
56395
|
init_frizz_paths();
|
|
56355
56396
|
init_runtime_lease();
|
|
56356
|
-
CLAUDE_AGENT_SDK_VERSION = "0.3.
|
|
56357
|
-
CLAUDE_CODE_VERSION = "2.1.
|
|
56397
|
+
CLAUDE_AGENT_SDK_VERSION = "0.3.280";
|
|
56398
|
+
CLAUDE_CODE_VERSION = "2.1.280";
|
|
56358
56399
|
CODEX_VERSION = CODEX_APP_SERVER_SUPPORTED_VERSION;
|
|
56359
56400
|
RUNTIMES_MODE_ENV = "FRIZZ_RUNTIMES";
|
|
56360
56401
|
RUNTIMES_DIR_ENV = "FRIZZ_RUNTIMES_DIR";
|