@braidlabs/console 0.3.0 → 0.4.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.
Files changed (60) hide show
  1. package/README.md +34 -10
  2. package/package.json +10 -4
  3. package/src/app/auth.d.ts +46 -0
  4. package/src/app/auth.js +80 -0
  5. package/src/app/auth.js.map +1 -0
  6. package/src/app/console-app.d.ts +8 -6
  7. package/src/app/console-app.js +91 -20
  8. package/src/app/console-app.js.map +1 -1
  9. package/src/app/main.js +25 -2
  10. package/src/app/main.js.map +1 -1
  11. package/src/app/routes.d.ts +14 -0
  12. package/src/app/routes.js +23 -0
  13. package/src/app/routes.js.map +1 -0
  14. package/src/index.d.ts +15 -2
  15. package/src/index.js +10 -2
  16. package/src/index.js.map +1 -1
  17. package/src/lib/client.d.ts +52 -1
  18. package/src/lib/client.js +48 -0
  19. package/src/lib/client.js.map +1 -1
  20. package/src/lib/draft.d.ts +1 -1
  21. package/src/lib/draft.js +2 -2
  22. package/src/lib/draft.js.map +1 -1
  23. package/src/lib/empty-state.d.ts +15 -0
  24. package/src/lib/empty-state.js +38 -0
  25. package/src/lib/empty-state.js.map +1 -0
  26. package/src/lib/history-panel.d.ts +19 -0
  27. package/src/lib/history-panel.js +85 -0
  28. package/src/lib/history-panel.js.map +1 -0
  29. package/src/lib/ownership.d.ts +15 -0
  30. package/src/lib/ownership.js +21 -0
  31. package/src/lib/ownership.js.map +1 -0
  32. package/src/lib/query.d.ts +47 -0
  33. package/src/lib/query.js +121 -0
  34. package/src/lib/query.js.map +1 -0
  35. package/src/lib/registry-console.d.ts +13 -2
  36. package/src/lib/registry-console.js +15 -11
  37. package/src/lib/registry-console.js.map +1 -1
  38. package/src/lib/registry-editor.js +20 -7
  39. package/src/lib/registry-editor.js.map +1 -1
  40. package/src/lib/shell-codegen.d.ts +28 -0
  41. package/src/lib/shell-codegen.js +316 -0
  42. package/src/lib/shell-codegen.js.map +1 -0
  43. package/src/lib/shells-panel.d.ts +43 -0
  44. package/src/lib/shells-panel.js +307 -0
  45. package/src/lib/shells-panel.js.map +1 -0
  46. package/src/lib/styles.d.ts +1 -1
  47. package/src/lib/styles.js +72 -4
  48. package/src/lib/styles.js.map +1 -1
  49. package/src/lib/tag-chip.d.ts +8 -0
  50. package/src/lib/tag-chip.js +12 -0
  51. package/src/lib/tag-chip.js.map +1 -0
  52. package/src/lib/tags.d.ts +10 -0
  53. package/src/lib/tags.js +53 -0
  54. package/src/lib/tags.js.map +1 -0
  55. package/src/lib/topology-graph.d.ts +5 -2
  56. package/src/lib/topology-graph.js +17 -8
  57. package/src/lib/topology-graph.js.map +1 -1
  58. package/src/lib/topology.d.ts +18 -3
  59. package/src/lib/topology.js +42 -3
  60. package/src/lib/topology.js.map +1 -1
