@elevasis/ui 2.30.0 → 2.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/dist/{CoreAuthKitInner-QC62UHTZ.js → CoreAuthKitInner-KSEGSB67.js} +1 -1
  2. package/dist/api/index.js +3 -3
  3. package/dist/app/index.d.ts +122 -1
  4. package/dist/app/index.js +7 -7
  5. package/dist/auth/context.js +1 -1
  6. package/dist/auth/index.js +1 -1
  7. package/dist/charts/index.js +4 -4
  8. package/dist/{chunk-T5Z7G2J2.js → chunk-3BAPR3KA.js} +1 -1
  9. package/dist/{chunk-4VQ2PXMI.js → chunk-3FV6HBXS.js} +4 -4
  10. package/dist/{chunk-2DIYILF7.js → chunk-542WPQU2.js} +2 -2
  11. package/dist/{chunk-SBCIB5TZ.js → chunk-5LJAEZMA.js} +5 -5
  12. package/dist/{chunk-T2PAD63Y.js → chunk-7HMCB26R.js} +1 -1
  13. package/dist/chunk-7KC4P3AU.js +357 -0
  14. package/dist/{chunk-AKOD52HS.js → chunk-CQZ3DNQY.js} +4 -3
  15. package/dist/{chunk-I2KLQ2HA.js → chunk-DZTG5IAC.js} +7 -1
  16. package/dist/{chunk-JCGD4GM6.js → chunk-GRDLB6LM.js} +1 -0
  17. package/dist/{chunk-JKTPRYGV.js → chunk-HQGF4ATG.js} +9 -55
  18. package/dist/{chunk-SKXXT3E2.js → chunk-HYNYEBHM.js} +4 -4
  19. package/dist/{chunk-6EFVZV6X.js → chunk-JKSUN5GN.js} +718 -64
  20. package/dist/{chunk-LRZFLK2F.js → chunk-L2NVFLXU.js} +3 -3
  21. package/dist/{chunk-6WXDE5LZ.js → chunk-L3BVJWML.js} +1 -1
  22. package/dist/{chunk-3MDNBHVB.js → chunk-MVFCLZSK.js} +690 -221
  23. package/dist/{chunk-HYLERWRO.js → chunk-ND42LPY4.js} +6 -6
  24. package/dist/{chunk-CLUP5H3C.js → chunk-O2QOPJI5.js} +360 -126
  25. package/dist/{chunk-X2SUMO3P.js → chunk-P55BJZZW.js} +2 -1
  26. package/dist/{chunk-4FZYEEPK.js → chunk-Q6OYNEGR.js} +5 -5
  27. package/dist/{chunk-4SY6BTVZ.js → chunk-QDEETKYT.js} +4 -1
  28. package/dist/{chunk-IKQ42WHU.js → chunk-QHEWXU7I.js} +1 -1
  29. package/dist/chunk-R2XR4FCV.js +48 -0
  30. package/dist/chunk-R66W5UDG.js +26 -0
  31. package/dist/{chunk-3GV5NHSS.js → chunk-SHQXMW4F.js} +39 -211
  32. package/dist/{chunk-A7B7HLDF.js → chunk-T3IPHEYJ.js} +1889 -301
  33. package/dist/{chunk-7E3FUTND.js → chunk-TOIXUWR6.js} +1 -1
  34. package/dist/{chunk-NITGGYH2.js → chunk-TVRQ6AQI.js} +1 -1
  35. package/dist/{chunk-CN2HC4D4.js → chunk-UFTM5SZZ.js} +2 -2
  36. package/dist/{chunk-KVJ3LFH2.js → chunk-VNFR57DF.js} +4 -24
  37. package/dist/{chunk-P5WYW2GI.js → chunk-Y4FWCG7Y.js} +150 -305
  38. package/dist/components/chat/index.js +1 -1
  39. package/dist/components/index.d.ts +205 -11
  40. package/dist/components/index.js +38 -35
  41. package/dist/components/navigation/index.js +1 -1
  42. package/dist/execution/index.d.ts +2 -1
  43. package/dist/execution/index.js +1 -1
  44. package/dist/features/auth/index.d.ts +121 -0
  45. package/dist/features/auth/index.js +1 -1
  46. package/dist/features/clients/index.css +611 -0
  47. package/dist/features/clients/index.d.ts +86 -0
  48. package/dist/features/clients/index.js +719 -0
  49. package/dist/features/crm/index.d.ts +148 -2
  50. package/dist/features/crm/index.js +18 -16
  51. package/dist/features/dashboard/index.d.ts +36 -1
  52. package/dist/features/dashboard/index.js +14 -14
  53. package/dist/features/delivery/index.d.ts +121 -0
  54. package/dist/features/delivery/index.js +18 -16
  55. package/dist/features/knowledge/index.js +43 -20
  56. package/dist/features/lead-gen/index.d.ts +17 -11
  57. package/dist/features/lead-gen/index.js +19 -17
  58. package/dist/features/monitoring/index.js +17 -16
  59. package/dist/features/monitoring/requests/index.js +14 -13
  60. package/dist/features/operations/index.d.ts +38 -2
  61. package/dist/features/operations/index.js +22 -21
  62. package/dist/features/seo/index.js +1 -1
  63. package/dist/features/settings/index.d.ts +121 -0
  64. package/dist/features/settings/index.js +16 -15
  65. package/dist/graph/index.js +1 -1
  66. package/dist/hooks/delivery/index.d.ts +140 -0
  67. package/dist/hooks/delivery/index.js +3 -3
  68. package/dist/hooks/index.d.ts +583 -19
  69. package/dist/hooks/index.js +12 -12
  70. package/dist/hooks/operations/command-view/utils/transformCommandViewData.d.ts +82 -1
  71. package/dist/hooks/operations/command-view/utils/transformCommandViewData.js +1 -1
  72. package/dist/hooks/published.d.ts +583 -19
  73. package/dist/hooks/published.js +12 -12
  74. package/dist/index.d.ts +680 -21
  75. package/dist/index.js +13 -13
  76. package/dist/initialization/index.d.ts +121 -0
  77. package/dist/initialization/index.js +1 -1
  78. package/dist/knowledge/index.d.ts +97 -1
  79. package/dist/knowledge/index.js +1692 -1039
  80. package/dist/layout/index.d.ts +6 -0
  81. package/dist/layout/index.js +4 -4
  82. package/dist/organization/index.js +1 -1
  83. package/dist/profile/index.d.ts +121 -0
  84. package/dist/profile/index.js +1 -1
  85. package/dist/provider/ElevasisServiceContext.js +1 -1
  86. package/dist/provider/index.d.ts +218 -2
  87. package/dist/provider/index.js +10 -10
  88. package/dist/provider/published.d.ts +218 -2
  89. package/dist/provider/published.js +7 -7
  90. package/dist/router/context.js +1 -1
  91. package/dist/router/index.js +1 -1
  92. package/dist/sse/index.js +1 -1
  93. package/dist/supabase/index.d.ts +232 -0
  94. package/dist/supabase/index.js +1 -1
  95. package/dist/test-utils/index.js +3 -3
  96. package/dist/test-utils/setup-integration.js +1 -1
  97. package/dist/test-utils/setup.js +2 -2
  98. package/dist/theme/index.js +4 -4
  99. package/dist/theme/presets/index.js +2 -2
  100. package/dist/typeform/index.js +1 -1
  101. package/dist/typeform/schemas.js +1 -1
  102. package/dist/types/index.d.ts +204 -1
  103. package/dist/utils/index.d.ts +36 -1
  104. package/dist/utils/index.js +2 -2
  105. package/dist/vite/index.js +3 -3
  106. package/dist/vite-plugin-knowledge/index.js +2 -2
  107. package/dist/zustand/index.js +1 -1
  108. package/package.json +13 -4
  109. /package/dist/{chunk-HXZQWMKE.js → chunk-XQHZBA65.js} +0 -0
@@ -1,15 +1,15 @@
1
- import { SemanticIcon } from './chunk-JCGD4GM6.js';
1
+ import { SemanticIcon } from './chunk-GRDLB6LM.js';
2
2
  import { SubshellSidebarLoader } from './chunk-XQQEKWTL.js';
3
- import { OrganizationModelProspectingSchema, CAPABILITY_REGISTRY } from './chunk-NITGGYH2.js';
3
+ import { OrganizationModelProspectingSchema, CAPABILITY_REGISTRY } from './chunk-TVRQ6AQI.js';
4
4
  import { useCyberColors, CyberDonut } from './chunk-CW3UNAF2.js';
5
5
  import { SubshellSidebarSection } from './chunk-IIMU5YAJ.js';
6
- import { collectResourceFilterFacets, useCommandViewStore, useCommandViewData, useCommandViewStats, usePaginationState, useResourceExecutions, useCheckpointTasks } from './chunk-6EFVZV6X.js';
7
- import { EmptyState, APIErrorAlert } from './chunk-6WXDE5LZ.js';
8
- import { LabelSchema, ColorTokenSchema, IconNameSchema, PathSchema, DescriptionSchema, DisplayMetadataSchema, ModelIdSchema, ReferenceIdsSchema, OrganizationModelSalesSchema } from './chunk-AKOD52HS.js';
6
+ import { collectResourceFilterFacets, useCommandViewStore, useCommandViewData, useCommandViewStats, usePaginationState, useResourceExecutions, useCheckpointTasks } from './chunk-JKSUN5GN.js';
9
7
  import { useElevasisFeatures } from './chunk-6IXOKUBC.js';
