@elevasis/ui 2.68.0 → 2.70.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 (85) hide show
  1. package/dist/api/index.js +3 -3
  2. package/dist/app/index.d.ts +577 -367
  3. package/dist/app/index.js +10 -19
  4. package/dist/auth/index.d.ts +5 -0
  5. package/dist/auth/index.js +5 -5
  6. package/dist/charts/index.js +5 -5
  7. package/dist/{chunk-JC5W55J3.js → chunk-26BTE3Z4.js} +1 -1
  8. package/dist/{chunk-ZNKZMK2E.js → chunk-5C62IRKS.js} +5 -5
  9. package/dist/{chunk-ZGCWTWBD.js → chunk-6TT3FQEZ.js} +16218 -15769
  10. package/dist/{chunk-QYI5BZKM.js → chunk-AGX2CY2O.js} +1 -1
  11. package/dist/{chunk-UFTM5SZZ.js → chunk-AKANHRQ5.js} +9 -3
  12. package/dist/{chunk-NDHMZT2G.js → chunk-C75XWBYZ.js} +1 -1
  13. package/dist/{chunk-2MTP3H3A.js → chunk-CCZJ4OWY.js} +1 -1
  14. package/dist/{chunk-75NOC536.js → chunk-DUEGHF7A.js} +4 -4
  15. package/dist/{chunk-SIVUCZXQ.js → chunk-GJQF3S2Q.js} +1 -1
  16. package/dist/{chunk-ZWS3TCQR.js → chunk-GZADST64.js} +21 -108
  17. package/dist/{chunk-TYKAKJGW.js → chunk-JA2XDMAE.js} +1 -1
  18. package/dist/{chunk-76IVMVI3.js → chunk-LWYLZUUV.js} +3 -3
  19. package/dist/{chunk-WPIASV3H.js → chunk-LY3IKYTZ.js} +2 -2
  20. package/dist/{chunk-HJVPVS57.js → chunk-MFCV4JMQ.js} +5 -5
  21. package/dist/{chunk-L3HFJFYF.js → chunk-NM4A63KJ.js} +30 -48
  22. package/dist/{chunk-OOACTYRA.js → chunk-QDMIFD6F.js} +1 -1
  23. package/dist/{chunk-GBXTRSAU.js → chunk-SMH6SQQE.js} +1 -1
  24. package/dist/{chunk-TGPJNKDU.js → chunk-TJMZUL6E.js} +4 -4
  25. package/dist/{chunk-5NRJ2BLQ.js → chunk-VDX6DL7Z.js} +1 -1
  26. package/dist/{chunk-FK3K2VK2.js → chunk-XKUEO4HG.js} +10 -7
  27. package/dist/components/index.d.ts +1614 -256
  28. package/dist/components/index.js +25 -25
  29. package/dist/components/navigation/index.js +6 -6
  30. package/dist/features/auth/index.d.ts +457 -163
  31. package/dist/features/auth/index.js +7 -7
  32. package/dist/features/clients/index.d.ts +39 -1
  33. package/dist/features/clients/index.js +6 -5
  34. package/dist/features/content/index.css +659 -0
  35. package/dist/features/content/index.d.ts +1978 -0
  36. package/dist/features/content/index.js +2312 -0
  37. package/dist/features/crm/index.d.ts +584 -369
  38. package/dist/features/crm/index.js +7 -7
  39. package/dist/features/dashboard/index.d.ts +0 -6
  40. package/dist/features/dashboard/index.js +7 -7
  41. package/dist/features/delivery/index.css +149 -149
  42. package/dist/features/delivery/index.d.ts +457 -163
  43. package/dist/features/delivery/index.js +6 -6
  44. package/dist/features/knowledge/index.js +5 -5
  45. package/dist/features/lead-gen/index.d.ts +20 -91
  46. package/dist/features/lead-gen/index.js +7 -7
  47. package/dist/features/monitoring/index.css +149 -149
  48. package/dist/features/monitoring/index.js +8 -8
  49. package/dist/features/monitoring/requests/index.js +7 -12
  50. package/dist/features/operations/index.d.ts +0 -84
  51. package/dist/features/operations/index.js +10 -10
  52. package/dist/features/settings/index.d.ts +457 -163
  53. package/dist/features/settings/index.js +7 -7
  54. package/dist/hooks/access/index.d.ts +5 -0
  55. package/dist/hooks/access/index.js +5 -5
  56. package/dist/hooks/delivery/index.d.ts +457 -163
  57. package/dist/hooks/delivery/index.js +2 -2
  58. package/dist/hooks/index.css +149 -149
  59. package/dist/hooks/index.d.ts +2128 -233
  60. package/dist/hooks/index.js +5 -5
  61. package/dist/hooks/operations/command-view/utils/transformCommandViewData.d.ts +0 -6
  62. package/dist/hooks/published.css +149 -149
  63. package/dist/hooks/published.d.ts +2128 -233
  64. package/dist/hooks/published.js +5 -5
  65. package/dist/initialization/index.d.ts +464 -164
  66. package/dist/knowledge/index.d.ts +4 -88
  67. package/dist/knowledge/index.js +3211 -3201
  68. package/dist/{knowledge-search-index-6EZNBNSR.js → knowledge-search-index-LP2WVSQX.js} +689 -695
  69. package/dist/layout/index.js +8 -8
  70. package/dist/organization/index.d.ts +7 -1
  71. package/dist/profile/index.d.ts +457 -163
  72. package/dist/provider/index.d.ts +577 -368
  73. package/dist/provider/index.js +5 -5
  74. package/dist/provider/published.d.ts +577 -368
  75. package/dist/provider/published.js +5 -5
  76. package/dist/supabase/index.d.ts +906 -339
  77. package/dist/test-utils/index.d.ts +10 -2
  78. package/dist/test-utils/index.js +39 -10
  79. package/dist/types/index.d.ts +464 -170
  80. package/dist/utils/index.d.ts +0 -6
  81. package/dist/utils/index.js +1 -1
  82. package/dist/vite/index.js +2 -2
  83. package/dist/vite-plugin-knowledge/index.js +1 -1
  84. package/package.json +9 -5
  85. package/src/features/README.md +28 -28