@@ -0,0 +1,8 @@
1
+ /**
2
+ * A tag, colored by {@link tagClass}. With `onSelect` it is a button — clicking a tag filters by
3
+ * it — and otherwise plain text, so a list of tags never becomes a row of dead controls.
4
+ */
5
+ export declare function TagChip({ tag, onSelect }: {
6
+ tag: string;
7
+ onSelect?: (tag: string) => void;
8
+ }): import("react").JSX.Element;
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { tagClass } from './tags.js';
3
+ /**
4
+ * A tag, colored by {@link tagClass}. With `onSelect` it is a button — clicking a tag filters by
5
+ * it — and otherwise plain text, so a list of tags never becomes a row of dead controls.
6
+ */
7
+ export function TagChip({ tag, onSelect }) {
8
+ if (!onSelect)
9
+ return _jsx("span", { className: tagClass(tag), children: tag });
10
+ return (_jsx("button", { type: "button", className: `${tagClass(tag)} braid-console__tagbutton`, onClick: () => onSelect(tag), "aria-label": `Filter by tag ${tag}`, children: tag }));
11
+ }
12
+ //# sourceMappingURL=tag-chip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag-chip.js","sourceRoot":"","sources":["../../../../../libs/braid-console/src/lib/tag-chip.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAqD;IAC1F,IAAI,CAAC,QAAQ;QAAE,OAAO,eAAM,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,YAAG,GAAG,GAAQ,CAAC;IACnE,OAAO,CACL,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,2BAA2B,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAc,iBAAiB,GAAG,EAAE,YAC3I,GAAG,GACG,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ export declare const TAG_COLOR_COUNT: number;
2
+ /** The palette slot for a tag: FNV-1a over its lowercased text, so `Finance` and `finance` agree. */
3
+ export declare function tagColor(tag: string): number;
4
+ /** The class that colors a tag chip. */
5
+ export declare function tagClass(tag: string): string;
6
+ /**
7
+ * Per-slot custom properties, in the three places the console decides its theme: the light
8
+ * default, the OS dark preference, and an explicit `data-theme` that wins in both directions.
9
+ */
10
+ export declare const TAG_STYLES: string;
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Tag colors: the same tag is the same color everywhere — table, graph, designer, search.
3
+ *
4
+ * Derived from the tag text rather than assigned, so there is nothing to store or keep in sync and
5
+ * two consoles pointed at one registry agree. The cost is that two tags can share a color; every
6
+ * chip carries its text, so color is a grouping cue and never the only way to tell tags apart.
7
+ *
8
+ * Each pair clears 4.5:1 text contrast in both themes (lowest: teal on light, 5.97:1).
9
+ */
10
+ const PALETTE = [
11
+ { name: 'blue', light: ['#0f548c', '#e8f1fb'], dark: ['#8bc1f7', '#102b46'] },
12
+ { name: 'teal', light: ['#00666d', '#e3f5f5'], dark: ['#6fd1d6', '#0b3134'] },
13
+ { name: 'orange', light: ['#8a3707', '#fdefe6'], dark: ['#f7a76b', '#3d2210'] },
14
+ { name: 'purple', light: ['#5c2e91', '#f2ecf9'], dark: ['#c5a6ef', '#2c1f40'] },
15
+ { name: 'pink', light: ['#9b1d5f', '#fbedf4'], dark: ['#f08fc3', '#3d1a2c'] },
16
+ { name: 'green', light: ['#0e5c0e', '#e7f5e7'], dark: ['#8fd58f', '#15301a'] },
17
+ { name: 'olive', light: ['#5c5300', '#f6f3d8'], dark: ['#d8cc6a', '#2f2b0a'] },
18
+ { name: 'slate', light: ['#3b4a5c', '#eaeef3'], dark: ['#b5c3d4', '#232b35'] },
19
+ ];
20
+ export const TAG_COLOR_COUNT = PALETTE.length;
21
+ /** The palette slot for a tag: FNV-1a over its lowercased text, so `Finance` and `finance` agree. */
22
+ export function tagColor(tag) {
23
+ let hash = 0x811c9dc5;
24
+ for (const char of tag.toLowerCase()) {
25
+ hash ^= char.codePointAt(0) ?? 0;
26
+ hash = Math.imul(hash, 0x01000193);
27
+ }
28
+ return (hash >>> 0) % PALETTE.length;
29
+ }
30
+ /** The class that colors a tag chip. */
31
+ export function tagClass(tag) {
32
+ return `braid-console__tag braid-console__tag--c${tagColor(tag)}`;
33
+ }
34
+ /**
35
+ * Per-slot custom properties, in the three places the console decides its theme: the light
36
+ * default, the OS dark preference, and an explicit `data-theme` that wins in both directions.
37
+ */
38
+ export const TAG_STYLES = (() => {
39
+ const rules = (scheme, scope) => PALETTE.map(({ [scheme]: [fg, bg] }, index) => `${scope} .braid-console__tag--c${index} { --bc-tag-fg: ${fg}; --bc-tag-bg: ${bg}; }`).join('\n');
40
+ return `
41
+ /* --- tags --------------------------------------------------------------- */
42
+ .braid-console__tag[class*='braid-console__tag--c'] { color: var(--bc-tag-fg); background: var(--bc-tag-bg); border-color: transparent; }
43
+ .braid-console__tagbutton { font: inherit; cursor: pointer; }
44
+ .braid-console__tagbutton:focus-visible { outline: 2px solid var(--bc-accent); outline-offset: 1px; }
45
+ ${rules('light', '.braid-console')}
46
+ @media (prefers-color-scheme: dark) {
47
+ ${rules('dark', '.braid-console')}
48
+ }
49
+ ${rules('light', ".braid-console[data-theme='light']")}
50
+ ${rules('dark', ".braid-console[data-theme='dark']")}
51
+ `;
52
+ })();
53
+ //# sourceMappingURL=tags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.js","sourceRoot":"","sources":["../../../../../libs/braid-console/src/lib/tags.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,OAAO,GAAiF;IAC5F,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;IAC7E,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;IAC7E,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;IAC/E,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;IAC/E,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;IAC7E,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;IAC9E,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;IAC9E,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;CAC/E,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;AAE9C,qGAAqG;AACrG,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,IAAI,IAAI,GAAG,UAAU,CAAC;IACtB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;AACvC,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,OAAO,2CAA2C,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;AACpE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE;IAC9B,MAAM,KAAK,GAAG,CAAC,MAAwB,EAAE,KAAa,EAAE,EAAE,CACxD,OAAO,CAAC,GAAG,CACT,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,0BAA0B,KAAK,mBAAmB,EAAE,kBAAkB,EAAE,KAAK,CACzH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEf,OAAO;;;;;EAKP,KAAK,CAAC,OAAO,EAAE,gBAAgB,CAAC;;EAEhC,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC;;EAE/B,KAAK,CAAC,OAAO,EAAE,oCAAoC,CAAC;EACpD,KAAK,CAAC,MAAM,EAAE,mCAAmC,CAAC;CACnD,CAAC;AACF,CAAC,CAAC,EAAE,CAAC"}
@@ -1,14 +1,17 @@
1
1
  import type { DiscoveryEntry } from '@braidlabs/gateway';
