@elevasis/ui 2.70.0 → 2.72.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 (72) hide show
  1. package/dist/api/index.js +3 -3
  2. package/dist/app/index.d.ts +28 -2
  3. package/dist/app/index.js +8 -8
  4. package/dist/auth/index.js +4 -4
  5. package/dist/charts/index.js +4 -4
  6. package/dist/{chunk-GZADST64.js → chunk-2454MK7P.js} +7 -7
  7. package/dist/{chunk-26BTE3Z4.js → chunk-753MKWFV.js} +1 -1
  8. package/dist/{chunk-LWYLZUUV.js → chunk-7ESZKTQG.js} +3 -3
  9. package/dist/{chunk-SMH6SQQE.js → chunk-A3JHFZDP.js} +1 -1
  10. package/dist/{chunk-MFCV4JMQ.js → chunk-AFBFSXP3.js} +4 -4
  11. package/dist/{chunk-TJMZUL6E.js → chunk-DJWIIPKW.js} +3 -3
  12. package/dist/{chunk-QDMIFD6F.js → chunk-DKVGO6RJ.js} +1 -1
  13. package/dist/{chunk-LY3IKYTZ.js → chunk-IMZTRDY2.js} +2 -2
  14. package/dist/{chunk-JA2XDMAE.js → chunk-IXBRUIYI.js} +1 -1
  15. package/dist/{chunk-6TT3FQEZ.js → chunk-KIDZXZM5.js} +149 -17
  16. package/dist/{chunk-CCZJ4OWY.js → chunk-LCHL5SM2.js} +1 -1
  17. package/dist/{chunk-5C62IRKS.js → chunk-LEQGGX2U.js} +4 -4
  18. package/dist/{chunk-NM4A63KJ.js → chunk-Q3O3WY7Q.js} +23 -7
  19. package/dist/{chunk-GJQF3S2Q.js → chunk-RRS2QR3W.js} +1 -1
  20. package/dist/{chunk-DUEGHF7A.js → chunk-SV4M2BUI.js} +4 -4
  21. package/dist/{chunk-AGX2CY2O.js → chunk-UZ5JO5TK.js} +1 -1
  22. package/dist/{chunk-C75XWBYZ.js → chunk-XZIOCB5D.js} +1 -1
  23. package/dist/{chunk-VDX6DL7Z.js → chunk-Z2W5VNN3.js} +1 -1
  24. package/dist/{chunk-XKUEO4HG.js → chunk-ZBXCEWKF.js} +3 -3
  25. package/dist/components/index.d.ts +61 -5
  26. package/dist/components/index.js +23 -23
  27. package/dist/components/navigation/index.js +5 -5
  28. package/dist/features/auth/index.d.ts +26 -0
  29. package/dist/features/auth/index.js +6 -6
  30. package/dist/features/clients/index.js +5 -5
  31. package/dist/features/content/index.d.ts +187 -113
  32. package/dist/features/content/index.js +200 -303
  33. package/dist/features/crm/index.d.ts +29 -2
  34. package/dist/features/crm/index.js +6 -6
  35. package/dist/features/dashboard/index.d.ts +1 -1
  36. package/dist/features/dashboard/index.js +6 -6
  37. package/dist/features/delivery/index.d.ts +26 -0
  38. package/dist/features/delivery/index.js +5 -5
  39. package/dist/features/knowledge/index.js +4 -4
  40. package/dist/features/lead-gen/index.d.ts +3 -2
  41. package/dist/features/lead-gen/index.js +6 -6
  42. package/dist/features/monitoring/index.d.ts +33 -3
  43. package/dist/features/monitoring/index.js +7 -7
  44. package/dist/features/monitoring/requests/index.js +5 -5
  45. package/dist/features/operations/index.d.ts +2 -2
  46. package/dist/features/operations/index.js +9 -9
  47. package/dist/features/settings/index.d.ts +26 -0
  48. package/dist/features/settings/index.js +6 -6
  49. package/dist/hooks/access/index.js +4 -4
  50. package/dist/hooks/delivery/index.d.ts +26 -0
  51. package/dist/hooks/delivery/index.js +2 -2
  52. package/dist/hooks/index.d.ts +310 -14
  53. package/dist/hooks/index.js +4 -4
  54. package/dist/hooks/operations/command-view/utils/transformCommandViewData.d.ts +1 -1
  55. package/dist/hooks/published.d.ts +310 -14
  56. package/dist/hooks/published.js +4 -4
  57. package/dist/initialization/index.d.ts +26 -0
  58. package/dist/knowledge/index.d.ts +2 -2
  59. package/dist/knowledge/index.js +18 -18
  60. package/dist/{knowledge-search-index-LP2WVSQX.js → knowledge-search-index-RZLIVWPJ.js} +5 -5
  61. package/dist/layout/index.js +7 -7
  62. package/dist/profile/index.d.ts +26 -0
  63. package/dist/provider/index.d.ts +28 -2
  64. package/dist/provider/index.js +4 -4
  65. package/dist/provider/published.d.ts +28 -2
  66. package/dist/provider/published.js +4 -4
  67. package/dist/supabase/index.d.ts +50 -0
  68. package/dist/test-utils/index.js +3 -3
  69. package/dist/types/index.d.ts +60 -4
  70. package/dist/utils/index.d.ts +1 -1
  71. package/dist/utils/index.js +1 -1
  72. package/package.json +5 -5
@@ -1,8 +1,8 @@
1
1
  import { mantineThemeOverride, createCssVariablesResolver, PresetsProvider } from './chunk-R6NMRXNO.js';
2
2
  import { PRESETS, getPreset, AppBackground, generateShades } from './chunk-RBGVNPA6.js';
3
3
  import { useSupabase } from './chunk-MKH2KOAO.js';
4
- import { HTTP_HEADERS, ApiClientProvider, useApiClient } from './chunk-VDX6DL7Z.js';
5
- import { showApiErrorNotification, showSuccessNotification, projectKeys, noteKeys, taskKeys, milestoneKeys } from './chunk-C75XWBYZ.js';
4
+ import { HTTP_HEADERS, ApiClientProvider, useApiClient } from './chunk-Z2W5VNN3.js';
5
+ import { showApiErrorNotification, showSuccessNotification, projectKeys, noteKeys, taskKeys, milestoneKeys } from './chunk-XZIOCB5D.js';
6
6
  import { topbarHeight, sidebarTransitionDuration, sidebarBottomSectionHeight, SubshellSidebarSection, sidebarItemPadding, sidebarItemHeight, sidebarIconSize, sidebarIconStroke, sidebarIconInnerSize, SubshellNavItem } from './chunk-MISHPEJX.js';
7
7
  import { CardHeader } from './chunk-62GVNH5U.js';
8
8
  import { InitializationContext, useInitialization, InitializationProvider } from './chunk-P45GQ3ZW.js';
@@ -12,7 +12,7 @@ import { getStatusIcon } from './chunk-BLXJEIQS.js';
12
12
  import { invalidateOrgScopedQueries, OrganizationProvider } from './chunk-UD657ICS.js';
13
13
  import { OrganizationContext, useOrganization } from './chunk-DD3CCMCZ.js';
14
14
  import { ProfileProvider } from './chunk-RT4KRGZT.js';
