pilotswarm 0.5.56 → 0.5.57

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 (71) hide show
  1. package/package.json +2 -2
  2. package/ui/core/src/reducer.js +177 -11
  3. package/ui/core/src/selectors.js +75 -9
  4. package/ui/core/src/state.js +65 -0
  5. package/ui/react/src/web-app.js +89 -8
  6. package/web/dist/assets/{abnfDiagram-VRR7QNED-Cccg5mUx.js → abnfDiagram-VRR7QNED-CJOR2hPi.js} +1 -1
  7. package/web/dist/assets/{arc-DFWp1OiI.js → arc-Yh3kc_KB.js} +1 -1
  8. package/web/dist/assets/{architectureDiagram-ZJ3FMSHR-o2B4-sJ1.js → architectureDiagram-ZJ3FMSHR-DLRlUeyk.js} +1 -1
  9. package/web/dist/assets/{blockDiagram-677ZJIJ3-Cf_7Cm38.js → blockDiagram-677ZJIJ3-x_TGH_fp.js} +1 -1
  10. package/web/dist/assets/{c4Diagram-LMCZKHZV-CKXuPB0d.js → c4Diagram-LMCZKHZV-C-j_bxeF.js} +1 -1
  11. package/web/dist/assets/channel-BIn92AzB.js +1 -0
  12. package/web/dist/assets/{chunk-2Q5K7J3B-CZC3HwzC.js → chunk-2Q5K7J3B-CaI5Xqwo.js} +1 -1
  13. package/web/dist/assets/{chunk-32BRIVSS-7_X1k3eB.js → chunk-32BRIVSS-Bh_Crac6.js} +1 -1
  14. package/web/dist/assets/{chunk-5VM5RSS4-E2rxT4um.js → chunk-5VM5RSS4-XM-3ajKG.js} +1 -1
  15. package/web/dist/assets/{chunk-EX3LRPZG-BbW37HWx.js → chunk-EX3LRPZG-ZwkulfFp.js} +1 -1
  16. package/web/dist/assets/{chunk-JWPE2WC7-dj0DOnPl.js → chunk-JWPE2WC7-CT3Q7T2A.js} +1 -1
  17. package/web/dist/assets/{chunk-MOJQB5TN-TeWalpvK.js → chunk-MOJQB5TN-_Uc0ksg3.js} +1 -1
  18. package/web/dist/assets/{chunk-RYQCIY6F-ClHcH2bN.js → chunk-RYQCIY6F-DosoId7u.js} +1 -1
  19. package/web/dist/assets/{chunk-V7JOEXUC-Dy5XEnNL.js → chunk-V7JOEXUC-KRjq1cwM.js} +1 -1
  20. package/web/dist/assets/{chunk-VR4S4FIN-Den_q-0P.js → chunk-VR4S4FIN-B6Ul1z3S.js} +1 -1
  21. package/web/dist/assets/{chunk-XXDRQBXY-DZ1s-8xB.js → chunk-XXDRQBXY-AikdVXm4.js} +1 -1
  22. package/web/dist/assets/classDiagram-OUVF2IWQ-B7ktW6XM.js +1 -0
  23. package/web/dist/assets/classDiagram-v2-EOCWNBFH-B7ktW6XM.js +1 -0
  24. package/web/dist/assets/{cose-bilkent-JH36ORCC-CKAukUTf.js → cose-bilkent-JH36ORCC-DTYwgEAa.js} +1 -1
  25. package/web/dist/assets/{cynefin-VYW2F7L2-CM8y129F.js → cynefin-VYW2F7L2-C_8v2wIz.js} +1 -1
  26. package/web/dist/assets/{cynefinDiagram-TSTJHNR4-DLryvwYt.js → cynefinDiagram-TSTJHNR4-1-nw1zbQ.js} +1 -1
  27. package/web/dist/assets/{dagre-VKFMJZFB-BO0LMWmO.js → dagre-VKFMJZFB-CAjwRpvT.js} +1 -1
  28. package/web/dist/assets/{diagram-FQU43EPY-DiFLu7v2.js → diagram-FQU43EPY-Bg41nQw_.js} +1 -1
  29. package/web/dist/assets/{diagram-G47NLZAW-DMkq9we0.js → diagram-G47NLZAW-Cp6P-qMn.js} +1 -1
  30. package/web/dist/assets/{diagram-NH7WQ7WH-CxVQL8Dq.js → diagram-NH7WQ7WH-DNdFuedg.js} +1 -1
  31. package/web/dist/assets/{diagram-OA4YK3LP-B5TrTlUc.js → diagram-OA4YK3LP-DcHpELG2.js} +1 -1
  32. package/web/dist/assets/{diagram-WEI45ONY-Ca38mf1v.js → diagram-WEI45ONY-B2_kyMw3.js} +1 -1
  33. package/web/dist/assets/{ebnfDiagram-CCIWWBDH-DZR_44LD.js → ebnfDiagram-CCIWWBDH-DztuAo3o.js} +1 -1
  34. package/web/dist/assets/{erDiagram-Q63AITRT-Ca8mmsU1.js → erDiagram-Q63AITRT-DNjKTOzp.js} +1 -1
  35. package/web/dist/assets/{flowDiagram-23GEKE2U-C0DFTCS6.js → flowDiagram-23GEKE2U-DWjfeUM1.js} +1 -1
  36. package/web/dist/assets/{ganttDiagram-NO4QXBWP-COqaqM45.js → ganttDiagram-NO4QXBWP-Y0MgGVmy.js} +1 -1
  37. package/web/dist/assets/{gitGraphDiagram-IHSO6WYX-Cwb9oGjZ.js → gitGraphDiagram-IHSO6WYX--lDKAKVz.js} +1 -1
  38. package/web/dist/assets/{index-DCx4DEMM.css → index-BxPfp0AO.css} +1 -1
  39. package/web/dist/assets/{index-BOkjbFY2.js → index-rPji8Uud.js} +2 -2
  40. package/web/dist/assets/{infoDiagram-FWYZ7A6U-CdPnS1-j.js → infoDiagram-FWYZ7A6U-CKmH8_YO.js} +1 -1
  41. package/web/dist/assets/{ishikawaDiagram-FXEZZL3T-D4Muo2uw.js → ishikawaDiagram-FXEZZL3T-D88R7zUc.js} +1 -1
  42. package/web/dist/assets/{journeyDiagram-5HDEW3XC-0uVdJDiB.js → journeyDiagram-5HDEW3XC-Ck7EMrsY.js} +1 -1
  43. package/web/dist/assets/{kanban-definition-HUTT4EX6-DWQU6DYI.js → kanban-definition-HUTT4EX6-hc-mOfSG.js} +1 -1
  44. package/web/dist/assets/{linear-BOxgX8xV.js → linear-BVhU4csP.js} +1 -1
  45. package/web/dist/assets/{mermaid.core-C8tHn40J.js → mermaid.core-C9u4FOCX.js} +4 -4
  46. package/web/dist/assets/{mindmap-definition-LN4V7U3C-C8NH0hQq.js → mindmap-definition-LN4V7U3C-DatQu9Xp.js} +1 -1
  47. package/web/dist/assets/{papaparse.min-CwI0VkgN.js → papaparse.min-BdnoXc8M.js} +1 -1
  48. package/web/dist/assets/{pegDiagram-2B236MQR-CksEEUgN.js → pegDiagram-2B236MQR-Cr_nZ_jR.js} +1 -1
  49. package/web/dist/assets/{pieDiagram-ENE6RG2P-Bq2Bv0cw.js → pieDiagram-ENE6RG2P-CcAbSIcY.js} +1 -1
  50. package/web/dist/assets/pilotswarm--kvfB_6q.js +99 -0
  51. package/web/dist/assets/{quadrantDiagram-ABIIQ3AL-vvpwUrN5.js → quadrantDiagram-ABIIQ3AL-CgJw5laM.js} +1 -1
  52. package/web/dist/assets/{railroadDiagram-RFXS5EU6-yXGWn-zZ.js → railroadDiagram-RFXS5EU6-CHeun9SN.js} +1 -1
  53. package/web/dist/assets/{requirementDiagram-TGXJPOKE-Bt1Q6Y60.js → requirementDiagram-TGXJPOKE-D1kpDj8W.js} +1 -1
  54. package/web/dist/assets/{sankeyDiagram-HTMAVEWB-CPNAfqgE.js → sankeyDiagram-HTMAVEWB-C5vUSUaX.js} +1 -1
  55. package/web/dist/assets/{sequenceDiagram-DBY2YBRQ-Dz432FWB.js → sequenceDiagram-DBY2YBRQ-T1aPSxk1.js} +1 -1
  56. package/web/dist/assets/{sizeCapture-X5ZJPWSS-Cokz6gNF.js → sizeCapture-X5ZJPWSS-j-wh2LVX.js} +1 -1
  57. package/web/dist/assets/{stateDiagram-2N3HPSRC-ojQCUdRE.js → stateDiagram-2N3HPSRC-DfUZZR8N.js} +1 -1
  58. package/web/dist/assets/stateDiagram-v2-6OUMAXLB-ilKtTdHG.js +1 -0
  59. package/web/dist/assets/{swimlanes-5IMT3BWC-DyTOkc1R.js → swimlanes-5IMT3BWC-OpASJiRw.js} +2 -2
  60. package/web/dist/assets/swimlanesDiagram-G3AALYLV-C1PthnB4.js +8 -0
  61. package/web/dist/assets/{timeline-definition-FHXFAJF6-DmuhBBl6.js → timeline-definition-FHXFAJF6-BBnc_z1U.js} +1 -1
  62. package/web/dist/assets/{vennDiagram-L72KCM5P-gTxQuU5b.js → vennDiagram-L72KCM5P-BlPQe9p4.js} +1 -1
  63. package/web/dist/assets/{wardleyDiagram-EHGQE667-YNXbSRf2.js → wardleyDiagram-EHGQE667-DBcBFUx2.js} +1 -1
  64. package/web/dist/assets/{xychartDiagram-FW5EYKEG-D7loT9cv.js → xychartDiagram-FW5EYKEG-BQUSGL6g.js} +1 -1
  65. package/web/dist/index.html +3 -3
  66. package/web/dist/assets/channel-CIBN5O06.js +0 -1
  67. package/web/dist/assets/classDiagram-OUVF2IWQ-Bq-5VkDc.js +0 -1
  68. package/web/dist/assets/classDiagram-v2-EOCWNBFH-Bq-5VkDc.js +0 -1
  69. package/web/dist/assets/pilotswarm-uebRfMjg.js +0 -99
  70. package/web/dist/assets/stateDiagram-v2-6OUMAXLB-BliVrz4U.js +0 -1
  71. package/web/dist/assets/swimlanesDiagram-G3AALYLV-DmwmYUnc.js +0 -8