2
+ import type { ShellManifest } from '@braidlabs/registry';
2
3
  import { type Topology, type TopologyNode } from './topology.js';
3
4
  export interface TopologyGraphProps {
4
5
  entries: readonly DiscoveryEntry[];
6
+ /** Adds a shells column on the left, with the routes they host and the fragments they slot. */
7
+ shells?: readonly ShellManifest[];
5
8
  /** Notified when the selection changes, so a host can drive its own detail pane. */
6
9
  onSelect?: (entry: DiscoveryEntry | null) => void;
7
10
  /** Asked to show the embed snippet for a fragment. */
8
11
  onEmbed?: (entry: DiscoveryEntry) => void;
9
12
  }
10
13
  /**
11
- * The composition topology, drawn as three columns: routes → fragments → origins.
14
+ * The composition topology, drawn as columns: (shells →) routes → fragments → origins.
12
15
  *
13
16
  * **Laid out, not simulated.** A force-directed graph looks impressive and answers no question: it
14
17
  * settles somewhere different every load, so an operator cannot learn its shape, point at it in a
@@ -19,7 +22,7 @@ export interface TopologyGraphProps {
19
22
  * Rendered as inline SVG with the console's own custom properties, so it themes with everything
20
23
  * else and needs no canvas, no measurement pass, and no resize observer.
21
24
  */
