spine-framework 0.3.17 → 0.3.19

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 (270) hide show
  1. package/.framework/cli/bin.mjs +16 -0
  2. package/.framework/cli/commands/create-app.ts +1 -1
  3. package/.framework/cli/commands/dev.ts +215 -33
  4. package/.framework/cli/index.ts +37 -75
  5. package/.framework/functions/_shared/app-manifest.ts +8 -15
  6. package/.framework/functions/_shared/db.ts +11 -15
  7. package/.framework/functions/_shared/index.ts +7 -16
  8. package/.framework/functions/_shared/principal.ts +4 -62
  9. package/.framework/functions/_shared/resolve-ids.ts +6 -6
  10. package/.framework/functions/_shared/webhook-registry.ts +43 -1
  11. package/.framework/functions/admin-funnel.ts +104 -0
  12. package/.framework/functions/admin-install-funnel.ts +225 -0
  13. package/.framework/functions/admin-signals.ts +241 -0
  14. package/.framework/functions/integration-routes.ts +4 -8
  15. package/.framework/migrations/001_schema.sql +406 -0
  16. package/.framework/migrations/002_rls_and_functions.sql +710 -0
  17. package/.framework/migrations/003_system_data.sql +520 -0
  18. package/.framework/migrations/004_enhancements.sql +43 -0
  19. package/.framework/public/_redirects +3 -0
  20. package/.framework/public/spine-logo.jpg +0 -0
  21. package/.framework/public/spine-logo.svg +3 -0
  22. package/{scripts → .framework/scripts}/assemble-frontend.sh +8 -5
  23. package/{scripts → .framework/scripts}/assemble-functions.sh +4 -47
  24. package/{scripts → .framework/scripts}/assemble.sh +2 -8
  25. package/{scripts → .framework/scripts}/boundary-check.sh +5 -9
  26. package/{scripts → .framework/scripts}/check-core-integrity.sh +0 -0
  27. package/.framework/seeds/link_types/account_cli_instances.json +9 -0
  28. package/.framework/seeds/types/funnel_signal_use.json +98 -0
  29. package/.framework/seeds/types/spine_instance.json +109 -0
  30. package/.framework/src/App.tsx +11 -21
  31. package/.framework/src/components/CustomAppLoader.tsx +2 -19
  32. package/.framework/src/components/ui/accordion.tsx +1 -1
  33. package/.framework/src/components/ui/alert-dialog.tsx +1 -1
  34. package/.framework/src/components/ui/aspect-ratio.tsx +1 -1
  35. package/.framework/src/components/ui/avatar.tsx +1 -1
  36. package/.framework/src/components/ui/badge.tsx +2 -2
  37. package/.framework/src/components/ui/breadcrumb.tsx +2 -2
  38. package/.framework/src/components/ui/button-group.tsx +2 -2
  39. package/.framework/src/components/ui/button.tsx +2 -2
  40. package/.framework/src/components/ui/chart.tsx +6 -1
  41. package/.framework/src/components/ui/checkbox.tsx +1 -1
  42. package/.framework/src/components/ui/collapsible.tsx +1 -1
  43. package/.framework/src/components/ui/context-menu.tsx +1 -1
  44. package/.framework/src/components/ui/dialog.tsx +1 -1
  45. package/.framework/src/components/ui/direction.tsx +17 -1
  46. package/.framework/src/components/ui/dropdown-menu.tsx +1 -1
  47. package/.framework/src/components/ui/hover-card.tsx +1 -1
  48. package/.framework/src/components/ui/item.tsx +2 -2
  49. package/.framework/src/components/ui/label.tsx +1 -1
  50. package/.framework/src/components/ui/menubar.tsx +1 -1
  51. package/.framework/src/components/ui/navigation-menu.tsx +1 -1
  52. package/.framework/src/components/ui/popover.tsx +1 -1
  53. package/.framework/src/components/ui/progress.tsx +1 -1
  54. package/.framework/src/components/ui/radio-group.tsx +1 -1
  55. package/.framework/src/components/ui/scroll-area.tsx +1 -1
  56. package/.framework/src/components/ui/select.tsx +1 -1
  57. package/.framework/src/components/ui/separator.tsx +1 -1
  58. package/.framework/src/components/ui/sheet.tsx +1 -1
  59. package/.framework/src/components/ui/sidebar.tsx +6 -6
  60. package/.framework/src/components/ui/slider.tsx +1 -1
  61. package/.framework/src/components/ui/switch.tsx +1 -1
  62. package/.framework/src/components/ui/tabs.tsx +1 -1
  63. package/.framework/src/components/ui/toggle-group.tsx +1 -1
  64. package/.framework/src/components/ui/toggle.tsx +1 -1
  65. package/.framework/src/components/ui/tooltip.tsx +1 -1
  66. package/.framework/src/pages/auth/LoginPage.tsx +10 -9
  67. package/LICENSE.md +63 -93
  68. package/README.md +254 -129
  69. package/custom/.devin/skills/install-app/SKILL.md +39 -0
  70. package/custom/.devin/workflows/app-install.yaml +83 -0
  71. package/custom/README.md +79 -0
  72. package/docs/APPS.md +232 -0
  73. package/docs/ARCHITECTURE.md +246 -0
  74. package/docs/INSTALL.md +155 -0
  75. package/docs/README.md +170 -0
  76. package/docs/design-schema-spec.md +1837 -0
  77. package/docs/dev-guides/01-create-an-app.md +183 -0
  78. package/docs/dev-guides/02-create-a-function.md +178 -0
  79. package/docs/dev-guides/03-create-a-component.md +178 -0
  80. package/docs/dev-guides/04-webhook-handlers.md +129 -0
  81. package/docs/dev-guides/05-testing.md +168 -0
  82. package/docs/dev-guides/README.md +40 -0
  83. package/docs/npm-packages-plan.md +288 -0
  84. package/docs/spine-core--api-reference.md +822 -0
  85. package/package.json +79 -150
  86. package/.framework/cli/bin.cjs +0 -14
  87. package/.framework/cli/commands/claim.ts +0 -430
  88. package/.framework/cli/commands/init.ts +0 -219
  89. package/.framework/cli/commands/install-app.ts +0 -685
  90. package/.framework/cli/commands/migrate.ts +0 -178
  91. package/.framework/cli/commands/publish.ts +0 -191
  92. package/.framework/cli/commands/status.ts +0 -268
  93. package/.framework/cli/commands/uninstall-app.ts +0 -166
  94. package/.framework/cli/commands/update-app.ts +0 -397
  95. package/.framework/cli/welcome.cjs +0 -45
  96. package/.framework/config/signal-client.ts +0 -147
  97. package/.framework/config/signals.ts +0 -70
  98. package/.framework/docs/STABILITY.md +0 -52
  99. package/.framework/docs/examples/custom-app/README.md +0 -77
  100. package/.framework/docs/examples/custom-function/README.md +0 -27
  101. package/.framework/docs/examples/custom-function/handler.ts +0 -48
  102. package/.framework/docs/examples/custom-webhook/README.md +0 -68
  103. package/.framework/functions/handler-registry.ts +0 -22
  104. package/.framework/functions/signal.ts +0 -168
  105. package/.framework/migrations/000_foundation.sql +0 -1302
  106. package/.framework/migrations/001_seed.sql +0 -163
  107. package/.framework/migrations/002_seed_constraints.sql +0 -19
  108. package/.framework/migrations/003_auth_user_trigger.sql +0 -67
  109. package/.framework/migrations/004_app_version_tracking.sql +0 -8
  110. package/.framework/migrations/005_pipelines_slug_stages.sql +0 -21
  111. package/.framework/src/pages/auth/RegisterPage.tsx +0 -163
  112. package/CHANGELOG.md +0 -71
  113. package/STRUCTURE.md +0 -150
  114. package/bin/spine-framework.cjs +0 -62
  115. package/bin/welcome.cjs +0 -58
  116. package/bin/ws-shim.ts +0 -10
  117. package/config/components.json +0 -25
  118. package/config/deno.lock +0 -108
  119. package/config/package-lock.json +0 -17183
  120. package/config/postcss.config.cjs +0 -10
  121. package/config/tailwind.config.cjs +0 -78
  122. package/config/tsconfig.build.json +0 -32
  123. package/config/tsconfig.cli.json +0 -18
  124. package/config/tsconfig.json +0 -41
  125. package/config/tsconfig.node.json +0 -17
  126. package/config/tsconfig.node.tsbuildinfo +0 -1
  127. package/config/tsconfig.tsbuildinfo +0 -1
  128. package/config/typedoc.json +0 -16
  129. package/config/vite.config.d.ts +0 -2
  130. package/config/vite.config.ts +0 -71
  131. package/dist/cli/commands/agents.d.ts +0 -39
  132. package/dist/cli/commands/agents.d.ts.map +0 -1
  133. package/dist/cli/commands/auth.d.ts +0 -36
  134. package/dist/cli/commands/auth.d.ts.map +0 -1
  135. package/dist/cli/commands/claim.d.ts +0 -38
  136. package/dist/cli/commands/claim.d.ts.map +0 -1
  137. package/dist/cli/commands/create-app.d.ts +0 -23
  138. package/dist/cli/commands/create-app.d.ts.map +0 -1
  139. package/dist/cli/commands/dev.d.ts +0 -24
  140. package/dist/cli/commands/dev.d.ts.map +0 -1
  141. package/dist/cli/commands/doctor.d.ts +0 -42
  142. package/dist/cli/commands/doctor.d.ts.map +0 -1
  143. package/dist/cli/commands/generate.d.ts +0 -36
  144. package/dist/cli/commands/generate.d.ts.map +0 -1
  145. package/dist/cli/commands/init.d.ts +0 -20
  146. package/dist/cli/commands/init.d.ts.map +0 -1
  147. package/dist/cli/commands/install-app.d.ts +0 -30
  148. package/dist/cli/commands/install-app.d.ts.map +0 -1
  149. package/dist/cli/commands/items.d.ts +0 -45
  150. package/dist/cli/commands/items.d.ts.map +0 -1
  151. package/dist/cli/commands/migrate.d.ts +0 -21
  152. package/dist/cli/commands/migrate.d.ts.map +0 -1
  153. package/dist/cli/commands/migrations.d.ts +0 -41
  154. package/dist/cli/commands/migrations.d.ts.map +0 -1
  155. package/dist/cli/commands/pipelines.d.ts +0 -40
  156. package/dist/cli/commands/pipelines.d.ts.map +0 -1
  157. package/dist/cli/commands/publish.d.ts +0 -23
  158. package/dist/cli/commands/publish.d.ts.map +0 -1
  159. package/dist/cli/commands/status.d.ts +0 -23
  160. package/dist/cli/commands/status.d.ts.map +0 -1
  161. package/dist/cli/commands/system.d.ts +0 -29
  162. package/dist/cli/commands/system.d.ts.map +0 -1
  163. package/dist/cli/commands/test.d.ts +0 -46
  164. package/dist/cli/commands/test.d.ts.map +0 -1
  165. package/dist/cli/commands/uninstall-app.d.ts +0 -23
  166. package/dist/cli/commands/uninstall-app.d.ts.map +0 -1
  167. package/dist/cli/commands/update-app.d.ts +0 -24
  168. package/dist/cli/commands/update-app.d.ts.map +0 -1
  169. package/dist/cli/context.d.ts +0 -88
  170. package/dist/cli/context.d.ts.map +0 -1
  171. package/dist/cli/env-loader.d.ts +0 -14
  172. package/dist/cli/env-loader.d.ts.map +0 -1
  173. package/dist/cli/index.d.ts +0 -44
  174. package/dist/cli/index.d.ts.map +0 -1
  175. package/dist/config/signals.d.ts +0 -82
  176. package/dist/config/signals.d.ts.map +0 -1
  177. package/dist/functions/_shared/agent-runner.d.ts +0 -156
  178. package/dist/functions/_shared/agent-runner.d.ts.map +0 -1
  179. package/dist/functions/_shared/app-manifest.d.ts +0 -68
  180. package/dist/functions/_shared/app-manifest.d.ts.map +0 -1
  181. package/dist/functions/_shared/audit.d.ts +0 -91
  182. package/dist/functions/_shared/audit.d.ts.map +0 -1
  183. package/dist/functions/_shared/db.d.ts +0 -125
  184. package/dist/functions/_shared/db.d.ts.map +0 -1
  185. package/dist/functions/_shared/index.d.ts +0 -299
  186. package/dist/functions/_shared/index.d.ts.map +0 -1
  187. package/dist/functions/_shared/middleware.d.ts +0 -315
  188. package/dist/functions/_shared/middleware.d.ts.map +0 -1
  189. package/dist/functions/_shared/permissions.d.ts +0 -626
  190. package/dist/functions/_shared/permissions.d.ts.map +0 -1
  191. package/dist/functions/_shared/pipeline-runner.d.ts +0 -124
  192. package/dist/functions/_shared/pipeline-runner.d.ts.map +0 -1
  193. package/dist/functions/_shared/principal.d.ts +0 -284
  194. package/dist/functions/_shared/principal.d.ts.map +0 -1
  195. package/dist/functions/_shared/resolve-ids.d.ts +0 -10
  196. package/dist/functions/_shared/resolve-ids.d.ts.map +0 -1
  197. package/dist/functions/_shared/schema-utils.d.ts +0 -181
  198. package/dist/functions/_shared/schema-utils.d.ts.map +0 -1
  199. package/dist/functions/_shared/testing.d.ts +0 -172
  200. package/dist/functions/_shared/testing.d.ts.map +0 -1
  201. package/dist/functions/_shared/trigger-engine.d.ts +0 -140
  202. package/dist/functions/_shared/trigger-engine.d.ts.map +0 -1
  203. package/dist/functions/_shared/webhook-registration.d.ts +0 -81
  204. package/dist/functions/_shared/webhook-registration.d.ts.map +0 -1
  205. package/dist/functions/_shared/webhook-registry.d.ts +0 -41
  206. package/dist/functions/_shared/webhook-registry.d.ts.map +0 -1
  207. package/dist/functions/account-nodes.d.ts +0 -48
  208. package/dist/functions/account-nodes.d.ts.map +0 -1
  209. package/dist/functions/admin-data.d.ts +0 -178
  210. package/dist/functions/admin-data.d.ts.map +0 -1
  211. package/dist/functions/ai-agents.d.ts +0 -125
  212. package/dist/functions/ai-agents.d.ts.map +0 -1
  213. package/dist/functions/api-keys.d.ts +0 -140
  214. package/dist/functions/api-keys.d.ts.map +0 -1
  215. package/dist/functions/apps.d.ts +0 -163
  216. package/dist/functions/apps.d.ts.map +0 -1
  217. package/dist/functions/auth.d.ts +0 -74
  218. package/dist/functions/auth.d.ts.map +0 -1
  219. package/dist/functions/debug-auth.d.ts +0 -33
  220. package/dist/functions/debug-auth.d.ts.map +0 -1
  221. package/dist/functions/embeddings.d.ts +0 -205
  222. package/dist/functions/embeddings.d.ts.map +0 -1
  223. package/dist/functions/handler-registry.d.ts +0 -22
  224. package/dist/functions/handler-registry.d.ts.map +0 -1
  225. package/dist/functions/integration-routes.d.ts +0 -45
  226. package/dist/functions/integration-routes.d.ts.map +0 -1
  227. package/dist/functions/integrations.d.ts +0 -124
  228. package/dist/functions/integrations.d.ts.map +0 -1
  229. package/dist/functions/item-progress.d.ts +0 -41
  230. package/dist/functions/item-progress.d.ts.map +0 -1
  231. package/dist/functions/logs.d.ts +0 -162
  232. package/dist/functions/logs.d.ts.map +0 -1
  233. package/dist/functions/observability.d.ts +0 -123
  234. package/dist/functions/observability.d.ts.map +0 -1
  235. package/dist/functions/pipeline-executions.d.ts +0 -190
  236. package/dist/functions/pipeline-executions.d.ts.map +0 -1
  237. package/dist/functions/pipelines.d.ts +0 -171
  238. package/dist/functions/pipelines.d.ts.map +0 -1
  239. package/dist/functions/prompt-configs.d.ts +0 -125
  240. package/dist/functions/prompt-configs.d.ts.map +0 -1
  241. package/dist/functions/roles.d.ts +0 -118
  242. package/dist/functions/roles.d.ts.map +0 -1
  243. package/dist/functions/signal.d.ts +0 -73
  244. package/dist/functions/signal.d.ts.map +0 -1
  245. package/dist/functions/system-cron.d.ts +0 -65
  246. package/dist/functions/system-cron.d.ts.map +0 -1
  247. package/dist/functions/system.d.ts +0 -29
  248. package/dist/functions/system.d.ts.map +0 -1
  249. package/dist/functions/tests.d.ts +0 -28
  250. package/dist/functions/tests.d.ts.map +0 -1
  251. package/dist/functions/timers.d.ts +0 -139
  252. package/dist/functions/timers.d.ts.map +0 -1
  253. package/dist/functions/triggers.d.ts +0 -203
  254. package/dist/functions/triggers.d.ts.map +0 -1
  255. package/dist/functions/types.d.ts +0 -151
  256. package/dist/functions/types.d.ts.map +0 -1
  257. package/dist/src/types/types.d.ts +0 -364
  258. package/dist/src/types/types.d.ts.map +0 -1
  259. package/index.html +0 -13
  260. package/netlify.toml +0 -36
  261. package/package-project.json +0 -71
  262. package/scripts/ingest-chunks.cjs +0 -202
  263. package/scripts/kb-chunk-parser.cjs +0 -312
  264. package/scripts/kb-chunk-parser.ts +0 -330
  265. package/scripts/load-test-app-install.ts +0 -484
  266. package/scripts/netlify-dev-wrapper.sh +0 -22
  267. package/vitest.config.ts +0 -45
  268. /package/{scripts → .framework/scripts}/app-install-cli.ts +0 -0
  269. /package/{scripts → .framework/scripts}/build-manifest.sh +0 -0
  270. /package/{scripts → .framework/scripts}/verify-integrity.sh +0 -0
