@elevasis/sdk 1.29.0 → 1.30.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +1610 -594
- package/dist/index.d.ts +87 -1
- package/dist/index.js +30 -25
- package/dist/node/index.d.ts +84 -1
- package/dist/test-utils/index.d.ts +84 -1
- package/dist/test-utils/index.js +242 -23
- package/dist/worker/index.js +1 -0
- package/package.json +4 -4
- package/reference/claude-config/rules/topbar-actions.md +70 -0
- package/reference/claude-config/skills/om/SKILL.md +18 -1
- package/reference/claude-config/skills/om/operations/scaffold.md +153 -0
- package/reference/claude-config/sync-notes/2026-05-04-knowledge-bundle.md +83 -83
- package/reference/claude-config/sync-notes/2026-05-14-organization-model-ontology-refactor.md +45 -45
- package/reference/claude-config/sync-notes/2026-05-15-om-skill-rename-and-write-family.md +52 -52
- package/reference/claude-config/sync-notes/2026-05-17-sdk-boundary-consolidation.md +33 -33
- package/reference/claude-config/sync-notes/2026-05-20-om-define-helpers.md +32 -32
- package/reference/claude-config/sync-notes/2026-05-22-access-model-and-right-panel.md +43 -43
- package/reference/claude-config/sync-notes/2026-05-22-lead-gen-tenant-config.md +40 -40
- package/reference/claude-config/sync-notes/2026-05-22-org-model-multi-file-split.md +61 -61
- package/reference/claude-config/sync-notes/2026-05-23-branding-names-to-identity.md +49 -49
- package/reference/claude-config/sync-notes/2026-05-23-lead-gen-manage-access.md +31 -31
- package/reference/claude-config/sync-notes/2026-05-23-om-deployment-drift-detection.md +42 -42
- package/reference/claude-config/sync-notes/2026-05-23-om-full-model-deploy-contract.md +33 -33
- package/reference/claude-config/sync-notes/2026-05-23-ui-sdk-package-fixes.md +37 -37
- package/reference/claude-config/sync-notes/2026-05-24-platform-invite-router-core-baseline.md +28 -28
- package/reference/claude-config/sync-notes/2026-05-24-system-interface-readiness.md +43 -43
- package/reference/claude-config/sync-notes/2026-05-25-invitation-login-loader.md +26 -0
- package/reference/claude-config/sync-notes/2026-05-25-om-topbar-requests.md +33 -0
- package/reference/claude-config/sync-notes/2026-05-25-system-interface-profile-registry-and-substrate.md +35 -0
- package/reference/claude-config/sync-notes/2026-05-25-tenant-om-scaffold-cli.md +49 -0
- package/reference/claude-config/sync-notes/2026-05-25-vibe-operate-intent.md +47 -0
- package/reference/examples/organization-model.ts +18 -0
- package/reference/rules/organization-model.md +4 -1
- package/reference/rules/organization-os.md +7 -1
- package/reference/rules/ui.md +207 -207
- package/reference/rules/vibe.md +52 -18
- package/reference/scaffold/index.mdx +9 -7
- package/reference/scaffold/operations/scaffold-maintenance.md +14 -4
- package/reference/scaffold/reference/contracts.md +423 -338
- package/reference/scaffold/reference/glossary.md +14 -2
- package/reference/scaffold/reference/system-interface-capabilities.md +50 -0
- /package/reference/claude-config/skills/deploy/{skill.md → SKILL.md} +0 -0
package/reference/rules/ui.md
CHANGED
|
@@ -1,210 +1,210 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: UI shell, route structure, auth flow, API access, and template customization points for the ui/ surface
|
|
3
|
-
paths:
|
|
4
|
-
- ui/**
|
|
5
|
-
---
|
|
1
|
+
---
|
|
2
|
+
description: UI shell, route structure, auth flow, API access, and template customization points for the ui/ surface
|
|
3
|
+
paths:
|
|
4
|
+
- ui/**
|
|
5
|
+
---
|
|
6
6
|
<!-- @generated by packages/sdk/scripts/copy-reference-docs.mjs -- DO NOT EDIT -->
|
|
7
7
|
<!-- Regenerate: pnpm scaffold:sync -->
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
# UI Features
|
|
11
|
-
|
|
12
|
-
**Status:** Stable
|
|
13
|
-
|
|
14
|
-
## App Shell Overview
|
|
15
|
-
|
|
16
|
-
The template frontend is a React 19 + TanStack Router app that composes a local dashboard shell with published System modules from `@elevasis/ui`.
|
|
17
|
-
|
|
18
|
-
The main join points are:
|
|
19
|
-
|
|
20
|
-
- `ui/src/main.tsx` -- boots the app with `ElevasisUIProvider`, query client, theme config, WorkOS AuthKit, notifications, and the generated route tree
|
|
21
|
-
- `ui/src/routes/__root.tsx` -- composes the authenticated shell with `ElevasisSystemsProvider`, published System modules, app-local dashboard nav, shell runtime dependencies, and `SystemShell`
|
|
22
|
-
- `ui/src/config/nav-items.ts` -- keeps the host-local dashboard entry separate from the published feature manifests
|
|
23
|
-
- `core/config/organization-model.ts` -- is the template's semantic source of truth, adapting `@elevasis/core/organization-model` into the preserved branding, dashboard label, quick-access, System labels, resource descriptors, and shell helpers
|
|
24
|
-
|
|
25
|
-
Published System modules mounted by the template shell:
|
|
26
|
-
|
|
27
|
-
- `lead-gen`
|
|
28
|
-
- `crm`
|
|
29
|
-
- `delivery` at `/projects`
|
|
30
|
-
- `operations`
|
|
31
|
-
- `monitoring`
|
|
32
|
-
- `settings`
|
|
33
|
-
|
|
34
|
-
Important distinction:
|
|
35
|
-
|
|
36
|
-
- shared modules gate on current org-model System keys such as `sales.lead-gen` and `projects`
|
|
37
|
-
- template routes and local nav may still use legacy aliases such as `crm`, `lead-gen`, and `projects`
|
|
38
|
-
- `core/config/organization-model.ts` and `ui/src/lib/hooks/useFeatureAccess.ts` are the bridge between those two vocabularies
|
|
39
|
-
|
|
40
|
-
Dashboard remains a host-local route at `/`, not a shared feature manifest.
|
|
41
|
-
|
|
42
|
-
This template should be treated as the downstream reference implementation for this composition:
|
|
43
|
-
|
|
44
|
-
- `core/config/organization-model.ts` owns the organization/runtime semantics
|
|
45
|
-
- `ui/src/config/nav-items.ts` preserves the host-local dashboard entry instead of pushing that concern into shared manifests
|
|
46
|
-
- `ui/src/routes/__root.tsx` threads `canonicalOrganizationModel` from `@core/config/organization-model` into `ElevasisSystemsProvider` so the shared shell/runtime uses the same semantic source of truth as the local template helpers
|
|
47
|
-
- host-local customizations still stay local: dashboard remains app-owned nav, branding stays in app config, and quick-access/dashboard UX stays in the template app
|
|
48
|
-
|
|
49
|
-
## Auth and Initialization
|
|
50
|
-
|
|
51
|
-
The app uses WorkOS AuthKit through `ElevasisUIProvider`. Authentication is enforced by the local `ProtectedRoute` wrapper in `ui/src/features/auth/ProtectedRoute.tsx`.
|
|
52
|
-
|
|
53
|
-
**Sign-in flow:**
|
|
54
|
-
|
|
55
|
-
1. Unauthenticated user hits a protected route -- `ProtectedRoute` redirects to `/login?returnTo=<path>`
|
|
56
|
-
2. `/login` renders a sign-in card; user clicks Sign In, triggering `signIn({ returnTo })` from `useAuth()`
|
|
57
|
-
3. User authenticates on the WorkOS-hosted sign-in page
|
|
58
|
-
4. WorkOS redirects back to `/auth-redirect` -- `ui/src/routes/auth-redirect.tsx` waits for auth to complete, then navigates to the requested path or `/`
|
|
59
|
-
5. User lands on the home page, fully authenticated
|
|
60
|
-
|
|
61
|
-
**Route protection:**
|
|
62
|
-
|
|
63
|
-
Wrap protected route components with the local `ProtectedRoute` from `@/features/auth`, which adds the full-screen loader and delegates to the shared guard from `@elevasis/ui/auth`:
|
|
64
|
-
|
|
65
|
-
```tsx
|
|
66
|
-
import { ProtectedRoute } from '@/features/auth'
|
|
67
|
-
|
|
68
|
-
function HomePageGuarded() {
|
|
69
|
-
return (
|
|
70
|
-
<ProtectedRoute>
|
|
71
|
-
<HomePage />
|
|
72
|
-
</ProtectedRoute>
|
|
73
|
-
)
|
|
74
|
-
}
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
**Initialization state:**
|
|
78
|
-
|
|
79
|
-
Use `useInitialization()` from `@elevasis/ui/initialization` anywhere inside the app to read aggregated auth + org readiness:
|
|
80
|
-
|
|
81
|
-
```ts
|
|
82
|
-
const { allReady, userReady, isInitializing, error, retry, profile } = useInitialization()
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
**Organization context:**
|
|
86
|
-
|
|
87
|
-
Use `useOrganization()` from `@elevasis/ui/organization` to access org-scoped IDs and memberships:
|
|
88
|
-
|
|
89
|
-
```ts
|
|
90
|
-
const { currentWorkOSOrganizationId, currentSupabaseOrganizationId, memberships, switchOrganization } = useOrganization()
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
## API and Streaming
|
|
94
|
-
|
|
95
|
-
Use `useApiClient()` from `@/lib/hooks/useApiClient` in route components and feature hooks:
|
|
96
|
-
|
|
97
|
-
```ts
|
|
98
|
-
const { apiRequest, isOrganizationReady } = useApiClient()
|
|
99
|
-
const data = await apiRequest('/executions', { method: 'GET' })
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
The template also re-exports `useApiClientContext()` and the shared API client types from `@/lib/hooks/useApiClient`.
|
|
103
|
-
|
|
104
|
-
For real-time updates, feature surfaces use the local singleton wrapper:
|
|
105
|
-
|
|
106
|
-
```ts
|
|
107
|
-
import { sseConnectionManager } from '@/lib/sse/SSEConnectionManager'
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
**WorkOS config:**
|
|
111
|
-
|
|
112
|
-
WorkOS `clientId`, `redirectUri`, and `signoutUri` are resolved in `ui/src/config/workos.ts` from `VITE_WORKOS_CLIENT_ID`, `VITE_WORKOS_REDIRECT_URI`, `VITE_WORKOS_SIGNOUT_URI`, and `VITE_APP_ORIGIN`, with localhost fallbacks so the template runs locally without production env vars. For deployed apps, set the production env vars in the hosting provider and allow the exact redirect and sign-out URLs in the WorkOS application dashboard:
|
|
113
|
-
|
|
114
|
-
- Redirect URI: `https://your-production-domain/auth-redirect`
|
|
115
|
-
- Sign-out redirect: `https://your-production-domain/login`
|
|
116
|
-
- Configure CORS origin: `https://your-production-domain`; required for browser AuthKit calls to `api.workos.com`
|
|
117
|
-
- App homepage origin: `https://your-production-domain`
|
|
118
|
-
|
|
119
|
-
The dev server runs on port `4300` with Vite `strictPort: true`, so a second `pnpm -C ui dev` on the same machine fails fast instead of drifting.
|
|
120
|
-
|
|
121
|
-
The API URL is centralized in `ui/src/lib/constants/api.ts`. In the current template it is hard-coded to `https://api.elevasis.io`, so if the bootstrap is repointed to another API target, that file is the source of truth.
|
|
122
|
-
|
|
123
|
-
## Route Structure
|
|
124
|
-
|
|
125
|
-
Current top-level app sections:
|
|
126
|
-
|
|
127
|
-
- `/` -- host-local dashboard entrypoint with quick links derived from `organizationModel.navigation.quickAccessSurfaceIds`
|
|
128
|
-
- `/lead-gen/*` -- lead generation pages (`lists`, `companies`, `contacts`)
|
|
129
|
-
- `/crm/*` -- CRM overview, pipeline, and deals
|
|
130
|
-
- `/projects/*` -- delivery feature pages (projects, milestones, tasks, notes)
|
|
131
|
-
- `/operations/*` -- operations overview, resources, command queue, command view, sessions, task scheduler
|
|
132
|
-
- `/monitoring/*` -- execution logs, execution health, activity log, cost analytics, notifications
|
|
133
|
-
- `/settings/*` -- account, organization, credentials, API keys, deployments, webhooks, and appearance
|
|
134
|
-
- `/login` and `/auth-redirect` -- auth entry/callback routes
|
|
135
|
-
|
|
136
|
-
Section guards currently follow this pattern:
|
|
137
|
-
|
|
138
|
-
- `ProtectedRoute` for all authenticated sections
|
|
139
|
-
- `SystemGuard` on sections that should hard-stop when a System is disabled: `crm`, `lead-gen`, `projects`, `operations`, and `monitoring`
|
|
140
|
-
- provider-level shell gating for shared System nav and sub-shell behavior
|
|
141
|
-
|
|
142
|
-
The app shell in `__root.tsx` derives visible nav from `shellModel.systems` and `getSidebarLinks()`, filters admin-only entries locally using the signed-in profile, and passes `canonicalOrganizationModel` into `ElevasisSystemsProvider` so shared nav labels, paths, and graph runtime behavior resolve from the same organization-model semantic source.
|
|
143
|
-
|
|
144
|
-
## Dashboard and Feature Areas
|
|
145
|
-
|
|
146
|
-
**Dashboard**
|
|
147
|
-
|
|
148
|
-
`ui/src/features/dashboard/components/Dashboard.tsx` is intentionally lightweight. It acts as the host-owned landing page and renders quick access cards for the most important organization surfaces instead of duplicating the shared operations overview.
|
|
149
|
-
|
|
150
|
-
**Operations**
|
|
151
|
-
|
|
152
|
-
The operations area is the richest shared shell in the template. It includes:
|
|
153
|
-
|
|
154
|
-
- resource inventory and detail pages
|
|
155
|
-
- command queue and command view
|
|
156
|
-
- sessions screens
|
|
157
|
-
- the shared operations overview at `/operations/`
|
|
158
|
-
|
|
159
|
-
**Monitoring**
|
|
160
|
-
|
|
161
|
-
Monitoring is scaffolded as a shared feature area with route files for:
|
|
162
|
-
|
|
163
|
-
- activity log
|
|
164
|
-
- cost analytics
|
|
165
|
-
- execution health
|
|
166
|
-
- execution logs
|
|
167
|
-
- notifications
|
|
168
|
-
|
|
169
|
-
## Customization Points
|
|
170
|
-
|
|
171
|
-
The main template-owned customization surfaces are:
|
|
172
|
-
|
|
173
|
-
- `ui/src/config/app-config.ts` -- brand name, logos, and app version
|
|
174
|
-
- `ui/src/config/theme.ts` -- theme presets and defaults
|
|
175
|
-
- `ui/src/config/background.tsx` -- shared background treatment
|
|
176
|
-
- `ui/src/config/loader.tsx` -- global loader element
|
|
177
|
-
- `ui/src/config/nav-items.ts` -- app-local nav entries, including the preserved dashboard/home entry
|
|
178
|
-
- `core/config/organization-model.ts` -- product labels, System availability, resource descriptors, semantic surfaces, canonical-to-legacy surface aliases, and quick-access behavior
|
|
179
|
-
- `ui/src/config/README.md` -- the deeper guide for those config files
|
|
180
|
-
|
|
181
|
-
## Customizing System Sidebars
|
|
182
|
-
|
|
183
|
-
The template demonstrates one override pattern in `ui/src/routes/__root.tsx`: it extends `CRM_ITEMS` with a template-owned Reports link and replaces `crmManifest` with `customCrmManifest` in the System module array. The backing route lives at `ui/src/routes/crm/reports.tsx` -- delete both the nav item and the route if you don't need them.
|
|
184
|
-
|
|
185
|
-
Two customization layers are available for every shared System sidebar:
|
|
186
|
-
|
|
187
|
-
1. **Nav-item shortcut (`items` prop)** -- when you just need to swap or extend the nav array, spread the published items constant and pass the result to `*SidebarMiddle`. The template's CRM customization uses this path.
|
|
188
|
-
|
|
189
|
-
```tsx
|
|
190
|
-
import { crmManifest, CrmSidebar, CrmSidebarMiddle, CRM_ITEMS } from '@elevasis/ui/features/crm'
|
|
191
|
-
import type { NavItem } from '@elevasis/ui/layout'
|
|
192
|
-
|
|
193
|
-
const customItems: NavItem[] = [...CRM_ITEMS, { label: 'Reports', to: '/crm/reports', icon: IconFileText, exact: false }]
|
|
194
|
-
const CustomCrmSidebar = () => <CrmSidebar><CrmSidebarMiddle items={customItems} /></CrmSidebar>
|
|
195
|
-
const customCrmManifest = { ...crmManifest, sidebar: CustomCrmSidebar }
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
2. **Compose-primitives (structural changes)** -- when you need to inject panels, reorder sections, or add a new section, drop down to `CrmSidebarTop` + `SubshellNavList` + `SubshellSidebarSection` + published panels (`MyTasksPanel`, `QuickCreateActions`) and compose your own Middle.
|
|
199
|
-
|
|
200
|
-
`manifest.sidebar` accepts any component, so arbitrary customization is always available. The `items` prop is an abstraction barrier for the common case, not a limit.
|
|
201
|
-
|
|
202
|
-
See `node_modules/@elevasis/sdk/reference/scaffold/ui/customization.md` for the decision tree, page-wrapping pattern, and delivery's three-section variant. For broader CRM extension work across pages, hooks, actions, workflows, and org-model boundaries, start with `node_modules/@elevasis/sdk/reference/scaffold/recipes/extend-crm.md`. For broader lead-gen extension work across pages, hooks, list/member state, artifacts, workflows, and org-model boundaries, start with `node_modules/@elevasis/sdk/reference/scaffold/recipes/extend-lead-gen.md`. See `node_modules/@elevasis/sdk/reference/scaffold/reference/contracts.md` for `NavItem`, `SystemModule`, CRM platform primitives, Lead Gen platform primitives, and related TypeScript shapes.
|
|
203
|
-
|
|
204
|
-
For CRM deal action buttons, read `node_modules/@elevasis/sdk/reference/scaffold/recipes/customize-crm-actions.md` before changing `crmActions`, `DealDetailPage`, `DealDrawer`, or custom workflow buttons. Start with the shared `crmActions` provider path for action visibility, labels, ordering, and render-time configuration. In v1, platform-known/default action endpoint behavior is server-constrained; use project-owned UI that calls the workflow directly when a custom key sits outside that server-dispatched set.
|
|
205
|
-
|
|
206
|
-
## Notes
|
|
207
|
-
|
|
208
|
-
- `ui/src/routeTree.gen.ts` is generated by TanStack Router tooling. Do not hand-edit it.
|
|
209
|
-
- The template ships a broad route surface so downstream projects can trim or reshape features without having to re-derive the shared shell contract from scratch.
|
|
210
|
-
- For package-export discovery, glob `node_modules/@elevasis/sdk/reference/` or `node_modules/@repo/ui/dist/` for the current SDK/UI package surface.
|
|
9
|
+
|
|
10
|
+
# UI Features
|
|
11
|
+
|
|
12
|
+
**Status:** Stable
|
|
13
|
+
|
|
14
|
+
## App Shell Overview
|
|
15
|
+
|
|
16
|
+
The template frontend is a React 19 + TanStack Router app that composes a local dashboard shell with published System modules from `@elevasis/ui`.
|
|
17
|
+
|
|
18
|
+
The main join points are:
|
|
19
|
+
|
|
20
|
+
- `ui/src/main.tsx` -- boots the app with `ElevasisUIProvider`, query client, theme config, WorkOS AuthKit, notifications, and the generated route tree
|
|
21
|
+
- `ui/src/routes/__root.tsx` -- composes the authenticated shell with `ElevasisSystemsProvider`, published System modules, app-local dashboard nav, shell runtime dependencies, and `SystemShell`
|
|
22
|
+
- `ui/src/config/nav-items.ts` -- keeps the host-local dashboard entry separate from the published feature manifests
|
|
23
|
+
- `core/config/organization-model.ts` -- is the template's semantic source of truth, adapting `@elevasis/core/organization-model` into the preserved branding, dashboard label, quick-access, System labels, resource descriptors, and shell helpers
|
|
24
|
+
|
|
25
|
+
Published System modules mounted by the template shell:
|
|
26
|
+
|
|
27
|
+
- `lead-gen`
|
|
28
|
+
- `crm`
|
|
29
|
+
- `delivery` at `/projects`
|
|
30
|
+
- `operations`
|
|
31
|
+
- `monitoring`
|
|
32
|
+
- `settings`
|
|
33
|
+
|
|
34
|
+
Important distinction:
|
|
35
|
+
|
|
36
|
+
- shared modules gate on current org-model System keys such as `sales.lead-gen` and `projects`
|
|
37
|
+
- template routes and local nav may still use legacy aliases such as `crm`, `lead-gen`, and `projects`
|
|
38
|
+
- `core/config/organization-model.ts` and `ui/src/lib/hooks/useFeatureAccess.ts` are the bridge between those two vocabularies
|
|
39
|
+
|
|
40
|
+
Dashboard remains a host-local route at `/`, not a shared feature manifest.
|
|
41
|
+
|
|
42
|
+
This template should be treated as the downstream reference implementation for this composition:
|
|
43
|
+
|
|
44
|
+
- `core/config/organization-model.ts` owns the organization/runtime semantics
|
|
45
|
+
- `ui/src/config/nav-items.ts` preserves the host-local dashboard entry instead of pushing that concern into shared manifests
|
|
46
|
+
- `ui/src/routes/__root.tsx` threads `canonicalOrganizationModel` from `@core/config/organization-model` into `ElevasisSystemsProvider` so the shared shell/runtime uses the same semantic source of truth as the local template helpers
|
|
47
|
+
- host-local customizations still stay local: dashboard remains app-owned nav, branding stays in app config, and quick-access/dashboard UX stays in the template app
|
|
48
|
+
|
|
49
|
+
## Auth and Initialization
|
|
50
|
+
|
|
51
|
+
The app uses WorkOS AuthKit through `ElevasisUIProvider`. Authentication is enforced by the local `ProtectedRoute` wrapper in `ui/src/features/auth/ProtectedRoute.tsx`.
|
|
52
|
+
|
|
53
|
+
**Sign-in flow:**
|
|
54
|
+
|
|
55
|
+
1. Unauthenticated user hits a protected route -- `ProtectedRoute` redirects to `/login?returnTo=<path>`
|
|
56
|
+
2. `/login` renders a sign-in card; user clicks Sign In, triggering `signIn({ returnTo })` from `useAuth()`
|
|
57
|
+
3. User authenticates on the WorkOS-hosted sign-in page
|
|
58
|
+
4. WorkOS redirects back to `/auth-redirect` -- `ui/src/routes/auth-redirect.tsx` waits for auth to complete, then navigates to the requested path or `/`
|
|
59
|
+
5. User lands on the home page, fully authenticated
|
|
60
|
+
|
|
61
|
+
**Route protection:**
|
|
62
|
+
|
|
63
|
+
Wrap protected route components with the local `ProtectedRoute` from `@/features/auth`, which adds the full-screen loader and delegates to the shared guard from `@elevasis/ui/auth`:
|
|
64
|
+
|
|
65
|
+
```tsx
|
|
66
|
+
import { ProtectedRoute } from '@/features/auth'
|
|
67
|
+
|
|
68
|
+
function HomePageGuarded() {
|
|
69
|
+
return (
|
|
70
|
+
<ProtectedRoute>
|
|
71
|
+
<HomePage />
|
|
72
|
+
</ProtectedRoute>
|
|
73
|
+
)
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**Initialization state:**
|
|
78
|
+
|
|
79
|
+
Use `useInitialization()` from `@elevasis/ui/initialization` anywhere inside the app to read aggregated auth + org readiness:
|
|
80
|
+
|
|
81
|
+
```ts
|
|
82
|
+
const { allReady, userReady, isInitializing, error, retry, profile } = useInitialization()
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**Organization context:**
|
|
86
|
+
|
|
87
|
+
Use `useOrganization()` from `@elevasis/ui/organization` to access org-scoped IDs and memberships:
|
|
88
|
+
|
|
89
|
+
```ts
|
|
90
|
+
const { currentWorkOSOrganizationId, currentSupabaseOrganizationId, memberships, switchOrganization } = useOrganization()
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## API and Streaming
|
|
94
|
+
|
|
95
|
+
Use `useApiClient()` from `@/lib/hooks/useApiClient` in route components and feature hooks:
|
|
96
|
+
|
|
97
|
+
```ts
|
|
98
|
+
const { apiRequest, isOrganizationReady } = useApiClient()
|
|
99
|
+
const data = await apiRequest('/executions', { method: 'GET' })
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
The template also re-exports `useApiClientContext()` and the shared API client types from `@/lib/hooks/useApiClient`.
|
|
103
|
+
|
|
104
|
+
For real-time updates, feature surfaces use the local singleton wrapper:
|
|
105
|
+
|
|
106
|
+
```ts
|
|
107
|
+
import { sseConnectionManager } from '@/lib/sse/SSEConnectionManager'
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**WorkOS config:**
|
|
111
|
+
|
|
112
|
+
WorkOS `clientId`, `redirectUri`, and `signoutUri` are resolved in `ui/src/config/workos.ts` from `VITE_WORKOS_CLIENT_ID`, `VITE_WORKOS_REDIRECT_URI`, `VITE_WORKOS_SIGNOUT_URI`, and `VITE_APP_ORIGIN`, with localhost fallbacks so the template runs locally without production env vars. For deployed apps, set the production env vars in the hosting provider and allow the exact redirect and sign-out URLs in the WorkOS application dashboard:
|
|
113
|
+
|
|
114
|
+
- Redirect URI: `https://your-production-domain/auth-redirect`
|
|
115
|
+
- Sign-out redirect: `https://your-production-domain/login`
|
|
116
|
+
- Configure CORS origin: `https://your-production-domain`; required for browser AuthKit calls to `api.workos.com`
|
|
117
|
+
- App homepage origin: `https://your-production-domain`
|
|
118
|
+
|
|
119
|
+
The dev server runs on port `4300` with Vite `strictPort: true`, so a second `pnpm -C ui dev` on the same machine fails fast instead of drifting.
|
|
120
|
+
|
|
121
|
+
The API URL is centralized in `ui/src/lib/constants/api.ts`. In the current template it is hard-coded to `https://api.elevasis.io`, so if the bootstrap is repointed to another API target, that file is the source of truth.
|
|
122
|
+
|
|
123
|
+
## Route Structure
|
|
124
|
+
|
|
125
|
+
Current top-level app sections:
|
|
126
|
+
|
|
127
|
+
- `/` -- host-local dashboard entrypoint with quick links derived from `organizationModel.navigation.quickAccessSurfaceIds`
|
|
128
|
+
- `/lead-gen/*` -- lead generation pages (`lists`, `companies`, `contacts`)
|
|
129
|
+
- `/crm/*` -- CRM overview, pipeline, and deals
|
|
130
|
+
- `/projects/*` -- delivery feature pages (projects, milestones, tasks, notes)
|
|
131
|
+
- `/operations/*` -- operations overview, resources, command queue, command view, sessions, task scheduler
|
|
132
|
+
- `/monitoring/*` -- execution logs, execution health, activity log, cost analytics, notifications
|
|
133
|
+
- `/settings/*` -- account, organization, credentials, API keys, deployments, webhooks, and appearance
|
|
134
|
+
- `/login` and `/auth-redirect` -- auth entry/callback routes
|
|
135
|
+
|
|
136
|
+
Section guards currently follow this pattern:
|
|
137
|
+
|
|
138
|
+
- `ProtectedRoute` for all authenticated sections
|
|
139
|
+
- `SystemGuard` on sections that should hard-stop when a System is disabled: `crm`, `lead-gen`, `projects`, `operations`, and `monitoring`
|
|
140
|
+
- provider-level shell gating for shared System nav and sub-shell behavior
|
|
141
|
+
|
|
142
|
+
The app shell in `__root.tsx` derives visible nav from `shellModel.systems` and `getSidebarLinks()`, filters admin-only entries locally using the signed-in profile, and passes `canonicalOrganizationModel` into `ElevasisSystemsProvider` so shared nav labels, paths, and graph runtime behavior resolve from the same organization-model semantic source.
|
|
143
|
+
|
|
144
|
+
## Dashboard and Feature Areas
|
|
145
|
+
|
|
146
|
+
**Dashboard**
|
|
147
|
+
|
|
148
|
+
`ui/src/features/dashboard/components/Dashboard.tsx` is intentionally lightweight. It acts as the host-owned landing page and renders quick access cards for the most important organization surfaces instead of duplicating the shared operations overview.
|
|
149
|
+
|
|
150
|
+
**Operations**
|
|
151
|
+
|
|
152
|
+
The operations area is the richest shared shell in the template. It includes:
|
|
153
|
+
|
|
154
|
+
- resource inventory and detail pages
|
|
155
|
+
- command queue and command view
|
|
156
|
+
- sessions screens
|
|
157
|
+
- the shared operations overview at `/operations/`
|
|
158
|
+
|
|
159
|
+
**Monitoring**
|
|
160
|
+
|
|
161
|
+
Monitoring is scaffolded as a shared feature area with route files for:
|
|
162
|
+
|
|
163
|
+
- activity log
|
|
164
|
+
- cost analytics
|
|
165
|
+
- execution health
|
|
166
|
+
- execution logs
|
|
167
|
+
- notifications
|
|
168
|
+
|
|
169
|
+
## Customization Points
|
|
170
|
+
|
|
171
|
+
The main template-owned customization surfaces are:
|
|
172
|
+
|
|
173
|
+
- `ui/src/config/app-config.ts` -- brand name, logos, and app version
|
|
174
|
+
- `ui/src/config/theme.ts` -- theme presets and defaults
|
|
175
|
+
- `ui/src/config/background.tsx` -- shared background treatment
|
|
176
|
+
- `ui/src/config/loader.tsx` -- global loader element
|
|
177
|
+
- `ui/src/config/nav-items.ts` -- app-local nav entries, including the preserved dashboard/home entry
|
|
178
|
+
- `core/config/organization-model.ts` -- product labels, System availability, resource descriptors, semantic surfaces, canonical-to-legacy surface aliases, and quick-access behavior
|
|
179
|
+
- `ui/src/config/README.md` -- the deeper guide for those config files
|
|
180
|
+
|
|
181
|
+
## Customizing System Sidebars
|
|
182
|
+
|
|
183
|
+
The template demonstrates one override pattern in `ui/src/routes/__root.tsx`: it extends `CRM_ITEMS` with a template-owned Reports link and replaces `crmManifest` with `customCrmManifest` in the System module array. The backing route lives at `ui/src/routes/crm/reports.tsx` -- delete both the nav item and the route if you don't need them.
|
|
184
|
+
|
|
185
|
+
Two customization layers are available for every shared System sidebar:
|
|
186
|
+
|
|
187
|
+
1. **Nav-item shortcut (`items` prop)** -- when you just need to swap or extend the nav array, spread the published items constant and pass the result to `*SidebarMiddle`. The template's CRM customization uses this path.
|
|
188
|
+
|
|
189
|
+
```tsx
|
|
190
|
+
import { crmManifest, CrmSidebar, CrmSidebarMiddle, CRM_ITEMS } from '@elevasis/ui/features/crm'
|
|
191
|
+
import type { NavItem } from '@elevasis/ui/layout'
|
|
192
|
+
|
|
193
|
+
const customItems: NavItem[] = [...CRM_ITEMS, { label: 'Reports', to: '/crm/reports', icon: IconFileText, exact: false }]
|
|
194
|
+
const CustomCrmSidebar = () => <CrmSidebar><CrmSidebarMiddle items={customItems} /></CrmSidebar>
|
|
195
|
+
const customCrmManifest = { ...crmManifest, sidebar: CustomCrmSidebar }
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
2. **Compose-primitives (structural changes)** -- when you need to inject panels, reorder sections, or add a new section, drop down to `CrmSidebarTop` + `SubshellNavList` + `SubshellSidebarSection` + published panels (`MyTasksPanel`, `QuickCreateActions`) and compose your own Middle.
|
|
199
|
+
|
|
200
|
+
`manifest.sidebar` accepts any component, so arbitrary customization is always available. The `items` prop is an abstraction barrier for the common case, not a limit.
|
|
201
|
+
|
|
202
|
+
See `node_modules/@elevasis/sdk/reference/scaffold/ui/customization.md` for the decision tree, page-wrapping pattern, and delivery's three-section variant. For broader CRM extension work across pages, hooks, actions, workflows, and org-model boundaries, start with `node_modules/@elevasis/sdk/reference/scaffold/recipes/extend-crm.md`. For broader lead-gen extension work across pages, hooks, list/member state, artifacts, workflows, and org-model boundaries, start with `node_modules/@elevasis/sdk/reference/scaffold/recipes/extend-lead-gen.md`. See `node_modules/@elevasis/sdk/reference/scaffold/reference/contracts.md` for `NavItem`, `SystemModule`, CRM platform primitives, Lead Gen platform primitives, and related TypeScript shapes.
|
|
203
|
+
|
|
204
|
+
For CRM deal action buttons, read `node_modules/@elevasis/sdk/reference/scaffold/recipes/customize-crm-actions.md` before changing `crmActions`, `DealDetailPage`, `DealDrawer`, or custom workflow buttons. Start with the shared `crmActions` provider path for action visibility, labels, ordering, and render-time configuration. In v1, platform-known/default action endpoint behavior is server-constrained; use project-owned UI that calls the workflow directly when a custom key sits outside that server-dispatched set.
|
|
205
|
+
|
|
206
|
+
## Notes
|
|
207
|
+
|
|
208
|
+
- `ui/src/routeTree.gen.ts` is generated by TanStack Router tooling. Do not hand-edit it.
|
|
209
|
+
- The template ships a broad route surface so downstream projects can trim or reshape features without having to re-derive the shared shell contract from scratch.
|
|
210
|
+
- For package-export discovery, glob `node_modules/@elevasis/sdk/reference/` or `node_modules/@repo/ui/dist/` for the current SDK/UI package surface.
|
package/reference/rules/vibe.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Ambient intent classifier -- routes natural-language input to
|
|
2
|
+
description: Ambient intent classifier -- routes natural-language input to intent buckets without a slash command; Codify and Toggle delegate to /om, Operate delegates to /elevasis
|
|
3
3
|
paths:
|
|
4
4
|
- "**/*"
|
|
5
5
|
---
|
|
@@ -19,7 +19,7 @@ Vibe is the translation layer between the user's natural language and the correc
|
|
|
19
19
|
|
|
20
20
|
Vibe coders (non-technical builders) are the primary audience. They build by describing. They never memorize commands, IDs, or schema. The ambient layer closes the gap between what they say and what the system can act on.
|
|
21
21
|
|
|
22
|
-
##
|
|
22
|
+
## Intent Types
|
|
23
23
|
|
|
24
24
|
### 1. Capture
|
|
25
25
|
|
|
@@ -29,14 +29,15 @@ The user wants to record something new -- a task, a note, a piece of information
|
|
|
29
29
|
|
|
30
30
|
**Fixture examples:**
|
|
31
31
|
|
|
32
|
-
| Input
|
|
33
|
-
|
|
|
34
|
-
| "Add a task to follow up with the Shopify client"
|
|
35
|
-
| "Remember to run the campaign report on Friday"
|
|
36
|
-
| "Run the campaign report every Friday at 9am"
|
|
37
|
-
| "Track this conversation as a deal note"
|
|
32
|
+
| Input | Why it's Capture |
|
|
33
|
+
| --------------------------------------------------- | -------------------------------------------- |
|
|
34
|
+
| "Add a task to follow up with the Shopify client" | Explicit "add a task" with a described item |
|
|
35
|
+
| "Remember to run the campaign report on Friday" | "Remember to" signals something to persist |
|
|
36
|
+
| "Run the campaign report every Friday at 9am" | Repeating schedule vocabulary to persist |
|
|
37
|
+
| "Track this conversation as a deal note" | Explicit "track" with a described artifact |
|
|
38
|
+
| "Note for myself: the client prefers morning calls" | "Note for myself" = personal note to persist |
|
|
38
39
|
|
|
39
|
-
**Agent action:** draft the capture in plain language, confirm with the user, then execute via `elevasis-sdk project:*` commands for project records or `elevasis-sdk schedule:create` for recurring automation. Use repetition vocabulary ("every", "daily", "weekly", "monthly") for schedules; one-shot future reminders stay project tasks with due dates. Never write without confirmation.
|
|
40
|
+
**Agent action:** draft the capture in plain language, confirm with the user, then execute via `elevasis-sdk project:*` commands for project records, `elevasis-sdk note:create` for personal user notes (the Command Center right panel), or `elevasis-sdk schedule:create` for recurring automation. Disambiguate note scope: a note tied to a deal/task/project is `project:note:create` (a `project:*` record); a standalone personal note is `note:create`. Use repetition vocabulary ("every", "daily", "weekly", "monthly") for schedules; one-shot future reminders stay project tasks with due dates. Never write without confirmation.
|
|
40
41
|
|
|
41
42
|
### 2. Query
|
|
42
43
|
|
|
@@ -122,6 +123,8 @@ The user describes organizational reality that is not yet expressed in the model
|
|
|
122
123
|
|
|
123
124
|
**Recognize by:** declarative "we are" / "we use" / "we track" statements, repeated attribute mentions (second time the same attribute appears), or explicit "add a type / add a field / model X as Y" requests.
|
|
124
125
|
|
|
126
|
+
**NOT Codify — do not over-propose on questions.** "What systems are on?", "tell me about deals", "explain the lead-gen Action" are Describe, not Codify. The discriminator is _asking about_ versus _asking to change_ the model. Read-shaped inputs ("what", "tell me", "explain", "show me", "where am I") stay in Describe even when they reference the same vocabulary Codify edits — narrate, do not propose codification. Only propose codification when the user declares new structure ("we're an X company", "we track Y as Z") or explicitly asks for a model change ("add a field…", "rename stage…").
|
|
127
|
+
|
|
125
128
|
**Fixture examples:**
|
|
126
129
|
|
|
127
130
|
| Input | Why it's Codify |
|
|
@@ -180,17 +183,48 @@ The user wants to enable or disable a System.
|
|
|
180
183
|
|
|
181
184
|
**Agent action:** delegate to `/om systems`. The ceremony (confirm + edit `core/config/organization-model.ts` + typecheck) belongs to `/om`, not to the ambient rule.
|
|
182
185
|
|
|
186
|
+
**Tenant-local only.** Toggle operates on the tenant's own `core/config/organization-model.ts` — the project's own Systems. Platform-level Systems (the Elevasis monorepo's `packages/elevasis-core/src/organization-model/`) are not in scope; tenants cannot toggle them and vibe must not pretend they can. If a user names a platform-only System, surface the boundary in plain language rather than attempting a toggle.
|
|
187
|
+
|
|
188
|
+
### 8. Operate
|
|
189
|
+
|
|
190
|
+
The user wants to run an already-deployed workflow or agent against the platform — kick off an execution, not change configuration.
|
|
191
|
+
|
|
192
|
+
**Recognize by:** action verbs "run", "execute", "launch", "trigger", "kick off", "start" combined with a named deployed resource (a workflow id, agent name, or named pipeline). Distinguish from:
|
|
193
|
+
|
|
194
|
+
- **Capture** — "remember to run X" is a persisted reminder/schedule, not an immediate execution.
|
|
195
|
+
- **Transition** — "the run is done" is a status change on an existing execution, not a new run.
|
|
196
|
+
- **Codify** — "add a workflow called X" is a model change, not an execution of an existing one.
|
|
197
|
+
|
|
198
|
+
**Fixture examples:**
|
|
199
|
+
|
|
200
|
+
| Input | Why it's Operate |
|
|
201
|
+
| ------------------------------------------------ | ---------------------------------------------- |
|
|
202
|
+
| "Run the daily-digest workflow" | "Run" + named deployed resource |
|
|
203
|
+
| "Kick off the lead-gen pipeline for ZentaraHQ" | "Kick off" + named resource + named scope |
|
|
204
|
+
| "Execute the campaign builder against this list" | "Execute" + deployed workflow + concrete input |
|
|
205
|
+
| "Launch the apify-init agent now" | "Launch" + named deployed agent |
|
|
206
|
+
|
|
207
|
+
**Agent action:** delegate to `/elevasis`. The describe-then-exec ceremony belongs to that skill, not to the ambient rule:
|
|
208
|
+
|
|
209
|
+
1. `elevasis-sdk describe <resourceId>` to fetch the deployed resource's input contract.
|
|
210
|
+
2. Draft the input payload from the user's natural-language phrasing.
|
|
211
|
+
3. Confirm with the user (plain-language summary of payload + target).
|
|
212
|
+
4. `elevasis-sdk exec <resourceId> --input '{…}'` to run it.
|
|
213
|
+
|
|
214
|
+
**Runs already-deployed resources only.** Operate never deploys, never creates, never edits the workflow source. If the named resource is not deployed, surface that in plain language and offer to route to Codify (define it) or Capture (record a follow-up) — do not attempt to deploy from the ambient rule.
|
|
215
|
+
|
|
183
216
|
## Quick Reference Table
|
|
184
217
|
|
|
185
|
-
| Intent | Trigger signal
|
|
186
|
-
| ---------- |
|
|
187
|
-
| Capture | "add", "remember", "track", "log" + a thing
|
|
188
|
-
| Query | "what's next", "what's pending", "what failed", "what systems"
|
|
189
|
-
| Describe | "what is", "tell me about", "explain", "where am I"
|
|
190
|
-
| Transition | "done", "stuck", "blocked", "finished", "complete", "approve", "pause"
|
|
191
|
-
| Navigate | "focus on", "switch to", "back to", "look at"
|
|
192
|
-
| Codify | "we are X", "we track Y", repeated attribute, "add type/field"
|
|
193
|
-
| Toggle | "enable", "disable", "turn on/off" + system
|
|
218
|
+
| Intent | Trigger signal | Routed to |
|
|
219
|
+
| ---------- | ------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------- |
|
|
220
|
+
| Capture | "add", "remember", "track", "log", "note for myself" + a thing | Agent -- draft + confirm + `project:*`, `note:create`, or `schedule:create` CLI |
|
|
221
|
+
| Query | "what's next", "what's pending", "what failed", "what systems" | Agent -- read with `project:*`, `queue:*`, or `schedule:*` + narrate |
|
|
222
|
+
| Describe | "what is", "tell me about", "explain", "where am I" | Agent -- narrate from org model labels |
|
|
223
|
+
| Transition | "done", "stuck", "blocked", "finished", "complete", "approve", "pause" | Agent -- confirm + `project:task:save`, `queue:select`, or `schedule:*` |
|
|
224
|
+
| Navigate | "focus on", "switch to", "back to", "look at" | Agent -- update scope + narrate |
|
|
225
|
+
| Codify | "we are X", "we track Y", repeated attribute, "add type/field" | Delegate to `/om \<domain>` |
|
|
226
|
+
| Toggle | "enable", "disable", "turn on/off" + system | Delegate to `/om systems` (tenant-local only) |
|
|
227
|
+
| Operate | "run", "execute", "launch", "trigger", "kick off", "start" + deployed resource | Delegate to `/elevasis` -- `elevasis-sdk describe` + confirm + `elevasis-sdk exec` |
|
|
194
228
|
|
|
195
229
|
## Source of Truth for Plain Language
|
|
196
230
|
|
|
@@ -14,7 +14,7 @@ This scaffold reference contains universal documentation that applies to all Ele
|
|
|
14
14
|
- **ui/** -- UI patterns, system shell architecture, composition, and customization
|
|
15
15
|
- **core/** -- Organization model architecture, graph layer, and semantic contracts
|
|
16
16
|
- **operations/** -- Workflow authoring patterns and adapter usage
|
|
17
|
-
- **reference/** -- Glossary, auto-generated contracts, and system registry
|
|
17
|
+
- **reference/** -- Glossary, auto-generated contracts, and system registry
|
|
18
18
|
|
|
19
19
|
## Quick Navigation
|
|
20
20
|
|
|
@@ -49,9 +49,10 @@ This scaffold reference contains universal documentation that applies to all Ele
|
|
|
49
49
|
|
|
50
50
|
### Reference
|
|
51
51
|
|
|
52
|
-
- [Glossary](./reference/glossary.md) -- term definitions for Organization OS concepts
|
|
53
|
-
- [Contracts](./reference/contracts.md) -- auto-generated TypeScript contract shapes
|
|
54
|
-
- [System
|
|
52
|
+
- [Glossary](./reference/glossary.md) -- term definitions for Organization OS concepts
|
|
53
|
+
- [Contracts](./reference/contracts.md) -- auto-generated TypeScript contract shapes
|
|
54
|
+
- [System Interface Capabilities](./reference/system-interface-capabilities.md) -- auto-generated catalog of supported System Interface profiles and readiness requirements
|
|
55
|
+
- [System Registry](./reference/feature-registry.md) -- auto-generated system manifest catalog
|
|
55
56
|
|
|
56
57
|
## Source Locations
|
|
57
58
|
|
|
@@ -65,6 +66,7 @@ Content is co-located with its owning package and copied here during SDK build:
|
|
|
65
66
|
| `scaffold/operations/scaffold-maintenance.md` | `packages/sdk/docs/scaffold/operations/` | SDK |
|
|
66
67
|
| `scaffold/ui/` | `packages/ui/src/scaffold/` | UI |
|
|
67
68
|
| `scaffold/core/` | `packages/core/src/organization-model/` | Core |
|
|
68
|
-
| `scaffold/reference/glossary.md` | `packages/core/src/reference/glossary.md` | Core |
|
|
69
|
-
| `scaffold/reference/contracts.md` | `packages/core/src/reference/_generated/contracts.md` | Core (auto-gen) |
|
|
70
|
-
| `scaffold/reference/
|
|
69
|
+
| `scaffold/reference/glossary.md` | `packages/core/src/reference/glossary.md` | Core |
|
|
70
|
+
| `scaffold/reference/contracts.md` | `packages/core/src/reference/_generated/contracts.md` | Core (auto-gen) |
|
|
71
|
+
| `scaffold/reference/system-interface-capabilities.md` | `packages/core/src/reference/_generated/system-interface-capabilities.md` | Core (auto-gen) |
|
|
72
|
+
| `scaffold/reference/feature-registry.md` | `packages/ui/src/scaffold/_generated/feature-registry.md` | UI (auto-gen) |
|
|
@@ -29,9 +29,10 @@ Scaffold docs are co-located with their owning package and copied into the SDK r
|
|
|
29
29
|
| --------------------------- | --------------------------------------------------------------- | --------------------------------------------- |
|
|
30
30
|
| Organization Model | `packages/core/src/organization-model/organization-model.mdx` | `scaffold/core/organization-model.mdx` |
|
|
31
31
|
| Organization Graph | `packages/core/src/organization-model/organization-graph.mdx` | `scaffold/core/organization-graph.mdx` |
|
|
32
|
-
| Glossary | `packages/core/src/reference/glossary.md` | `scaffold/reference/glossary.md` |
|
|
33
|
-
| Contracts (auto-gen) | `packages/core/src/reference/_generated/contracts.md` | `scaffold/reference/contracts.md` |
|
|
34
|
-
|
|
|
32
|
+
| Glossary | `packages/core/src/reference/glossary.md` | `scaffold/reference/glossary.md` |
|
|
33
|
+
| Contracts (auto-gen) | `packages/core/src/reference/_generated/contracts.md` | `scaffold/reference/contracts.md` |
|
|
34
|
+
| System Interface Capabilities (auto-gen) | `packages/core/src/reference/_generated/system-interface-capabilities.md` | `scaffold/reference/system-interface-capabilities.md` |
|
|
35
|
+
| UI Recipes | `packages/ui/src/scaffold/recipes.md` | `scaffold/ui/recipes.md` |
|
|
35
36
|
| System Flags & Gating | `packages/ui/src/scaffold/feature-flags-and-gating.md` | `scaffold/ui/feature-flags-and-gating.md` |
|
|
36
37
|
| Customization | `packages/ui/src/scaffold/customization.md` | `scaffold/ui/customization.md` |
|
|
37
38
|
| System Shell | `packages/ui/src/scaffold/feature-shell.mdx` | `scaffold/ui/feature-shell.mdx` |
|
|
@@ -57,7 +58,16 @@ Generated by `scripts/monorepo/generate-scaffold-contracts.js` from TypeScript s
|
|
|
57
58
|
- `packages/ui/src/features/registry/types.ts` -- System Registry
|
|
58
59
|
- `packages/core/src/platform/registry/types.ts` -- Resource Registry, Deployment Spec
|
|
59
60
|
|
|
60
|
-
Output: `packages/core/src/reference/_generated/contracts.md`
|
|
61
|
+
Output: `packages/core/src/reference/_generated/contracts.md`
|
|
62
|
+
|
|
63
|
+
### System Interface Capabilities (`system-interface-capabilities.md`)
|
|
64
|
+
|
|
65
|
+
Generated by `scripts/monorepo/generate-scaffold-contracts.js` from:
|
|
66
|
+
|
|
67
|
+
- `packages/core/src/organization-model/domains/systems.ts` -- `SYSTEM_INTERFACE_PROFILES`
|
|
68
|
+
- `packages/core/src/business/acquisition/ontology-validation.ts` -- derived-readiness validation constants and checks
|
|
69
|
+
|
|
70
|
+
Output: `packages/core/src/reference/_generated/system-interface-capabilities.md`
|
|
61
71
|
|
|
62
72
|
### System Registry (`feature-registry.md`)
|
|
63
73
|
|