@elevasis/sdk 1.44.3 → 1.46.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 (259) hide show
  1. package/dist/cli.cjs +35026 -30226
  2. package/dist/index.d.ts +1786 -808
  3. package/dist/index.js +789 -739
  4. package/dist/node/index.d.ts +105 -181
  5. package/dist/node/index.js +2 -2
  6. package/dist/test-utils/index.d.ts +901 -359
  7. package/dist/test-utils/index.js +587 -824
  8. package/dist/worker/index.d.ts +12685 -0
  9. package/dist/worker/index.js +188 -216
  10. package/package.json +4 -7
  11. package/reference/_navigation.md +161 -22
  12. package/reference/_reference-manifest.json +228 -4
  13. package/reference/claude-config.md +8 -0
  14. package/reference/core/exports.mdx +2 -0
  15. package/reference/core/index.mdx +3 -3
  16. package/reference/examples/organization-model.ts +117 -111
  17. package/reference/index.mdx +4 -4
  18. package/reference/packages/core/src/business/README.md +4 -1
  19. package/reference/packages/core/src/content/README.md +19 -0
  20. package/reference/packages/core/src/organization-model/README.md +148 -149
  21. package/reference/packages/core/src/organization-model/readiness/README.md +42 -0
  22. package/reference/packages/ui/src/features/README.md +28 -28
  23. package/reference/rules/active-change-index.md +40 -54
  24. package/reference/rules/agent-runtime.md +81 -0
  25. package/reference/rules/agent-start-here.md +71 -163
  26. package/reference/rules/deployment.md +33 -10
  27. package/reference/rules/error-handling.md +26 -0
  28. package/reference/rules/execution.md +13 -0
  29. package/reference/rules/frontend.md +10 -3
  30. package/reference/rules/observability.md +9 -1
  31. package/reference/rules/operations.md +26 -17
  32. package/reference/rules/organization-model.md +74 -88
  33. package/reference/rules/organization-os.md +71 -88
  34. package/reference/rules/package-taxonomy.md +11 -2
  35. package/reference/rules/platform.md +13 -7
  36. package/reference/rules/shared-types.md +36 -0
  37. package/reference/rules/task-tracking.md +30 -5
  38. package/reference/rules/ui.md +145 -3
  39. package/reference/rules/vibe-intents.md +271 -0
  40. package/reference/rules/vibe.md +17 -243
  41. package/reference/scaffold/core/organization-graph.mdx +112 -99
  42. package/reference/scaffold/core/organization-model.mdx +231 -215
  43. package/reference/scaffold/operations/propagation-pipeline.md +16 -17
  44. package/reference/scaffold/operations/scaffold-maintenance.md +22 -20
  45. package/reference/scaffold/operations/workflow-recipes.md +72 -20
  46. package/reference/scaffold/recipes/add-a-feature.md +156 -146
  47. package/reference/scaffold/recipes/add-a-resource.md +123 -117
  48. package/reference/scaffold/recipes/customize-crm-actions.md +28 -13
  49. package/reference/scaffold/recipes/customize-knowledge-browser.md +52 -117
  50. package/reference/scaffold/recipes/customize-organization-model.md +161 -149
  51. package/reference/scaffold/recipes/extend-a-base-entity.md +156 -140
  52. package/reference/scaffold/recipes/extend-content.md +265 -0
  53. package/reference/scaffold/recipes/extend-crm.md +16 -11
  54. package/reference/scaffold/recipes/extend-lead-gen.md +37 -21
  55. package/reference/scaffold/recipes/gate-by-feature-or-admin.md +160 -118
  56. package/reference/scaffold/recipes/index.md +6 -3
  57. package/reference/scaffold/recipes/query-the-knowledge-graph.md +23 -23
  58. package/reference/scaffold/reference/contracts.md +30 -56
  59. package/reference/scaffold/reference/feature-registry.md +3 -0
  60. package/reference/scaffold/reference/glossary.md +4 -4
  61. package/reference/scaffold/reference/system-interface-capabilities.md +5 -4
  62. package/reference/scaffold/ui/composition-extensibility.mdx +271 -232
  63. package/reference/scaffold/ui/customization.md +2 -2
  64. package/reference/scaffold/ui/feature-flags-and-gating.md +14 -6
  65. package/reference/scaffold/ui/feature-shell.mdx +277 -62
  66. package/reference/scaffold/ui/recipes.md +229 -197
  67. package/reference/sdk/cli-management.mdx +166 -33
  68. package/reference/sdk/cli.mdx +90 -13
  69. package/reference/sdk/concepts.mdx +2 -0
  70. package/reference/sdk/define-builders.mdx +76 -0
  71. package/reference/sdk/deployment/command-center.mdx +6 -2
  72. package/reference/sdk/deployment/execution-reference.mdx +64 -186
  73. package/reference/sdk/deployment/index.mdx +2 -0
  74. package/reference/sdk/exports.mdx +4 -4
  75. package/reference/sdk/framework/agent.mdx +52 -116
  76. package/reference/sdk/framework/index.mdx +46 -65
  77. package/reference/sdk/framework/project-structure.mdx +150 -205
  78. package/reference/sdk/framework/tutorial-system.mdx +2 -2
  79. package/reference/sdk/human-in-the-loop.mdx +152 -0
  80. package/reference/sdk/index.mdx +6 -7
  81. package/reference/sdk/platform-tools/adapters-platform.mdx +3 -1
  82. package/reference/sdk/platform-tools/index.mdx +12 -0
  83. package/reference/sdk/platform-tools/type-safety.mdx +4 -0
  84. package/reference/sdk/project-deployment-spec.mdx +131 -0
  85. package/reference/sdk/resources/index.mdx +21 -7
  86. package/reference/sdk/resources/patterns.mdx +54 -24
  87. package/reference/sdk/resources/types.mdx +7 -4
  88. package/reference/sdk/templates/data-enrichment.mdx +7 -3
  89. package/reference/sdk/templates/email-sender.mdx +139 -135
  90. package/reference/sdk/templates/lead-scorer.mdx +5 -1
  91. package/reference/sdk/templates/pdf-generator.mdx +155 -151
  92. package/reference/sdk/templates/recurring-job.mdx +195 -189
  93. package/reference/sdk/templates/text-classifier.mdx +4 -0
  94. package/reference/sdk/templates/web-scraper.mdx +139 -135
  95. package/reference/spine/spine-primer.md +135 -96
  96. package/reference/ui/exports.mdx +1 -0
  97. package/reference/ui/index.mdx +14 -7
  98. package/dist/types/worker/adapters/anymailfinder.d.ts +0 -14
  99. package/dist/types/worker/adapters/apify.d.ts +0 -14
  100. package/dist/types/worker/adapters/approval.d.ts +0 -23
  101. package/dist/types/worker/adapters/attio.d.ts +0 -22
  102. package/dist/types/worker/adapters/clickup.d.ts +0 -22
  103. package/dist/types/worker/adapters/create-adapter.d.ts +0 -41
  104. package/dist/types/worker/adapters/crm.d.ts +0 -20
  105. package/dist/types/worker/adapters/dropbox.d.ts +0 -14
  106. package/dist/types/worker/adapters/email.d.ts +0 -25
  107. package/dist/types/worker/adapters/execution.d.ts +0 -22
  108. package/dist/types/worker/adapters/gmail.d.ts +0 -14
  109. package/dist/types/worker/adapters/google-sheets.d.ts +0 -14
  110. package/dist/types/worker/adapters/index.d.ts +0 -33
  111. package/dist/types/worker/adapters/instantly.d.ts +0 -14
  112. package/dist/types/worker/adapters/lead.d.ts +0 -28
  113. package/dist/types/worker/adapters/list.d.ts +0 -9
  114. package/dist/types/worker/adapters/llm.d.ts +0 -45
  115. package/dist/types/worker/adapters/millionverifier.d.ts +0 -14
  116. package/dist/types/worker/adapters/notification.d.ts +0 -28
  117. package/dist/types/worker/adapters/pdf.d.ts +0 -22
  118. package/dist/types/worker/adapters/projects.d.ts +0 -20
  119. package/dist/types/worker/adapters/resend.d.ts +0 -14
  120. package/dist/types/worker/adapters/scheduler.d.ts +0 -25
  121. package/dist/types/worker/adapters/signature-api.d.ts +0 -14
  122. package/dist/types/worker/adapters/storage.d.ts +0 -33
  123. package/dist/types/worker/adapters/stripe.d.ts +0 -14
  124. package/dist/types/worker/adapters/tomba.d.ts +0 -14
  125. package/dist/types/worker/index.d.ts +0 -60
  126. package/dist/types/worker/platform.d.ts +0 -90
  127. package/dist/types/worker/utils.d.ts +0 -9
  128. package/reference/claude-config/Overview.md +0 -230
  129. package/reference/claude-config/hooks/post-edit-validate.mjs +0 -98
  130. package/reference/claude-config/hooks/scaffold-registry-reminder.mjs +0 -187
  131. package/reference/claude-config/hooks/tool-failure-recovery.mjs +0 -73
  132. package/reference/claude-config/registries/graph-skills.json +0 -4
  133. package/reference/claude-config/registries/knowledge-flags.json +0 -154
  134. package/reference/claude-config/registries/skill-coverage.json +0 -20
  135. package/reference/claude-config/rules/active-change-index.md +0 -22
  136. package/reference/claude-config/rules/agent-start-here.md +0 -22
  137. package/reference/claude-config/rules/deployment.md +0 -22
  138. package/reference/claude-config/rules/error-handling.md +0 -22
  139. package/reference/claude-config/rules/execution.md +0 -22
  140. package/reference/claude-config/rules/frontend.md +0 -22
  141. package/reference/claude-config/rules/observability.md +0 -22
  142. package/reference/claude-config/rules/operations.md +0 -22
  143. package/reference/claude-config/rules/organization-model.md +0 -22
  144. package/reference/claude-config/rules/organization-os.md +0 -22
  145. package/reference/claude-config/rules/package-taxonomy.md +0 -22
  146. package/reference/claude-config/rules/platform.md +0 -22
  147. package/reference/claude-config/rules/shared-types.md +0 -22
  148. package/reference/claude-config/rules/task-tracking.md +0 -22
  149. package/reference/claude-config/rules/topbar-actions.md +0 -70
  150. package/reference/claude-config/rules/ui.md +0 -22
  151. package/reference/claude-config/rules/vibe.md +0 -22
  152. package/reference/claude-config/scripts/statusline-command.js +0 -18
  153. package/reference/claude-config/settings.json +0 -30
  154. package/reference/claude-config/skills/client/SKILL.md +0 -201
  155. package/reference/claude-config/skills/deploy/SKILL.md +0 -159
  156. package/reference/claude-config/skills/dsp/SKILL.md +0 -66
  157. package/reference/claude-config/skills/elevasis/SKILL.md +0 -251
  158. package/reference/claude-config/skills/explore/SKILL.md +0 -78
  159. package/reference/claude-config/skills/git-sync/SKILL.md +0 -166
  160. package/reference/claude-config/skills/om/SKILL.md +0 -475
  161. package/reference/claude-config/skills/om/operations/build.md +0 -237
  162. package/reference/claude-config/skills/om/operations/codify-level-a.md +0 -109
  163. package/reference/claude-config/skills/om/operations/codify-level-b.md +0 -159
  164. package/reference/claude-config/skills/om/operations/customers.md +0 -114
  165. package/reference/claude-config/skills/om/operations/features.md +0 -88
  166. package/reference/claude-config/skills/om/operations/goals.md +0 -123
  167. package/reference/claude-config/skills/om/operations/identity.md +0 -97
  168. package/reference/claude-config/skills/om/operations/labels.md +0 -110
  169. package/reference/claude-config/skills/om/operations/offerings.md +0 -114
  170. package/reference/claude-config/skills/om/operations/roles.md +0 -104
  171. package/reference/claude-config/skills/om/operations/scaffold.md +0 -163
  172. package/reference/claude-config/skills/om/operations/techStack.md +0 -38
  173. package/reference/claude-config/skills/project/SKILL.md +0 -1114
  174. package/reference/claude-config/skills/run-ui/SKILL.md +0 -73
  175. package/reference/claude-config/skills/save/SKILL.md +0 -183
  176. package/reference/claude-config/skills/setup/SKILL.md +0 -290
  177. package/reference/claude-config/skills/status/SKILL.md +0 -59
  178. package/reference/claude-config/skills/submit-request/SKILL.md +0 -180
  179. package/reference/claude-config/skills/sync/SKILL.md +0 -47
  180. package/reference/claude-config/skills/tutorial/SKILL.md +0 -259
  181. package/reference/claude-config/skills/tutorial/progress-template.md +0 -74
  182. package/reference/claude-config/skills/tutorial/technical.md +0 -1303
  183. package/reference/claude-config/skills/tutorial/vibe-coder.md +0 -890
  184. package/reference/claude-config/sync-notes/2026-04-22-git-sync-and-sync-notes.md +0 -27
  185. package/reference/claude-config/sync-notes/2026-04-22-lead-gen-deliverability-removal.md +0 -30
  186. package/reference/claude-config/sync-notes/2026-04-24-test-utils-and-template-tests.md +0 -73
  187. package/reference/claude-config/sync-notes/2026-04-24-ui-consolidation-and-sdk-cli-train.md +0 -86
  188. package/reference/claude-config/sync-notes/2026-04-25-auth-role-system-and-settings-roles.md +0 -55
  189. package/reference/claude-config/sync-notes/2026-04-27-crm-hitl-action-layer-cutover.md +0 -97
  190. package/reference/claude-config/sync-notes/2026-04-27-lead-gen-substrate-train.md +0 -112
  191. package/reference/claude-config/sync-notes/2026-04-29-crm-state-and-lead-gen-processing-status.md +0 -93
  192. package/reference/claude-config/sync-notes/2026-05-02-crm-ownership-next-action.md +0 -58
  193. package/reference/claude-config/sync-notes/2026-05-02-template-hardcode-workos-config.md +0 -56
  194. package/reference/claude-config/sync-notes/2026-05-04-elevasis-workspace.md +0 -71
  195. package/reference/claude-config/sync-notes/2026-05-04-knowledge-bundle.md +0 -83
  196. package/reference/claude-config/sync-notes/2026-05-04-template-skills-run-ui-and-tutorial.md +0 -59
  197. package/reference/claude-config/sync-notes/2026-05-05-list-builder.md +0 -42
  198. package/reference/claude-config/sync-notes/2026-05-06-crm-spine.md +0 -60
  199. package/reference/claude-config/sync-notes/2026-05-06-sdk-changes-release-train.md +0 -37
  200. package/reference/claude-config/sync-notes/2026-05-07-sdk-changes-release-train.md +0 -34
  201. package/reference/claude-config/sync-notes/2026-05-08-resource-governance-scaffold-guidance.md +0 -38
  202. package/reference/claude-config/sync-notes/2026-05-09-clients-domain.md +0 -32
  203. package/reference/claude-config/sync-notes/2026-05-09-command-system.md +0 -33
  204. package/reference/claude-config/sync-notes/2026-05-09-resource-governance-and-misc.md +0 -69
  205. package/reference/claude-config/sync-notes/2026-05-12-sdk-ready-release-train.md +0 -30
  206. package/reference/claude-config/sync-notes/2026-05-14-organization-model-ontology-refactor.md +0 -45
  207. package/reference/claude-config/sync-notes/2026-05-15-om-skill-rename-and-write-family.md +0 -52
  208. package/reference/claude-config/sync-notes/2026-05-17-sdk-boundary-consolidation.md +0 -33
  209. package/reference/claude-config/sync-notes/2026-05-20-om-define-helpers.md +0 -32
  210. package/reference/claude-config/sync-notes/2026-05-22-access-model-and-right-panel.md +0 -43
  211. package/reference/claude-config/sync-notes/2026-05-22-lead-gen-tenant-config.md +0 -40
  212. package/reference/claude-config/sync-notes/2026-05-22-org-model-multi-file-split.md +0 -61
  213. package/reference/claude-config/sync-notes/2026-05-23-branding-names-to-identity.md +0 -49
  214. package/reference/claude-config/sync-notes/2026-05-23-lead-gen-manage-access.md +0 -31
  215. package/reference/claude-config/sync-notes/2026-05-23-om-deployment-drift-detection.md +0 -42
  216. package/reference/claude-config/sync-notes/2026-05-23-om-full-model-deploy-contract.md +0 -33
  217. package/reference/claude-config/sync-notes/2026-05-23-ui-sdk-package-fixes.md +0 -37
  218. package/reference/claude-config/sync-notes/2026-05-24-platform-invite-router-core-baseline.md +0 -28
  219. package/reference/claude-config/sync-notes/2026-05-24-system-interface-readiness.md +0 -43
  220. package/reference/claude-config/sync-notes/2026-05-25-invitation-login-loader.md +0 -26
  221. package/reference/claude-config/sync-notes/2026-05-25-om-topbar-requests.md +0 -33
  222. package/reference/claude-config/sync-notes/2026-05-25-system-interface-profile-registry-and-substrate.md +0 -35
  223. package/reference/claude-config/sync-notes/2026-05-25-tenant-om-scaffold-cli.md +0 -49
  224. package/reference/claude-config/sync-notes/2026-05-25-vibe-operate-intent.md +0 -47
  225. package/reference/claude-config/sync-notes/2026-05-28-om-snapshot-sdk-workflow-config.md +0 -33
  226. package/reference/claude-config/sync-notes/2026-05-30-client-source-and-om-profiles.md +0 -39
  227. package/reference/claude-config/sync-notes/2026-06-02-knowledge-nested-group-routing.md +0 -27
  228. package/reference/claude-config/sync-notes/2026-06-02-nest-projects-under-platform.md +0 -45
  229. package/reference/claude-config/sync-notes/2026-06-03-skill-autogen-and-client-skill.md +0 -34
  230. package/reference/claude-config/sync-notes/2026-06-04-scaffold-registry-lane-severity.md +0 -34
  231. package/reference/claude-config/sync-notes/2026-06-05-appearance-app-mode-decouple.md +0 -29
  232. package/reference/claude-config/sync-notes/2026-06-05-ontology-endpoint-rename-and-knowledge-browser-ui.md +0 -86
  233. package/reference/claude-config/sync-notes/2026-06-06-om-build-systems-scaffold.md +0 -47
  234. package/reference/claude-config/sync-notes/2026-06-06-om-item-copy-references.md +0 -50
  235. package/reference/claude-config/sync-notes/2026-06-08-knowledge-base-page-not-found-fix.md +0 -76
  236. package/reference/claude-config/sync-notes/2026-06-09-agent-sessions-public-agent-chat-route.md +0 -75
  237. package/reference/claude-config/sync-notes/2026-06-09-sdk-cli-load-org-model-resolution.md +0 -42
  238. package/reference/claude-config/sync-notes/2026-06-12-agent-grants-visualizer-operations.md +0 -30
  239. package/reference/claude-config/sync-notes/2026-06-14-session-ux-and-project-cli-json.md +0 -33
  240. package/reference/claude-config/sync-notes/2026-06-14-shared-session-conversation-view.md +0 -26
  241. package/reference/claude-config/sync-notes/2026-06-15-session-chat-zero-wiring.md +0 -46
  242. package/reference/claude-config/sync-notes/2026-06-17-agent-session-ux-features.md +0 -34
  243. package/reference/claude-config/sync-notes/2026-06-25-shared-page-scroll-contract-guard.md +0 -52
  244. package/reference/claude-config/sync-notes/2026-06-26-leadgen-overview-om-telemetry.md +0 -47
  245. package/reference/claude-config/sync-notes/2026-07-21-agent-scaffold-hardening.md +0 -75
  246. package/reference/claude-config/sync-notes/2026-07-23-agent-session-memory.md +0 -49
  247. package/reference/claude-config/sync-notes/2026-07-23-workos-org-marker.md +0 -50
  248. package/reference/claude-config/sync-notes/2026-07-24-claude-5-models-and-session-surface-fixes.md +0 -116
  249. package/reference/claude-config/sync-notes/2026-07-27-agent-strict-output-and-turn-drift.md +0 -73
  250. package/reference/claude-config/sync-notes/2026-07-28-agent-reply-is-its-own-field.md +0 -84
  251. package/reference/claude-config/sync-notes/2026-07-30-login-screen-and-member-provisioning-state.md +0 -114
  252. package/reference/claude-config/sync-notes/2026-08-02-auth-guard-defaults-and-truncation-fix.md +0 -122
  253. package/reference/claude-config/sync-notes/2026-08-03-agent-prose-escape-normalization.md +0 -88
  254. package/reference/claude-config/sync-notes/2026-08-03-cli-gateway-errors-and-request-timeout.md +0 -120
  255. package/reference/claude-config/sync-notes/README.md +0 -43
  256. package/reference/sdk/framework/interaction-guidance.mdx +0 -182
  257. package/reference/sdk/framework/memory.mdx +0 -326
  258. package/reference/sdk/framework/resource-documentation.mdx +0 -90
  259. package/reference/sdk/roadmap.mdx +0 -164
