@elevasis/ui 2.32.0 → 2.33.1
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.d.ts +3 -0
- package/dist/app/index.js +3 -3
- package/dist/{chunk-LLRXA7D7.js → chunk-2VYMDNJ3.js} +1 -1
- package/dist/{chunk-7KZINJLP.js → chunk-3YZRKADM.js} +4 -4
- package/dist/{chunk-MOY4VOHF.js → chunk-4AAZXKLL.js} +1 -1
- package/dist/{chunk-RQTWIXJ5.js → chunk-53436UTQ.js} +1 -1
- package/dist/{chunk-WQPX44YM.js → chunk-AV2TKVVV.js} +673 -168
- package/dist/chunk-CLDCYJQT.js +1 -0
- package/dist/chunk-DWXDNT7P.js +145 -0
- package/dist/{chunk-T35FWDAB.js → chunk-DYIDXUJS.js} +1089 -158
- package/dist/{chunk-IQHU7O5Y.js → chunk-F3MXFE72.js} +1 -1
- package/dist/{chunk-5FJJ72HU.js → chunk-FOUYP4JX.js} +1 -1
- package/dist/{chunk-QQHOKTJA.js → chunk-H6EFQP2P.js} +39 -2
- package/dist/{chunk-5J4PDX26.js → chunk-KW7ZNQD7.js} +16 -2
- package/dist/{chunk-ZQOKIGZP.js → chunk-NCEQGEW5.js} +4 -4
- package/dist/{chunk-6DWD423K.js → chunk-PIS24NIV.js} +1 -1
- package/dist/{chunk-4MFNGNHF.js → chunk-QVTIOT73.js} +2 -2
- package/dist/{chunk-GCOQ3TBG.js → chunk-SWMQTF2H.js} +2 -2
- package/dist/{chunk-4QK76KIF.js → chunk-UNVRVCXZ.js} +1 -1
- package/dist/{chunk-VRNMNB3O.js → chunk-UYRT7SPM.js} +1 -1
- package/dist/{chunk-IZWTVFJ2.js → chunk-V6SZ4ECN.js} +6 -3
- package/dist/{chunk-YLQEVSOR.js → chunk-WGUEIGPC.js} +202 -54
- package/dist/{chunk-QXCDKE2O.js → chunk-WJOE76FI.js} +9 -28
- package/dist/{chunk-QTI3KC7D.js → chunk-YENKDBUU.js} +106 -43
- package/dist/components/index.d.ts +117 -4
- package/dist/components/index.js +24 -23
- package/dist/components/navigation/index.js +4 -3
- package/dist/execution/index.d.ts +8 -3
- package/dist/features/auth/index.d.ts +3 -0
- package/dist/features/clients/index.js +8 -7
- package/dist/features/crm/index.d.ts +3 -0
- package/dist/features/crm/index.js +10 -9
- package/dist/features/dashboard/index.d.ts +113 -3
- package/dist/features/dashboard/index.js +9 -8
- package/dist/features/delivery/index.d.ts +3 -0
- 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 +560 -93
- package/dist/features/operations/index.js +13 -12
- package/dist/features/settings/index.d.ts +3 -0
- package/dist/features/settings/index.js +9 -8
- package/dist/hooks/delivery/index.d.ts +3 -0
- package/dist/hooks/index.d.ts +210 -6
- package/dist/hooks/index.js +8 -7
- package/dist/hooks/operations/command-view/utils/transformCommandViewData.d.ts +205 -4
- package/dist/hooks/published.d.ts +210 -6
- package/dist/hooks/published.js +8 -7
- package/dist/index.d.ts +565 -95
- package/dist/index.js +8 -7
- package/dist/initialization/index.d.ts +3 -0
- package/dist/knowledge/index.d.ts +577 -215
- package/dist/knowledge/index.js +1180 -689
- package/dist/knowledge-search-index-P7PR626V.js +1514 -0
- package/dist/layout/index.js +1 -1
- package/dist/profile/index.d.ts +3 -0
- package/dist/provider/index.d.ts +447 -73
- package/dist/provider/index.js +7 -6
- package/dist/provider/published.d.ts +447 -73
- package/dist/provider/published.js +5 -4
- package/dist/supabase/index.d.ts +6 -0
- package/dist/types/index.d.ts +208 -4
- package/dist/utils/index.d.ts +113 -3
- 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-DYIDXUJS.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,235 @@ 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
|
+
const origin = record["origin"];
|
|
108
|
+
if (typeof origin === "object" && origin !== null) {
|
|
109
|
+
const source = origin.source;
|
|
110
|
+
if (typeof source === "string" && source.startsWith("legacy.")) return true;
|
|
111
|
+
}
|
|
112
|
+
return typeof record["legacyActionId"] === "string";
|
|
113
|
+
}
|
|
114
|
+
function ontologyItem(id, record, fallbackKind) {
|
|
115
|
+
let parsed;
|
|
116
|
+
try {
|
|
117
|
+
parsed = parseOntologyId(id);
|
|
118
|
+
} catch {
|
|
119
|
+
parsed = void 0;
|
|
120
|
+
}
|
|
121
|
+
const ownerSystemId = typeof record["ownerSystemId"] === "string" ? record["ownerSystemId"] : parsed?.isGlobal === false ? parsed.scope : void 0;
|
|
122
|
+
const meta = {};
|
|
123
|
+
for (const [key, value] of Object.entries(record)) {
|
|
124
|
+
if (["id", "label", "description", "ownerSystemId", "aliases"].includes(key)) continue;
|
|
125
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
|
126
|
+
meta[key] = value;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
id,
|
|
131
|
+
label: typeof record["label"] === "string" ? record["label"] : titleFromId(id),
|
|
132
|
+
description: typeof record["description"] === "string" ? record["description"] : void 0,
|
|
133
|
+
kind: parsed?.kind ?? fallbackKind,
|
|
134
|
+
ownerSystemId,
|
|
135
|
+
source: isLegacyBridgeRecord(record) ? "legacy-bridge" : "ontology",
|
|
136
|
+
meta
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
function sortItems(items) {
|
|
140
|
+
return [...items].sort(
|
|
141
|
+
(left, right) => (left.ownerSystemId ?? "").localeCompare(right.ownerSystemId ?? "") || left.label.localeCompare(right.label) || left.id.localeCompare(right.id)
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
function resourceDescription(resource) {
|
|
145
|
+
return resource.codeRefs.find((codeRef) => codeRef.description !== void 0)?.description;
|
|
146
|
+
}
|
|
147
|
+
function getKnowledgeOntologyProjection(model) {
|
|
148
|
+
const compiled = compileOrganizationOntology(model);
|
|
149
|
+
return {
|
|
150
|
+
objects: sortItems(
|
|
151
|
+
Object.entries(compiled.ontology.objectTypes).map(
|
|
152
|
+
([id, record]) => ontologyItem(id, record, "object")
|
|
153
|
+
)
|
|
154
|
+
),
|
|
155
|
+
links: sortItems(
|
|
156
|
+
Object.entries(compiled.ontology.linkTypes).map(
|
|
157
|
+
([id, record]) => ontologyItem(id, record, "link")
|
|
158
|
+
)
|
|
159
|
+
),
|
|
160
|
+
actions: sortItems(
|
|
161
|
+
Object.entries(compiled.ontology.actionTypes).map(
|
|
162
|
+
([id, record]) => ontologyItem(id, record, "action")
|
|
163
|
+
)
|
|
164
|
+
),
|
|
165
|
+
catalogs: sortItems(
|
|
166
|
+
Object.entries(compiled.ontology.catalogTypes).map(
|
|
167
|
+
([id, record]) => ontologyItem(id, record, "catalog")
|
|
168
|
+
)
|
|
169
|
+
),
|
|
170
|
+
events: sortItems(
|
|
171
|
+
Object.entries(compiled.ontology.eventTypes).map(
|
|
172
|
+
([id, record]) => ontologyItem(id, record, "event")
|
|
173
|
+
)
|
|
174
|
+
),
|
|
175
|
+
interfaces: sortItems(
|
|
176
|
+
Object.entries(compiled.ontology.interfaceTypes).map(
|
|
177
|
+
([id, record]) => ontologyItem(id, record, "interface")
|
|
178
|
+
)
|
|
179
|
+
),
|
|
180
|
+
valueTypes: sortItems(
|
|
181
|
+
Object.entries(compiled.ontology.valueTypes).map(
|
|
182
|
+
([id, record]) => ontologyItem(id, record, "value-type")
|
|
183
|
+
)
|
|
184
|
+
),
|
|
185
|
+
properties: sortItems(
|
|
186
|
+
Object.entries(compiled.ontology.sharedProperties).map(
|
|
187
|
+
([id, record]) => ontologyItem(id, record, "property")
|
|
188
|
+
)
|
|
189
|
+
),
|
|
190
|
+
groups: sortItems(
|
|
191
|
+
Object.entries(compiled.ontology.groups).map(
|
|
192
|
+
([id, record]) => ontologyItem(id, record, "group")
|
|
193
|
+
)
|
|
194
|
+
),
|
|
195
|
+
surfaces: sortItems(
|
|
196
|
+
Object.entries(compiled.ontology.surfaces).map(
|
|
197
|
+
([id, record]) => ontologyItem(id, record, "surface")
|
|
198
|
+
)
|
|
199
|
+
),
|
|
200
|
+
resources: sortItems(
|
|
201
|
+
Object.values(model.resources ?? {}).map((resource) => ({
|
|
202
|
+
id: resource.id,
|
|
203
|
+
label: resource.id,
|
|
204
|
+
description: resourceDescription(resource),
|
|
205
|
+
kind: "resource",
|
|
206
|
+
ownerSystemId: resource.systemPath,
|
|
207
|
+
source: "resource",
|
|
208
|
+
meta: { type: resource.kind, status: resource.status }
|
|
209
|
+
}))
|
|
210
|
+
),
|
|
211
|
+
diagnosticsCount: compiled.diagnostics.length
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
function getOntologyItemsForDomain(projection, domainKey) {
|
|
215
|
+
switch (domainKey) {
|
|
216
|
+
case "ontology-objects":
|
|
217
|
+
return projection.objects;
|
|
218
|
+
case "ontology-links":
|
|
219
|
+
return projection.links;
|
|
220
|
+
case "ontology-actions":
|
|
221
|
+
return projection.actions;
|
|
222
|
+
case "ontology-catalogs":
|
|
223
|
+
return projection.catalogs;
|
|
224
|
+
case "ontology-events":
|
|
225
|
+
return projection.events;
|
|
226
|
+
case "ontology-interfaces":
|
|
227
|
+
return projection.interfaces;
|
|
228
|
+
case "ontology-value-types":
|
|
229
|
+
return projection.valueTypes;
|
|
230
|
+
case "ontology-properties":
|
|
231
|
+
return projection.properties;
|
|
232
|
+
case "ontology-groups":
|
|
233
|
+
return projection.groups;
|
|
234
|
+
case "ontology-surfaces":
|
|
235
|
+
return projection.surfaces;
|
|
236
|
+
case "ontology-resources":
|
|
237
|
+
return projection.resources;
|
|
238
|
+
default:
|
|
239
|
+
return [];
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
function getPrimaryOntologyItemsForDomain(projection, domainKey) {
|
|
243
|
+
return getOntologyItemsForDomain(projection, domainKey).filter((item) => item.source !== "legacy-bridge");
|
|
244
|
+
}
|
|
245
|
+
function getOntologyDomainLabel(domainKey) {
|
|
246
|
+
return DOMAIN_LABELS[domainKey] ?? "Ontology";
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// src/knowledge/knowledgeCopyCommands.ts
|
|
250
|
+
function stripGraphKindPrefix(id, kind) {
|
|
251
|
+
const prefix = `${kind}:`;
|
|
252
|
+
return id.startsWith(prefix) ? id.slice(prefix.length) : id;
|
|
253
|
+
}
|
|
254
|
+
function normalizeKnowledgeNodeId(nodeId) {
|
|
255
|
+
return nodeId.startsWith("knowledge:") ? nodeId.slice("knowledge:".length) : nodeId;
|
|
256
|
+
}
|
|
257
|
+
function getKnowledgeNodeReadCommand(nodeId) {
|
|
258
|
+
return `/knowledge read ${normalizeKnowledgeNodeId(nodeId)}`;
|
|
259
|
+
}
|
|
260
|
+
function getKnowledgeNodeReadCommands(nodeIds) {
|
|
261
|
+
return [...new Set(nodeIds)].map(getKnowledgeNodeReadCommand).join("\n");
|
|
262
|
+
}
|
|
263
|
+
function getKnowledgeFolderCommand(kind, id) {
|
|
264
|
+
return `/knowledge read-folder ${kind}:${id}`;
|
|
265
|
+
}
|
|
266
|
+
function getKnowledgeTreeFolderCommand(treeValue) {
|
|
267
|
+
return `/knowledge read-folder ${treeValue}`;
|
|
268
|
+
}
|
|
269
|
+
function getKnowledgeDomainFolderCommand(domainKey) {
|
|
270
|
+
return getKnowledgeFolderCommand("domain", domainKey);
|
|
271
|
+
}
|
|
272
|
+
function getKnowledgeGraphFolderCommand(graphNodeId) {
|
|
273
|
+
return getKnowledgeFolderCommand("graph", graphNodeId);
|
|
274
|
+
}
|
|
275
|
+
function getKnowledgeSpineFolderCommand(spine, id) {
|
|
276
|
+
const bareId = stripGraphKindPrefix(id, spine);
|
|
277
|
+
if (spine === "system") return getKnowledgeFolderCommand("system", bareId);
|
|
278
|
+
if (spine === "ontology") return getKnowledgeFolderCommand("ontology", bareId);
|
|
279
|
+
return getKnowledgeGraphFolderCommand(`${spine}:${bareId}`);
|
|
280
|
+
}
|
|
281
|
+
function getKnowledgeGraphNodeCommand(node) {
|
|
282
|
+
if (node.kind === "knowledge") {
|
|
283
|
+
return getKnowledgeNodeReadCommand(node.sourceId ?? node.id);
|
|
284
|
+
}
|
|
285
|
+
if (node.kind === "system") {
|
|
286
|
+
return getKnowledgeFolderCommand("system", node.sourceId ?? stripGraphKindPrefix(node.id, "system"));
|
|
287
|
+
}
|
|
288
|
+
if (node.kind === "ontology") {
|
|
289
|
+
return getKnowledgeFolderCommand("ontology", node.sourceId ?? stripGraphKindPrefix(node.id, "ontology"));
|
|
290
|
+
}
|
|
291
|
+
return getKnowledgeGraphFolderCommand(node.id);
|
|
292
|
+
}
|
|
293
|
+
function graphKindToFallbackToken(kind) {
|
|
88
294
|
switch (kind) {
|
|
89
295
|
case "knowledge":
|
|
296
|
+
return "reference";
|
|
90
297
|
case "resource":
|
|
298
|
+
return "workflow";
|
|
91
299
|
case "action":
|
|
300
|
+
return "view";
|
|
92
301
|
case "entity":
|
|
93
302
|
case "event":
|
|
303
|
+
return "database";
|
|
94
304
|
case "policy":
|
|
95
|
-
return
|
|
305
|
+
return "shield";
|
|
96
306
|
case "system":
|
|
97
|
-
return "
|
|
307
|
+
return "operations";
|
|
98
308
|
case "role":
|
|
99
|
-
return "
|
|
309
|
+
return "user";
|
|
100
310
|
case "stage":
|
|
101
|
-
return "
|
|
311
|
+
return "pending";
|
|
102
312
|
case "organization":
|
|
103
|
-
return "
|
|
313
|
+
return "building";
|
|
104
314
|
default:
|
|
105
|
-
return "
|
|
315
|
+
return "info";
|
|
106
316
|
}
|
|
107
317
|
}
|
|
108
318
|
var QUICK_ACCESS_GROUP_KEY = "quick-access";
|
|
@@ -114,6 +324,9 @@ var GROUP_ICON_TOKENS = {
|
|
|
114
324
|
"business-model": "om.business-model",
|
|
115
325
|
systems: "om.systems",
|
|
116
326
|
graph: "om.graph",
|
|
327
|
+
resources: "resources",
|
|
328
|
+
knowledge: "knowledge",
|
|
329
|
+
navigation: "view",
|
|
117
330
|
"governance-wiring": "om.governance-wiring"
|
|
118
331
|
};
|
|
119
332
|
function findFavoritePathInTree(nodes, favorite) {
|
|
@@ -155,8 +368,26 @@ var OM_TREE_GROUPS = [
|
|
|
155
368
|
{ key: "profile", label: "Profile", domains: ["identity", "branding"] },
|
|
156
369
|
{ key: "business-model", label: "Business Model", domains: ["customers", "offerings", "goals"] },
|
|
157
370
|
{ key: "systems", label: "Systems", domains: ["systems", "sales", "prospecting", "projects"] },
|
|
158
|
-
{
|
|
159
|
-
|
|
371
|
+
{
|
|
372
|
+
key: "graph",
|
|
373
|
+
label: "Ontology",
|
|
374
|
+
domains: [
|
|
375
|
+
"ontology-objects",
|
|
376
|
+
"ontology-links",
|
|
377
|
+
"ontology-actions",
|
|
378
|
+
"ontology-catalogs",
|
|
379
|
+
"ontology-events",
|
|
380
|
+
"ontology-interfaces",
|
|
381
|
+
"ontology-value-types",
|
|
382
|
+
"ontology-properties",
|
|
383
|
+
"ontology-groups",
|
|
384
|
+
"ontology-surfaces"
|
|
385
|
+
]
|
|
386
|
+
},
|
|
387
|
+
{ key: "resources", label: "Resources", domains: ["resources"] },
|
|
388
|
+
{ key: "knowledge", label: "Knowledge", domains: ["knowledge"] },
|
|
389
|
+
{ key: "navigation", label: "Navigation", domains: ["navigation"] },
|
|
390
|
+
{ key: "governance-wiring", label: "Governance", domains: ["roles", "policies"] }
|
|
160
391
|
];
|
|
161
392
|
var DOMAIN_PREFIX = "domain:";
|
|
162
393
|
var GROUP_PREFIX = "group:";
|
|
@@ -184,6 +415,7 @@ function graphNodeIdForKnowledgeTarget(targetKind, targetId) {
|
|
|
184
415
|
case "policy":
|
|
185
416
|
case "role":
|
|
186
417
|
case "knowledge":
|
|
418
|
+
case "ontology":
|
|
187
419
|
case "system":
|
|
188
420
|
case "stage":
|
|
189
421
|
return `${targetKind}:${targetId}`;
|
|
@@ -209,6 +441,20 @@ var GRAPH_RESOURCE_TYPE_LABELS = {
|
|
|
209
441
|
trigger: "Triggers",
|
|
210
442
|
human_checkpoint: "Human Checkpoints"
|
|
211
443
|
};
|
|
444
|
+
var CORE_ONTOLOGY_DOMAIN_KEYS = [
|
|
445
|
+
"ontology-objects",
|
|
446
|
+
"ontology-links",
|
|
447
|
+
"ontology-actions",
|
|
448
|
+
"ontology-catalogs",
|
|
449
|
+
"ontology-events",
|
|
450
|
+
"ontology-surfaces"
|
|
451
|
+
];
|
|
452
|
+
var OPTIONAL_ONTOLOGY_DOMAIN_KEYS = [
|
|
453
|
+
"ontology-interfaces",
|
|
454
|
+
"ontology-value-types",
|
|
455
|
+
"ontology-properties",
|
|
456
|
+
"ontology-groups"
|
|
457
|
+
];
|
|
212
458
|
var KNOWLEDGE_START_HERE_IDS = [
|
|
213
459
|
"knowledge.org-model-reference",
|
|
214
460
|
"knowledge.org-model-graph-contract",
|
|
@@ -254,11 +500,20 @@ var KNOWLEDGE_DOMAINS_WITH_PANELS = /* @__PURE__ */ new Set([
|
|
|
254
500
|
"sales",
|
|
255
501
|
"prospecting",
|
|
256
502
|
"projects",
|
|
257
|
-
"statuses",
|
|
258
503
|
"navigation",
|
|
259
|
-
"policies"
|
|
504
|
+
"policies",
|
|
505
|
+
"ontology-objects",
|
|
506
|
+
"ontology-links",
|
|
507
|
+
"ontology-actions",
|
|
508
|
+
"ontology-catalogs",
|
|
509
|
+
"ontology-events",
|
|
510
|
+
"ontology-interfaces",
|
|
511
|
+
"ontology-value-types",
|
|
512
|
+
"ontology-properties",
|
|
513
|
+
"ontology-groups",
|
|
514
|
+
"ontology-surfaces"
|
|
260
515
|
]);
|
|
261
|
-
var FILTERABLE_DOMAIN_KEYS = /* @__PURE__ */ new Set(["customers", "offerings", "goals", "roles", "
|
|
516
|
+
var FILTERABLE_DOMAIN_KEYS = /* @__PURE__ */ new Set(["customers", "offerings", "goals", "roles", "policies"]);
|
|
262
517
|
function shouldRouteItemToDomainPanel(domainKey) {
|
|
263
518
|
return FILTERABLE_DOMAIN_KEYS.has(domainKey);
|
|
264
519
|
}
|
|
@@ -356,8 +611,13 @@ function spineNodeHasVisibleDescendant(bareId, allBareIds, spine, facetStates, c
|
|
|
356
611
|
const cached = cache2.get(bareId);
|
|
357
612
|
if (cached !== void 0) return cached;
|
|
358
613
|
const graphNodeId = `${spine}:${bareId}`;
|
|
359
|
-
const
|
|
360
|
-
|
|
614
|
+
const hasSystemModelChildren = spine === "system" && [
|
|
615
|
+
...buildOntologySubgroup(bareId, organizationModel),
|
|
616
|
+
...buildSystemResourcesSubgroup(bareId, ctx),
|
|
617
|
+
...buildSystemConfigSubgroup(bareId, organizationModel),
|
|
618
|
+
...buildSystemGovernanceSubgroup(bareId, organizationModel)
|
|
619
|
+
].length > 0;
|
|
620
|
+
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
621
|
(childId) => spineNodeHasVisibleDescendant(childId, allBareIds, spine, facetStates, ctx, organizationModel, cache2)
|
|
362
622
|
);
|
|
363
623
|
cache2.set(bareId, result);
|
|
@@ -372,20 +632,8 @@ function buildSpineMetaMap(graph, spine) {
|
|
|
372
632
|
}
|
|
373
633
|
return map;
|
|
374
634
|
}
|
|
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
635
|
function getKnowledgeDirectoryCommand(nodeIds, fallbackCommand) {
|
|
388
|
-
const command =
|
|
636
|
+
const command = getKnowledgeNodeReadCommands(nodeIds ?? []);
|
|
389
637
|
return command || fallbackCommand;
|
|
390
638
|
}
|
|
391
639
|
function getKnowledgeFolderKey(node) {
|
|
@@ -407,6 +655,14 @@ function sortFolderKeys(left, right) {
|
|
|
407
655
|
if (rightIndex === -1) return -1;
|
|
408
656
|
return leftIndex - rightIndex;
|
|
409
657
|
}
|
|
658
|
+
function formatTreeLabel(value) {
|
|
659
|
+
const spaced = value.replace(/([a-z0-9])([A-Z])/g, "$1 $2").replace(/[._/-]+/g, " ").trim();
|
|
660
|
+
if (!spaced) return value;
|
|
661
|
+
return spaced.split(/\s+/).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
|
|
662
|
+
}
|
|
663
|
+
function treeValueSegment(value) {
|
|
664
|
+
return value.replace(/[^A-Za-z0-9_.-]/g, "-");
|
|
665
|
+
}
|
|
410
666
|
function createKnowledgeLeaf(graphNodeId, node) {
|
|
411
667
|
return {
|
|
412
668
|
value: `${LEAF_PREFIX}${graphNodeId}::${node.id}`,
|
|
@@ -431,7 +687,7 @@ function createKnowledgeLeaves(graphNodeId, nodes) {
|
|
|
431
687
|
value: `${FOLDER_PREFIX}${graphNodeId}::${folderKey}`,
|
|
432
688
|
label: FOLDER_LABELS[folderKey] ?? folderKey,
|
|
433
689
|
nodeType: "folder",
|
|
434
|
-
icon: "
|
|
690
|
+
icon: "playbook",
|
|
435
691
|
knowledgeNodeIds: folderNodes.map((node) => node.id),
|
|
436
692
|
children: folderNodes.map((node) => createKnowledgeLeaf(graphNodeId, node))
|
|
437
693
|
}));
|
|
@@ -536,55 +792,236 @@ function createCollectionNode(parentKey, collectionKey, label, children) {
|
|
|
536
792
|
children: children.length > 0 ? children : void 0
|
|
537
793
|
};
|
|
538
794
|
}
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
const
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
795
|
+
function buildOntologySubgroup(bareId, organizationModel) {
|
|
796
|
+
if (!organizationModel) return [];
|
|
797
|
+
const projection = getKnowledgeOntologyProjection(organizationModel);
|
|
798
|
+
const domainKeys = [...CORE_ONTOLOGY_DOMAIN_KEYS, ...OPTIONAL_ONTOLOGY_DOMAIN_KEYS];
|
|
799
|
+
const domainFolders = domainKeys.map((domainKey) => {
|
|
800
|
+
const items = getPrimaryOntologyItemsForDomain(projection, domainKey).filter(
|
|
801
|
+
(item) => item.ownerSystemId === bareId
|
|
802
|
+
);
|
|
803
|
+
if (items.length === 0) return void 0;
|
|
547
804
|
return {
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
805
|
+
value: `${FOLDER_PREFIX}ontology:${bareId}:${domainKey}`,
|
|
806
|
+
label: getOntologyDomainLabel(domainKey),
|
|
807
|
+
nodeType: "folder",
|
|
808
|
+
knowledgeNodeIds: [],
|
|
809
|
+
children: items.map(
|
|
810
|
+
(item) => createItemNode({
|
|
811
|
+
domainKey,
|
|
812
|
+
itemId: item.id,
|
|
813
|
+
label: item.label,
|
|
814
|
+
graphNodeId: item.kind === "resource" ? `resource:${item.id}` : `ontology:${item.id}`
|
|
815
|
+
})
|
|
816
|
+
)
|
|
557
817
|
};
|
|
558
|
-
});
|
|
818
|
+
}).filter((node) => node !== void 0);
|
|
819
|
+
if (domainFolders.length === 0) return [];
|
|
820
|
+
return [
|
|
821
|
+
{
|
|
822
|
+
value: `${FOLDER_PREFIX}ontology:${bareId}`,
|
|
823
|
+
label: "Ontology",
|
|
824
|
+
nodeType: "folder",
|
|
825
|
+
knowledgeNodeIds: [],
|
|
826
|
+
children: domainFolders
|
|
827
|
+
}
|
|
828
|
+
];
|
|
829
|
+
}
|
|
830
|
+
function buildSystemResourcesSubgroup(bareId, ctx) {
|
|
831
|
+
const graphNodeId = `system:${bareId}`;
|
|
832
|
+
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));
|
|
833
|
+
if (resourceNodes.length === 0) return [];
|
|
834
|
+
const children = GRAPH_RESOURCE_TYPE_ORDER.map((resourceType) => {
|
|
835
|
+
const typedResources = resourceNodes.filter((node) => node.resourceType === resourceType);
|
|
836
|
+
if (typedResources.length === 0) return void 0;
|
|
837
|
+
return createCollectionNode(
|
|
838
|
+
`system:${bareId}:resources`,
|
|
839
|
+
resourceType,
|
|
840
|
+
GRAPH_RESOURCE_TYPE_LABELS[resourceType],
|
|
841
|
+
typedResources.map((node) => createGraphNodeItem(node, "resources"))
|
|
842
|
+
);
|
|
843
|
+
}).filter((node) => node !== void 0);
|
|
844
|
+
const unclassifiedResources = resourceNodes.filter((node) => node.resourceType === void 0);
|
|
845
|
+
if (unclassifiedResources.length > 0) {
|
|
846
|
+
children.push(
|
|
847
|
+
createCollectionNode(
|
|
848
|
+
`system:${bareId}:resources`,
|
|
849
|
+
"unknown",
|
|
850
|
+
"Unclassified",
|
|
851
|
+
unclassifiedResources.map((node) => createGraphNodeItem(node, "resources"))
|
|
852
|
+
)
|
|
853
|
+
);
|
|
854
|
+
}
|
|
855
|
+
return [
|
|
856
|
+
{
|
|
857
|
+
value: `${FOLDER_PREFIX}resources:${bareId}`,
|
|
858
|
+
label: "Resources",
|
|
859
|
+
nodeType: "folder",
|
|
860
|
+
icon: "workflow",
|
|
861
|
+
knowledgeNodeIds: children.flatMap(collectKnowledgeNodeIds),
|
|
862
|
+
children
|
|
863
|
+
}
|
|
864
|
+
];
|
|
559
865
|
}
|
|
560
|
-
function
|
|
866
|
+
function buildSystemConfigSubgroup(bareId, organizationModel) {
|
|
561
867
|
if (!organizationModel) return [];
|
|
562
868
|
const system = getSystem(organizationModel, bareId);
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
const
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
869
|
+
if (!system) return [];
|
|
870
|
+
const config = resolveSystemConfig(organizationModel, bareId);
|
|
871
|
+
const configKeys = Object.keys(config).sort((left, right) => left.localeCompare(right));
|
|
872
|
+
const children = [];
|
|
873
|
+
if (configKeys.length > 0) {
|
|
874
|
+
children.push({
|
|
875
|
+
value: `${FOLDER_PREFIX}config:${bareId}:defaults`,
|
|
876
|
+
label: "Defaults",
|
|
877
|
+
nodeType: "folder",
|
|
878
|
+
icon: "settings",
|
|
879
|
+
knowledgeNodeIds: [],
|
|
880
|
+
children: configKeys.map((key) => ({
|
|
881
|
+
value: `${FOLDER_PREFIX}config:${bareId}:defaults:${treeValueSegment(key)}`,
|
|
882
|
+
label: formatTreeLabel(key),
|
|
883
|
+
nodeType: "folder",
|
|
884
|
+
knowledgeNodeIds: []
|
|
885
|
+
}))
|
|
886
|
+
});
|
|
570
887
|
}
|
|
571
|
-
const
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
888
|
+
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;
|
|
889
|
+
if (hasUiConfig) {
|
|
890
|
+
const uiChildren = [];
|
|
891
|
+
if (system.ui?.path !== void 0 || system.path !== void 0) {
|
|
892
|
+
uiChildren.push({
|
|
893
|
+
value: `${FOLDER_PREFIX}config:${bareId}:ui:path`,
|
|
894
|
+
label: "Path",
|
|
895
|
+
nodeType: "folder",
|
|
896
|
+
knowledgeNodeIds: []
|
|
897
|
+
});
|
|
898
|
+
}
|
|
899
|
+
if ((system.ui?.surfaces.length ?? 0) > 0) {
|
|
900
|
+
uiChildren.push({
|
|
901
|
+
value: `${FOLDER_PREFIX}config:${bareId}:ui:surfaces`,
|
|
902
|
+
label: "Surfaces",
|
|
903
|
+
nodeType: "folder",
|
|
904
|
+
knowledgeNodeIds: []
|
|
905
|
+
});
|
|
906
|
+
}
|
|
907
|
+
if (system.ui?.icon !== void 0 || system.icon !== void 0) {
|
|
908
|
+
uiChildren.push({
|
|
909
|
+
value: `${FOLDER_PREFIX}config:${bareId}:ui:icon`,
|
|
910
|
+
label: "Icon",
|
|
911
|
+
nodeType: "folder",
|
|
912
|
+
knowledgeNodeIds: []
|
|
913
|
+
});
|
|
914
|
+
}
|
|
915
|
+
if (system.uiPosition !== void 0) {
|
|
916
|
+
uiChildren.push({
|
|
917
|
+
value: `${FOLDER_PREFIX}config:${bareId}:ui:placement`,
|
|
918
|
+
label: "Placement",
|
|
919
|
+
nodeType: "folder",
|
|
920
|
+
knowledgeNodeIds: []
|
|
921
|
+
});
|
|
922
|
+
}
|
|
923
|
+
if (system.enabled !== void 0 || system.devOnly !== void 0 || system.requiresAdmin !== void 0) {
|
|
924
|
+
uiChildren.push({
|
|
925
|
+
value: `${FOLDER_PREFIX}config:${bareId}:ui:access`,
|
|
926
|
+
label: "Access",
|
|
927
|
+
nodeType: "folder",
|
|
928
|
+
knowledgeNodeIds: []
|
|
929
|
+
});
|
|
930
|
+
}
|
|
931
|
+
children.push({
|
|
932
|
+
value: `${FOLDER_PREFIX}config:${bareId}:ui`,
|
|
933
|
+
label: "UI",
|
|
576
934
|
nodeType: "folder",
|
|
935
|
+
icon: "view",
|
|
577
936
|
knowledgeNodeIds: [],
|
|
578
|
-
children:
|
|
579
|
-
};
|
|
580
|
-
}
|
|
937
|
+
children: uiChildren.length > 0 ? uiChildren : void 0
|
|
938
|
+
});
|
|
939
|
+
}
|
|
940
|
+
if (children.length === 0) return [];
|
|
581
941
|
return [
|
|
582
942
|
{
|
|
583
|
-
value: `${FOLDER_PREFIX}
|
|
584
|
-
label: "
|
|
943
|
+
value: `${FOLDER_PREFIX}config:${bareId}`,
|
|
944
|
+
label: "Config",
|
|
585
945
|
nodeType: "folder",
|
|
586
|
-
|
|
587
|
-
|
|
946
|
+
icon: "settings",
|
|
947
|
+
knowledgeNodeIds: children.flatMap(collectKnowledgeNodeIds),
|
|
948
|
+
children
|
|
949
|
+
}
|
|
950
|
+
];
|
|
951
|
+
}
|
|
952
|
+
function buildSystemKnowledgeSubgroup(graphNodeId, governing) {
|
|
953
|
+
if (governing.length === 0) return [];
|
|
954
|
+
const children = createKnowledgeLeaves(graphNodeId, governing);
|
|
955
|
+
return [
|
|
956
|
+
{
|
|
957
|
+
value: `${FOLDER_PREFIX}knowledge:${graphNodeId}`,
|
|
958
|
+
label: "Knowledge",
|
|
959
|
+
nodeType: "folder",
|
|
960
|
+
icon: "reference",
|
|
961
|
+
knowledgeNodeIds: children.flatMap(collectKnowledgeNodeIds),
|
|
962
|
+
children
|
|
963
|
+
}
|
|
964
|
+
];
|
|
965
|
+
}
|
|
966
|
+
function buildSystemGovernanceSubgroup(bareId, organizationModel) {
|
|
967
|
+
if (!organizationModel) return [];
|
|
968
|
+
const system = getSystem(organizationModel, bareId);
|
|
969
|
+
if (!system) return [];
|
|
970
|
+
const roleIds = /* @__PURE__ */ new Set();
|
|
971
|
+
if (system.responsibleRoleId !== void 0) roleIds.add(system.responsibleRoleId);
|
|
972
|
+
for (const role of Object.values(organizationModel.roles ?? {})) {
|
|
973
|
+
if (role.responsibleFor?.includes(bareId)) roleIds.add(role.id);
|
|
974
|
+
}
|
|
975
|
+
const policyIds = new Set(system.policies ?? []);
|
|
976
|
+
for (const policy of Object.values(organizationModel.policies ?? {})) {
|
|
977
|
+
if (policy.appliesTo.systemIds.includes(bareId)) policyIds.add(policy.id);
|
|
978
|
+
}
|
|
979
|
+
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));
|
|
980
|
+
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));
|
|
981
|
+
const children = [];
|
|
982
|
+
if (roles.length > 0) {
|
|
983
|
+
children.push(
|
|
984
|
+
createCollectionNode(
|
|
985
|
+
`governance:${bareId}`,
|
|
986
|
+
"roles",
|
|
987
|
+
roles.length === 1 ? "Responsible Role" : "Responsible Roles",
|
|
988
|
+
roles.map(
|
|
989
|
+
(role) => createItemNode({
|
|
990
|
+
domainKey: "roles",
|
|
991
|
+
itemId: role.id,
|
|
992
|
+
label: role.title,
|
|
993
|
+
graphNodeId: `role:${role.id}`
|
|
994
|
+
})
|
|
995
|
+
)
|
|
996
|
+
)
|
|
997
|
+
);
|
|
998
|
+
}
|
|
999
|
+
if (policies.length > 0) {
|
|
1000
|
+
children.push(
|
|
1001
|
+
createCollectionNode(
|
|
1002
|
+
`governance:${bareId}`,
|
|
1003
|
+
"policies",
|
|
1004
|
+
"Policies",
|
|
1005
|
+
policies.map(
|
|
1006
|
+
(policy) => createItemNode({
|
|
1007
|
+
domainKey: "policies",
|
|
1008
|
+
itemId: policy.id,
|
|
1009
|
+
label: policy.label,
|
|
1010
|
+
graphNodeId: `policy:${policy.id}`
|
|
1011
|
+
})
|
|
1012
|
+
)
|
|
1013
|
+
)
|
|
1014
|
+
);
|
|
1015
|
+
}
|
|
1016
|
+
if (children.length === 0) return [];
|
|
1017
|
+
return [
|
|
1018
|
+
{
|
|
1019
|
+
value: `${FOLDER_PREFIX}governance:${bareId}`,
|
|
1020
|
+
label: "Governance",
|
|
1021
|
+
nodeType: "folder",
|
|
1022
|
+
icon: "shield",
|
|
1023
|
+
knowledgeNodeIds: children.flatMap(collectKnowledgeNodeIds),
|
|
1024
|
+
children
|
|
588
1025
|
}
|
|
589
1026
|
];
|
|
590
1027
|
}
|
|
@@ -592,14 +1029,19 @@ function buildSpineTreeNode(bareId, allBareIds, spineMetaMap, spine, facetStates
|
|
|
592
1029
|
const graphNodeId = `${spine}:${bareId}`;
|
|
593
1030
|
const governing = facetStates.knowledge === "exclude" ? [] : ctx.governsEdgesByTarget.get(graphNodeId) ?? [];
|
|
594
1031
|
const childIds = childGraphIds(allBareIds, bareId);
|
|
595
|
-
const
|
|
596
|
-
|
|
1032
|
+
const systemModelChildren = spine === "system" ? [
|
|
1033
|
+
...buildOntologySubgroup(bareId, organizationModel),
|
|
1034
|
+
...buildSystemResourcesSubgroup(bareId, ctx),
|
|
1035
|
+
...buildSystemConfigSubgroup(bareId, organizationModel),
|
|
1036
|
+
...buildSystemKnowledgeSubgroup(graphNodeId, governing),
|
|
1037
|
+
...buildSystemGovernanceSubgroup(bareId, organizationModel)
|
|
1038
|
+
] : [];
|
|
597
1039
|
const childSpineNodes = childIds.filter((childId) => visibleSpineIds.has(childId)).map(
|
|
598
1040
|
(childId) => buildSpineTreeNode(childId, allBareIds, spineMetaMap, spine, facetStates, ctx, visibleSpineIds, organizationModel)
|
|
599
1041
|
);
|
|
600
|
-
const knowledgeLeaves = createKnowledgeLeaves(graphNodeId, governing);
|
|
1042
|
+
const knowledgeLeaves = spine === "system" ? [] : createKnowledgeLeaves(graphNodeId, governing);
|
|
601
1043
|
const facetLeaves = createFacetGraphLeaves(getIncludedFacetNodes(graphNodeId, spine, facetStates, ctx));
|
|
602
|
-
const children = [...
|
|
1044
|
+
const children = [...systemModelChildren, ...childSpineNodes, ...knowledgeLeaves, ...facetLeaves];
|
|
603
1045
|
const meta = spineMetaMap[bareId];
|
|
604
1046
|
return {
|
|
605
1047
|
value: `${SPINE_PREFIX}${spine}:${bareId}`,
|
|
@@ -715,90 +1157,160 @@ function buildSystemsGroup(graph, organizationModel, facetStates, ctx, visibleSp
|
|
|
715
1157
|
);
|
|
716
1158
|
return createGroupNode({ groupKey: "systems", label: "Systems", children });
|
|
717
1159
|
}
|
|
718
|
-
function
|
|
719
|
-
|
|
1160
|
+
function buildOntologyBranch(organizationModel, domainKey) {
|
|
1161
|
+
if (!organizationModel) return void 0;
|
|
1162
|
+
const projection = getKnowledgeOntologyProjection(organizationModel);
|
|
1163
|
+
const items = getPrimaryOntologyItemsForDomain(projection, domainKey);
|
|
1164
|
+
if (items.length === 0) return void 0;
|
|
1165
|
+
return createDomainNode({
|
|
1166
|
+
domainKey,
|
|
1167
|
+
label: getOntologyDomainLabel(domainKey),
|
|
1168
|
+
children: items.map(
|
|
1169
|
+
(item) => createItemNode({
|
|
1170
|
+
domainKey,
|
|
1171
|
+
itemId: item.id,
|
|
1172
|
+
label: item.label,
|
|
1173
|
+
children: [
|
|
1174
|
+
{
|
|
1175
|
+
value: `${FOLDER_PREFIX}${domainKey}:${item.id}:owner`,
|
|
1176
|
+
label: item.ownerSystemId ?? "global",
|
|
1177
|
+
nodeType: "folder",
|
|
1178
|
+
icon: item.kind === "resource" ? "workflow" : "info",
|
|
1179
|
+
knowledgeNodeIds: []
|
|
1180
|
+
}
|
|
1181
|
+
]
|
|
1182
|
+
})
|
|
1183
|
+
)
|
|
1184
|
+
});
|
|
1185
|
+
}
|
|
1186
|
+
function buildGraphGroup(organizationModel) {
|
|
1187
|
+
const ontologyDomains = [...CORE_ONTOLOGY_DOMAIN_KEYS, ...OPTIONAL_ONTOLOGY_DOMAIN_KEYS].map((domainKey) => buildOntologyBranch(organizationModel, domainKey)).filter((node) => node !== void 0);
|
|
1188
|
+
return createGroupNode({
|
|
1189
|
+
groupKey: "graph",
|
|
1190
|
+
label: "Ontology",
|
|
1191
|
+
children: ontologyDomains
|
|
1192
|
+
});
|
|
720
1193
|
}
|
|
721
|
-
function
|
|
722
|
-
const
|
|
1194
|
+
function buildResourcesGroup(graph) {
|
|
1195
|
+
const resourceNodes = graph.nodes.filter((node) => node.kind === "resource").sort(
|
|
1196
|
+
(left, right) => (left.resourceType ?? "").localeCompare(right.resourceType ?? "") || left.label.localeCompare(right.label) || left.id.localeCompare(right.id)
|
|
1197
|
+
);
|
|
723
1198
|
const children = GRAPH_RESOURCE_TYPE_ORDER.map((resourceType) => {
|
|
724
|
-
const
|
|
725
|
-
if (
|
|
1199
|
+
const typedResources = resourceNodes.filter((node) => node.resourceType === resourceType);
|
|
1200
|
+
if (typedResources.length === 0) return void 0;
|
|
726
1201
|
return createCollectionNode(
|
|
727
|
-
"
|
|
1202
|
+
"resources",
|
|
728
1203
|
resourceType,
|
|
729
1204
|
GRAPH_RESOURCE_TYPE_LABELS[resourceType],
|
|
730
|
-
|
|
1205
|
+
typedResources.map((node) => createGraphNodeItem(node, "resources"))
|
|
731
1206
|
);
|
|
732
1207
|
}).filter((node) => node !== void 0);
|
|
733
|
-
const
|
|
734
|
-
|
|
1208
|
+
const orderedTypes = new Set(GRAPH_RESOURCE_TYPE_ORDER);
|
|
1209
|
+
const otherResources = resourceNodes.filter(
|
|
1210
|
+
(node) => node.resourceType === void 0 || !orderedTypes.has(node.resourceType)
|
|
1211
|
+
);
|
|
1212
|
+
if (otherResources.length > 0) {
|
|
735
1213
|
children.push(
|
|
736
1214
|
createCollectionNode(
|
|
737
|
-
"
|
|
738
|
-
"
|
|
739
|
-
"
|
|
740
|
-
|
|
1215
|
+
"resources",
|
|
1216
|
+
"other",
|
|
1217
|
+
"Other",
|
|
1218
|
+
otherResources.map((node) => createGraphNodeItem(node, "resources"))
|
|
741
1219
|
)
|
|
742
1220
|
);
|
|
743
1221
|
}
|
|
744
|
-
return
|
|
1222
|
+
return createGroupNode({
|
|
1223
|
+
groupKey: "resources",
|
|
1224
|
+
label: "Resources",
|
|
1225
|
+
children
|
|
1226
|
+
});
|
|
745
1227
|
}
|
|
746
|
-
function
|
|
747
|
-
|
|
748
|
-
|
|
1228
|
+
function formatOntologyKnowledgeTargetLabel(targetId, organizationModel) {
|
|
1229
|
+
if (organizationModel) {
|
|
1230
|
+
const projection = getKnowledgeOntologyProjection(organizationModel);
|
|
1231
|
+
for (const domainKey of [...CORE_ONTOLOGY_DOMAIN_KEYS, ...OPTIONAL_ONTOLOGY_DOMAIN_KEYS]) {
|
|
1232
|
+
const item = getPrimaryOntologyItemsForDomain(projection, domainKey).find((candidate) => candidate.id === targetId);
|
|
1233
|
+
if (item) return item.label;
|
|
1234
|
+
}
|
|
1235
|
+
}
|
|
1236
|
+
return formatTreeLabel(targetId.includes("/") ? targetId.slice(targetId.lastIndexOf("/") + 1) : targetId);
|
|
1237
|
+
}
|
|
1238
|
+
function createKnowledgeCollection(parentKey, collectionKey, label, nodes) {
|
|
1239
|
+
return createCollectionNode(parentKey, collectionKey, label, createKnowledgeLeaves(`knowledge:${collectionKey}`, nodes));
|
|
1240
|
+
}
|
|
1241
|
+
function buildKnowledgeTargetCollections(knowledgeNodes, targetKind, parentKey, collectionLabel, formatTargetLabel) {
|
|
1242
|
+
const grouped = /* @__PURE__ */ new Map();
|
|
1243
|
+
for (const node of knowledgeNodes) {
|
|
1244
|
+
for (const link of node.links) {
|
|
1245
|
+
if (link.target.kind !== targetKind) continue;
|
|
1246
|
+
const bucket = grouped.get(link.target.id) ?? [];
|
|
1247
|
+
bucket.push(node);
|
|
1248
|
+
grouped.set(link.target.id, bucket);
|
|
1249
|
+
}
|
|
1250
|
+
}
|
|
1251
|
+
const children = [...grouped.entries()].sort(([left], [right]) => formatTargetLabel(left).localeCompare(formatTargetLabel(right))).map(
|
|
1252
|
+
([targetId, nodes]) => createCollectionNode(
|
|
1253
|
+
`${parentKey}:${collectionKeyForTarget(targetKind)}`,
|
|
1254
|
+
treeValueSegment(targetId),
|
|
1255
|
+
formatTargetLabel(targetId),
|
|
1256
|
+
uniqueKnowledgeNodes(nodes).map((node) => createKnowledgeLeaf(`knowledge:${targetKind}:${targetId}`, node))
|
|
1257
|
+
)
|
|
749
1258
|
);
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
1259
|
+
if (children.length === 0) return void 0;
|
|
1260
|
+
return createCollectionNode(parentKey, collectionKeyForTarget(targetKind), collectionLabel, children);
|
|
1261
|
+
}
|
|
1262
|
+
function collectionKeyForTarget(targetKind) {
|
|
1263
|
+
return targetKind === "system" ? "by-system" : "by-ontology";
|
|
1264
|
+
}
|
|
1265
|
+
function buildKnowledgeGroup(graph, knowledgeNodes, organizationModel) {
|
|
1266
|
+
const systemLabels = new Map(
|
|
1267
|
+
graph.nodes.filter((node) => node.kind === "system").map((node) => [node.sourceId ?? node.id.replace(/^system:/, ""), node.label])
|
|
753
1268
|
);
|
|
754
|
-
const
|
|
755
|
-
const
|
|
756
|
-
const
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
}
|
|
762
|
-
|
|
763
|
-
|
|
1269
|
+
const sortedKnowledgeNodes = uniqueKnowledgeNodes(knowledgeNodes);
|
|
1270
|
+
const startHereNodes = sortedKnowledgeNodes.filter((node) => KNOWLEDGE_START_HERE_IDS.includes(node.id));
|
|
1271
|
+
const startHereIds = new Set(startHereNodes.map((node) => node.id));
|
|
1272
|
+
const allNodes = sortedKnowledgeNodes.filter((node) => !startHereIds.has(node.id));
|
|
1273
|
+
const children = [];
|
|
1274
|
+
if (startHereNodes.length > 0) {
|
|
1275
|
+
children.push(createKnowledgeCollection("knowledge", "start-here", "Start Here", startHereNodes));
|
|
1276
|
+
}
|
|
1277
|
+
if (allNodes.length > 0) {
|
|
1278
|
+
children.push(createKnowledgeCollection("knowledge", "all", "All", allNodes));
|
|
1279
|
+
}
|
|
1280
|
+
const bySystem = buildKnowledgeTargetCollections(
|
|
1281
|
+
sortedKnowledgeNodes,
|
|
1282
|
+
"system",
|
|
1283
|
+
"knowledge",
|
|
1284
|
+
"By System",
|
|
1285
|
+
(targetId) => systemLabels.get(targetId) ?? formatTreeLabel(targetId)
|
|
1286
|
+
);
|
|
1287
|
+
if (bySystem) children.push(bySystem);
|
|
1288
|
+
const byOntology = buildKnowledgeTargetCollections(
|
|
1289
|
+
sortedKnowledgeNodes,
|
|
1290
|
+
"ontology",
|
|
1291
|
+
"knowledge",
|
|
1292
|
+
"By Ontology",
|
|
1293
|
+
(targetId) => formatOntologyKnowledgeTargetLabel(targetId, organizationModel)
|
|
1294
|
+
);
|
|
1295
|
+
if (byOntology) children.push(byOntology);
|
|
1296
|
+
return createGroupNode({
|
|
1297
|
+
groupKey: "knowledge",
|
|
764
1298
|
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"))
|
|
1299
|
+
children
|
|
776
1300
|
});
|
|
777
1301
|
}
|
|
778
|
-
function
|
|
1302
|
+
function buildNavigationGroup(organizationModel) {
|
|
1303
|
+
const navigationSurfaces = (organizationModel ? projectNavigationSurfaces(organizationModel) : []).sort((left, right) => left.label.localeCompare(right.label)).map(
|
|
1304
|
+
(surface) => createItemNode({
|
|
1305
|
+
domainKey: "navigation",
|
|
1306
|
+
itemId: surface.id,
|
|
1307
|
+
label: surface.label
|
|
1308
|
+
})
|
|
1309
|
+
);
|
|
779
1310
|
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
|
-
]
|
|
1311
|
+
groupKey: "navigation",
|
|
1312
|
+
label: "Navigation",
|
|
1313
|
+
children: [createDomainNode({ domainKey: "navigation", label: "Surfaces", children: navigationSurfaces })]
|
|
802
1314
|
});
|
|
803
1315
|
}
|
|
804
1316
|
function buildGovernanceGroup(graph, organizationModel, knowledgeByTarget, facetStates) {
|
|
@@ -812,23 +1324,13 @@ function buildGovernanceGroup(graph, organizationModel, knowledgeByTarget, facet
|
|
|
812
1324
|
knowledgeNodes: getTargetKnowledge(knowledgeByTarget, `policy:${policy.id}`, facetStates)
|
|
813
1325
|
})
|
|
814
1326
|
);
|
|
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
1327
|
const rolesDomain = buildRolesDomain(graph, organizationModel, knowledgeByTarget, facetStates);
|
|
824
1328
|
return createGroupNode({
|
|
825
1329
|
groupKey: "governance-wiring",
|
|
826
|
-
label: "Governance
|
|
1330
|
+
label: "Governance",
|
|
827
1331
|
children: [
|
|
828
1332
|
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 })
|
|
1333
|
+
createDomainNode({ domainKey: "policies", label: "Policies", children: policies })
|
|
832
1334
|
]
|
|
833
1335
|
});
|
|
834
1336
|
}
|
|
@@ -857,7 +1359,13 @@ function buildOrgTreeNode(graph, knowledgeNodes, facetStates, organizationModel,
|
|
|
857
1359
|
case "systems":
|
|
858
1360
|
return buildSystemsGroup(graph, organizationModel, facetStates, ctx, visibleSpineIds);
|
|
859
1361
|
case "graph":
|
|
860
|
-
return buildGraphGroup(
|
|
1362
|
+
return buildGraphGroup(organizationModel);
|
|
1363
|
+
case "resources":
|
|
1364
|
+
return buildResourcesGroup(graph);
|
|
1365
|
+
case "knowledge":
|
|
1366
|
+
return buildKnowledgeGroup(graph, knowledgeNodes, organizationModel);
|
|
1367
|
+
case "navigation":
|
|
1368
|
+
return buildNavigationGroup(organizationModel);
|
|
861
1369
|
case "governance-wiring":
|
|
862
1370
|
return buildGovernanceGroup(graph, organizationModel, knowledgeByTarget, facetStates);
|
|
863
1371
|
default:
|
|
@@ -979,7 +1487,7 @@ function KnowledgeTree({
|
|
|
979
1487
|
iconToken: GROUP_ICON_TOKENS[groupKey] ?? typedNode.icon,
|
|
980
1488
|
command: isQuickAccess ? "" : getKnowledgeDirectoryCommand(
|
|
981
1489
|
typedNode.knowledgeNodeIds,
|
|
982
|
-
|
|
1490
|
+
getKnowledgeTreeFolderCommand(`${GROUP_PREFIX}${groupKey}`)
|
|
983
1491
|
),
|
|
984
1492
|
isActive: isActive2,
|
|
985
1493
|
fallbackKind: "organization",
|
|
@@ -1033,7 +1541,7 @@ function KnowledgeTree({
|
|
|
1033
1541
|
iconToken: void 0,
|
|
1034
1542
|
command: getKnowledgeDirectoryCommand(
|
|
1035
1543
|
typedNode.knowledgeNodeIds,
|
|
1036
|
-
|
|
1544
|
+
getKnowledgeTreeFolderCommand(`${DOMAIN_PREFIX}${domainKey}`)
|
|
1037
1545
|
),
|
|
1038
1546
|
isActive: isActive2,
|
|
1039
1547
|
fallbackKind: "organization",
|
|
@@ -1051,7 +1559,7 @@ function KnowledgeTree({
|
|
|
1051
1559
|
const graphNode2 = typedNode.graphNodeId ? graphNodeMap.get(typedNode.graphNodeId) : void 0;
|
|
1052
1560
|
const itemRouteId = `${ITEM_PREFIX}${typedNode.domainKey}:${typedNode.itemId}`;
|
|
1053
1561
|
const routeToDomainPanel = shouldRouteItemToDomainPanel(typedNode.domainKey);
|
|
1054
|
-
const fallbackCommand = graphNode2?.kind === "knowledge" && graphNode2.sourceId ?
|
|
1562
|
+
const fallbackCommand = graphNode2?.kind === "knowledge" && graphNode2.sourceId ? getKnowledgeNodeReadCommand(graphNode2.sourceId) : graphNode2 ? getKnowledgeGraphFolderCommand(graphNode2.id) : getKnowledgeTreeFolderCommand(itemRouteId);
|
|
1055
1563
|
const isActive2 = selectedNodeId !== void 0 && (selectedNodeId === itemRouteId || selectedNodeId === typedNode.itemId || selectedNodeId === typedNode.graphNodeId || graphNode2 !== void 0 && (selectedNodeId === graphNode2.id || selectedNodeId === graphNode2.sourceId));
|
|
1056
1564
|
return /* @__PURE__ */ jsx(
|
|
1057
1565
|
DirectoryRow,
|
|
@@ -1099,7 +1607,7 @@ function KnowledgeTree({
|
|
|
1099
1607
|
iconToken: typedNode.icon,
|
|
1100
1608
|
command: getKnowledgeDirectoryCommand(
|
|
1101
1609
|
typedNode.knowledgeNodeIds,
|
|
1102
|
-
|
|
1610
|
+
getKnowledgeTreeFolderCommand(String(value))
|
|
1103
1611
|
),
|
|
1104
1612
|
isActive: false
|
|
1105
1613
|
}
|
|
@@ -1117,7 +1625,7 @@ function KnowledgeTree({
|
|
|
1117
1625
|
hasChildren,
|
|
1118
1626
|
label: String(node.label),
|
|
1119
1627
|
iconToken: typedNode.icon,
|
|
1120
|
-
command:
|
|
1628
|
+
command: getKnowledgeGraphFolderCommand(graphNode2.id),
|
|
1121
1629
|
isActive: isActive2,
|
|
1122
1630
|
fallbackKind: graphNode2.kind,
|
|
1123
1631
|
onSelectGraphNode: () => onSelectGraphNode?.(graphNode2),
|
|
@@ -1141,7 +1649,7 @@ function KnowledgeTree({
|
|
|
1141
1649
|
hasChildren,
|
|
1142
1650
|
label: String(node.label),
|
|
1143
1651
|
iconToken: typedNode.icon,
|
|
1144
|
-
command: graphSpine ?
|
|
1652
|
+
command: graphSpine ? getKnowledgeSpineFolderCommand(graphSpine, graphNode?.sourceId ?? graphNodeId) : "",
|
|
1145
1653
|
isActive,
|
|
1146
1654
|
fallbackKind: graphNode?.kind ?? "system",
|
|
1147
1655
|
uppercase: true,
|
|
@@ -1270,8 +1778,7 @@ function FavoriteRow({ elementProps, label, routeId, kind, iconToken, onActivate
|
|
|
1270
1778
|
/* @__PURE__ */ jsx(
|
|
1271
1779
|
SemanticIcon,
|
|
1272
1780
|
{
|
|
1273
|
-
token: iconToken,
|
|
1274
|
-
fallbackKind: kind === "knowledge" ? "knowledge" : "unknown",
|
|
1781
|
+
token: iconToken ?? (kind === "knowledge" ? "reference" : "info"),
|
|
1275
1782
|
size: 15,
|
|
1276
1783
|
style: { color: SIDEBAR_TREE_ACCENT_COLOR }
|
|
1277
1784
|
}
|
|
@@ -1364,8 +1871,7 @@ function KnowledgeLeafRow({ elementProps, knowledgeNode, isActive, onSelectNode
|
|
|
1364
1871
|
/* @__PURE__ */ jsx(
|
|
1365
1872
|
SemanticIcon,
|
|
1366
1873
|
{
|
|
1367
|
-
token: getKnowledgeIconToken(knowledgeNode),
|
|
1368
|
-
fallbackKind: knowledgeNode.kind,
|
|
1874
|
+
token: getKnowledgeIconToken(knowledgeNode) ?? "reference",
|
|
1369
1875
|
size: 15,
|
|
1370
1876
|
style: { color: SIDEBAR_TREE_ACCENT_COLOR }
|
|
1371
1877
|
}
|
|
@@ -1383,7 +1889,7 @@ function KnowledgeLeafRow({ elementProps, knowledgeNode, isActive, onSelectNode
|
|
|
1383
1889
|
/* @__PURE__ */ jsx(
|
|
1384
1890
|
TrailingCopySlot,
|
|
1385
1891
|
{
|
|
1386
|
-
command:
|
|
1892
|
+
command: getKnowledgeNodeReadCommand(knowledgeNode.id),
|
|
1387
1893
|
label: "Copy knowledge command",
|
|
1388
1894
|
showCopy: hovered,
|
|
1389
1895
|
favorite: {
|
|
@@ -1466,8 +1972,7 @@ function DirectoryRow({
|
|
|
1466
1972
|
/* @__PURE__ */ jsx(
|
|
1467
1973
|
SemanticIcon,
|
|
1468
1974
|
{
|
|
1469
|
-
token: iconToken,
|
|
1470
|
-
fallbackKind: fallbackKind !== void 0 ? toSemanticFallbackKind(fallbackKind) : "unknown",
|
|
1975
|
+
token: iconToken ?? (fallbackKind !== void 0 ? graphKindToFallbackToken(fallbackKind) : "info"),
|
|
1471
1976
|
size: 14,
|
|
1472
1977
|
style: { color: SIDEBAR_TREE_ACCENT_COLOR }
|
|
1473
1978
|
}
|
|
@@ -1541,7 +2046,7 @@ function TrailingCopySlot({ command, label, showCopy, favorite, hovered }) {
|
|
|
1541
2046
|
var indexPromise = null;
|
|
1542
2047
|
function loadSearchIndex() {
|
|
1543
2048
|
if (!indexPromise) {
|
|
1544
|
-
indexPromise = import('./knowledge-search-index-
|
|
2049
|
+
indexPromise = import('./knowledge-search-index-P7PR626V.js').then(
|
|
1545
2050
|
(mod) => buildSearchIndex(mod.default ?? mod)
|
|
1546
2051
|
);
|
|
1547
2052
|
}
|
|
@@ -1623,4 +2128,4 @@ function KnowledgeSearchBar({
|
|
|
1623
2128
|
);
|
|
1624
2129
|
}
|
|
1625
2130
|
|
|
1626
|
-
export { KNOWLEDGE_DOMAINS_WITH_PANELS, KNOWLEDGE_ICON_TOKEN_BY_KIND, KnowledgeSearchBar, KnowledgeTree, OM_TREE_GROUPS, getKnowledgeIconToken, getSharedOrganizationGraph, projectNavigationGroups, projectNavigationSurfaces };
|
|
2131
|
+
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 };
|