pilotswarm 0.5.37 → 0.5.39

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 (85) hide show
  1. package/mcp/dist/src/tools/agent-packages.d.ts.map +1 -1
  2. package/mcp/dist/src/tools/agent-packages.js +34 -14
  3. package/mcp/dist/src/tools/agent-packages.js.map +1 -1
  4. package/package.json +3 -3
  5. package/tui/src/node-sdk-transport.js +113 -18
  6. package/ui/core/src/controller.js +196 -49
  7. package/ui/core/src/layout.js +10 -0
  8. package/ui/core/src/reducer.js +265 -20
  9. package/ui/core/src/selectors.js +132 -10
  10. package/ui/core/src/state.js +90 -2
  11. package/ui/core/src/themes/index.js +1 -1
  12. package/ui/react/src/web-app.js +1097 -220
  13. package/web/auth/config.js +3 -0
  14. package/web/auth/index.js +8 -1
  15. package/web/auth/normalize/proxy.js +48 -0
  16. package/web/auth/providers/proxy.js +141 -0
  17. package/web/dist/assets/{abnfDiagram-VRR7QNED-DlvPH-8O.js → abnfDiagram-VRR7QNED-Hsly1fgf.js} +1 -1
  18. package/web/dist/assets/{arc-r1liz5e5.js → arc-DiQLL9vM.js} +1 -1
  19. package/web/dist/assets/{architectureDiagram-ZJ3FMSHR-Bci5dNH3.js → architectureDiagram-ZJ3FMSHR-B8ry8WNZ.js} +1 -1
  20. package/web/dist/assets/{blockDiagram-677ZJIJ3-Bug32AXp.js → blockDiagram-677ZJIJ3-Z4PcukIo.js} +1 -1
  21. package/web/dist/assets/{c4Diagram-LMCZKHZV-DwxSFqgE.js → c4Diagram-LMCZKHZV-Cahkc0gc.js} +1 -1
  22. package/web/dist/assets/channel-BHLBPE50.js +1 -0
  23. package/web/dist/assets/{chunk-2Q5K7J3B-B_dbI_xg.js → chunk-2Q5K7J3B-CtZuWH4J.js} +1 -1
  24. package/web/dist/assets/{chunk-32BRIVSS-BkF68W-R.js → chunk-32BRIVSS-C0M390-k.js} +1 -1
  25. package/web/dist/assets/{chunk-5VM5RSS4-BSbNIbJu.js → chunk-5VM5RSS4-ClvX9u5j.js} +1 -1
  26. package/web/dist/assets/{chunk-EX3LRPZG-Blv_Iqa2.js → chunk-EX3LRPZG-BVAet5KG.js} +1 -1
  27. package/web/dist/assets/{chunk-JWPE2WC7-Dk_dBFKd.js → chunk-JWPE2WC7-BccmZmrr.js} +1 -1
  28. package/web/dist/assets/{chunk-MOJQB5TN-DqNFBrfw.js → chunk-MOJQB5TN-BN5MKe94.js} +1 -1
  29. package/web/dist/assets/{chunk-RYQCIY6F-Dlv7Svpb.js → chunk-RYQCIY6F-DfWw-ACP.js} +1 -1
  30. package/web/dist/assets/{chunk-V7JOEXUC-DozGikwu.js → chunk-V7JOEXUC-BgUEoLnN.js} +1 -1
  31. package/web/dist/assets/{chunk-VR4S4FIN-CmkqvGT4.js → chunk-VR4S4FIN-k1eKfFNA.js} +1 -1
  32. package/web/dist/assets/{chunk-XXDRQBXY-DyByai5N.js → chunk-XXDRQBXY-DPyV10yR.js} +1 -1
  33. package/web/dist/assets/classDiagram-OUVF2IWQ-rj9D2TSL.js +1 -0
  34. package/web/dist/assets/classDiagram-v2-EOCWNBFH-rj9D2TSL.js +1 -0
  35. package/web/dist/assets/{cose-bilkent-JH36ORCC-Bv-gRVvA.js → cose-bilkent-JH36ORCC-Bt_rpukK.js} +1 -1
  36. package/web/dist/assets/{cynefin-VYW2F7L2-DRnAsyZU.js → cynefin-VYW2F7L2-Z8eMzFMv.js} +1 -1
  37. package/web/dist/assets/{cynefinDiagram-TSTJHNR4-B1fnUtjo.js → cynefinDiagram-TSTJHNR4-BJSNawFi.js} +1 -1
  38. package/web/dist/assets/{dagre-VKFMJZFB-DM6-QENB.js → dagre-VKFMJZFB-D6dNl8jc.js} +1 -1
  39. package/web/dist/assets/{diagram-FQU43EPY-BPxxnLdU.js → diagram-FQU43EPY-Cy1nbGsU.js} +1 -1
  40. package/web/dist/assets/{diagram-G47NLZAW-BgtJT3qF.js → diagram-G47NLZAW-CmrbuA_d.js} +1 -1
  41. package/web/dist/assets/{diagram-NH7WQ7WH-uekeIzsy.js → diagram-NH7WQ7WH-PoLNQE2j.js} +1 -1
  42. package/web/dist/assets/{diagram-OA4YK3LP-BVy3JZWE.js → diagram-OA4YK3LP-BZwNFcSV.js} +1 -1
  43. package/web/dist/assets/{diagram-WEI45ONY-BWdjUr32.js → diagram-WEI45ONY-pKw0b_fN.js} +1 -1
  44. package/web/dist/assets/{ebnfDiagram-CCIWWBDH-DD4fwhNK.js → ebnfDiagram-CCIWWBDH-UNctuQCV.js} +1 -1
  45. package/web/dist/assets/{erDiagram-Q63AITRT-BllD_6Kh.js → erDiagram-Q63AITRT-DxIETMif.js} +1 -1
  46. package/web/dist/assets/{flowDiagram-23GEKE2U-QEYKkAUN.js → flowDiagram-23GEKE2U-C06IdNKV.js} +1 -1
  47. package/web/dist/assets/{ganttDiagram-NO4QXBWP-uZcfKTSW.js → ganttDiagram-NO4QXBWP-fU7aGyP1.js} +1 -1
  48. package/web/dist/assets/{gitGraphDiagram-IHSO6WYX-XPdbPaH-.js → gitGraphDiagram-IHSO6WYX-9UKkPJm6.js} +1 -1
  49. package/web/dist/assets/index-B8nGlHwb.js +24 -0
  50. package/web/dist/assets/index-DtL0lbis.css +1 -0
  51. package/web/dist/assets/{infoDiagram-FWYZ7A6U-DXCnQOJs.js → infoDiagram-FWYZ7A6U-C6F06SQJ.js} +1 -1
  52. package/web/dist/assets/{ishikawaDiagram-FXEZZL3T-687_4FBy.js → ishikawaDiagram-FXEZZL3T-CB-O9NfO.js} +1 -1
  53. package/web/dist/assets/{journeyDiagram-5HDEW3XC-GXlKuda8.js → journeyDiagram-5HDEW3XC-B-8MOf-H.js} +1 -1
  54. package/web/dist/assets/{kanban-definition-HUTT4EX6-C38-2DvN.js → kanban-definition-HUTT4EX6-DX0XA3hI.js} +1 -1
  55. package/web/dist/assets/{linear-lGPXiBcz.js → linear-D60PrjTW.js} +1 -1
  56. package/web/dist/assets/{mermaid.core-C_neEtab.js → mermaid.core-bonzwapf.js} +4 -4
  57. package/web/dist/assets/{mindmap-definition-LN4V7U3C-BaJ9tpEG.js → mindmap-definition-LN4V7U3C-Y-6Dum33.js} +1 -1
  58. package/web/dist/assets/{papaparse.min-rDwKYbBf.js → papaparse.min-Cas1JfRG.js} +1 -1
  59. package/web/dist/assets/{pegDiagram-2B236MQR-BdXJLYgY.js → pegDiagram-2B236MQR-_paO0yDw.js} +1 -1
  60. package/web/dist/assets/{pieDiagram-ENE6RG2P-DU19t6fM.js → pieDiagram-ENE6RG2P-xT1_Gpn4.js} +1 -1
  61. package/web/dist/assets/pilotswarm-BT6tOknQ.js +96 -0
  62. package/web/dist/assets/{quadrantDiagram-ABIIQ3AL-CBkOdPp0.js → quadrantDiagram-ABIIQ3AL-1usdLFOF.js} +1 -1
  63. package/web/dist/assets/{railroadDiagram-RFXS5EU6-D2DMcGDw.js → railroadDiagram-RFXS5EU6-R3lwHOz9.js} +1 -1
  64. package/web/dist/assets/{requirementDiagram-TGXJPOKE-Bx9tF1pr.js → requirementDiagram-TGXJPOKE-BL8J1__Z.js} +1 -1
  65. package/web/dist/assets/{sankeyDiagram-HTMAVEWB-DcLlRfsi.js → sankeyDiagram-HTMAVEWB-Dz6--0pl.js} +1 -1
  66. package/web/dist/assets/{sequenceDiagram-DBY2YBRQ-xr6UVRBO.js → sequenceDiagram-DBY2YBRQ-CG2Xpkct.js} +1 -1
  67. package/web/dist/assets/{sizeCapture-X5ZJPWSS-0fUkSXmg.js → sizeCapture-X5ZJPWSS-BPbYfjxj.js} +1 -1
  68. package/web/dist/assets/{stateDiagram-2N3HPSRC-BWgJGGpg.js → stateDiagram-2N3HPSRC-46x_y_aA.js} +1 -1
  69. package/web/dist/assets/stateDiagram-v2-6OUMAXLB-C2tnolSo.js +1 -0
  70. package/web/dist/assets/{swimlanes-5IMT3BWC-CZKya4_i.js → swimlanes-5IMT3BWC-SXdMo4zJ.js} +2 -2
  71. package/web/dist/assets/swimlanesDiagram-G3AALYLV-Dh6Sn__t.js +8 -0
  72. package/web/dist/assets/{timeline-definition-FHXFAJF6-Df8BpeAu.js → timeline-definition-FHXFAJF6-CGgT-b38.js} +1 -1
  73. package/web/dist/assets/{vennDiagram-L72KCM5P-ChX5bjT6.js → vennDiagram-L72KCM5P-BGS3xBa_.js} +1 -1
  74. package/web/dist/assets/{wardleyDiagram-EHGQE667-Dr48BgaJ.js → wardleyDiagram-EHGQE667-m2U3wEZJ.js} +1 -1
  75. package/web/dist/assets/{xychartDiagram-FW5EYKEG-Cia_MFfc.js → xychartDiagram-FW5EYKEG-DI6tQysg.js} +1 -1
  76. package/web/dist/index.html +3 -3
  77. package/web/runtime.js +30 -7
  78. package/web/dist/assets/channel-jVpSYat3.js +0 -1
  79. package/web/dist/assets/classDiagram-OUVF2IWQ-C78zSajE.js +0 -1
  80. package/web/dist/assets/classDiagram-v2-EOCWNBFH-C78zSajE.js +0 -1
  81. package/web/dist/assets/index-BuDSoRIL.css +0 -1
  82. package/web/dist/assets/index-D1itTxvB.js +0 -24
  83. package/web/dist/assets/pilotswarm-BNKGG936.js +0 -96
  84. package/web/dist/assets/stateDiagram-v2-6OUMAXLB-DmAC8DdB.js +0 -1
  85. package/web/dist/assets/swimlanesDiagram-G3AALYLV-CVYx20_X.js +0 -8