@@ -1,63 +1,71 @@
1
- ---
2
- title: System Shell & Provider Runtime
3
- description: Current system shell contract for Organization Model systems, manifests, route matching, sidebars, and breadcrumbs.
4
- ---
1
+ ---
2
+ title: System Shell & Provider Runtime
3
+ description: Current system shell contract for Organization Model systems, manifests, route matching, sidebars, and breadcrumbs.
4
+ ---
5
5
  <!-- @generated by packages/sdk/scripts/copy-reference-docs.mjs -- DO NOT EDIT -->
6
6
  <!-- Regenerate: pnpm scaffold:sync -->
7
7
 
8
-
9
- ## Overview
10
-
11
- The system shell derives app navigation from `OrganizationModel.systems`. System manifests provide implementation hooks such as icons and sidebars; they do not own structural navigation.
12
-
13
- ## Source Of Truth
14
-
15
- - `packages/core/src/organization-model/defaults.ts` -- default system list
16
- - `packages/core/src/organization-model/helpers.ts` -- `childrenOf`, `ancestorsOf`, `parentOf`, `topLevel`, `findByPath`
17
- - `packages/ui/src/features/registry/types.ts` -- `SystemModule`
18
- - `packages/ui/src/provider/ElevasisSystemsProvider.tsx` -- runtime resolver
19
- - `packages/ui/src/components/navigation/useBreadcrumbs.ts` -- breadcrumb derivation
20
-
21
- ## SystemModule
22
-
23
- ```ts
24
- export interface SystemModule {
25
- key: string
26
- systemId: string
27
- capabilityIds?: string[]
28
- icon?: SystemIconComponent
29
- sidebar?: SystemSidebarComponent
30
- organizationGraph?: { systemId: string }
31
- }
32
- ```
33
-
34
- `systemId` must match an Organization Model system ID. Structural fields such as route lists, nav labels, and nested links belong on `OrganizationModel.systems`.
35
-
36
- ## Shell Model
37
-
38
- `useElevasisSystems()` exposes `shellModel`:
39
-
40
- ```ts
41
- {
42
- systems,
43
- findByPath,
44
- findById,
45
- childrenOf,
46
- ancestorsOf,
47
- parentOf,
48
- topLevel,
49
- uiPositionFor,
50
- requiresAdminFor,
51
- devOnlyFor
52
- }
53
- ```
54
-
55
- Sidebar rendering walks `topLevel()` and `childrenOf(id)`. Breadcrumbs resolve `findByPath(location.pathname)` and then map `ancestorsOf(id)`.
56
-
57
- ## Access
58
-
59
- System access is keyed by Organization Model system ID. `requiresAdmin` and `devOnly` inherit from ancestor system nodes and are applied when deriving visible sidebar entries.
60
-
8
+
9
+ ## Overview
10
+
11
+ The system shell derives app navigation from `OrganizationModel.systems`. System manifests provide implementation hooks such as icons and sidebars; they do not own structural navigation.
12
+
13
+ ## Source Of Truth
14
+
15
+ - `packages/core/src/organization-model/defaults.ts` -- default system list
16
+ - `packages/core/src/organization-model/helpers.ts` -- `childrenOf`, `ancestorsOf`, `parentOf`, `topLevel`, `findByPath`
17
+ - `packages/ui/src/features/registry/types.ts` -- `SystemModule`
18
+ - `packages/ui/src/provider/ElevasisSystemsProvider.tsx` -- runtime resolver
19
+ - `packages/ui/src/components/navigation/useBreadcrumbs.ts` -- breadcrumb derivation
20
+
21
+ ## SystemModule
22
+
23
+ {/* doc-snippet:skip: shape excerpt from features/registry/types.ts -- SystemIconComponent and SystemSidebarComponent are shown unimported here for readability */}
24
+
25
+ ```ts
26
+ export interface SystemModule {
27
+ key: string
28
+ systemId?: string
29
+ routePrefixes?: string[]
30
+ capabilityIds?: string[]
31
+ icon?: SystemIconComponent
32
+ sidebar?: SystemSidebarComponent
33
+ sidebarWidth?: number | ((context: { currentPath: string }) => number)
34
+ organizationGraph?: OrganizationGraphSystemBridge
35
+ }
36
+
37
+ interface OrganizationGraphSystemBridge {
38
+ systemId?: string
39
+ }
40
+ ```
41
+
42
+ `systemId` must match an Organization Model system ID when present. Navigation-only app modules may omit `systemId` and use `routePrefixes` instead (see "Manifests for Navigation-Only Modules" below). `sidebarWidth` overrides the default 250px shell sidebar width. Structural fields such as route lists, nav labels, and nested links belong on `OrganizationModel.systems`.
43
+
44
+ ## Shell Model
45
+
46
+ `useElevasisSystems()` exposes `shellModel`:
47
+
48
+ {/* doc-snippet:skip: shape excerpt shown as a bare field list, not a standalone object literal or interface */}
49
+
50
+ ```ts
51
+ {
52
+ systems,
53
+ findByPath,
54
+ findById,
55
+ childrenOf,
56
+ ancestorsOf,
57
+ parentOf,
58
+ topLevel,
59
+ devOnlyFor
60
+ }
61
+ ```
62
+
63
+ Sidebar rendering walks `topLevel()` and `childrenOf(id)`. Breadcrumbs resolve `findByPath(location.pathname)` and then map `ancestorsOf(id)`.
64
+
65
+ ## Access
66
+
67
+ System access is keyed by Organization Model system ID. A System is hidden from non-dev viewers when it, or any ancestor, is `lifecycle: 'beta'` — that is what `devOnlyFor(id)` reports. Systems carry no `devOnly` or `requiresAdmin` flags of their own; the `devOnly` and `requiresAdmin` fields on a **sidebar surface node** are separate, still authored, and still applied when deriving visible entries.
68
+
61
69
  Routes still need guards:
