frizz 0.5.1 → 0.7.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 +10 -7
- package/dist/claude-agent-broker.js +31 -6
- package/dist/dev-child.js +8869 -1434
- package/dist/frizz.js +7624 -254
- package/package.json +2 -1
- package/runtime/cc-worker/DECISIONS.md +2 -2
- package/runtime/cc-worker/bin/browser-mcp-tools.json +1192 -0
- package/runtime/cc-worker/bin/browser-mcp.mjs +730 -0
- package/runtime/cc-worker/bin/frizz-mcp.mjs +18 -7
- package/runtime/cc-worker/hooks/deny-ask.mjs +3 -3
- package/runtime/cc-worker/hooks/deny-plan.mjs +5 -4
- package/runtime/cc-worker/hooks/perm-policy.mjs +1 -1
- package/runtime/cc-worker/hooks/session-seed.mjs +2 -2
- package/runtime/cc-worker/skills/gh/SKILL.md +8 -7
- package/runtime/cc-worker/skills/waits/SKILL.md +4 -3
- package/web-dist/assets/{TerminalPane-WcpgmCA-.js → TerminalPane-DW91LtY6.js} +1 -1
- package/web-dist/assets/{abnfDiagram-VRR7QNED-Caecklbz.js → abnfDiagram-VRR7QNED-Cz9pKsnx.js} +1 -1
- package/web-dist/assets/architecture-TIHT7OUA-pEHgxrgQ.js +1 -0
- package/web-dist/assets/{architectureDiagram-ZJ3FMSHR-BEk0fg8C.js → architectureDiagram-ZJ3FMSHR-Cx1Inab9.js} +1 -1
- package/web-dist/assets/{blockDiagram-677ZJIJ3-B4yq3xiy.js → blockDiagram-677ZJIJ3-Dkow3KWq.js} +1 -1
- package/web-dist/assets/{c4Diagram-LMCZKHZV-DaA5NBkz.js → c4Diagram-LMCZKHZV-D54f0v8B.js} +1 -1
- package/web-dist/assets/channel-DmtoXjBB.js +1 -0
- package/web-dist/assets/{chunk-32BRIVSS-2XsSs8F_.js → chunk-32BRIVSS-5HfLNqOq.js} +1 -1
- package/web-dist/assets/{chunk-52WLFC77-DWJfECP3.js → chunk-52WLFC77-CoVH-jjk.js} +1 -1
- package/web-dist/assets/{chunk-C7G6YPKG-Bz07eaGt.js → chunk-C7G6YPKG-w41h00On.js} +1 -1
- package/web-dist/assets/{chunk-EX3LRPZG-D78kZEMM.js → chunk-EX3LRPZG-BC_Frphy.js} +1 -1
- package/web-dist/assets/{chunk-FWX5IMBZ-CeCa17CW.js → chunk-FWX5IMBZ-DLZVUhWr.js} +2 -2
- package/web-dist/assets/{chunk-HOUHSVGY-9H4GFuBa.js → chunk-HOUHSVGY-DCl7dozs.js} +1 -1
- package/web-dist/assets/{chunk-ICXQ74PX--Aa17r4X.js → chunk-ICXQ74PX-I8bc3hpu.js} +1 -1
- package/web-dist/assets/{chunk-MOJQB5TN-C3vXhsPV.js → chunk-MOJQB5TN-D1tbS5-A.js} +1 -1
- package/web-dist/assets/{chunk-OGEWGWER-G4kZRBkX.js → chunk-OGEWGWER-CLa17J5_.js} +1 -1
- package/web-dist/assets/{chunk-PUDLZKDR-DWd5kvyM.js → chunk-PUDLZKDR-DcYIQuxf.js} +1 -1
- package/web-dist/assets/{chunk-Q4XR5HBZ-u55p39Up.js → chunk-Q4XR5HBZ-DGHqsWli.js} +1 -1
- package/web-dist/assets/{chunk-V7JOEXUC-BU4YBmV4.js → chunk-V7JOEXUC-DdVYI4tg.js} +1 -1
- package/web-dist/assets/{chunk-VAUOI2AC-VXcmT20q.js → chunk-VAUOI2AC-Dn_uoDoN.js} +1 -1
- package/web-dist/assets/{chunk-VR4S4FIN-CSjEXLOC.js → chunk-VR4S4FIN-AM_J_EWt.js} +1 -1
- package/web-dist/assets/{chunk-WYO6CB5R-4WGk2dpL.js → chunk-WYO6CB5R-BldKUlC0.js} +1 -1
- package/web-dist/assets/{chunk-ZGVPDNZ5-D5Xl8ZV6.js → chunk-ZGVPDNZ5-Oh85mcuX.js} +1 -1
- package/web-dist/assets/classDiagram-OUVF2IWQ-CUGsPtaX.js +1 -0
- package/web-dist/assets/classDiagram-v2-EOCWNBFH-CUGsPtaX.js +1 -0
- package/web-dist/assets/{cynefin-VYW2F7L2-O6wB49wK.js → cynefin-VYW2F7L2-5lF8kTLT.js} +1 -1
- package/web-dist/assets/{cynefinDiagram-TSTJHNR4-pd6ZogNC.js → cynefinDiagram-TSTJHNR4-_otwu953.js} +1 -1
- package/web-dist/assets/{dagre-VKFMJZFB-D8W1S6fw.js → dagre-VKFMJZFB-DxX5d4Jp.js} +1 -1
- package/web-dist/assets/{diagram-FQU43EPY-Bm1NOkHd.js → diagram-FQU43EPY-JkCl7NEC.js} +1 -1
- package/web-dist/assets/{diagram-G47NLZAW-CjwnXTIc.js → diagram-G47NLZAW-ETwnVi8G.js} +1 -1
- package/web-dist/assets/{diagram-NH7WQ7WH-DH1jZ_mu.js → diagram-NH7WQ7WH-DZXKHMOv.js} +1 -1
- package/web-dist/assets/{diagram-OA4YK3LP-B-s969Q_.js → diagram-OA4YK3LP--Yt9Hbcy.js} +1 -1
- package/web-dist/assets/{diagram-WEI45ONY-BU3lv6cL.js → diagram-WEI45ONY-BXUskT8t.js} +1 -1
- package/web-dist/assets/{ebnfDiagram-CCIWWBDH-FsAeyqcC.js → ebnfDiagram-CCIWWBDH-C7E1X1Dl.js} +1 -1
- package/web-dist/assets/{erDiagram-Q63AITRT-BRvg5Y9d.js → erDiagram-Q63AITRT-DOfGp1t7.js} +1 -1
- package/web-dist/assets/eventmodeling-45OFAUF4-D47al60X.js +1 -0
- package/web-dist/assets/flowDiagram-23GEKE2U-Cfew-ywI.js +1 -0
- package/web-dist/assets/{ganttDiagram-NO4QXBWP-eATKNh9U.js → ganttDiagram-NO4QXBWP-P5HZV3uF.js} +1 -1
- package/web-dist/assets/{gitGraph-TEB2WS4Q-CNYqsua8.js → gitGraph-TEB2WS4Q-CsJYjOme.js} +1 -1
- package/web-dist/assets/{gitGraphDiagram-IHSO6WYX-BUxgluf8.js → gitGraphDiagram-IHSO6WYX-BNyrduBc.js} +1 -1
- package/web-dist/assets/index-CYVVF_ZU.js +486 -0
- package/web-dist/assets/index-CjEngYN7.css +1 -0
- package/web-dist/assets/{info-DKCQHKI2-HsVLwo1c.js → info-DKCQHKI2-WzpT_dbU.js} +1 -1
- package/web-dist/assets/{infoDiagram-FWYZ7A6U-D7U65xDp.js → infoDiagram-FWYZ7A6U-CA_SxvAY.js} +1 -1
- package/web-dist/assets/{ishikawaDiagram-FXEZZL3T-BsfIYXjX.js → ishikawaDiagram-FXEZZL3T-DXMy0GH9.js} +1 -1
- package/web-dist/assets/{journeyDiagram-5HDEW3XC-CpkREKol.js → journeyDiagram-5HDEW3XC-Bwmn4bNv.js} +1 -1
- package/web-dist/assets/{kanban-definition-HUTT4EX6-2M3KW6Gw.js → kanban-definition-HUTT4EX6-D265Z0Fg.js} +1 -1
- package/web-dist/assets/{line-Cs7zWs24.js → line-DNn_Towe.js} +1 -1
- package/web-dist/assets/{mermaid-parser.core-Dw-IECV5.js → mermaid-parser.core-3CrMhKoT.js} +3 -3
- package/web-dist/assets/{mermaid.core-C1lrddjT.js → mermaid.core-DfCFu8_x.js} +3 -3
- package/web-dist/assets/{mindmap-definition-LN4V7U3C-gVS5On1g.js → mindmap-definition-LN4V7U3C-CQ5g8Qrh.js} +1 -1
- package/web-dist/assets/{packet-7NZHBO7P-Tti1-UWA.js → packet-7NZHBO7P-CRDQ5t5W.js} +1 -1
- package/web-dist/assets/{pegDiagram-2B236MQR-DE5in93G.js → pegDiagram-2B236MQR-B0XFyb7d.js} +1 -1
- package/web-dist/assets/{pie-RZYD4A2V-DfLNkvHl.js → pie-RZYD4A2V-DqjiBFGO.js} +1 -1
- package/web-dist/assets/{pieDiagram-ENE6RG2P-DcqSqJqb.js → pieDiagram-ENE6RG2P-C41GJ3-U.js} +1 -1
- package/web-dist/assets/{quadrantDiagram-ABIIQ3AL-DR-nRPgN.js → quadrantDiagram-ABIIQ3AL-9cF0WJaM.js} +1 -1
- package/web-dist/assets/{radar-I7S5WNFK-DGLDBfPd.js → radar-I7S5WNFK-S1F7Z4Kj.js} +1 -1
- package/web-dist/assets/{railroad-3IZDKUUU-BaiGEHlV.js → railroad-3IZDKUUU-da9Pjcp1.js} +1 -1
- package/web-dist/assets/railroad-abnf-AHOZXSZD-cPb8e4yf.js +1 -0
- package/web-dist/assets/railroad-ebnf-EBAXGLYW-BdArTI_P.js +1 -0
- package/web-dist/assets/railroad-peg-LSFZ7HO6-cRtFMlRA.js +1 -0
- package/web-dist/assets/{railroadDiagram-RFXS5EU6-82aEev5_.js → railroadDiagram-RFXS5EU6-CkXBDByE.js} +1 -1
- package/web-dist/assets/{requirementDiagram-TGXJPOKE-Bs8opBRj.js → requirementDiagram-TGXJPOKE-CL9Famg0.js} +1 -1
- package/web-dist/assets/{sankeyDiagram-HTMAVEWB-gOb3FIr8.js → sankeyDiagram-HTMAVEWB-LyB-A0pD.js} +1 -1
- package/web-dist/assets/{sequenceDiagram-DBY2YBRQ-6DvjtRHR.js → sequenceDiagram-DBY2YBRQ-DXfA9UDM.js} +1 -1
- package/web-dist/assets/{stateDiagram-2N3HPSRC-Cg2LWdUf.js → stateDiagram-2N3HPSRC-DgxMkPRv.js} +1 -1
- package/web-dist/assets/stateDiagram-v2-6OUMAXLB-BVl1T6pD.js +1 -0
- package/web-dist/assets/{swimlanes-5IMT3BWC-BDpPdYEl.js → swimlanes-5IMT3BWC-TvRb3Iib.js} +1 -1
- package/web-dist/assets/swimlanesDiagram-G3AALYLV-CaBRomjp.js +8 -0
- package/web-dist/assets/{timeline-definition-FHXFAJF6-BSjfeutv.js → timeline-definition-FHXFAJF6-BBvC3bzZ.js} +1 -1
- package/web-dist/assets/{treeView-QDETBFTQ-DwgPy6V3.js → treeView-QDETBFTQ-CvCYIkJk.js} +1 -1
- package/web-dist/assets/{treemap-6X3UGDF4-7eiifTKW.js → treemap-6X3UGDF4-Bj60PrS0.js} +1 -1
- package/web-dist/assets/{vennDiagram-L72KCM5P-9u4AhcnV.js → vennDiagram-L72KCM5P-CLuLJiNi.js} +1 -1
- package/web-dist/assets/{wardley-OPB4EBWU-DqNb5x9U.js → wardley-OPB4EBWU-C4tNB2Mi.js} +1 -1
- package/web-dist/assets/{wardleyDiagram-EHGQE667-DlJ7h3vg.js → wardleyDiagram-EHGQE667-D_bno6Pc.js} +1 -1
- package/web-dist/assets/{xychartDiagram-FW5EYKEG-B_9ukg2S.js → xychartDiagram-FW5EYKEG-CklFVNTA.js} +1 -1
- package/web-dist/index.html +2 -2
- package/web-dist/assets/architecture-TIHT7OUA-BTy2nvYL.js +0 -1
- package/web-dist/assets/channel-WghlT4VS.js +0 -1
- package/web-dist/assets/classDiagram-OUVF2IWQ-D21-Dy4r.js +0 -1
- package/web-dist/assets/classDiagram-v2-EOCWNBFH-D21-Dy4r.js +0 -1
- package/web-dist/assets/eventmodeling-45OFAUF4-RhX2WA7g.js +0 -1
- package/web-dist/assets/flowDiagram-23GEKE2U-C7N14tdV.js +0 -1
- package/web-dist/assets/index-BFuReKr0.js +0 -368
- package/web-dist/assets/index-BH9U3Zlg.css +0 -1
- package/web-dist/assets/railroad-abnf-AHOZXSZD-BCeoIOWA.js +0 -1
- package/web-dist/assets/railroad-ebnf-EBAXGLYW-lZpXJLD8.js +0 -1
- package/web-dist/assets/railroad-peg-LSFZ7HO6-CaUBrHTL.js +0 -1
- package/web-dist/assets/stateDiagram-v2-6OUMAXLB-Digf9CWZ.js +0 -1
- package/web-dist/assets/swimlanesDiagram-G3AALYLV-DEZRDWHA.js +0 -8
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<p align="center">
|
|
2
2
|
<h1 align="center"><img src="assets/logo-concepts/final/fff-tile.png" alt="" width="104" height="104"><br/>Frizz</h1>
|
|
3
|
-
<p align="center">
|
|
3
|
+
<p align="center">An opinionated agent console for extreme productivity.
|
|
4
4
|
<br/>
|
|
5
5
|
by <a href="https://x.com/colinhacks">@colinhacks</a>
|
|
6
6
|
</p>
|
|
@@ -62,7 +62,7 @@ Frizz is a browser tab, a queue, and the agent CLIs you already pay for. It brin
|
|
|
62
62
|
- 🐙 **GitHub integration.** Browse your repo's issues and pull requests without leaving the composer, and turn a selection of them into threads. Workers can read issues, diffs, and CI on their own.
|
|
63
63
|
- 👀 **Built-in CI and PR watchers.** A worker waiting on a build or a review doesn't hand the thread back to you to be told "keep going." It watches, and picks the work back up when the run goes green or a review lands.
|
|
64
64
|
- 📝 **No magic.** A thread behaves like a Claude Code session you started yourself. Frizz adds no worktrees, no branches, no dev server, no build integration, no workflow engine to fight with.
|
|
65
|
-
- 🔒 **Local only.** No cloud, no account, no telemetry. The server binds `127.0.0.1` by default and its state lives in your user directory, never in your checkout.
|
|
65
|
+
- 🔒 **Local only.** No cloud, no account, no telemetry. The server binds `127.0.0.1` by default and its state lives in your user directory, never in your checkout. To reach a board from a phone, put your own tunnel or proxy in front of it — see [Remote access](docs/remote-access.md).
|
|
66
66
|
|
|
67
67
|
### The queue
|
|
68
68
|
|
|
@@ -121,11 +121,12 @@ $ npx frizz --help
|
|
|
121
121
|
|
|
122
122
|
Frizz production launcher
|
|
123
123
|
|
|
124
|
-
Usage: npx frizz [options]
|
|
125
|
-
npx frizz up serve this repo publicly, board + tunnel together
|
|
124
|
+
Usage: npx frizz [options]
|
|
126
125
|
|
|
127
|
-
|
|
128
|
-
|
|
126
|
+
Run it in the directory you want to work in. One server serves EVERY project on this machine,
|
|
127
|
+
each at its own /project/<name> URL, so a second run joins the one already going. Runs the
|
|
128
|
+
npm-resolved immutable Frizz package, then opens it in your default browser. Use frizz-dev only
|
|
129
|
+
for a source checkout.
|
|
129
130
|
|
|
130
131
|
Options:
|
|
131
132
|
--app use the legacy dedicated app window instead of a browser tab
|
|
@@ -134,6 +135,8 @@ Options:
|
|
|
134
135
|
--host [address] serve on a network address instead of loopback (bare --host means 0.0.0.0)
|
|
135
136
|
--allowed-host <name> with --host, also accept this DNS name as the board's address (repeatable)
|
|
136
137
|
--public-origin <url> serve behind a proxy/tunnel reachable at this exact origin
|
|
138
|
+
--cloud serve at the saved hostname and run its Cloudflare tunnel as a child
|
|
139
|
+
process; asked once, then remembered
|
|
137
140
|
--link print a fresh single-use access link for the running board
|
|
138
141
|
--debug stream the full event feed to the terminal instead of the compact readout
|
|
139
142
|
-h, --help show this help
|
|
@@ -196,7 +199,7 @@ trades the code for a session cookie, so the link itself stops working the momen
|
|
|
196
199
|
<details>
|
|
197
200
|
<summary><b>Can I run it on several repos at once?</b></summary>
|
|
198
201
|
|
|
199
|
-
> Yes
|
|
202
|
+
> Yes. One Frizz server serves every project on your machine — you don't start one per repo. Run `frizz` in any of them and switch projects from the board; each project's threads, settings and state stay separate.
|
|
200
203
|
|
|
201
204
|
</details>
|
|
202
205
|
|
|
@@ -19873,6 +19873,7 @@ var CLAUDE_BROKER_CAPABILITY_CANCEL_INPUT = "cancel-input-v1";
|
|
|
19873
19873
|
var CLAUDE_BROKER_CAPABILITY_STOP_TASK = "stop-task-v1";
|
|
19874
19874
|
var CLAUDE_BROKER_CAPABILITY_RELOAD_PLUGINS = "reload-plugins-v1";
|
|
19875
19875
|
var CLAUDE_BROKER_CAPABILITY_RENAME = "rename-v1";
|
|
19876
|
+
var CLAUDE_BROKER_CAPABILITY_LIST_SKILLS = "list-skills-v1";
|
|
19876
19877
|
var CLAUDE_INPUT_DROP_DIAGNOSTIC_PREFIX = "input dropped, the agent never received it";
|
|
19877
19878
|
var ClaudeAgentSdkProtocolError = class extends Error {
|
|
19878
19879
|
constructor(message) {
|
|
@@ -20255,6 +20256,7 @@ var RealClaudeQueryHandle = class {
|
|
|
20255
20256
|
closing = false;
|
|
20256
20257
|
closed = false;
|
|
20257
20258
|
initialized = false;
|
|
20259
|
+
initSkills = [];
|
|
20258
20260
|
sdkQuery;
|
|
20259
20261
|
input;
|
|
20260
20262
|
diagnostic;
|
|
@@ -20364,6 +20366,21 @@ var RealClaudeQueryHandle = class {
|
|
|
20364
20366
|
errorCount: Number.isFinite(result?.error_count) ? Number(result.error_count) : 0
|
|
20365
20367
|
};
|
|
20366
20368
|
}
|
|
20369
|
+
// The session's invocable skills: the initialize handshake already carries every slash entry WITH
|
|
20370
|
+
// its description (mapped and bounded above in mapControlInitialization — the same data the SDK's
|
|
20371
|
+
// `supportedCommands()` would re-serve from its cache), and the init frame's `skills` array is the
|
|
20372
|
+
// harness's own verdict on which of those are skills rather than built-in commands. The intersection
|
|
20373
|
+
// is exactly "what `/name` invokes a skill", with descriptions, and zero frizz-side discovery.
|
|
20374
|
+
async listSkills() {
|
|
20375
|
+
const initialization = await this.initializationResult();
|
|
20376
|
+
const skillNames = new Set(this.initSkills);
|
|
20377
|
+
const skills = [];
|
|
20378
|
+
for (const command of initialization.commands) {
|
|
20379
|
+
if (!command.name || !skillNames.has(command.name)) continue;
|
|
20380
|
+
skills.push({ name: command.name, description: command.description.slice(0, 1024) });
|
|
20381
|
+
}
|
|
20382
|
+
return skills;
|
|
20383
|
+
}
|
|
20367
20384
|
// Unqueue a follow-up the operator has taken back.
|
|
20368
20385
|
//
|
|
20369
20386
|
// `cancelAsyncMessage` is present at runtime in @anthropic-ai/claude-agent-sdk 0.3.207 but absent
|
|
@@ -20461,6 +20478,7 @@ var RealClaudeQueryHandle = class {
|
|
|
20461
20478
|
}
|
|
20462
20479
|
if (event.kind === "init") {
|
|
20463
20480
|
if (event.sessionId !== this.sessionId) throw new ClaudeAgentSdkProtocolError("Claude session ownership mismatch");
|
|
20481
|
+
this.initSkills = event.skills;
|
|
20464
20482
|
if (this.initialized) {
|
|
20465
20483
|
this.output.push(event);
|
|
20466
20484
|
continue;
|
|
@@ -20642,7 +20660,7 @@ function startClaudeQuery(executablePath, options) {
|
|
|
20642
20660
|
// `AGENTS.md` and its `.claude/skills`. Measured differential in the frizz repo, one variable:
|
|
20643
20661
|
// this factory answered `NO-CLAUDE-MD` where a plain `claude -p` in the same cwd answered
|
|
20644
20662
|
// "# No pull requests — land on local `main`". That fix restored PROJECT + LOCAL and left USER
|
|
20645
|
-
// out, which kept a second, quieter half of the same regression: the
|
|
20663
|
+
// out, which kept a second, quieter half of the same regression: the retired transport ran plain
|
|
20646
20664
|
// `claude` and got all three scopes, so a broker session was the only place the operator's
|
|
20647
20665
|
// `~/.claude/settings.json` stopped applying. Measured 2026-08-16 against the maintainer's real
|
|
20648
20666
|
// config, one variable: `--setting-sources=project,local` reported their `env` block UNSET where
|
|
@@ -20657,7 +20675,7 @@ function startClaudeQuery(executablePath, options) {
|
|
|
20657
20675
|
...options.disallowedTools?.length ? { disallowedTools: [...options.disallowedTools] } : {},
|
|
20658
20676
|
persistSession: options.persistSession ?? false,
|
|
20659
20677
|
// Keep Claude's default (preset) system prompt and APPEND the frizz worker contract, the SDK
|
|
20660
|
-
// equivalent of the
|
|
20678
|
+
// equivalent of the argv path's --append-system-prompt-file.
|
|
20661
20679
|
...options.appendSystemPrompt ? { systemPrompt: { type: "preset", preset: "claude_code", append: options.appendSystemPrompt } } : {},
|
|
20662
20680
|
// The 1M context window rides the MODEL value as a `[1m]` suffix, always paired with the bare
|
|
20663
20681
|
// alias as `fallbackModel` — an unavailable long-context beta is a hard 400 that kills the
|
|
@@ -21452,7 +21470,7 @@ function createClaudeBrokerExitWriter(path, meta, now = () => /* @__PURE__ */ ne
|
|
|
21452
21470
|
}
|
|
21453
21471
|
|
|
21454
21472
|
// packages/server/src/backend/claude-agent-broker.ts
|
|
21455
|
-
var BROKER_CAPABILITIES = [CLAUDE_BROKER_CAPABILITY_SUBAGENT_STEER, CLAUDE_BROKER_CAPABILITY_CANCEL_INPUT, CLAUDE_BROKER_CAPABILITY_STOP_TASK, CLAUDE_BROKER_CAPABILITY_RELOAD_PLUGINS, CLAUDE_BROKER_CAPABILITY_RENAME];
|
|
21473
|
+
var BROKER_CAPABILITIES = [CLAUDE_BROKER_CAPABILITY_SUBAGENT_STEER, CLAUDE_BROKER_CAPABILITY_CANCEL_INPUT, CLAUDE_BROKER_CAPABILITY_STOP_TASK, CLAUDE_BROKER_CAPABILITY_RELOAD_PLUGINS, CLAUDE_BROKER_CAPABILITY_RENAME, CLAUDE_BROKER_CAPABILITY_LIST_SKILLS];
|
|
21456
21474
|
var IDLE_EXIT_MS = 6 * 60 * 60 * 1e3;
|
|
21457
21475
|
var REACHABILITY_CHECK_MS = 3e4;
|
|
21458
21476
|
var REACHABILITY_STRIKES = 2;
|
|
@@ -21502,9 +21520,10 @@ function runClaudeBroker(config) {
|
|
|
21502
21520
|
pluginDir: config.pluginDir,
|
|
21503
21521
|
mcpServers: config.mcpServers,
|
|
21504
21522
|
allowedTools: config.allowedTools,
|
|
21505
|
-
// NO `disallowedTools` here, and the asymmetry with the
|
|
21506
|
-
// `--disallowedTools=AskUserQuestion`) is DELIBERATE. That flag exists because a
|
|
21507
|
-
//
|
|
21523
|
+
// NO `disallowedTools` here, and the asymmetry with the argv path (WORKER_DISALLOWED_TOOLS →
|
|
21524
|
+
// `--disallowedTools=AskUserQuestion`) is DELIBERATE. That flag exists because a worker launched as
|
|
21525
|
+
// its own interactive `claude` process had nowhere to put the question: it opened a TUI dialog on a
|
|
21526
|
+
// terminal screen nobody was looking at. On this path it
|
|
21508
21527
|
// has somewhere to go — canUseTool routes it to a real dashboard question card, the operator answers
|
|
21509
21528
|
// it, and the chosen labels reach the model. A follow-up sent instead of an answer retires the card
|
|
21510
21529
|
// and unwinds the tool call (see retirePendingFor in the bridge), so a parked turn is still steerable.
|
|
@@ -21639,6 +21658,12 @@ function runClaudeBroker(config) {
|
|
|
21639
21658
|
(reloaded) => write(sock, { t: "reload-result", requestId, reloaded }),
|
|
21640
21659
|
(error) => write(sock, { t: "reload-result", requestId, error: error instanceof Error ? error.message : String(error) })
|
|
21641
21660
|
);
|
|
21661
|
+
} else if (msg.t === "list-skills") {
|
|
21662
|
+
const requestId = msg.requestId;
|
|
21663
|
+
void handle.listSkills().then(
|
|
21664
|
+
(skills) => write(sock, { t: "skills-result", requestId, skills }),
|
|
21665
|
+
(error) => write(sock, { t: "skills-result", requestId, error: error instanceof Error ? error.message : String(error) })
|
|
21666
|
+
);
|
|
21642
21667
|
} else if (msg.t === "set-mode") void handle.setPermissionMode(msg.mode).catch(() => {
|
|
21643
21668
|
});
|
|
21644
21669
|
}
|