@@ -60,6 +60,9 @@ export function inferAuthProviderId(env = process.env) {
60
60
  ) {
61
61
  return "entra";
62
62
  }
63
+ if (env.PORTAL_AUTH_PROXY_MODE || env.PORTAL_AUTH_PROXY_JWKS_URL) {
64
+ return "proxy";
65
+ }
63
66
  return "none";
64
67
  }
65
68
 
package/web/auth/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { createNoAuthProvider } from "./providers/none.js";
2
2
  import { createEntraAuthProvider } from "./providers/entra.js";
3
3
  import { createDevAuthProvider } from "./providers/dev.js";
4
+ import { createProxyAuthProvider } from "./providers/proxy.js";
4
5
  import { authorizePrincipal } from "./authz/engine.js";
5
6
  import { loadAuthorizationPolicy, resolveAuthProviderId, resolvePluginAuthConfigFromPluginDirs } from "./config.js";
6
7
 
@@ -11,6 +12,9 @@ const PROVIDERS = {
11
12
  // PORTAL_AUTH_PROVIDER=dev selects it, and its factory throws without
12
13
  // PORTAL_AUTH_DEV_ALLOW=true (see providers/dev.js).
13
14
  dev: createDevAuthProvider,
15
+ // Identity established by an identity-aware proxy in front of the portal.
16
+ // Has no browser half: the proxy signs the user in before the SPA loads.
17
+ proxy: createProxyAuthProvider,
14
18
  };