@@ -63,6 +63,7 @@ import {
63
63
  selectConfirmModal,
64
64
  defaultOwnerFilterForPrincipal,
65
65
  normalizeStoredLayoutAdjustments,
66
+ normalizeStoredSessionViews,
66
67
  normalizeStoredPinnedSessionIds,
67
68
  normalizeStoredSessionOrder,
68
69
  computeFitWidthColumnLayout,
@@ -358,6 +359,12 @@ function normalizeProfileSettings(settings) {
358
359
  if (hasOwn(candidate, "canvasPrefs")) {
359
360
  normalized.canvasPrefs = normalizeStoredCanvasPrefs(candidate.canvasPrefs);
360
361
  }
362
+ // Per-session desktop views: columns open + right-side sizes, per session
363
+ // and device slot. Whitelisted like everything else here, or the save
364
+ // would silently drop it.
365
+ if (hasOwn(candidate, "sessionViews")) {
366
+ normalized.sessionViews = normalizeStoredSessionViews(candidate.sessionViews);
367
+ }
361
368
  // Phones and desktops keep SEPARATE view preferences: rich prose reads well
362
369
  // on a wide transcript and poorly in a 390px column, so a single shared
363
370
  // value would have each device overwriting the other's choice.
@@ -464,6 +471,10 @@ function profileSettingsFromViewState(state, preservedOtherTouchScale = null, pr
464
471
  desktopPanes: { canvasOpen: state.canvasOpen === true, diagnosticsOpen: state.diagnosticsOpen === true, zen: state.canvasZen === true },
465
472
  }),
466
473
  canvasPrefs: state.canvasPrefs,
474
+ // Written from BOTH device classes: a phone carries the desktop's
475
+ // per-session views through its saves untouched (the reducer never
476
+ // records on a phone), so a phone save cannot erase them.
477
+ sessionViews: state.sessionViews,
467
478
  // setCurrentUserProfileSettings REPLACES the settings object, so the
468
479
  // other device class's slot has to be written back verbatim or saving
469
480
  // from a desktop would wipe the phone's preference (and vice versa).
@@ -563,6 +574,9 @@ function materializeProfileSettings(remoteSettings, defaults) {
563
574
  ...(hasOwn(normalizedRemote, "desktopPanes")
564
575
  ? { desktopPanes: normalizedRemote.desktopPanes }
565
576
  : {}),
577
+ ...(hasOwn(normalizedRemote, "sessionViews")
578
+ ? { sessionViews: normalizedRemote.sessionViews }
579
+ : {}),
566
580
  ...(hasOwn(normalizedRemote, "rightPaneMode")
567
581
  ? { rightPaneMode: normalizedRemote.rightPaneMode }
568
582
  : {}),
@@ -3878,9 +3892,21 @@ function ScrollLinesPanel({ title, titleRight = null, color, focused, actions, l
3878
3892
  if (!preserveHorizontalScroll || syncingHorizontalRef.current) return;
3879
3893
  syncScrollLeft(event.currentTarget, stickyRef.current);
3880
3894
  }, [onScroll, preserveHorizontalScroll, syncScrollLeft, updateScrollShadow]);
3895
+ // Re-read the shadow state when the CONTENT changes, not on every render:
3896
+ // reading scrollHeight is a forced layout, and with no dependency list
3897
+ // this ran on each keystroke's re-render of the pane.
3881
3898
  React.useEffect(() => {
3882
3899
  updateScrollShadow(ref.current);
3883
- });
3900
+ }, [updateScrollShadow, normalizedLines, normalizedBottomSticky, normalizedSticky]);
3901
+ // A column drag or a window resize changes clientHeight with no new
3902
+ // content; the shadow has to follow that too.
3903
+ React.useEffect(() => {
3904
+ const node = ref.current;
3905
+ if (!node || typeof ResizeObserver === "undefined") return undefined;
3906
+ const observer = new ResizeObserver(() => updateScrollShadow(node));
3907
+ observer.observe(node);
3908
+ return () => observer.disconnect();
3909
+ }, [updateScrollShadow, ref]);
3884
3910
 