10
- import { getNodeId } from './chunk-HXZQWMKE.js';
8
+ import { EmptyState, CardHeader, APIErrorAlert } from './chunk-L3BVJWML.js';
9
+ import { LabelSchema, ColorTokenSchema, IconNameSchema, PathSchema, DescriptionSchema, DisplayMetadataSchema, ModelIdSchema, ReferenceIdsSchema, OrganizationModelSalesSchema } from './chunk-CQZ3DNQY.js';
10
+ import { getNodeId } from './chunk-XQHZBA65.js';
11
11
  import { useRef, useEffect, useMemo } from 'react';
12
- import { Paper, Stack, Group, Text, Button, Badge, SimpleGrid, Divider, Select, NumberInput, MultiSelect, Switch, Card, Checkbox, UnstyledButton, useMantineTheme, Box, Title, Space, Center, Loader, Pagination, TextInput, SegmentedControl } from '@mantine/core';
12
+ import { Paper, Stack, Group, Text, Button, Badge, SimpleGrid, Tabs, Title, Divider, Select, NumberInput, MultiSelect, Switch, Card, Checkbox, UnstyledButton, useMantineTheme, Box, Space, Center, Loader, Pagination, TextInput, Accordion, SegmentedControl, Anchor } from '@mantine/core';
13
13
  import { IconShare2, IconTopologyStar3, IconRefresh, IconCircleX, IconCircleCheck, IconCircleDashed, IconSitemap, IconExternalLink, IconSearch } from '@tabler/icons-react';
14
14
  import { z } from 'zod';