62
70
 
63
71
  ```tsx
@@ -68,8 +76,215 @@ Routes still need guards:
68
76
  </ProtectedRoute>
69
77
  ```
70
78
 
71
- Use `AccessKeys.platformAdmin` with `AccessGuard` for pages that require platform-admin privileges.
72
-
73
- ## External Shells
74
-
75
- Host apps pass `SYSTEM_MANIFESTS` or their own `SystemModule[]` into `ElevasisSystemsProvider` and derive sidebar links locally from `shellModel`. There is no separate nav config file to keep in sync.
79
+ Use `AccessKeys.platformAdmin` with `AccessGuard` for pages that require platform-admin privileges. Use exported `AccessKeys` for permission-backed or diagnostic surfaces such as operations, monitoring, settings, and right-panel views.
80
+
81
+ ## Manifests for Navigation-Only Modules
82
+
83
+ Shared feature manifests may omit `systemId` and own `routePrefixes` instead when the module covers a navigation-only area rather than a semantic System. Route authorization still belongs to `AccessGuard`:
84
+
85
+ ```ts
86
+ // navigation-only module -- no systemId required
87
+ export const manifest = {
88
+ key: 'operations',
89
+ routePrefixes: ['/operations'],
90
+ capabilityIds: ['operations:view'],
91
+ }
92
+ ```
93
+
94
+ Manifest validation does not reject route-only modules. `ElevasisSystemsProvider` resolves surface route prefixes for app-area modules and uses `routePrefixes` for matching when `systemId` is absent. Access checks use System paths or `AccessKeys` constants, not manifest route prefixes.
95
+
96
+ ## Navigation Shape Decisions
97
+
98
+ | Decision | Current outcome |
99
+ | ----------------- | ------------------------------------------------------------------------------------------------------------- |
100
+ | Business | Navigation group only, not a System or URL namespace |
101
+ | Fake Systems | Dashboard, Finance, Operations, Monitoring, Knowledge, Settings, and Admin are demoted from canonical Systems |
102
+ | `platform` | Real canonical System owning cross-cutting diagnostics |
103
+ | `/clients` | Canonical route; legacy `/business/clients` routes redirect |
104
+ | Sidebar authoring | `navigation.sidebar` is the source of truth for shell navigation |
105
+
106
+ ## Composition
107
+
108
+ Host apps pass a system manifest list and a canonical organization model into the provider:
109
+
110
+ ```tsx
111
+ <ElevasisSystemsProvider systems={SYSTEM_MANIFESTS} organizationModel={canonicalOrganizationModel}>
112
+ <SystemShell>{children}</SystemShell>
113
+ </ElevasisSystemsProvider>
114
+ ```
115
+
116
+ Host apps still own route files, topbar behavior, app branding, and dashboard composition.
117
+
118
+ ## Topbar Action Substrate
119
+
120
+ The topbar is governed by the Organization Model through a `navigation.topbar` region that is parallel to `navigation.sidebar`. Each entry is a `TopbarActionNode` -- a leaf with no `path` or `surfaceType` -- and a UI registry binds each node's behavior. This mirrors the sidebar manifest pattern exactly: **OM owns data + visibility; the registry owns behavior.**
121
+
122
+ ### OM Schema -- `navigation.topbar`
123
+
124
+ Declared in `packages/core/src/organization-model/domains/navigation.ts`:
125
+
126
+ {/* doc-snippet:skip: shape excerpt from domains/navigation.ts -- z and the field schemas (ModelIdSchema, LabelSchema, etc.) are shown unimported here for readability */}
127
+
128
+ ```ts
129
+ // A topbar action node -- no path, no surfaceType
130
+ const TopbarActionNodeSchema = z.object({
131
+ id: ModelIdSchema, // stable key the registry binds to
132
+ label: LabelSchema, // accessible name / menu fallback
133
+ tooltip: DescriptionSchema.optional(),
134
+ icon: IconNameSchema.optional(), // flat token, resolved via icon registry
135
+ order: z.number().int().optional(),
136
+ enabled: z.boolean().default(true),
137
+ devOnly: z.boolean().optional(),
138
+ requiresAdmin: z.boolean().optional(),
139
+ targets: SidebarSurfaceTargetsSchema.optional()
140
+ })
141
+
142
+ // OrganizationModelNavigationSchema gets a topbar field alongside sidebar
143
+ const OrganizationModelNavigationSchema = z.object({
144
+ sidebar: SidebarNavigationSchema,
145
+ topbar: z.record(z.string(), TopbarActionNodeSchema).default({})
146
+ })
147
+ ```
148
+
149
+ The `topbar` field is an **append** -- `surfaceType`, surfaces, and the sidebar are untouched.
150
+
151
+ ### UI Registry -- `TopbarActionModule`
152
+
153
+ Defined in `packages/ui/src/features/registry/types.ts`:
154
+
155
+ {/* doc-snippet:skip: shape excerpt from features/registry/types.ts -- TablerIconComponent and ReactNode are shown unimported here for readability */}
156
+
157
+ ```ts
158
+ export interface ResolvedTopbarAction {
159
+ id: string
160
+ label: string
161
+ tooltip?: string
162
+ icon: TablerIconComponent // resolved from the OM token
163
+ order: number
164
+ }
165
+
166
+ export interface TopbarActionModule {
167
+ key: string // matches navigation.topbar[key].id
168
+ render: (ctx: { node: ResolvedTopbarAction }) => ReactNode
169
+ }
170
+ ```
171
+
172
+ The manifest map lives in `packages/ui/src/features/registry/manifests.ts`:
173
+
174
+ {/* doc-snippet:skip: shape excerpt from features/registry/manifests.ts -- TopbarActionModule and requestTopbarActionManifest are shown unimported here for readability */}
175
+
176
+ ```ts
177
+ export const TOPBAR_ACTION_MANIFESTS: Record<string, TopbarActionModule> = {
178
+ request: requestTopbarActionManifest
179
+ // docs, notifications, orgSwitcher, ... (migrated incrementally)
180
+ }
181
+ ```
182
+
183
+ ### Projection and Provider
184
+
185
+ `packages/ui/src/provider/topbarProjection.ts` mirrors `sidebarProjection.ts`:
186
+
187
+ - reads `navigation.topbar` from the resolved OM;
188
+ - drops items where `enabled === false`, `devOnly && !isDev`, or `requiresAdmin && !isPlatformAdmin`;
189
+ - resolves `icon` via `getSemanticIconComponent(node.icon)`;
190
+ - sorts by `order`, then id;
191
+ - joins each surviving OM node to its registered module by `node.id === module.key`; skips nodes with no module and modules with no OM node.
192
+
193
+ `ElevasisSystemsProvider` gains a `topbarActions?: TopbarActionModule[]` prop and exposes `getTopbarActions({ isPlatformAdmin, isDev })`. The provider **defaults `topbarActions` to `Object.values(TOPBAR_ACTION_MANIFESTS)`** when no explicit prop is passed -- so shell-based consumers (`ElevasisAuthenticatedShell`, tenants) get the OM-governed topbar with zero wiring. Pass an explicit array to override or extend.
194
+
195
+ This is an intentional asymmetry vs `systems`, which defaults to `[]` (tenant-assembled). Topbar behaviors are package-universal; sidebar systems are tenant-assembled.
196
+
197
+ ### Consumer Component -- `<TopbarActions />`
198
+
199
+ Shipped from `@elevasis/ui/layout`:
200
+
201
+ ```tsx
202
+ export function TopbarActions({ isPlatformAdmin, isDev }: { isPlatformAdmin?: boolean; isDev?: boolean }) {
203
+ const { getTopbarActions } = useElevasisSystems()
204
+ return (
205
+ <>
206
+ {getTopbarActions({ isPlatformAdmin, isDev }).map(({ node, render }) => (
207
+ <Fragment key={node.id}>{render({ node })}</Fragment>
208
+ ))}
209
+ </>
210
+ )
211
+ }
212
+ ```
213
+
214
+ `AppTopbar` drops `<TopbarActions />` in among its children. The theme switch and version `Code` remain hardcoded in `Topbar` -- they are not feature actions.
215
+
216
+ ### Governance
217
+
218
+ Because topbar items are OM nodes with the same gating flags as sidebar surfaces, toggling them requires no new mechanism:
219
+
220
+ - Toggle: set `enabled: false` to hide an item per tenant.
221
+ - Reorder: change `order`.
222
+ - Gate: `requiresAdmin` / `devOnly` restrict who sees it.
223
+ - Add: declare a new `navigation.topbar` entry and register a matching module.
224
+
225
+ ### Comparison Table
226
+
227
+ | Aspect | Sidebar | Topbar |
228
+ | ---------------- | ---------------------------------------- | ---------------------------------------- |
229
+ | OM region | `navigation.sidebar.primary` / `.bottom` | `navigation.topbar` |
230
+ | Node type | `SidebarSurfaceNode` (has `path`) | `TopbarActionNode` (no `path`) |
231
+ | Registry type | `SystemModule` | `TopbarActionModule` |
232
+ | Registry map | `SYSTEM_MANIFESTS` | `TOPBAR_ACTION_MANIFESTS` |
233
+ | Provider prop | `systems?: SystemModule[]` | `topbarActions?: TopbarActionModule[]` |
234
+ | Provider default | `[]` (tenant-assembled) | `Object.values(TOPBAR_ACTION_MANIFESTS)` |
235
+ | Context accessor | `getSidebarLinks(opts)` | `getTopbarActions(opts)` |
236
+ | Projection file | `sidebarProjection.ts` | `topbarProjection.ts` |
237
+ | UI consumer | `Sidebar` | `<TopbarActions />` |
238
+
239
+ ### File Locations
240
+
241
+ | Concern | Path |
242
+ | -------------------- | ----------------------------------------------------------------- |
243
+ | OM navigation schema | `packages/core/src/organization-model/domains/navigation.ts` |
244
+ | Registry types | `packages/ui/src/features/registry/types.ts` |
245
+ | Registry map | `packages/ui/src/features/registry/manifests.ts` |
246
+ | Provider | `packages/ui/src/provider/ElevasisSystemsProvider.tsx` |
247
+ | Projection | `packages/ui/src/provider/topbarProjection.ts` |
248
+ | Consumer component | `packages/ui/src/components/layout/topbar/` (`<TopbarActions />`) |
249
+ | CC root wiring | `apps/command-center/src/routes/__root.tsx` + `AppTopbar.tsx` |
250
+
251
+ ## External Shells
252
+
253
+ External templates pass `canonicalOrganizationModel` into `ElevasisSystemsProvider` and derive sidebar links locally from `shellModel`. There is no separate nav config file to keep in sync.
254
+
255
+ ### Operations Subshell and Manifest Mounting
256
+
257
+ The Operations area uses a dedicated manifest rather than a raw `SystemModule`. `packages/ui/src/features/operations/manifest.ts` exports `operationsManifest`, which supplies `OperationsSidebarRouter`. That router dispatches to route-specific sidebar components by URL prefix:
258
+
259
+ - `ResourcesSidebar` for `/operations/resources`
260
+ - `ExecutionLogsSidebar` for resource detail pages
261
+ - `CommandQueueSidebarConnected` for `/operations/command-queue`
262
+ - `SystemsSidebar` for `/operations/systems`
263
+ - `SessionsSidebar` for `/operations/sessions`
264
+
265
+ External project root routes must include `operationsManifest` in the manifest array passed to `ElevasisAuthenticatedShell`/`ElevasisSystemsProvider`. Omitting it means no Operations sidebar appears, even though the Operations routes and API/SSE props (`operationsApiUrl`, `operationsSSEManager`) are wired correctly. The canonical reference is `external/_template/ui/src/routes/__root.tsx`.
266
+
267
+ The direct fix is always to mount the published manifest rather than duplicate sidebar routing locally. Whether tenant navigation exposes `/operations/systems` or `/operations/sessions` is a product/OM decision separate from the missing-sidebar substrate bug.
268
+
269
+ `monitoringManifest` and `settingsManifest` follow the same pattern and should be mounted in the same pass when those surfaces are enabled for a project.
270
+
271
+ ## Ownership Boundaries
272
+
273
+ `ElevasisSystemsProvider` and `SystemShell` own system manifest registration, system-aware nav contribution, provider-scoped system context (`timeRange`, `operationsApiUrl`, `operationsSSEManager`), route-to-sidebar subshell dispatch, and shared shell/page/sidebar extraction for reusable systems.
274
+
275
+ They do **not** own TanStack file-based route registration, app-specific assistant context hooks, app-specific admin navigation, or project-specific branding and topbar behavior. Consumers keep thin route files and thin app-local wrappers that inject only genuinely app-specific behavior.
276
+
277
+ ## Shared-First Extraction
278
+
279
+ When migrating a system surface from app-local to shared:
280
+
281
+ 1. Move the reusable shell, sidebar, and page behavior into `packages/ui`.
282
+ 2. Leave only thin route glue in consumers.
283
+ 3. Keep assistant-context, tenant-guard, and app-specific branding glue local.
284
+ 4. Delete dead local wrappers after verification.
285
+
286
+ Do not leave a duplicate app-local shell after the shared version exists unless there is a documented app-specific divergence.
287
+
288
+ ## Router Standardization
289
+
290
+ Shared sidebars and shell components prefer `useRouterContext()` by default. Compatibility props such as `currentPath` or `onNavigate` are acceptable only to preserve published API compatibility. Where they remain, treat them as compatibility seams rather than the preferred usage path, default internally to router-context behavior, and do not remove them casually from published surfaces.