@@ -0,0 +1,1978 @@
1
+ import { ComponentType, ReactNode } from 'react';
2
+ import * as react_jsx_runtime from 'react/jsx-runtime';
3
+ import { z } from 'zod';
4
+
5
+ declare const ResourceKindSchema: z.ZodEnum<{
6
+ agent: "agent";
7
+ workflow: "workflow";
8
+ integration: "integration";
9
+ script: "script";
10
+ }>;
11
+
12
+ declare const OntologyScopeSchema: z.ZodDefault<z.ZodObject<{
13
+ objectTypes: z.ZodOptional<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
14
+ id: z.ZodString;
15
+ label: z.ZodOptional<z.ZodString>;
16
+ description: z.ZodOptional<z.ZodString>;
17
+ ownerSystemId: z.ZodOptional<z.ZodString>;
18
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
19
+ properties: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
20
+ storage: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
21
+ }, z.core.$loose>>>>;
22
+ linkTypes: z.ZodOptional<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
23
+ id: z.ZodString;
24
+ label: z.ZodOptional<z.ZodString>;
25
+ description: z.ZodOptional<z.ZodString>;
26
+ ownerSystemId: z.ZodOptional<z.ZodString>;
27
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
28
+ from: z.ZodString;
29
+ to: z.ZodString;
30
+ cardinality: z.ZodOptional<z.ZodString>;
31
+ via: z.ZodOptional<z.ZodString>;
32
+ }, z.core.$loose>>>>;
33
+ actionTypes: z.ZodOptional<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
34
+ id: z.ZodString;
35
+ label: z.ZodOptional<z.ZodString>;
36
+ description: z.ZodOptional<z.ZodString>;
37
+ ownerSystemId: z.ZodOptional<z.ZodString>;
38
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
39
+ actsOn: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodString>>>;
40
+ input: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
41
+ effects: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
42
+ }, z.core.$loose>>>>;
43
+ catalogTypes: z.ZodOptional<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
44
+ id: z.ZodString;
45
+ label: z.ZodOptional<z.ZodString>;
46
+ description: z.ZodOptional<z.ZodString>;
47
+ ownerSystemId: z.ZodOptional<z.ZodString>;
48
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
49
+ kind: z.ZodOptional<z.ZodString>;
50
+ appliesTo: z.ZodOptional<z.ZodString>;
51
+ entries: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
52
+ }, z.core.$loose>>>>;
53
+ eventTypes: z.ZodOptional<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
54
+ id: z.ZodString;
55
+ label: z.ZodOptional<z.ZodString>;
56
+ description: z.ZodOptional<z.ZodString>;
57
+ ownerSystemId: z.ZodOptional<z.ZodString>;
58
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
59
+ payload: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
60
+ }, z.core.$loose>>>>;
61
+ interfaceTypes: z.ZodOptional<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
62
+ id: z.ZodString;
63
+ label: z.ZodOptional<z.ZodString>;
64
+ description: z.ZodOptional<z.ZodString>;
65
+ ownerSystemId: z.ZodOptional<z.ZodString>;
66
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
67
+ properties: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
68
+ }, z.core.$loose>>>>;
69
+ valueTypes: z.ZodOptional<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
70
+ id: z.ZodString;
71
+ label: z.ZodOptional<z.ZodString>;
72
+ description: z.ZodOptional<z.ZodString>;
73
+ ownerSystemId: z.ZodOptional<z.ZodString>;
74
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
75
+ primitive: z.ZodOptional<z.ZodString>;
76
+ }, z.core.$loose>>>>;
77
+ sharedProperties: z.ZodOptional<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
78
+ id: z.ZodString;
79
+ label: z.ZodOptional<z.ZodString>;
80
+ description: z.ZodOptional<z.ZodString>;
81
+ ownerSystemId: z.ZodOptional<z.ZodString>;
82
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
83
+ valueType: z.ZodOptional<z.ZodString>;
84
+ searchable: z.ZodOptional<z.ZodBoolean>;
85
+ pii: z.ZodOptional<z.ZodBoolean>;
86
+ }, z.core.$loose>>>>;
87
+ groups: z.ZodOptional<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
88
+ id: z.ZodString;
89
+ label: z.ZodOptional<z.ZodString>;
90
+ description: z.ZodOptional<z.ZodString>;
91
+ ownerSystemId: z.ZodOptional<z.ZodString>;
92
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
93
+ members: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodString>>>;
94
+ }, z.core.$loose>>>>;
95
+ endpoints: z.ZodOptional<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
96
+ id: z.ZodString;
97
+ label: z.ZodOptional<z.ZodString>;
98
+ description: z.ZodOptional<z.ZodString>;
99
+ ownerSystemId: z.ZodOptional<z.ZodString>;
100
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
101
+ route: z.ZodOptional<z.ZodString>;
102
+ }, z.core.$loose>>>>;
103
+ }, z.core.$strip>>;
104
+ type OntologyScope = z.infer<typeof OntologyScopeSchema>;
105
+
106
+ declare const SystemApiInterfaceSchema: z.ZodObject<{
107
+ lifecycle: z.ZodDefault<z.ZodEnum<{
108
+ active: "active";
109
+ deprecated: "deprecated";
110
+ draft: "draft";
111
+ archived: "archived";
112
+ disabled: "disabled";
113
+ }>>;
114
+ readinessProfile: z.ZodOptional<z.ZodString>;
115
+ resourceIds: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodString>>>;
116
+ readinessContract: z.ZodOptional<z.ZodObject<{
117
+ requiredObjects: z.ZodDefault<z.ZodArray<z.ZodString>>;
118
+ requiredCatalogs: z.ZodArray<z.ZodString>;
119
+ }, z.core.$strict>>;
120
+ }, z.core.$strict>;
121
+ type JsonPrimitive = string | number | boolean | null;
122
+ type JsonValue = JsonPrimitive | JsonValue[] | {
123
+ [key: string]: JsonValue;
124
+ };
125
+ /** Explicit interface needed to annotate the recursive SystemEntrySchema. */
126
+ interface SystemEntry {
127
+ id: string;
128
+ label?: string;
129
+ title?: string;
130
+ description?: string;
131
+ kind?: 'product' | 'operational' | 'platform' | 'diagnostic';
132
+ parentSystemId?: string;
133
+ ui?: {
134
+ path: string;
135
+ surfaces: string[];
136
+ icon?: string;
137
+ };
138
+ lifecycle?: 'draft' | 'beta' | 'active' | 'deprecated' | 'archived';
139
+ responsibleRoleId?: string;
140
+ governedByKnowledge?: string[];
141
+ actions?: {
142
+ actionId: string;
143
+ intent: 'exposes' | 'consumes';
144
+ invocation?: unknown;
145
+ }[];
146
+ drivesGoals?: string[];
147
+ apiInterface?: z.infer<typeof SystemApiInterfaceSchema>;
148
+ path?: string;
149
+ icon?: string;
150
+ uiPosition?: 'sidebar-primary' | 'sidebar-bottom';
151
+ enabled?: boolean;
152
+ order: number;
153
+ config?: Record<string, JsonValue>;
154
+ ontology?: OntologyScope;
155
+ systems?: Record<string, SystemEntry>;
156
+ subsystems?: Record<string, SystemEntry>;
157
+ }
158
+
159
+ declare const SurfaceTypeSchema: z.ZodEnum<{
160
+ dashboard: "dashboard";
161
+ settings: "settings";
162
+ graph: "graph";
163
+ page: "page";
164
+ detail: "detail";
165
+ list: "list";
166
+ }>;
167
+ interface SidebarSurfaceNode {
168
+ type: 'surface';
169
+ label: string;
170
+ path: string;
171
+ surfaceType: z.infer<typeof SurfaceTypeSchema>;
172
+ description?: string;
173
+ icon?: string;
174
+ order?: number;
175
+ targets?: {
176
+ systems?: string[];
177
+ entities?: string[];
178
+ resources?: string[];
179
+ actions?: string[];
180
+ };
181
+ devOnly?: boolean;
182
+ requiresAdmin?: boolean;
183
+ }
184
+ interface SidebarGroupNode {
185
+ type: 'group';
186
+ label: string;
187
+ description?: string;
188
+ icon?: string;
189
+ order?: number;
190
+ children: Record<string, SidebarNode>;
191
+ }
192
+ type SidebarNode = SidebarSurfaceNode | SidebarGroupNode;
193
+
194
+ /** D5: who/what executes a content pipeline step. */
195
+ declare const ContentPipelineStepActorSchema: z.ZodEnum<{
196
+ agent: "agent";
197
+ workflow: "workflow";
198
+ vendor: "vendor";
199
+ }>;
200
+ type ContentPipelineStepActor = z.infer<typeof ContentPipelineStepActorSchema>;
201
+ /** D5: how a human reviews a content pipeline step's output. */
202
+ declare const ContentPipelineStepReviewModeSchema: z.ZodEnum<{
203
+ none: "none";
204
+ live: "live";
205
+ queued: "queued";
206
+ }>;
207
+ type ContentPipelineStepReviewMode = z.infer<typeof ContentPipelineStepReviewModeSchema>;
208
+ /** D17: one entry in a step's template-declared serializable payload field list. */
209
+ declare const ContentPayloadFieldDeclarationSchema: z.ZodObject<{
210
+ key: z.ZodString;
211
+ label: z.ZodString;
212
+ type: z.ZodEnum<{
213
+ string: "string";
214
+ number: "number";
215
+ boolean: "boolean";
216
+ text: "text";
217
+ url: "url";
218
+ "string-array": "string-array";
219
+ }>;
220
+ required: z.ZodOptional<z.ZodBoolean>;
221
+ }, z.core.$strip>;
222
+ type ContentPayloadFieldDeclaration = z.infer<typeof ContentPayloadFieldDeclarationSchema>;
223
+ /** One step in a resolved content pipeline, as returned by `getContentBuildTemplates`. */
224
+ interface ContentPipelineStepEntry {
225
+ /** Matches the catalog entry id (the step's local id within its step catalog). */
226
+ key: string;
227
+ /** Human-readable label for UI display. */
228
+ label: string;
229
+ /** Short description of what this step does. */
230
+ description?: string;
231
+ /** Canonical step order for UI sorting. Lower = earlier in the pipeline. */
232
+ order: number;
233
+ /** D5: who/what executes this step. */
234
+ actor: ContentPipelineStepActor;
235
+ /** D5: how a human reviews this step's output. */
236
+ reviewMode: ContentPipelineStepReviewMode;
237
+ /** D5: the step key this step advances to. Absent on a terminal step. */
238
+ advancesTo?: string;
239
+ /**
240
+ * The ontology action id this step invokes. Absent when no Resource
241
+ * implements the step yet. See `ContentPipelineStepDeclarationSchema`.
242
+ */
243
+ actionId?: string;
244
+ /** D17: the template-declared serializable field list for this step's payload. */
245
+ payloadFields: ContentPayloadFieldDeclaration[];
246
+ }
247
+ /** One resolved content pipeline, as returned by `getContentBuildTemplates`. */
248
+ interface ContentPipelineTemplate {
249
+ id: string;
250
+ label: string;
251
+ description?: string;
252
+ color?: string;
253
+ steps: ContentPipelineStepEntry[];
254
+ }
255
+ /** One entry in a resolved `content-stage` catalog (status / pillar / platform), as returned by `getContentStageCatalog`. */
256
+ interface ContentStageCatalogEntry {
257
+ /** Local id of the `content-stage` catalog this entry came from (e.g. 'status', 'pillar', 'platform'). */
258
+ catalogKey: string;
259
+ /** Matches the entry id within its catalog (e.g. 'draft', 'linkedin'). */
260
+ key: string;
261
+ label: string;
262
+ description: string;
263
+ order: number;
264
+ color?: string;
265
+ }
266
+
267
+ declare const OrganizationModelSchema: z.ZodObject<{
268
+ version: z.ZodDefault<z.ZodLiteral<1>>;
269
+ snapshotHash: z.ZodOptional<z.ZodString>;
270
+ domainMetadata: z.ZodPipe<z.ZodDefault<z.ZodObject<{
271
+ branding: z.ZodOptional<z.ZodObject<{
272
+ version: z.ZodDefault<z.ZodLiteral<1>>;
273
+ lastModified: z.ZodString;
274
+ }, z.core.$strip>>;
275
+ identity: z.ZodOptional<z.ZodObject<{
276
+ version: z.ZodDefault<z.ZodLiteral<1>>;
277
+ lastModified: z.ZodString;
278
+ }, z.core.$strip>>;
279
+ clients: z.ZodOptional<z.ZodObject<{
280
+ version: z.ZodDefault<z.ZodLiteral<1>>;
281
+ lastModified: z.ZodString;
282
+ }, z.core.$strip>>;
283
+ customers: z.ZodOptional<z.ZodObject<{
284
+ version: z.ZodDefault<z.ZodLiteral<1>>;
285
+ lastModified: z.ZodString;
286
+ }, z.core.$strip>>;
287
+ offerings: z.ZodOptional<z.ZodObject<{
288
+ version: z.ZodDefault<z.ZodLiteral<1>>;
289
+ lastModified: z.ZodString;
290
+ }, z.core.$strip>>;
291
+ roles: z.ZodOptional<z.ZodObject<{
292
+ version: z.ZodDefault<z.ZodLiteral<1>>;
293
+ lastModified: z.ZodString;
294
+ }, z.core.$strip>>;
295
+ goals: z.ZodOptional<z.ZodObject<{
296
+ version: z.ZodDefault<z.ZodLiteral<1>>;
297
+ lastModified: z.ZodString;
298
+ }, z.core.$strip>>;
299
+ systems: z.ZodOptional<z.ZodObject<{
300
+ version: z.ZodDefault<z.ZodLiteral<1>>;
301
+ lastModified: z.ZodString;
302
+ }, z.core.$strip>>;
303
+ ontology: z.ZodOptional<z.ZodObject<{
304
+ version: z.ZodDefault<z.ZodLiteral<1>>;
305
+ lastModified: z.ZodString;
306
+ }, z.core.$strip>>;
307
+ resources: z.ZodOptional<z.ZodObject<{
308
+ version: z.ZodDefault<z.ZodLiteral<1>>;
309
+ lastModified: z.ZodString;
310
+ }, z.core.$strip>>;
311
+ topology: z.ZodOptional<z.ZodObject<{
312
+ version: z.ZodDefault<z.ZodLiteral<1>>;
313
+ lastModified: z.ZodString;
314
+ }, z.core.$strip>>;
315
+ actions: z.ZodOptional<z.ZodObject<{
316
+ version: z.ZodDefault<z.ZodLiteral<1>>;
317
+ lastModified: z.ZodString;
318
+ }, z.core.$strip>>;
319
+ entities: z.ZodOptional<z.ZodObject<{
320
+ version: z.ZodDefault<z.ZodLiteral<1>>;
321
+ lastModified: z.ZodString;
322
+ }, z.core.$strip>>;
323
+ knowledge: z.ZodOptional<z.ZodObject<{
324
+ version: z.ZodDefault<z.ZodLiteral<1>>;
325
+ lastModified: z.ZodString;
326
+ }, z.core.$strip>>;
327
+ }, z.core.$strip>>, z.ZodTransform<{
328
+ branding: {
329
+ version: 1;
330
+ lastModified: string;
331
+ };
332
+ identity: {
333
+ version: 1;
334
+ lastModified: string;
335
+ };
336
+ clients: {
337
+ version: 1;
338
+ lastModified: string;
339
+ };
340
+ customers: {
341
+ version: 1;
342
+ lastModified: string;
343
+ };
344
+ offerings: {
345
+ version: 1;
346
+ lastModified: string;
347
+ };
348
+ roles: {
349
+ version: 1;
350
+ lastModified: string;
351
+ };
352
+ goals: {
353
+ version: 1;
354
+ lastModified: string;
355
+ };
356
+ systems: {
357
+ version: 1;
358
+ lastModified: string;
359
+ };
360
+ ontology: {
361
+ version: 1;
362
+ lastModified: string;
363
+ };
364
+ resources: {
365
+ version: 1;
366
+ lastModified: string;
367
+ };
368
+ topology: {
369
+ version: 1;
370
+ lastModified: string;
371
+ };
372
+ actions: {
373
+ version: 1;
374
+ lastModified: string;
375
+ };
376
+ entities: {
377
+ version: 1;
378
+ lastModified: string;
379
+ };
380
+ knowledge: {
381
+ version: 1;
382
+ lastModified: string;
383
+ };
384
+ }, {
385
+ branding?: {
386
+ version: 1;
387
+ lastModified: string;
388
+ } | undefined;
389
+ identity?: {
390
+ version: 1;
391
+ lastModified: string;
392
+ } | undefined;
393
+ clients?: {
394
+ version: 1;
395
+ lastModified: string;
396
+ } | undefined;
397
+ customers?: {
398
+ version: 1;
399
+ lastModified: string;
400
+ } | undefined;
401
+ offerings?: {
402
+ version: 1;
403
+ lastModified: string;
404
+ } | undefined;
405
+ roles?: {
406
+ version: 1;
407
+ lastModified: string;
408
+ } | undefined;
409
+ goals?: {
410
+ version: 1;
411
+ lastModified: string;
412
+ } | undefined;
413
+ systems?: {
414
+ version: 1;
415
+ lastModified: string;
416
+ } | undefined;
417
+ ontology?: {
418
+ version: 1;
419
+ lastModified: string;
420
+ } | undefined;
421
+ resources?: {
422
+ version: 1;
423
+ lastModified: string;
424
+ } | undefined;
425
+ topology?: {
426
+ version: 1;
427
+ lastModified: string;
428
+ } | undefined;
429
+ actions?: {
430
+ version: 1;
431
+ lastModified: string;
432
+ } | undefined;
433
+ entities?: {
434
+ version: 1;
435
+ lastModified: string;
436
+ } | undefined;
437
+ knowledge?: {
438
+ version: 1;
439
+ lastModified: string;
440
+ } | undefined;
441
+ }>>;
442
+ branding: z.ZodDefault<z.ZodObject<{
443
+ organizationName: z.ZodString;
444
+ productName: z.ZodString;
445
+ shortName: z.ZodString;
446
+ description: z.ZodOptional<z.ZodString>;
447
+ logos: z.ZodDefault<z.ZodObject<{
448
+ light: z.ZodOptional<z.ZodString>;
449
+ dark: z.ZodOptional<z.ZodString>;
450
+ }, z.core.$strip>>;
451
+ voice: z.ZodOptional<z.ZodString>;
452
+ tagline: z.ZodOptional<z.ZodString>;
453
+ values: z.ZodOptional<z.ZodArray<z.ZodString>>;
454
+ themePresetId: z.ZodOptional<z.ZodString>;
455
+ }, z.core.$loose>>;
456
+ navigation: z.ZodDefault<z.ZodObject<{
457
+ sidebar: z.ZodDefault<z.ZodObject<{
458
+ primary: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodType<SidebarNode, unknown, z.core.$ZodTypeInternals<SidebarNode, unknown>>>>;
459
+ bottom: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodType<SidebarNode, unknown, z.core.$ZodTypeInternals<SidebarNode, unknown>>>>;
460
+ }, z.core.$strip>>;
461
+ topbar: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
462
+ id: z.ZodString;
463
+ label: z.ZodString;
464
+ tooltip: z.ZodOptional<z.ZodString>;
465
+ icon: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
466
+ message: "message";
467
+ error: "error";
468
+ agent: "agent";
469
+ workflow: "workflow";
470
+ "google-sheets": "google-sheets";
471
+ dashboard: "dashboard";
472
+ calendar: "calendar";
473
+ sales: "sales";
474
+ crm: "crm";
475
+ "lead-gen": "lead-gen";
476
+ projects: "projects";
477
+ clients: "clients";
478
+ operations: "operations";
479
+ monitoring: "monitoring";
480
+ knowledge: "knowledge";
481
+ settings: "settings";
482
+ admin: "admin";
483
+ archive: "archive";
484
+ business: "business";
485
+ finance: "finance";
486
+ platform: "platform";
487
+ seo: "seo";
488
+ playbook: "playbook";
489
+ strategy: "strategy";
490
+ reference: "reference";
491
+ integration: "integration";
492
+ database: "database";
493
+ user: "user";
494
+ team: "team";
495
+ gmail: "gmail";
496
+ attio: "attio";
497
+ overview: "overview";
498
+ "command-view": "command-view";
499
+ "command-queue": "command-queue";
500
+ pipeline: "pipeline";
501
+ lists: "lists";
502
+ resources: "resources";
503
+ approve: "approve";
504
+ reject: "reject";
505
+ retry: "retry";
506
+ edit: "edit";
507
+ view: "view";
508
+ launch: "launch";
509
+ "message-plus": "message-plus";
510
+ escalate: "escalate";
511
+ promote: "promote";
512
+ submit: "submit";
513
+ email: "email";
514
+ success: "success";
515
+ warning: "warning";
516
+ info: "info";
517
+ pending: "pending";
518
+ bolt: "bolt";
519
+ building: "building";
520
+ briefcase: "briefcase";
521
+ apps: "apps";
522
+ graph: "graph";
523
+ shield: "shield";
524
+ users: "users";
525
+ "chart-bar": "chart-bar";
526
+ search: "search";
527
+ }>, z.ZodString]>>;
528
+ order: z.ZodOptional<z.ZodNumber>;
529
+ enabled: z.ZodDefault<z.ZodBoolean>;
530
+ devOnly: z.ZodOptional<z.ZodBoolean>;
531
+ requiresAdmin: z.ZodOptional<z.ZodBoolean>;
532
+ targets: z.ZodOptional<z.ZodDefault<z.ZodObject<{
533
+ systems: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodString>>>;
534
+ entities: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodString>>>;
535
+ resources: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodString>>>;
536
+ actions: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodString>>>;
537
+ }, z.core.$strip>>>;
538
+ }, z.core.$strip>>>;
539
+ }, z.core.$strip>>;
540
+ identity: z.ZodDefault<z.ZodObject<{
541
+ mission: z.ZodDefault<z.ZodString>;
542
+ vision: z.ZodDefault<z.ZodString>;
543
+ legalName: z.ZodDefault<z.ZodString>;
544
+ entityType: z.ZodDefault<z.ZodString>;
545
+ jurisdiction: z.ZodDefault<z.ZodString>;
546
+ industryCategory: z.ZodDefault<z.ZodString>;
547
+ geographicFocus: z.ZodDefault<z.ZodString>;
548
+ timeZone: z.ZodDefault<z.ZodString>;
549
+ businessHours: z.ZodDefault<z.ZodObject<{
550
+ monday: z.ZodOptional<z.ZodObject<{
551
+ open: z.ZodString;
552
+ close: z.ZodString;
553
+ }, z.core.$strip>>;
554
+ tuesday: z.ZodOptional<z.ZodObject<{
555
+ open: z.ZodString;
556
+ close: z.ZodString;
557
+ }, z.core.$strip>>;
558
+ wednesday: z.ZodOptional<z.ZodObject<{
559
+ open: z.ZodString;
560
+ close: z.ZodString;
561
+ }, z.core.$strip>>;
562
+ thursday: z.ZodOptional<z.ZodObject<{
563
+ open: z.ZodString;
564
+ close: z.ZodString;
565
+ }, z.core.$strip>>;
566
+ friday: z.ZodOptional<z.ZodObject<{
567
+ open: z.ZodString;
568
+ close: z.ZodString;
569
+ }, z.core.$strip>>;
570
+ saturday: z.ZodOptional<z.ZodObject<{
571
+ open: z.ZodString;
572
+ close: z.ZodString;
573
+ }, z.core.$strip>>;
574
+ sunday: z.ZodOptional<z.ZodObject<{
575
+ open: z.ZodString;
576
+ close: z.ZodString;
577
+ }, z.core.$strip>>;
578
+ }, z.core.$strip>>;
579
+ clientBrief: z.ZodDefault<z.ZodString>;
580
+ organizationName: z.ZodOptional<z.ZodString>;
581
+ productName: z.ZodOptional<z.ZodString>;
582
+ shortName: z.ZodOptional<z.ZodString>;
583
+ description: z.ZodOptional<z.ZodString>;
584
+ }, z.core.$loose>>;
585
+ clients: z.ZodDefault<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
586
+ id: z.ZodString;
587
+ slug: z.ZodString;
588
+ name: z.ZodString;
589
+ status: z.ZodDefault<z.ZodEnum<{
590
+ active: "active";
591
+ onboarding: "onboarding";
592
+ paused: "paused";
593
+ completed: "completed";
594
+ churned: "churned";
595
+ }>>;
596
+ source: z.ZodOptional<z.ZodString>;
597
+ identity: z.ZodDefault<z.ZodObject<{
598
+ organizationName: z.ZodOptional<z.ZodString>;
599
+ shortName: z.ZodOptional<z.ZodString>;
600
+ clientBrief: z.ZodDefault<z.ZodString>;
601
+ geographicFocus: z.ZodDefault<z.ZodArray<z.ZodString>>;
602
+ timeZone: z.ZodDefault<z.ZodString>;
603
+ }, z.core.$loose>>;
604
+ branding: z.ZodDefault<z.ZodObject<{
605
+ voice: z.ZodOptional<z.ZodString>;
606
+ tagline: z.ZodOptional<z.ZodString>;
607
+ values: z.ZodDefault<z.ZodArray<z.ZodString>>;
608
+ }, z.core.$loose>>;
609
+ workspace: z.ZodDefault<z.ZodObject<{
610
+ kind: z.ZodOptional<z.ZodEnum<{
611
+ "external-project": "external-project";
612
+ "internal-project": "internal-project";
613
+ none: "none";
614
+ }>>;
615
+ owner: z.ZodOptional<z.ZodEnum<{
616
+ platform: "platform";
617
+ client: "client";
618
+ developer: "developer";
619
+ }>>;
620
+ projectId: z.ZodOptional<z.ZodString>;
621
+ workspacePath: z.ZodOptional<z.ZodString>;
622
+ }, z.core.$loose>>;
623
+ links: z.ZodDefault<z.ZodObject<{
624
+ projectIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
625
+ primaryCompanyId: z.ZodOptional<z.ZodString>;
626
+ primaryContactId: z.ZodOptional<z.ZodString>;
627
+ sourceDealId: z.ZodOptional<z.ZodString>;
628
+ }, z.core.$strip>>;
629
+ prompts: z.ZodDefault<z.ZodObject<{
630
+ defaultContext: z.ZodDefault<z.ZodString>;
631
+ }, z.core.$loose>>;
632
+ config: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodType<JsonValue, unknown, z.core.$ZodTypeInternals<JsonValue, unknown>>>>;
633
+ customValues: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodType<JsonValue, unknown, z.core.$ZodTypeInternals<JsonValue, unknown>>>>;
634
+ }, z.core.$strict>>>>;
635
+ customers: z.ZodDefault<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
636
+ id: z.ZodString;
637
+ order: z.ZodNumber;
638
+ name: z.ZodDefault<z.ZodString>;
639
+ description: z.ZodDefault<z.ZodString>;
640
+ jobsToBeDone: z.ZodDefault<z.ZodString>;
641
+ pains: z.ZodDefault<z.ZodArray<z.ZodString>>;
642
+ gains: z.ZodDefault<z.ZodArray<z.ZodString>>;
643
+ firmographics: z.ZodDefault<z.ZodObject<{
644
+ industry: z.ZodOptional<z.ZodString>;
645
+ companySize: z.ZodOptional<z.ZodString>;
646
+ region: z.ZodOptional<z.ZodString>;
647
+ }, z.core.$strip>>;
648
+ valueProp: z.ZodDefault<z.ZodString>;
649
+ }, z.core.$strip>>>>;
650
+ offerings: z.ZodDefault<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
651
+ id: z.ZodString;
652
+ order: z.ZodNumber;
653
+ name: z.ZodDefault<z.ZodString>;
654
+ description: z.ZodDefault<z.ZodString>;
655
+ pricingModel: z.ZodDefault<z.ZodEnum<{
656
+ custom: "custom";
657
+ "one-time": "one-time";
658
+ subscription: "subscription";
659
+ "usage-based": "usage-based";
660
+ }>>;
661
+ price: z.ZodDefault<z.ZodNumber>;
662
+ currency: z.ZodDefault<z.ZodString>;
663
+ targetSegmentIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
664
+ deliveryFeatureId: z.ZodOptional<z.ZodString>;
665
+ }, z.core.$strip>>>>;
666
+ roles: z.ZodDefault<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
667
+ id: z.ZodString;
668
+ order: z.ZodNumber;
669
+ title: z.ZodString;
670
+ responsibilities: z.ZodDefault<z.ZodArray<z.ZodString>>;
671
+ reportsToId: z.ZodOptional<z.ZodString>;
672
+ heldBy: z.ZodOptional<z.ZodUnion<readonly [z.ZodDiscriminatedUnion<[z.ZodObject<{
673
+ kind: z.ZodLiteral<"human">;
674
+ userId: z.ZodString;
675
+ }, z.core.$strip>, z.ZodObject<{
676
+ kind: z.ZodLiteral<"agent">;
677
+ agentId: z.ZodString;
678
+ }, z.core.$strip>, z.ZodObject<{
679
+ kind: z.ZodLiteral<"team">;
680
+ memberIds: z.ZodArray<z.ZodString>;
681
+ }, z.core.$strip>], "kind">, z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
682
+ kind: z.ZodLiteral<"human">;
683
+ userId: z.ZodString;
684
+ }, z.core.$strip>, z.ZodObject<{
685
+ kind: z.ZodLiteral<"agent">;
686
+ agentId: z.ZodString;
687
+ }, z.core.$strip>, z.ZodObject<{
688
+ kind: z.ZodLiteral<"team">;
689
+ memberIds: z.ZodArray<z.ZodString>;
690
+ }, z.core.$strip>], "kind">>]>>;
691
+ responsibleFor: z.ZodOptional<z.ZodArray<z.ZodString>>;
692
+ }, z.core.$strip>>>>;
693
+ goals: z.ZodDefault<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
694
+ id: z.ZodString;
695
+ order: z.ZodNumber;
696
+ description: z.ZodString;
697
+ periodStart: z.ZodString;
698
+ periodEnd: z.ZodString;
699
+ keyResults: z.ZodDefault<z.ZodArray<z.ZodObject<{
700
+ id: z.ZodString;
701
+ description: z.ZodString;
702
+ targetMetric: z.ZodString;
703
+ currentValue: z.ZodDefault<z.ZodNumber>;
704
+ targetValue: z.ZodOptional<z.ZodNumber>;
705
+ }, z.core.$strip>>>;
706
+ }, z.core.$strip>>>>;
707
+ systems: z.ZodDefault<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodType<SystemEntry, unknown, z.core.$ZodTypeInternals<SystemEntry, unknown>>>>>;
708
+ ontology: z.ZodDefault<z.ZodDefault<z.ZodObject<{
709
+ objectTypes: z.ZodOptional<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
710
+ id: z.ZodString;
711
+ label: z.ZodOptional<z.ZodString>;
712
+ description: z.ZodOptional<z.ZodString>;
713
+ ownerSystemId: z.ZodOptional<z.ZodString>;
714
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
715
+ properties: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
716
+ storage: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
717
+ }, z.core.$loose>>>>;
718
+ linkTypes: z.ZodOptional<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
719
+ id: z.ZodString;
720
+ label: z.ZodOptional<z.ZodString>;
721
+ description: z.ZodOptional<z.ZodString>;
722
+ ownerSystemId: z.ZodOptional<z.ZodString>;
723
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
724
+ from: z.ZodString;
725
+ to: z.ZodString;
726
+ cardinality: z.ZodOptional<z.ZodString>;
727
+ via: z.ZodOptional<z.ZodString>;
728
+ }, z.core.$loose>>>>;
729
+ actionTypes: z.ZodOptional<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
730
+ id: z.ZodString;
731
+ label: z.ZodOptional<z.ZodString>;
732
+ description: z.ZodOptional<z.ZodString>;
733
+ ownerSystemId: z.ZodOptional<z.ZodString>;
734
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
735
+ actsOn: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodString>>>;
736
+ input: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
737
+ effects: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
738
+ }, z.core.$loose>>>>;
739
+ catalogTypes: z.ZodOptional<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
740
+ id: z.ZodString;
741
+ label: z.ZodOptional<z.ZodString>;
742
+ description: z.ZodOptional<z.ZodString>;
743
+ ownerSystemId: z.ZodOptional<z.ZodString>;
744
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
745
+ kind: z.ZodOptional<z.ZodString>;
746
+ appliesTo: z.ZodOptional<z.ZodString>;
747
+ entries: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
748
+ }, z.core.$loose>>>>;
749
+ eventTypes: z.ZodOptional<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
750
+ id: z.ZodString;
751
+ label: z.ZodOptional<z.ZodString>;
752
+ description: z.ZodOptional<z.ZodString>;
753
+ ownerSystemId: z.ZodOptional<z.ZodString>;
754
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
755
+ payload: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
756
+ }, z.core.$loose>>>>;
757
+ interfaceTypes: z.ZodOptional<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
758
+ id: z.ZodString;
759
+ label: z.ZodOptional<z.ZodString>;
760
+ description: z.ZodOptional<z.ZodString>;
761
+ ownerSystemId: z.ZodOptional<z.ZodString>;
762
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
763
+ properties: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
764
+ }, z.core.$loose>>>>;
765
+ valueTypes: z.ZodOptional<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
766
+ id: z.ZodString;
767
+ label: z.ZodOptional<z.ZodString>;
768
+ description: z.ZodOptional<z.ZodString>;
769
+ ownerSystemId: z.ZodOptional<z.ZodString>;
770
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
771
+ primitive: z.ZodOptional<z.ZodString>;
772
+ }, z.core.$loose>>>>;
773
+ sharedProperties: z.ZodOptional<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
774
+ id: z.ZodString;
775
+ label: z.ZodOptional<z.ZodString>;
776
+ description: z.ZodOptional<z.ZodString>;
777
+ ownerSystemId: z.ZodOptional<z.ZodString>;
778
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
779
+ valueType: z.ZodOptional<z.ZodString>;
780
+ searchable: z.ZodOptional<z.ZodBoolean>;
781
+ pii: z.ZodOptional<z.ZodBoolean>;
782
+ }, z.core.$loose>>>>;
783
+ groups: z.ZodOptional<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
784
+ id: z.ZodString;
785
+ label: z.ZodOptional<z.ZodString>;
786
+ description: z.ZodOptional<z.ZodString>;
787
+ ownerSystemId: z.ZodOptional<z.ZodString>;
788
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
789
+ members: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodString>>>;
790
+ }, z.core.$loose>>>>;
791
+ endpoints: z.ZodOptional<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
792
+ id: z.ZodString;
793
+ label: z.ZodOptional<z.ZodString>;
794
+ description: z.ZodOptional<z.ZodString>;
795
+ ownerSystemId: z.ZodOptional<z.ZodString>;
796
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
797
+ route: z.ZodOptional<z.ZodString>;
798
+ }, z.core.$loose>>>>;
799
+ }, z.core.$strip>>>;
800
+ resources: z.ZodDefault<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
801
+ id: z.ZodString;
802
+ order: z.ZodDefault<z.ZodNumber>;
803
+ systemPath: z.ZodString;
804
+ title: z.ZodOptional<z.ZodString>;
805
+ description: z.ZodOptional<z.ZodString>;
806
+ ownerRoleId: z.ZodOptional<z.ZodString>;
807
+ status: z.ZodEnum<{
808
+ active: "active";
809
+ deprecated: "deprecated";
810
+ archived: "archived";
811
+ }>;
812
+ ontology: z.ZodOptional<z.ZodObject<{
813
+ actions: z.ZodOptional<z.ZodArray<z.ZodString>>;
814
+ primaryAction: z.ZodOptional<z.ZodString>;
815
+ reads: z.ZodOptional<z.ZodArray<z.ZodString>>;
816
+ writes: z.ZodOptional<z.ZodArray<z.ZodString>>;
817
+ usesCatalogs: z.ZodOptional<z.ZodArray<z.ZodString>>;
818
+ emits: z.ZodOptional<z.ZodArray<z.ZodString>>;
819
+ contract: z.ZodOptional<z.ZodObject<{
820
+ input: z.ZodOptional<z.ZodString>;
821
+ output: z.ZodOptional<z.ZodString>;
822
+ }, z.core.$strip>>;
823
+ }, z.core.$strip>>;
824
+ codeRefs: z.ZodDefault<z.ZodArray<z.ZodObject<{
825
+ path: z.ZodString;
826
+ role: z.ZodEnum<{
827
+ entrypoint: "entrypoint";
828
+ handler: "handler";
829
+ schema: "schema";
830
+ test: "test";
831
+ docs: "docs";
832
+ config: "config";
833
+ }>;
834
+ symbol: z.ZodOptional<z.ZodString>;
835
+ description: z.ZodOptional<z.ZodString>;
836
+ }, z.core.$strip>>>;
837
+ kind: z.ZodLiteral<"workflow">;
838
+ emits: z.ZodOptional<z.ZodArray<z.ZodObject<{
839
+ eventKey: z.ZodString;
840
+ label: z.ZodString;
841
+ payloadSchema: z.ZodOptional<z.ZodString>;
842
+ lifecycle: z.ZodOptional<z.ZodEnum<{
843
+ active: "active";
844
+ deprecated: "deprecated";
845
+ draft: "draft";
846
+ beta: "beta";
847
+ archived: "archived";
848
+ }>>;
849
+ }, z.core.$strip>>>;
850
+ }, z.core.$strip>, z.ZodObject<{
851
+ id: z.ZodString;
852
+ order: z.ZodDefault<z.ZodNumber>;
853
+ systemPath: z.ZodString;
854
+ title: z.ZodOptional<z.ZodString>;
855
+ description: z.ZodOptional<z.ZodString>;
856
+ ownerRoleId: z.ZodOptional<z.ZodString>;
857
+ status: z.ZodEnum<{
858
+ active: "active";
859
+ deprecated: "deprecated";
860
+ archived: "archived";
861
+ }>;
862
+ ontology: z.ZodOptional<z.ZodObject<{
863
+ actions: z.ZodOptional<z.ZodArray<z.ZodString>>;
864
+ primaryAction: z.ZodOptional<z.ZodString>;
865
+ reads: z.ZodOptional<z.ZodArray<z.ZodString>>;
866
+ writes: z.ZodOptional<z.ZodArray<z.ZodString>>;
867
+ usesCatalogs: z.ZodOptional<z.ZodArray<z.ZodString>>;
868
+ emits: z.ZodOptional<z.ZodArray<z.ZodString>>;
869
+ contract: z.ZodOptional<z.ZodObject<{
870
+ input: z.ZodOptional<z.ZodString>;
871
+ output: z.ZodOptional<z.ZodString>;
872
+ }, z.core.$strip>>;
873
+ }, z.core.$strip>>;
874
+ codeRefs: z.ZodDefault<z.ZodArray<z.ZodObject<{
875
+ path: z.ZodString;
876
+ role: z.ZodEnum<{
877
+ entrypoint: "entrypoint";
878
+ handler: "handler";
879
+ schema: "schema";
880
+ test: "test";
881
+ docs: "docs";
882
+ config: "config";
883
+ }>;
884
+ symbol: z.ZodOptional<z.ZodString>;
885
+ description: z.ZodOptional<z.ZodString>;
886
+ }, z.core.$strip>>>;
887
+ kind: z.ZodLiteral<"agent">;
888
+ agentKind: z.ZodEnum<{
889
+ platform: "platform";
890
+ orchestrator: "orchestrator";
891
+ specialist: "specialist";
892
+ utility: "utility";
893
+ }>;
894
+ actsAsRoleId: z.ZodOptional<z.ZodString>;
895
+ sessionCapable: z.ZodBoolean;
896
+ invocations: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
897
+ kind: z.ZodLiteral<"slash-command">;
898
+ command: z.ZodString;
899
+ toolFactory: z.ZodOptional<z.ZodString>;
900
+ }, z.core.$strip>, z.ZodObject<{
901
+ kind: z.ZodLiteral<"mcp-tool">;
902
+ server: z.ZodString;
903
+ name: z.ZodString;
904
+ }, z.core.$strip>, z.ZodObject<{
905
+ kind: z.ZodLiteral<"api-endpoint">;
906
+ method: z.ZodEnum<{
907
+ GET: "GET";
908
+ POST: "POST";
909
+ PATCH: "PATCH";
910
+ DELETE: "DELETE";
911
+ }>;
912
+ path: z.ZodString;
913
+ requestSchema: z.ZodOptional<z.ZodString>;
914
+ responseSchema: z.ZodOptional<z.ZodString>;
915
+ }, z.core.$strip>, z.ZodObject<{
916
+ kind: z.ZodLiteral<"script-execution">;
917
+ resourceId: z.ZodString;
918
+ }, z.core.$strip>], "kind">>>;
919
+ emits: z.ZodOptional<z.ZodArray<z.ZodObject<{
920
+ eventKey: z.ZodString;
921
+ label: z.ZodString;
922
+ payloadSchema: z.ZodOptional<z.ZodString>;
923
+ lifecycle: z.ZodOptional<z.ZodEnum<{
924
+ active: "active";
925
+ deprecated: "deprecated";
926
+ draft: "draft";
927
+ beta: "beta";
928
+ archived: "archived";
929
+ }>>;
930
+ }, z.core.$strip>>>;
931
+ }, z.core.$strip>, z.ZodObject<{
932
+ id: z.ZodString;
933
+ order: z.ZodDefault<z.ZodNumber>;
934
+ systemPath: z.ZodString;
935
+ title: z.ZodOptional<z.ZodString>;
936
+ description: z.ZodOptional<z.ZodString>;
937
+ ownerRoleId: z.ZodOptional<z.ZodString>;
938
+ status: z.ZodEnum<{
939
+ active: "active";
940
+ deprecated: "deprecated";
941
+ archived: "archived";
942
+ }>;
943
+ ontology: z.ZodOptional<z.ZodObject<{
944
+ actions: z.ZodOptional<z.ZodArray<z.ZodString>>;
945
+ primaryAction: z.ZodOptional<z.ZodString>;
946
+ reads: z.ZodOptional<z.ZodArray<z.ZodString>>;
947
+ writes: z.ZodOptional<z.ZodArray<z.ZodString>>;
948
+ usesCatalogs: z.ZodOptional<z.ZodArray<z.ZodString>>;
949
+ emits: z.ZodOptional<z.ZodArray<z.ZodString>>;
950
+ contract: z.ZodOptional<z.ZodObject<{
951
+ input: z.ZodOptional<z.ZodString>;
952
+ output: z.ZodOptional<z.ZodString>;
953
+ }, z.core.$strip>>;
954
+ }, z.core.$strip>>;
955
+ codeRefs: z.ZodDefault<z.ZodArray<z.ZodObject<{
956
+ path: z.ZodString;
957
+ role: z.ZodEnum<{
958
+ entrypoint: "entrypoint";
959
+ handler: "handler";
960
+ schema: "schema";
961
+ test: "test";
962
+ docs: "docs";
963
+ config: "config";
964
+ }>;
965
+ symbol: z.ZodOptional<z.ZodString>;
966
+ description: z.ZodOptional<z.ZodString>;
967
+ }, z.core.$strip>>>;
968
+ kind: z.ZodLiteral<"integration">;
969
+ provider: z.ZodString;
970
+ }, z.core.$strip>, z.ZodObject<{
971
+ id: z.ZodString;
972
+ order: z.ZodDefault<z.ZodNumber>;
973
+ systemPath: z.ZodString;
974
+ title: z.ZodOptional<z.ZodString>;
975
+ description: z.ZodOptional<z.ZodString>;
976
+ ownerRoleId: z.ZodOptional<z.ZodString>;
977
+ status: z.ZodEnum<{
978
+ active: "active";
979
+ deprecated: "deprecated";
980
+ archived: "archived";
981
+ }>;
982
+ ontology: z.ZodOptional<z.ZodObject<{
983
+ actions: z.ZodOptional<z.ZodArray<z.ZodString>>;
984
+ primaryAction: z.ZodOptional<z.ZodString>;
985
+ reads: z.ZodOptional<z.ZodArray<z.ZodString>>;
986
+ writes: z.ZodOptional<z.ZodArray<z.ZodString>>;
987
+ usesCatalogs: z.ZodOptional<z.ZodArray<z.ZodString>>;
988
+ emits: z.ZodOptional<z.ZodArray<z.ZodString>>;
989
+ contract: z.ZodOptional<z.ZodObject<{
990
+ input: z.ZodOptional<z.ZodString>;
991
+ output: z.ZodOptional<z.ZodString>;
992
+ }, z.core.$strip>>;
993
+ }, z.core.$strip>>;
994
+ codeRefs: z.ZodDefault<z.ZodArray<z.ZodObject<{
995
+ path: z.ZodString;
996
+ role: z.ZodEnum<{
997
+ entrypoint: "entrypoint";
998
+ handler: "handler";
999
+ schema: "schema";
1000
+ test: "test";
1001
+ docs: "docs";
1002
+ config: "config";
1003
+ }>;
1004
+ symbol: z.ZodOptional<z.ZodString>;
1005
+ description: z.ZodOptional<z.ZodString>;
1006
+ }, z.core.$strip>>>;
1007
+ kind: z.ZodLiteral<"script">;
1008
+ language: z.ZodEnum<{
1009
+ shell: "shell";
1010
+ sql: "sql";
1011
+ typescript: "typescript";
1012
+ python: "python";
1013
+ }>;
1014
+ source: z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
1015
+ file: z.ZodString;
1016
+ }, z.core.$strip>]>;
1017
+ }, z.core.$strip>], "kind">>>>;
1018
+ topology: z.ZodDefault<z.ZodDefault<z.ZodObject<{
1019
+ version: z.ZodDefault<z.ZodLiteral<1>>;
1020
+ relationships: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
1021
+ from: z.ZodDiscriminatedUnion<[z.ZodObject<{
1022
+ kind: z.ZodLiteral<"system">;
1023
+ id: z.ZodString;
1024
+ }, z.core.$strip>, z.ZodObject<{
1025
+ kind: z.ZodLiteral<"resource">;
1026
+ id: z.ZodString;
1027
+ }, z.core.$strip>, z.ZodObject<{
1028
+ kind: z.ZodLiteral<"ontology">;
1029
+ id: z.ZodString;
1030
+ }, z.core.$strip>, z.ZodObject<{
1031
+ kind: z.ZodLiteral<"role">;
1032
+ id: z.ZodString;
1033
+ }, z.core.$strip>, z.ZodObject<{
1034
+ kind: z.ZodLiteral<"trigger">;
1035
+ id: z.ZodString;
1036
+ }, z.core.$strip>, z.ZodObject<{
1037
+ kind: z.ZodLiteral<"humanCheckpoint">;
1038
+ id: z.ZodString;
1039
+ }, z.core.$strip>, z.ZodObject<{
1040
+ kind: z.ZodLiteral<"externalResource">;
1041
+ id: z.ZodString;
1042
+ }, z.core.$strip>], "kind">;
1043
+ kind: z.ZodEnum<{
1044
+ triggers: "triggers";
1045
+ uses: "uses";
1046
+ approval: "approval";
1047
+ }>;
1048
+ to: z.ZodDiscriminatedUnion<[z.ZodObject<{
1049
+ kind: z.ZodLiteral<"system">;
1050
+ id: z.ZodString;
1051
+ }, z.core.$strip>, z.ZodObject<{
1052
+ kind: z.ZodLiteral<"resource">;
1053
+ id: z.ZodString;
1054
+ }, z.core.$strip>, z.ZodObject<{
1055
+ kind: z.ZodLiteral<"ontology">;
1056
+ id: z.ZodString;
1057
+ }, z.core.$strip>, z.ZodObject<{
1058
+ kind: z.ZodLiteral<"role">;
1059
+ id: z.ZodString;
1060
+ }, z.core.$strip>, z.ZodObject<{
1061
+ kind: z.ZodLiteral<"trigger">;
1062
+ id: z.ZodString;
1063
+ }, z.core.$strip>, z.ZodObject<{
1064
+ kind: z.ZodLiteral<"humanCheckpoint">;
1065
+ id: z.ZodString;
1066
+ }, z.core.$strip>, z.ZodObject<{
1067
+ kind: z.ZodLiteral<"externalResource">;
1068
+ id: z.ZodString;
1069
+ }, z.core.$strip>], "kind">;
1070
+ systemPath: z.ZodOptional<z.ZodString>;
1071
+ required: z.ZodOptional<z.ZodBoolean>;
1072
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodType<JsonValue, unknown, z.core.$ZodTypeInternals<JsonValue, unknown>>>>;
1073
+ }, z.core.$strip>>>;
1074
+ }, z.core.$strip>>>;
1075
+ actions: z.ZodDefault<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
1076
+ id: z.ZodString;
1077
+ order: z.ZodNumber;
1078
+ label: z.ZodString;
1079
+ description: z.ZodOptional<z.ZodString>;
1080
+ scope: z.ZodDefault<z.ZodUnion<readonly [z.ZodLiteral<"global">, z.ZodObject<{
1081
+ domain: z.ZodString;
1082
+ }, z.core.$strip>]>>;
1083
+ resourceId: z.ZodOptional<z.ZodString>;
1084
+ affects: z.ZodOptional<z.ZodArray<z.ZodString>>;
1085
+ invocations: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
1086
+ kind: z.ZodLiteral<"slash-command">;
1087
+ command: z.ZodString;
1088
+ toolFactory: z.ZodOptional<z.ZodString>;
1089
+ }, z.core.$strip>, z.ZodObject<{
1090
+ kind: z.ZodLiteral<"mcp-tool">;
1091
+ server: z.ZodString;
1092
+ name: z.ZodString;
1093
+ }, z.core.$strip>, z.ZodObject<{
1094
+ kind: z.ZodLiteral<"api-endpoint">;
1095
+ method: z.ZodEnum<{
1096
+ GET: "GET";
1097
+ POST: "POST";
1098
+ PATCH: "PATCH";
1099
+ DELETE: "DELETE";
1100
+ }>;
1101
+ path: z.ZodString;
1102
+ requestSchema: z.ZodOptional<z.ZodString>;
1103
+ responseSchema: z.ZodOptional<z.ZodString>;
1104
+ }, z.core.$strip>, z.ZodObject<{
1105
+ kind: z.ZodLiteral<"script-execution">;
1106
+ resourceId: z.ZodString;
1107
+ }, z.core.$strip>], "kind">>>;
1108
+ knowledge: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodString>>>;
1109
+ lifecycle: z.ZodDefault<z.ZodEnum<{
1110
+ active: "active";
1111
+ deprecated: "deprecated";
1112
+ draft: "draft";
1113
+ beta: "beta";
1114
+ archived: "archived";
1115
+ }>>;
1116
+ }, z.core.$strip>>>>;
1117
+ entities: z.ZodDefault<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
1118
+ id: z.ZodString;
1119
+ order: z.ZodNumber;
1120
+ label: z.ZodString;
1121
+ description: z.ZodOptional<z.ZodString>;
1122
+ ownedBySystemId: z.ZodString;
1123
+ table: z.ZodOptional<z.ZodString>;
1124
+ rowSchema: z.ZodOptional<z.ZodString>;
1125
+ stateCatalogId: z.ZodOptional<z.ZodString>;
1126
+ links: z.ZodOptional<z.ZodArray<z.ZodObject<{
1127
+ toEntity: z.ZodString;
1128
+ kind: z.ZodEnum<{
1129
+ "belongs-to": "belongs-to";
1130
+ "has-many": "has-many";
1131
+ "has-one": "has-one";
1132
+ "many-to-many": "many-to-many";
1133
+ }>;
1134
+ via: z.ZodOptional<z.ZodString>;
1135
+ label: z.ZodOptional<z.ZodString>;
1136
+ }, z.core.$strip>>>;
1137
+ }, z.core.$strip>>>>;
1138
+ knowledge: z.ZodDefault<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
1139
+ id: z.ZodString;
1140
+ kind: z.ZodEnum<{
1141
+ playbook: "playbook";
1142
+ strategy: "strategy";
1143
+ reference: "reference";
1144
+ }>;
1145
+ title: z.ZodString;
1146
+ summary: z.ZodString;
1147
+ icon: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
1148
+ message: "message";
1149
+ error: "error";
1150
+ agent: "agent";
1151
+ workflow: "workflow";
1152
+ "google-sheets": "google-sheets";
1153
+ dashboard: "dashboard";
1154
+ calendar: "calendar";
1155
+ sales: "sales";
1156
+ crm: "crm";
1157
+ "lead-gen": "lead-gen";
1158
+ projects: "projects";
1159
+ clients: "clients";
1160
+ operations: "operations";
1161
+ monitoring: "monitoring";
1162
+ knowledge: "knowledge";
1163
+ settings: "settings";
1164
+ admin: "admin";
1165
+ archive: "archive";
1166
+ business: "business";
1167
+ finance: "finance";
1168
+ platform: "platform";
1169
+ seo: "seo";
1170
+ playbook: "playbook";
1171
+ strategy: "strategy";
1172
+ reference: "reference";
1173
+ integration: "integration";
1174
+ database: "database";
1175
+ user: "user";
1176
+ team: "team";
1177
+ gmail: "gmail";
1178
+ attio: "attio";
1179
+ overview: "overview";
1180
+ "command-view": "command-view";
1181
+ "command-queue": "command-queue";
1182
+ pipeline: "pipeline";
1183
+ lists: "lists";
1184
+ resources: "resources";
1185
+ approve: "approve";
1186
+ reject: "reject";
1187
+ retry: "retry";
1188
+ edit: "edit";
1189
+ view: "view";
1190
+ launch: "launch";
1191
+ "message-plus": "message-plus";
1192
+ escalate: "escalate";
1193
+ promote: "promote";
1194
+ submit: "submit";
1195
+ email: "email";
1196
+ success: "success";
1197
+ warning: "warning";
1198
+ info: "info";
1199
+ pending: "pending";
1200
+ bolt: "bolt";
1201
+ building: "building";
1202
+ briefcase: "briefcase";
1203
+ apps: "apps";
1204
+ graph: "graph";
1205
+ shield: "shield";
1206
+ users: "users";
1207
+ "chart-bar": "chart-bar";
1208
+ search: "search";
1209
+ }>, z.ZodString]>>;
1210
+ externalUrl: z.ZodOptional<z.ZodString>;
1211
+ sourceFilePath: z.ZodOptional<z.ZodString>;
1212
+ body: z.ZodString;
1213
+ links: z.ZodDefault<z.ZodArray<z.ZodPipe<z.ZodUnion<readonly [z.ZodObject<{
1214
+ target: z.ZodObject<{
1215
+ kind: z.ZodEnum<{
1216
+ knowledge: "knowledge";
1217
+ system: "system";
1218
+ resource: "resource";
1219
+ action: "action";
1220
+ ontology: "ontology";
1221
+ role: "role";
1222
+ client: "client";
1223
+ stage: "stage";
1224
+ goal: "goal";
1225
+ "customer-segment": "customer-segment";
1226
+ offering: "offering";
1227
+ }>;
1228
+ id: z.ZodString;
1229
+ }, z.core.$strip>;
1230
+ }, z.core.$strip>, z.ZodObject<{
1231
+ nodeId: z.ZodUnion<readonly [z.ZodString, z.ZodTemplateLiteral<`ontology:${string}`>]>;
1232
+ }, z.core.$strip>]>, z.ZodTransform<{
1233
+ target: {
1234
+ kind: "knowledge" | "system" | "resource" | "action" | "ontology" | "role" | "client" | "stage" | "goal" | "customer-segment" | "offering";
1235
+ id: string;
1236
+ };
1237
+ nodeId: string;
1238
+ }, {
1239
+ nodeId: string;
1240
+ } | {
1241
+ target: {
1242
+ kind: "knowledge" | "system" | "resource" | "action" | "ontology" | "role" | "client" | "stage" | "goal" | "customer-segment" | "offering";
1243
+ id: string;
1244
+ };
1245
+ }>>>>;
1246
+ ownerIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
1247
+ updatedAt: z.ZodString;
1248
+ }, z.core.$strip>>>>;
1249
+ }, z.core.$strip>;
1250
+
1251
+ type OrganizationModel = z.infer<typeof OrganizationModelSchema>;
1252
+ type OrganizationModelResourceKind = z.infer<typeof ResourceKindSchema>;
1253
+
1254
+ declare const ContentItemResponseSchema: z.ZodObject<{
1255
+ id: z.ZodString;
1256
+ organizationId: z.ZodString;
1257
+ title: z.ZodString;
1258
+ body: z.ZodNullable<z.ZodString>;
1259
+ payload: z.ZodUnknown;
1260
+ status: z.ZodString;
1261
+ pillar: z.ZodNullable<z.ZodString>;
1262
+ pipelineId: z.ZodNullable<z.ZodString>;
1263
+ clientId: z.ZodNullable<z.ZodString>;
1264
+ sourceAssetId: z.ZodNullable<z.ZodString>;
1265
+ processingState: z.ZodRecord<z.ZodString, z.ZodObject<{
1266
+ status: z.ZodEnum<{
1267
+ error: "error";
1268
+ success: "success";
1269
+ no_result: "no_result";
1270
+ skipped: "skipped";
1271
+ }>;
1272
+ data: z.ZodOptional<z.ZodUnknown>;
1273
+ }, z.core.$loose>>;
1274
+ reviewedAt: z.ZodNullable<z.ZodString>;
1275
+ reviewedBy: z.ZodNullable<z.ZodString>;
1276
+ reviewerFeedback: z.ZodNullable<z.ZodString>;
1277
+ rejectReason: z.ZodNullable<z.ZodString>;
1278
+ createdBy: z.ZodNullable<z.ZodString>;
1279
+ updatedBy: z.ZodNullable<z.ZodString>;
1280
+ createdAt: z.ZodString;
1281
+ updatedAt: z.ZodString;
1282
+ }, z.core.$strip>;
1283
+ type ContentItemResponse = z.infer<typeof ContentItemResponseSchema>;
1284
+
1285
+ type SystemSidebarComponent = ComponentType;
1286
+ type SystemIconComponent = ComponentType<{
1287
+ size?: number;
1288
+ stroke?: number;
1289
+ }>;
1290
+ type SystemSidebarWidthResolver = number | ((context: {
1291
+ currentPath: string;
1292
+ }) => number);
1293
+ interface SystemModule {
1294
+ /** Unique stable identifier for this UI system module. */
1295
+ key: string;
1296
+ /** Organization Model system id this module presents. Omit for navigation-only app surfaces. */
1297
+ systemId?: string;
1298
+ /** Route prefixes owned by navigation-only app surfaces. */
1299
+ routePrefixes?: string[];
1300
+ /** Capability identifiers contributed by this system module. */
1301
+ capabilityIds?: string[];
1302
+ /** Icon used when this system node appears in shell navigation. */
1303
+ icon?: SystemIconComponent;
1304
+ /** Sidebar component rendered when this system's subtree route is active. */
1305
+ sidebar?: SystemSidebarComponent;
1306
+ /** Optional shell sidebar width override. Defaults to 250px. */
1307
+ sidebarWidth?: SystemSidebarWidthResolver;
1308
+ /** Operations-only bridge connecting this system to the organization graph node. */
1309
+ organizationGraph?: OrganizationGraphSystemBridge;
1310
+ }
1311
+ interface OrganizationGraphSystemBridge {
1312
+ systemId?: string;
1313
+ }
1314
+
1315
+ interface ContentOverviewPageSlots {
1316
+ /** Optional content rendered after the page title, before the main body. Default: nothing rendered. */
1317
+ headerActions?: ReactNode;
1318
+ /** Optional content rendered below the main page stack. Default: nothing rendered. */
1319
+ footer?: ReactNode;
1320
+ }
1321
+ declare function ContentOverviewPage({ headerActions, footer }?: ContentOverviewPageSlots): react_jsx_runtime.JSX.Element;
1322
+
1323
+ interface ContentItemsPageSlots {
1324
+ /** Optional content rendered after the page title. Default: nothing rendered. */
1325
+ headerActions?: ReactNode;
1326
+ }
1327
+ /**
1328
+ * Flat, cross-pipeline items report -- kept as a reachable filtered view rather than
1329
+ * primary navigation (usability review Proposal, Decision 3; finding 1). The sidebar's
1330
+ * review-queue nav entry links here with `?review=pending`; `MyReviewQueuePanel`'s
1331
+ * "See all" does the same.
1332
+ */
1333
+ declare function ContentItemsPage({ headerActions }?: ContentItemsPageSlots): react_jsx_runtime.JSX.Element;
1334
+
1335
+ interface ContentItemReviewPageSlots {
1336
+ /** Optional content rendered after the page title. Default: nothing rendered. */
1337
+ headerActions?: ReactNode;
1338
+ }
1339
+ declare function ContentItemReviewPage({ itemId, headerActions }: {
1340
+ itemId: string;
1341
+ } & ContentItemReviewPageSlots): react_jsx_runtime.JSX.Element;
1342
+
1343
+ interface ContentPipelinesPageSlots {
1344
+ /** Optional content rendered after the page title. Default: nothing rendered. */
1345
+ headerActions?: ReactNode;
1346
+ }
1347
+ /**
1348
+ * Pipelines -- one row per `content:catalog/pipeline` entry. Mirrors `LeadGenListsPage`
1349
+ * structurally; unlike lists, pipelines come from the Organization Model rather than a
1350
+ * paginated API resource, so there is no pagination or server-side search here.
1351
+ */
1352
+ declare function ContentPipelinesPage({ headerActions }?: ContentPipelinesPageSlots): react_jsx_runtime.JSX.Element;
1353
+
1354
+ interface ContentPipelineWorkspacePageSlots {
1355
+ /** Optional content rendered after the page title. Default: nothing rendered. */
1356
+ headerActions?: ReactNode;
1357
+ }
1358
+ /**
1359
+ * Pipeline workspace -- tabbed via `?tab=`, matching how `LeadGenListDetailPage`
1360
+ * (`../../../lead-gen/pages/list-detail/ListDetailPage.tsx`) already does it.
1361
+ */
1362
+ declare function ContentPipelineWorkspacePage({ pipelineId, headerActions }: {
1363
+ pipelineId: string;
1364
+ } & ContentPipelineWorkspacePageSlots): react_jsx_runtime.JSX.Element;
1365
+
1366
+ interface ContentDistributionsPageSlots {
1367
+ /** Optional content rendered after the page title. Default: nothing rendered. */
1368
+ headerActions?: ReactNode;
1369
+ }
1370
+ /**
1371
+ * Distributions -- ported from `/acquisition/content/distributions`. Two data-layer
1372
+ * changes from the original: the read goes through `useContentDistributions` (API,
1373
+ * not Supabase-direct), and the list no longer joins `content_items(title, pillar)` --
1374
+ * titles are resolved client-side by pairing `useContentItems({ limit: 100 })` against
1375
+ * `contentItemId`. `format` and `status` have no `content:catalog` backing (only
1376
+ * status-the-item-field, pillar, and platform do -- distribution `status` is a
1377
+ * different, uncataloged vocabulary), so both filters run client-side over the
1378
+ * returned rows and their options are derived from the data present rather than a
1379
+ * hardcoded array.
1380
+ */
1381
+ declare function ContentDistributionsPage({ headerActions }?: ContentDistributionsPageSlots): react_jsx_runtime.JSX.Element;
1382
+
1383
+ interface ContentDistributionDetailPageSlots {
1384
+ /** Optional content rendered after the page title. Default: nothing rendered. */
1385
+ headerActions?: ReactNode;
1386
+ }
1387
+ /**
1388
+ * Distribution detail -- ported from `/acquisition/content/distribution/$distributionId`.
1389
+ * The four writes the original made through Supabase-direct hooks (checklist toggle,
1390
+ * platform-content edit, media delete, general field update) all collapse into
1391
+ * `useUpdateContentDistribution`, since each was a partial write of `checklist`,
1392
+ * `platformContent`, or `mediaUrls` and the PATCH route accepts all three plus the
1393
+ * general fields. Surfaces the four columns that have never been rendered anywhere:
1394
+ * `metrics`, `metricsUpdatedAt`, `publishMethod`, `platformPostId` -- `publishMethod` is
1395
+ * where D7's manual-publish state becomes visible (a row with `publishedAt` set and no
1396
+ * `platformPostId`).
1397
+ */
1398
+ declare function ContentDistributionDetailPage({ distributionId, headerActions }: {
1399
+ distributionId: string;
1400
+ } & ContentDistributionDetailPageSlots): react_jsx_runtime.JSX.Element;
1401
+
1402
+ /**
1403
+ * Optional page component overrides / slot injections for content pages. Each key maps
1404
+ * to a page surface; the value is an object of optional slot props (all absent ->
1405
+ * byte-identical default render). Mirrors `LeadGenPageOverrides`
1406
+ * (`../lead-gen/manifest.ts`) -- extend this map as more pages gain slot support.
1407
+ */
1408
+ interface ContentPageOverrides {
1409
+ /** Slot props injected into `ContentOverviewPage`. */
1410
+ overview?: ContentOverviewPageSlots;
1411
+ /** Slot props injected into `ContentItemsPage`. */
1412
+ items?: ContentItemsPageSlots;
1413
+ /** Slot props injected into `ContentItemReviewPage`. */
1414
+ itemReview?: ContentItemReviewPageSlots;
1415
+ /** Slot props injected into `ContentPipelinesPage`. */
1416
+ pipelines?: ContentPipelinesPageSlots;
1417
+ /** Slot props injected into `ContentPipelineWorkspacePage`. */
1418
+ pipelineWorkspace?: ContentPipelineWorkspacePageSlots;
1419
+ }
1420
+ /**
1421
+ * Extended `SystemModule` for the content feature that carries optional page overrides
1422
+ * alongside the standard manifest fields.
1423
+ */
1424
+ interface ContentSystemModule extends SystemModule {
1425
+ /**
1426
+ * Optional page override map. Absent -> no override (default renders apply).
1427
+ * Replaces the need for route-wrapper bolt-ons in tenant projects.
1428
+ */
1429
+ pages?: ContentPageOverrides;
1430
+ }
1431
+ /**
1432
+ * Manifest for the `content` System path (`U1`, top-level `content`). `systemId` is a
1433
+ * plain string matching the System path rather than an import from `@repo/core/content`
1434
+ * or the OM System declaration -- this package stays data-free by design (D6).
1435
+ *
1436
+ * `sidebar` wires in `ContentSidebar` (the two-entry nav). Page overrides and OM-derived
1437
+ * config are consumed by the caller via `useContentConfig` and the individual page
1438
+ * components, matching the `LeadGenSystemModule` pattern. `pages` is left unset here --
1439
+ * every page above renders its byte-identical default until a consumer supplies an
1440
+ * override.
1441
+ */
1442
+ declare const contentManifest: ContentSystemModule;
1443
+
1444
+ interface ContentPayloadField {
1445
+ /** Key into the `payload` object this field renders. */
1446
+ key: string;
1447
+ /** Display label. */
1448
+ label: string;
1449
+ /** Render hint. Defaults to 'text'. */
1450
+ kind?: 'text' | 'longText' | 'list';
1451
+ }
1452
+ interface PayloadBodyProps {
1453
+ /** The human's canonical, editable text -- `content_items.body` in the eventual schema. */
1454
+ body: string;
1455
+ onBodyChange: (next: string) => void;
1456
+ /**
1457
+ * The producer's original emission for this same text, frozen. `body` starts as a copy
1458
+ * of this value and diverges on first edit; the two are never reconciled, because they
1459
+ * answer different questions. This asymmetry is what makes Reset implementable.
1460
+ */
1461
+ originalBody: string;
1462
+ onReset: () => void;
1463
+ /**
1464
+ * The producer's full emission, rendered read-only per `payloadFields`. Declared
1465
+ * structurally rather than typed against any specific schema -- the card takes no
1466
+ * dependency on the content catalog contract. Omit either prop to hide the panel.
1467
+ */
1468
+ payload?: Record<string, unknown>;
1469
+ payloadFields?: ContentPayloadField[];
1470
+ disabled?: boolean;
1471
+ }
1472
+ /**
1473
+ * The editable body plus the producer's frozen original payload, read-only.
1474
+ *
1475
+ * A textarea rather than a read-only block: the reviewer rewrites a line, and Copy
1476
+ * (wherever the caller wires it) hands back the version just written, not the one the
1477
+ * producer emitted.
1478
+ */
1479
+ declare function PayloadBody({ body, onBodyChange, originalBody, onReset, payload, payloadFields, disabled }: PayloadBodyProps): react_jsx_runtime.JSX.Element;
1480
+
1481
+ interface ContentAlternateOption {
1482
+ /** Stable id for the React key -- text alone is not guaranteed unique. */
1483
+ id: string;
1484
+ text: string;
1485
+ }
1486
+ interface AlternatesPanelProps {
1487
+ /** The item's current canonical text, so the active opening/closing line can be highlighted. */
1488
+ body: string;
1489
+ onBodyChange: (next: string) => void;
1490
+ /** Alternate opening lines, including the current one, so a swap is always reversible. */
1491
+ hookOptions?: ContentAlternateOption[];
1492
+ /** Alternate closing lines, including the current one. */
1493
+ closeOptions?: ContentAlternateOption[];
1494
+ /** Fetch more of one kind. Absent hides the corresponding "more" control. */
1495
+ onMoreHooks?: () => void;
1496
+ onMoreCloses?: () => void;
1497
+ /** Which fetch, if any, is running for this item. */
1498
+ running?: 'hooks' | 'closes';
1499
+ /** Seconds the in-flight fetch has been running. */
1500
+ elapsed?: number;
1501
+ }
1502
+ /**
1503
+ * Replace the item's opening line.
1504
+ *
1505
+ * Line-based rather than sentence-based: the opening line stands alone with a blank
1506
+ * line under it in the shapes this generalizes from. Leading blank lines are skipped
1507
+ * so existing spacing survives the swap.
1508
+ */
1509
+ declare function swapFirstLine(text: string, replacement: string): string;
1510
+ /** The same operation for the closing line. */
1511
+ declare function swapLastLine(text: string, replacement: string): string;
1512
+ /** The item's opening line, ignoring leading blanks. Empty string if there is no text. */
1513
+ declare function firstLine(text: string): string;
1514
+ /** The item's closing line, ignoring trailing blanks. */
1515
+ declare function lastLine(text: string): string;
1516
+ /**
1517
+ * Swap the opening or closing line from a declared alternates list. Each option list
1518
+ * includes the current value so a swap is always reversible without a separate Reset.
1519
+ */
1520
+ declare function AlternatesPanel({ body, onBodyChange, hookOptions, closeOptions, onMoreHooks, onMoreCloses, running, elapsed }: AlternatesPanelProps): react_jsx_runtime.JSX.Element | null;
1521
+
1522
+ type ContentProcessingStatus = 'pending' | 'in_progress' | 'completed' | 'failed';
1523
+ interface ContentProcessingStep {
1524
+ /** Stable step key -- matches the pipeline step catalog's key, e.g. 'render' or 'verify'. */
1525
+ key: string;
1526
+ /** Display label. */
1527
+ label: string;
1528
+ status: ContentProcessingStatus;
1529
+ /** Seconds elapsed, shown while `status` is 'in_progress'. */
1530
+ elapsedSeconds?: number;
1531
+ }
1532
+ interface ProcessingStateStripProps {
1533
+ /**
1534
+ * Per-step processing state for this item, declared structurally per D3's shape
1535
+ * (`{ stepKey: { status, data? } }`) rather than imported from any content schema.
1536
+ */
1537
+ steps: ContentProcessingStep[];
1538
+ }
1539
+ /** "42s" under a minute, then "1m 20s". Seconds alone stop reading as progress past 60. */
1540
+ declare function formatElapsed(seconds: number): string;
1541
+ /**
1542
+ * A strip of badges, one per declared processing step, showing where this item is in
1543
+ * its pipeline. Purely a projection of caller-supplied state -- it fetches nothing and
1544
+ * writes nothing, matching D4: the tool that assigns processing state is the only writer.
1545
+ */
1546
+ declare function ProcessingStateStrip({ steps }: ProcessingStateStripProps): react_jsx_runtime.JSX.Element | null;
1547
+
1548
+ interface ContentReviewAction {
1549
+ /** Stable id, passed back through `onAction`. */
1550
+ id: string;
1551
+ label: string;
1552
+ icon?: ComponentType<{
1553
+ size?: number;
1554
+ }>;
1555
+ color?: string;
1556
+ /** Colors the button/modal red by default when `color` is omitted. */
1557
+ tone?: 'default' | 'danger';
1558
+ /** Ask for a plain confirmation before firing. Ignored when `requiresFeedback` is set. */
1559
+ requiresConfirmation?: boolean;
1560
+ /**
1561
+ * Shown in whichever modal opens. An action that collects optional feedback still wants
1562
+ * to say what the action does -- `requiresFeedback` supersedes `requiresConfirmation`,
1563
+ * so without this the explanation would be lost the moment a note field is added.
1564
+ */
1565
+ confirmationMessage?: string;
1566
+ /** Collect free-text feedback before firing -- e.g. `reviewer_feedback` / `reject_reason`. */
1567
+ requiresFeedback?: boolean;
1568
+ feedbackLabel?: string;
1569
+ feedbackPlaceholder?: string;
1570
+ /** Feedback below one non-whitespace character disables the modal's submit button. */
1571
+ feedbackRequired?: boolean;
1572
+ /**
1573
+ * Grades this action by consequence (proposal "grade actions by consequence" /
1574
+ * finding 10): publishing is irreversible and outward-facing -- the video pipeline's
1575
+ * Gate C says "never automate this one away" -- while approving a draft costs nothing
1576
+ * to undo. Defaults to `'standard'`, which reproduces today's rendering exactly
1577
+ * (`variant="light"`, no forced confirmation). `'irreversible'` renders the button
1578
+ * filled in `var(--color-warning)` (or `var(--color-error)` when `tone: 'danger'` is
1579
+ * also set) instead of light, and always gates behind a confirmation or feedback modal
1580
+ * carrying a standing warning line, even if the action itself set neither
1581
+ * `requiresConfirmation` nor `requiresFeedback` -- so a caller cannot accidentally ship
1582
+ * a one-click irreversible action.
1583
+ */
1584
+ consequence?: 'standard' | 'irreversible';
1585
+ }
1586
+ interface ReviewActionBarProps {
1587
+ /**
1588
+ * Declared review actions for this item's pipeline step -- typically approve and
1589
+ * reject per D5. Rendered from this list rather than hardcoded, following the
1590
+ * `TaskCard` precedent, so a tenant's step catalog can add a third action without a
1591
+ * card-level code change.
1592
+ */
1593
+ actions: ContentReviewAction[];
1594
+ onAction: (actionId: string, feedback?: string) => void;
1595
+ /** Disables every action while a submission is in flight. */
1596
+ pending?: boolean;
1597
+ }
1598
+ /** Approve, or reject with `reviewer_feedback` and `reject_reason`, declared as data. */
1599
+ declare function ReviewActionBar({ actions, onAction, pending }: ReviewActionBarProps): react_jsx_runtime.JSX.Element;
1600
+
1601
+ /**
1602
+ * How this item's pipeline step declares review should happen -- 'live' (a human reviews
1603
+ * before it goes out), 'queued' (batched review), or 'none' (auto-approved). Declared on
1604
+ * the step catalog per D5; this card only reads the value to decide what to render, and
1605
+ * never derives it. Declared as a local literal union, not imported from any content
1606
+ * schema -- see the binding constraint below.
1607
+ */
1608
+ type ReviewMode = 'live' | 'queued' | 'none';
1609
+ interface ContentFidelityCheck {
1610
+ /** Whether the producer's own verification pass considers this item grounded. */
1611
+ matches: boolean;
1612
+ /** The core claim this item makes. */
1613
+ coreClaim?: string;
1614
+ /** Figures/numbers this item cites, and what they were checked against. */
1615
+ figuresUsed?: string[];
1616
+ /** Free-form note from the producer's verification pass. */
1617
+ note?: string;
1618
+ }
1619
+ interface ContentReviewCardProps {
1620
+ /**
1621
+ * Display handle -- `content_items.title` in the eventual schema. Omit it where the
1622
+ * surrounding page already carries the same identity as its heading; repeating it
1623
+ * inside the card puts the same sentence on screen twice.
1624
+ */
1625
+ title?: string;
1626
+ /** Presentational only; the caller decides what to render for each mode. */
1627
+ reviewMode: ReviewMode;
1628
+ /** The human's canonical, editable text. */
1629
+ body: string;
1630
+ onBodyChange: (next: string) => void;
1631
+ /** The producer's original emission for this same text, frozen. Powers Reset. */
1632
+ originalBody: string;
1633
+ onReset: () => void;
1634
+ /**
1635
+ * The producer's full emission, rendered read-only per `payloadFields`. Both are
1636
+ * declared structurally -- **no dependency on the content catalog contract and no
1637
+ * import of any `@repo/core/content` or Supabase type.** That is what lets this card
1638
+ * ship before the data path exists and lets any tenant adopt it independently.
1639
+ */
1640
+ payload?: Record<string, unknown>;
1641
+ payloadFields?: ContentPayloadField[];
1642
+ /** The producer's own grounding/verification output, if it emitted one. */
1643
+ fidelity?: ContentFidelityCheck;
1644
+ /**
1645
+ * A claim the producer could not verify and is asking the reviewer to confirm.
1646
+ * Rendered as-is when present -- deciding whether a given string is "nothing to
1647
+ * confirm" (nirvana's `needsConfirming` heuristic) stays tenant-owned per D6.
1648
+ */
1649
+ checkFirst?: string;
1650
+ /** Alternate opening lines, including the current one. Omit to hide the panel. */
1651
+ hookOptions?: ContentAlternateOption[];
1652
+ /** Alternate closing lines, including the current one. */
1653
+ closeOptions?: ContentAlternateOption[];
1654
+ onMoreHooks?: () => void;
1655
+ onMoreCloses?: () => void;
1656
+ /** Which alternates fetch, if any, is running for this item. */
1657
+ alternatesRunning?: 'hooks' | 'closes';
1658
+ alternatesElapsed?: number;
1659
+ /** Per-step processing state. Omit or pass `[]` to hide the strip. */
1660
+ processingSteps?: ContentProcessingStep[];
1661
+ /** Declared review actions -- approve, reject, or a tenant-defined addition. */
1662
+ actions: ContentReviewAction[];
1663
+ onAction: (actionId: string, feedback?: string) => void;
1664
+ /** True while a submitted action is in flight. Disables the action bar and the body. */
1665
+ actionsPending?: boolean;
1666
+ }
1667
+ /**
1668
+ * The generic content review card. Generalizes three things that exist separately
1669
+ * today: the reviewer-in-the-loop flow already shipped for `acq_social_posts`,
1670
+ * nirvana's `DraftCard`, and the attempt-lineage / processing-state surfaces that had
1671
+ * no reader at all. Keyed off `reviewMode` rather than any tenant-specific vocabulary.
1672
+ */
1673
+ declare function ContentReviewCard({ title, body, onBodyChange, originalBody, onReset, payload, payloadFields, fidelity, checkFirst, hookOptions, closeOptions, onMoreHooks, onMoreCloses, alternatesRunning, alternatesElapsed, processingSteps, actions, onAction, actionsPending }: ContentReviewCardProps): react_jsx_runtime.JSX.Element;
1674
+
1675
+ /** A single tenant-facing noun with singular and plural forms, e.g. `{ singular: 'Post', plural: 'Posts' }`. */
1676
+ interface ContentNoun {
1677
+ singular: string;
1678
+ plural: string;
1679
+ }
1680
+ /**
1681
+ * The shell's vocabulary for the content feature: what a tenant calls its content
1682
+ * items, where they get distributed, and the fixed labels around the pipeline and
1683
+ * board chrome. Every field defaults to the generic table-name-shaped label so a
1684
+ * tenant that has not declared a `vocabulary` block still gets a coherent shell.
1685
+ */
1686
+ interface ContentVocabulary {
1687
+ item: ContentNoun;
1688
+ distribution: ContentNoun;
1689
+ pipeline: ContentNoun;
1690
+ board: string;
1691
+ reviewQueue: string;
1692
+ }
1693
+ declare const DEFAULT_CONTENT_VOCABULARY: ContentVocabulary;
1694
+ /**
1695
+ * Reads the content System's declared vocabulary off `system.config.vocabulary` --
1696
+ * the same optional, tenant-authored slice of `config` that `getDefaultPipelineId`
1697
+ * already reads for `defaultPipelineId` in `useContentConfig.ts` (no schema change:
1698
+ * `config` is `Record<string, JsonValue>` and this is a second key on it). Merges over
1699
+ * `DEFAULT_CONTENT_VOCABULARY` field by field, so a partial declaration only overrides
1700
+ * what it actually names. `undefined` model, a missing `vocabulary` block, or any
1701
+ * wrongly-shaped value all resolve to the defaults -- this never throws.
1702
+ */
1703
+ declare function resolveContentVocabulary(model: OrganizationModel | undefined): ContentVocabulary;
1704
+
1705
+ interface ContentStepResourceBinding {
1706
+ /** The OM Resource id that runs this step. */
1707
+ resourceId: string;
1708
+ /**
1709
+ * The Resource's declared kind. `'workflow'` and `'agent'` are executable through
1710
+ * `RunResourceButton` / `useExecuteResource` (`ResourceType` is `'agent' | 'workflow'`
1711
+ * only); `'integration'` and `'script'` resources resolve but are not directly
1712
+ * runnable from that surface.
1713
+ */
1714
+ resourceKind: OrganizationModelResourceKind;
1715
+ }
1716
+ /**
1717
+ * Resolves a content pipeline step to the OM Resource that runs it, by matching the
1718
+ * step's declared `actionId` against `resource.ontology.primaryAction` /
1719
+ * `resource.ontology.actions`, scoped to `resource.systemPath === 'content'`. Copies
1720
+ * `getLeadGenExportWorkflowId`'s shape (`../lead-gen/useLeadGenConfig.ts`) exactly --
1721
+ * the house pattern for this resolution, reading `model.resources` off the OM already
1722
+ * in React context.
1723
+ *
1724
+ * `actionId` is optional -- a step may declare none -- and a declared one may match no
1725
+ * Resource yet (a tenant may adopt the step catalog before authoring any Resource at
1726
+ * all). Both cases return `undefined` -- never a resource id built by
1727
+ * string-concatenating the step key, which would resolve to nothing at runtime instead
1728
+ * of failing as a type error.
1729
+ */
1730
+ declare function resolveContentStepResource(model: OrganizationModel, step: Pick<ContentPipelineStepEntry, 'actionId'>): ContentStepResourceBinding | undefined;
1731
+ interface ContentConfig {
1732
+ /**
1733
+ * Every `content-pipeline` template declared on the content System's catalogs, each
1734
+ * resolved with its ordered steps. Empty when no Organization Model is available yet.
1735
+ */
1736
+ pipelines: ContentPipelineTemplate[];
1737
+ /**
1738
+ * The content System's `content-stage` catalog entries (status / pillar / platform),
1739
+ * flattened into one map keyed by entry id -- mirrors `useLeadGenConfig`'s
1740
+ * `stageCatalog` shape.
1741
+ */
1742
+ stageCatalog: Record<string, ContentStageCatalogEntry>;
1743
+ /**
1744
+ * `stageCatalog` grouped by its source catalog (`entry.catalogKey`) -- e.g.
1745
+ * `stagesByCatalog.status`, `stagesByCatalog.pillar`, `stagesByCatalog.platform`.
1746
+ * Convenience projection for pages that render one catalog's entries as a Select or
1747
+ * a filter row without re-deriving the grouping themselves.
1748
+ */
1749
+ stagesByCatalog: Record<string, ContentStageCatalogEntry[]>;
1750
+ /**
1751
+ * Configured default pipeline id, from `system.config.defaultPipelineId` when the
1752
+ * content System declares one and it names a pipeline that actually resolved;
1753
+ * otherwise the first declared pipeline. `undefined` when no pipeline exists yet.
1754
+ */
1755
+ defaultPipelineId: string | undefined;
1756
+ /**
1757
+ * Resolves a content pipeline step to its runnable OM Resource, bound to this config's
1758
+ * Organization Model. See {@link resolveContentStepResource}. `undefined` when no
1759
+ * Organization Model is available -- every step then resolves to "no resource
1760
+ * configured" rather than throwing.
1761
+ */
1762
+ resolveStepResource: (step: Pick<ContentPipelineStepEntry, 'actionId'>) => ContentStepResourceBinding | undefined;
1763
+ /**
1764
+ * The tenant's declared vocabulary for the content shell -- item / distribution /
1765
+ * pipeline nouns and the fixed board labels. See {@link resolveContentVocabulary}.
1766
+ * Defaults to {@link DEFAULT_CONTENT_VOCABULARY} when the model or its `vocabulary`
1767
+ * declaration is absent, so consuming shell chrome never renders a blank label.
1768
+ */
1769
+ vocabulary: ContentVocabulary;
1770
+ }
1771
+ /**
1772
+ * `useContentConfig` is `useLeadGenConfig`'s twin for the content System: a pure
1773
+ * `useMemo` over the Organization Model already in React context via
1774
+ * `useOptionalElevasisSystems()`. It fetches nothing.
1775
+ *
1776
+ * The stage and step vocabulary comes from the model, never a hardcoded list. This is
1777
+ * the deliberate divergence from `useCrmPipelineSummary`, which hardcodes
1778
+ * `PIPELINE_FUNNEL_ORDER` as a `DealStage[]` and only consults the OM for labels and
1779
+ * colours -- a tenant whose model declares different stages gets those stages zeroed
1780
+ * out rather than rendered. Here, `getContentStageCatalog(organizationModel)` reads the
1781
+ * content System's own `content-stage` catalogs (status / pillar / platform) and
1782
+ * `getContentBuildTemplates(organizationModel)` reads its `content-pipeline` /
1783
+ * `content-pipeline-step` catalogs, so a tenant with an entirely different pipeline and
1784
+ * stage set gets its own vocabulary rendered, not someone else's zeroed rows.
1785
+ */
1786
+ declare function useContentConfig(): ContentConfig;
1787
+
1788
+ /**
1789
+ * `deriveContentBoard` -- a pure function of `(items, pipeline, now)`. No React, no
1790
+ * hooks, no fetching. `content_items` has NO `step_key` column (only
1791
+ * `content_item_attempts` does), so an item's current step is derived from
1792
+ * `processingState`, whose declared shape is
1793
+ * `Record<stepKey, { status: 'success' | 'no_result' | 'skipped' | 'error'; data?: unknown }>`.
1794
+ *
1795
+ * Placement rule (implemented exactly as follows):
1796
+ *
1797
+ * 1. Sort the pipeline's steps ascending by `order`. Ties break by `key` so the result
1798
+ * is deterministic.
1799
+ * 2. An item's current step is the first step in that order whose `processingState`
1800
+ * entry is missing, or present with a status other than `'success'`. Rationale:
1801
+ * `processingState` records what has run; a step recorded `'success'` is behind the
1802
+ * item.
1803
+ * 3. If every declared step has a `'success'` entry, `stepKey` is `null` and the card
1804
+ * goes in `done`.
1805
+ * 4. If `processingState` is empty (`{}`), the item sits at the first step -- nothing
1806
+ * has run yet.
1807
+ * 5. A card goes in `unplaced` only when `processingState` is non-empty AND none of its
1808
+ * keys appear in the catalog. This is the honest bucket for an item produced against
1809
+ * a step catalog that has since changed; unplaced items are never silently dropped
1810
+ * into column 1.
1811
+ */
1812
+ interface ContentBoardCard {
1813
+ item: ContentItemResponse;
1814
+ /** Step key this item currently sits at. `null` when every declared step has succeeded. */
1815
+ stepKey: string | null;
1816
+ /** Milliseconds since `item.updatedAt`, measured against the `now` argument. */
1817
+ ageMs: number;
1818
+ /** True when this card is waiting on a person: its step's reviewMode is not 'none' and `reviewedAt` is null. */
1819
+ awaitingReview: boolean;
1820
+ }
1821
+ interface ContentBoardGate {
1822
+ /** The review mode of the step this gate follows. Never 'none' -- a 'none' step has no gate. */
1823
+ reviewMode: Exclude<ContentPipelineStepReviewMode, 'none'>;
1824
+ /** How many cards in the preceding column are awaiting review. */
1825
+ waitingCount: number;
1826
+ }
1827
+ interface ContentBoardColumn {
1828
+ step: ContentPipelineStepEntry;
1829
+ cards: ContentBoardCard[];
1830
+ /** Present when this step's reviewMode is 'live' or 'queued'. Absent on a 'none' step. */
1831
+ gate?: ContentBoardGate;
1832
+ }
1833
+ interface ContentBoard {
1834
+ columns: ContentBoardColumn[];
1835
+ /** Cards whose every declared step succeeded. */
1836
+ done: ContentBoardCard[];
1837
+ /** Cards whose processingState names only step keys the catalog does not declare. */
1838
+ unplaced: ContentBoardCard[];
1839
+ /** True when the pipeline declares 0 or 1 steps -- the consumer renders pick-then-review, not columns. */
1840
+ isCollapsed: boolean;
1841
+ }
1842
+ declare function deriveContentBoard(items: ContentItemResponse[], pipeline: ContentPipelineTemplate, now: number): ContentBoard;
1843
+
1844
+ /**
1845
+ * `getContentItemIdentity` -- a pure function that names a content item for display when
1846
+ * `title` cannot be trusted to do it. The tenant `nirvana-marketing`'s drafts have no
1847
+ * titles at all, so a title-first surface renders an empty or meaningless column. A
1848
+ * post's identity is its opening line.
1849
+ *
1850
+ * Resolution order, first non-empty wins:
1851
+ * 1. First non-blank line of `item.body`.
1852
+ * 2. The first string-valued field of `item.payload`, taken in `payloadFields`
1853
+ * declaration order when that argument is supplied, otherwise `Object.keys` order.
1854
+ * Only a non-blank string value counts.
1855
+ * 3. `item.title`, when non-blank.
1856
+ * 4. The literal `'Untitled'`.
1857
+ *
1858
+ * The resolved candidate is then normalized: runs of whitespace collapse to one space,
1859
+ * the result is trimmed, and anything longer than `maxLength` is truncated at the last
1860
+ * word boundary at or before `maxLength` with a trailing `'…'` -- never mid-word.
1861
+ * The source complaint this fixes is titles clipped mid-word
1862
+ * (`MOCK Pipeline Walk S…`).
1863
+ */
1864
+ declare function getContentItemIdentity(item: Pick<ContentItemResponse, 'title' | 'body' | 'payload'>, payloadFields?: ContentPayloadFieldDeclaration[], maxLength?: number): string;
1865
+
1866
+ /**
1867
+ * Shared nav-item shape used by feature sidebar middle components.
1868
+ *
1869
+ * Matches the subset of {@link SubshellNavItemProps} that the existing
1870
+ * hardcoded item arrays use. Consumers import this type alongside the
1871
+ * exported item arrays (e.g. `CRM_ITEMS`) to type their custom arrays.
1872
+ *
1873
+ * @example
1874
+ * import { NavItem, CRM_ITEMS } from '@elevasis/ui/features/crm'
1875
+ *
1876
+ * const customItems: NavItem[] = [
1877
+ * ...CRM_ITEMS,
1878
+ * { label: 'Reports', to: '/crm/reports', icon: IconFileText, exact: false },
1879
+ * ]
1880
+ */
1881
+ interface NavItem {
1882
+ /** Display label for the nav entry. */
1883
+ label: string;
1884
+ /** Route path the item links to. */
1885
+ to: string;
1886
+ /** Tabler icon component (or any component accepting `size` + `style`). */
1887
+ icon: ComponentType<{
1888
+ size?: number;
1889
+ style?: React.CSSProperties;
1890
+ }>;
1891
+ /**
1892
+ * When `true`, the item is only active when the path matches exactly.
1893
+ * When `false`, it is active for any path that starts with `to`.
1894
+ */
1895
+ exact: boolean;
1896
+ }
1897
+
1898
+ interface ContentSidebarProps {
1899
+ /**
1900
+ * Tenant-authored authoring surfaces for the `Create` section, forwarded to
1901
+ * `ContentSidebarMiddle`. Ignored when `children` is supplied, since that replaces the
1902
+ * middle outright. This is the one-line path for a tenant adding its own creator:
1903
+ *
1904
+ * ```tsx
1905
+ * const sidebar = () => <ContentSidebar createItems={[{ label: 'Draft a Post', to: '/content/write', icon: IconPencil, exact: false }]} />
1906
+ * ```
1907
+ */
1908
+ createItems?: NavItem[];
1909
+ /** Replace the default `ContentSidebarMiddle` with custom middle content. Leave unset for the default layout. */
1910
+ children?: ReactNode;
1911
+ }
1912
+ declare const ContentSidebar: ({ createItems, children }?: ContentSidebarProps) => react_jsx_runtime.JSX.Element;
1913
+
1914
+ /**
1915
+ * Static two-entry default, built from {@link DEFAULT_CONTENT_VOCABULARY}. Exists for
1916
+ * consumers that spread it at module load time (see `extend-content.md`), where a
1917
+ * tenant's declared vocabulary isn't available. `ContentSidebarMiddle` itself renders
1918
+ * the live, vocabulary-aware version instead of this constant.
1919
+ */
1920
+ declare const CONTENT_ITEMS: NavItem[];
1921
+ interface ContentSidebarMiddleProps {
1922
+ /**
1923
+ * Tenant-authored authoring surfaces, rendered under the `Create` section above the
1924
+ * pipeline nav. Empty or omitted -> the section renders its "nothing declared" hint
1925
+ * instead of nav entries; the section header itself is always present.
1926
+ *
1927
+ * This is the seam for a tenant's own content creator -- a LinkedIn drafting screen,
1928
+ * a brief builder, whatever the tenant authors -- without it having to restate the
1929
+ * pipeline entries. Prefer this over {@link ContentSidebarMiddleProps.items}, which
1930
+ * replaces the pipeline list wholesale and stops tracking the tenant's vocabulary.
1931
+ */
1932
+ createItems?: NavItem[];
1933
+ /** Override the pipeline nav items. Defaults to the two-entry nav built from the tenant's declared vocabulary. */
1934
+ items?: NavItem[];
1935
+ }
1936
+ /**
1937
+ * The content subshell nav, in two labeled sections.
1938
+ *
1939
+ * `Create` sits on top and is where content gets made; the pipeline section below is
1940
+ * where it gets reviewed and tracked. The split exists because authoring is
1941
+ * tenant-specific by nature (every tenant writes a different kind of thing, through a
1942
+ * different screen) while the pipeline underneath is the same shared system for all of
1943
+ * them.
1944
+ *
1945
+ * **Both section labels are fixed platform vocabulary, not tenant-declared.** The nav
1946
+ * entries inside them still are — a tenant that renames its pipelines to "Campaigns"
1947
+ * gets `Content Pipeline > Campaigns`. The sections name the two halves of the System
1948
+ * itself, which every tenant has; only what they contain varies.
1949
+ *
1950
+ * There is deliberately no section header above `Create`: the subshell is already
1951
+ * reached through the `Content` nav entry, so a third `Content` header only repeated
1952
+ * what the breadcrumb and the left rail both already say.
1953
+ */
1954
+ declare const ContentSidebarMiddle: ({ createItems, items }?: ContentSidebarMiddleProps) => react_jsx_runtime.JSX.Element;
1955
+
1956
+ interface MyReviewQueuePanelProps {
1957
+ onItemClick: (itemId: string) => void;
1958
+ onSeeAll?: () => void;
1959
+ showSectionLabel?: boolean;
1960
+ }
1961
+ /**
1962
+ * `MyReviewQueue` -- mirrors `MyTasksPanel` for the content System's sidebar workbench,
1963
+ * and is the review queue's second way in (usability review Proposal, Decision 3): a
1964
+ * cross-pipeline "what needs review" view rather than a panel beside a table browser.
1965
+ *
1966
+ * The `/content/items` route accepts no "pending review" filter (only `reviewedBy`, not
1967
+ * a reviewed/unreviewed flag), so this fetches a page of items and filters to
1968
+ * `reviewedAt === null` client-side. A future backend addition could push this
1969
+ * server-side; documenting the gap here rather than silently over-claiming precision.
1970
+ *
1971
+ * Rows are ordered oldest-first by `updatedAt` -- finding 6 is that nothing on the
1972
+ * screen ages, and the operational question is always what has been sitting the
1973
+ * longest.
1974
+ */
1975
+ declare function MyReviewQueuePanel({ onItemClick, onSeeAll, showSectionLabel }: MyReviewQueuePanelProps): react_jsx_runtime.JSX.Element;
1976
+
1977
+ export { AlternatesPanel, CONTENT_ITEMS, ContentDistributionDetailPage, ContentDistributionsPage, ContentItemReviewPage, ContentItemsPage, ContentOverviewPage, ContentPipelineWorkspacePage, ContentPipelinesPage, ContentReviewCard, ContentSidebar, ContentSidebarMiddle, DEFAULT_CONTENT_VOCABULARY, MyReviewQueuePanel, PayloadBody, ProcessingStateStrip, ReviewActionBar, contentManifest, deriveContentBoard, firstLine, formatElapsed, getContentItemIdentity, lastLine, resolveContentStepResource, resolveContentVocabulary, swapFirstLine, swapLastLine, useContentConfig };
1978
+ export type { AlternatesPanelProps, ContentAlternateOption, ContentBoard, ContentBoardCard, ContentBoardColumn, ContentBoardGate, ContentConfig, ContentDistributionDetailPageSlots, ContentDistributionsPageSlots, ContentFidelityCheck, ContentItemReviewPageSlots, ContentItemsPageSlots, ContentNoun, ContentOverviewPageSlots, ContentPayloadField, ContentPipelineWorkspacePageSlots, ContentPipelinesPageSlots, ContentProcessingStatus, ContentProcessingStep, ContentReviewAction, ContentReviewCardProps, ContentSidebarMiddleProps, ContentSidebarProps, ContentStepResourceBinding, ContentVocabulary, MyReviewQueuePanelProps, PayloadBodyProps, ProcessingStateStripProps, ReviewActionBarProps, ReviewMode };