15
15
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -276,13 +276,104 @@ var OfferingsDomainSchema = z.object({
276
276
  var DEFAULT_ORGANIZATION_MODEL_OFFERINGS = {
277
277
  products: []
278
278
  };
279
+ var SystemKindSchema = z.enum(["product", "operational", "platform", "diagnostic"]);
280
+ var SystemStatusSchema = z.enum(["active", "deprecated", "archived"]);
281
+ var SystemIdSchema = ModelIdSchema;
282
+ var SystemEntrySchema = z.object({
283
+ /** Stable tenant-defined system id (e.g. "sys.lead-gen"). */
284
+ id: SystemIdSchema,
285
+ /** Human-readable system title shown in governance and operations UI. */
286
+ title: LabelSchema,
287
+ /** One-paragraph purpose statement for the bounded context. */
288
+ description: DescriptionSchema,
289
+ /** Closed system shape enum; catalog values remain tenant-defined. */
290
+ kind: SystemKindSchema,
291
+ /** Optional role responsible for this system. */
292
+ responsibleRoleId: ModelIdSchema.optional(),
293
+ /** Optional knowledge nodes that govern this system. */
294
+ governedByKnowledge: ReferenceIdsSchema,
295
+ /** Optional goals this system contributes to. */
296
+ drivesGoals: ReferenceIdsSchema,
297
+ status: SystemStatusSchema
298
+ });
299
+ var SystemsDomainSchema = z.object({
300
+ systems: z.array(SystemEntrySchema).default([])
301
+ });
302
+ var DEFAULT_ORGANIZATION_MODEL_SYSTEMS = {
303
+ systems: []
304
+ };
305
+
306
+ // ../core/src/organization-model/domains/resources.ts
307
+ z.enum(["workflow", "agent", "integration"]);
308
+ var ResourceGovernanceStatusSchema = z.enum(["active", "deprecated", "archived"]);
309
+ var AgentKindSchema = z.enum(["orchestrator", "specialist", "utility", "system"]);
310
+ var ResourceIdSchema = z.string().trim().min(1).max(255).regex(/^[A-Za-z0-9]+(?:[-._][A-Za-z0-9]+)*$/, "Resource IDs must use letters, numbers, -, _, or . separators");
311
+ var ResourceEntryBaseSchema = z.object({
312
+ /** Canonical resource id; runtime resourceId derives from this value. */
313
+ id: ResourceIdSchema,
314
+ /** Required single System membership. */
315
+ systemId: SystemIdSchema,
316
+ /** Optional role responsible for maintaining this resource. */
317
+ ownerRoleId: ModelIdSchema.optional(),
318
+ status: ResourceGovernanceStatusSchema
319
+ });
320
+ var WorkflowResourceEntrySchema = ResourceEntryBaseSchema.extend({
321
+ kind: z.literal("workflow"),
322
+ /** Mirrors WorkflowConfig.capabilityKey when the runtime workflow has one. */
323
+ capabilityKey: z.string().trim().min(1).max(255).optional()
324
+ });
325
+ var AgentResourceEntrySchema = ResourceEntryBaseSchema.extend({
326
+ kind: z.literal("agent"),
327
+ /** Mirrors code-side AgentConfig.kind. */
328
+ agentKind: AgentKindSchema,
329
+ /** Role this agent embodies, if any. */
330
+ actsAsRoleId: ModelIdSchema.optional(),
331
+ /** Mirrors AgentConfig.sessionCapable. */
332
+ sessionCapable: z.boolean()
333
+ });
334
+ var IntegrationResourceEntrySchema = ResourceEntryBaseSchema.extend({
335
+ kind: z.literal("integration"),
336
+ provider: z.string().trim().min(1).max(100)
337
+ });
338
+ var ResourceEntrySchema = z.discriminatedUnion("kind", [
339
+ WorkflowResourceEntrySchema,
340
+ AgentResourceEntrySchema,
341
+ IntegrationResourceEntrySchema
342
+ ]);
343
+ var ResourcesDomainSchema = z.object({
344
+ entries: z.array(ResourceEntrySchema).default([])
345
+ });
346
+ var DEFAULT_ORGANIZATION_MODEL_RESOURCES = {
347
+ entries: []
348
+ };
349
+
350
+ // ../core/src/organization-model/domains/roles.ts
351
+ var RoleIdSchema = ModelIdSchema;
352
+ var HumanRoleHolderSchema = z.object({
353
+ kind: z.literal("human"),
354
+ userId: z.string().trim().min(1).max(200)
355
+ });
356
+ var AgentRoleHolderSchema = z.object({
357
+ kind: z.literal("agent"),
358
+ agentId: ResourceIdSchema
359
+ });
360
+ var TeamRoleHolderSchema = z.object({
361
+ kind: z.literal("team"),
362
+ memberIds: z.array(z.string().trim().min(1).max(200)).min(1)
363
+ });
364
+ var RoleHolderSchema = z.discriminatedUnion("kind", [
365
+ HumanRoleHolderSchema,
366
+ AgentRoleHolderSchema,
367
+ TeamRoleHolderSchema
368
+ ]);
369
+ var RoleHoldersSchema = z.union([RoleHolderSchema, z.array(RoleHolderSchema).min(1)]);
279
370
  var RoleSchema = z.object({
280
371
  /** Stable unique identifier for the role (e.g. "role-ceo", "role-head-of-sales"). */
281
- id: z.string().trim().min(1).max(100),
372
+ id: RoleIdSchema,
282
373
  /** Human-readable title shown to agents and in UI (e.g. "CEO", "Head of Sales"). */
283
374
  title: z.string().trim().min(1).max(200),
284
375
  /**
285
- * List of responsibilities this role owns plain-language descriptions of
376
+ * List of responsibilities this role owns - plain-language descriptions of
286
377
  * what the person in this role is accountable for delivering.
287
378
  * Defaults to empty array so minimal role definitions stay concise.
288
379
  */
@@ -290,16 +381,18 @@ var RoleSchema = z.object({
290
381
  /**
291
382
  * Optional: ID of another role this role reports to.
292
383
  * When present, must reference another `roles[].id` in the same organization.
293
- * Cross-reference enforced in `OrganizationModelSchema.superRefine()`.
294
- * Absence indicates a top-level role (no reporting line).
295
384
  */
296
- reportsToId: z.string().trim().min(1).max(100).optional(),
385
+ reportsToId: RoleIdSchema.optional(),
297
386
  /**
298
- * Optional: name or email of the person currently holding this role.
299
- * Free-form string supports "Alice Johnson", "alice@example.com", or
300
- * any human-readable identifier. Not validated against any user registry.
387
+ * Optional: human, agent, or team holder currently filling this role.
388
+ * Agent holders reference OM Resource IDs and are validated at the model level.
301
389
  */
302
- heldBy: z.string().trim().max(200).optional()
390
+ heldBy: RoleHoldersSchema.optional(),
391
+ /**
392
+ * Optional Systems this role is accountable for.
393
+ * Cross-reference enforced in `OrganizationModelSchema.superRefine()`.
394
+ */
395
+ responsibleFor: z.array(SystemIdSchema).optional()
303
396
  });
304
397
  var RolesDomainSchema = z.object({
305
398
  roles: z.array(RoleSchema).default([])
@@ -534,8 +627,8 @@ var OrgKnowledgeNodeSchema = z.object({
534
627
  skills: z.array(KnowledgeSkillBindingSchema).optional(),
535
628
  /** Domain key used to derive fast graph->skill registries. */
536
629
  domain: KnowledgeDomainBindingSchema.optional(),
537
- /** Identifiers of the roles or members who own this knowledge node. */
538
- ownerIds: z.array(ModelIdSchema).default([]),
630
+ /** Role identifiers that own this knowledge node. */
631
+ ownerIds: z.array(RoleIdSchema).default([]),
539
632
  /** ISO date string (YYYY-MM-DD or full ISO 8601) of last meaningful update. */
540
633
  updatedAt: z.string().trim().min(1).max(50)
541
634
  });
@@ -557,6 +650,8 @@ var OrganizationModelSchemaBase = z.object({
557
650
  offerings: OfferingsDomainSchema.default(DEFAULT_ORGANIZATION_MODEL_OFFERINGS),
558
651
  roles: RolesDomainSchema.default(DEFAULT_ORGANIZATION_MODEL_ROLES),
559
652
  goals: GoalsDomainSchema.default(DEFAULT_ORGANIZATION_MODEL_GOALS),
653
+ systems: SystemsDomainSchema.default(DEFAULT_ORGANIZATION_MODEL_SYSTEMS),
654
+ resources: ResourcesDomainSchema.default(DEFAULT_ORGANIZATION_MODEL_RESOURCES),
560
655
  statuses: StatusesDomainSchema.default({ entries: [] }),
561
656
  operations: OperationsDomainSchema.default({ entries: [] }),
562
657
  knowledge: KnowledgeDomainSchema.default({ nodes: [] })
@@ -590,6 +685,9 @@ function hasFeature(featuresById, featureId) {
590
685
  function defaultFeaturePathFor(id) {
591
686
  return `/${id.replaceAll(".", "/")}`;
592
687
  }
688
+ function asRoleHolderArray(heldBy) {
689
+ return Array.isArray(heldBy) ? heldBy : [heldBy];
690
+ }
593
691
  var OrganizationModelSchema = OrganizationModelSchemaBase.superRefine((model, ctx) => {
594
692
  const featuresById = collectIds(model.features, ctx, ["features"], "Feature");
595
693
  const featureIdsByEffectivePath = /* @__PURE__ */ new Map();
@@ -700,6 +798,8 @@ var OrganizationModelSchema = OrganizationModelSchemaBase.superRefine((model, ct
700
798
  );
701
799
  }
702
800
  });
801
+ const goalsById = new Map(model.goals.objectives.map((objective) => [objective.id, objective]));
802
+ const knowledgeById = new Map(model.knowledge.nodes.map((node) => [node.id, node]));
703
803
  const rolesById = new Map(model.roles.roles.map((role) => [role.id, role]));
704
804
  model.roles.roles.forEach((role, roleIndex) => {
705
805
  if (role.reportsToId !== void 0 && !rolesById.has(role.reportsToId)) {
@@ -710,6 +810,102 @@ var OrganizationModelSchema = OrganizationModelSchemaBase.superRefine((model, ct
710
810
  );
711
811
  }
712
812
  });
813
+ const systemsById = collectIds(model.systems.systems, ctx, ["systems", "systems"], "System");
814
+ model.roles.roles.forEach((role, roleIndex) => {
815
+ role.responsibleFor?.forEach((systemId, systemIndex) => {
816
+ if (!systemsById.has(systemId)) {
817
+ addIssue(
818
+ ctx,
819
+ ["roles", "roles", roleIndex, "responsibleFor", systemIndex],
820
+ `Role "${role.id}" references unknown responsibleFor system "${systemId}"`
821
+ );
822
+ }
823
+ });
824
+ });
825
+ model.systems.systems.forEach((system, systemIndex) => {
826
+ if (system.responsibleRoleId !== void 0 && !rolesById.has(system.responsibleRoleId)) {
827
+ addIssue(
828
+ ctx,
829
+ ["systems", "systems", systemIndex, "responsibleRoleId"],
830
+ `System "${system.id}" references unknown responsibleRoleId "${system.responsibleRoleId}"`
831
+ );
832
+ }
833
+ system.governedByKnowledge.forEach((nodeId2, nodeIndex) => {
834
+ if (!knowledgeById.has(nodeId2)) {
835
+ addIssue(
836
+ ctx,
837
+ ["systems", "systems", systemIndex, "governedByKnowledge", nodeIndex],
838
+ `System "${system.id}" references unknown knowledge node "${nodeId2}"`
839
+ );
840
+ }
841
+ });
842
+ system.drivesGoals.forEach((goalId, goalIndex) => {
843
+ if (!goalsById.has(goalId)) {
844
+ addIssue(
845
+ ctx,
846
+ ["systems", "systems", systemIndex, "drivesGoals", goalIndex],
847
+ `System "${system.id}" references unknown goal "${goalId}"`
848
+ );
849
+ }
850
+ });
851
+ });
852
+ const resourcesById = collectIds(model.resources.entries, ctx, ["resources", "entries"], "Resource");
853
+ model.resources.entries.forEach((resource, resourceIndex) => {
854
+ if (!systemsById.has(resource.systemId)) {
855
+ addIssue(
856
+ ctx,
857
+ ["resources", "entries", resourceIndex, "systemId"],
858
+ `Resource "${resource.id}" references unknown systemId "${resource.systemId}"`
859
+ );
860
+ }
861
+ if (resource.ownerRoleId !== void 0 && !rolesById.has(resource.ownerRoleId)) {
862
+ addIssue(
863
+ ctx,
864
+ ["resources", "entries", resourceIndex, "ownerRoleId"],
865
+ `Resource "${resource.id}" references unknown ownerRoleId "${resource.ownerRoleId}"`
866
+ );
867
+ }
868
+ if (resource.kind === "agent" && resource.actsAsRoleId !== void 0 && !rolesById.has(resource.actsAsRoleId)) {
869
+ addIssue(
870
+ ctx,
871
+ ["resources", "entries", resourceIndex, "actsAsRoleId"],
872
+ `Agent resource "${resource.id}" references unknown actsAsRoleId "${resource.actsAsRoleId}"`
873
+ );
874
+ }
875
+ });
876
+ model.roles.roles.forEach((role, roleIndex) => {
877
+ if (role.heldBy === void 0) return;
878
+ asRoleHolderArray(role.heldBy).forEach((holder, holderIndex) => {
879
+ if (holder.kind !== "agent") return;
880
+ const resource = resourcesById.get(holder.agentId);
881
+ if (resource === void 0) {
882
+ addIssue(
883
+ ctx,
884
+ ["roles", "roles", roleIndex, "heldBy", Array.isArray(role.heldBy) ? holderIndex : "agentId"],
885
+ `Role "${role.id}" references unknown agent holder resource "${holder.agentId}"`
886
+ );
887
+ return;
888
+ }
889
+ if (resource.kind !== "agent") {
890
+ addIssue(
891
+ ctx,
892
+ ["roles", "roles", roleIndex, "heldBy", Array.isArray(role.heldBy) ? holderIndex : "agentId"],
893
+ `Role "${role.id}" agent holder "${holder.agentId}" must reference an agent resource`
894
+ );
895
+ }
896
+ });
897
+ });
898
+ model.knowledge.nodes.forEach((node, nodeIndex) => {
899
+ node.ownerIds.forEach((roleId, ownerIndex) => {
900
+ if (!rolesById.has(roleId)) {
901
+ addIssue(
902
+ ctx,
903
+ ["knowledge", "nodes", nodeIndex, "ownerIds", ownerIndex],
904
+ `Knowledge node "${node.id}" references unknown owner role "${roleId}"`
905
+ );
906
+ }
907
+ });
908
+ });
713
909
  });
714
910
 
715
911
  // ../core/src/organization-model/graph/schema.ts
@@ -1372,20 +1568,250 @@ function getOrganizationGraphDetailState(graph, selectedElement) {
1372
1568
  }
1373
1569
  return buildEdgeState(graph, edge, nodesById);
1374
1570
  }
1571
+ function ProminentPropertiesSection({ properties }) {
1572
+ return /* @__PURE__ */ jsx(SimpleGrid, { cols: 2, spacing: "sm", children: properties.map((prop) => /* @__PURE__ */ jsx(Card, { withBorder: true, radius: "md", p: "sm", children: /* @__PURE__ */ jsxs(Stack, { gap: 2, children: [
1573
+ /* @__PURE__ */ jsx(Text, { size: "xs", tt: "uppercase", fw: 700, c: "dimmed", children: prop.label }),
1574
+ /* @__PURE__ */ jsx(Text, { size: "sm", fw: 600, style: { wordBreak: "break-all" }, children: prop.value })
1575
+ ] }) }, prop.label)) });
1576
+ }
1577
+ function LinkedObjectsSection({ orderedKeys, byRelationship, onSelectNode }) {
1578
+ const keys = orderedKeys ? orderedKeys.filter((k) => byRelationship[k] && byRelationship[k].length > 0) : Object.keys(byRelationship);
1579
+ if (keys.length === 0) {
1580
+ return /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "No linked objects found in the current graph." });
1581
+ }
1582
+ return /* @__PURE__ */ jsx(Stack, { gap: "xs", children: keys.map((relationshipKey) => {
1583
+ const linkedNodeList = byRelationship[relationshipKey];
1584
+ return /* @__PURE__ */ jsx(Card, { variant: "light", radius: "md", p: "sm", children: /* @__PURE__ */ jsxs(Stack, { gap: "xs", children: [
1585
+ /* @__PURE__ */ jsx(Text, { size: "xs", tt: "uppercase", fw: 700, c: "dimmed", children: relationshipKey }),
1586
+ /* @__PURE__ */ jsx(Stack, { gap: 4, children: linkedNodeList.map((linkedNode) => /* @__PURE__ */ jsx(
1587
+ Anchor,
1588
+ {
1589
+ component: "button",
1590
+ size: "sm",
1591
+ onClick: () => onSelectNode?.(linkedNode.id),
1592
+ style: { textAlign: "left" },
1593
+ children: linkedNode.label
1594
+ },
1595
+ linkedNode.id
1596
+ )) })
1597
+ ] }) }, relationshipKey);
1598
+ }) });
1599
+ }
1600
+ function DefaultProminentProperties({ node }) {
1601
+ const fields = [
1602
+ { label: "Kind", value: node.kind },
1603
+ { label: "Domain", value: node.sourceId ?? "\u2014" },
1604
+ { label: "ID", value: node.id },
1605
+ { label: "Label", value: node.label }
1606
+ ];
1607
+ return /* @__PURE__ */ jsx(ProminentPropertiesSection, { properties: fields });
1608
+ }
1609
+ function ObjectView({ node, linkedNodes, prominentProperties, onSelectNode }) {
1610
+ const hasCustomProperties = prominentProperties && prominentProperties.length > 0;
1611
+ return /* @__PURE__ */ jsxs(Stack, { gap: "md", children: [
1612
+ /* @__PURE__ */ jsxs(Stack, { gap: "sm", children: [
1613
+ /* @__PURE__ */ jsx(Title, { order: 5, children: "Prominent Properties" }),
1614
+ hasCustomProperties ? /* @__PURE__ */ jsx(ProminentPropertiesSection, { properties: prominentProperties }) : /* @__PURE__ */ jsx(DefaultProminentProperties, { node })
1615
+ ] }),
1616
+ /* @__PURE__ */ jsxs(Stack, { gap: "sm", children: [
1617
+ /* @__PURE__ */ jsx(Title, { order: 5, children: "Linked" }),
1618
+ /* @__PURE__ */ jsx(LinkedObjectsSection, { byRelationship: linkedNodes.byRelationship, onSelectNode })
1619
+ ] })
1620
+ ] });
1621
+ }
1622
+
1623
+ // src/features/operations/organization-graph/object-views/getLinkedNodesByRelationship.ts
1624
+ function getLinkedNodesByRelationship(graph, nodeId2) {
1625
+ const nodeMap = new Map(graph.nodes.map((n) => [n.id, n]));
1626
+ const byRelationship = {};
1627
+ for (const edge of graph.edges) {
1628
+ const isOutgoing = edge.sourceId === nodeId2;
1629
+ const isIncoming = edge.targetId === nodeId2;
1630
+ if (!isOutgoing && !isIncoming) continue;
1631
+ const direction = isOutgoing ? "outgoing" : "incoming";
1632
+ const groupKey = `${edge.kind} (${direction})`;
1633
+ const linkedNodeId = isOutgoing ? edge.targetId : edge.sourceId;
1634
+ const linkedNode = nodeMap.get(linkedNodeId);
1635
+ if (!linkedNode) continue;
1636
+ if (!byRelationship[groupKey]) {
1637
+ byRelationship[groupKey] = [];
1638
+ }
1639
+ byRelationship[groupKey].push(linkedNode);
1640
+ }
1641
+ return { byRelationship };
1642
+ }
1643
+ var LINKED_OBJECT_ORDER = ["governs (incoming)", "uses (outgoing)", "triggers (incoming)"];
1644
+ function findAgentExtras(resourceId, registry) {
1645
+ if (!resourceId || !registry) return void 0;
1646
+ return registry.agents.find((a) => a.resourceId === resourceId);
1647
+ }
1648
+ function AgentObjectView({ node, linkedNodes, registry, onSelectNode }) {
1649
+ const extras = findAgentExtras(node.sourceId, registry);
1650
+ const prominentProperties = extras ? [
1651
+ { label: "Model Provider", value: extras.modelProvider },
1652
+ { label: "Model ID", value: extras.modelId },
1653
+ { label: "Tool Count", value: String(extras.toolCount) },
1654
+ { label: "Knowledge Map", value: extras.hasKnowledgeMap ? "Yes" : "No" },
1655
+ { label: "Memory", value: extras.hasMemory ? "Yes" : "No" },
1656
+ { label: "Session Capable", value: extras.sessionCapable ? "Yes" : "No" }
1657
+ ] : [
1658
+ { label: "Kind", value: node.kind },
1659
+ { label: "ID", value: node.id },
1660
+ { label: "Label", value: node.label }
1661
+ ];
1662
+ return /* @__PURE__ */ jsxs(Stack, { gap: "md", children: [
1663
+ /* @__PURE__ */ jsxs(Stack, { gap: "sm", children: [
1664
+ /* @__PURE__ */ jsx(Title, { order: 5, children: "Prominent Properties" }),
1665
+ !extras ? /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "Agent extras are not available in the current registry snapshot." }) : null,
1666
+ /* @__PURE__ */ jsx(ProminentPropertiesSection, { properties: prominentProperties })
1667
+ ] }),
1668
+ /* @__PURE__ */ jsxs(Stack, { gap: "sm", children: [
1669
+ /* @__PURE__ */ jsx(Title, { order: 5, children: "Linked" }),
1670
+ /* @__PURE__ */ jsx(
1671
+ LinkedObjectsSection,
1672
+ {
1673
+ orderedKeys: LINKED_OBJECT_ORDER,
1674
+ byRelationship: linkedNodes.byRelationship,
1675
+ onSelectNode
1676
+ }
1677
+ )
1678
+ ] })
1679
+ ] });
1680
+ }
1681
+ var LINKED_OBJECT_ORDER2 = ["triggers (incoming)", "uses (outgoing)", "exposes (incoming)"];
1682
+ function findWorkflowExtras(resourceId, registry) {
1683
+ if (!resourceId || !registry) return void 0;
1684
+ return registry.workflows.find((w) => w.resourceId === resourceId);
1685
+ }
1686
+ function WorkflowObjectView({ node, linkedNodes, registry, onSelectNode }) {
1687
+ const extras = findWorkflowExtras(node.sourceId, registry);
1688
+ const prominentProperties = extras ? [
1689
+ { label: "Step Count", value: String(extras.stepCount) },
1690
+ { label: "Entry Point", value: extras.entryPoint }
1691
+ ] : [
1692
+ { label: "Kind", value: node.kind },
1693
+ { label: "ID", value: node.id },
1694
+ { label: "Label", value: node.label }
1695
+ ];
1696
+ return /* @__PURE__ */ jsxs(Stack, { gap: "md", children: [
1697
+ /* @__PURE__ */ jsxs(Stack, { gap: "sm", children: [
1698
+ /* @__PURE__ */ jsx(Title, { order: 5, children: "Prominent Properties" }),
1699
+ !extras ? /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "Workflow extras are not available in the current registry snapshot." }) : null,
1700
+ /* @__PURE__ */ jsx(ProminentPropertiesSection, { properties: prominentProperties })
1701
+ ] }),
1702
+ /* @__PURE__ */ jsxs(Stack, { gap: "sm", children: [
1703
+ /* @__PURE__ */ jsx(Title, { order: 5, children: "Linked" }),
1704
+ /* @__PURE__ */ jsx(
1705
+ LinkedObjectsSection,
1706
+ {
1707
+ orderedKeys: LINKED_OBJECT_ORDER2,
1708
+ byRelationship: linkedNodes.byRelationship,
1709
+ onSelectNode
1710
+ }
1711
+ )
1712
+ ] })
1713
+ ] });
1714
+ }
1715
+ var LINKED_OBJECT_ORDER3 = ["triggers (outgoing)", "uses (outgoing)"];
1716
+ function findTriggerExtras(resourceId, registry) {
1717
+ if (!resourceId || !registry) return void 0;
1718
+ return registry.triggers.find((t) => t.resourceId === resourceId);
1719
+ }
1720
+ function TriggerObjectView({ node, linkedNodes, registry, onSelectNode }) {
1721
+ const extras = findTriggerExtras(node.sourceId, registry);
1722
+ const prominentProperties = extras ? [
1723
+ { label: "Trigger Type", value: extras.triggerType },
1724
+ ...extras.triggerType === "schedule" && extras.schedule ? [{ label: "Schedule", value: extras.schedule }] : [],
1725
+ ...extras.triggerType === "webhook" && extras.webhookPath ? [{ label: "Webhook Path", value: extras.webhookPath }] : [],
1726
+ ...extras.triggerType === "event" && extras.eventType ? [{ label: "Event Type", value: extras.eventType }] : []
1727
+ ] : [
1728
+ { label: "Kind", value: node.kind },
1729
+ { label: "ID", value: node.id },
1730
+ { label: "Label", value: node.label }
1731
+ ];
1732
+ return /* @__PURE__ */ jsxs(Stack, { gap: "md", children: [
1733
+ /* @__PURE__ */ jsxs(Stack, { gap: "sm", children: [
1734
+ /* @__PURE__ */ jsx(Title, { order: 5, children: "Prominent Properties" }),
1735
+ !extras ? /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "Trigger details are not available in the current registry snapshot." }) : null,
1736
+ /* @__PURE__ */ jsx(ProminentPropertiesSection, { properties: prominentProperties })
1737
+ ] }),
1738
+ /* @__PURE__ */ jsxs(Stack, { gap: "sm", children: [
1739
+ /* @__PURE__ */ jsx(Title, { order: 5, children: "Linked" }),
1740
+ /* @__PURE__ */ jsx(
1741
+ LinkedObjectsSection,
1742
+ {
1743
+ orderedKeys: LINKED_OBJECT_ORDER3,
1744
+ byRelationship: linkedNodes.byRelationship,
1745
+ onSelectNode
1746
+ }
1747
+ )
1748
+ ] })
1749
+ ] });
1750
+ }
1751
+ var LINKED_OBJECT_ORDER4 = ["uses (incoming)", "triggers (incoming)"];
1752
+ function findIntegrationExtras(resourceId, registry) {
1753
+ if (!resourceId || !registry) return void 0;
1754
+ return registry.integrations.find((i) => i.resourceId === resourceId);
1755
+ }
1756
+ function IntegrationObjectView({ node, linkedNodes, registry, onSelectNode }) {
1757
+ const extras = findIntegrationExtras(node.sourceId, registry);
1758
+ const prominentProperties = extras ? [
1759
+ { label: "Provider", value: extras.provider },
1760
+ { label: "Credential", value: extras.credentialName }
1761
+ ] : [
1762
+ { label: "Kind", value: node.kind },
1763
+ { label: "ID", value: node.id },
1764
+ { label: "Label", value: node.label }
1765
+ ];
1766
+ return /* @__PURE__ */ jsxs(Stack, { gap: "md", children: [
1767
+ /* @__PURE__ */ jsxs(Stack, { gap: "sm", children: [
1768
+ /* @__PURE__ */ jsx(Title, { order: 5, children: "Prominent Properties" }),
1769
+ !extras ? /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "Integration details are not available in the current registry snapshot." }) : null,
1770
+ /* @__PURE__ */ jsx(ProminentPropertiesSection, { properties: prominentProperties })
1771
+ ] }),
1772
+ /* @__PURE__ */ jsxs(Stack, { gap: "sm", children: [
1773
+ /* @__PURE__ */ jsx(Title, { order: 5, children: "Linked" }),
1774
+ /* @__PURE__ */ jsx(
1775
+ LinkedObjectsSection,
1776
+ {
1777
+ orderedKeys: LINKED_OBJECT_ORDER4,
1778
+ byRelationship: linkedNodes.byRelationship,
1779
+ onSelectNode
1780
+ }
1781
+ )
1782
+ ] })
1783
+ ] });
1784
+ }
1785
+
1786
+ // src/features/operations/organization-graph/object-views/registry.ts
1787
+ var objectViewRegistry = {
1788
+ "resource:agent": AgentObjectView,
1789
+ "resource:workflow": WorkflowObjectView,
1790
+ "resource:trigger": TriggerObjectView,
1791
+ "resource:integration": IntegrationObjectView
1792
+ };
1793
+ function getConfiguredObjectView(node) {
1794
+ if (node.kind === "resource" && node.resourceType) {
1795
+ return objectViewRegistry[`resource:${node.resourceType}`];
1796
+ }
1797
+ return objectViewRegistry[node.kind];
1798
+ }
1375
1799
  function getNodeKindColor(kind) {
1376
1800
  switch (kind) {
1377
1801
  case "organization":
1378
1802
  return "gray";
1379
1803
  case "feature":
1380
1804
  return "blue";
1381
- case "domain":
1382
- return "violet";
1383
1805
  case "surface":
1384
1806
  return "cyan";
1385
1807
  case "entity":
1386
1808
  return "pink";
1387
1809
  case "capability":
1388
1810
  return "green";
1811
+ case "stage":
1812
+ return "teal";
1813
+ case "knowledge":
1814
+ return "indigo";
1389
1815
  case "resource":
1390
1816
  return "orange";
1391
1817
  default:
@@ -1412,14 +1838,16 @@ function getNodeKindLabel2(kind) {
1412
1838
  return "Organization root";
1413
1839
  case "feature":
1414
1840
  return "Feature gate";
1415
- case "domain":
1416
- return "Domain boundary";
1417
1841
  case "surface":
1418
1842
  return "Surface";
1419
1843
  case "entity":
1420
1844
  return "Entity";
1421
1845
  case "capability":
1422
1846
  return "Capability";
1847
+ case "stage":
1848
+ return "Stage";
1849
+ case "knowledge":
1850
+ return "Knowledge";
1423
1851
  case "resource":
1424
1852
  return "Resource";
1425
1853
  default:
@@ -1516,6 +1944,11 @@ function FollowUpSectionCard({ section }) {
1516
1944
  )) }) : /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: section.emptyMessage })