15
19
 
16
20
  const NO_AUTH_UNKNOWN_PRINCIPAL = Object.freeze({
@@ -91,7 +95,10 @@ export async function authenticateToken(token, req) {
91
95
  const policy = getAuthorizationPolicy();
92
96
 
93
97
  if (provider.enabled) {
94
- if (!token) {
98
+ // A provider may establish identity from the request itself rather
99
+ // than from a bearer token — a proxy in front of the portal puts it in
100
+ // a header, and there is no token for the browser to send.
101
+ if (!token && !provider.authenticatesFromRequest) {
95
102
  return buildDeniedResult({
96
103
  status: 401,
97
104
  error: "Unauthorized",
@@ -0,0 +1,48 @@
1
+ function toStringArray(value) {
2
+ if (Array.isArray(value)) return value.map((entry) => String(entry).trim()).filter(Boolean);
3
+ if (typeof value === "string") {
4
+ return value.split(",").map((entry) => entry.trim()).filter(Boolean);
5
+ }
6
+ return [];
7
+ }
8
+
9
+ function first(...values) {
10
+ for (const value of values) {
11
+ if (typeof value === "string" && value.trim()) return value.trim();
12
+ }
13
+ return null;
14
+ }
15
+
16
+ /**
17
+ * Normalize a principal from whatever an identity-aware proxy put in front of
18
+ * us — either the claims of a signed assertion it minted, or plain headers.
19
+ *
20
+ * Claim and header names differ per proxy (Cloudflare Access, Google IAP, AWS
21
+ * ALB, Pomerium, oauth2-proxy, Authelia, Authentik), so every source is
22
+ * configurable and the defaults simply match the most common spelling.
23
+ */
24
+ export function normalizeProxyPrincipal(claims = {}, opts = {}) {
25
+ const subjectClaim = opts.subjectClaim || "sub";
26
+ const emailClaim = opts.emailClaim || "email";
27
+ const nameClaim = opts.nameClaim || "name";
28
+ const rolesClaim = opts.rolesClaim || "roles";
29
+ const groupsClaim = opts.groupsClaim || "groups";
30
+
31
+ const email = first(claims[emailClaim], claims.email, claims.preferred_username, claims.upn);
32
+ // Fall back to the email when the proxy supplies no stable subject: an
33
+ // identity with no key at all cannot own sessions, and every downstream
34
+ // table is keyed on (provider, subject).
35
+ const subject = first(claims[subjectClaim], claims.sub, email);
36
+ if (!subject) return null;
37
+
38
+ return {
39
+ provider: "proxy",
40
+ subject,
41
+ email,
42
+ displayName: first(claims[nameClaim], claims.name),
43
+ groups: toStringArray(claims[groupsClaim]),
44
+ roles: toStringArray(claims[rolesClaim]),
45
+ tenantId: null,
46
+ rawClaims: claims,
47
+ };
48
+ }
@@ -0,0 +1,141 @@
1
+ import * as jose from "jose";
2
+ import { normalizeProxyPrincipal } from "../normalize/proxy.js";
3
+
4
+ const JWKS_CACHE = new Map();
5
+
6
+ /**
7
+ * Identity established by a proxy in front of the portal.
8
+ *
9
+ * Covers Cloudflare Access, Google IAP, AWS ALB, Pomerium, oauth2-proxy,
10
+ * Authelia and Authentik. They differ in only two ways — which header carries
11
+ * the identity, and whether it is signed — so both are configuration rather
12
+ * than separate providers.
13
+ *
14
+ * There is no browser half. The proxy completes the sign-in before the SPA
15
+ * loads, so the browser makes ordinary same-origin requests and PilotSwarm
16
+ * reads the identity off each one. That is the whole reason this provider is
17
+ * ~a tenth the size of an OIDC one: no PKCE, no token cache, no refresh.
18
+ *
19
+ * Two modes, with very different threat models:
20
+ *
21
+ * jwt (default) The proxy mints a signed assertion, verified here
22
+ * against its JWKS with issuer and audience checks. Safe no matter
23
+ * how the request arrived.
24
+ *
25
+ * header Plain, unsigned headers. ONLY safe when the portal is
26
+ * unreachable except through the proxy — otherwise anyone who can
27
+ * hit the origin sets the email header and becomes whoever they
28
+ * like. Opt-in via PORTAL_AUTH_PROXY_TRUST_HEADERS=true, and
29
+ * refuses to start without it.
30
+ */
31
+ function getProxyConfig(env = process.env, pluginAuthConfig = {}) {
32
+ const mode = (env.PORTAL_AUTH_PROXY_MODE || "jwt").trim().toLowerCase();
33
+ const displayName = String(
34
+ pluginAuthConfig?.providers?.proxy?.displayName || pluginAuthConfig?.displayName || "Proxy",
35
+ ).trim() || "Proxy";
36
+
37
+ const shared = {
38
+ mode,
39
+ displayName,
40
+ subjectClaim: env.PORTAL_AUTH_PROXY_SUBJECT_CLAIM,
41
+ emailClaim: env.PORTAL_AUTH_PROXY_EMAIL_CLAIM,
42
+ nameClaim: env.PORTAL_AUTH_PROXY_NAME_CLAIM,
43
+ rolesClaim: env.PORTAL_AUTH_PROXY_ROLES_CLAIM,
44
+ groupsClaim: env.PORTAL_AUTH_PROXY_GROUPS_CLAIM,
45
+ };
46
+
47
+ if (mode === "header") {
48
+ const trusted = /^(1|true|yes|on)$/i.test(String(env.PORTAL_AUTH_PROXY_TRUST_HEADERS || "").trim());
49
+ if (!trusted) {
50
+ throw new Error(
51
+ "PORTAL_AUTH_PROXY_MODE=header forwards identity in UNSIGNED headers, which anyone who can reach "
52
+ + "the origin directly can forge. Set PORTAL_AUTH_PROXY_TRUST_HEADERS=true to confirm the portal is "
53
+ + "reachable only through the proxy, or use the default signed-assertion mode.",
54
+ );
55
+ }
56
+ return {
57
+ ...shared,
58
+ subjectHeader: (env.PORTAL_AUTH_PROXY_SUBJECT_HEADER || "x-forwarded-user").toLowerCase(),
59
+ emailHeader: (env.PORTAL_AUTH_PROXY_EMAIL_HEADER || "x-forwarded-email").toLowerCase(),
60
+ nameHeader: (env.PORTAL_AUTH_PROXY_NAME_HEADER || "x-forwarded-preferred-username").toLowerCase(),
61
+ groupsHeader: (env.PORTAL_AUTH_PROXY_GROUPS_HEADER || "x-forwarded-groups").toLowerCase(),
62
+ };
63
+ }
64
+
65
+ // Default Cloudflare Access, the most common deployment.
66
+ const jwtHeader = (env.PORTAL_AUTH_PROXY_JWT_HEADER || "cf-access-jwt-assertion").toLowerCase();
67
+ const jwksUrl = (env.PORTAL_AUTH_PROXY_JWKS_URL || "").trim();
68
+ const issuer = (env.PORTAL_AUTH_PROXY_ISSUER || "").trim();
69
+ const audience = (env.PORTAL_AUTH_PROXY_AUDIENCE || "").trim();
70
+ if (!jwksUrl || !issuer || !audience) return null;
71
+ return { ...shared, jwtHeader, jwksUrl, issuer, audience };
72
+ }
73
+
74
+ function ensureJwks(jwksUrl) {
75
+ const cached = JWKS_CACHE.get(jwksUrl);
76
+ if (cached) return cached;
77
+ const jwks = jose.createRemoteJWKSet(new URL(jwksUrl));
78
+ JWKS_CACHE.set(jwksUrl, jwks);
79
+ return jwks;
80
+ }
81
+
82
+ function headerValue(req, name) {
83
+ const raw = req?.headers?.[name];
84
+ if (Array.isArray(raw)) return raw[0];
85
+ return typeof raw === "string" ? raw : undefined;
86
+ }
87
+
88
+ export function createProxyAuthProvider({ pluginAuthConfig, env = process.env } = {}) {
89
+ const config = getProxyConfig(env, pluginAuthConfig);
90
+
91
+ return {
92
+ id: "proxy",
93
+ enabled: Boolean(config),
94
+ displayName: config?.displayName || "Proxy",
95
+
96
+ // The identity rides on the request, not on a bearer token, so the
97
+ // pipeline must not reject the call for having no token.
98
+ authenticatesFromRequest: true,
99
+
100
+ async authenticateRequest(_token, req) {
101
+ if (!config || !req) return null;
102
+
103
+ if (config.mode === "header") {
104
+ const subject = headerValue(req, config.subjectHeader);
105
+ const email = headerValue(req, config.emailHeader);
106
+ if (!subject && !email) return null;
107
+ return normalizeProxyPrincipal({
108
+ sub: subject,
109
+ email,
110
+ name: headerValue(req, config.nameHeader),
111
+ groups: headerValue(req, config.groupsHeader),
112
+ }, config);
113
+ }
114
+
115
+ const assertion = headerValue(req, config.jwtHeader);
116
+ if (!assertion) return null;
117
+ try {
118
+ const { payload } = await jose.jwtVerify(assertion, ensureJwks(config.jwksUrl), {
119
+ issuer: config.issuer,
120
+ audience: config.audience,
121
+ });
122
+ return normalizeProxyPrincipal(payload, config);
123
+ } catch (error) {
124
+ console.error("[portal-auth:proxy] assertion validation failed:", error?.message || String(error));
125
+ return null;
126
+ }
127
+ },
128
+
129
+ async getPublicConfig() {
130
+ // No client-side configuration exists to hand out: the browser
131
+ // never talks to an identity provider, so `client` stays null and
132
+ // the SPA simply makes ordinary requests.
133
+ return {
134
+ enabled: Boolean(config),
135
+ provider: "proxy",
136
+ displayName: config?.displayName || "Proxy",
137
+ client: null,
138
+ };
139
+ },
140
+ };
141
+ }
@@ -1 +1 @@
1
- import{g as p,r as u,d as a}from"./chunk-MOJQB5TN-DqNFBrfw.js";import{p as f}from"./chunk-JWPE2WC7-Dk_dBFKd.js";import{_ as n,l as o}from"./mermaid.core-C_neEtab.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-DRnAsyZU.js";import"./pilotswarm-BNKGG936.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-BN5MKe94.js";import{p as f}from"./chunk-JWPE2WC7-BccmZmrr.js";import{_ as n,l as o}from"./mermaid.core-bonzwapf.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-Z8eMzFMv.js";import"./pilotswarm-BT6tOknQ.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-C_neEtab.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-bonzwapf.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};