@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.
- package/dist/app/index.js +3 -3
- package/dist/{chunk-GCOQ3TBG.js → chunk-2GMF5IRF.js} +2 -2
- package/dist/{chunk-4MFNGNHF.js → chunk-52NLZN6Z.js} +2 -2
- package/dist/{chunk-5FJJ72HU.js → chunk-AHCKOU2M.js} +1 -1
- package/dist/chunk-CLDCYJQT.js +1 -0
- package/dist/chunk-DWXDNT7P.js +145 -0
- package/dist/{chunk-5J4PDX26.js → chunk-E4T2N7P7.js} +14 -2
- package/dist/{chunk-RQTWIXJ5.js → chunk-E7C4XEWH.js} +1 -1
- package/dist/{chunk-6DWD423K.js → chunk-FFPHJBJC.js} +1 -1
- package/dist/{chunk-T35FWDAB.js → chunk-GNRMB6DC.js} +940 -156
- package/dist/{chunk-LLRXA7D7.js → chunk-IUKFNASA.js} +1 -1
- package/dist/{chunk-QTI3KC7D.js → chunk-JHT5JIJ3.js} +106 -43
- package/dist/{chunk-IQHU7O5Y.js → chunk-MHLZ4F4N.js} +1 -1
- package/dist/{chunk-VRNMNB3O.js → chunk-NOIRGGW2.js} +1 -1
- package/dist/{chunk-MOY4VOHF.js → chunk-QNOVUCSV.js} +1 -1
- package/dist/{chunk-4QK76KIF.js → chunk-TKF5S4XP.js} +1 -1
- package/dist/{chunk-ZQOKIGZP.js → chunk-UVFOURXR.js} +4 -4
- package/dist/{chunk-YLQEVSOR.js → chunk-UW7IV2Y3.js} +202 -54
- package/dist/{chunk-IZWTVFJ2.js → chunk-V6SZ4ECN.js} +6 -3
- package/dist/{chunk-QQHOKTJA.js → chunk-XG57WXOL.js} +39 -2
- package/dist/{chunk-7KZINJLP.js → chunk-XOFSMJLF.js} +4 -4
- package/dist/{chunk-WQPX44YM.js → chunk-YAQ25UNM.js} +668 -168
- package/dist/{chunk-QXCDKE2O.js → chunk-ZGTDKH3P.js} +9 -28
- package/dist/components/index.d.ts +111 -2
- package/dist/components/index.js +24 -23
- package/dist/components/navigation/index.js +4 -3
- package/dist/execution/index.d.ts +5 -1
- package/dist/features/clients/index.js +8 -7
- package/dist/features/crm/index.js +10 -9
- package/dist/features/dashboard/index.d.ts +110 -1
- package/dist/features/dashboard/index.js +9 -8
- package/dist/features/delivery/index.js +9 -8
- package/dist/features/knowledge/index.js +8 -18
- package/dist/features/lead-gen/index.js +10 -9
- package/dist/features/monitoring/index.js +10 -9
- package/dist/features/monitoring/requests/index.d.ts +2 -2
- package/dist/features/monitoring/requests/index.js +8 -7
- package/dist/features/operations/index.d.ts +442 -73
- package/dist/features/operations/index.js +13 -12
- package/dist/features/settings/index.js +9 -8
- package/dist/hooks/index.d.ts +192 -3
- package/dist/hooks/index.js +8 -7
- package/dist/hooks/operations/command-view/utils/transformCommandViewData.d.ts +190 -1
- package/dist/hooks/published.d.ts +192 -3
- package/dist/hooks/published.js +8 -7
- package/dist/index.d.ts +444 -75
- package/dist/index.js +8 -7
- package/dist/knowledge/index.d.ts +490 -214
- package/dist/knowledge/index.js +1179 -687
- package/dist/knowledge-search-index-P7PR626V.js +1514 -0
- package/dist/layout/index.js +1 -1
- package/dist/provider/index.d.ts +357 -72
- package/dist/provider/index.js +7 -6
- package/dist/provider/published.d.ts +357 -72
- package/dist/provider/published.js +5 -4
- package/dist/types/index.d.ts +190 -1
- package/dist/utils/index.d.ts +110 -1
- package/package.json +39 -39
- package/src/README.md +29 -29
- package/src/api/README.md +18 -18
- package/src/app/README.md +24 -24
- package/src/auth/README.md +18 -18
- package/src/components/README.md +24 -24
- package/src/execution/README.md +16 -16
- package/src/features/README.md +28 -28
- package/src/graph/README.md +16 -16
- package/src/hooks/README.md +23 -23
- package/src/initialization/README.md +19 -19
- package/src/knowledge/README.md +31 -31
- package/src/organization/README.md +18 -18
- package/src/profile/README.md +19 -19
- package/src/provider/README.md +32 -32
- package/src/router/README.md +18 -18
- package/src/sse/README.md +13 -13
- package/src/test-utils/README.md +7 -7
- package/src/theme/README.md +23 -23
- package/src/theme/presets/README.md +19 -19
- package/src/types/README.md +16 -16
- package/src/utils/README.md +18 -18
- package/src/zustand/README.md +18 -18
- package/dist/chunk-UROTM5OR.js +0 -172
- package/dist/knowledge-search-index-5KYPO746.js +0 -1479
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { SemanticIcon } from './chunk-
|
|
2
|
-
import { buildOrganizationGraph, projectOrganizationSurfaces, getSortedSidebarEntries, getSystem } from './chunk-
|
|
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: "
|
|
24
|
-
strategy: "
|
|
25
|
-
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
|
-
|
|
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
|
|
300
|
+
return "shield";
|
|
96
301
|
case "system":
|
|
97
|
-
return "
|
|
302
|
+
return "operations";
|
|
98
303
|
case "role":
|
|
99
|
-
return "
|
|
304
|
+
return "user";
|
|
100
305
|
case "stage":
|
|
101
|
-
return "
|
|
306
|
+
return "pending";
|
|
102
307
|
case "organization":
|
|
103
|
-
return "
|
|
308
|
+
return "building";
|
|
104
309
|
default:
|
|
105
|
-
return "
|
|
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
|
-
{
|
|
159
|
-
|
|
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", "
|
|
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
|
|
360
|
-
|
|
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 =
|
|
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: "
|
|
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
|
-
|
|
540
|
-
|
|
541
|
-
const
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
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
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
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
|
|
861
|
+
function buildSystemConfigSubgroup(bareId, organizationModel) {
|
|
561
862
|
if (!organizationModel) return [];
|
|
562
863
|
const system = getSystem(organizationModel, bareId);
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
const
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
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
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
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:
|
|
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}
|
|
584
|
-
label: "
|
|
938
|
+
value: `${FOLDER_PREFIX}config:${bareId}`,
|
|
939
|
+
label: "Config",
|
|
585
940
|
nodeType: "folder",
|
|
586
|
-
|
|
587
|
-
|
|
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
|
|
596
|
-
|
|
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 = [...
|
|
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
|
|
719
|
-
|
|
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
|
|
722
|
-
const
|
|
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
|
|
725
|
-
if (
|
|
1194
|
+
const typedResources = resourceNodes.filter((node) => node.resourceType === resourceType);
|
|
1195
|
+
if (typedResources.length === 0) return void 0;
|
|
726
1196
|
return createCollectionNode(
|
|
727
|
-
"
|
|
1197
|
+
"resources",
|
|
728
1198
|
resourceType,
|
|
729
1199
|
GRAPH_RESOURCE_TYPE_LABELS[resourceType],
|
|
730
|
-
|
|
1200
|
+
typedResources.map((node) => createGraphNodeItem(node, "resources"))
|
|
731
1201
|
);
|
|
732
1202
|
}).filter((node) => node !== void 0);
|
|
733
|
-
const
|
|
734
|
-
|
|
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
|
-
"
|
|
738
|
-
"
|
|
739
|
-
"
|
|
740
|
-
|
|
1210
|
+
"resources",
|
|
1211
|
+
"other",
|
|
1212
|
+
"Other",
|
|
1213
|
+
otherResources.map((node) => createGraphNodeItem(node, "resources"))
|
|
741
1214
|
)
|
|
742
1215
|
);
|
|
743
1216
|
}
|
|
744
|
-
return
|
|
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
|
|
747
|
-
const
|
|
748
|
-
|
|
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
|
-
|
|
751
|
-
|
|
752
|
-
|
|
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
|
|
755
|
-
const
|
|
756
|
-
const
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
}
|
|
762
|
-
|
|
763
|
-
|
|
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
|
|
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: "
|
|
781
|
-
label: "
|
|
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
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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 ?
|
|
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
|
-
|
|
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:
|
|
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 ?
|
|
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:
|
|
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-
|
|
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 };
|