frizz 0.8.0 → 0.8.1

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 (100) hide show
  1. package/dist/claude-agent-broker.js +58 -1
  2. package/dist/dev-child.js +241 -348
  3. package/dist/frizz.js +4 -2
  4. package/package.json +1 -1
  5. package/runtime/cc-worker/agents/high.md +1 -1
  6. package/runtime/cc-worker/agents/low.md +1 -1
  7. package/runtime/cc-worker/agents/max.md +1 -1
  8. package/runtime/cc-worker/agents/medium.md +1 -1
  9. package/runtime/cc-worker/agents/xhigh.md +1 -1
  10. package/runtime/cc-worker/hooks/agent-dispatch.mjs +4 -4
  11. package/web-dist/assets/{TerminalPane-BIBHC61j.js → TerminalPane-BM_laA_I.js} +1 -1
  12. package/web-dist/assets/{abnfDiagram-VRR7QNED-CcFQGFPf.js → abnfDiagram-VRR7QNED-C5FCLi1n.js} +1 -1
  13. package/web-dist/assets/architecture-TIHT7OUA-ngY1F0r2.js +1 -0
  14. package/web-dist/assets/{architectureDiagram-ZJ3FMSHR-DErIQOIs.js → architectureDiagram-ZJ3FMSHR-Dm7tUnwt.js} +1 -1
  15. package/web-dist/assets/{blockDiagram-677ZJIJ3-CpsUqur1.js → blockDiagram-677ZJIJ3-3EhpmwKM.js} +1 -1
  16. package/web-dist/assets/{c4Diagram-LMCZKHZV-D2dHmCEJ.js → c4Diagram-LMCZKHZV-Ca-BjDxw.js} +1 -1
  17. package/web-dist/assets/channel-BpyNaJoi.js +1 -0
  18. package/web-dist/assets/{chunk-32BRIVSS-aOCEfxRW.js → chunk-32BRIVSS-xGbaUlTN.js} +1 -1
  19. package/web-dist/assets/{chunk-52WLFC77-2iw4nJPC.js → chunk-52WLFC77-YYhE3F1a.js} +1 -1
  20. package/web-dist/assets/{chunk-C7G6YPKG-BPD3iHVE.js → chunk-C7G6YPKG-SYKXFtUg.js} +1 -1
  21. package/web-dist/assets/{chunk-EX3LRPZG-DrefHift.js → chunk-EX3LRPZG-cqjtdM_c.js} +1 -1
  22. package/web-dist/assets/{chunk-FWX5IMBZ-By940EHT.js → chunk-FWX5IMBZ-qyaTngKT.js} +2 -2
  23. package/web-dist/assets/{chunk-HOUHSVGY-B1Cqvz7e.js → chunk-HOUHSVGY-DBFt1HnE.js} +1 -1
  24. package/web-dist/assets/{chunk-ICXQ74PX-1LkVpWuI.js → chunk-ICXQ74PX-Bme_2_gm.js} +1 -1
  25. package/web-dist/assets/{chunk-MOJQB5TN-Ip1cy64r.js → chunk-MOJQB5TN-DupTmWhN.js} +1 -1
  26. package/web-dist/assets/{chunk-OGEWGWER-CNjVyu8F.js → chunk-OGEWGWER-DSqmbKCq.js} +1 -1
  27. package/web-dist/assets/{chunk-PUDLZKDR-9HZR6DAU.js → chunk-PUDLZKDR-DVnHUoFN.js} +1 -1
  28. package/web-dist/assets/{chunk-Q4XR5HBZ-vtWwOCuQ.js → chunk-Q4XR5HBZ-BIZh_Yuh.js} +1 -1
  29. package/web-dist/assets/{chunk-V7JOEXUC-DC6YaHG0.js → chunk-V7JOEXUC-e2G7UgOg.js} +1 -1
  30. package/web-dist/assets/{chunk-VAUOI2AC-CP-xe7SD.js → chunk-VAUOI2AC-uYgyYWPh.js} +1 -1
  31. package/web-dist/assets/{chunk-VR4S4FIN-wbxDFptH.js → chunk-VR4S4FIN-BjGjcexQ.js} +1 -1
  32. package/web-dist/assets/{chunk-WYO6CB5R-dibXmwpK.js → chunk-WYO6CB5R-BKKd_W3B.js} +1 -1
  33. package/web-dist/assets/{chunk-ZGVPDNZ5-_y_itJHG.js → chunk-ZGVPDNZ5-D5_hsjnF.js} +1 -1
  34. package/web-dist/assets/classDiagram-OUVF2IWQ-DTEWwxt7.js +1 -0
  35. package/web-dist/assets/classDiagram-v2-EOCWNBFH-DTEWwxt7.js +1 -0
  36. package/web-dist/assets/{cynefin-VYW2F7L2-D1RYokZP.js → cynefin-VYW2F7L2-bkFv7EpV.js} +1 -1
  37. package/web-dist/assets/{cynefinDiagram-TSTJHNR4-qofqoy3T.js → cynefinDiagram-TSTJHNR4-Du2-dyuZ.js} +1 -1
  38. package/web-dist/assets/{dagre-VKFMJZFB-CgHLoGFk.js → dagre-VKFMJZFB-CU7w00Ul.js} +1 -1
  39. package/web-dist/assets/{diagram-FQU43EPY-JEAs4LOb.js → diagram-FQU43EPY-BxvVgxWb.js} +1 -1
  40. package/web-dist/assets/{diagram-G47NLZAW--tLd4Lf7.js → diagram-G47NLZAW-D8VvetwQ.js} +1 -1
  41. package/web-dist/assets/{diagram-NH7WQ7WH-DPbw9CJU.js → diagram-NH7WQ7WH-CwsChkED.js} +1 -1
  42. package/web-dist/assets/{diagram-OA4YK3LP-CDrb7nWs.js → diagram-OA4YK3LP-BIPYbe6L.js} +1 -1
  43. package/web-dist/assets/{diagram-WEI45ONY-DJswZe3f.js → diagram-WEI45ONY-BoyH4dKl.js} +1 -1
  44. package/web-dist/assets/{ebnfDiagram-CCIWWBDH-BP8-PZMF.js → ebnfDiagram-CCIWWBDH-9A3WRDfU.js} +1 -1
  45. package/web-dist/assets/{erDiagram-Q63AITRT-BQXuebf5.js → erDiagram-Q63AITRT-D3Y9WA4H.js} +1 -1
  46. package/web-dist/assets/eventmodeling-45OFAUF4-D7g9kDF0.js +1 -0
  47. package/web-dist/assets/flowDiagram-23GEKE2U-BqKnxVr3.js +1 -0
  48. package/web-dist/assets/{ganttDiagram-NO4QXBWP-DotMb935.js → ganttDiagram-NO4QXBWP-Bk2-LClm.js} +1 -1
  49. package/web-dist/assets/{gitGraph-TEB2WS4Q-B1vbYyKQ.js → gitGraph-TEB2WS4Q-CXvPrsio.js} +1 -1
  50. package/web-dist/assets/{gitGraphDiagram-IHSO6WYX-BjDXKk4m.js → gitGraphDiagram-IHSO6WYX-BC9D72kT.js} +1 -1
  51. package/web-dist/assets/index-CCtNIGi6.js +491 -0
  52. package/web-dist/assets/index-Cq79m8AR.css +1 -0
  53. package/web-dist/assets/{info-DKCQHKI2-xLTLqQju.js → info-DKCQHKI2-Beag76kE.js} +1 -1
  54. package/web-dist/assets/{infoDiagram-FWYZ7A6U-BFfYUsrC.js → infoDiagram-FWYZ7A6U-DaqYXHYB.js} +1 -1
  55. package/web-dist/assets/{ishikawaDiagram-FXEZZL3T-45a7VMwm.js → ishikawaDiagram-FXEZZL3T-D-d4tmLU.js} +1 -1
  56. package/web-dist/assets/{journeyDiagram-5HDEW3XC-CEBUpu59.js → journeyDiagram-5HDEW3XC-kkFYzNg1.js} +1 -1
  57. package/web-dist/assets/{kanban-definition-HUTT4EX6-RwKtDFzG.js → kanban-definition-HUTT4EX6-BYRPjbfv.js} +1 -1
  58. package/web-dist/assets/{line-DStcMIry.js → line-C8l7y6rG.js} +1 -1
  59. package/web-dist/assets/{mermaid-parser.core-B0ekgQMA.js → mermaid-parser.core-BG3fgy77.js} +3 -3
  60. package/web-dist/assets/{mermaid.core-w1hcQaPy.js → mermaid.core-BCDzcbhr.js} +3 -3
  61. package/web-dist/assets/{mindmap-definition-LN4V7U3C-D_n38Imb.js → mindmap-definition-LN4V7U3C-CP_bgQm8.js} +1 -1
  62. package/web-dist/assets/{packet-7NZHBO7P-CstGeBOX.js → packet-7NZHBO7P-Dgd69pFS.js} +1 -1
  63. package/web-dist/assets/{pegDiagram-2B236MQR-DvowVyTO.js → pegDiagram-2B236MQR-BJUb_DOD.js} +1 -1
  64. package/web-dist/assets/{pie-RZYD4A2V-BOP2j_HH.js → pie-RZYD4A2V-DPbVRAuL.js} +1 -1
  65. package/web-dist/assets/{pieDiagram-ENE6RG2P-CKRqu_2f.js → pieDiagram-ENE6RG2P-DavUeOqM.js} +1 -1
  66. package/web-dist/assets/{quadrantDiagram-ABIIQ3AL-zSArSS8R.js → quadrantDiagram-ABIIQ3AL-BdvoSedu.js} +1 -1
  67. package/web-dist/assets/{radar-I7S5WNFK-BqRdNIBw.js → radar-I7S5WNFK-C2TAta9K.js} +1 -1
  68. package/web-dist/assets/{railroad-3IZDKUUU-BaKcl_LU.js → railroad-3IZDKUUU-DEMjzYqC.js} +1 -1
  69. package/web-dist/assets/railroad-abnf-AHOZXSZD-_4FByoRI.js +1 -0
  70. package/web-dist/assets/railroad-ebnf-EBAXGLYW-DKAvMIMu.js +1 -0
  71. package/web-dist/assets/railroad-peg-LSFZ7HO6-CkJl3c69.js +1 -0
  72. package/web-dist/assets/{railroadDiagram-RFXS5EU6-BrXTQge9.js → railroadDiagram-RFXS5EU6-C4rERo6H.js} +1 -1
  73. package/web-dist/assets/{requirementDiagram-TGXJPOKE-DBBNi_SS.js → requirementDiagram-TGXJPOKE-DlIG9D0n.js} +1 -1
  74. package/web-dist/assets/{sankeyDiagram-HTMAVEWB-BwFi7xFy.js → sankeyDiagram-HTMAVEWB-DVMrG-qY.js} +1 -1
  75. package/web-dist/assets/{sequenceDiagram-DBY2YBRQ-CeivqMeT.js → sequenceDiagram-DBY2YBRQ-DDcDM_-e.js} +1 -1
  76. package/web-dist/assets/{stateDiagram-2N3HPSRC-C6NZsnFm.js → stateDiagram-2N3HPSRC-DuCRKU5t.js} +1 -1
  77. package/web-dist/assets/stateDiagram-v2-6OUMAXLB-90dqEQum.js +1 -0
  78. package/web-dist/assets/{swimlanes-5IMT3BWC-C0MubXTG.js → swimlanes-5IMT3BWC-CY0fdvUm.js} +1 -1
  79. package/web-dist/assets/swimlanesDiagram-G3AALYLV-BETWueIt.js +8 -0
  80. package/web-dist/assets/{timeline-definition-FHXFAJF6-CtxwSvFu.js → timeline-definition-FHXFAJF6-De0fDNdU.js} +1 -1
  81. package/web-dist/assets/{treeView-QDETBFTQ-CXcwSjey.js → treeView-QDETBFTQ-AIoMhcen.js} +1 -1
  82. package/web-dist/assets/{treemap-6X3UGDF4-Uspgr-d1.js → treemap-6X3UGDF4-CPZ1Ln05.js} +1 -1
  83. package/web-dist/assets/{vennDiagram-L72KCM5P-tZamQQAQ.js → vennDiagram-L72KCM5P-FrSO6pmh.js} +1 -1
  84. package/web-dist/assets/{wardley-OPB4EBWU-0_79c19P.js → wardley-OPB4EBWU-BbET6cjs.js} +1 -1
  85. package/web-dist/assets/{wardleyDiagram-EHGQE667-uYmUsP66.js → wardleyDiagram-EHGQE667-DqvcCBjr.js} +1 -1
  86. package/web-dist/assets/{xychartDiagram-FW5EYKEG-BsOU7Wf7.js → xychartDiagram-FW5EYKEG-91xKEO07.js} +1 -1
  87. package/web-dist/index.html +2 -2
  88. package/web-dist/assets/architecture-TIHT7OUA-BZEZt7jZ.js +0 -1
  89. package/web-dist/assets/channel-DdFRPviT.js +0 -1
  90. package/web-dist/assets/classDiagram-OUVF2IWQ-Bf3duLb8.js +0 -1
  91. package/web-dist/assets/classDiagram-v2-EOCWNBFH-Bf3duLb8.js +0 -1
  92. package/web-dist/assets/eventmodeling-45OFAUF4-DOLxRQQ5.js +0 -1
  93. package/web-dist/assets/flowDiagram-23GEKE2U-DoK1yb0H.js +0 -1
  94. package/web-dist/assets/index-CmrDpsD8.css +0 -1
  95. package/web-dist/assets/index-Cs0TDGMu.js +0 -491
  96. package/web-dist/assets/railroad-abnf-AHOZXSZD-itqDLg1p.js +0 -1
  97. package/web-dist/assets/railroad-ebnf-EBAXGLYW-ze7rLVCi.js +0 -1
  98. package/web-dist/assets/railroad-peg-LSFZ7HO6-DKsYkEuG.js +0 -1
  99. package/web-dist/assets/stateDiagram-v2-6OUMAXLB-B3YRnI4W.js +0 -1
  100. package/web-dist/assets/swimlanesDiagram-G3AALYLV-CXva4Ic9.js +0 -8
@@ -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
- skills.push({ name: command.name, description: command.description.slice(0, 1024) });
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}]`);