1517
1945
  ] }) });
1518
1946
  }
1947
+ function shouldDefaultObjectTab(node) {
1948
+ if (node.kind === "organization" || node.kind === "feature") return true;
1949
+ if (node.kind === "resource" && (node.resourceType === "agent" || node.resourceType === "workflow")) return true;
1950
+ return false;
1951
+ }
1519
1952
  function OrganizationGraphDetailPanel({
1520
1953
  graph,
1521
1954
  selectedElement,
@@ -1523,6 +1956,8 @@ function OrganizationGraphDetailPanel({
1523
1956
  followUpSections,
1524
1957
  expandAroundPanel,
1525
1958
  onClearSelection,
1959
+ onSelectNode,
1960
+ commandViewData,
1526
1961
  className
1527
1962
  }) {
1528
1963
  const state = getOrganizationGraphDetailState(graph, selectedElement);
@@ -1545,154 +1980,183 @@ function OrganizationGraphDetailPanel({
1545
1980
  ] })
1546
1981
  ] }) });
1547
1982
  }
1983
+ const selectedNode = state.state === "node" ? state.node : null;
1984
+ const linkedNodes = selectedNode && graph ? getLinkedNodesByRelationship(graph, selectedNode.id) : null;
1985
+ const ConfiguredView = selectedNode ? getConfiguredObjectView(selectedNode) : void 0;
1986
+ const defaultTab = selectedNode && shouldDefaultObjectTab(selectedNode) ? "object" : "details";
1548
1987
  return /* @__PURE__ */ jsx(Paper, { withBorder: true, radius: "lg", p: "md", className, children: /* @__PURE__ */ jsxs(Stack, { gap: "md", children: [
1549
- /* @__PURE__ */ jsxs(Group, { justify: "space-between", align: "flex-start", children: [
1550
- /* @__PURE__ */ jsxs(Stack, { gap: 4, children: [
1988
+ /* @__PURE__ */ jsxs(Group, { justify: "space-between", align: "flex-start", wrap: "nowrap", gap: "md", children: [
1989
+ /* @__PURE__ */ jsxs(Stack, { gap: 4, style: { flex: 1, minWidth: 0 }, children: [
1551
1990
  /* @__PURE__ */ jsxs(Group, { gap: "xs", children: [
1552
1991
  /* @__PURE__ */ jsx(Badge, { variant: "light", color: "violet", children: state.semanticCategory }),
1553
1992
  state.state === "node" ? /* @__PURE__ */ jsx(Badge, { variant: "light", color: state.node.enabled === false ? "gray" : "green", children: state.node.enabled === false ? "Disabled" : "Enabled" }) : null,
1554
1993
  state.state === "edge" && state.edge.relationshipType ? /* @__PURE__ */ jsx(Badge, { variant: "light", color: "orange", children: titleCase2(state.edge.relationshipType) }) : null
1555
1994
  ] }),
1556
- /* @__PURE__ */ jsxs(Group, { gap: "xs", wrap: "nowrap", align: "center", children: [
1557
- state.state === "node" ? /* @__PURE__ */ jsx(
1558
- SemanticIcon,
1559
- {
1560
- token: state.node.icon,
1561
- fallbackKind: getNodeIconFallbackKind(state.node.kind),
1562
- size: 18,
1563
- style: { color: "var(--color-text-subtle)" }
1564
- }
1565
- ) : null,
1566
- /* @__PURE__ */ jsx(Text, { fw: 800, size: "lg", style: { minWidth: 0 }, children: state.title })
1567
- ] }),
1568
- /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: state.operationalMeaning })
1995
+ /* @__PURE__ */ jsx(
1996
+ CardHeader,
1997
+ {
1998
+ icon: state.state === "node" ? /* @__PURE__ */ jsx(
1999
+ SemanticIcon,
2000
+ {
2001
+ token: state.node.icon,
2002
+ fallbackKind: getNodeIconFallbackKind(state.node.kind),
2003
+ size: 16
2004
+ }
2005
+ ) : void 0,
2006
+ title: state.title,
2007
+ subtitle: state.operationalMeaning,
2008
+ titleOrder: 4,
2009
+ mb: 0
2010
+ }
2011
+ )
1569
2012
  ] }),
1570
2013
  onClearSelection ? /* @__PURE__ */ jsx(Button, { size: "xs", variant: "subtle", onClick: onClearSelection, children: "Clear" }) : null
1571
2014
  ] }),
1572
2015
  /* @__PURE__ */ jsx(SimpleGrid, { cols: { base: 2, md: 4 }, spacing: "sm", children: state.metrics.map((metric) => /* @__PURE__ */ jsx(MetricCard, { metric }, metric.label)) }),
1573
2016
  expandAroundPanel,
1574
- supplementalSummary && (supplementalSummary.metrics.length > 0 || supplementalSummary.metadata.length > 0) ? /* @__PURE__ */ jsxs(Fragment, { children: [
1575
- /* @__PURE__ */ jsx(
1576
- Divider,
1577
- {
1578
- label: /* @__PURE__ */ jsxs(Group, { gap: 6, children: [
1579
- /* @__PURE__ */ jsx(IconTopologyStar3, { size: 14 }),
1580
- /* @__PURE__ */ jsx(Text, { size: "xs", tt: "uppercase", fw: 700, children: supplementalSummary.title })
1581
- ] }),
1582
- labelPosition: "center"
1583
- }
1584
- ),
1585
- supplementalSummary.description ? /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: supplementalSummary.description }) : null,
1586
- supplementalSummary.metrics.length > 0 ? /* @__PURE__ */ jsx(SimpleGrid, { cols: { base: 2, md: 4 }, spacing: "sm", children: supplementalSummary.metrics.map((metric) => /* @__PURE__ */ jsx(MetricCard, { metric }, `supplemental-${metric.label}`)) }) : null,
1587
- supplementalSummary.metadata.length > 0 ? /* @__PURE__ */ jsx(SimpleGrid, { cols: { base: 1, sm: 2 }, spacing: "sm", children: supplementalSummary.metadata.map((item) => /* @__PURE__ */ jsx(Paper, { withBorder: true, radius: "md", p: "sm", children: /* @__PURE__ */ jsxs(Stack, { gap: 2, children: [
1588
- /* @__PURE__ */ jsx(Text, { size: "xs", tt: "uppercase", fw: 700, c: "dimmed", children: item.label }),
1589
- /* @__PURE__ */ jsx(Text, { size: "sm", fw: 600, children: item.value })
1590
- ] }) }, `supplemental-${item.label}`)) }) : null
1591
- ] }) : null,
1592
- followUpSections && followUpSections.length > 0 ? /* @__PURE__ */ jsxs(Fragment, { children: [
1593
- /* @__PURE__ */ jsx(
1594
- Divider,
1595
- {
1596
- label: /* @__PURE__ */ jsxs(Group, { gap: 6, children: [
1597
- /* @__PURE__ */ jsx(IconShare2, { size: 14 }),
1598
- /* @__PURE__ */ jsx(Text, { size: "xs", tt: "uppercase", fw: 700, children: "Follow-up actions" })
1599
- ] }),
1600
- labelPosition: "center"
1601
- }
1602
- ),
1603
- /* @__PURE__ */ jsx(Stack, { gap: "sm", children: followUpSections.map((section) => /* @__PURE__ */ jsx(FollowUpSectionCard, { section }, section.title)) })
1604
- ] }) : null,
1605
- /* @__PURE__ */ jsx(
1606
- Divider,
1607
- {
1608
- label: /* @__PURE__ */ jsxs(Group, { gap: 6, children: [
1609
- /* @__PURE__ */ jsx(IconTopologyStar3, { size: 14 }),
1610
- /* @__PURE__ */ jsx(Text, { size: "xs", tt: "uppercase", fw: 700, children: "Linked metadata" })
1611
- ] }),
1612
- labelPosition: "center"
1613
- }
1614
- ),
1615
- /* @__PURE__ */ jsx(SimpleGrid, { cols: { base: 1, sm: 2 }, spacing: "sm", children: state.metadata.map((item) => /* @__PURE__ */ jsx(Paper, { withBorder: true, radius: "md", p: "sm", children: /* @__PURE__ */ jsxs(Stack, { gap: 2, children: [
1616
- /* @__PURE__ */ jsx(Text, { size: "xs", tt: "uppercase", fw: 700, c: "dimmed", children: item.label }),
1617
- /* @__PURE__ */ jsx(Text, { size: "sm", fw: 600, children: item.value })
1618
- ] }) }, item.label)) }),
1619
- state.adjacentKindCounts.length > 0 ? /* @__PURE__ */ jsxs(Fragment, { children: [
1620
- /* @__PURE__ */ jsx(
1621
- Divider,
1622
- {
1623
- label: /* @__PURE__ */ jsxs(Group, { gap: 6, children: [
1624
- /* @__PURE__ */ jsx(IconShare2, { size: 14 }),
1625
- /* @__PURE__ */ jsx(Text, { size: "xs", tt: "uppercase", fw: 700, children: "Nearby kinds" })
1626
- ] }),
1627
- labelPosition: "center"
1628
- }
1629
- ),
1630
- /* @__PURE__ */ jsx(Group, { gap: "xs", children: state.adjacentKindCounts.map((item) => /* @__PURE__ */ jsxs(Badge, { variant: "light", color: getNodeKindColor(item.kind), children: [
1631
- item.count,
1632
- " ",
1633
- item.label
1634
- ] }, item.kind)) })
1635
- ] }) : null,
1636
- state.state === "edge" ? /* @__PURE__ */ jsxs(Fragment, { children: [
1637
- /* @__PURE__ */ jsx(
1638
- Divider,
2017
+ /* @__PURE__ */ jsxs(Tabs, { defaultValue: defaultTab, keepMounted: false, children: [
2018
+ /* @__PURE__ */ jsxs(Tabs.List, { children: [
2019
+ /* @__PURE__ */ jsx(Tabs.Tab, { value: "object", children: "Object" }),
2020
+ /* @__PURE__ */ jsx(Tabs.Tab, { value: "details", children: "Details" })
2021
+ ] }),
2022
+ /* @__PURE__ */ jsx(Tabs.Panel, { value: "object", pt: "md", children: selectedNode && linkedNodes ? ConfiguredView ? /* @__PURE__ */ jsx(
2023
+ ConfiguredView,
1639
2024
  {
1640
- label: /* @__PURE__ */ jsxs(Group, { gap: 6, children: [
1641
- /* @__PURE__ */ jsx(IconShare2, { size: 14 }),
1642
- /* @__PURE__ */ jsx(Text, { size: "xs", tt: "uppercase", fw: 700, children: "Endpoints" })
1643
- ] }),
1644
- labelPosition: "center"
2025
+ node: selectedNode,
2026
+ linkedNodes,
2027
+ registry: commandViewData ?? null,
2028
+ onSelectNode: onSelectNode ?? (() => {
2029
+ })
1645
2030
  }
1646
- ),
1647
- /* @__PURE__ */ jsxs(SimpleGrid, { cols: { base: 1, sm: 2 }, spacing: "sm", children: [
1648
- /* @__PURE__ */ jsx(Paper, { withBorder: true, radius: "md", p: "sm", children: /* @__PURE__ */ jsxs(Stack, { gap: 2, children: [
1649
- /* @__PURE__ */ jsx(Text, { size: "xs", tt: "uppercase", fw: 700, c: "dimmed", children: "Source" }),
1650
- /* @__PURE__ */ jsxs(Group, { gap: "xs", children: [
1651
- /* @__PURE__ */ jsx(Text, { fw: 700, children: state.sourceNode?.label ?? state.edge.sourceId }),
1652
- /* @__PURE__ */ jsx(
1653
- Badge,
1654
- {
1655
- size: "xs",
1656
- variant: "light",
1657
- color: state.sourceNode ? getNodeKindColor(state.sourceNode.kind) : "gray",
1658
- children: state.sourceNode ? getNodeKindLabel2(state.sourceNode.kind) : "unresolved"
1659
- }
1660
- )
1661
- ] })
1662
- ] }) }),
1663
- /* @__PURE__ */ jsx(Paper, { withBorder: true, radius: "md", p: "sm", children: /* @__PURE__ */ jsxs(Stack, { gap: 2, children: [
1664
- /* @__PURE__ */ jsx(Text, { size: "xs", tt: "uppercase", fw: 700, c: "dimmed", children: "Target" }),
1665
- /* @__PURE__ */ jsxs(Group, { gap: "xs", children: [
1666
- /* @__PURE__ */ jsx(Text, { fw: 700, children: state.targetNode?.label ?? state.edge.targetId }),
1667
- /* @__PURE__ */ jsx(
1668
- Badge,
1669
- {
1670
- size: "xs",
1671
- variant: "light",
1672
- color: state.targetNode ? getNodeKindColor(state.targetNode.kind) : "gray",
1673
- children: state.targetNode ? getNodeKindLabel2(state.targetNode.kind) : "unresolved"
1674
- }
1675
- )
2031
+ ) : /* @__PURE__ */ jsx(ObjectView, { node: selectedNode, linkedNodes, onSelectNode }) : /* @__PURE__ */ jsxs(Stack, { gap: "sm", children: [
2032
+ /* @__PURE__ */ jsx(Title, { order: 5, children: "Object" }),
2033
+ /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "Select a node to view its object details." })
2034
+ ] }) }),
2035
+ /* @__PURE__ */ jsx(Tabs.Panel, { value: "details", pt: "md", children: /* @__PURE__ */ jsxs(Stack, { gap: "md", children: [
2036
+ supplementalSummary && (supplementalSummary.metrics.length > 0 || supplementalSummary.metadata.length > 0) ? /* @__PURE__ */ jsxs(Fragment, { children: [
2037
+ /* @__PURE__ */ jsx(
2038
+ Divider,
2039
+ {
2040
+ label: /* @__PURE__ */ jsxs(Group, { gap: 6, children: [
2041
+ /* @__PURE__ */ jsx(IconTopologyStar3, { size: 14 }),
2042
+ /* @__PURE__ */ jsx(Text, { size: "xs", tt: "uppercase", fw: 700, children: supplementalSummary.title })
2043
+ ] }),
2044
+ labelPosition: "center"
2045
+ }
2046
+ ),
2047
+ supplementalSummary.description ? /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: supplementalSummary.description }) : null,
2048
+ supplementalSummary.metrics.length > 0 ? /* @__PURE__ */ jsx(SimpleGrid, { cols: { base: 2, md: 4 }, spacing: "sm", children: supplementalSummary.metrics.map((metric) => /* @__PURE__ */ jsx(MetricCard, { metric }, `supplemental-${metric.label}`)) }) : null,
2049
+ supplementalSummary.metadata.length > 0 ? /* @__PURE__ */ jsx(SimpleGrid, { cols: { base: 1, sm: 2 }, spacing: "sm", children: supplementalSummary.metadata.map((item) => /* @__PURE__ */ jsx(Paper, { withBorder: true, radius: "md", p: "sm", children: /* @__PURE__ */ jsxs(Stack, { gap: 2, children: [
2050
+ /* @__PURE__ */ jsx(Text, { size: "xs", tt: "uppercase", fw: 700, c: "dimmed", children: item.label }),
2051
+ /* @__PURE__ */ jsx(Text, { size: "sm", fw: 600, children: item.value })
2052
+ ] }) }, `supplemental-${item.label}`)) }) : null
2053
+ ] }) : null,
2054
+ followUpSections && followUpSections.length > 0 ? /* @__PURE__ */ jsxs(Fragment, { children: [
2055
+ /* @__PURE__ */ jsx(
2056
+ Divider,
2057
+ {
2058
+ label: /* @__PURE__ */ jsxs(Group, { gap: 6, children: [
2059
+ /* @__PURE__ */ jsx(IconShare2, { size: 14 }),
2060
+ /* @__PURE__ */ jsx(Text, { size: "xs", tt: "uppercase", fw: 700, children: "Follow-up actions" })
2061
+ ] }),
2062
+ labelPosition: "center"
2063
+ }
2064
+ ),
2065
+ /* @__PURE__ */ jsx(Stack, { gap: "sm", children: followUpSections.map((section) => /* @__PURE__ */ jsx(FollowUpSectionCard, { section }, section.title)) })
2066
+ ] }) : null,
2067
+ /* @__PURE__ */ jsx(
2068
+ Divider,
2069
+ {
2070
+ label: /* @__PURE__ */ jsxs(Group, { gap: 6, children: [
2071
+ /* @__PURE__ */ jsx(IconTopologyStar3, { size: 14 }),
2072
+ /* @__PURE__ */ jsx(Text, { size: "xs", tt: "uppercase", fw: 700, children: "Linked metadata" })
2073
+ ] }),
2074
+ labelPosition: "center"
2075
+ }
2076
+ ),
2077
+ /* @__PURE__ */ jsx(SimpleGrid, { cols: { base: 1, sm: 2 }, spacing: "sm", children: state.metadata.map((item) => /* @__PURE__ */ jsx(Paper, { withBorder: true, radius: "md", p: "sm", children: /* @__PURE__ */ jsxs(Stack, { gap: 2, children: [
2078
+ /* @__PURE__ */ jsx(Text, { size: "xs", tt: "uppercase", fw: 700, c: "dimmed", children: item.label }),
2079
+ /* @__PURE__ */ jsx(Text, { size: "sm", fw: 600, children: item.value })
2080
+ ] }) }, item.label)) }),
2081
+ state.adjacentKindCounts.length > 0 ? /* @__PURE__ */ jsxs(Fragment, { children: [
2082
+ /* @__PURE__ */ jsx(
2083
+ Divider,
2084
+ {
2085
+ label: /* @__PURE__ */ jsxs(Group, { gap: 6, children: [
2086
+ /* @__PURE__ */ jsx(IconShare2, { size: 14 }),
2087
+ /* @__PURE__ */ jsx(Text, { size: "xs", tt: "uppercase", fw: 700, children: "Nearby kinds" })
2088
+ ] }),
2089
+ labelPosition: "center"
2090
+ }
2091
+ ),
2092
+ /* @__PURE__ */ jsx(Group, { gap: "xs", children: state.adjacentKindCounts.map((item) => /* @__PURE__ */ jsxs(Badge, { variant: "light", color: getNodeKindColor(item.kind), children: [
2093
+ item.count,
2094
+ " ",
2095
+ item.label
2096
+ ] }, item.kind)) })
2097
+ ] }) : null,
2098
+ state.state === "edge" ? /* @__PURE__ */ jsxs(Fragment, { children: [
2099
+ /* @__PURE__ */ jsx(
2100
+ Divider,
2101
+ {
2102
+ label: /* @__PURE__ */ jsxs(Group, { gap: 6, children: [
2103
+ /* @__PURE__ */ jsx(IconShare2, { size: 14 }),
2104
+ /* @__PURE__ */ jsx(Text, { size: "xs", tt: "uppercase", fw: 700, children: "Endpoints" })
2105
+ ] }),
2106
+ labelPosition: "center"
2107
+ }
2108
+ ),
2109
+ /* @__PURE__ */ jsxs(SimpleGrid, { cols: { base: 1, sm: 2 }, spacing: "sm", children: [
2110
+ /* @__PURE__ */ jsx(Paper, { withBorder: true, radius: "md", p: "sm", children: /* @__PURE__ */ jsxs(Stack, { gap: 2, children: [
2111
+ /* @__PURE__ */ jsx(Text, { size: "xs", tt: "uppercase", fw: 700, c: "dimmed", children: "Source" }),
2112
+ /* @__PURE__ */ jsxs(Group, { gap: "xs", children: [
2113
+ /* @__PURE__ */ jsx(Text, { fw: 700, children: state.sourceNode?.label ?? state.edge.sourceId }),
2114
+ /* @__PURE__ */ jsx(
2115
+ Badge,
2116
+ {
2117
+ size: "xs",
2118
+ variant: "light",
2119
+ color: state.sourceNode ? getNodeKindColor(state.sourceNode.kind) : "gray",
2120
+ children: state.sourceNode ? getNodeKindLabel2(state.sourceNode.kind) : "unresolved"
2121
+ }
2122
+ )
2123
+ ] })
2124
+ ] }) }),
2125
+ /* @__PURE__ */ jsx(Paper, { withBorder: true, radius: "md", p: "sm", children: /* @__PURE__ */ jsxs(Stack, { gap: 2, children: [
2126
+ /* @__PURE__ */ jsx(Text, { size: "xs", tt: "uppercase", fw: 700, c: "dimmed", children: "Target" }),
2127
+ /* @__PURE__ */ jsxs(Group, { gap: "xs", children: [
2128
+ /* @__PURE__ */ jsx(Text, { fw: 700, children: state.targetNode?.label ?? state.edge.targetId }),
2129
+ /* @__PURE__ */ jsx(
2130
+ Badge,
2131
+ {
2132
+ size: "xs",
2133
+ variant: "light",
2134
+ color: state.targetNode ? getNodeKindColor(state.targetNode.kind) : "gray",
2135
+ children: state.targetNode ? getNodeKindLabel2(state.targetNode.kind) : "unresolved"
2136
+ }
2137
+ )
2138
+ ] })
2139
+ ] }) })
1676
2140
  ] })
1677
- ] }) })
1678
- ] })
1679
- ] }) : null,
1680
- /* @__PURE__ */ jsx(
1681
- Divider,
1682
- {
1683
- label: /* @__PURE__ */ jsx(Text, { size: "xs", tt: "uppercase", fw: 700, children: state.state === "edge" ? "Surrounding nodes" : "Direct nodes" }),
1684
- labelPosition: "center"
1685
- }
1686
- ),
1687
- state.relatedNodes.length > 0 ? /* @__PURE__ */ jsx(SimpleGrid, { cols: { base: 1, sm: 2 }, spacing: "sm", children: state.relatedNodes.map((item) => /* @__PURE__ */ jsx(RelatedItemCard, { item, itemType: "node" }, item.id)) }) : /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "No nearby nodes were found in the current graph selection." }),
1688
- /* @__PURE__ */ jsx(
1689
- Divider,
1690
- {
1691
- label: /* @__PURE__ */ jsx(Text, { size: "xs", tt: "uppercase", fw: 700, children: state.state === "edge" ? "Surrounding edges" : "Direct edges" }),
1692
- labelPosition: "center"
1693
- }
1694
- ),
1695
- state.relatedEdges.length > 0 ? /* @__PURE__ */ jsx(SimpleGrid, { cols: { base: 1, sm: 2 }, spacing: "sm", children: state.relatedEdges.map((item) => /* @__PURE__ */ jsx(RelatedItemCard, { item, itemType: "edge" }, item.id)) }) : /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "No adjacent edges were found for the current selection." })
2141
+ ] }) : null,
2142
+ /* @__PURE__ */ jsx(
2143
+ Divider,
2144
+ {
2145
+ label: /* @__PURE__ */ jsx(Text, { size: "xs", tt: "uppercase", fw: 700, children: state.state === "edge" ? "Surrounding nodes" : "Direct nodes" }),
2146
+ labelPosition: "center"
2147
+ }
2148
+ ),
2149
+ state.relatedNodes.length > 0 ? /* @__PURE__ */ jsx(SimpleGrid, { cols: { base: 1, sm: 2 }, spacing: "sm", children: state.relatedNodes.map((item) => /* @__PURE__ */ jsx(RelatedItemCard, { item, itemType: "node" }, item.id)) }) : /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "No nearby nodes were found in the current graph selection." }),
2150
+ /* @__PURE__ */ jsx(
2151
+ Divider,
2152
+ {
2153
+ label: /* @__PURE__ */ jsx(Text, { size: "xs", tt: "uppercase", fw: 700, children: state.state === "edge" ? "Surrounding edges" : "Direct edges" }),
2154
+ labelPosition: "center"
2155
+ }
2156
+ ),
2157
+ state.relatedEdges.length > 0 ? /* @__PURE__ */ jsx(SimpleGrid, { cols: { base: 1, sm: 2 }, spacing: "sm", children: state.relatedEdges.map((item) => /* @__PURE__ */ jsx(RelatedItemCard, { item, itemType: "edge" }, item.id)) }) : /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "No adjacent edges were found for the current selection." })
2158
+ ] }) })
2159
+ ] })
1696
2160
  ] }) });
