frizz 0.8.0 → 0.9.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 +3 -2
- package/dist/claude-agent-broker.js +73 -2
- package/dist/dev-child.js +4052 -1861
- package/dist/frizz.js +621 -260
- package/package.json +1 -1
- package/runtime/board/config.mjs +12 -1
- package/runtime/board/index.mjs +5 -0
- package/runtime/board/thread-update.mjs +4 -0
- package/runtime/cc-worker/.claude-plugin/plugin.json +1 -1
- package/runtime/cc-worker/DECISIONS.md +7 -0
- package/runtime/cc-worker/agents/high.md +1 -1
- package/runtime/cc-worker/agents/low.md +1 -1
- package/runtime/cc-worker/agents/max.md +1 -1
- package/runtime/cc-worker/agents/medium.md +1 -1
- package/runtime/cc-worker/agents/xhigh.md +1 -1
- package/runtime/cc-worker/bin/frizz-mcp.mjs +561 -46
- package/runtime/cc-worker/hooks/agent-dispatch.mjs +4 -4
- package/runtime/cc-worker/hooks/scratchpad.mjs +20 -24
- package/runtime/cc-worker/hooks/session-seed.mjs +2 -2
- package/runtime/cc-worker/skills/gh/scripts/github-watch.mjs +1 -1
- package/web-dist/assets/{TerminalPane-BIBHC61j.js → TerminalPane-CNFymHXK.js} +1 -1
- package/web-dist/assets/{abnfDiagram-VRR7QNED-CcFQGFPf.js → abnfDiagram-VRR7QNED-DNBrcJfV.js} +1 -1
- package/web-dist/assets/architecture-TIHT7OUA-BSUDKbro.js +1 -0
- package/web-dist/assets/{architectureDiagram-ZJ3FMSHR-DErIQOIs.js → architectureDiagram-ZJ3FMSHR-SXVydqly.js} +1 -1
- package/web-dist/assets/{blockDiagram-677ZJIJ3-CpsUqur1.js → blockDiagram-677ZJIJ3-CgI1GSdx.js} +1 -1
- package/web-dist/assets/{c4Diagram-LMCZKHZV-D2dHmCEJ.js → c4Diagram-LMCZKHZV-KDmJm2tG.js} +1 -1
- package/web-dist/assets/channel-DaCOnTxr.js +1 -0
- package/web-dist/assets/{chunk-32BRIVSS-aOCEfxRW.js → chunk-32BRIVSS-j3eOjq4Z.js} +1 -1
- package/web-dist/assets/{chunk-52WLFC77-2iw4nJPC.js → chunk-52WLFC77-DZHfa78H.js} +1 -1
- package/web-dist/assets/{chunk-C7G6YPKG-BPD3iHVE.js → chunk-C7G6YPKG-CiB5uo24.js} +1 -1
- package/web-dist/assets/{chunk-EX3LRPZG-DrefHift.js → chunk-EX3LRPZG-B35Inyjz.js} +1 -1
- package/web-dist/assets/{chunk-FWX5IMBZ-By940EHT.js → chunk-FWX5IMBZ-D2sRvM5U.js} +2 -2
- package/web-dist/assets/{chunk-HOUHSVGY-B1Cqvz7e.js → chunk-HOUHSVGY-D247PDv6.js} +1 -1
- package/web-dist/assets/{chunk-ICXQ74PX-1LkVpWuI.js → chunk-ICXQ74PX-Bu3Tb6Ec.js} +1 -1
- package/web-dist/assets/{chunk-MOJQB5TN-Ip1cy64r.js → chunk-MOJQB5TN-C_lQy4on.js} +1 -1
- package/web-dist/assets/{chunk-OGEWGWER-CNjVyu8F.js → chunk-OGEWGWER-DU5ZBedR.js} +1 -1
- package/web-dist/assets/{chunk-PUDLZKDR-9HZR6DAU.js → chunk-PUDLZKDR-DWRT7ztS.js} +1 -1
- package/web-dist/assets/{chunk-Q4XR5HBZ-vtWwOCuQ.js → chunk-Q4XR5HBZ-CCX4AK_n.js} +1 -1
- package/web-dist/assets/{chunk-V7JOEXUC-DC6YaHG0.js → chunk-V7JOEXUC-VbixbkDG.js} +1 -1
- package/web-dist/assets/{chunk-VAUOI2AC-CP-xe7SD.js → chunk-VAUOI2AC-PJvChxMA.js} +1 -1
- package/web-dist/assets/{chunk-VR4S4FIN-wbxDFptH.js → chunk-VR4S4FIN-BjsMfxj8.js} +1 -1
- package/web-dist/assets/{chunk-WYO6CB5R-dibXmwpK.js → chunk-WYO6CB5R-Bcb97r3w.js} +1 -1
- package/web-dist/assets/{chunk-ZGVPDNZ5-_y_itJHG.js → chunk-ZGVPDNZ5-CT2sZlhT.js} +1 -1
- package/web-dist/assets/classDiagram-OUVF2IWQ-BlylbZXV.js +1 -0
- package/web-dist/assets/classDiagram-v2-EOCWNBFH-BlylbZXV.js +1 -0
- package/web-dist/assets/{cynefin-VYW2F7L2-D1RYokZP.js → cynefin-VYW2F7L2-dUpO4u0w.js} +1 -1
- package/web-dist/assets/{cynefinDiagram-TSTJHNR4-qofqoy3T.js → cynefinDiagram-TSTJHNR4-BQZ3UIsx.js} +1 -1
- package/web-dist/assets/{dagre-VKFMJZFB-CgHLoGFk.js → dagre-VKFMJZFB-K-oO8w51.js} +1 -1
- package/web-dist/assets/{diagram-FQU43EPY-JEAs4LOb.js → diagram-FQU43EPY-Cr47GJ_S.js} +1 -1
- package/web-dist/assets/{diagram-G47NLZAW--tLd4Lf7.js → diagram-G47NLZAW-BbWzSkoZ.js} +1 -1
- package/web-dist/assets/{diagram-NH7WQ7WH-DPbw9CJU.js → diagram-NH7WQ7WH-BGJJBgGM.js} +1 -1
- package/web-dist/assets/{diagram-OA4YK3LP-CDrb7nWs.js → diagram-OA4YK3LP-2W7aunEN.js} +1 -1
- package/web-dist/assets/{diagram-WEI45ONY-DJswZe3f.js → diagram-WEI45ONY-D-4ITFI6.js} +1 -1
- package/web-dist/assets/{ebnfDiagram-CCIWWBDH-BP8-PZMF.js → ebnfDiagram-CCIWWBDH-CxUcx103.js} +1 -1
- package/web-dist/assets/{erDiagram-Q63AITRT-BQXuebf5.js → erDiagram-Q63AITRT-Cf_5SWAE.js} +1 -1
- package/web-dist/assets/eventmodeling-45OFAUF4-DxKQnZNV.js +1 -0
- package/web-dist/assets/flowDiagram-23GEKE2U-Cdz9YM2Z.js +1 -0
- package/web-dist/assets/{ganttDiagram-NO4QXBWP-DotMb935.js → ganttDiagram-NO4QXBWP-CVZI8Ywa.js} +1 -1
- package/web-dist/assets/{gitGraph-TEB2WS4Q-B1vbYyKQ.js → gitGraph-TEB2WS4Q-BsiGpR9l.js} +1 -1
- package/web-dist/assets/{gitGraphDiagram-IHSO6WYX-BjDXKk4m.js → gitGraphDiagram-IHSO6WYX-DVym_4l1.js} +1 -1
- package/web-dist/assets/index-CYzJK7u0.js +497 -0
- package/web-dist/assets/index-CovJDCWc.css +1 -0
- package/web-dist/assets/{info-DKCQHKI2-xLTLqQju.js → info-DKCQHKI2-DYcsKFv-.js} +1 -1
- package/web-dist/assets/{infoDiagram-FWYZ7A6U-BFfYUsrC.js → infoDiagram-FWYZ7A6U-hjVxlrTT.js} +1 -1
- package/web-dist/assets/{ishikawaDiagram-FXEZZL3T-45a7VMwm.js → ishikawaDiagram-FXEZZL3T-B0DKOPSS.js} +1 -1
- package/web-dist/assets/{journeyDiagram-5HDEW3XC-CEBUpu59.js → journeyDiagram-5HDEW3XC-Cohibc5O.js} +1 -1
- package/web-dist/assets/{kanban-definition-HUTT4EX6-RwKtDFzG.js → kanban-definition-HUTT4EX6-_6Zr31vM.js} +1 -1
- package/web-dist/assets/{line-DStcMIry.js → line-B14EZI6M.js} +1 -1
- package/web-dist/assets/{mermaid-parser.core-B0ekgQMA.js → mermaid-parser.core-DHkc6cqw.js} +3 -3
- package/web-dist/assets/{mermaid.core-w1hcQaPy.js → mermaid.core-DuTvdsKf.js} +3 -3
- package/web-dist/assets/{mindmap-definition-LN4V7U3C-D_n38Imb.js → mindmap-definition-LN4V7U3C-DPRF9pW2.js} +1 -1
- package/web-dist/assets/{packet-7NZHBO7P-CstGeBOX.js → packet-7NZHBO7P-Ci8oCcGM.js} +1 -1
- package/web-dist/assets/{pegDiagram-2B236MQR-DvowVyTO.js → pegDiagram-2B236MQR-Cr3ctC6e.js} +1 -1
- package/web-dist/assets/{pie-RZYD4A2V-BOP2j_HH.js → pie-RZYD4A2V-EHgA307y.js} +1 -1
- package/web-dist/assets/{pieDiagram-ENE6RG2P-CKRqu_2f.js → pieDiagram-ENE6RG2P-UW6Bmu6F.js} +1 -1
- package/web-dist/assets/{quadrantDiagram-ABIIQ3AL-zSArSS8R.js → quadrantDiagram-ABIIQ3AL-D6tAsRj9.js} +1 -1
- package/web-dist/assets/{radar-I7S5WNFK-BqRdNIBw.js → radar-I7S5WNFK-CAQqojcd.js} +1 -1
- package/web-dist/assets/{railroad-3IZDKUUU-BaKcl_LU.js → railroad-3IZDKUUU-BZsAOTrm.js} +1 -1
- package/web-dist/assets/railroad-abnf-AHOZXSZD-_2rSHfPz.js +1 -0
- package/web-dist/assets/railroad-ebnf-EBAXGLYW-xM3eAMFz.js +1 -0
- package/web-dist/assets/railroad-peg-LSFZ7HO6-cZlBUsED.js +1 -0
- package/web-dist/assets/{railroadDiagram-RFXS5EU6-BrXTQge9.js → railroadDiagram-RFXS5EU6-bSpff55H.js} +1 -1
- package/web-dist/assets/{requirementDiagram-TGXJPOKE-DBBNi_SS.js → requirementDiagram-TGXJPOKE-DIAYvXoB.js} +1 -1
- package/web-dist/assets/{sankeyDiagram-HTMAVEWB-BwFi7xFy.js → sankeyDiagram-HTMAVEWB-DEnsSz3F.js} +1 -1
- package/web-dist/assets/{sequenceDiagram-DBY2YBRQ-CeivqMeT.js → sequenceDiagram-DBY2YBRQ-DsG7eb9R.js} +1 -1
- package/web-dist/assets/{stateDiagram-2N3HPSRC-C6NZsnFm.js → stateDiagram-2N3HPSRC-DT3XNwjo.js} +1 -1
- package/web-dist/assets/stateDiagram-v2-6OUMAXLB-C06v0Ltu.js +1 -0
- package/web-dist/assets/{swimlanes-5IMT3BWC-C0MubXTG.js → swimlanes-5IMT3BWC-B5hZwgRo.js} +1 -1
- package/web-dist/assets/swimlanesDiagram-G3AALYLV-CXyN7ZyO.js +8 -0
- package/web-dist/assets/{timeline-definition-FHXFAJF6-CtxwSvFu.js → timeline-definition-FHXFAJF6-BVTsjkfu.js} +1 -1
- package/web-dist/assets/{treeView-QDETBFTQ-CXcwSjey.js → treeView-QDETBFTQ-M6HmP4bB.js} +1 -1
- package/web-dist/assets/{treemap-6X3UGDF4-Uspgr-d1.js → treemap-6X3UGDF4-C60TppfC.js} +1 -1
- package/web-dist/assets/{vennDiagram-L72KCM5P-tZamQQAQ.js → vennDiagram-L72KCM5P-Dv1y3g4S.js} +1 -1
- package/web-dist/assets/{wardley-OPB4EBWU-0_79c19P.js → wardley-OPB4EBWU-D0lMJMWt.js} +1 -1
- package/web-dist/assets/{wardleyDiagram-EHGQE667-uYmUsP66.js → wardleyDiagram-EHGQE667-B1E5NtZY.js} +1 -1
- package/web-dist/assets/{xychartDiagram-FW5EYKEG-BsOU7Wf7.js → xychartDiagram-FW5EYKEG-oA91YOvh.js} +1 -1
- package/web-dist/index.html +2 -2
- package/web-dist/assets/architecture-TIHT7OUA-BZEZt7jZ.js +0 -1
- package/web-dist/assets/channel-DdFRPviT.js +0 -1
- package/web-dist/assets/classDiagram-OUVF2IWQ-Bf3duLb8.js +0 -1
- package/web-dist/assets/classDiagram-v2-EOCWNBFH-Bf3duLb8.js +0 -1
- package/web-dist/assets/eventmodeling-45OFAUF4-DOLxRQQ5.js +0 -1
- package/web-dist/assets/flowDiagram-23GEKE2U-DoK1yb0H.js +0 -1
- package/web-dist/assets/index-CmrDpsD8.css +0 -1
- package/web-dist/assets/index-Cs0TDGMu.js +0 -491
- package/web-dist/assets/railroad-abnf-AHOZXSZD-itqDLg1p.js +0 -1
- package/web-dist/assets/railroad-ebnf-EBAXGLYW-ze7rLVCi.js +0 -1
- package/web-dist/assets/railroad-peg-LSFZ7HO6-DKsYkEuG.js +0 -1
- package/web-dist/assets/stateDiagram-v2-6OUMAXLB-B3YRnI4W.js +0 -1
- package/web-dist/assets/swimlanesDiagram-G3AALYLV-CXva4Ic9.js +0 -8
package/README.md
CHANGED
|
@@ -151,7 +151,8 @@ Options:
|
|
|
151
151
|
|
|
152
152
|
|
|
153
153
|
To reach the board from a phone or another machine, press R in the terminal running it: a short
|
|
154
|
-
walkthrough sets up a frizz.sh name
|
|
154
|
+
walkthrough sets up a private frizz.sh name (no account needed), a custom one, a Cloudflare
|
|
155
|
+
Tunnel, Tailscale, or a proxy of your own, and
|
|
155
156
|
remembers the choice, so a plain launch serves it from then on. The board stays on loopback and
|
|
156
157
|
shows a single-use sign-in link as a QR; press L for a fresh one, or run --link from another shell.
|
|
157
158
|
```
|
|
@@ -216,7 +217,7 @@ shows a single-use sign-in link as a QR; press L for a fresh one, or run --link
|
|
|
216
217
|
<details>
|
|
217
218
|
<summary><b>Can I reach it from anywhere, not just my LAN?</b></summary>
|
|
218
219
|
|
|
219
|
-
> Same answer: press **R** and pick a frizz.sh name, a Cloudflare Tunnel, or Tailscale. Each is reachable from anywhere the transport is — a frizz.sh name and a Cloudflare Tunnel from the open internet, Tailscale from your own devices.
|
|
220
|
+
> Same answer: press **R** and pick a private frizz.sh name (unguessable, no account), a custom frizz.sh name, a Cloudflare Tunnel, or Tailscale. Each is reachable from anywhere the transport is — a frizz.sh name and a Cloudflare Tunnel from the open internet, Tailscale from your own devices.
|
|
220
221
|
>
|
|
221
222
|
> Frizz has no accounts, so the single-use sign-in link **is** the door: a phone that scans it gets a session; nobody else gets in. Sessions are per device and can be listed and revoked with `npx frizz --sessions` and `npx frizz --sign-out`.
|
|
222
223
|
|
|
@@ -20353,6 +20353,7 @@ var RealClaudeQueryHandle = class {
|
|
|
20353
20353
|
await this.ready();
|
|
20354
20354
|
this.assertOpen();
|
|
20355
20355
|
const result = await this.awaitOpenControl(this.sdkQuery.reloadPlugins());
|
|
20356
|
+
this.skillSourcesPromise = null;
|
|
20356
20357
|
return {
|
|
20357
20358
|
plugins: Array.isArray(result?.plugins) ? result.plugins.length : 0,
|
|
20358
20359
|
commands: Array.isArray(result?.commands) ? result.commands.length : 0,
|
|
@@ -20371,16 +20372,59 @@ var RealClaudeQueryHandle = class {
|
|
|
20371
20372
|
// `supportedCommands()` would re-serve from its cache), and the init frame's `skills` array is the
|
|
20372
20373
|
// harness's own verdict on which of those are skills rather than built-in commands. The intersection
|
|
20373
20374
|
// is exactly "what `/name` invokes a skill", with descriptions, and zero frizz-side discovery.
|
|
20375
|
+
//
|
|
20376
|
+
// Where each one CAME FROM is a second question, and claude answers it in exactly one place:
|
|
20377
|
+
// `getContextUsage().skills.skillFrontmatter[].source`. Not in `SlashCommand`, which carries only
|
|
20378
|
+
// {name, description, argumentHint, aliases}. The tempting free alternative — the CLI appends the
|
|
20379
|
+
// source to the description as a parenthetical, " (user)" / " (project)" — was measured and rejected:
|
|
20380
|
+
// it names only those two of the four roots, and the same regex false-positives on descriptions that
|
|
20381
|
+
// legitimately end in a parenthetical (`/deep-research` ends "(dynamic workflow)", `/clear`
|
|
20382
|
+
// "(resumable with /resume)", `/fast` "(Opus 4.8)"). A wrong label is worse than none.
|
|
20374
20383
|
async listSkills() {
|
|
20375
20384
|
const initialization = await this.initializationResult();
|
|
20385
|
+
const sources = await this.skillSources();
|
|
20376
20386
|
const skillNames = new Set(this.initSkills);
|
|
20377
20387
|
const skills = [];
|
|
20378
20388
|
for (const command of initialization.commands) {
|
|
20379
20389
|
if (!command.name || !skillNames.has(command.name)) continue;
|
|
20380
|
-
|
|
20390
|
+
const source = sources.get(command.name);
|
|
20391
|
+
skills.push({ name: command.name, description: withoutRedundantSource(command.description, source).slice(0, 1024), source });
|
|
20381
20392
|
}
|
|
20382
20393
|
return skills;
|
|
20383
20394
|
}
|
|
20395
|
+
// The name→source map behind listSkills, fetched ONCE per session and memoized on the promise.
|
|
20396
|
+
//
|
|
20397
|
+
// `getContextUsage()` is a real control round trip that re-counts tokens every time — measured at
|
|
20398
|
+
// 1222ms then 1105ms against claude 2.1.246, so the CLI does not cache it either. Paying that on
|
|
20399
|
+
// every `/` would be felt; paying it once, lazily, on the first `/` a thread ever opens is not, and
|
|
20400
|
+
// the web caches the finished listing per slug on top of that. Deliberately NOT prefetched at init:
|
|
20401
|
+
// most threads never open the menu, and taxing every session start for a menu nobody asked for is
|
|
20402
|
+
// the wrong trade.
|
|
20403
|
+
//
|
|
20404
|
+
// A failure resolves to an EMPTY map rather than rejecting: the source is decoration, and losing it
|
|
20405
|
+
// must never cost the operator the listing itself.
|
|
20406
|
+
skillSourcesPromise = null;
|
|
20407
|
+
skillSources() {
|
|
20408
|
+
this.skillSourcesPromise ??= this.fetchSkillSources().catch(() => /* @__PURE__ */ new Map());
|
|
20409
|
+
return this.skillSourcesPromise;
|
|
20410
|
+
}
|
|
20411
|
+
async fetchSkillSources() {
|
|
20412
|
+
this.assertOpen();
|
|
20413
|
+
const usage = await this.awaitOpenControl(this.sdkQuery.getContextUsage());
|
|
20414
|
+
const rows = boundedArray(usage?.skills?.skillFrontmatter, "contextUsage.skills.skillFrontmatter", 1024);
|
|
20415
|
+
const sources = /* @__PURE__ */ new Map();
|
|
20416
|
+
for (const [index, entry] of rows.entries()) {
|
|
20417
|
+
try {
|
|
20418
|
+
const row = objectValue(entry, `contextUsage.skills.skillFrontmatter[${index}]`);
|
|
20419
|
+
const name = safeText(row.name, `contextUsage.skills.skillFrontmatter[${index}].name`, 512);
|
|
20420
|
+
const source = claudeSkillSource(safeText(row.source, `contextUsage.skills.skillFrontmatter[${index}].source`, 64));
|
|
20421
|
+
if (name && source) sources.set(name, source);
|
|
20422
|
+
} catch {
|
|
20423
|
+
continue;
|
|
20424
|
+
}
|
|
20425
|
+
}
|
|
20426
|
+
return sources;
|
|
20427
|
+
}
|
|
20384
20428
|
// Unqueue a follow-up the operator has taken back.
|
|
20385
20429
|
//
|
|
20386
20430
|
// `cancelAsyncMessage` is present at runtime in @anthropic-ai/claude-agent-sdk 0.3.207 but absent
|
|
@@ -21255,6 +21299,19 @@ function mapModelContextWindows(raw) {
|
|
|
21255
21299
|
}
|
|
21256
21300
|
return count === 0 ? void 0 : out;
|
|
21257
21301
|
}
|
|
21302
|
+
var CLAUDE_SOURCE_SUFFIX = { user: " (user)", project: " (project)" };
|
|
21303
|
+
function withoutRedundantSource(description, source) {
|
|
21304
|
+
const suffix = source && CLAUDE_SOURCE_SUFFIX[source];
|
|
21305
|
+
if (!suffix || !description.endsWith(suffix)) return description;
|
|
21306
|
+
return description.slice(0, -suffix.length).trimEnd();
|
|
21307
|
+
}
|
|
21308
|
+
function claudeSkillSource(source) {
|
|
21309
|
+
if (source === "projectSettings") return "project";
|
|
21310
|
+
if (source === "userSettings") return "user";
|
|
21311
|
+
if (source === "built-in") return "builtin";
|
|
21312
|
+
if (source === "plugin") return "plugin";
|
|
21313
|
+
return void 0;
|
|
21314
|
+
}
|
|
21258
21315
|
function mapControlInitialization(raw) {
|
|
21259
21316
|
const commands = boundedArray(raw.commands, "initialization.commands", 256).map((entry, index) => {
|
|
21260
21317
|
const command = objectValue(entry, `initialization.commands[${index}]`);
|
|
@@ -21445,6 +21502,20 @@ function objectValue(value, label) {
|
|
|
21445
21502
|
return value;
|
|
21446
21503
|
}
|
|
21447
21504
|
|
|
21505
|
+
// packages/server/src/backend/types.ts
|
|
21506
|
+
var CLAUDE_WORKER_ENV = {
|
|
21507
|
+
CLAUDE_CODE_TOTAL_TOKENS_REMINDER: "infinite",
|
|
21508
|
+
BASH_DEFAULT_TIMEOUT_MS: "60000",
|
|
21509
|
+
BASH_MAX_TIMEOUT_MS: String(24 * 60 * 60 * 1e3)
|
|
21510
|
+
};
|
|
21511
|
+
var CLAUDE_AUTO_COMPACT_WINDOW_ENV = "CLAUDE_CODE_AUTO_COMPACT_WINDOW";
|
|
21512
|
+
function claudeCompactionWindowOf(env) {
|
|
21513
|
+
const raw = env?.[CLAUDE_AUTO_COMPACT_WINDOW_ENV];
|
|
21514
|
+
if (raw === void 0) return void 0;
|
|
21515
|
+
const window2 = Number(raw);
|
|
21516
|
+
return Number.isInteger(window2) && window2 > 0 ? window2 : void 0;
|
|
21517
|
+
}
|
|
21518
|
+
|
|
21448
21519
|
// packages/server/src/backend/claude-broker-diagnostics.ts
|
|
21449
21520
|
import { appendFileSync as appendFileSync2, mkdirSync as mkdirSync2, readFileSync as readFileSync2, renameSync as renameSync2, statSync as statSync2 } from "node:fs";
|
|
21450
21521
|
import { join } from "node:path";
|
|
@@ -21755,7 +21826,7 @@ function runClaudeBroker(config) {
|
|
|
21755
21826
|
server.listen(config.socketPath, () => {
|
|
21756
21827
|
published = true;
|
|
21757
21828
|
if (config.recordPath) {
|
|
21758
|
-
const record = { daemonPid: process.pid, socketPath: config.socketPath, sessionId: config.sessionId, generation, createdAt: (/* @__PURE__ */ new Date()).toISOString(), capabilities: BROKER_CAPABILITIES };
|
|
21829
|
+
const record = { daemonPid: process.pid, socketPath: config.socketPath, sessionId: config.sessionId, generation, createdAt: (/* @__PURE__ */ new Date()).toISOString(), capabilities: BROKER_CAPABILITIES, compactionWindow: claudeCompactionWindowOf(config.workerEnv) };
|
|
21759
21830
|
try {
|
|
21760
21831
|
writeFileSync(config.recordPath, JSON.stringify(record), { mode: 384 });
|
|
21761
21832
|
} catch {
|