@elevasis/ui 2.32.0 → 2.33.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 (82) hide show
  1. package/dist/app/index.js +3 -3
  2. package/dist/{chunk-GCOQ3TBG.js → chunk-2GMF5IRF.js} +2 -2
  3. package/dist/{chunk-4MFNGNHF.js → chunk-52NLZN6Z.js} +2 -2
  4. package/dist/{chunk-5FJJ72HU.js → chunk-AHCKOU2M.js} +1 -1
  5. package/dist/chunk-CLDCYJQT.js +1 -0
  6. package/dist/chunk-DWXDNT7P.js +145 -0
  7. package/dist/{chunk-5J4PDX26.js → chunk-E4T2N7P7.js} +14 -2
  8. package/dist/{chunk-RQTWIXJ5.js → chunk-E7C4XEWH.js} +1 -1
  9. package/dist/{chunk-6DWD423K.js → chunk-FFPHJBJC.js} +1 -1
  10. package/dist/{chunk-T35FWDAB.js → chunk-GNRMB6DC.js} +940 -156
  11. package/dist/{chunk-LLRXA7D7.js → chunk-IUKFNASA.js} +1 -1
  12. package/dist/{chunk-QTI3KC7D.js → chunk-JHT5JIJ3.js} +106 -43
  13. package/dist/{chunk-IQHU7O5Y.js → chunk-MHLZ4F4N.js} +1 -1
  14. package/dist/{chunk-VRNMNB3O.js → chunk-NOIRGGW2.js} +1 -1
  15. package/dist/{chunk-MOY4VOHF.js → chunk-QNOVUCSV.js} +1 -1
  16. package/dist/{chunk-4QK76KIF.js → chunk-TKF5S4XP.js} +1 -1
  17. package/dist/{chunk-ZQOKIGZP.js → chunk-UVFOURXR.js} +4 -4
  18. package/dist/{chunk-YLQEVSOR.js → chunk-UW7IV2Y3.js} +202 -54
  19. package/dist/{chunk-IZWTVFJ2.js → chunk-V6SZ4ECN.js} +6 -3
  20. package/dist/{chunk-QQHOKTJA.js → chunk-XG57WXOL.js} +39 -2
  21. package/dist/{chunk-7KZINJLP.js → chunk-XOFSMJLF.js} +4 -4
  22. package/dist/{chunk-WQPX44YM.js → chunk-YAQ25UNM.js} +668 -168
  23. package/dist/{chunk-QXCDKE2O.js → chunk-ZGTDKH3P.js} +9 -28
  24. package/dist/components/index.d.ts +111 -2
  25. package/dist/components/index.js +24 -23
  26. package/dist/components/navigation/index.js +4 -3
  27. package/dist/execution/index.d.ts +5 -1
  28. package/dist/features/clients/index.js +8 -7
  29. package/dist/features/crm/index.js +10 -9
  30. package/dist/features/dashboard/index.d.ts +110 -1
  31. package/dist/features/dashboard/index.js +9 -8
  32. package/dist/features/delivery/index.js +9 -8
  33. package/dist/features/knowledge/index.js +8 -18
  34. package/dist/features/lead-gen/index.js +10 -9
  35. package/dist/features/monitoring/index.js +10 -9
  36. package/dist/features/monitoring/requests/index.d.ts +2 -2
  37. package/dist/features/monitoring/requests/index.js +8 -7
  38. package/dist/features/operations/index.d.ts +442 -73
  39. package/dist/features/operations/index.js +13 -12
  40. package/dist/features/settings/index.js +9 -8
  41. package/dist/hooks/index.d.ts +192 -3
  42. package/dist/hooks/index.js +8 -7
  43. package/dist/hooks/operations/command-view/utils/transformCommandViewData.d.ts +190 -1
  44. package/dist/hooks/published.d.ts +192 -3
  45. package/dist/hooks/published.js +8 -7
  46. package/dist/index.d.ts +444 -75
  47. package/dist/index.js +8 -7
  48. package/dist/knowledge/index.d.ts +490 -214
  49. package/dist/knowledge/index.js +1179 -687
  50. package/dist/knowledge-search-index-P7PR626V.js +1514 -0
  51. package/dist/layout/index.js +1 -1
  52. package/dist/provider/index.d.ts +357 -72
  53. package/dist/provider/index.js +7 -6
  54. package/dist/provider/published.d.ts +357 -72
  55. package/dist/provider/published.js +5 -4
  56. package/dist/types/index.d.ts +190 -1
  57. package/dist/utils/index.d.ts +110 -1
  58. package/package.json +39 -39
  59. package/src/README.md +29 -29
  60. package/src/api/README.md +18 -18
  61. package/src/app/README.md +24 -24
  62. package/src/auth/README.md +18 -18
  63. package/src/components/README.md +24 -24
  64. package/src/execution/README.md +16 -16
  65. package/src/features/README.md +28 -28
  66. package/src/graph/README.md +16 -16
  67. package/src/hooks/README.md +23 -23
  68. package/src/initialization/README.md +19 -19
  69. package/src/knowledge/README.md +31 -31
  70. package/src/organization/README.md +18 -18
  71. package/src/profile/README.md +19 -19
  72. package/src/provider/README.md +32 -32
  73. package/src/router/README.md +18 -18
  74. package/src/sse/README.md +13 -13
  75. package/src/test-utils/README.md +7 -7
  76. package/src/theme/README.md +23 -23
  77. package/src/theme/presets/README.md +19 -19
  78. package/src/types/README.md +16 -16
  79. package/src/utils/README.md +18 -18
  80. package/src/zustand/README.md +18 -18
  81. package/dist/chunk-UROTM5OR.js +0 -172
  82. package/dist/knowledge-search-index-5KYPO746.js +0 -1479
@@ -1,5 +1,5 @@
1
- import { SemanticIcon } from './chunk-UROTM5OR.js';
2
- import { buildOrganizationGraph, projectOrganizationSurfaces, getSortedSidebarEntries, getSystem } from './chunk-T35FWDAB.js';
1
+ import { SemanticIcon } from './chunk-DWXDNT7P.js';
2
+ import { buildOrganizationGraph, projectOrganizationSurfaces, compileOrganizationOntology, getSortedSidebarEntries, parseOntologyId, getSystem, resolveSystemConfig } from './chunk-GNRMB6DC.js';
3
3
  import { useMemo, useState, useRef, useEffect } from 'react';
4
4
  import { useTree, Text, Tree, UnstyledButton, Group, TextInput } from '@mantine/core';
5
5
  import { useClipboard } from '@mantine/hooks';