15
- import { LabelSchema, DescriptionSchema, PathSchema, ModelIdSchema, IconNameSchema, SystemLifecycleSchema, OntologyIdSchema, SystemPathSchema, ActionInvocationSchema, SystemIdSchema, NodeIdStringSchema, JsonValueSchema, SystemInterfaceRefSchema, EntitiesDomainSchema, ActionsDomainSchema, DEFAULT_ORGANIZATION_MODEL_ACTIONS, OntologyScopeSchema, DEFAULT_ONTOLOGY_SCOPE, SystemsDomainSchema, DEFAULT_ORGANIZATION_MODEL_SYSTEMS, formatOntologyId, listResolvedOntologyRecords, getErrorInfo, getErrorTitle, formatErrorMessage, compileOrganizationOntology, listAllSystems, ontologyGraphNodeId, parseOntologyId, getSystem, STALE_TIME_DEFAULT, GC_TIME_SHORT, STALE_TIME_MONITORING, getResourceIcon, formatTimeAgo, APIClientError, getResourcesForSystem, STALE_TIME_ADMIN, GC_TIME_MEDIUM, formatRelativeTime, PAGE_SIZE_DEFAULT, devOnlyFor, topLevel, parentOf, ancestorsOf, childrenOf, findById, findByPath, resolveSystemConfig, defaultPathFor } from './chunk-NM4A63KJ.js';
15
+ import { LabelSchema, DescriptionSchema, PathSchema, ModelIdSchema, IconNameSchema, SystemLifecycleSchema, OntologyIdSchema, SystemPathSchema, ActionInvocationSchema, SystemIdSchema, NodeIdStringSchema, JsonValueSchema, SystemInterfaceRefSchema, EntitiesDomainSchema, ActionsDomainSchema, DEFAULT_ORGANIZATION_MODEL_ACTIONS, OntologyScopeSchema, DEFAULT_ONTOLOGY_SCOPE, SystemsDomainSchema, DEFAULT_ORGANIZATION_MODEL_SYSTEMS, formatOntologyId, listResolvedOntologyRecords, getErrorInfo, getErrorTitle, formatErrorMessage, compileOrganizationOntology, listAllSystems, ontologyGraphNodeId, parseOntologyId, getSystem, STALE_TIME_DEFAULT, GC_TIME_SHORT, STALE_TIME_MONITORING, getResourceIcon, formatTimeAgo, APIClientError, getResourcesForSystem, STALE_TIME_ADMIN, GC_TIME_MEDIUM, formatRelativeTime, PAGE_SIZE_DEFAULT, devOnlyFor, topLevel, parentOf, ancestorsOf, childrenOf, findById, findByPath, resolveSystemConfig, defaultPathFor } from './chunk-Q3O3WY7Q.js';
16
16
  import { getTimeRangeLabel, getTimeRangeDates, formatBucketTime, REFETCH_INTERVAL_DASHBOARD, WS_MAX_RETRIES_BEFORE_ERROR, WS_RECONNECT_BASE_DELAY, WS_RECONNECT_MAX_DELAY, REFETCH_INTERVAL_RUNNING, debounce } from './chunk-Y6I3IC45.js';
17
17
  import { ResourceStatusColors } from './chunk-6SSQGWK7.js';
18
18
  import { ElevasisServiceContext, useElevasisServices, ElevasisServiceProvider } from './chunk-BI5VDO2K.js';
@@ -2102,6 +2102,7 @@ var ContentPayloadFieldDeclarationSchema = z.object({
2102
2102
  type: ContentPayloadFieldTypeSchema,
2103
2103
  required: z.boolean().optional()
2104
2104
  });