3885
3911
  const handleStickyScroll = React.useCallback((event) => {
3886
3912
  if (!preserveHorizontalScroll || syncingHorizontalRef.current) return;
@@ -6211,9 +6237,12 @@ function ChatPane({ controller, mobile = false, fullWidth = false, showComposer
6211
6237
  return {
6212
6238
  activeSessionId,
6213
6239
  activeHistory: activeSessionId ? state.history.bySessionId.get(activeSessionId) || null : null,
6240
+ // A shared empty array, not a literal: a fresh [] per call failed
6241
+ // the shallow-equal check on every dispatch and re-rendered the
6242
+ // whole pane, transcript included, on every keystroke.
6214
6243
  activeOutbox: activeSessionId && state.outbox?.bySessionId?.[activeSessionId]
6215
6244
  ? state.outbox.bySessionId[activeSessionId]
6216
- : [],
6245
+ : EMPTY_ARRAY,
6217
6246
  branding: state.branding,
6218
6247
  connection: state.connection,
6219
6248
  sessionsById: state.sessions.byId,
@@ -8463,20 +8492,43 @@ function PromptComposer({ controller, mobile, active = true, onAfterSend = null
8463
8492
  // zeroes the height first — NOT "auto": iOS Safari keeps a textarea's
8464
8493
  // scrollHeight at its high-water mark under "auto", so a box that grew
8465
8494
  // never shrank back after the text was sent or deleted.
8466
- const growInput = React.useCallback(() => {
8495
+ //
8496
+ // The zero-then-measure is two synchronous full-page layouts, and it ran
8497
+ // on EVERY keystroke. It is only needed when the box may have to shrink
8498
+ // (text removed, width changed). While text is being added the box can
8499
+ // only grow, and "does the content overflow the box" is one layout read.
8500
+ const lastPromptLengthRef = React.useRef(-1);
8501
+ const growInput = React.useCallback((force = false) => {
8467
8502
  const node = inputRef.current;
8468
8503
  if (!node) return;
8504
+ if (!force && node.scrollHeight <= node.clientHeight) return;
8469
8505
  node.style.height = "0px";
8470
8506
  node.style.height = `${node.scrollHeight + 2}px`;
8471
8507
  }, []);
8472
8508
  React.useLayoutEffect(() => {
8473
- growInput();
8509
+ const length = String(promptState.value || "").length;
8510
+ // Equal length can still drop a wrapped line (a selection replaced by
8511
+ // as many characters), so only strict growth takes the cheap path.
8512
+ const mayHaveShrunk = length <= lastPromptLengthRef.current;
8513
+ lastPromptLengthRef.current = length;
8514
+ growInput(mayHaveShrunk || length === 0);
8474
8515
  }, [growInput, promptState.value]);
8475
8516
  React.useEffect(() => {
8476
8517
  // Width changes re-wrap the content; re-measure on viewport resizes
8477
8518
  // (covers rotation and the on-screen keyboard shrinking the pane).
8478
- window.addEventListener("resize", growInput);
8479
- return () => window.removeEventListener("resize", growInput);
8519
+ const onResize = () => growInput(true);
8520
+ window.addEventListener("resize", onResize);
8521
+ // A pane-splitter drag or a font-size change re-wraps the text with
8522
+ // no window resize; watch the box itself.
8523
+ const node = inputRef.current;
8524
+ const observer = node && typeof ResizeObserver !== "undefined"
8525
+ ? new ResizeObserver(() => growInput(true))
8526
+ : null;
8527
+ if (observer && node) observer.observe(node);
8528
+ return () => {
8529
+ window.removeEventListener("resize", onResize);
8530
+ observer?.disconnect();
8531
+ };
8480
8532
  }, [growInput]);
8481
8533
 
8482
8534
  const canAttachImages = typeof controller.transport?.supportsPromptImageAttachments === "function"
@@ -11067,6 +11119,16 @@ function AgentUsagePane({ controller }) {
11067
11119
  if (next.has(name)) next.delete(name); else next.add(name);
11068
11120
  return next;
11069
11121
  });
11122
+ // The header checkbox: one click clears every agent out of the chart,
11123
+ // the next brings them all back. Half-filled while the rows disagree.
11124
+ const allNames = view.agents.map((a) => a.agent);
11125
+ const includedCount = allNames.filter((name) => included.has(name)).length;
11126
+ const allIncluded = allNames.length > 0 && includedCount === allNames.length;
11127
+ const noneIncluded = includedCount === 0;
11128
+ const toggleAll = () => setExcluded(() => (noneIncluded ? new Set() : new Set(allNames)));
11129
+ const headerCheckboxRef = React.useCallback((node) => {
11130
+ if (node) node.indeterminate = !allIncluded && !noneIncluded;
11131
+ }, [allIncluded, noneIncluded]);
11070
11132
  const rows = React.useMemo(() => [...view.agents].sort(AGENT_SORTS[sortKey] || AGENT_SORTS.total), [view, sortKey]);
11071
11133
  const setRange = (days) => controller.setUsageSummaryFilter({ days }).catch(() => {});
11072
11134
  const setProviders = ({ preset, providers }) => controller.setUsageSummaryFilter({ preset, providers }).catch(() => {});
@@ -11111,7 +11173,12 @@ function AgentUsagePane({ controller }) {
11111
11173
  : React.createElement("div", { className: "ps-summary__table-wrap" },
11112
11174
  React.createElement("table", { className: "ps-summary__table" },
11113
11175
  React.createElement("thead", null, React.createElement("tr", null,
11114
- React.createElement("th", { title: "Untick to remove this agent from the chart" }, ""),
11176
+ React.createElement("th", { title: noneIncluded ? "Put every agent back in the chart" : "Clear every agent out of the chart" },
11177
+ React.createElement("input", {
11178
+ type: "checkbox", ref: headerCheckboxRef, checked: allIncluded,
11179
+ onChange: toggleAll,
11180
+ "aria-label": noneIncluded ? "Select all agents" : "Clear all agents",
11181
+ })),
11115
11182
  sortableHead("agent", "Agent"),
11116
11183
  React.createElement("th", { title: "Distinct model names this agent ran in the window" }, "Models"),
11117
11184
  sortableHead("turns", "Turns"),
@@ -12383,6 +12450,12 @@ function DistillerModelPickers({ controller, extras }) {
12383
12450
  function useKeyboardShortcuts(controller, mobile) {
12384
12451
  React.useEffect(() => {
12385
12452
  const handler = (event) => {
12453
+ // A focused control that handled the key owns it. The diagnostics
12454
+ // seam answers ArrowUp/ArrowDown itself; letting the same keydown
12455
+ // fall through here moved the session selection as well — which
12456
+ // went unnoticed until per-session views made the newly selected
12457
+ // session open with its own (default) columns.
12458
+ if (event.defaultPrevented) return;
12386
12459
  const target = event.target;
12387
12460
  const editable = target instanceof HTMLElement
12388
12461
  && (target.tagName === "TEXTAREA" || target.tagName === "INPUT" || target.tagName === "SELECT" || target.isContentEditable);
@@ -14019,6 +14092,7 @@ export function PilotSwarmWebApp({ controller }) {
14019
14092
  canvasPaneAdjust: rootState.ui.layout?.canvasPaneAdjust ?? 0,
14020
14093
  diagnosticsPaneAdjust: rootState.ui.layout?.diagnosticsPaneAdjust ?? 0,
14021
14094
  diagnosticsSplitAdjust: rootState.ui.layout?.diagnosticsSplitAdjust ?? 0,
14095
+ sessionViews: rootState.ui.sessionViews,
14022
14096
  focusRegion: rootState.ui.focusRegion,
14023
14097
  requestedFocusRegion: rootState.ui.requestedFocusRegion,
14024
14098
  inspectorTab: rootState.ui.inspectorTab,
@@ -14056,6 +14130,13 @@ export function PilotSwarmWebApp({ controller }) {
14056
14130
 
14057
14131
  useKeyboardShortcuts(controller, mobile);
14058
14132
 
14133
+ // Tell the reducer which device slot of the per-session views this tab
14134
+ // owns. Only a desktop applies and records them; a phone keeps its
14135
+ // current layout behaviour and just carries the stored views through.
14136
+ React.useEffect(() => {
14137
+ controller.dispatch({ type: "ui/sessionViewDevice", device: mobile ? "mobile" : "desktop" });
14138
+ }, [controller, mobile]);
14139
+
14059
14140
  // Keyboard takeover (phone): while the on-screen keyboard is up and the
14060
14141
  // composer summoned it, the conversation owns the visual viewport — the
14061
14142
  // portal header, toolbar and session list fold away via a body class and
@@ -14303,7 +14384,7 @@ export function PilotSwarmWebApp({ controller }) {
14303
14384
  });
14304
14385
  }, 400);
14305
14386
  return undefined;
14306
- }, [controller, state.activeSessionId, state.activityPaneAdjust, state.agentPickerUsage, state.canvasOpen, state.canvasPaneAdjust, state.canvasPrefs, state.canvasZen, state.collapsedSessionIds, state.diagnosticsOpen, state.diagnosticsPaneAdjust, state.diagnosticsSplitAdjust, state.ownerFilter, state.paneAdjust, state.manualOrder, state.pinnedIds, state.portalSessionColumnAdjust, state.rightPaneMode, state.sessionDetailCollapsed, state.sessionPaneAdjust, state.themeId, state.touchScale]);
14387
+ }, [controller, state.activeSessionId, state.activityPaneAdjust, state.agentPickerUsage, state.canvasOpen, state.canvasPaneAdjust, state.canvasPrefs, state.canvasZen, state.collapsedSessionIds, state.diagnosticsOpen, state.diagnosticsPaneAdjust, state.diagnosticsSplitAdjust, state.ownerFilter, state.paneAdjust, state.manualOrder, state.pinnedIds, state.portalSessionColumnAdjust, state.rightPaneMode, state.sessionDetailCollapsed, state.sessionPaneAdjust, state.sessionViews, state.themeId, state.touchScale]);
14307
14388
 
14308
14389
  React.useEffect(() => {
14309
14390
  applyDocumentTheme(state.themeId);
@@ -1 +1 @@
1
- import{g as p,r as u,d as a}from"./chunk-MOJQB5TN-TeWalpvK.js";import{p as f}from"./chunk-JWPE2WC7-dj0DOnPl.js";import{_ as n,l as o}from"./mermaid.core-C8tHn40J.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-CM8y129F.js";import"./pilotswarm-uebRfMjg.js";var v=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),l=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:l,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},B={parser:R,db:a,renderer:u,styles:p};export{B as diagram};
1
+ import{g as p,r as u,d as a}from"./chunk-MOJQB5TN-_Uc0ksg3.js";import{p as f}from"./chunk-JWPE2WC7-CT3Q7T2A.js";import{_ as n,l as o}from"./mermaid.core-C9u4FOCX.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-C_8v2wIz.js";import"./pilotswarm--kvfB_6q.js";var v=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),l=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:l,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},B={parser:R,db:a,renderer:u,styles:p};export{B as diagram};
@@ -1 +1 @@
1
- import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-C8tHn40J.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,z,a){var O=I-l,i=D-h,n=z-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function U(l,h,I,D,v,A,z){var a=l-I,O=h-D,i=(z?A:-A)/J(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,B=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*J(on(0,T*T*R-P*P)),Y=(P*g-m*S)/R,$=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=Y-B,e=$-t,r=w-B,C=p-t;return x*x+e*e>r*r+C*C&&(Y=w,$=p),{cx:Y,cy:$,x01:-n,y01:-d,x11:Y*(v/T-1),y11:$*(v/T-1)}}function hn(){var l=cn,h=yn,I=j(0),D=null,v=gn,A=dn,z=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,B=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(B>tn-y)a.moveTo(s*F(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*F(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=B,S=B,Y=z.apply(this,arguments)/2,$=Y>y&&(D?+D.apply(this,arguments):J(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if($>y){var C=sn($/u*q(Y)),K=sn($/s*q(Y));(P-=C*2)>y?(C*=t?1:-1,R+=C,T-=C):(P=0,R=T=(f+c)/2),(S-=K*2)>y?(K*=t?1:-1,m+=K,g-=K):(S=0,m=g=(f+c)/2)}var G=s*F(m),H=s*q(m),L=u*F(T),M=u*q(T);if(w>y){var N=s*F(g),Q=s*q(g),V=u*F(R),W=u*q(R),E;if(B<an)if(E=pn(G,H,V,W,N,Q,L,M)){var X=G-E[0],Z=H-E[1],b=N-E[0],k=Q-E[1],nn=1/q(fn((X*b+Z*k)/(J(X*X+Z*Z)*J(b*b+k*k)))/2),en=J(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=U(V,W,G,H,s,x,t),r=U(N,Q,L,M,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(G,H),a.arc(0,0,s,m,g,!t)):a.moveTo(G,H),!(u>y)||!(P>y)?a.lineTo(L,M):p>y?(e=U(L,M,N,Q,u,-p,t),r=U(G,H,V,W,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[F(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:j(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:j(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:j(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:j(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:j(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:j(+n),i):A},i.padAngle=function(n){return arguments.length?(z=typeof n=="function"?n:j(+n),i):z},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
1
+ import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-C9u4FOCX.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,z,a){var O=I-l,i=D-h,n=z-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function U(l,h,I,D,v,A,z){var a=l-I,O=h-D,i=(z?A:-A)/J(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,B=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*J(on(0,T*T*R-P*P)),Y=(P*g-m*S)/R,$=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=Y-B,e=$-t,r=w-B,C=p-t;return x*x+e*e>r*r+C*C&&(Y=w,$=p),{cx:Y,cy:$,x01:-n,y01:-d,x11:Y*(v/T-1),y11:$*(v/T-1)}}function hn(){var l=cn,h=yn,I=j(0),D=null,v=gn,A=dn,z=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,B=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(B>tn-y)a.moveTo(s*F(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*F(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=B,S=B,Y=z.apply(this,arguments)/2,$=Y>y&&(D?+D.apply(this,arguments):J(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if($>y){var C=sn($/u*q(Y)),K=sn($/s*q(Y));(P-=C*2)>y?(C*=t?1:-1,R+=C,T-=C):(P=0,R=T=(f+c)/2),(S-=K*2)>y?(K*=t?1:-1,m+=K,g-=K):(S=0,m=g=(f+c)/2)}var G=s*F(m),H=s*q(m),L=u*F(T),M=u*q(T);if(w>y){var N=s*F(g),Q=s*q(g),V=u*F(R),W=u*q(R),E;if(B<an)if(E=pn(G,H,V,W,N,Q,L,M)){var X=G-E[0],Z=H-E[1],b=N-E[0],k=Q-E[1],nn=1/q(fn((X*b+Z*k)/(J(X*X+Z*Z)*J(b*b+k*k)))/2),en=J(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=U(V,W,G,H,s,x,t),r=U(N,Q,L,M,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(G,H),a.arc(0,0,s,m,g,!t)):a.moveTo(G,H),!(u>y)||!(P>y)?a.lineTo(L,M):p>y?(e=U(L,M,N,Q,u,-p,t),r=U(G,H,V,W,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[F(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:j(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:j(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:j(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:j(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:j(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:j(+n),i):A},i.padAngle=function(n){return arguments.length?(z=typeof n=="function"?n:j(+n),i):z},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};