@@ -20,9 +20,9 @@ function getSharedOrganizationGraph(organizationModel) {
20
20
 
21
21
  // src/knowledge/iconTokens.ts
22
22
  var KNOWLEDGE_ICON_TOKEN_BY_KIND = {
23
- playbook: "knowledge.playbook",
24
- strategy: "knowledge.strategy",
25
- reference: "knowledge.reference"
23
+ playbook: "playbook",
24
+ strategy: "strategy",
25
+ reference: "reference"
26
26
  };
27
27
  function getKnowledgeIconToken(node) {
28
28
  return node.icon ?? KNOWLEDGE_ICON_TOKEN_BY_KIND[node.kind];
@@ -84,25 +84,230 @@ function projectNavigationGroups(model) {
84
84
  ...collectGroups(model.navigation.sidebar.bottom, "bottom")
85
85
  ];
86
86
  }
87
- function toSemanticFallbackKind(kind) {
87
+
88
+ // src/knowledge/ontologyProjection.ts
89
+ var DOMAIN_LABELS = {
90
+ "ontology-objects": "Objects",
91
+ "ontology-links": "Links",
92
+ "ontology-actions": "Actions",
93
+ "ontology-catalogs": "Catalogs",
94
+ "ontology-events": "Events",
95
+ "ontology-interfaces": "Interfaces",
96
+ "ontology-value-types": "Value Types",
97
+ "ontology-properties": "Shared Properties",
98
+ "ontology-groups": "Groups",
99
+ "ontology-surfaces": "Surfaces",
100
+ "ontology-resources": "Resources"
101
+ };
102
+ function titleFromId(id) {
103
+ const localId = id.includes("/") ? id.slice(id.lastIndexOf("/") + 1) : id;
104
+ return localId.replace(/[-_.]+/g, " ").replace(/\s+/g, " ").trim().replace(/\b\w/g, (char) => char.toUpperCase());
105
+ }
106
+ function isLegacyBridgeRecord(record) {
107
+ return typeof record["legacyEntityId"] === "string" || typeof record["legacyActionId"] === "string" || typeof record["legacyContentId"] === "string";
108
+ }
109
+ function ontologyItem(id, record, fallbackKind) {
110
+ let parsed;
111
+ try {
112
+ parsed = parseOntologyId(id);
113
+ } catch {
114
+ parsed = void 0;
115
+ }
116
+ const ownerSystemId = typeof record["ownerSystemId"] === "string" ? record["ownerSystemId"] : parsed?.isGlobal === false ? parsed.scope : void 0;
117
+ const meta = {};
118
+ for (const [key, value] of Object.entries(record)) {
119
+ if (["id", "label", "description", "ownerSystemId", "aliases"].includes(key)) continue;
120
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
121
+ meta[key] = value;
122
+ }
123
+ }
124
+ return {
125
+ id,
126
+ label: typeof record["label"] === "string" ? record["label"] : titleFromId(id),
127
+ description: typeof record["description"] === "string" ? record["description"] : void 0,
128
+ kind: parsed?.kind ?? fallbackKind,
129
+ ownerSystemId,
130
+ source: isLegacyBridgeRecord(record) ? "legacy-bridge" : "ontology",
131
+ meta
132
+ };
133
+ }
134
+ function sortItems(items) {
135
+ return [...items].sort(
136
+ (left, right) => (left.ownerSystemId ?? "").localeCompare(right.ownerSystemId ?? "") || left.label.localeCompare(right.label) || left.id.localeCompare(right.id)
137
+ );
138
+ }
139
+ function resourceDescription(resource) {
140
+ return resource.codeRefs.find((codeRef) => codeRef.description !== void 0)?.description;
141
+ }
142
+ function getKnowledgeOntologyProjection(model) {
143
+ const compiled = compileOrganizationOntology(model);
144
+ return {
145
+ objects: sortItems(
146
+ Object.entries(compiled.ontology.objectTypes).map(
147
+ ([id, record]) => ontologyItem(id, record, "object")
148
+ )
149
+ ),
150
+ links: sortItems(
151
+ Object.entries(compiled.ontology.linkTypes).map(
152
+ ([id, record]) => ontologyItem(id, record, "link")
153
+ )
154
+ ),
155
+ actions: sortItems(
156
+ Object.entries(compiled.ontology.actionTypes).map(
157
+ ([id, record]) => ontologyItem(id, record, "action")
158
+ )
159
+ ),
160
+ catalogs: sortItems(
161
+ Object.entries(compiled.ontology.catalogTypes).map(
162
+ ([id, record]) => ontologyItem(id, record, "catalog")
163
+ )
164
+ ),
165
+ events: sortItems(
166
+ Object.entries(compiled.ontology.eventTypes).map(
167
+ ([id, record]) => ontologyItem(id, record, "event")
168
+ )
169
+ ),
170
+ interfaces: sortItems(
171
+ Object.entries(compiled.ontology.interfaceTypes).map(
172
+ ([id, record]) => ontologyItem(id, record, "interface")
173
+ )
174
+ ),
175
+ valueTypes: sortItems(
176
+ Object.entries(compiled.ontology.valueTypes).map(
177
+ ([id, record]) => ontologyItem(id, record, "value-type")
178
+ )
179
+ ),
180
+ properties: sortItems(
181
+ Object.entries(compiled.ontology.sharedProperties).map(
182
+ ([id, record]) => ontologyItem(id, record, "property")
183
+ )
184
+ ),
185
+ groups: sortItems(
186
+ Object.entries(compiled.ontology.groups).map(
187
+ ([id, record]) => ontologyItem(id, record, "group")
188
+ )
189
+ ),
190
+ surfaces: sortItems(
191
+ Object.entries(compiled.ontology.surfaces).map(
192
+ ([id, record]) => ontologyItem(id, record, "surface")
193
+ )
194
+ ),
195
+ resources: sortItems(
196
+ Object.values(model.resources ?? {}).map((resource) => ({
197
+ id: resource.id,
198
+ label: resource.id,
199
+ description: resourceDescription(resource),
200
+ kind: "resource",
201
+ ownerSystemId: resource.systemPath,
202
+ source: "resource",
203
+ meta: { type: resource.kind, status: resource.status }
204
+ }))
205
+ ),
206
+ diagnosticsCount: compiled.diagnostics.length
207
+ };
208
+ }
209
+ function getOntologyItemsForDomain(projection, domainKey) {
210
+ switch (domainKey) {
211
+ case "ontology-objects":
212
+ return projection.objects;
213
+ case "ontology-links":
214
+ return projection.links;
215
+ case "ontology-actions":
216
+ return projection.actions;
217
+ case "ontology-catalogs":
218
+ return projection.catalogs;
219
+ case "ontology-events":
220
+ return projection.events;
221
+ case "ontology-interfaces":
222
+ return projection.interfaces;
223
+ case "ontology-value-types":
224
+ return projection.valueTypes;
225
+ case "ontology-properties":
226
+ return projection.properties;
227
+ case "ontology-groups":
228
+ return projection.groups;
229
+ case "ontology-surfaces":
230
+ return projection.surfaces;
231
+ case "ontology-resources":
232
+ return projection.resources;
233
+ default:
234
+ return [];
235
+ }
236
+ }
237
+ function getPrimaryOntologyItemsForDomain(projection, domainKey) {
238
+ return getOntologyItemsForDomain(projection, domainKey).filter((item) => item.source !== "legacy-bridge");
239
+ }
240
+ function getOntologyDomainLabel(domainKey) {
241
+ return DOMAIN_LABELS[domainKey] ?? "Ontology";
242
+ }
243
+
244
+ // src/knowledge/knowledgeCopyCommands.ts
245
+ function stripGraphKindPrefix(id, kind) {
246
+ const prefix = `${kind}:`;
247
+ return id.startsWith(prefix) ? id.slice(prefix.length) : id;
248
+ }
249
+ function normalizeKnowledgeNodeId(nodeId) {
250
+ return nodeId.startsWith("knowledge:") ? nodeId.slice("knowledge:".length) : nodeId;
251
+ }
252
+ function getKnowledgeNodeReadCommand(nodeId) {
253
+ return `/knowledge read ${normalizeKnowledgeNodeId(nodeId)}`;
254
+ }
255
+ function getKnowledgeNodeReadCommands(nodeIds) {
256
+ return [...new Set(nodeIds)].map(getKnowledgeNodeReadCommand).join("\n");
257
+ }
258
+ function getKnowledgeFolderCommand(kind, id) {
259
+ return `/knowledge read-folder ${kind}:${id}`;
260
+ }
261
+ function getKnowledgeTreeFolderCommand(treeValue) {
262
+ return `/knowledge read-folder ${treeValue}`;
263
+ }
264
+ function getKnowledgeDomainFolderCommand(domainKey) {
265
+ return getKnowledgeFolderCommand("domain", domainKey);
266
+ }
267
+ function getKnowledgeGraphFolderCommand(graphNodeId) {
268
+ return getKnowledgeFolderCommand("graph", graphNodeId);
269
+ }
270
+ function getKnowledgeSpineFolderCommand(spine, id) {
271
+ const bareId = stripGraphKindPrefix(id, spine);
272
+ if (spine === "system") return getKnowledgeFolderCommand("system", bareId);
273
+ if (spine === "ontology") return getKnowledgeFolderCommand("ontology", bareId);
274
+ return getKnowledgeGraphFolderCommand(`${spine}:${bareId}`);
275
+ }
276
+ function getKnowledgeGraphNodeCommand(node) {
277
+ if (node.kind === "knowledge") {
278
+ return getKnowledgeNodeReadCommand(node.sourceId ?? node.id);
279
+ }
280
+ if (node.kind === "system") {
281
+ return getKnowledgeFolderCommand("system", node.sourceId ?? stripGraphKindPrefix(node.id, "system"));
282
+ }
283
+ if (node.kind === "ontology") {
284
+ return getKnowledgeFolderCommand("ontology", node.sourceId ?? stripGraphKindPrefix(node.id, "ontology"));
285
+ }
286
+ return getKnowledgeGraphFolderCommand(node.id);
287
+ }
288
+ function graphKindToFallbackToken(kind) {
88
289
  switch (kind) {
89
290
  case "knowledge":
291
+ return "reference";
90
292
  case "resource":
293
+ return "workflow";
91
294
  case "action":
295
+ return "view";
92
296
  case "entity":
93
297
  case "event":
298
+ return "database";
94
299
  case "policy":
95
- return kind;
300
+ return "shield";
96
301
  case "system":
97
- return "feature";
302
+ return "operations";
98
303
  case "role":
99
- return "unknown";
304
+ return "user";
100
305
  case "stage":
101
- return "status";
306
+ return "pending";
102
307
  case "organization":
103
- return "unknown";
308
+ return "building";
104
309
  default:
105
- return "unknown";
310
+ return "info";
106
311
  }
107
312
  }
108
313
  var QUICK_ACCESS_GROUP_KEY = "quick-access";
@@ -114,6 +319,9 @@ var GROUP_ICON_TOKENS = {
114
319
  "business-model": "om.business-model",
115
320
  systems: "om.systems",
116
321
  graph: "om.graph",
322
+ resources: "resources",
323
+ knowledge: "knowledge",
324
+ navigation: "view",
117
325
  "governance-wiring": "om.governance-wiring"
118
326
  };
119
327
  function findFavoritePathInTree(nodes, favorite) {
@@ -155,8 +363,26 @@ var OM_TREE_GROUPS = [
155
363
  { key: "profile", label: "Profile", domains: ["identity", "branding"] },
156
364
  { key: "business-model", label: "Business Model", domains: ["customers", "offerings", "goals"] },
157
365
  { key: "systems", label: "Systems", domains: ["systems", "sales", "prospecting", "projects"] },
158
- { key: "graph", label: "Graph", domains: ["resources", "actions", "entities", "events", "stages", "knowledge"] },
159
- { key: "governance-wiring", label: "Governance & Wiring", domains: ["roles", "policies", "statuses", "navigation"] }
366
+ {
367
+ key: "graph",
368
+ label: "Ontology",
369
+ domains: [
370
+ "ontology-objects",
371
+ "ontology-links",
372
+ "ontology-actions",
373
+ "ontology-catalogs",
374
+ "ontology-events",
375
+ "ontology-interfaces",
376
+ "ontology-value-types",
377
+ "ontology-properties",
378
+ "ontology-groups",
379
+ "ontology-surfaces"
380
+ ]
381
+ },
382
+ { key: "resources", label: "Resources", domains: ["resources"] },
383
+ { key: "knowledge", label: "Knowledge", domains: ["knowledge"] },
384
+ { key: "navigation", label: "Navigation", domains: ["navigation"] },
385
+ { key: "governance-wiring", label: "Governance", domains: ["roles", "policies"] }
160
386
  ];
161
387
  var DOMAIN_PREFIX = "domain:";
162
388
  var GROUP_PREFIX = "group:";
@@ -184,6 +410,7 @@ function graphNodeIdForKnowledgeTarget(targetKind, targetId) {
184
410
  case "policy":
185
411
  case "role":
186
412
  case "knowledge":
413
+ case "ontology":
187
414
  case "system":
188
415
  case "stage":
189
416
  return `${targetKind}:${targetId}`;
@@ -209,6 +436,20 @@ var GRAPH_RESOURCE_TYPE_LABELS = {
209
436
  trigger: "Triggers",
210
437
  human_checkpoint: "Human Checkpoints"
211
438
  };
439
+ var CORE_ONTOLOGY_DOMAIN_KEYS = [
440
+ "ontology-objects",
441
+ "ontology-links",
442
+ "ontology-actions",
443
+ "ontology-catalogs",
444
+ "ontology-events",
445
+ "ontology-surfaces"
446
+ ];
447
+ var OPTIONAL_ONTOLOGY_DOMAIN_KEYS = [
448
+ "ontology-interfaces",
449
+ "ontology-value-types",
450
+ "ontology-properties",
451
+ "ontology-groups"
452
+ ];
212
453
  var KNOWLEDGE_START_HERE_IDS = [
213
454
  "knowledge.org-model-reference",
214
455
  "knowledge.org-model-graph-contract",
@@ -254,11 +495,20 @@ var KNOWLEDGE_DOMAINS_WITH_PANELS = /* @__PURE__ */ new Set([
254
495
  "sales",
255
496
  "prospecting",
256
497
  "projects",
257
- "statuses",
258
498
  "navigation",
259
- "policies"
499
+ "policies",
500
+ "ontology-objects",
501
+ "ontology-links",
502
+ "ontology-actions",
503
+ "ontology-catalogs",
504
+ "ontology-events",
505
+ "ontology-interfaces",
506
+ "ontology-value-types",
507
+ "ontology-properties",
508
+ "ontology-groups",
509
+ "ontology-surfaces"
260
510
  ]);
261
- var FILTERABLE_DOMAIN_KEYS = /* @__PURE__ */ new Set(["customers", "offerings", "goals", "roles", "statuses", "policies"]);
511
+ var FILTERABLE_DOMAIN_KEYS = /* @__PURE__ */ new Set(["customers", "offerings", "goals", "roles", "policies"]);
262
512
  function shouldRouteItemToDomainPanel(domainKey) {
263
513
  return FILTERABLE_DOMAIN_KEYS.has(domainKey);
264
514
  }
@@ -356,8 +606,13 @@ function spineNodeHasVisibleDescendant(bareId, allBareIds, spine, facetStates, c
356
606
  const cached = cache2.get(bareId);
357
607
  if (cached !== void 0) return cached;
358
608
  const graphNodeId = `${spine}:${bareId}`;
359
- const hasContentChildren = spine === "system" && organizationModel !== void 0 && Object.keys(getSystem(organizationModel, bareId)?.content ?? {}).length > 0;
360
- let result = hasContentChildren || facetStates.knowledge !== "exclude" && (ctx.governsEdgesByTarget.get(graphNodeId)?.length ?? 0) > 0 || getIncludedFacetNodes(graphNodeId, spine, facetStates, ctx).length > 0 || childGraphIds(allBareIds, bareId).some(
609
+ const hasSystemModelChildren = spine === "system" && [
610
+ ...buildOntologySubgroup(bareId, organizationModel),
611
+ ...buildSystemResourcesSubgroup(bareId, ctx),
612
+ ...buildSystemConfigSubgroup(bareId, organizationModel),
613
+ ...buildSystemGovernanceSubgroup(bareId, organizationModel)
614
+ ].length > 0;
615
+ let result = hasSystemModelChildren || facetStates.knowledge !== "exclude" && (ctx.governsEdgesByTarget.get(graphNodeId)?.length ?? 0) > 0 || getIncludedFacetNodes(graphNodeId, spine, facetStates, ctx).length > 0 || childGraphIds(allBareIds, bareId).some(
361
616
  (childId) => spineNodeHasVisibleDescendant(childId, allBareIds, spine, facetStates, ctx, organizationModel, cache2)
362
617
  );
363
618
  cache2.set(bareId, result);
@@ -372,20 +627,8 @@ function buildSpineMetaMap(graph, spine) {
372
627
  }
373
628
  return map;
374
629
  }
375
- function getKnowledgeReadCommand(nodeId) {
376
- return `/knowledge read ${nodeId}`;
377
- }
378
- function getKnowledgeReadCommands(nodeIds) {
379
- return [...new Set(nodeIds)].map(getKnowledgeReadCommand).join("\n");
380
- }
381
- function getKnowledgeReadSpineFolderCommand(spine, bareId) {
382
- return `/knowledge read-folder ${spine}:${bareId}`;
383
- }
384
- function getKnowledgeReadTreeFolderCommand(treeValue) {
385
- return `/knowledge read-folder ${treeValue}`;
386
- }
387
630
  function getKnowledgeDirectoryCommand(nodeIds, fallbackCommand) {
388
- const command = getKnowledgeReadCommands(nodeIds ?? []);
631
+ const command = getKnowledgeNodeReadCommands(nodeIds ?? []);
389
632
  return command || fallbackCommand;
390
633
  }
391
634
  function getKnowledgeFolderKey(node) {
@@ -407,6 +650,14 @@ function sortFolderKeys(left, right) {
407
650
  if (rightIndex === -1) return -1;
408
651
  return leftIndex - rightIndex;
409
652
  }
653
+ function formatTreeLabel(value) {
654
+ const spaced = value.replace(/([a-z0-9])([A-Z])/g, "$1 $2").replace(/[._/-]+/g, " ").trim();
655
+ if (!spaced) return value;
656
+ return spaced.split(/\s+/).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
657
+ }
658
+ function treeValueSegment(value) {
659
+ return value.replace(/[^A-Za-z0-9_.-]/g, "-");
660
+ }
410
661
  function createKnowledgeLeaf(graphNodeId, node) {
411
662
  return {
412
663
  value: `${LEAF_PREFIX}${graphNodeId}::${node.id}`,
@@ -431,7 +682,7 @@ function createKnowledgeLeaves(graphNodeId, nodes) {
431
682
  value: `${FOLDER_PREFIX}${graphNodeId}::${folderKey}`,
432
683
  label: FOLDER_LABELS[folderKey] ?? folderKey,
433
684
  nodeType: "folder",
434
- icon: "knowledge.playbook",
685
+ icon: "playbook",
435
686
  knowledgeNodeIds: folderNodes.map((node) => node.id),
436
687
  children: folderNodes.map((node) => createKnowledgeLeaf(graphNodeId, node))
437
688
  }));
@@ -536,55 +787,236 @@ function createCollectionNode(parentKey, collectionKey, label, children) {
536
787
  children: children.length > 0 ? children : void 0
537
788
  };
538
789
  }
539
- var CONTENT_META_KIND_ORDER = ["schema", "config", "knowledge"];
540
- function contentMetaKindSortKey(kind) {
541
- const idx = CONTENT_META_KIND_ORDER.indexOf(kind);
542
- return idx === -1 ? CONTENT_META_KIND_ORDER.length : idx;
543
- }
544
- function buildContentKindItems(systemPath, entries) {
545
- return [...entries].sort(([, a], [, b]) => (a.order ?? 0) - (b.order ?? 0) || (a.label ?? "").localeCompare(b.label ?? "")).map(([localId, node]) => {
546
- const qualifiedId = `${systemPath}:${localId}`;
790
+ function buildOntologySubgroup(bareId, organizationModel) {
791
+ if (!organizationModel) return [];
792
+ const projection = getKnowledgeOntologyProjection(organizationModel);
793
+ const domainKeys = [...CORE_ONTOLOGY_DOMAIN_KEYS, ...OPTIONAL_ONTOLOGY_DOMAIN_KEYS];
794
+ const domainFolders = domainKeys.map((domainKey) => {
795
+ const items = getPrimaryOntologyItemsForDomain(projection, domainKey).filter(
796
+ (item) => item.ownerSystemId === bareId
797
+ );
798
+ if (items.length === 0) return void 0;
547
799
  return {
548
- // Wave 5 will project content nodes into the graph; until then render as
549
- // 'item' so the label appears without requiring a graph-node map lookup.
550
- value: `${ITEM_PREFIX}content:${qualifiedId}`,
551
- label: node.label ?? localId,
552
- nodeType: "item",
553
- domainKey: "content",
554
- itemId: qualifiedId,
555
- graphNodeId: `content-node:${qualifiedId}`,
556
- knowledgeNodeIds: []
800
+ value: `${FOLDER_PREFIX}ontology:${bareId}:${domainKey}`,
801
+ label: getOntologyDomainLabel(domainKey),
802
+ nodeType: "folder",
803
+ knowledgeNodeIds: [],
804
+ children: items.map(
805
+ (item) => createItemNode({
806
+ domainKey,
807
+ itemId: item.id,
808
+ label: item.label,
809
+ graphNodeId: item.kind === "resource" ? `resource:${item.id}` : `ontology:${item.id}`
810
+ })
811
+ )
557
812
  };
558
- });
813
+ }).filter((node) => node !== void 0);
814
+ if (domainFolders.length === 0) return [];
815
+ return [
816
+ {
817
+ value: `${FOLDER_PREFIX}ontology:${bareId}`,
818
+ label: "Ontology",
819
+ nodeType: "folder",
820
+ knowledgeNodeIds: [],
821
+ children: domainFolders
822
+ }
823
+ ];
824
+ }
825
+ function buildSystemResourcesSubgroup(bareId, ctx) {
826
+ const graphNodeId = `system:${bareId}`;
827
+ const resourceNodes = (ctx.edgesBySource.get(graphNodeId) ?? []).filter((edge) => edge.kind === "contains").map((edge) => ctx.nodesById.get(edge.targetId)).filter((node) => node?.kind === "resource").sort((left, right) => left.label.localeCompare(right.label) || left.id.localeCompare(right.id));
828
+ if (resourceNodes.length === 0) return [];
829
+ const children = GRAPH_RESOURCE_TYPE_ORDER.map((resourceType) => {
830
+ const typedResources = resourceNodes.filter((node) => node.resourceType === resourceType);
831
+ if (typedResources.length === 0) return void 0;
832
+ return createCollectionNode(
833
+ `system:${bareId}:resources`,
834
+ resourceType,
835
+ GRAPH_RESOURCE_TYPE_LABELS[resourceType],
836
+ typedResources.map((node) => createGraphNodeItem(node, "resources"))
837
+ );
838
+ }).filter((node) => node !== void 0);
839
+ const unclassifiedResources = resourceNodes.filter((node) => node.resourceType === void 0);
840
+ if (unclassifiedResources.length > 0) {
841
+ children.push(
842
+ createCollectionNode(
843
+ `system:${bareId}:resources`,
844
+ "unknown",
845
+ "Unclassified",
846
+ unclassifiedResources.map((node) => createGraphNodeItem(node, "resources"))
847
+ )
848
+ );
849
+ }
850
+ return [
851
+ {
852
+ value: `${FOLDER_PREFIX}resources:${bareId}`,
853
+ label: "Resources",
854
+ nodeType: "folder",
855
+ icon: "workflow",
856
+ knowledgeNodeIds: children.flatMap(collectKnowledgeNodeIds),
857
+ children
858
+ }
859
+ ];
559
860
  }
560
- function buildContentSubgroup(bareId, organizationModel) {
861
+ function buildSystemConfigSubgroup(bareId, organizationModel) {
561
862
  if (!organizationModel) return [];
562
863
  const system = getSystem(organizationModel, bareId);
563
- const contentMap = system?.content;
564
- if (!contentMap || Object.keys(contentMap).length === 0) return [];
565
- const byMetaKind = /* @__PURE__ */ new Map();
566
- for (const [localId, node] of Object.entries(contentMap)) {
567
- const bucket = byMetaKind.get(node.kind) ?? [];
568
- bucket.push([localId, node]);
569
- byMetaKind.set(node.kind, bucket);
864
+ if (!system) return [];
865
+ const config = resolveSystemConfig(organizationModel, bareId);
866
+ const configKeys = Object.keys(config).sort((left, right) => left.localeCompare(right));
867
+ const children = [];
868
+ if (configKeys.length > 0) {
869
+ children.push({
870
+ value: `${FOLDER_PREFIX}config:${bareId}:defaults`,
871
+ label: "Defaults",
872
+ nodeType: "folder",
873
+ icon: "settings",
874
+ knowledgeNodeIds: [],
875
+ children: configKeys.map((key) => ({
876
+ value: `${FOLDER_PREFIX}config:${bareId}:defaults:${treeValueSegment(key)}`,
877
+ label: formatTreeLabel(key),
878
+ nodeType: "folder",
879
+ knowledgeNodeIds: []
880
+ }))
881
+ });
570
882
  }
571
- const kindFolders = [...byMetaKind.entries()].sort(([a], [b]) => contentMetaKindSortKey(a) - contentMetaKindSortKey(b) || a.localeCompare(b)).map(([metaKind, entries]) => {
572
- const items = buildContentKindItems(bareId, entries);
573
- return {
574
- value: `${FOLDER_PREFIX}content:${bareId}:${metaKind}`,
575
- label: metaKind.charAt(0).toUpperCase() + metaKind.slice(1),
883
+ const hasUiConfig = system.ui !== void 0 || system.path !== void 0 || system.icon !== void 0 || system.uiPosition !== void 0 || system.enabled !== void 0 || system.devOnly !== void 0 || system.requiresAdmin !== void 0;
884
+ if (hasUiConfig) {
885
+ const uiChildren = [];
886
+ if (system.ui?.path !== void 0 || system.path !== void 0) {
887
+ uiChildren.push({
888
+ value: `${FOLDER_PREFIX}config:${bareId}:ui:path`,
889
+ label: "Path",
890
+ nodeType: "folder",
891
+ knowledgeNodeIds: []
892
+ });
893
+ }
894
+ if ((system.ui?.surfaces.length ?? 0) > 0) {
895
+ uiChildren.push({
896
+ value: `${FOLDER_PREFIX}config:${bareId}:ui:surfaces`,
897
+ label: "Surfaces",
898
+ nodeType: "folder",
899
+ knowledgeNodeIds: []
900
+ });
901
+ }
902
+ if (system.ui?.icon !== void 0 || system.icon !== void 0) {
903
+ uiChildren.push({
904
+ value: `${FOLDER_PREFIX}config:${bareId}:ui:icon`,
905
+ label: "Icon",
906
+ nodeType: "folder",
907
+ knowledgeNodeIds: []
908
+ });
909
+ }
910
+ if (system.uiPosition !== void 0) {
911
+ uiChildren.push({
912
+ value: `${FOLDER_PREFIX}config:${bareId}:ui:placement`,
913
+ label: "Placement",
914
+ nodeType: "folder",
915
+ knowledgeNodeIds: []
916
+ });
917
+ }
918
+ if (system.enabled !== void 0 || system.devOnly !== void 0 || system.requiresAdmin !== void 0) {
919
+ uiChildren.push({
920
+ value: `${FOLDER_PREFIX}config:${bareId}:ui:access`,
921
+ label: "Access",
922
+ nodeType: "folder",
923
+ knowledgeNodeIds: []
924
+ });
925
+ }
926
+ children.push({
927
+ value: `${FOLDER_PREFIX}config:${bareId}:ui`,
928
+ label: "UI",
576
929
  nodeType: "folder",
930
+ icon: "view",
577
931
  knowledgeNodeIds: [],
578
- children: items.length > 0 ? items : void 0
579
- };
580
- });
932
+ children: uiChildren.length > 0 ? uiChildren : void 0
933
+ });
934
+ }
935
+ if (children.length === 0) return [];
581
936
  return [
582
937
  {
583
- value: `${FOLDER_PREFIX}content:${bareId}`,
584
- label: "Content",
938
+ value: `${FOLDER_PREFIX}config:${bareId}`,
939
+ label: "Config",
585
940
  nodeType: "folder",
586
- knowledgeNodeIds: [],
587
- children: kindFolders.length > 0 ? kindFolders : void 0
941
+ icon: "settings",
942
+ knowledgeNodeIds: children.flatMap(collectKnowledgeNodeIds),
943
+ children
944
+ }
945
+ ];
946
+ }
947
+ function buildSystemKnowledgeSubgroup(graphNodeId, governing) {
948
+ if (governing.length === 0) return [];
949
+ const children = createKnowledgeLeaves(graphNodeId, governing);
950
+ return [
951
+ {
952
+ value: `${FOLDER_PREFIX}knowledge:${graphNodeId}`,
953
+ label: "Knowledge",
954
+ nodeType: "folder",
955
+ icon: "reference",
956
+ knowledgeNodeIds: children.flatMap(collectKnowledgeNodeIds),
957
+ children
958
+ }
959
+ ];
960
+ }
961
+ function buildSystemGovernanceSubgroup(bareId, organizationModel) {
962
+ if (!organizationModel) return [];
963
+ const system = getSystem(organizationModel, bareId);
964
+ if (!system) return [];
965
+ const roleIds = /* @__PURE__ */ new Set();
966
+ if (system.responsibleRoleId !== void 0) roleIds.add(system.responsibleRoleId);
967
+ for (const role of Object.values(organizationModel.roles ?? {})) {
968
+ if (role.responsibleFor?.includes(bareId)) roleIds.add(role.id);
969
+ }
970
+ const policyIds = new Set(system.policies ?? []);
971
+ for (const policy of Object.values(organizationModel.policies ?? {})) {
972
+ if (policy.appliesTo.systemIds.includes(bareId)) policyIds.add(policy.id);
973
+ }
974
+ const roles = Object.values(organizationModel.roles ?? {}).filter((role) => roleIds.has(role.id)).sort((left, right) => (left.order ?? 0) - (right.order ?? 0) || left.title.localeCompare(right.title));
975
+ const policies = Object.values(organizationModel.policies ?? {}).filter((policy) => policyIds.has(policy.id)).sort((left, right) => (left.order ?? 0) - (right.order ?? 0) || left.label.localeCompare(right.label));
976
+ const children = [];
977
+ if (roles.length > 0) {
978
+ children.push(
979
+ createCollectionNode(
980
+ `governance:${bareId}`,
981
+ "roles",
982
+ roles.length === 1 ? "Responsible Role" : "Responsible Roles",
983
+ roles.map(
984
+ (role) => createItemNode({
985
+ domainKey: "roles",
986
+ itemId: role.id,
987
+ label: role.title,
988
+ graphNodeId: `role:${role.id}`
989
+ })
990
+ )
991
+ )
992
+ );
993
+ }
994
+ if (policies.length > 0) {
995
+ children.push(
996
+ createCollectionNode(
997
+ `governance:${bareId}`,
998
+ "policies",
999
+ "Policies",
1000
+ policies.map(
1001
+ (policy) => createItemNode({
1002
+ domainKey: "policies",
1003
+ itemId: policy.id,
1004
+ label: policy.label,
1005
+ graphNodeId: `policy:${policy.id}`
1006
+ })
1007
+ )
1008
+ )
1009
+ );
1010
+ }
1011
+ if (children.length === 0) return [];
1012
+ return [
1013
+ {
1014
+ value: `${FOLDER_PREFIX}governance:${bareId}`,
1015
+ label: "Governance",
1016
+ nodeType: "folder",
1017
+ icon: "shield",
1018
+ knowledgeNodeIds: children.flatMap(collectKnowledgeNodeIds),
1019
+ children
588
1020
  }
589
1021
  ];
590
1022
  }
@@ -592,14 +1024,19 @@ function buildSpineTreeNode(bareId, allBareIds, spineMetaMap, spine, facetStates
592
1024
  const graphNodeId = `${spine}:${bareId}`;
593
1025
  const governing = facetStates.knowledge === "exclude" ? [] : ctx.governsEdgesByTarget.get(graphNodeId) ?? [];
594
1026
  const childIds = childGraphIds(allBareIds, bareId);
595
- const contentChildren = spine === "system" ? buildContentSubgroup(bareId, organizationModel) : [];
596
- const domainConfigChildren = [];
1027
+ const systemModelChildren = spine === "system" ? [
1028
+ ...buildOntologySubgroup(bareId, organizationModel),
1029
+ ...buildSystemResourcesSubgroup(bareId, ctx),
1030
+ ...buildSystemConfigSubgroup(bareId, organizationModel),
1031
+ ...buildSystemKnowledgeSubgroup(graphNodeId, governing),
1032
+ ...buildSystemGovernanceSubgroup(bareId, organizationModel)
1033
+ ] : [];
597
1034
  const childSpineNodes = childIds.filter((childId) => visibleSpineIds.has(childId)).map(
598
1035
  (childId) => buildSpineTreeNode(childId, allBareIds, spineMetaMap, spine, facetStates, ctx, visibleSpineIds, organizationModel)
599
1036
  );
600
- const knowledgeLeaves = createKnowledgeLeaves(graphNodeId, governing);
1037
+ const knowledgeLeaves = spine === "system" ? [] : createKnowledgeLeaves(graphNodeId, governing);
601
1038
  const facetLeaves = createFacetGraphLeaves(getIncludedFacetNodes(graphNodeId, spine, facetStates, ctx));
602
- const children = [...domainConfigChildren, ...contentChildren, ...childSpineNodes, ...knowledgeLeaves, ...facetLeaves];
1039
+ const children = [...systemModelChildren, ...childSpineNodes, ...knowledgeLeaves, ...facetLeaves];
603
1040
  const meta = spineMetaMap[bareId];
604
1041
  return {
605
1042
  value: `${SPINE_PREFIX}${spine}:${bareId}`,
@@ -715,90 +1152,160 @@ function buildSystemsGroup(graph, organizationModel, facetStates, ctx, visibleSp
715
1152
  );
716
1153
  return createGroupNode({ groupKey: "systems", label: "Systems", children });
717
1154
  }
718
- function graphNodesByKind(graph, kind) {
719
- return graph.nodes.filter((node) => node.kind === kind).sort((left, right) => left.label.localeCompare(right.label) || left.id.localeCompare(right.id));
1155
+ function buildOntologyBranch(organizationModel, domainKey) {
1156
+ if (!organizationModel) return void 0;
1157
+ const projection = getKnowledgeOntologyProjection(organizationModel);
1158
+ const items = getPrimaryOntologyItemsForDomain(projection, domainKey);
1159
+ if (items.length === 0) return void 0;
1160
+ return createDomainNode({
1161
+ domainKey,
1162
+ label: getOntologyDomainLabel(domainKey),
1163
+ children: items.map(
1164
+ (item) => createItemNode({
1165
+ domainKey,
1166
+ itemId: item.id,
1167
+ label: item.label,
1168
+ children: [
1169
+ {
1170
+ value: `${FOLDER_PREFIX}${domainKey}:${item.id}:owner`,
1171
+ label: item.ownerSystemId ?? "global",
1172
+ nodeType: "folder",
1173
+ icon: item.kind === "resource" ? "workflow" : "info",
1174
+ knowledgeNodeIds: []
1175
+ }
1176
+ ]
1177
+ })
1178
+ )
1179
+ });
1180
+ }
1181
+ function buildGraphGroup(organizationModel) {
1182
+ const ontologyDomains = [...CORE_ONTOLOGY_DOMAIN_KEYS, ...OPTIONAL_ONTOLOGY_DOMAIN_KEYS].map((domainKey) => buildOntologyBranch(organizationModel, domainKey)).filter((node) => node !== void 0);
1183
+ return createGroupNode({
1184
+ groupKey: "graph",
1185
+ label: "Ontology",
1186
+ children: ontologyDomains
1187
+ });
720
1188
  }
721
- function buildGraphResourcesBranch(graph) {
722
- const resources = graphNodesByKind(graph, "resource");
1189
+ function buildResourcesGroup(graph) {
1190
+ const resourceNodes = graph.nodes.filter((node) => node.kind === "resource").sort(
1191
+ (left, right) => (left.resourceType ?? "").localeCompare(right.resourceType ?? "") || left.label.localeCompare(right.label) || left.id.localeCompare(right.id)
1192
+ );
723
1193
  const children = GRAPH_RESOURCE_TYPE_ORDER.map((resourceType) => {
724
- const resourceNodes = resources.filter((node) => node.resourceType === resourceType);
725
- if (resourceNodes.length === 0) return void 0;
1194
+ const typedResources = resourceNodes.filter((node) => node.resourceType === resourceType);
1195
+ if (typedResources.length === 0) return void 0;
726
1196
  return createCollectionNode(
727
- "graph:resources",
1197
+ "resources",
728
1198
  resourceType,
729
1199
  GRAPH_RESOURCE_TYPE_LABELS[resourceType],
730
- resourceNodes.map((node) => createGraphNodeItem(node, "resources"))
1200
+ typedResources.map((node) => createGraphNodeItem(node, "resources"))
731
1201
  );
732
1202
  }).filter((node) => node !== void 0);
733
- const untypedResources = resources.filter((node) => node.resourceType === void 0);
734
- if (untypedResources.length > 0) {
1203
+ const orderedTypes = new Set(GRAPH_RESOURCE_TYPE_ORDER);
1204
+ const otherResources = resourceNodes.filter(
1205
+ (node) => node.resourceType === void 0 || !orderedTypes.has(node.resourceType)
1206
+ );
1207
+ if (otherResources.length > 0) {
735
1208
  children.push(
736
1209
  createCollectionNode(
737
- "graph:resources",
738
- "unknown",
739
- "Unclassified",
740
- untypedResources.map((node) => createGraphNodeItem(node, "resources"))
1210
+ "resources",
1211
+ "other",
1212
+ "Other",
1213
+ otherResources.map((node) => createGraphNodeItem(node, "resources"))
741
1214
  )
742
1215
  );
743
1216
  }
744
- return createDomainNode({ domainKey: "resources", label: "Resources", children });
1217
+ return createGroupNode({
1218
+ groupKey: "resources",
1219
+ label: "Resources",
1220
+ children
1221
+ });
1222
+ }
1223
+ function formatOntologyKnowledgeTargetLabel(targetId, organizationModel) {
1224
+ if (organizationModel) {
1225
+ const projection = getKnowledgeOntologyProjection(organizationModel);
1226
+ for (const domainKey of [...CORE_ONTOLOGY_DOMAIN_KEYS, ...OPTIONAL_ONTOLOGY_DOMAIN_KEYS]) {
1227
+ const item = getPrimaryOntologyItemsForDomain(projection, domainKey).find((candidate) => candidate.id === targetId);
1228
+ if (item) return item.label;
1229
+ }
1230
+ }
1231
+ return formatTreeLabel(targetId.includes("/") ? targetId.slice(targetId.lastIndexOf("/") + 1) : targetId);
1232
+ }
1233
+ function createKnowledgeCollection(parentKey, collectionKey, label, nodes) {
1234
+ return createCollectionNode(parentKey, collectionKey, label, createKnowledgeLeaves(`knowledge:${collectionKey}`, nodes));
745
1235
  }
746
- function buildGraphKnowledgeBranch(graph, knowledgeNodes) {
747
- const graphNodesBySourceId = new Map(
748
- graph.nodes.filter((node) => node.kind === "knowledge").map((node) => [node.sourceId ?? node.id, node])
1236
+ function buildKnowledgeTargetCollections(knowledgeNodes, targetKind, parentKey, collectionLabel, formatTargetLabel) {
1237
+ const grouped = /* @__PURE__ */ new Map();
1238
+ for (const node of knowledgeNodes) {
1239
+ for (const link of node.links) {
1240
+ if (link.target.kind !== targetKind) continue;
1241
+ const bucket = grouped.get(link.target.id) ?? [];
1242
+ bucket.push(node);
1243
+ grouped.set(link.target.id, bucket);
1244
+ }
1245
+ }
1246
+ const children = [...grouped.entries()].sort(([left], [right]) => formatTargetLabel(left).localeCompare(formatTargetLabel(right))).map(
1247
+ ([targetId, nodes]) => createCollectionNode(
1248
+ `${parentKey}:${collectionKeyForTarget(targetKind)}`,
1249
+ treeValueSegment(targetId),
1250
+ formatTargetLabel(targetId),
1251
+ uniqueKnowledgeNodes(nodes).map((node) => createKnowledgeLeaf(`knowledge:${targetKind}:${targetId}`, node))
1252
+ )
749
1253
  );
750
- const knowledgeById = new Map(knowledgeNodes.map((node) => [node.id, node]));
751
- const startHere = KNOWLEDGE_START_HERE_IDS.map((id) => knowledgeById.get(id)).filter(
752
- (node) => node !== void 0
1254
+ if (children.length === 0) return void 0;
1255
+ return createCollectionNode(parentKey, collectionKeyForTarget(targetKind), collectionLabel, children);
1256
+ }
1257
+ function collectionKeyForTarget(targetKind) {
1258
+ return targetKind === "system" ? "by-system" : "by-ontology";
1259
+ }
1260
+ function buildKnowledgeGroup(graph, knowledgeNodes, organizationModel) {
1261
+ const systemLabels = new Map(
1262
+ graph.nodes.filter((node) => node.kind === "system").map((node) => [node.sourceId ?? node.id.replace(/^system:/, ""), node.label])
753
1263
  );
754
- const startHereIds = new Set(startHere.map((node) => node.id));
755
- const allKnowledge = [...knowledgeNodes].filter((node) => !startHereIds.has(node.id)).sort((left, right) => left.title.localeCompare(right.title));
756
- const toKnowledgeItem = (node) => createItemNode({
757
- domainKey: "knowledge",
758
- itemId: node.id,
759
- label: node.title,
760
- graphNodeId: graphNodesBySourceId.get(node.id)?.id
761
- });
762
- return createDomainNode({
763
- domainKey: "knowledge",
1264
+ const sortedKnowledgeNodes = uniqueKnowledgeNodes(knowledgeNodes);
1265
+ const startHereNodes = sortedKnowledgeNodes.filter((node) => KNOWLEDGE_START_HERE_IDS.includes(node.id));
1266
+ const startHereIds = new Set(startHereNodes.map((node) => node.id));
1267
+ const allNodes = sortedKnowledgeNodes.filter((node) => !startHereIds.has(node.id));
1268
+ const children = [];
1269
+ if (startHereNodes.length > 0) {
1270
+ children.push(createKnowledgeCollection("knowledge", "start-here", "Start Here", startHereNodes));
1271
+ }
1272
+ if (allNodes.length > 0) {
1273
+ children.push(createKnowledgeCollection("knowledge", "all", "All", allNodes));
1274
+ }
1275
+ const bySystem = buildKnowledgeTargetCollections(
1276
+ sortedKnowledgeNodes,
1277
+ "system",
1278
+ "knowledge",
1279
+ "By System",
1280
+ (targetId) => systemLabels.get(targetId) ?? formatTreeLabel(targetId)
1281
+ );
1282
+ if (bySystem) children.push(bySystem);
1283
+ const byOntology = buildKnowledgeTargetCollections(
1284
+ sortedKnowledgeNodes,
1285
+ "ontology",
1286
+ "knowledge",
1287
+ "By Ontology",
1288
+ (targetId) => formatOntologyKnowledgeTargetLabel(targetId, organizationModel)
1289
+ );
1290
+ if (byOntology) children.push(byOntology);
1291
+ return createGroupNode({
1292
+ groupKey: "knowledge",
764
1293
  label: "Knowledge",
765
- children: [
766
- createCollectionNode("graph:knowledge", "start-here", "Start Here", startHere.map(toKnowledgeItem)),
767
- createCollectionNode("graph:knowledge", "all", "All", allKnowledge.map(toKnowledgeItem))
768
- ]
769
- });
770
- }
771
- function buildGraphStagesBranch(graph) {
772
- return createDomainNode({
773
- domainKey: "stages",
774
- label: "Stages",
775
- children: graphNodesByKind(graph, "stage").map((node) => createGraphNodeItem(node, "stages"))
1294
+ children
776
1295
  });
777
1296
  }
778
- function buildGraphGroup(graph, knowledgeNodes) {
1297
+ function buildNavigationGroup(organizationModel) {
1298
+ const navigationSurfaces = (organizationModel ? projectNavigationSurfaces(organizationModel) : []).sort((left, right) => left.label.localeCompare(right.label)).map(
1299
+ (surface) => createItemNode({
1300
+ domainKey: "navigation",
1301
+ itemId: surface.id,
1302
+ label: surface.label
1303
+ })
1304
+ );
779
1305
  return createGroupNode({
780
- groupKey: "graph",
781
- label: "Graph",
782
- children: [
783
- buildGraphResourcesBranch(graph),
784
- createDomainNode({
785
- domainKey: "actions",
786
- label: "Actions",
787
- children: graphNodesByKind(graph, "action").map((node) => createGraphNodeItem(node, "actions"))
788
- }),
789
- createDomainNode({
790
- domainKey: "entities",
791
- label: "Entities",
792
- children: graphNodesByKind(graph, "entity").map((node) => createGraphNodeItem(node, "entities"))
793
- }),
794
- createDomainNode({
795
- domainKey: "events",
796
- label: "Events",
797
- children: graphNodesByKind(graph, "event").map((node) => createGraphNodeItem(node, "events"))
798
- }),
799
- buildGraphStagesBranch(graph),
800
- buildGraphKnowledgeBranch(graph, knowledgeNodes)
801
- ]
1306
+ groupKey: "navigation",
1307
+ label: "Navigation",
1308
+ children: [createDomainNode({ domainKey: "navigation", label: "Surfaces", children: navigationSurfaces })]
802
1309
  });
803
1310
  }
804
1311
  function buildGovernanceGroup(graph, organizationModel, knowledgeByTarget, facetStates) {
@@ -812,23 +1319,13 @@ function buildGovernanceGroup(graph, organizationModel, knowledgeByTarget, facet
812
1319
  knowledgeNodes: getTargetKnowledge(knowledgeByTarget, `policy:${policy.id}`, facetStates)
813
1320
  })
814
1321
  );
815
- const statusGroups = [];
816
- const navigationSurfaces = (organizationModel ? projectNavigationSurfaces(organizationModel) : []).sort((left, right) => left.label.localeCompare(right.label)).map(
817
- (surface) => createItemNode({
818
- domainKey: "navigation",
819
- itemId: surface.id,
820
- label: surface.label
821
- })
822
- );
823
1322
  const rolesDomain = buildRolesDomain(graph, organizationModel, knowledgeByTarget, facetStates);
824
1323
  return createGroupNode({
825
1324
  groupKey: "governance-wiring",
826
- label: "Governance & Wiring",
1325
+ label: "Governance",
827
1326
  children: [
828
1327
  rolesDomain,
829
- createDomainNode({ domainKey: "policies", label: "Policies", children: policies }),
830
- createDomainNode({ domainKey: "statuses", label: "Statuses", children: statusGroups }),
831
- createDomainNode({ domainKey: "navigation", label: "Navigation", children: navigationSurfaces })
1328
+ createDomainNode({ domainKey: "policies", label: "Policies", children: policies })
832
1329
  ]
833
1330
  });
834
1331
  }
@@ -857,7 +1354,13 @@ function buildOrgTreeNode(graph, knowledgeNodes, facetStates, organizationModel,
857
1354
  case "systems":
858
1355
  return buildSystemsGroup(graph, organizationModel, facetStates, ctx, visibleSpineIds);
859
1356
  case "graph":
860
- return buildGraphGroup(graph, knowledgeNodes);
1357
+ return buildGraphGroup(organizationModel);
1358
+ case "resources":
1359
+ return buildResourcesGroup(graph);
1360
+ case "knowledge":
1361
+ return buildKnowledgeGroup(graph, knowledgeNodes, organizationModel);
1362
+ case "navigation":
1363
+ return buildNavigationGroup(organizationModel);
861
1364
  case "governance-wiring":
862
1365
  return buildGovernanceGroup(graph, organizationModel, knowledgeByTarget, facetStates);
863
1366
  default:
@@ -979,7 +1482,7 @@ function KnowledgeTree({
979
1482
  iconToken: GROUP_ICON_TOKENS[groupKey] ?? typedNode.icon,
980
1483
  command: isQuickAccess ? "" : getKnowledgeDirectoryCommand(
981
1484
  typedNode.knowledgeNodeIds,
982
- getKnowledgeReadTreeFolderCommand(`${GROUP_PREFIX}${groupKey}`)
1485
+ getKnowledgeTreeFolderCommand(`${GROUP_PREFIX}${groupKey}`)
983
1486
  ),
984
1487
  isActive: isActive2,
985
1488
  fallbackKind: "organization",
@@ -1033,7 +1536,7 @@ function KnowledgeTree({
1033
1536
  iconToken: void 0,
1034
1537
  command: getKnowledgeDirectoryCommand(
1035
1538
  typedNode.knowledgeNodeIds,
1036
- getKnowledgeReadTreeFolderCommand(`${DOMAIN_PREFIX}${domainKey}`)
1539
+ getKnowledgeTreeFolderCommand(`${DOMAIN_PREFIX}${domainKey}`)
1037
1540
  ),
1038
1541
  isActive: isActive2,
1039
1542
  fallbackKind: "organization",
@@ -1051,7 +1554,7 @@ function KnowledgeTree({
1051
1554
  const graphNode2 = typedNode.graphNodeId ? graphNodeMap.get(typedNode.graphNodeId) : void 0;
1052
1555
  const itemRouteId = `${ITEM_PREFIX}${typedNode.domainKey}:${typedNode.itemId}`;
1053
1556
  const routeToDomainPanel = shouldRouteItemToDomainPanel(typedNode.domainKey);
1054
- const fallbackCommand = graphNode2?.kind === "knowledge" && graphNode2.sourceId ? getKnowledgeReadCommand(graphNode2.sourceId) : graphNode2 ? getKnowledgeReadTreeFolderCommand(`graph:${graphNode2.id}`) : getKnowledgeReadTreeFolderCommand(itemRouteId);
1557
+ const fallbackCommand = graphNode2?.kind === "knowledge" && graphNode2.sourceId ? getKnowledgeNodeReadCommand(graphNode2.sourceId) : graphNode2 ? getKnowledgeGraphFolderCommand(graphNode2.id) : getKnowledgeTreeFolderCommand(itemRouteId);
1055
1558
  const isActive2 = selectedNodeId !== void 0 && (selectedNodeId === itemRouteId || selectedNodeId === typedNode.itemId || selectedNodeId === typedNode.graphNodeId || graphNode2 !== void 0 && (selectedNodeId === graphNode2.id || selectedNodeId === graphNode2.sourceId));
1056
1559
  return /* @__PURE__ */ jsx(
1057
1560
  DirectoryRow,
@@ -1099,7 +1602,7 @@ function KnowledgeTree({
1099
1602
  iconToken: typedNode.icon,
1100
1603
  command: getKnowledgeDirectoryCommand(
1101
1604
  typedNode.knowledgeNodeIds,
1102
- getKnowledgeReadTreeFolderCommand(String(value))
1605
+ getKnowledgeTreeFolderCommand(String(value))
1103
1606
  ),
1104
1607
  isActive: false
1105
1608
  }
@@ -1117,7 +1620,7 @@ function KnowledgeTree({
1117
1620
  hasChildren,
1118
1621
  label: String(node.label),
1119
1622
  iconToken: typedNode.icon,
1120
- command: getKnowledgeReadTreeFolderCommand(`graph:${graphNode2.id}`),
1623
+ command: getKnowledgeGraphFolderCommand(graphNode2.id),
1121
1624
  isActive: isActive2,
1122
1625
  fallbackKind: graphNode2.kind,
1123
1626
  onSelectGraphNode: () => onSelectGraphNode?.(graphNode2),
@@ -1141,7 +1644,7 @@ function KnowledgeTree({
1141
1644
  hasChildren,
1142
1645
  label: String(node.label),
1143
1646
  iconToken: typedNode.icon,
1144
- command: graphSpine ? getKnowledgeReadSpineFolderCommand(graphSpine, graphNode?.sourceId ?? graphNodeId) : "",
1647
+ command: graphSpine ? getKnowledgeSpineFolderCommand(graphSpine, graphNode?.sourceId ?? graphNodeId) : "",
1145
1648
  isActive,
1146
1649
  fallbackKind: graphNode?.kind ?? "system",
1147
1650
  uppercase: true,
@@ -1270,8 +1773,7 @@ function FavoriteRow({ elementProps, label, routeId, kind, iconToken, onActivate
1270
1773
  /* @__PURE__ */ jsx(
1271
1774
  SemanticIcon,
1272
1775
  {
1273
- token: iconToken,
1274
- fallbackKind: kind === "knowledge" ? "knowledge" : "unknown",
1776
+ token: iconToken ?? (kind === "knowledge" ? "reference" : "info"),
1275
1777
  size: 15,
1276
1778
  style: { color: SIDEBAR_TREE_ACCENT_COLOR }
1277
1779
  }
@@ -1364,8 +1866,7 @@ function KnowledgeLeafRow({ elementProps, knowledgeNode, isActive, onSelectNode
1364
1866
  /* @__PURE__ */ jsx(
1365
1867
  SemanticIcon,
1366
1868
  {
1367
- token: getKnowledgeIconToken(knowledgeNode),
1368
- fallbackKind: knowledgeNode.kind,
1869
+ token: getKnowledgeIconToken(knowledgeNode) ?? "reference",
1369
1870
  size: 15,
1370
1871
  style: { color: SIDEBAR_TREE_ACCENT_COLOR }
1371
1872
  }
@@ -1383,7 +1884,7 @@ function KnowledgeLeafRow({ elementProps, knowledgeNode, isActive, onSelectNode
1383
1884
  /* @__PURE__ */ jsx(
1384
1885
  TrailingCopySlot,
1385
1886
  {
1386
- command: getKnowledgeReadCommand(knowledgeNode.id),
1887
+ command: getKnowledgeNodeReadCommand(knowledgeNode.id),
1387
1888
  label: "Copy knowledge command",
1388
1889
  showCopy: hovered,
1389
1890
  favorite: {
@@ -1466,8 +1967,7 @@ function DirectoryRow({
1466
1967
  /* @__PURE__ */ jsx(
1467
1968
  SemanticIcon,
1468
1969
  {
1469
- token: iconToken,
1470
- fallbackKind: fallbackKind !== void 0 ? toSemanticFallbackKind(fallbackKind) : "unknown",
1970
+ token: iconToken ?? (fallbackKind !== void 0 ? graphKindToFallbackToken(fallbackKind) : "info"),
1471
1971
  size: 14,
1472
1972
  style: { color: SIDEBAR_TREE_ACCENT_COLOR }
1473
1973
  }
@@ -1541,7 +2041,7 @@ function TrailingCopySlot({ command, label, showCopy, favorite, hovered }) {
1541
2041
  var indexPromise = null;
1542
2042
  function loadSearchIndex() {
1543
2043
  if (!indexPromise) {
1544
- indexPromise = import('./knowledge-search-index-5KYPO746.js').then(
2044
+ indexPromise = import('./knowledge-search-index-P7PR626V.js').then(
1545
2045
  (mod) => buildSearchIndex(mod.default ?? mod)
1546
2046
  );
1547
2047
  }
@@ -1623,4 +2123,4 @@ function KnowledgeSearchBar({
1623
2123
  );
1624
2124
  }
1625
2125
 
1626
- export { KNOWLEDGE_DOMAINS_WITH_PANELS, KNOWLEDGE_ICON_TOKEN_BY_KIND, KnowledgeSearchBar, KnowledgeTree, OM_TREE_GROUPS, getKnowledgeIconToken, getSharedOrganizationGraph, projectNavigationGroups, projectNavigationSurfaces };
2126
+ export { KNOWLEDGE_DOMAINS_WITH_PANELS, KNOWLEDGE_ICON_TOKEN_BY_KIND, KnowledgeSearchBar, KnowledgeTree, OM_TREE_GROUPS, getKnowledgeDomainFolderCommand, getKnowledgeGraphNodeCommand, getKnowledgeIconToken, getKnowledgeNodeReadCommand, getKnowledgeOntologyProjection, getKnowledgeTreeFolderCommand, getOntologyDomainLabel, getPrimaryOntologyItemsForDomain, getSharedOrganizationGraph, projectNavigationGroups, projectNavigationSurfaces };