1697
2161
  }
1698
2162
 
@@ -2121,70 +2585,75 @@ function OrganizationGraphFilterToolbar({
2121
2585
  disabled
2122
2586
  }
2123
2587
  ),
2124
- /* @__PURE__ */ jsx(
2125
- MultiSelect,
2126
- {
2127
- label: resourceTypeLabel,
2128
- placeholder: "All resource types",
2129
- data: resourceTypeOptions.map((option) => ({ value: option.resourceType, label: option.label })),
2130
- value: value.resourceTypes,
2131
- onChange: (resourceTypes) => onChange({
2132
- ...value,
2133
- resourceTypes
2134
- }),
2135
- searchable: true,
2136
- clearable: true,
2137
- disabled
2138
- }
2139
- ),
2140
- /* @__PURE__ */ jsxs(Stack, { gap: 6, children: [
2141
- /* @__PURE__ */ jsx(Text, { size: "sm", fw: 500, children: topologyLabel }),
2142
- /* @__PURE__ */ jsx(
2143
- SegmentedControl,
2144
- {
2145
- value: value.topologyPresence,
2146
- onChange: (topologyPresence) => onChange({
2147
- ...value,
2148
- topologyPresence
2149
- }),
2150
- data: TOPOLOGY_PRESENCE_OPTIONS,
2151
- size: "sm",
2152
- fullWidth: true,
2153
- disabled
2154
- }
2155
- )
2156
- ] }),
2157
- /* @__PURE__ */ jsxs(Stack, { gap: 6, children: [
2158
- /* @__PURE__ */ jsx(Text, { size: "sm", fw: 500, children: environmentLabel }),
2159
- /* @__PURE__ */ jsx(
2160
- SegmentedControl,
2161
- {
2162
- value: value.environmentStatus,
2163
- onChange: (environmentStatus) => onChange({
2164
- ...value,
2165
- environmentStatus
2166
- }),
2167
- data: ENVIRONMENT_STATUS_OPTIONS,
2168
- size: "sm",
2169
- fullWidth: true,
2170
- disabled
2171
- }
2172
- )
2173
- ] }),
2174
- /* @__PURE__ */ jsx(
2175
- Switch,
2176
- {
2177
- label: showIntegrationsLabel,
2178
- description: "Hide integration resources and their relationship edges.",
2179
- checked: value.showIntegrations,
2180
- onChange: (event) => onChange({
2181
- ...value,
2182
- showIntegrations: event.currentTarget.checked
2183
- }),
2184
- size: "sm",
2185
- disabled
2186
- }
2187
- ),
2588
+ /* @__PURE__ */ jsx(Accordion, { variant: "contained", defaultValue: null, children: /* @__PURE__ */ jsxs(Accordion.Item, { value: "secondary-filters", children: [
2589
+ /* @__PURE__ */ jsx(Accordion.Control, { children: /* @__PURE__ */ jsx(Text, { size: "sm", fw: 600, children: "More filters" }) }),
2590
+ /* @__PURE__ */ jsx(Accordion.Panel, { children: /* @__PURE__ */ jsxs(Stack, { gap: "sm", pt: 4, children: [
2591
+ /* @__PURE__ */ jsx(
2592
+ MultiSelect,
2593
+ {
2594
+ label: resourceTypeLabel,
2595
+ placeholder: "All resource types",
2596
+ data: resourceTypeOptions.map((option) => ({ value: option.resourceType, label: option.label })),
2597
+ value: value.resourceTypes,
2598
+ onChange: (resourceTypes) => onChange({
2599
+ ...value,
2600
+ resourceTypes
2601
+ }),
2602
+ searchable: true,
2603
+ clearable: true,
2604
+ disabled
2605
+ }
2606
+ ),
2607
+ /* @__PURE__ */ jsxs(Stack, { gap: 6, children: [
2608
+ /* @__PURE__ */ jsx(Text, { size: "sm", fw: 500, children: topologyLabel }),
2609
+ /* @__PURE__ */ jsx(
2610
+ SegmentedControl,
2611
+ {
2612
+ value: value.topologyPresence,
2613
+ onChange: (topologyPresence) => onChange({
2614
+ ...value,
2615
+ topologyPresence
2616
+ }),
2617
+ data: TOPOLOGY_PRESENCE_OPTIONS,
2618
+ size: "sm",
2619
+ fullWidth: true,
2620
+ disabled
2621
+ }
2622
+ )
2623
+ ] }),
2624
+ /* @__PURE__ */ jsxs(Stack, { gap: 6, children: [
2625
+ /* @__PURE__ */ jsx(Text, { size: "sm", fw: 500, children: environmentLabel }),
2626
+ /* @__PURE__ */ jsx(
2627
+ SegmentedControl,
2628
+ {
2629
+ value: value.environmentStatus,
2630
+ onChange: (environmentStatus) => onChange({
2631
+ ...value,
2632
+ environmentStatus
2633
+ }),
2634
+ data: ENVIRONMENT_STATUS_OPTIONS,
2635
+ size: "sm",
2636
+ fullWidth: true,
2637
+ disabled
2638
+ }
2639
+ )
2640
+ ] }),
2641
+ /* @__PURE__ */ jsx(
2642
+ Switch,
2643
+ {
2644
+ label: showIntegrationsLabel,
2645
+ description: "Hide integration resources and their relationship edges.",
2646
+ checked: value.showIntegrations,
2647
+ onChange: (event) => onChange({
2648
+ ...value,
2649
+ showIntegrations: event.currentTarget.checked
2650
+ }),
2651
+ size: "sm",
2652
+ disabled
2653
+ }
2654
+ )
2655
+ ] }) })
2656
+ ] }) }),
2188
2657
  /* @__PURE__ */ jsx(Group, { justify: "flex-end", children: /* @__PURE__ */ jsx(
2189
2658
  Button,
2190
2659
  {
@@ -3865,4 +4334,4 @@ function CommandViewSidebarContent({ timeRange }) {
3865
4334
  );
3866
4335
  }
3867
4336
 
3868
- export { CommandViewSidebarContent, DEFAULT_ORGANIZATION_MODEL_BRANDING, DEFAULT_ORGANIZATION_MODEL_CUSTOMERS, DEFAULT_ORGANIZATION_MODEL_GOALS, DEFAULT_ORGANIZATION_MODEL_IDENTITY, DEFAULT_ORGANIZATION_MODEL_OFFERINGS, DEFAULT_ORGANIZATION_MODEL_OPERATIONS, DEFAULT_ORGANIZATION_MODEL_PROJECTS, DEFAULT_ORGANIZATION_MODEL_ROLES, DEFAULT_ORGANIZATION_MODEL_STATUSES, ExpandAroundPanel, FilterPanel, OrganizationGraphDetailPanel, OrganizationModelSchema, buildCommandViewDrillDownSections, buildOrganizationGraph, createOrganizationGraphFilters, expandAroundGraph, filterOrganizationGraph, formatOrganizationGraphTraceNodeOptionLabel, getCommandViewOperationalOverview, getCommandViewSelectionOperationalSummary, getCommandViewVisibilityProjection, getConnectedHiddenResourceIds, getOrganizationGraphLensConfig, getOrganizationGraphTraceNodeOptions, resolveOrganizationGraphPathTrace, useOrganizationGraphFilters };
4337
+ export { CommandViewSidebarContent, DEFAULT_ORGANIZATION_MODEL_BRANDING, DEFAULT_ORGANIZATION_MODEL_CUSTOMERS, DEFAULT_ORGANIZATION_MODEL_GOALS, DEFAULT_ORGANIZATION_MODEL_IDENTITY, DEFAULT_ORGANIZATION_MODEL_OFFERINGS, DEFAULT_ORGANIZATION_MODEL_OPERATIONS, DEFAULT_ORGANIZATION_MODEL_PROJECTS, DEFAULT_ORGANIZATION_MODEL_RESOURCES, DEFAULT_ORGANIZATION_MODEL_ROLES, DEFAULT_ORGANIZATION_MODEL_STATUSES, DEFAULT_ORGANIZATION_MODEL_SYSTEMS, ExpandAroundPanel, FilterPanel, OrganizationGraphDetailPanel, OrganizationModelSchema, buildCommandViewDrillDownSections, buildOrganizationGraph, createOrganizationGraphFilters, expandAroundGraph, filterOrganizationGraph, formatOrganizationGraphTraceNodeOptionLabel, getCommandViewOperationalOverview, getCommandViewSelectionOperationalSummary, getCommandViewVisibilityProjection, getConnectedHiddenResourceIds, getOrganizationGraphLensConfig, getOrganizationGraphTraceNodeOptions, resolveOrganizationGraphPathTrace, useOrganizationGraphFilters };