22
- export declare function TopologyGraph({ entries, onSelect, onEmbed }: TopologyGraphProps): import("react").JSX.Element;
25
+ export declare function TopologyGraph({ entries, shells, onSelect, onEmbed }: TopologyGraphProps): import("react").JSX.Element;
23
26
  interface PlacedNode {
24
27
  node: TopologyNode;
25
28
  x: number;
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
2
2
  import { useMemo, useState } from 'react';
3
3
  import { buildTopology, coTenants, edgeKey, neighborhood, } from './topology.js';
4
4
  /**
5
- * The composition topology, drawn as three columns: routes → fragments → origins.
5
+ * The composition topology, drawn as columns: (shells →) routes → fragments → origins.
6
6
  *
7
7
  * **Laid out, not simulated.** A force-directed graph looks impressive and answers no question: it
8
8
  * settles somewhere different every load, so an operator cannot learn its shape, point at it in a
@@ -13,8 +13,8 @@ import { buildTopology, coTenants, edgeKey, neighborhood, } from './topology.js'
13
13
  * Rendered as inline SVG with the console's own custom properties, so it themes with everything
14
14
  * else and needs no canvas, no measurement pass, and no resize observer.
15
15
  */
16
- export function TopologyGraph({ entries, onSelect, onEmbed }) {
17
- const topology = useMemo(() => buildTopology(entries), [entries]);
16
+ export function TopologyGraph({ entries, shells, onSelect, onEmbed }) {
17
+ const topology = useMemo(() => buildTopology(entries, shells ? { shells } : {}), [entries, shells]);
18
18
  const [selected, setSelected] = useState(null);
19
19
  const [hovered, setHovered] = useState(null);
20
20
  const active = hovered ?? selected;
@@ -30,7 +30,7 @@ export function TopologyGraph({ entries, onSelect, onEmbed }) {
30
30
  return _jsx("p", { className: "braid-console__empty", children: "Nothing is registered, so there is no topology to draw." });
31
31
  }
32
32
  const selectedNode = topology.nodes.find((node) => node.id === selected) ?? null;
33
- return (_jsxs("div", { className: "braid-console__graphwrap", children: [_jsxs("div", { className: "braid-console__graphmain", children: [_jsxs("div", { className: "braid-console__collabels", "aria-hidden": "true", children: [_jsx("span", { children: "Routes" }), _jsx("span", { children: "Fragments" }), !topology.originsUnknown && _jsx("span", { children: "Origins" })] }), _jsxs("svg", { className: "braid-console__graph", viewBox: `0 0 ${layout.width} ${layout.height}`, role: "group", "aria-label": "Composition topology: routes, the fragments they compose, and the origins serving them", style: { height: `${layout.height}px` }, children: [_jsx("g", { className: "braid-console__edges", children: layout.edges.map((edge) => (_jsx("path", { d: edge.d, className: `braid-console__edge braid-console__edge--${edge.kind}${active ? (lit.edges.has(edge.key) ? ' is-lit' : ' is-dim') : ''}` }, edge.key))) }), layout.nodes.map((placed) => {
33
+ return (_jsxs("div", { className: "braid-console__graphwrap", children: [_jsxs("div", { className: "braid-console__graphmain", children: [_jsx("div", { className: "braid-console__collabels", "aria-hidden": "true", children: columnLabels(topology).map((text, index) => (_jsx("span", { style: { left: `${((index * (NODE_W + COL_GAP)) / layout.width) * 100}%`, width: `${(NODE_W / layout.width) * 100}%` }, children: text }, text))) }), _jsxs("svg", { className: "braid-console__graph", viewBox: `0 0 ${layout.width} ${layout.height}`, role: "group", "aria-label": "Composition topology: routes, the fragments they compose, and the origins serving them", style: { height: `${layout.height}px` }, children: [_jsx("g", { className: "braid-console__edges", children: layout.edges.map((edge) => (_jsx("path", { d: edge.d, className: `braid-console__edge braid-console__edge--${edge.kind}${active ? (lit.edges.has(edge.key) ? ' is-lit' : ' is-dim') : ''}` }, edge.key))) }), layout.nodes.map((placed) => {
34
34
  const dimmed = active && !lit.nodes.has(placed.node.id);
35
35
  return (_jsxs("g", { className: `braid-console__node braid-console__node--${placed.node.kind}${dimmed ? ' is-dim' : ''}${placed.node.id === selected ? ' is-selected' : ''}${placed.node.shared ? ' is-shared' : ''}`, transform: `translate(${placed.x}, ${placed.y})`, tabIndex: 0, role: "button", "aria-pressed": placed.node.id === selected, "aria-label": describe(placed.node, topology), onMouseEnter: () => setHovered(placed.node.id), onMouseLeave: () => setHovered(null), onFocus: () => setHovered(placed.node.id), onBlur: () => setHovered(null), onClick: () => select(placed.node), onKeyDown: (event) => {
36
36
  if (event.key !== 'Enter' && event.key !== ' ')
@@ -48,7 +48,7 @@ function TopologyDetail({ node, topology, onClear, onEmbed, }) {
48
48
  const connected = topology.edges
49
49
  .filter((edge) => edge.from === node.id || edge.to === node.id)
50
50
  .map((edge) => (edge.from === node.id ? edge.to : edge.from));
51
- return (_jsxs("aside", { className: "braid-console__detail", children: [_jsxs("div", { className: "braid-console__detailhead", children: [_jsx("span", { className: `braid-console__kind braid-console__kind--${node.kind}`, children: node.kind }), _jsx("button", { type: "button", className: "braid-console__detailclose", onClick: onClear, "aria-label": "Clear selection", children: "\u2715" })] }), _jsx("h3", { className: "braid-console__detailtitle", children: node.label }), node.entry && (_jsxs(_Fragment, { children: [node.entry.title !== node.entry.id && _jsx("p", { className: "braid-console__detaildesc", children: node.entry.title }), node.entry.description && _jsx("p", { className: "braid-console__detaildesc", children: node.entry.description }), _jsxs("dl", { className: "braid-console__props", children: [_jsx("dt", { children: "Adapter" }), _jsx("dd", { className: "braid-console__mono", children: node.entry.adapter }), _jsx("dt", { children: "Mount" }), _jsx("dd", { className: "braid-console__mono", children: node.entry.mount }), node.entry.contractVersion && (_jsxs(_Fragment, { children: [_jsx("dt", { children: "Contract" }), _jsxs("dd", { className: "braid-console__mono", children: ["v", node.entry.contractVersion] })] })), _jsx("dt", { children: "Access" }), _jsx("dd", { children: _jsx("span", { className: `braid-console__badge braid-console__badge--${node.entry.loadable ? 'loadable' : 'gated'}`, children: node.entry.loadable ? 'loadable' : 'gated' }) })] })] })), node.kind === 'fragment' && node.entry && onEmbed && (_jsx("div", { className: "braid-console__detailsection", children: _jsx("button", { type: "button", className: "braid-console__ghost", onClick: () => onEmbed(node.entry), children: "Embed this fragment" }) })), node.kind === 'fragment' && (_jsxs("div", { className: "braid-console__detailsection", children: [_jsx("h4", { children: "Shares a page with" }), peers.length === 0 ? (_jsx("p", { className: "braid-console__detaildesc", children: "Nothing. This fragment is alone on every route it pierces." })) : (_jsx("ul", { className: "braid-console__peerlist", children: peers.map((peer) => (_jsx("li", { className: "braid-console__mono", children: label(topology, peer) }, peer))) }))] })), node.kind !== 'fragment' && (_jsxs("div", { className: "braid-console__detailsection", children: [_jsx("h4", { children: node.kind === 'route' ? 'Composes' : 'Serves' }), _jsx("ul", { className: "braid-console__peerlist", children: connected.map((id) => (_jsx("li", { className: "braid-console__mono", children: label(topology, id) }, id))) }), node.kind === 'route' && node.shared && (_jsx("p", { className: "braid-console__detailwarn", children: "More than one fragment pierces this pattern. Intentional when the page composes both; a mistake when one pattern is wider than intended." }))] }))] }));
51
+ return (_jsxs("aside", { className: "braid-console__detail", children: [_jsxs("div", { className: "braid-console__detailhead", children: [_jsx("span", { className: `braid-console__kind braid-console__kind--${node.kind}`, children: node.kind }), _jsx("button", { type: "button", className: "braid-console__detailclose", onClick: onClear, "aria-label": "Clear selection", children: "\u2715" })] }), _jsx("h3", { className: "braid-console__detailtitle", children: node.label }), node.entry && (_jsxs(_Fragment, { children: [node.entry.title !== node.entry.id && _jsx("p", { className: "braid-console__detaildesc", children: node.entry.title }), node.entry.description && _jsx("p", { className: "braid-console__detaildesc", children: node.entry.description }), _jsxs("dl", { className: "braid-console__props", children: [_jsx("dt", { children: "Adapter" }), _jsx("dd", { className: "braid-console__mono", children: node.entry.adapter }), _jsx("dt", { children: "Mount" }), _jsx("dd", { className: "braid-console__mono", children: node.entry.mount }), node.entry.contractVersion && (_jsxs(_Fragment, { children: [_jsx("dt", { children: "Contract" }), _jsxs("dd", { className: "braid-console__mono", children: ["v", node.entry.contractVersion] })] })), _jsx("dt", { children: "Access" }), _jsx("dd", { children: _jsx("span", { className: `braid-console__badge braid-console__badge--${node.entry.loadable ? 'loadable' : 'gated'}`, children: node.entry.loadable ? 'loadable' : 'gated' }) })] })] })), node.kind === 'fragment' && node.entry && onEmbed && (_jsx("div", { className: "braid-console__detailsection", children: _jsx("button", { type: "button", className: "braid-console__ghost", onClick: () => onEmbed(node.entry), children: "Embed this fragment" }) })), node.kind === 'fragment' && (_jsxs("div", { className: "braid-console__detailsection", children: [_jsx("h4", { children: "Shares a page with" }), peers.length === 0 ? (_jsx("p", { className: "braid-console__detaildesc", children: "Nothing. This fragment is alone on every route it pierces." })) : (_jsx("ul", { className: "braid-console__peerlist", children: peers.map((peer) => (_jsx("li", { className: "braid-console__mono", children: label(topology, peer) }, peer))) }))] })), node.kind !== 'fragment' && (_jsxs("div", { className: "braid-console__detailsection", children: [_jsx("h4", { children: node.kind === 'shell' ? 'Hosts' : node.kind === 'route' ? 'Composes' : 'Serves' }), _jsx("ul", { className: "braid-console__peerlist", children: connected.map((id) => (_jsx("li", { className: "braid-console__mono", children: label(topology, id) }, id))) }), node.kind === 'route' && node.shared && (_jsx("p", { className: "braid-console__detailwarn", children: "More than one fragment pierces this pattern. Intentional when the page composes both; a mistake when one pattern is wider than intended." }))] }))] }));
52
52
  }
53
53
  // ---------------------------------------------------------------------------
54
54
  // Layout
@@ -67,9 +67,12 @@ const PAD = 8;
67
67
  * without implying direction the way an arrowhead would.
68
68
  */
69
69
  export function layoutTopology(topology) {
70
- const columns = topology.originsUnknown
71
- ? [topology.routes, topology.fragments]
72
- : [topology.routes, topology.fragments, topology.origins];
70
+ const columns = [
71
+ ...(topology.shells?.length ? [topology.shells] : []),
72
+ topology.routes,
73
+ topology.fragments,
74
+ ...(topology.originsUnknown ? [] : [topology.origins]),
75
+ ];
73
76
  const tallest = Math.max(1, ...columns.map((column) => column.length));
74
77
  const height = PAD * 2 + tallest * NODE_H + (tallest - 1) * ROW_GAP;
75
78
  const width = columns.length * NODE_W + (columns.length - 1) * COL_GAP;
@@ -104,6 +107,9 @@ export function layoutTopology(topology) {
104
107
  }
105
108
  return { nodes: placed, edges, width, height };
106
109
  }
110
+ function columnLabels(topology) {
111
+ return [...(topology.shells?.length ? ['Shells'] : []), 'Routes', 'Fragments', ...(topology.originsUnknown ? [] : ['Origins'])];
112
+ }
107
113
  function describe(node, topology) {
108
114
  if (node.kind === 'fragment') {
109
115
  const peers = coTenants(topology, node.id).length;
@@ -112,6 +118,9 @@ function describe(node, topology) {
112
118
  if (node.kind === 'route') {
113
119
  return `Route ${node.label}, composes ${node.degree} fragment${node.degree === 1 ? '' : 's'}`;
114
120
  }
121
+ if (node.kind === 'shell') {
122
+ return `Shell ${node.label}, hosts ${node.degree} route${node.degree === 1 ? '' : 's'}`;
123
+ }
115
124
  return `Origin ${node.label}, serves ${node.degree} fragment${node.degree === 1 ? '' : 's'}`;
116
125
  }
117
126
  function label(topology, nodeId) {
@@ -1 +1 @@
1
- {"version":3,"file":"topology-graph.js","sourceRoot":"","sources":["../../../../../libs/braid-console/src/lib/topology-graph.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"topology-graph.js","sourceRoot":"","sources":["../../../../../libs/braid-console/src/lib/topology-graph.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { DiscoveryEntry } from '@braidlabs/gateway';
2
+ import type { ShellManifest } from '@braidlabs/registry';
2
3
  /**
3
4
  * The composition topology of a gateway, derived from a discovery listing.
4
5
  *
@@ -18,7 +19,7 @@ import type { DiscoveryEntry } from '@braidlabs/gateway';
18
19
  * Everything is derived from `DiscoveryEntry` alone: no new gateway endpoint, and a production
19
20
  * listing that withholds endpoints simply yields a graph without the origin column.
20
21
  */
21
- export type TopologyNodeKind = 'route' | 'fragment' | 'origin';
22
+ export type TopologyNodeKind = 'shell' | 'route' | 'fragment' | 'origin';
22
23
  export interface TopologyNode {
23
24
  /** Unique within the graph. Prefixed by kind, since a route and an origin can read alike. */
24
25
  id: string;
@@ -26,6 +27,8 @@ export interface TopologyNode {
26
27
  label: string;
27
28
  /** Fragment nodes only: the entry this came from, for the detail panel. */
28
29
  entry?: DiscoveryEntry;
30
+ /** Shell nodes only: the shell this came from. */
31
+ shell?: ShellManifest;
29
32
  /** How many fragments a route or origin touches. Drives the count badge. */
30
33
  degree: number;
31
34
  /**
@@ -39,11 +42,20 @@ export interface TopologyNode {
39
42
  export interface TopologyEdge {
40
43
  from: string;
41
44
  to: string;
42
- kind: 'composes' | 'served-by';
45
+ /**
46
+ * `composes`: a route pierces a fragment (gateway routing). `served-by`: a fragment's origin.
47
+ * `hosts`: a shell declares a route. `slots`: a shell's layout places a fragment on that route.
48
+ */
49
+ kind: 'composes' | 'served-by' | 'hosts' | 'slots';
43
50
  }
44
51
  export interface Topology {
45
52
  nodes: TopologyNode[];
46
53
  edges: TopologyEdge[];
54
+ /**
55
+ * Empty unless shells were given. Optional so a `Topology` built by hand, or by an earlier
56
+ * version, still lays out.
57
+ */
58
+ shells?: TopologyNode[];
47
59
  routes: TopologyNode[];
48
60
  fragments: TopologyNode[];
49
61
  origins: TopologyNode[];
@@ -59,6 +71,7 @@ export interface Topology {
59
71
  /** True when the listing withheld endpoints, so the origin column is unavailable rather than empty. */
60
72
  originsUnknown: boolean;
61
73
  }
74
+ export declare const SHELL_PREFIX = "shell:";
62
75
  export declare const ROUTE_PREFIX = "route:";
63
76
  export declare const FRAGMENT_PREFIX = "fragment:";
64
77
  export declare const ORIGIN_PREFIX = "origin:";
@@ -69,7 +82,9 @@ export declare const ORIGIN_PREFIX = "origin:";
69
82
  * are what an operator is looking for) and then by name, so a reload does not reshuffle the
70
83
  * picture under someone reading it.
71
84
  */
72
- export declare function buildTopology(entries: readonly DiscoveryEntry[]): Topology;
85
+ export declare function buildTopology(entries: readonly DiscoveryEntry[], options?: {
86
+ shells?: readonly ShellManifest[];
87
+ }): Topology;
73
88
  /**
74
89
  * Everything reachable from one node, as a set of node and edge ids.
75
90
  *
@@ -1,3 +1,4 @@
1
+ export const SHELL_PREFIX = 'shell:';
1
2
  export const ROUTE_PREFIX = 'route:';
2
3
  export const FRAGMENT_PREFIX = 'fragment:';
3
4
  export const ORIGIN_PREFIX = 'origin:';
@@ -8,7 +9,7 @@ export const ORIGIN_PREFIX = 'origin:';
8
9
  * are what an operator is looking for) and then by name, so a reload does not reshuffle the
9
10
  * picture under someone reading it.
10
11
  */
11
- export function buildTopology(entries) {
12
+ export function buildTopology(entries, options = {}) {
12
13
  const routes = new Map();
13
14
  const origins = new Map();
14
15
  const fragments = [];
@@ -32,6 +33,32 @@ export function buildTopology(entries) {
32
33
  edges.push({ from: fragmentId, to: originId, kind: 'served-by' });
33
34
  }
34
35
  }
36
+ // Shells add the layer above routes. A shell's route and a pierce pattern written identically
37
+ // are one node, which is what lets the map show a slotted fragment and its routing side by side.
38
+ // `slots` is drawn only where routing does not already connect the pair.
39
+ const shells = [];
40
+ const known = new Set(fragments.map((fragment) => fragment.id));
41
+ for (const shell of options.shells ?? []) {
42
+ const shellId = `${SHELL_PREFIX}${shell.id}`;
43
+ shells.push({ id: shellId, kind: 'shell', label: shell.id, shell, degree: shell.routes.length });
44
+ for (const route of shell.routes) {
45
+ const routeId = `${ROUTE_PREFIX}${route.path}`;
46
+ if (!routes.has(routeId))
47
+ routes.set(routeId, { id: routeId, kind: 'route', label: route.path, degree: 0 });
48
+ edges.push({ from: shellId, to: routeId, kind: 'hosts' });
49
+ for (const fragment of new Set(Object.values(route.slots ?? {}))) {
50
+ const fragmentId = `${FRAGMENT_PREFIX}${fragment}`;
51
+ if (!known.has(fragmentId))
52
+ continue;
53
+ if (edges.some((edge) => edge.from === routeId && edge.to === fragmentId))
54
+ continue;
55
+ edges.push({ from: routeId, to: fragmentId, kind: 'slots' });
56
+ const node = routes.get(routeId);
57
+ if (node)
58
+ node.degree += 1;
59
+ }
60
+ }
61
+ }
35
62
  for (const route of routes.values())
36
63
  route.shared = route.degree > 1;
37
64
  const routeList = [...routes.values()].sort(byDegreeThenLabel);
@@ -40,10 +67,13 @@ export function buildTopology(entries) {
40
67
  for (const fragment of fragmentList) {
41
68
  fragment.degree = edges.filter((edge) => edge.to === fragment.id || edge.from === fragment.id).length;
42
69
  }
43
- const routed = new Set(edges.filter((edge) => edge.kind === 'composes').map((edge) => edge.to));
70
+ // A shell slotting a widget places it as surely as a pierce pattern does, so it is not unrouted.
71
+ const routed = new Set(edges.filter((edge) => edge.kind === 'composes' || edge.kind === 'slots').map((edge) => edge.to));
72
+ const shellList = shells.sort((a, b) => a.label.localeCompare(b.label));
44
73
  return {
45
- nodes: [...routeList, ...fragmentList, ...originList],
74
+ nodes: [...shellList, ...routeList, ...fragmentList, ...originList],
46
75
  edges,
76
+ shells: shellList,
47
77
  routes: routeList,
48
78
  fragments: fragmentList,
49
79
  origins: originList,
@@ -83,6 +113,15 @@ export function neighborhood(topology, nodeId) {
83
113
  nodes.add(edge.to);
84
114
  }
85
115
  }
116
+ // From a shell, reach what it composes: its routes' fragments, however they arrive.
117
+ if (nodeId.startsWith(SHELL_PREFIX)) {
118
+ for (const edge of topology.edges) {
119
+ if ((edge.kind !== 'composes' && edge.kind !== 'slots') || !nodes.has(edge.from))
120
+ continue;
121
+ edges.add(edgeKey(edge));
122
+ nodes.add(edge.to);
123
+ }
124
+ }
86
125
  return { nodes, edges };
87
126
  }
88
127
  export function edgeKey(edge) {
@@ -1 +1 @@
1
- {"version":3,"file":"topology.js","sourceRoot":"","sources":["../../../../../libs/braid-console/src/lib/topology.ts"],"names":[],"mappings":"AAmEA,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;AACrC,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC;AAC3C,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC;AAEvC;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,OAAkC;IAC9D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC/C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;IAChD,MAAM,SAAS,GAAmB,EAAE,CAAC;IACrC,MAAM,KAAK,GAAmB,EAAE,CAAC;IAEjC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,GAAG,eAAe,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC;QACnD,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAExF,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,GAAG,YAAY,GAAG,OAAO,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YACxG,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;YAClB,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,QAAQ,GAAG,GAAG,aAAa,GAAG,MAAM,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YAC1G,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAErE,MAAM,SAAS,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACjE,MAAM,YAAY,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAEnF,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;QACpC,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;IACxG,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAEhG,OAAO;QACL,KAAK,EAAE,CAAC,GAAG,SAAS,EAAE,GAAG,YAAY,EAAE,GAAG,UAAU,CAAC;QACrD,KAAK;QACL,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,YAAY;QACvB,OAAO,EAAE,UAAU;QACnB,QAAQ,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACrE,6FAA6F;QAC7F,0FAA0F;QAC1F,cAAc,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,QAAkB,EAAE,MAAqB;IACpE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAErC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClB,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM;YAAE,SAAS;QACzD,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACzB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrB,CAAC;IAED,iGAAiG;IACjG,+EAA+E;IAC/E,IAAI,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,SAAS;YAChE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACzB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAkB;IACxC,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;AACnC,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,SAAS,CAAC,QAAkB,EAAE,UAAkB;IAC9D,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5H,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,UAAU;YAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3G,CAAC;IAED,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,QAAQ,CAAC,QAA4B;IAC5C,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,CAAe,EAAE,CAAe;IACzD,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC/D,CAAC"}
1
+ {"version":3,"file":"topology.js","sourceRoot":"","sources":["../../../../../libs/braid-console/src/lib/topology.ts"],"names":[],"mappings":"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"}