@@ -1,6 +1,22 @@
1
1
  "use client"
2
2
 
3
3
  import * as React from "react"
4
- import { DirectionProvider, useDirection } from "@radix-ui/react-direction"
4
+ import { Direction } from "radix-ui"
5
+
6
+ function DirectionProvider({
7
+ dir,
8
+ direction,
9
+ children,
10
+ }: React.ComponentProps<typeof Direction.DirectionProvider> & {
11
+ direction?: React.ComponentProps<typeof Direction.DirectionProvider>["dir"]
12
+ }) {
13
+ return (
14
+ <Direction.DirectionProvider dir={direction ?? dir}>
15
+ {children}
16
+ </Direction.DirectionProvider>
17
+ )
18
+ }
19
+
20
+ const useDirection = Direction.useDirection
5
21
 
6
22
  export { DirectionProvider, useDirection }
@@ -1,7 +1,7 @@
1
1
  "use client"
2
2
 
3
3
  import * as React from "react"
4
- import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"
4
+ import { DropdownMenu as DropdownMenuPrimitive } from "radix-ui"
5
5
 
6
6
  import { cn } from "@/lib/utils"
7
7
  import { CheckIcon, ChevronRightIcon } from "lucide-react"
@@ -1,5 +1,5 @@
1
1
  import * as React from "react"