2105
+ var ContentWorkspaceRouteSchema = z.string().trim().min(1).max(400).regex(/^\//, 'workspaceRoute must be an app-relative path beginning with "/"');
2105
2106
  var ContentPipelineStepDeclarationSchema = z.object({
2106
2107
  label: z.string().trim().min(1).max(160).optional(),
2107
2108
  description: z.string().trim().min(1).max(2e3).optional(),
@@ -2127,6 +2128,25 @@ var ContentPipelineStepDeclarationSchema = z.object({
2127
2128
  * Resource at all.
2128
2129
  */
2129
2130
  actionId: z.string().trim().min(1).max(200).optional(),
2131
+ /**
2132
+ * Per-step override of the pipeline's `workspaceRoute`. Absent on almost every
2133
+ * step -- the pipeline-level route is the common case, and this exists for the
2134
+ * chains whose gates are genuinely different screens (the video pipeline
2135
+ * reviews text candidates, then rendered video, then copy plus a schedule).
2136
+ *
2137
+ * Resolution is override-then-fallback: a display surface takes this when the
2138
+ * step declares one and the pipeline's otherwise. See `ContentWorkspaceRouteSchema`.
2139
+ */
2140
+ workspaceRoute: ContentWorkspaceRouteSchema.optional(),
2141
+ payloadFields: z.array(ContentPayloadFieldDeclarationSchema).default([])
2142
+ });
2143
+ function resolveContentWorkspaceRoute(pipeline, step) {
2144
+ return step?.workspaceRoute ?? pipeline?.workspaceRoute;
2145
+ }
2146
+ z.object({
2147
+ label: z.string().trim().min(1).max(160).optional(),
2148
+ description: z.string().trim().min(1).max(2e3).optional(),
2149
+ /** D17: the template-declared serializable field list for this kind's payload. */
2130
2150
  payloadFields: z.array(ContentPayloadFieldDeclarationSchema).default([])
2131
2151
  });
2132
2152
 
@@ -2315,6 +2335,7 @@ function contentStepsFromCatalog(stepCatalog) {
2315
2335
  reviewMode: parsed.data.reviewMode,
2316
2336
  ...parsed.data.advancesTo !== void 0 ? { advancesTo: parsed.data.advancesTo } : {},
2317
2337
  ...parsed.data.actionId !== void 0 ? { actionId: parsed.data.actionId } : {},
2338
+ ...parsed.data.workspaceRoute !== void 0 ? { workspaceRoute: parsed.data.workspaceRoute } : {},
2318
2339
  payloadFields: parsed.data.payloadFields
2319
2340
  }
2320
2341
  ];
@@ -2332,6 +2353,7 @@ function getContentBuildTemplates(model) {
2332
2353
  const stepCatalogId = stringValue(templateEntry.stepCatalog);
2333
2354
  const stepCatalog = stepCatalogId !== void 0 ? stepCatalogs.get(stepCatalogId) : void 0;
2334
2355
  const steps = stepCatalog === void 0 ? [] : contentStepsFromCatalog(stepCatalog);
2356
+ const workspaceRoute = ContentWorkspaceRouteSchema.safeParse(templateEntry.workspaceRoute);
2335
2357
  return {
2336
2358
  order: numberValue(templateEntry.order, Number.MAX_SAFE_INTEGER),
2337
2359
  template: {
@@ -2339,6 +2361,7 @@ function getContentBuildTemplates(model) {
2339
2361
  label: stringValue(templateEntry.label) ?? templateId,
2340
2362
  ...stringValue(templateEntry.description) ? { description: stringValue(templateEntry.description) } : {},
2341
2363
  ...stringValue(templateEntry.color) ? { color: stringValue(templateEntry.color) } : {},
2364
+ ...workspaceRoute.success ? { workspaceRoute: workspaceRoute.data } : {},
2342
2365
  steps
2343
2366
  }
2344
2367
  };
@@ -4266,7 +4289,7 @@ function buildContentItems(vocabulary) {
4266
4289
  ];
4267
4290
  }
4268
4291
  var CONTENT_ITEMS = buildContentItems(DEFAULT_CONTENT_VOCABULARY);
4269
- var ContentSidebarMiddle = ({ createItems, items } = {}) => {
4292
+ var ContentSidebarMiddle = ({ workspaceItems, createItems, items } = {}) => {
4270
4293
  const { currentPath, navigate } = useRouterContext();
4271
4294
  const { vocabulary } = useContentConfig();
4272
4295
  const navItems = items ?? buildContentItems(vocabulary);
@@ -4285,16 +4308,17 @@ var ContentSidebarMiddle = ({ createItems, items } = {}) => {
4285
4308
  item.to
4286
4309
  );
4287
4310
  });
4288
- const hasCreateItems = createItems !== void 0 && createItems.length > 0;
4311
+ const resolvedWorkspaceItems = workspaceItems ?? createItems;
4312
+ const hasWorkspaceItems = resolvedWorkspaceItems !== void 0 && resolvedWorkspaceItems.length > 0;
4289
4313
  return /* @__PURE__ */ jsxs(Stack, { gap: 0, style: { flex: 1, overflowY: "auto" }, children: [
4290
- /* @__PURE__ */ jsx(SubshellSidebarSection, { icon: IconPencil, label: "Create" }),
4291
- hasCreateItems ? /* @__PURE__ */ jsx(Stack, { gap: 0, p: "sm", children: renderItems2(createItems) }) : /* @__PURE__ */ jsx(Box, { p: "sm", c: "var(--color-text-subtle)", style: { fontSize: "var(--mantine-font-size-xs)" }, children: "No authoring pages declared yet." }),
4314
+ /* @__PURE__ */ jsx(SubshellSidebarSection, { icon: IconPencil, label: "Workspace" }),
4315
+ hasWorkspaceItems ? /* @__PURE__ */ jsx(Stack, { gap: 0, p: "sm", children: renderItems2(resolvedWorkspaceItems) }) : /* @__PURE__ */ jsx(Box, { p: "sm", c: "var(--color-text-subtle)", style: { fontSize: "var(--mantine-font-size-xs)" }, children: "No workspace pages declared yet." }),
4292
4316
  /* @__PURE__ */ jsx(SubshellSidebarSection, { icon: IconRoute, label: "Content Pipeline", withTopBorder: true }),
4293
4317
  /* @__PURE__ */ jsx(Stack, { gap: 0, p: "sm", children: renderItems2(navItems) })
4294
4318
  ] });
4295
4319
  };
4296
- var ContentSidebar = ({ createItems, children } = {}) => {
4297
- return /* @__PURE__ */ jsx(Stack, { gap: 0, style: { height: "100%", display: "flex", flexDirection: "column" }, children: children ?? /* @__PURE__ */ jsx(ContentSidebarMiddle, { createItems }) });
4320
+ var ContentSidebar = ({ workspaceItems, createItems, children } = {}) => {
4321
+ return /* @__PURE__ */ jsx(Stack, { gap: 0, style: { height: "100%", display: "flex", flexDirection: "column" }, children: children ?? /* @__PURE__ */ jsx(ContentSidebarMiddle, { workspaceItems: workspaceItems ?? createItems }) });
4298
4322
  };
4299
4323
  var MISSING_CONTEXT_ANSWER = {
4300
4324
  allowed: false,
@@ -12294,7 +12318,10 @@ var contentKeys = {
12294
12318
  itemAttempts: (organizationId, itemId) => [...contentKeys.items(), "attempts", organizationId, itemId],
12295
12319
  distributions: () => [...contentKeys.all, "distributions"],
12296
12320
  distributionsList: (organizationId, filters) => [...contentKeys.distributions(), "list", organizationId, filters],
12297
- distributionDetail: (organizationId, distributionId) => [...contentKeys.distributions(), "detail", organizationId, distributionId]
12321
+ distributionDetail: (organizationId, distributionId) => [...contentKeys.distributions(), "detail", organizationId, distributionId],
12322
+ sourceAssets: () => [...contentKeys.all, "source-assets"],
12323
+ sourceAssetsList: (organizationId, filters) => [...contentKeys.sourceAssets(), "list", organizationId, filters],
12324
+ sourceAssetDetail: (organizationId, sourceAssetId) => [...contentKeys.sourceAssets(), "detail", organizationId, sourceAssetId]
12298
12325
  };
12299
12326
  function useContentItems(filters = {}) {
12300
12327
  const { apiRequest, isReady, workOSOrganizationId } = useElevasisServices();
@@ -12434,6 +12461,76 @@ function useReviewContentItem() {
12434
12461
  }
12435
12462
  });
12436
12463
  }
12464
+ function useContentSourceAssets(filters = {}) {
12465
+ const { apiRequest, isReady, workOSOrganizationId } = useElevasisServices();
12466
+ return useQuery({
12467
+ queryKey: contentKeys.sourceAssetsList(workOSOrganizationId ?? void 0, filters),
12468
+ queryFn: async () => {
12469
+ const { kind, limit, offset } = filters;
12470
+ const params = new URLSearchParams();
12471
+ if (kind) params.set("kind", kind);
12472
+ if (limit !== void 0) params.set("limit", String(limit));
12473
+ if (offset !== void 0) params.set("offset", String(offset));
12474
+ const query = params.toString();
12475
+ return apiRequest(`/content/source-assets${query ? "?" + query : ""}`);
12476
+ },
12477
+ enabled: isReady
12478
+ });
12479
+ }
12480
+ function useContentSourceAsset(sourceAssetId) {
12481
+ const { apiRequest, isReady, workOSOrganizationId } = useElevasisServices();
12482
+ return useQuery({
12483
+ queryKey: contentKeys.sourceAssetDetail(workOSOrganizationId ?? void 0, sourceAssetId),
12484
+ queryFn: async () => {
12485
+ return apiRequest(`/content/source-assets/${sourceAssetId}`);
12486
+ },
12487
+ enabled: isReady && !!sourceAssetId
12488
+ });
12489
+ }
12490
+ function useCreateContentSourceAsset() {
12491
+ const { apiRequest } = useElevasisServices();
12492
+ const queryClient = useQueryClient();
12493
+ return useMutation({
12494
+ mutationFn: async (asset) => {
12495
+ return apiRequest("/content/source-assets", {
12496
+ method: "POST",
12497
+ body: JSON.stringify(asset)
12498
+ });
12499
+ },
12500
+ onSuccess: () => {
12501
+ void queryClient.invalidateQueries({ queryKey: contentKeys.sourceAssets() });
12502
+ },
12503
+ onError: (error) => {
12504
+ console.error("Failed to create content source asset:", error);
12505
+ showApiErrorNotification(error);
12506
+ }
12507
+ });
12508
+ }
12509
+ function useUpdateContentSourceAsset() {
12510
+ const { apiRequest, workOSOrganizationId } = useElevasisServices();
12511
+ const queryClient = useQueryClient();
12512
+ return useMutation({
12513
+ mutationFn: async ({
12514
+ sourceAssetId,
12515
+ updates
12516
+ }) => {
12517
+ return apiRequest(`/content/source-assets/${sourceAssetId}`, {
12518
+ method: "PATCH",
12519
+ body: JSON.stringify(updates)
12520
+ });
12521
+ },
12522
+ onSuccess: (_data, { sourceAssetId }) => {
12523
+ void queryClient.invalidateQueries({ queryKey: contentKeys.sourceAssets() });
12524
+ void queryClient.invalidateQueries({
12525
+ queryKey: contentKeys.sourceAssetDetail(workOSOrganizationId ?? void 0, sourceAssetId)
12526
+ });
12527
+ },
12528
+ onError: (error) => {
12529
+ console.error("Failed to update content source asset:", error);
12530
+ showApiErrorNotification(error);
12531
+ }
12532
+ });
12533
+ }
12437
12534
  function sumStatusCounts(statusKeys, totals) {
12438
12535
  const countsByStatus = {};
12439
12536
  let totalItems = 0;
@@ -13161,14 +13258,33 @@ function useProjectRealtime(projectId) {
13161
13258
  });
13162
13259
  }
13163
13260
 
13164
- // src/features/content/board/deriveBoard.ts
13261
+ // ../core/src/content/review-gates.ts
13262
+ function isOpenContentReviewGate(entry, step) {
13263
+ if (!step || step.reviewMode !== "queued") return false;
13264
+ if (entry.status === "running" || entry.executionId === null) return false;
13265
+ return true;
13266
+ }
13267
+ function getOpenContentReviewGates(processingState, steps) {
13268
+ const stepByKey = Array.isArray(steps) ? new Map(steps.map((step) => [step.key, step])) : steps;
13269
+ const gates = [];
13270
+ for (const [stepKey, entry] of Object.entries(processingState)) {
13271
+ const step = stepByKey.get(stepKey);
13272
+ if (!isOpenContentReviewGate(entry, step)) continue;
13273
+ gates.push({ stepKey, entry, step });
13274
+ }
13275
+ gates.sort((a, b) => Date.parse(a.entry.attemptedAt) - Date.parse(b.entry.attemptedAt));
13276
+ return gates;
13277
+ }
13278
+
13279
+ // ../core/src/content/derive-board.ts
13165
13280
  function sortPipelineSteps(steps) {
13166
13281
  return [...steps].sort((a, b) => {
13167
13282
  if (a.order !== b.order) return a.order - b.order;
13168
13283
  return a.key < b.key ? -1 : a.key > b.key ? 1 : 0;
13169
13284
  });
13170
13285
  }
13171
- function deriveItemPlacement(processingState, sortedSteps) {
13286
+ function deriveItemPlacement(item, sortedSteps) {
13287
+ const processingState = item.processingState;
13172
13288
  const stateKeys = Object.keys(processingState);
13173
13289
  if (stateKeys.length > 0) {
13174
13290
  const catalogKeys = new Set(sortedSteps.map((step) => step.key));
@@ -13182,6 +13298,10 @@ function deriveItemPlacement(processingState, sortedSteps) {
13182
13298
  return !entry || entry.status !== "success";
13183
13299
  });
13184
13300
  if (!currentStep) {
13301
+ const lastStep = sortedSteps[sortedSteps.length - 1];
13302
+ if (lastStep !== void 0 && lastStep.reviewMode !== "none" && item.reviewedAt === null) {
13303
+ return { bucket: "column", stepKey: lastStep.key };
13304
+ }
13185
13305
  return { bucket: "done", stepKey: null };
13186
13306
  }
13187
13307
  return { bucket: "column", stepKey: currentStep.key };
@@ -13197,7 +13317,7 @@ function deriveContentBoard(items, pipeline, now) {
13197
13317
  const done = [];
13198
13318
  const unplaced = [];
13199
13319
  for (const item of items) {
13200
- const placement = deriveItemPlacement(item.processingState, sortedSteps);
13320
+ const placement = deriveItemPlacement(item, sortedSteps);
13201
13321
  const step = placement.stepKey ? stepsByKey.get(placement.stepKey) : void 0;
13202
13322
  const card = {
13203
13323
  item,
@@ -13243,7 +13363,7 @@ function deriveContentBoard(items, pipeline, now) {
13243
13363
  };
13244
13364
  }
13245
13365
 
13246
- // src/features/content/board/itemIdentity.ts
13366
+ // ../core/src/content/item-identity.ts
13247
13367
  function getContentItemIdentity(item, payloadFields, maxLength = 80) {
13248
13368
  const candidate = resolveIdentityCandidate(item, payloadFields);
13249
13369
  return normalizeIdentity(candidate, maxLength);
@@ -13320,6 +13440,18 @@ function ItemRow({ item, onClick }) {
13320
13440
  }
13321
13441
  function MyReviewQueuePanel({ onItemClick, onSeeAll, showSectionLabel = true }) {
13322
13442
  const { data, isLoading, isError } = useContentItems({ limit: FETCH_LIMIT });
13443
+ const { pipelines } = useContentConfig();
13444
+ const { navigate } = useRouterContext();
13445
+ const handleItemClick = (item) => {
13446
+ const pipeline = pipelines.find((candidate) => candidate.id === item.pipelineId);
13447
+ const openGate = getOpenContentReviewGates(item.processingState ?? {}, pipeline?.steps ?? [])[0];
13448
+ const workspaceRoute = resolveContentWorkspaceRoute(pipeline, openGate?.step);
13449
+ if (workspaceRoute) {
13450
+ navigate(workspaceRoute);
13451
+ return;
13452
+ }
13453
+ onItemClick(item.id);
13454
+ };
13323
13455
  const pending = (data?.data ?? []).filter((item) => item.reviewedAt === null).sort((a, b) => Date.parse(a.updatedAt) - Date.parse(b.updatedAt));
13324
13456
  const total = pending.length;
13325
13457
  const visible = pending.slice(0, VISIBLE_LIMIT);
@@ -13331,7 +13463,7 @@ function MyReviewQueuePanel({ onItemClick, onSeeAll, showSectionLabel = true })
13331
13463
  isLoading && /* @__PURE__ */ jsx(Center, { py: 4, children: /* @__PURE__ */ jsx(Loader, { size: "xs" }) }),
13332
13464
  isError && /* @__PURE__ */ jsx(Text, { size: "xs", c: "var(--color-error)", children: "Failed to load review queue" }),
13333
13465
  !isLoading && !isError && visible.length === 0 && /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", children: "Nothing waiting on review." }),
13334
- !isLoading && !isError && visible.map((item) => /* @__PURE__ */ jsx(ItemRow, { item, onClick: () => onItemClick(item.id) }, item.id)),
13466
+ !isLoading && !isError && visible.map((item) => /* @__PURE__ */ jsx(ItemRow, { item, onClick: () => handleItemClick(item) }, item.id)),
13335
13467
  onSeeAll && total > VISIBLE_LIMIT && /* @__PURE__ */ jsx(UnstyledButton, { onClick: onSeeAll, mt: 2, style: { display: "inline-block" }, children: /* @__PURE__ */ jsxs(Text, { size: "xs", c: "dimmed", style: { textDecoration: "underline" }, children: [
13336
13468
  "See all (",
13337
13469
  total,
@@ -15764,7 +15896,7 @@ function ConceptInfoControl({ description }) {
15764
15896
  var indexPromise = null;
15765
15897
  function loadSearchIndex() {
15766
15898
  if (!indexPromise) {
15767
- indexPromise = import('./knowledge-search-index-LP2WVSQX.js').then(
15899
+ indexPromise = import('./knowledge-search-index-RZLIVWPJ.js').then(
15768
15900
  (mod) => buildSearchIndex(mod.default ?? mod)
15769
15901
  );
15770
15902
  }
@@ -16573,4 +16705,4 @@ function createTestSystemsProvider({
16573
16705
  };
16574
16706
  }
16575
16707
 
16576
- export { APIErrorAlert, AccessGuard, AccessKeys, ActivityTimeline, ActivityTrendChart, AgentResourceEntrySchema, ApiKeyService, AppearanceContext, AppearanceProvider, CONTENT_ITEMS, CRM_ITEMS, CenteredErrorState, ChartFrame, CheckpointGroup, CollapsibleSection, CombinedTrendChart, CommandQueueSidebar, CommandQueueSidebarMiddle, CommandQueueSidebarTop, ConfirmationInputModal, ConfirmationModal, ContentSidebar, ContentSidebarMiddle, ContextViewer, CostTrendChart, CredentialSchemas, CredentialService, CrmActionsProvider, CrmSidebarMiddle, CustomModal, CustomSelector, CyberAreaChart, CyberDonut, CyberDonutTooltip, CyberLegendItem, DEFAULT_CONTENT_VOCABULARY, DEFAULT_ORGANIZATION_GRAPH_FILTERS, DEFAULT_WAIT_FOR_ORGANIZATION, DeploymentService, DetailCardSkeleton, EMPTY_LIST_ACTIONS, ElevasisCoreProvider, ElevasisLoader, ElevasisSystemsProvider, ElevasisUIProvider, EmptyState, FILTERABLE_DOMAIN_KEYS, FeatureUnavailableState, GlowDot, HeroStatsRow, IdentityDomainSchema, IntegrationResourceEntrySchema, JsonViewer, KNOWLEDGE_DOMAINS_WITH_PANELS, KNOWLEDGE_ICON_TOKEN_BY_KIND, KnowledgeSearchBar, KnowledgeTree, LEAD_GEN_ITEMS, LeadGenSidebarMiddle, ListActionsProvider, ListSkeleton, MEMBERSHIP_STATUS_COLORS, MyReviewQueuePanel, MyTasksPanel, NavigationButton, NotificationProvider, OM_NESTED_TREE_GROUPS, OM_TREE_GROUPS, ORGANIZATION_GRAPH_EDGE_KIND_LABELS, ORGANIZATION_GRAPH_EDGE_KIND_MEANINGS, ORGANIZATION_GRAPH_NODE_KIND_DETAIL_LABELS, ORGANIZATION_GRAPH_NODE_KIND_LABELS, ORGANIZATION_GRAPH_NODE_KIND_MEANINGS, ORGANIZATION_GRAPH_NODE_KIND_ORDER, OperationsService, OperationsSidebar, OperationsSidebarMiddle, OperationsSidebarTop, OrganizationMembershipService, OrganizationModelDriftActionIcon, PROVISIONING_STATE_DISPLAY, PageNotFound, PageTitleCaption, ProtectedRoute, QuickCreateActions, RequestActionIcon, RequestModal, ResourceCard, ResourcesSidebar, RoleSchema, SAVED_VIEW_PRESETS, SYSTEM_RESOURCE_KINDS, SavedViewsPanel, ScriptResourceEntrySchema, SemanticIcon, SessionListItem, SessionsSidebar, StatCard, StatCardSkeleton, StatsCardSkeleton, StatusBadge, SubshellContainer, SubshellContentContainer, SubshellRightSideContainer, SubshellSidebar, SubshellSidebarLoader, SurfaceDefinitionSchema, SystemShell, TabCountBadge, TimeRangeSelector, TrendIndicator, WebhookEndpointService, WorkflowResourceEntrySchema, acquisitionListKeys, aggregateSystemMetrics, buildKnowledgeOmTreeData, buildOrganizationGraph, clientsKeys, clientsManifest, collectResourceFilterFacets, companyKeys, computeProtectedRouteGate, contactKeys, contentKeys, contentManifest, createTestSystemsProvider, crmManifest, dealKeys, dealNoteKeys, dealTaskKeys, deliveryManifest, deriveActions, deriveContentBoard, executionsKeys, extendSemanticIconRegistry, filterByDomainFilters, findKnowledgeTreeNodeByValue, findListActionByAction, findOmTreeGroup, formatResourceAttribution, getAllBuildTemplates, getConceptDefinition, getContentItemIdentity, getCrmPipelineCatalog, getKnowledgeDomainFolderCommand, getKnowledgeGraphNodeCommand, getKnowledgeIconToken, getKnowledgeNodeReadCommand, getKnowledgeOntologyProjection, getKnowledgeTreeFolderCommand, getLeadGenStageCatalog, getListActionWorkflowId, getOntologyDomainLabel, getPrimaryOntologyItemsForDomain, getResourceFilterFacetIds, getSemanticIconComponent, getSeriesColor, getSessionView, getSharedOrganizationGraph, isSessionCapable, knowledgeManifest, labelResourceFilterFacet, leadGenArtifactKeys, leadGenListCompanyKeys, leadGenListMemberKeys, leadGenManifest, monitoringManifest, normaliseConceptKey, observabilityKeys, operationsKeys, operationsManifest, pickLatestRunAt, projectActivityKeys, projectNavigationGroups, projectNavigationSurfaces, requestTopbarActionManifest, requestsKeys, resolveContentStepResource, resolveContentVocabulary, resolveSemanticIconComponent, scheduleKeys, sessionsKeys, settingsManifest, sortData, submittedRequestsManifest, sumStatusCounts, transformMembershipToTableRow, useAccess, useActivateDeployment, useActivities, useActivitiesRealtime, useActivityFilters, useActivityTrend, useAddCompaniesToList, useAddContactsToList, useAppearance, useArchiveSession, useArchivedLogs, useArtifacts, useAssignRole, useBatchDelete, useBatchTelemetry, useBatchedResourcesHealth, useBulkDeleteExecutions, useBusinessImpact, useCancelExecution, useCancelSchedule, useCheckpointTasks, useClient, useClientStatus, useClients, useCommandQueue, useCommandQueueTask, useCommandQueueTotals, useCommandViewData, useCommandViewDomainFilters, useCommandViewStats, useCommandViewStore, useCompanies, useCompany, useCompanyFacets, useCompleteDealTask, useContact, useContacts, useContentConfig, useContentDistribution, useContentDistributions, useContentItem, useContentItemAttempts, useContentItems, useContentPipelineSummary, useCostBreakdown, useCostByModel, useCostSummary, useCostTrends, useCreateApiKey, useCreateArtifact, useCreateClient, useCreateCompany, useCreateContact, useCreateCredential, useCreateDealNote, useCreateDealTask, useCreateList, useCreateOrgRole, useCreateSchedule, useCreateSession, useCreateWebhookEndpoint, useCredentials, useCrmActions, useCyberColors, useDashboardMetrics, useDeactivateDeployment, useDeactivateMembership, useDealDetail, useDealNotes, useDealTasks, useDealTasksDue, useDeals, useDealsLookup, useDealsSummary, useDeleteApiKey, useDeleteClient, useDeleteCompanies, useDeleteContacts, useDeleteCredential, useDeleteDeal, useDeleteDeployment, useDeleteExecution, useDeleteList, useDeleteOrgRole, useDeleteRequest, useDeleteSchedule, useDeleteSession, useDeleteTask, useDeleteWebhookEndpoint, useDeriveActions, useEffectivePermissions, useElevasisSystems, useEndSession, useErrorAnalysis, useErrorDetail, useErrorDetails, useErrorDistribution, useErrorNotification, useErrorTrends, useExecuteAction, useExecuteAsync, useExecuteResource, useExecution, useExecutionHealth, useExecutionLogSSE, useExecutionLogs, useExecutionLogsFilters, useExecutionPanelState, useExecutionSSE, useExecutions, useGetExecutionHistory, useGetSchedule, useInFlightExecutions, useLeadGenActionRegistry, useLeadGenBulkActions, useLeadGenHeaderActions, useLeadGenRowActions, useList, useListActions, useListApiKeys, useListDeployments, useListExecutions, useListMember, useListMembers, useListProgress, useListRecords, useListSchedules, useListWebhookEndpoints, useLists, useListsTelemetry, useMarkAllAsRead, useMarkAsRead, useNotificationAdapter, useNotificationCount, useNotifications, useOptionalElevasisSystems, useOrgRoles, useOrganizationMembers, useOrganizationModelDrift, usePaginationState, usePatchTask, usePauseSchedule, usePermissionCatalog, useProjectActivities, useProjectRealtime, useReactivateMembership, useRecentExecutionsByResource, useRemoveCompaniesFromList, useRequest, useRequestsList, useResolveAllErrors, useResolveError, useResolveErrorsByExecution, useResolvedOrganizationModel, useResourceDefinition, useResourceErrors, useResourceExecutions, useResourceSearch, useResources, useResourcesDomainFilters, useResourcesHealth, useResumeSchedule, useRetryExecution, useReviewContentItem, useRevokeRole, useSSEConnection, useScheduledTasks, useSession, useSessionCheck, useSessionExecution, useSessionExecutions, useSessionMessages, useSessionWebSocket, useSessions, useSortedData, useStableAccessToken, useStatusFilter, useSubmitAction, useSubmitRequest, useSuccessNotification, useSystemHealth, useSystemsViewState, useTableSelection, useTableSort, useTestNotification, useTimeRangeDates, useTopFailingResources, useTransitionItem, useTransitionListCompany, useTransitionListMember, useTransitionState, useUnresolveError, useUnresolvedErrors, useUpdateAnchor, useUpdateApiKey, useUpdateClient, useUpdateCompany, useUpdateContact, useUpdateContentDistribution, useUpdateContentItem, useUpdateCredential, useUpdateList, useUpdateListConfig, useUpdateListStatus, useUpdateOrgRole, useUpdateRequestStatus, useUpdateSchedule, useUpdateWebhookEndpoint, useUserMemberships, useVerifyCredential, useVisibleResources, useWarningNotification, useWorkflowExecution };
16708
+ export { APIErrorAlert, AccessGuard, AccessKeys, ActivityTimeline, ActivityTrendChart, AgentResourceEntrySchema, ApiKeyService, AppearanceContext, AppearanceProvider, CONTENT_ITEMS, CRM_ITEMS, CenteredErrorState, ChartFrame, CheckpointGroup, CollapsibleSection, CombinedTrendChart, CommandQueueSidebar, CommandQueueSidebarMiddle, CommandQueueSidebarTop, ConfirmationInputModal, ConfirmationModal, ContentSidebar, ContentSidebarMiddle, ContextViewer, CostTrendChart, CredentialSchemas, CredentialService, CrmActionsProvider, CrmSidebarMiddle, CustomModal, CustomSelector, CyberAreaChart, CyberDonut, CyberDonutTooltip, CyberLegendItem, DEFAULT_CONTENT_VOCABULARY, DEFAULT_ORGANIZATION_GRAPH_FILTERS, DEFAULT_WAIT_FOR_ORGANIZATION, DeploymentService, DetailCardSkeleton, EMPTY_LIST_ACTIONS, ElevasisCoreProvider, ElevasisLoader, ElevasisSystemsProvider, ElevasisUIProvider, EmptyState, FILTERABLE_DOMAIN_KEYS, FeatureUnavailableState, GlowDot, HeroStatsRow, IdentityDomainSchema, IntegrationResourceEntrySchema, JsonViewer, KNOWLEDGE_DOMAINS_WITH_PANELS, KNOWLEDGE_ICON_TOKEN_BY_KIND, KnowledgeSearchBar, KnowledgeTree, LEAD_GEN_ITEMS, LeadGenSidebarMiddle, ListActionsProvider, ListSkeleton, MEMBERSHIP_STATUS_COLORS, MyReviewQueuePanel, MyTasksPanel, NavigationButton, NotificationProvider, OM_NESTED_TREE_GROUPS, OM_TREE_GROUPS, ORGANIZATION_GRAPH_EDGE_KIND_LABELS, ORGANIZATION_GRAPH_EDGE_KIND_MEANINGS, ORGANIZATION_GRAPH_NODE_KIND_DETAIL_LABELS, ORGANIZATION_GRAPH_NODE_KIND_LABELS, ORGANIZATION_GRAPH_NODE_KIND_MEANINGS, ORGANIZATION_GRAPH_NODE_KIND_ORDER, OperationsService, OperationsSidebar, OperationsSidebarMiddle, OperationsSidebarTop, OrganizationMembershipService, OrganizationModelDriftActionIcon, PROVISIONING_STATE_DISPLAY, PageNotFound, PageTitleCaption, ProtectedRoute, QuickCreateActions, RequestActionIcon, RequestModal, ResourceCard, ResourcesSidebar, RoleSchema, SAVED_VIEW_PRESETS, SYSTEM_RESOURCE_KINDS, SavedViewsPanel, ScriptResourceEntrySchema, SemanticIcon, SessionListItem, SessionsSidebar, StatCard, StatCardSkeleton, StatsCardSkeleton, StatusBadge, SubshellContainer, SubshellContentContainer, SubshellRightSideContainer, SubshellSidebar, SubshellSidebarLoader, SurfaceDefinitionSchema, SystemShell, TabCountBadge, TimeRangeSelector, TrendIndicator, WebhookEndpointService, WorkflowResourceEntrySchema, acquisitionListKeys, aggregateSystemMetrics, buildKnowledgeOmTreeData, buildOrganizationGraph, clientsKeys, clientsManifest, collectResourceFilterFacets, companyKeys, computeProtectedRouteGate, contactKeys, contentKeys, contentManifest, createTestSystemsProvider, crmManifest, dealKeys, dealNoteKeys, dealTaskKeys, deliveryManifest, deriveActions, deriveContentBoard, executionsKeys, extendSemanticIconRegistry, filterByDomainFilters, findKnowledgeTreeNodeByValue, findListActionByAction, findOmTreeGroup, formatResourceAttribution, getAllBuildTemplates, getConceptDefinition, getContentItemIdentity, getCrmPipelineCatalog, getKnowledgeDomainFolderCommand, getKnowledgeGraphNodeCommand, getKnowledgeIconToken, getKnowledgeNodeReadCommand, getKnowledgeOntologyProjection, getKnowledgeTreeFolderCommand, getLeadGenStageCatalog, getListActionWorkflowId, getOntologyDomainLabel, getOpenContentReviewGates, getPrimaryOntologyItemsForDomain, getResourceFilterFacetIds, getSemanticIconComponent, getSeriesColor, getSessionView, getSharedOrganizationGraph, isSessionCapable, knowledgeManifest, labelResourceFilterFacet, leadGenArtifactKeys, leadGenListCompanyKeys, leadGenListMemberKeys, leadGenManifest, monitoringManifest, normaliseConceptKey, observabilityKeys, operationsKeys, operationsManifest, pickLatestRunAt, projectActivityKeys, projectNavigationGroups, projectNavigationSurfaces, requestTopbarActionManifest, requestsKeys, resolveContentStepResource, resolveContentVocabulary, resolveContentWorkspaceRoute, resolveSemanticIconComponent, scheduleKeys, sessionsKeys, settingsManifest, sortData, submittedRequestsManifest, sumStatusCounts, transformMembershipToTableRow, useAccess, useActivateDeployment, useActivities, useActivitiesRealtime, useActivityFilters, useActivityTrend, useAddCompaniesToList, useAddContactsToList, useAppearance, useArchiveSession, useArchivedLogs, useArtifacts, useAssignRole, useBatchDelete, useBatchTelemetry, useBatchedResourcesHealth, useBulkDeleteExecutions, useBusinessImpact, useCancelExecution, useCancelSchedule, useCheckpointTasks, useClient, useClientStatus, useClients, useCommandQueue, useCommandQueueTask, useCommandQueueTotals, useCommandViewData, useCommandViewDomainFilters, useCommandViewStats, useCommandViewStore, useCompanies, useCompany, useCompanyFacets, useCompleteDealTask, useContact, useContacts, useContentConfig, useContentDistribution, useContentDistributions, useContentItem, useContentItemAttempts, useContentItems, useContentPipelineSummary, useContentSourceAsset, useContentSourceAssets, useCostBreakdown, useCostByModel, useCostSummary, useCostTrends, useCreateApiKey, useCreateArtifact, useCreateClient, useCreateCompany, useCreateContact, useCreateContentSourceAsset, useCreateCredential, useCreateDealNote, useCreateDealTask, useCreateList, useCreateOrgRole, useCreateSchedule, useCreateSession, useCreateWebhookEndpoint, useCredentials, useCrmActions, useCyberColors, useDashboardMetrics, useDeactivateDeployment, useDeactivateMembership, useDealDetail, useDealNotes, useDealTasks, useDealTasksDue, useDeals, useDealsLookup, useDealsSummary, useDeleteApiKey, useDeleteClient, useDeleteCompanies, useDeleteContacts, useDeleteCredential, useDeleteDeal, useDeleteDeployment, useDeleteExecution, useDeleteList, useDeleteOrgRole, useDeleteRequest, useDeleteSchedule, useDeleteSession, useDeleteTask, useDeleteWebhookEndpoint, useDeriveActions, useEffectivePermissions, useElevasisSystems, useEndSession, useErrorAnalysis, useErrorDetail, useErrorDetails, useErrorDistribution, useErrorNotification, useErrorTrends, useExecuteAction, useExecuteAsync, useExecuteResource, useExecution, useExecutionHealth, useExecutionLogSSE, useExecutionLogs, useExecutionLogsFilters, useExecutionPanelState, useExecutionSSE, useExecutions, useGetExecutionHistory, useGetSchedule, useInFlightExecutions, useLeadGenActionRegistry, useLeadGenBulkActions, useLeadGenHeaderActions, useLeadGenRowActions, useList, useListActions, useListApiKeys, useListDeployments, useListExecutions, useListMember, useListMembers, useListProgress, useListRecords, useListSchedules, useListWebhookEndpoints, useLists, useListsTelemetry, useMarkAllAsRead, useMarkAsRead, useNotificationAdapter, useNotificationCount, useNotifications, useOptionalElevasisSystems, useOrgRoles, useOrganizationMembers, useOrganizationModelDrift, usePaginationState, usePatchTask, usePauseSchedule, usePermissionCatalog, useProjectActivities, useProjectRealtime, useReactivateMembership, useRecentExecutionsByResource, useRemoveCompaniesFromList, useRequest, useRequestsList, useResolveAllErrors, useResolveError, useResolveErrorsByExecution, useResolvedOrganizationModel, useResourceDefinition, useResourceErrors, useResourceExecutions, useResourceSearch, useResources, useResourcesDomainFilters, useResourcesHealth, useResumeSchedule, useRetryExecution, useReviewContentItem, useRevokeRole, useSSEConnection, useScheduledTasks, useSession, useSessionCheck, useSessionExecution, useSessionExecutions, useSessionMessages, useSessionWebSocket, useSessions, useSortedData, useStableAccessToken, useStatusFilter, useSubmitAction, useSubmitRequest, useSuccessNotification, useSystemHealth, useSystemsViewState, useTableSelection, useTableSort, useTestNotification, useTimeRangeDates, useTopFailingResources, useTransitionItem, useTransitionListCompany, useTransitionListMember, useTransitionState, useUnresolveError, useUnresolvedErrors, useUpdateAnchor, useUpdateApiKey, useUpdateClient, useUpdateCompany, useUpdateContact, useUpdateContentDistribution, useUpdateContentItem, useUpdateContentSourceAsset, useUpdateCredential, useUpdateList, useUpdateListConfig, useUpdateListStatus, useUpdateOrgRole, useUpdateRequestStatus, useUpdateSchedule, useUpdateWebhookEndpoint, useUserMemberships, useVerifyCredential, useVisibleResources, useWarningNotification, useWorkflowExecution };
@@ -1,4 +1,4 @@
1
- import { useAppearance } from './chunk-6TT3FQEZ.js';
1
+ import { useAppearance } from './chunk-KIDZXZM5.js';
2
2
  import { useState, Component } from 'react';
3
3
  import { CopyButton, Tooltip } from '@mantine/core';
4
4
  import { IconCheck, IconCopy } from '@tabler/icons-react';
@@ -1,13 +1,13 @@
1
- import { LEAD_GEN_API_INTERFACE } from './chunk-LY3IKYTZ.js';
1
+ import { LEAD_GEN_API_INTERFACE } from './chunk-IMZTRDY2.js';
2
2
  import { sanitizeInput } from './chunk-3MEXPLWT.js';
3
3
  import { PageContainer } from './chunk-BZZCNLT6.js';
4
4
  import { TableSelectionToolbar, SortableHeader } from './chunk-TUMSNGTX.js';
5
5
  import { FilterBar } from './chunk-PDHTXPSF.js';
6
- import { LeadGenSidebarMiddle, SubshellContentContainer, PageTitleCaption, acquisitionListKeys, useOptionalElevasisSystems, getAllBuildTemplates, getLeadGenStageCatalog, useListsTelemetry, useLists, useAccess, AccessKeys, CenteredErrorState, StatCard, useTableSort, sortData, usePaginationState, useTableSelection, EmptyState, CustomModal, useListActions, useList, useListProgress, useListExecutions, useDeleteList, useExecuteAsync, useCompanyFacets, useCompanies, useDeleteCompanies, useContacts, useDeleteContacts, useCreateList, JsonViewer, useCredentials, useVerifyCredential, useWorkflowExecution, useInFlightExecutions, useExecutionSSE, useListRecords, useListMembers, useListMember, useTransitionListMember, useDeriveActions, useArtifacts } from './chunk-6TT3FQEZ.js';
7
- import { showApiErrorNotification, showSuccessNotification } from './chunk-C75XWBYZ.js';
6
+ import { LeadGenSidebarMiddle, SubshellContentContainer, PageTitleCaption, acquisitionListKeys, useOptionalElevasisSystems, getAllBuildTemplates, getLeadGenStageCatalog, useListsTelemetry, useLists, useAccess, AccessKeys, CenteredErrorState, StatCard, useTableSort, sortData, usePaginationState, useTableSelection, EmptyState, CustomModal, useListActions, useList, useListProgress, useListExecutions, useDeleteList, useExecuteAsync, useCompanyFacets, useCompanies, useDeleteCompanies, useContacts, useDeleteContacts, useCreateList, JsonViewer, useCredentials, useVerifyCredential, useWorkflowExecution, useInFlightExecutions, useExecutionSSE, useListRecords, useListMembers, useListMember, useTransitionListMember, useDeriveActions, useArtifacts } from './chunk-KIDZXZM5.js';
7
+ import { showApiErrorNotification, showSuccessNotification } from './chunk-XZIOCB5D.js';
8
8
  import { SubshellSidebarSection } from './chunk-MISHPEJX.js';
9
9
  import { CardHeader } from './chunk-62GVNH5U.js';
10
- import { computeInterfaceReadiness, getSystem } from './chunk-NM4A63KJ.js';
10
+ import { computeInterfaceReadiness, getSystem } from './chunk-Q3O3WY7Q.js';
11
11
  import { useElevasisServices } from './chunk-BI5VDO2K.js';
12
12
  import { Stack, Group, Title, Text, Alert, Button, Collapse, Paper, Anchor, Center, Loader, SimpleGrid, Table, Badge, TextInput, Select, Checkbox, Pagination, ActionIcon, Tooltip, Tabs, ThemeIcon, Box, Textarea, Card, SegmentedControl, UnstyledButton, Pill, Drawer, JsonInput, Switch, NumberInput, MultiSelect, TagsInput, ScrollArea } from '@mantine/core';
13
13
  import { IconTarget, IconAlertCircle, IconPlayerPlay, IconArrowRight, IconListDetails, IconPlus, IconAlertTriangle, IconSearch, IconList, IconExternalLink, IconCopy, IconTrash, IconBuilding, IconUsers, IconBolt, IconLayoutDashboard, IconBuildingFactory2, IconArrowLeft, IconSparkles, IconAddressBook, IconSettings, IconChevronDown, IconChevronRight, IconRefresh, IconMail, IconUser, IconDatabase } from '@tabler/icons-react';
@@ -561,7 +561,7 @@ var OntologyScopeSchema = z.object({
561
561
  sharedProperties: z.record(OntologyIdSchema, OntologySharedPropertySchema).default({}).optional(),
562
562
  groups: z.record(OntologyIdSchema, OntologyGroupSchema).default({}).optional(),
563
563
  endpoints: z.record(OntologyIdSchema, OntologyEndpointTypeSchema).default({}).optional()
564
- }).default({});
564
+ }).strict().default({});
565
565
  var DEFAULT_ONTOLOGY_SCOPE = {
566
566
  valueTypes: {
567
567
  "global:value-type/uuid": {
@@ -857,29 +857,45 @@ var SystemUiSchema = z.object({
857
857
  path: PathSchema,
858
858
  surfaces: ReferenceIdsSchema,
859
859
  icon: IconNameSchema.optional()
860
- });
860
+ }).strict();
861
861
  var SystemInterfaceKeySchema = ModelIdSchema;
862
862
  var SystemInterfaceLifecycleSchema = z.enum(["draft", "active", "disabled", "deprecated", "archived"]).meta({ label: "System interface lifecycle", color: "teal" });
863
863
  var SYSTEM_INTERFACE_PROFILES = [
864
864
  {
865
865
  systemPath: "sales.lead-gen",
866
866
  interfaceKey: "api",
867
- readinessProfile: "sales.lead-gen.api"
867
+ readinessProfile: "sales.lead-gen.api",
868
+ validation: "built-in"
868
869
  },
869
870
  {
870
871
  systemPath: "sales.crm",
871
872
  interfaceKey: "api",
872
- readinessProfile: "sales.crm.api"
873
+ readinessProfile: "sales.crm.api",
874
+ validation: "built-in"
873
875
  },
874
876
  {
875
877
  systemPath: "sales.lead-gen",
876
878
  interfaceKey: "crm-handoff",
877
- readinessProfile: "sales.lead-gen.crm-handoff"
879
+ readinessProfile: "sales.lead-gen.crm-handoff",
880
+ validation: "built-in"
881
+ },
882
+ {
883
+ // Gated by `CONTENT_API_INTERFACE` in `apps/api/src/business/content/organization-model.ts`,
884
+ // which every `/api/content/*` and `/api/external/content/*` route asserts. Contract-validated
885
+ // rather than built-in because the required step catalog is per-adopter: Elevasis declares
886
+ // `content:catalog/long-form-to-shorts-steps`, a tenant declares its own.
887
+ systemPath: "content",
888
+ interfaceKey: "api",
889
+ readinessProfile: "content.api",
890
+ validation: "contract"
878
891
  }
879
892
  ];
880
- var SYSTEM_INTERFACE_READINESS_PROFILES = SYSTEM_INTERFACE_PROFILES.map(
893
+ SYSTEM_INTERFACE_PROFILES.map(
881
894
  (profile) => profile.readinessProfile
882
895
  );
896
+ var BUILT_IN_VALIDATED_PROFILE_IDS = SYSTEM_INTERFACE_PROFILES.filter(
897
+ (profile) => profile.validation === "built-in"
898
+ ).map((profile) => profile.readinessProfile);
883
899
  var SystemInterfaceReadinessProfileSchema = z.string().trim().min(1);
884
900
  var SystemInterfaceResourceScopeSchema = z.array(ModelIdSchema).default([]);
885
901
  var SystemApiInterfaceReadinessContractSchema = z.object({
@@ -917,7 +933,7 @@ var SystemApiInterfaceSchema = z.object({
917
933
  readinessContract: SystemApiInterfaceReadinessContractSchema.optional()
918
934
  }).strict();
919
935
  function isReservedPlatformProfileId(profileId) {
920
- return SYSTEM_INTERFACE_READINESS_PROFILES.includes(profileId);
936
+ return BUILT_IN_VALIDATED_PROFILE_IDS.includes(profileId);
921
937
  }
922
938
  function isBuiltInReadinessProfile(profileId) {
923
939
  return isReservedPlatformProfileId(profileId) || getBuiltInReadinessProfile(profileId) !== void 0;
@@ -1,4 +1,4 @@
1
- import { NavigationButton, useAppearance, useElevasisSystems } from './chunk-6TT3FQEZ.js';
1
+ import { NavigationButton, useAppearance, useElevasisSystems } from './chunk-KIDZXZM5.js';
2
2
  import { sidebarItemGap, sidebarSubLinkPaddingY, sidebarSubLinkPaddingX, sidebarSubLinkIndent, sidebarHoverDelay, sidebarTransitionDuration, sidebarCollapsedWidth, sidebarWidth, topbarHeight, sidebarToggleIconSize, sidebarSectionPadding, sidebarGroupChevronSize, sidebarIconInnerSize, SubshellNavItem } from './chunk-MISHPEJX.js';
3
3
  import { useRouterContext } from './chunk-Q7DJKLEN.js';
4
4
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -1,13 +1,13 @@
1
1
  import { useAvailablePresets } from './chunk-ZFISGKYW.js';
2
- import { AppShellLoader } from './chunk-SMH6SQQE.js';
2
+ import { AppShellLoader } from './chunk-A3JHFZDP.js';
3
3
  import { FilterBar } from './chunk-PDHTXPSF.js';
4
- import { useDeleteCredential, ListSkeleton, EmptyState, CustomModal, useCreateCredential, useCredentials, PageTitleCaption, MEMBERSHIP_STATUS_COLORS, PROVISIONING_STATE_DISPLAY, transformMembershipToTableRow, APIErrorAlert, useUserMemberships, useUpdateWebhookEndpoint, useResources, useDeleteWebhookEndpoint, useCreateWebhookEndpoint, useListWebhookEndpoints, StatCard, useOrgRoles, useAssignRole, useRevokeRole, useAccess, AccessKeys, useOrganizationMembers, usePermissionCatalog, AccessGuard, useUpdateCredential, CredentialSchemas } from './chunk-6TT3FQEZ.js';
5
- import { showApiErrorNotification, showErrorNotification, showSuccessNotification } from './chunk-C75XWBYZ.js';
4
+ import { useDeleteCredential, ListSkeleton, EmptyState, CustomModal, useCreateCredential, useCredentials, PageTitleCaption, MEMBERSHIP_STATUS_COLORS, PROVISIONING_STATE_DISPLAY, transformMembershipToTableRow, APIErrorAlert, useUserMemberships, useUpdateWebhookEndpoint, useResources, useDeleteWebhookEndpoint, useCreateWebhookEndpoint, useListWebhookEndpoints, StatCard, useOrgRoles, useAssignRole, useRevokeRole, useAccess, AccessKeys, useOrganizationMembers, usePermissionCatalog, AccessGuard, useUpdateCredential, CredentialSchemas } from './chunk-KIDZXZM5.js';
5
+ import { showApiErrorNotification, showErrorNotification, showSuccessNotification } from './chunk-XZIOCB5D.js';
6
6
  import { CardHeader } from './chunk-62GVNH5U.js';
7
7
  import { useInitialization } from './chunk-P45GQ3ZW.js';
8
8
  import { RoleBadge } from './chunk-UD657ICS.js';
9
9
  import { useOrganization } from './chunk-DD3CCMCZ.js';
10
- import { isAPIClientError, formatDateTime, OAUTH_FLOW_TIMEOUT } from './chunk-NM4A63KJ.js';
10
+ import { isAPIClientError, formatDateTime, OAUTH_FLOW_TIMEOUT } from './chunk-Q3O3WY7Q.js';
11
11
  import { useElevasisServices } from './chunk-BI5VDO2K.js';
12
12
  import { brandSupabaseOrgId } from './chunk-MQZE7SUI.js';
13
13
  import { createUseExternalEvents, Text, Table, Group, Tooltip, ActionIcon, Stack, Title, Button, Select, TextInput, Alert, PasswordInput, Anchor, Paper, Badge, Center, Loader, Box, Code, CopyButton, ThemeIcon, SimpleGrid, UnstyledButton, Card, Switch, Divider, Textarea, MultiSelect } from '@mantine/core';
@@ -1,4 +1,4 @@
1
- import { useOptionalElevasisSystems } from './chunk-6TT3FQEZ.js';
1
+ import { useOptionalElevasisSystems } from './chunk-KIDZXZM5.js';
2
2
  import { useRouterContext } from './chunk-Q7DJKLEN.js';
3
3
  import { useMemo } from 'react';
4
4
 
@@ -1,4 +1,4 @@
1
- import { getErrorInfo, formatErrorMessage, getErrorTitle } from './chunk-NM4A63KJ.js';
1
+ import { getErrorInfo, formatErrorMessage, getErrorTitle } from './chunk-Q3O3WY7Q.js';
2
2
  import { useElevasisServices } from './chunk-BI5VDO2K.js';
3
3
  import { useQuery, useQueryClient, useMutation } from '@tanstack/react-query';
4
4
  import { notifications } from '@mantine/notifications';
@@ -1,5 +1,5 @@
1
1
  import { OrganizationContext } from './chunk-DD3CCMCZ.js';
2
- import { APIClientError } from './chunk-NM4A63KJ.js';
2
+ import { APIClientError } from './chunk-Q3O3WY7Q.js';
3
3
  import { createContext, useContext, useMemo, useCallback } from 'react';
4
4
  import { jsx } from 'react/jsx-runtime';
5
5
 
@@ -1,13 +1,13 @@
1
1
  import { ZodFormRenderer } from './chunk-3MEXPLWT.js';
2
2
  import { ResourceHealthChart } from './chunk-LGKLC5MG.js';
3
3
  import { Graph_module_css_default, useDirectedChainHighlighting, useNodeSelection, useFitViewTrigger } from './chunk-HENXLGVD.js';
4
- import { AppShellCenteredContainer, AppShellLoader } from './chunk-SMH6SQQE.js';
5
- import { useCyberColors, GlowDot, JsonViewer, useExecuteResource, EmptyState, useDashboardMetrics, useResources, useTimeRangeDates, useUnresolvedErrors, useRecentExecutionsByResource, PageTitleCaption, HeroStatsRow, useCommandQueue, useScheduledTasks, TabCountBadge, useResourcesHealth } from './chunk-6TT3FQEZ.js';
4
+ import { AppShellCenteredContainer, AppShellLoader } from './chunk-A3JHFZDP.js';
5
+ import { useCyberColors, GlowDot, JsonViewer, useExecuteResource, EmptyState, useDashboardMetrics, useResources, useTimeRangeDates, useUnresolvedErrors, useRecentExecutionsByResource, PageTitleCaption, HeroStatsRow, useCommandQueue, useScheduledTasks, TabCountBadge, useResourcesHealth } from './chunk-KIDZXZM5.js';
6
6
  import { glassBase } from './chunk-R6NMRXNO.js';
7
7
  import { CardHeader } from './chunk-62GVNH5U.js';
8
8
  import { useInitialization } from './chunk-P45GQ3ZW.js';
9
9
  import { STATUS_COLORS, getStatusIcon, formatDuration, getStatusColors, AGENT_CONSTANTS, shouldAnimateEdge, TIMELINE_CONSTANTS, calculateBarPosition, CONTAINER_CONSTANTS, useExecutionPath, useUnifiedWorkflowLayout, WORKFLOW_CONSTANTS, useReactFlowAgent } from './chunk-BLXJEIQS.js';
10
- import { formatTimeAgo, formatRelativeTime } from './chunk-NM4A63KJ.js';
10
+ import { formatTimeAgo, formatRelativeTime } from './chunk-Q3O3WY7Q.js';
11
11
  import { getTimeRangeDates } from './chunk-Y6I3IC45.js';
12
12
  import { ResourceStatusColors } from './chunk-6SSQGWK7.js';
13
13
  import { memo, useMemo, useEffect, useState, useCallback, Fragment } from 'react';