2
- import * as HoverCardPrimitive from "@radix-ui/react-hover-card"
2
+ import { HoverCard as HoverCardPrimitive } from "radix-ui"
3
3
 
4
4
  import { cn } from "@/lib/utils"
5
5
 
@@ -1,6 +1,6 @@
1
1
  import * as React from "react"
2
2
  import { cva, type VariantProps } from "class-variance-authority"
3
- import { Slot } from "@radix-ui/react-slot"
3
+ import { Slot } from "radix-ui"
4
4
 
5
5
  import { cn } from "@/lib/utils"
6
6
  import { Separator } from "@/components/ui/separator"
@@ -63,7 +63,7 @@ function Item({
63
63
  ...props
64
64
  }: React.ComponentProps<"div"> &
65
65
  VariantProps<typeof itemVariants> & { asChild?: boolean }) {
66
- const Comp = asChild ? Slot : "div"
66
+ const Comp = asChild ? Slot.Root : "div"
67
67
  return (
68
68
  <Comp
69
69
  data-slot="item"
@@ -1,5 +1,5 @@
1
1
  import * as React from "react"
2
- import * as LabelPrimitive from "@radix-ui/react-label"
2
+ import { Label as LabelPrimitive } from "radix-ui"
3
3
 
4
4
  import { cn } from "@/lib/utils"
5
5
 
@@ -1,7 +1,7 @@
1
1
  "use client"
2
2
 
3
3
  import * as React from "react"
4
- import * as MenubarPrimitive from "@radix-ui/react-menubar"
4
+ import { Menubar as MenubarPrimitive } from "radix-ui"
5
5
 
6
6
  import { cn } from "@/lib/utils"
7
7
  import { CheckIcon, ChevronRightIcon } from "lucide-react"
@@ -1,6 +1,6 @@
1
1
  import * as React from "react"
2
2
  import { cva } from "class-variance-authority"
3
- import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu"
3
+ import { NavigationMenu as NavigationMenuPrimitive } from "radix-ui"
4
4
 
5
5
  import { cn } from "@/lib/utils"
6
6
  import { ChevronDownIcon } from "lucide-react"
@@ -1,5 +1,5 @@
1
1
  import * as React from "react"
2
- import * as PopoverPrimitive from "@radix-ui/react-popover"
2
+ import { Popover as PopoverPrimitive } from "radix-ui"
3
3
 
4
4
  import { cn } from "@/lib/utils"
5
5
 
@@ -1,7 +1,7 @@
1
1
  "use client"
2
2
 
3
3
  import * as React from "react"
4
- import * as ProgressPrimitive from "@radix-ui/react-progress"
4
+ import { Progress as ProgressPrimitive } from "radix-ui"
5
5
 
6
6
  import { cn } from "@/lib/utils"
7
7
 
@@ -1,5 +1,5 @@
1
1
  import * as React from "react"
2
- import * as RadioGroupPrimitive from "@radix-ui/react-radio-group"
2
+ import { RadioGroup as RadioGroupPrimitive } from "radix-ui"
3
3
 
4
4
  import { cn } from "@/lib/utils"
5
5
 
@@ -1,5 +1,5 @@
1
1
  import * as React from "react"
2
- import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area"
2
+ import { ScrollArea as ScrollAreaPrimitive } from "radix-ui"
3
3
 
4
4
  import { cn } from "@/lib/utils"
5
5
 
@@ -1,7 +1,7 @@
1
1
  "use client"
2
2
 
3
3
  import * as React from "react"
4
- import * as SelectPrimitive from "@radix-ui/react-select"
4
+ import { Select as SelectPrimitive } from "radix-ui"
5
5
 
6
6
  import { cn } from "@/lib/utils"
7
7
  import { ChevronDownIcon, CheckIcon, ChevronUpIcon } from "lucide-react"
@@ -1,5 +1,5 @@
1
1
  import * as React from "react"
2
- import * as SeparatorPrimitive from "@radix-ui/react-separator"
2
+ import { Separator as SeparatorPrimitive } from "radix-ui"
3
3
 
4
4
  import { cn } from "@/lib/utils"
5
5
 
@@ -1,5 +1,5 @@
1
1
  import * as React from "react"
2
- import * as SheetPrimitive from "@radix-ui/react-dialog"
2
+ import { Dialog as SheetPrimitive } from "radix-ui"
3
3
 
4
4
  import { cn } from "@/lib/utils"
5
5
  import { Button } from "@/components/ui/button"
@@ -1,6 +1,6 @@
1
1
  import * as React from "react"
2
2
  import { cva, type VariantProps } from "class-variance-authority"
3
- import { Slot } from "@radix-ui/react-slot"
3
+ import { Slot } from "radix-ui"
4
4
 
5
5
  import { useIsMobile } from "@/hooks/use-mobile"
6
6
  import { cn } from "@/lib/utils"
@@ -398,7 +398,7 @@ function SidebarGroupLabel({
398
398
  asChild = false,
399
399
  ...props
400
400
  }: React.ComponentProps<"div"> & { asChild?: boolean }) {
401
- const Comp = asChild ? Slot : "div"
401
+ const Comp = asChild ? Slot.Root : "div"
402
402
 
403
403
  return (
404
404
  <Comp
@@ -418,7 +418,7 @@ function SidebarGroupAction({
418
418
  asChild = false,
419
419
  ...props
420
420
  }: React.ComponentProps<"button"> & { asChild?: boolean }) {
421
- const Comp = asChild ? Slot : "button"
421
+ const Comp = asChild ? Slot.Root : "button"
422
422
 
423
423
  return (
424
424
  <Comp
@@ -504,7 +504,7 @@ function SidebarMenuButton({
504
504
  isActive?: boolean
505
505
  tooltip?: string | React.ComponentProps<typeof TooltipContent>
506
506
  } & VariantProps<typeof sidebarMenuButtonVariants>) {
507
- const Comp = asChild ? Slot : "button"
507
+ const Comp = asChild ? Slot.Root : "button"
508
508
  const { isMobile, state } = useSidebar()
509
509
 
510
510
  const button = (
@@ -550,7 +550,7 @@ function SidebarMenuAction({
550
550
  asChild?: boolean
551
551
  showOnHover?: boolean
552
552
  }) {
553
- const Comp = asChild ? Slot : "button"
553
+ const Comp = asChild ? Slot.Root : "button"
554
554
 
555
555
  return (
556
556
  <Comp
@@ -661,7 +661,7 @@ function SidebarMenuSubButton({
661
661
  size?: "sm" | "md"
662
662
  isActive?: boolean
663
663
  }) {
664
- const Comp = asChild ? Slot : "a"
664
+ const Comp = asChild ? Slot.Root : "a"
665
665
 
666
666
  return (
667
667
  <Comp
@@ -1,7 +1,7 @@
1
1
  "use client"
2
2
 
3
3
  import * as React from "react"
4
- import * as SliderPrimitive from "@radix-ui/react-slider"
4
+ import { Slider as SliderPrimitive } from "radix-ui"
5
5
 
6
6
  import { cn } from "@/lib/utils"
7
7
 
@@ -1,7 +1,7 @@
1
1
  "use client"
2
2
 
3
3
  import * as React from "react"
4
- import * as SwitchPrimitive from "@radix-ui/react-switch"
4
+ import { Switch as SwitchPrimitive } from "radix-ui"
5
5
 
6
6
  import { cn } from "@/lib/utils"
7
7
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  import * as React from "react"
4
4
  import { cva, type VariantProps } from "class-variance-authority"
5
- import * as TabsPrimitive from "@radix-ui/react-tabs"
5
+ import { Tabs as TabsPrimitive } from "radix-ui"
6
6
 
7
7
  import { cn } from "@/lib/utils"
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  import * as React from "react"
4
4
  import { type VariantProps } from "class-variance-authority"
5
- import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group"
5
+ import { ToggleGroup as ToggleGroupPrimitive } from "radix-ui"
6
6
 
7
7
  import { cn } from "@/lib/utils"
8
8
  import { toggleVariants } from "@/components/ui/toggle"
@@ -1,6 +1,6 @@
1
1
  import * as React from "react"
2
2
  import { cva, type VariantProps } from "class-variance-authority"
3
- import * as TogglePrimitive from "@radix-ui/react-toggle"
3
+ import { Toggle as TogglePrimitive } from "radix-ui"
4
4
 
5
5
  import { cn } from "@/lib/utils"
6
6
 
@@ -1,7 +1,7 @@
1
1
  "use client"
2
2
 
3
3
  import * as React from "react"
4
- import * as TooltipPrimitive from "@radix-ui/react-tooltip"
4
+ import { Tooltip as TooltipPrimitive } from "radix-ui"
5
5
 
6
6
  import { cn } from "@/lib/utils"
7
7
 
@@ -38,17 +38,18 @@ export function LoginPage() {
38
38
  return
39
39
  }
40
40
 
41
- // Find app matching user's role, or fall back to first routable app
42
- const userRole = user.roles?.[0]
43
- const routableApps = apps.filter(a => a.route_prefix && a.renderer !== 'none')
44
- const matchingApp = (userRole && routableApps.find(app => app.min_role === userRole))
45
- || routableApps[0]
46
- if (matchingApp?.route_prefix) {
47
- navigate(matchingApp.route_prefix, { replace: true })
48
- return
41
+ // Find app matching user's role
42
+ const userRole = user.roles?.[0] // Single role per person
43
+ if (userRole) {
44
+ const matchingApp = apps.find(app => app.min_role === userRole)
45
+ if (matchingApp?.route_prefix) {
46
+ navigate(matchingApp.route_prefix, { replace: true })
47
+ return
48
+ }
49
49
  }
50
50
 
51
- // No routable apps installed — stay on login
51
+ // No matching app - show 404
52
+ // The 404 will be handled by the catch-all route in App.tsx
52
53
  }
53
54
  }, [user, loading, apps, navigate])
54
55
 
package/LICENSE.md CHANGED
@@ -1,37 +1,32 @@
1
- # Spine Framework Internal Use License 1.0.0
2
-
1
+ Spine Framework Internal Use License 1.0.0
3
2
  Source-available. Free for internal use. Commercial rights reserved.
4
3
 
5
4
  This license is based on the structure and intent of the PolyForm Internal Use License 1.0.0, but it has been modified for Spine Framework. This is not the unmodified PolyForm Internal Use License.
6
5
 
7
- ## Required Notice
8
-
6
+ Required Notice
9
7
  Required Notice: Copyright © 2026 Dahl Ventures Inc. All rights reserved.
10
8
 
11
- ## 1. Acceptance
12
-
9
+ 1. Acceptance
13
10
  In order to receive any license under these terms, you must agree to these terms as both strict obligations and conditions to all licenses granted to you.
14
11
 
15
12
  If you do not agree to these terms, you do not have permission to use, copy, modify, run, install, access, or create works based on Spine Framework.
16
13
 
17
- ## 2. Definitions
18
-
19
- **Software** means Spine Framework, including its source code, object code, packages, modules, templates, schemas, migrations, configuration files, documentation, examples, command-line tools, SDKs, application packs, and related materials provided by the licensor.
14
+ 2. Definitions
15
+ Software means Spine Framework, including its source code, object code, packages, modules, templates, schemas, migrations, configuration files, documentation, examples, command-line tools, SDKs, application packs, and related materials provided by the licensor.
20
16
 
21
- **Licensor** means the legal owner of Spine Framework.
17
+ Licensor means the legal owner of Spine Framework.
22
18
 
23
- **You** means the individual or legal entity receiving the Software.
19
+ You means the individual or legal entity receiving the Software.
24
20
 
25
- **Your Company** means the legal entity on whose behalf you use the Software, including that entity's employees and authorized contractors.
21
+ Your Company means the legal entity on whose behalf you use the Software, including that entity's employees and authorized contractors.
26
22
 
27
- **Internal Business Use** means use of the Software solely inside Your Company for Your Company's own internal business operations, internal workflows, internal applications, internal data, internal users, and internal customers or accounts.
23
+ Internal Business Use means use of the Software solely inside Your Company for Your Company's own internal business operations, internal workflows, internal applications, internal data, internal users, and internal customers or accounts.
28
24
 
29
- **Third Party** means any person or legal entity other than You or Your Company.
25
+ Third Party means any person or legal entity other than You or Your Company.
30
26
 
31
- **Commercial License** means a separate written agreement signed by the Licensor that grants rights beyond this license.
32
-
33
- ## 3. Copyright License
27
+ Commercial License means a separate written agreement signed by the Licensor that grants rights beyond this license.
34
28
 
29
+ 3. Copyright License
35
30
  The Licensor grants You a copyright license to do everything with the Software that would otherwise infringe the Licensor's copyright, but only for Internal Business Use and only as permitted by these terms.
36
31
 
37
32
  You may install, run, access, evaluate, test, configure, and use the Software for Internal Business Use.
@@ -40,99 +35,84 @@ You may copy the Software only as reasonably necessary for Internal Business Use
40
35
 
41
36
  You may not distribute the Software except as expressly allowed in these terms.
42
37
 
43
- ## 4. Changes and New Works
44
-
38
+ 4. Changes and New Works
45
39
  The Licensor grants You a copyright license to modify the Software and create new works based on the Software, but only for Internal Business Use.
46
40
 
47
41
  You may create internal applications, extensions, workflows, integrations, automations, schemas, roles, agents, triggers, pipelines, dashboards, reports, and other internal business systems using the Software.
48
42
 
49
43
  You may not distribute, sell, sublicense, transfer, lease, rent, host for others, white-label, resell, or commercially exploit any modified version, derivative work, extension, application pack, template, or implementation of the Software except under a Commercial License.
50
44
 
51
- ## 5. Internal Contractors
52
-
45
+ 5. Internal Contractors
53
46
  Your Company may allow employees and contractors to access and use the Software solely on behalf of Your Company and solely for Your Company's Internal Business Use.
54
47
 
55
48
  Contractors do not receive any independent right to use the Software for themselves, their other clients, their own products, or any Third Party.
56
49
 
57
50
  Your Company is responsible for all use of the Software by its employees, contractors, agents, and representatives.
58
51
 
59
- ## 6. Your Data and Application-Specific Work
60
-
52
+ 6. Your Data and Application-Specific Work
61
53
  As between You and the Licensor, You own Your Company's data, records, content, prompts, business logic, customer records, internal workflows, and application-specific code that You independently create using the Software.
62
54
 
63
55
  These terms do not give the Licensor ownership of Your Company's data or independently created application-specific business content.
64
56
 
65
57
  However, ownership of Your Company's data or application-specific work does not give You the right to distribute, resell, white-label, host, or commercially exploit the Software or any portion of the Software except as allowed by these terms or a Commercial License.
66
58
 
67
- ## 7. Prohibited Uses
68
-
59
+ 7. Prohibited Uses
69
60
  You may not do any of the following without a Commercial License:
70
61
 
71
- - Sell, resell, sublicense, rent, lease, lend, transfer, assign, publish, or distribute the Software.
72
- - Offer the Software, or any modified version of the Software, to Third Parties as software, infrastructure, a framework, a platform, a service, or a hosted product.
73
- - Offer the Software as SaaS, PaaS, IaaS, framework-as-a-service, backend-as-a-service, workflow-as-a-service, automation-as-a-service, AI-agent platform, managed service, support service, or similar commercial service.
74
- - White-label, private-label, rebrand, or remove Spine Framework identity from the Software in order to provide it to Third Parties.
75
- - Embed, bundle, package, or include the Software in any product, service, appliance, marketplace offering, application pack, starter kit, template library, SDK, CLI, distribution, or managed implementation made available to Third Parties.
76
- - Use the Software to operate, power, support, or provide a product or service for Third Parties where those Third Parties receive access to the Software or to functionality substantially provided by the Software.
77
- - Use the Software to build, operate, or improve a competing framework, platform, marketplace, application generator, agentic software infrastructure product, or commercial development infrastructure product.
78
- - Provide implementation, consulting, hosting, support, customization, training, migration, or managed services for the Software to Third Parties as a paid or commercial offering, except as expressly authorized by the Licensor.
79
- - Remove, alter, obscure, or bypass copyright notices, license notices, attribution, trademarks, branding, license keys, license checks, usage limits, or technical protection measures included in the Software.
80
- - Use the Software in violation of law, regulation, third-party rights, or these terms.
81
-
82
- ## 8. Examples of Permitted Use
83
-
62
+ Sell, resell, sublicense, rent, lease, lend, transfer, assign, publish, or distribute the Software.
63
+ Offer the Software, or any modified version of the Software, to Third Parties as software, infrastructure, a framework, a platform, a service, or a hosted product.
64
+ Offer the Software as SaaS, PaaS, IaaS, framework-as-a-service, backend-as-a-service, workflow-as-a-service, automation-as-a-service, AI-agent platform, managed service, support service, or similar commercial service.
65
+ White-label, private-label, rebrand, or remove Spine Framework identity from the Software in order to provide it to Third Parties.
66
+ Embed, bundle, package, or include the Software in any product, service, appliance, marketplace offering, application pack, starter kit, template library, SDK, CLI, distribution, or managed implementation made available to Third Parties.
67
+ Use the Software to operate, power, support, or provide a product or service for Third Parties where those Third Parties receive access to the Software or to functionality substantially provided by the Software.
68
+ Use the Software to build, operate, or improve a competing framework, platform, marketplace, application generator, agentic software infrastructure product, or commercial development infrastructure product.
69
+ Provide implementation, consulting, hosting, support, customization, training, migration, or managed services for the Software to Third Parties as a paid or commercial offering, except as expressly authorized by the Licensor.
70
+ Remove, alter, obscure, or bypass copyright notices, license notices, attribution, trademarks, branding, license keys, license checks, usage limits, or technical protection measures included in the Software.
71
+ Use the Software in violation of law, regulation, third-party rights, or these terms.
72
+ 8. Examples of Permitted Use
84
73
  The following are permitted under this license, provided they are solely for Internal Business Use:
85
74
 
86
- - A company installs Spine Framework to build its own internal CRM.
87
- - A company uses Spine Framework to operate an internal customer support portal for its own support team and its own customers.
88
- - A company modifies Spine Framework for its internal workflows, roles, permissions, automations, pipelines, and integrations.
89
- - A company lets its employees and authorized contractors configure, maintain, and support its internal Spine Framework installation.
90
- - A company creates internal dashboards, agents, knowledge bases, audit trails, and operational tools on top of Spine Framework.
91
-
92
- ## 9. Examples Requiring a Commercial License
93
-
75
+ A company installs Spine Framework to build its own internal CRM.
76
+ A company uses Spine Framework to operate an internal customer support portal for its own support team and its own customers.
77
+ A company modifies Spine Framework for its internal workflows, roles, permissions, automations, pipelines, and integrations.
78
+ A company lets its employees and authorized contractors configure, maintain, and support its internal Spine Framework installation.
79
+ A company creates internal dashboards, agents, knowledge bases, audit trails, and operational tools on top of Spine Framework.
80
+ 9. Examples Requiring a Commercial License
94
81
  The following are not permitted under this license and require a Commercial License:
95
82
 
96
- - Selling Spine Framework or a modified version of Spine Framework.
97
- - Offering Spine Framework as a hosted SaaS product.
98
- - Offering a white-labeled application built on Spine Framework to customers.
99
- - Packaging Spine Framework into a commercial starter kit, template, marketplace app, agency offering, or developer platform.
100
- - Running Spine Framework for multiple clients as a managed service provider, agency, consultant, systems integrator, or outsourcing firm.
101
- - Embedding Spine Framework into a product sold to customers.
102
- - Forking Spine Framework to launch a competing framework, backend, app platform, AI-agent platform, or development infrastructure product.
103
- - Publishing modified Spine Framework source code to a public repository.
104
- - Giving a customer, client, partner, reseller, or affiliate a copy of Spine Framework.
105
-
106
- ## 10. Distribution
107
-
83
+ Selling Spine Framework or a modified version of Spine Framework.
84
+ Offering Spine Framework as a hosted SaaS product.
85
+ Offering a white-labeled application built on Spine Framework to customers.
86
+ Packaging Spine Framework into a commercial starter kit, template, marketplace app, agency offering, or developer platform.
87
+ Running Spine Framework for multiple clients as a managed service provider, agency, consultant, systems integrator, or outsourcing firm.
88
+ Embedding Spine Framework into a product sold to customers.
89
+ Forking Spine Framework to launch a competing framework, backend, app platform, AI-agent platform, or development infrastructure product.
90
+ Publishing modified Spine Framework source code to a public repository.
91
+ Giving a customer, client, partner, reseller, or affiliate a copy of Spine Framework.
92
+ 10. Distribution
108
93
  You may not distribute the Software, modified versions of the Software, or works based on the Software to any Third Party except as expressly permitted by these terms or a Commercial License.
109
94
 
110
95
  You may share copies of the Software with employees and contractors of Your Company only as necessary for Internal Business Use and only if they are bound by obligations consistent with these terms.
111
96
 
112
97
  Any copy of the Software must include this license and all Required Notices.
113
98
 
114
- ## 11. Trademarks
115
-
99
+ 11. Trademarks
116
100
  This license does not grant You any right to use the Licensor's names, trademarks, service marks, logos, product names, domain names, or branding except as necessary to identify the Software for Internal Business Use.
117
101
 
118
102
  You may not use Spine Framework branding in a way that suggests sponsorship, endorsement, partnership, certification, resale authorization, or commercial authorization without written permission from the Licensor.
119
103
 
120
- ## 12. Patent License
121
-
104
+ 12. Patent License
122
105
  The Licensor grants You a patent license for the Software that covers patent claims the Licensor can license, or later becomes able to license, that You would infringe by using the Software as permitted by these terms.
123
106
 
124
- ## 13. Patent Defense
125
-
107
+ 13. Patent Defense
126
108
  If You make any written claim that the Software infringes or contributes to infringement of any patent, Your patent license for the Software ends immediately.
127
109
 
128
110
  If Your Company makes such a claim, Your Company's patent license ends immediately.
129
111
 
130
- ## 14. Fair Use and Other Legal Rights
131
-
112
+ 14. Fair Use and Other Legal Rights
132
113
  You may have fair use, fair dealing, or other rights under applicable law. These terms do not limit rights that the law does not allow these terms to limit.
133
114
 
134
- ## 15. No Other Rights
135
-
115
+ 15. No Other Rights
136
116
  These terms do not allow You to sublicense, transfer, assign, or delegate any license granted under these terms except as expressly allowed here.
137
117
 
138
118
  These terms do not prevent the Licensor from granting licenses to anyone else.
@@ -141,51 +121,43 @@ These terms do not imply any license other than the licenses expressly granted h
141
121
 
142
122
  All rights not expressly granted are reserved by the Licensor.
143
123
 
144
- ## 16. Violations and Cure
145
-
124
+ 16. Violations and Cure
146
125
  The first time You are notified in writing that You have violated these terms, or done anything with the Software not covered by these terms, Your licenses can continue if You:
147
126
 
148
- - come into full compliance with these terms;
149
- - take practical steps to correct past violations; and
150
- - complete both within 32 days of receiving written notice.
151
-
127
+ come into full compliance with these terms;
128
+ take practical steps to correct past violations; and
129
+ complete both within 32 days of receiving written notice.
152
130
  If You do not satisfy those requirements, all licenses granted to You under these terms end immediately.
153
131
 
154
132
  For any later violation, all licenses granted to You under these terms end immediately without any cure period.
155
133
 
156
- ## 17. Termination
157
-
158
- When Your licenses end, You must stop all use of the Software and destroy all copies of the Software in Your possession or control, except copies You are legally required to retain for archival, compliance, or legal purposes.
134
+ 17. Termination
135
+ When Your licenses end, You must stop all use of the Software and destroy all copies of the Software in Your possession or control, except copies you are legally required to retain for archival, compliance, or legal purposes.
159
136
 
160
137
  Sections concerning ownership, prohibited uses, trademarks, patent defense, no other rights, violations, termination, no warranty, limitation of liability, and general terms survive termination.
161
138
 
162
- ## 18. No Warranty
163
-
139
+ 18. No Warranty
164
140
  As far as the law allows, the Software is provided as is and as available, without any warranty or condition, express or implied.
165
141
 
166
142
  The Licensor disclaims all warranties and conditions, including warranties of merchantability, fitness for a particular purpose, title, non-infringement, availability, accuracy, security, and quiet enjoyment.
167
143
 
168
- ## 19. Limitation of Liability
169
-
144
+ 19. Limitation of Liability
170
145
  As far as the law allows, the Licensor will not be liable to You for any indirect, incidental, special, consequential, exemplary, punitive, or other damages arising out of these terms or the Software.
171
146
 
172
147
  As far as the law allows, the Licensor will not be liable for lost profits, lost revenue, lost savings, lost data, business interruption, security incidents, procurement of substitute services, or loss of goodwill.
173
148
 
174
149
  The Licensor's total liability arising out of these terms or the Software will not exceed the amount You paid the Licensor for the Software during the 12 months before the event giving rise to liability, or USD $100 if You paid nothing.
175
150
 
176
- ## 20. Commercial Licensing
177
-
151
+ 20. Commercial Licensing
178
152
  Rights not granted under this license may be available under a separate Commercial License from the Licensor.
179
153
 
180
154
  A Commercial License is required for resale, redistribution, SaaS, managed services, white-label use, OEM use, marketplace distribution, partner use, commercial hosting, commercial support offerings, or any use outside Internal Business Use.
181
155
 
182
156
  To request commercial rights, contact:
183
157
 
184
- - spine-framework.com
185
- - webmaster@spine-framework.com
186
-
187
- ## 21. License Updates
188
-
158
+ spine-framework.com
159
+ webmaster@spine-framework.com
160
+ 21. License Updates
189
161
  The Licensor may publish updated versions of this license from time to time.
190
162
 
191
163
  Each release, package, download, or copy of the Software is governed by the license terms included with that release, package, download, or copy, unless You and the Licensor have signed a separate written agreement.
@@ -196,8 +168,7 @@ The Licensor may require acceptance of updated license terms as a condition of r
196
168
 
197
169
  Nothing in this section gives You rights to continue using future versions of the Software under earlier license terms.
198
170
 
199
- ## 22. General Terms
200
-
171
+ 22. General Terms
201
172
  If any part of these terms is held unenforceable, the rest remains in effect as far as the law allows.
202
173
 
203
174
  Failure by the Licensor to enforce any term is not a waiver.
@@ -206,9 +177,8 @@ Any waiver must be in writing and signed by the Licensor.
206
177
 
207
178
  These terms are the entire license terms for the Software unless You and the Licensor have signed a separate written agreement.
208
179
 
209
- ## 23. Plain-English Summary
210
-
211
- *This summary is not part of the legal license.*
180
+ 23. Plain-English Summary
181
+ This summary is not part of the legal license.
212
182
 
213
183
  You may use Spine Framework inside your own company for your own internal business operations.
214
184