spine-framework 0.1.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 (385) hide show
  1. package/.framework/README.md +129 -0
  2. package/.framework/cli/bin.cjs +14 -0
  3. package/.framework/cli/commands/agents.ts +153 -0
  4. package/.framework/cli/commands/auth.ts +94 -0
  5. package/.framework/cli/commands/create-app.ts +185 -0
  6. package/.framework/cli/commands/dev.ts +295 -0
  7. package/.framework/cli/commands/doctor.ts +442 -0
  8. package/.framework/cli/commands/generate.ts +332 -0
  9. package/.framework/cli/commands/init.ts +272 -0
  10. package/.framework/cli/commands/install-app.ts +391 -0
  11. package/.framework/cli/commands/items.ts +253 -0
  12. package/.framework/cli/commands/migrations.ts +141 -0
  13. package/.framework/cli/commands/pipelines.ts +166 -0
  14. package/.framework/cli/commands/status.ts +197 -0
  15. package/.framework/cli/commands/system.ts +184 -0
  16. package/.framework/cli/commands/test.ts +227 -0
  17. package/.framework/cli/commands/uninstall-app.ts +166 -0
  18. package/.framework/cli/context.ts +268 -0
  19. package/.framework/cli/env-loader.ts +36 -0
  20. package/.framework/cli/index.ts +106 -0
  21. package/.framework/cli/welcome.cjs +45 -0
  22. package/.framework/docs/API.md +384 -0
  23. package/.framework/docs/STABILITY.md +52 -0
  24. package/.framework/docs/admin-routes.md +76 -0
  25. package/.framework/docs/api-docs-progress.md +38 -0
  26. package/.framework/docs/api-governance.md +146 -0
  27. package/.framework/docs/api-testing-results.md +212 -0
  28. package/.framework/docs/apis/admin-configs.md +567 -0
  29. package/.framework/docs/apis/admin-data.md +272 -0
  30. package/.framework/docs/apis/index.md +231 -0
  31. package/.framework/docs/apis/internal.md +295 -0
  32. package/.framework/docs/apis/runtime.md +537 -0
  33. package/.framework/docs/assembly-launch-guide.md +138 -0
  34. package/.framework/docs/audit-results.md +590 -0
  35. package/.framework/docs/authorization-model.md +170 -0
  36. package/.framework/docs/db-api-inventory.md +95 -0
  37. package/.framework/docs/examples/custom-app/README.md +77 -0
  38. package/.framework/docs/examples/custom-function/README.md +27 -0
  39. package/.framework/docs/examples/custom-function/handler.ts +48 -0
  40. package/.framework/docs/examples/custom-webhook/README.md +68 -0
  41. package/.framework/docs/gap-remediation-backlog.md +103 -0
  42. package/.framework/docs/guides/cli-guide.md +224 -0
  43. package/.framework/docs/guides/getting-started.md +103 -0
  44. package/.framework/docs/guides/import-guide.md +193 -0
  45. package/.framework/docs/guides/testing-guide.md +229 -0
  46. package/.framework/docs/permission-examples.md +326 -0
  47. package/.framework/docs/ui-adoption-verification.md +111 -0
  48. package/.framework/docs/ui-api-coverage.md +84 -0
  49. package/.framework/docs/v2-compatibility-audit.md +228 -0
  50. package/.framework/functions/.gitkeep +1 -0
  51. package/.framework/functions/_shared/agent-runner.ts +1097 -0
  52. package/.framework/functions/_shared/app-manifest.ts +184 -0
  53. package/.framework/functions/_shared/audit.ts +150 -0
  54. package/.framework/functions/_shared/db.ts +174 -0
  55. package/.framework/functions/_shared/index.ts +382 -0
  56. package/.framework/functions/_shared/middleware.ts +490 -0
  57. package/.framework/functions/_shared/permissions.ts +1325 -0
  58. package/.framework/functions/_shared/pipeline-runner.ts +731 -0
  59. package/.framework/functions/_shared/principal.ts +760 -0
  60. package/.framework/functions/_shared/schema-utils.ts +967 -0
  61. package/.framework/functions/_shared/testing.ts +258 -0
  62. package/.framework/functions/_shared/trigger-engine.ts +425 -0
  63. package/.framework/functions/_shared/webhook-registration.ts +168 -0
  64. package/.framework/functions/_shared/webhook-registry.ts +129 -0
  65. package/.framework/functions/account-nodes.ts +111 -0
  66. package/.framework/functions/admin-data.ts +606 -0
  67. package/.framework/functions/ai-agents.ts +323 -0
  68. package/.framework/functions/api-keys.ts +376 -0
  69. package/.framework/functions/apps.ts +483 -0
  70. package/.framework/functions/auth.ts +196 -0
  71. package/.framework/functions/debug-auth.ts +107 -0
  72. package/.framework/functions/embeddings.ts +556 -0
  73. package/.framework/functions/integration-routes.ts +523 -0
  74. package/.framework/functions/integrations.ts +319 -0
  75. package/.framework/functions/item-progress.ts +272 -0
  76. package/.framework/functions/logs.ts +438 -0
  77. package/.framework/functions/observability.ts +275 -0
  78. package/.framework/functions/pipeline-executions.ts +494 -0
  79. package/.framework/functions/pipelines.ts +485 -0
  80. package/.framework/functions/prompt-configs.ts +339 -0
  81. package/.framework/functions/roles.ts +387 -0
  82. package/.framework/functions/system-cron.ts +742 -0
  83. package/.framework/functions/system.ts +323 -0
  84. package/.framework/functions/tests.ts +119 -0
  85. package/.framework/functions/timers.ts +357 -0
  86. package/.framework/functions/triggers.ts +563 -0
  87. package/.framework/functions/types.ts +604 -0
  88. package/.framework/migrations/000_foundation.sql +1256 -0
  89. package/.framework/migrations/001_seed.sql +92 -0
  90. package/.framework/migrations/002_seed_constraints.sql +13 -0
  91. package/.framework/migrations/003_auth_user_trigger.sql +59 -0
  92. package/.framework/src/App.tsx +126 -0
  93. package/.framework/src/apps/admin/index.tsx +173 -0
  94. package/.framework/src/components/AppWrapper.tsx +56 -0
  95. package/.framework/src/components/CustomAppLoader.tsx +116 -0
  96. package/.framework/src/components/admin/AdminListPage.tsx +151 -0
  97. package/.framework/src/components/admin/AdminSidebar.tsx +166 -0
  98. package/.framework/src/components/admin/AdminStatsCard.tsx +62 -0
  99. package/.framework/src/components/admin/SortableTableHeader.tsx +42 -0
  100. package/.framework/src/components/app-shell/GenericAppShell.tsx +181 -0
  101. package/.framework/src/components/app-shell/GenericDetailPage.tsx +200 -0
  102. package/.framework/src/components/app-shell/GenericListPage.tsx +116 -0
  103. package/.framework/src/components/app-sidebar.tsx +228 -0
  104. package/.framework/src/components/auth/ProtectedRoute.tsx +88 -0
  105. package/.framework/src/components/layout/AppShell.tsx +91 -0
  106. package/.framework/src/components/layout/Header.tsx +88 -0
  107. package/.framework/src/components/layout/Layout.tsx +95 -0
  108. package/.framework/src/components/layout/Sidebar.tsx +329 -0
  109. package/.framework/src/components/runtime/DataDetailHeader.tsx +77 -0
  110. package/.framework/src/components/runtime/DataDetailPage.tsx +171 -0
  111. package/.framework/src/components/runtime/DataFilters.tsx +91 -0
  112. package/.framework/src/components/runtime/DataHeader.tsx +68 -0
  113. package/.framework/src/components/runtime/DataListPage.tsx +124 -0
  114. package/.framework/src/components/runtime/DataStats.tsx +70 -0
  115. package/.framework/src/components/runtime/DataTable.tsx +174 -0
  116. package/.framework/src/components/runtime/SchemaDetailForm.tsx +134 -0
  117. package/.framework/src/components/runtime/index.ts +18 -0
  118. package/.framework/src/components/search-form.tsx +29 -0
  119. package/.framework/src/components/shared/AgentView.tsx +213 -0
  120. package/.framework/src/components/shared/FieldRenderer.tsx +478 -0
  121. package/.framework/src/components/shared/SchemaFields.tsx +226 -0
  122. package/.framework/src/components/ui/DataTable.tsx +343 -0
  123. package/.framework/src/components/ui/Form.tsx +281 -0
  124. package/.framework/src/components/ui/ItemCard.tsx +296 -0
  125. package/.framework/src/components/ui/ItemListView.tsx +308 -0
  126. package/.framework/src/components/ui/LoadingSpinner.tsx +52 -0
  127. package/.framework/src/components/ui/Modal.tsx +61 -0
  128. package/.framework/src/components/ui/RichTextEditor.tsx +210 -0
  129. package/.framework/src/components/ui/accordion.tsx +82 -0
  130. package/.framework/src/components/ui/alert-dialog.tsx +197 -0
  131. package/.framework/src/components/ui/alert.tsx +76 -0
  132. package/.framework/src/components/ui/aspect-ratio.tsx +11 -0
  133. package/.framework/src/components/ui/avatar.tsx +110 -0
  134. package/.framework/src/components/ui/badge.tsx +49 -0
  135. package/.framework/src/components/ui/breadcrumb.tsx +122 -0
  136. package/.framework/src/components/ui/button-group.tsx +83 -0
  137. package/.framework/src/components/ui/button.tsx +65 -0
  138. package/.framework/src/components/ui/calendar.tsx +222 -0
  139. package/.framework/src/components/ui/card.tsx +100 -0
  140. package/.framework/src/components/ui/carousel.tsx +240 -0
  141. package/.framework/src/components/ui/chart.tsx +373 -0
  142. package/.framework/src/components/ui/checkbox.tsx +31 -0
  143. package/.framework/src/components/ui/collapsible.tsx +33 -0
  144. package/.framework/src/components/ui/combobox.tsx +299 -0
  145. package/.framework/src/components/ui/command.tsx +193 -0
  146. package/.framework/src/components/ui/context-menu.tsx +261 -0
  147. package/.framework/src/components/ui/dialog.tsx +165 -0
  148. package/.framework/src/components/ui/direction.tsx +22 -0
  149. package/.framework/src/components/ui/drawer.tsx +132 -0
  150. package/.framework/src/components/ui/dropdown-menu.tsx +269 -0
  151. package/.framework/src/components/ui/empty.tsx +104 -0
  152. package/.framework/src/components/ui/field.tsx +238 -0
  153. package/.framework/src/components/ui/hover-card.tsx +42 -0
  154. package/.framework/src/components/ui/input-group.tsx +153 -0
  155. package/.framework/src/components/ui/input-otp.tsx +87 -0
  156. package/.framework/src/components/ui/input.tsx +19 -0
  157. package/.framework/src/components/ui/item.tsx +196 -0
  158. package/.framework/src/components/ui/kbd.tsx +26 -0
  159. package/.framework/src/components/ui/label.tsx +22 -0
  160. package/.framework/src/components/ui/menubar.tsx +277 -0
  161. package/.framework/src/components/ui/native-select.tsx +61 -0
  162. package/.framework/src/components/ui/navigation-menu.tsx +164 -0
  163. package/.framework/src/components/ui/pagination.tsx +129 -0
  164. package/.framework/src/components/ui/popover.tsx +87 -0
  165. package/.framework/src/components/ui/progress.tsx +31 -0
  166. package/.framework/src/components/ui/radio-group.tsx +42 -0
  167. package/.framework/src/components/ui/resizable.tsx +50 -0
  168. package/.framework/src/components/ui/scroll-area.tsx +53 -0
  169. package/.framework/src/components/ui/select.tsx +195 -0
  170. package/.framework/src/components/ui/separator.tsx +26 -0
  171. package/.framework/src/components/ui/sheet.tsx +145 -0
  172. package/.framework/src/components/ui/sidebar.tsx +706 -0
  173. package/.framework/src/components/ui/skeleton.tsx +13 -0
  174. package/.framework/src/components/ui/slider.tsx +59 -0
  175. package/.framework/src/components/ui/sonner.tsx +47 -0
  176. package/.framework/src/components/ui/spinner.tsx +10 -0
  177. package/.framework/src/components/ui/switch.tsx +33 -0
  178. package/.framework/src/components/ui/table-primitives.tsx +141 -0
  179. package/.framework/src/components/ui/table.tsx +114 -0
  180. package/.framework/src/components/ui/tabs.tsx +90 -0
  181. package/.framework/src/components/ui/textarea.tsx +18 -0
  182. package/.framework/src/components/ui/toggle-group.tsx +89 -0
  183. package/.framework/src/components/ui/toggle.tsx +45 -0
  184. package/.framework/src/components/ui/tooltip.tsx +57 -0
  185. package/.framework/src/contexts/AppContext.tsx +133 -0
  186. package/.framework/src/contexts/AuthContext.tsx +371 -0
  187. package/.framework/src/hooks/use-mobile.ts +19 -0
  188. package/.framework/src/hooks/useApi.ts +526 -0
  189. package/.framework/src/hooks/useApps.ts +114 -0
  190. package/.framework/src/hooks/useEntityList.ts +190 -0
  191. package/.framework/src/hooks/useEntityRecord.ts +308 -0
  192. package/.framework/src/hooks/useForm.ts +307 -0
  193. package/.framework/src/hooks/useListSchema.ts +264 -0
  194. package/.framework/src/hooks/useSchemaRecord.ts +223 -0
  195. package/.framework/src/index.css +128 -0
  196. package/.framework/src/lib/api.ts +156 -0
  197. package/.framework/src/lib/supabase.ts +94 -0
  198. package/.framework/src/lib/utils.ts +317 -0
  199. package/.framework/src/main.tsx +27 -0
  200. package/.framework/src/pages/DashboardPage.tsx +181 -0
  201. package/.framework/src/pages/NotFoundPage.tsx +39 -0
  202. package/.framework/src/pages/admin/AIAgentDetailPage.tsx +161 -0
  203. package/.framework/src/pages/admin/AIAgentsPage.tsx +318 -0
  204. package/.framework/src/pages/admin/APIKeyDetailPage.tsx +199 -0
  205. package/.framework/src/pages/admin/APIKeysPage.tsx +303 -0
  206. package/.framework/src/pages/admin/AlertsConfigPage.tsx +523 -0
  207. package/.framework/src/pages/admin/AppDetailPage.tsx +493 -0
  208. package/.framework/src/pages/admin/AppsPage.tsx +355 -0
  209. package/.framework/src/pages/admin/DesignedPage.tsx +491 -0
  210. package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +534 -0
  211. package/.framework/src/pages/admin/EmbeddingsPage.tsx +424 -0
  212. package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +176 -0
  213. package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +109 -0
  214. package/.framework/src/pages/admin/IntegratedDashboard.tsx +402 -0
  215. package/.framework/src/pages/admin/IntegrationDetailPage.tsx +187 -0
  216. package/.framework/src/pages/admin/IntegrationsPage.tsx +301 -0
  217. package/.framework/src/pages/admin/LogsPage.tsx +283 -0
  218. package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +85 -0
  219. package/.framework/src/pages/admin/ObservabilityDashboard.tsx +470 -0
  220. package/.framework/src/pages/admin/PipelineDetailPage.tsx +183 -0
  221. package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +279 -0
  222. package/.framework/src/pages/admin/PipelinesPage.tsx +390 -0
  223. package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +299 -0
  224. package/.framework/src/pages/admin/PromptConfigsPage.tsx +292 -0
  225. package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +434 -0
  226. package/.framework/src/pages/admin/RoleDetailPage.tsx +273 -0
  227. package/.framework/src/pages/admin/RolesPage.tsx +292 -0
  228. package/.framework/src/pages/admin/SelectTestPage.tsx +61 -0
  229. package/.framework/src/pages/admin/ShadcnTestPage.tsx +588 -0
  230. package/.framework/src/pages/admin/SimpleDashboard.tsx +387 -0
  231. package/.framework/src/pages/admin/TestRunDetailPage.tsx +172 -0
  232. package/.framework/src/pages/admin/TestingDashboard.tsx +257 -0
  233. package/.framework/src/pages/admin/TimerDetailPage.tsx +151 -0
  234. package/.framework/src/pages/admin/TimersPage.tsx +376 -0
  235. package/.framework/src/pages/admin/TriggerDetailPage.tsx +149 -0
  236. package/.framework/src/pages/admin/TriggersPage.tsx +381 -0
  237. package/.framework/src/pages/admin/TypeDetailPage.tsx +694 -0
  238. package/.framework/src/pages/admin/TypesPage.tsx +295 -0
  239. package/.framework/src/pages/auth/LoginPage.tsx +188 -0
  240. package/.framework/src/pages/auth/RegisterPage.tsx +163 -0
  241. package/.framework/src/pages/spine-framework/APIPage.tsx +17 -0
  242. package/.framework/src/pages/spine-framework/CLIPage.tsx +25 -0
  243. package/.framework/src/types/auth.ts +125 -0
  244. package/.framework/src/types/types.ts +407 -0
  245. package/STRUCTURE.md +150 -0
  246. package/config/components.json +25 -0
  247. package/config/deno.lock +108 -0
  248. package/config/package-lock.json +17183 -0
  249. package/config/postcss.config.cjs +10 -0
  250. package/config/tailwind.config.cjs +78 -0
  251. package/config/tsconfig.build.json +32 -0
  252. package/config/tsconfig.cli.json +18 -0
  253. package/config/tsconfig.json +41 -0
  254. package/config/tsconfig.node.json +17 -0
  255. package/config/tsconfig.node.tsbuildinfo +1 -0
  256. package/config/tsconfig.tsbuildinfo +1 -0
  257. package/config/typedoc.json +16 -0
  258. package/config/vite.config.d.ts +2 -0
  259. package/config/vite.config.ts +72 -0
  260. package/dist/cli/commands/agents.d.ts +39 -0
  261. package/dist/cli/commands/agents.d.ts.map +1 -0
  262. package/dist/cli/commands/auth.d.ts +36 -0
  263. package/dist/cli/commands/auth.d.ts.map +1 -0
  264. package/dist/cli/commands/create-app.d.ts +23 -0
  265. package/dist/cli/commands/create-app.d.ts.map +1 -0
  266. package/dist/cli/commands/dev.d.ts +39 -0
  267. package/dist/cli/commands/dev.d.ts.map +1 -0
  268. package/dist/cli/commands/doctor.d.ts +42 -0
  269. package/dist/cli/commands/doctor.d.ts.map +1 -0
  270. package/dist/cli/commands/generate.d.ts +36 -0
  271. package/dist/cli/commands/generate.d.ts.map +1 -0
  272. package/dist/cli/commands/init.d.ts +30 -0
  273. package/dist/cli/commands/init.d.ts.map +1 -0
  274. package/dist/cli/commands/install-app.d.ts +30 -0
  275. package/dist/cli/commands/install-app.d.ts.map +1 -0
  276. package/dist/cli/commands/items.d.ts +45 -0
  277. package/dist/cli/commands/items.d.ts.map +1 -0
  278. package/dist/cli/commands/migrations.d.ts +41 -0
  279. package/dist/cli/commands/migrations.d.ts.map +1 -0
  280. package/dist/cli/commands/pipelines.d.ts +40 -0
  281. package/dist/cli/commands/pipelines.d.ts.map +1 -0
  282. package/dist/cli/commands/status.d.ts +23 -0
  283. package/dist/cli/commands/status.d.ts.map +1 -0
  284. package/dist/cli/commands/system.d.ts +29 -0
  285. package/dist/cli/commands/system.d.ts.map +1 -0
  286. package/dist/cli/commands/test.d.ts +46 -0
  287. package/dist/cli/commands/test.d.ts.map +1 -0
  288. package/dist/cli/commands/uninstall-app.d.ts +23 -0
  289. package/dist/cli/commands/uninstall-app.d.ts.map +1 -0
  290. package/dist/cli/context.d.ts +88 -0
  291. package/dist/cli/context.d.ts.map +1 -0
  292. package/dist/cli/env-loader.d.ts +14 -0
  293. package/dist/cli/env-loader.d.ts.map +1 -0
  294. package/dist/cli/index.d.ts +41 -0
  295. package/dist/cli/index.d.ts.map +1 -0
  296. package/dist/functions/_shared/agent-runner.d.ts +156 -0
  297. package/dist/functions/_shared/agent-runner.d.ts.map +1 -0
  298. package/dist/functions/_shared/app-manifest.d.ts +68 -0
  299. package/dist/functions/_shared/app-manifest.d.ts.map +1 -0
  300. package/dist/functions/_shared/audit.d.ts +91 -0
  301. package/dist/functions/_shared/audit.d.ts.map +1 -0
  302. package/dist/functions/_shared/db.d.ts +125 -0
  303. package/dist/functions/_shared/db.d.ts.map +1 -0
  304. package/dist/functions/_shared/index.d.ts +298 -0
  305. package/dist/functions/_shared/index.d.ts.map +1 -0
  306. package/dist/functions/_shared/middleware.d.ts +315 -0
  307. package/dist/functions/_shared/middleware.d.ts.map +1 -0
  308. package/dist/functions/_shared/permissions.d.ts +626 -0
  309. package/dist/functions/_shared/permissions.d.ts.map +1 -0
  310. package/dist/functions/_shared/pipeline-runner.d.ts +124 -0
  311. package/dist/functions/_shared/pipeline-runner.d.ts.map +1 -0
  312. package/dist/functions/_shared/principal.d.ts +284 -0
  313. package/dist/functions/_shared/principal.d.ts.map +1 -0
  314. package/dist/functions/_shared/schema-utils.d.ts +181 -0
  315. package/dist/functions/_shared/schema-utils.d.ts.map +1 -0
  316. package/dist/functions/_shared/testing.d.ts +172 -0
  317. package/dist/functions/_shared/testing.d.ts.map +1 -0
  318. package/dist/functions/_shared/trigger-engine.d.ts +140 -0
  319. package/dist/functions/_shared/trigger-engine.d.ts.map +1 -0
  320. package/dist/functions/_shared/webhook-registration.d.ts +81 -0
  321. package/dist/functions/_shared/webhook-registration.d.ts.map +1 -0
  322. package/dist/functions/_shared/webhook-registry.d.ts +57 -0
  323. package/dist/functions/_shared/webhook-registry.d.ts.map +1 -0
  324. package/dist/functions/account-nodes.d.ts +48 -0
  325. package/dist/functions/account-nodes.d.ts.map +1 -0
  326. package/dist/functions/admin-data.d.ts +178 -0
  327. package/dist/functions/admin-data.d.ts.map +1 -0
  328. package/dist/functions/ai-agents.d.ts +125 -0
  329. package/dist/functions/ai-agents.d.ts.map +1 -0
  330. package/dist/functions/api-keys.d.ts +140 -0
  331. package/dist/functions/api-keys.d.ts.map +1 -0
  332. package/dist/functions/apps.d.ts +163 -0
  333. package/dist/functions/apps.d.ts.map +1 -0
  334. package/dist/functions/auth.d.ts +74 -0
  335. package/dist/functions/auth.d.ts.map +1 -0
  336. package/dist/functions/debug-auth.d.ts +33 -0
  337. package/dist/functions/debug-auth.d.ts.map +1 -0
  338. package/dist/functions/embeddings.d.ts +205 -0
  339. package/dist/functions/embeddings.d.ts.map +1 -0
  340. package/dist/functions/integration-routes.d.ts +45 -0
  341. package/dist/functions/integration-routes.d.ts.map +1 -0
  342. package/dist/functions/integrations.d.ts +124 -0
  343. package/dist/functions/integrations.d.ts.map +1 -0
  344. package/dist/functions/item-progress.d.ts +41 -0
  345. package/dist/functions/item-progress.d.ts.map +1 -0
  346. package/dist/functions/logs.d.ts +162 -0
  347. package/dist/functions/logs.d.ts.map +1 -0
  348. package/dist/functions/observability.d.ts +123 -0
  349. package/dist/functions/observability.d.ts.map +1 -0
  350. package/dist/functions/pipeline-executions.d.ts +190 -0
  351. package/dist/functions/pipeline-executions.d.ts.map +1 -0
  352. package/dist/functions/pipelines.d.ts +171 -0
  353. package/dist/functions/pipelines.d.ts.map +1 -0
  354. package/dist/functions/prompt-configs.d.ts +125 -0
  355. package/dist/functions/prompt-configs.d.ts.map +1 -0
  356. package/dist/functions/roles.d.ts +118 -0
  357. package/dist/functions/roles.d.ts.map +1 -0
  358. package/dist/functions/system-cron.d.ts +65 -0
  359. package/dist/functions/system-cron.d.ts.map +1 -0
  360. package/dist/functions/system.d.ts +29 -0
  361. package/dist/functions/system.d.ts.map +1 -0
  362. package/dist/functions/tests.d.ts +28 -0
  363. package/dist/functions/tests.d.ts.map +1 -0
  364. package/dist/functions/timers.d.ts +139 -0
  365. package/dist/functions/timers.d.ts.map +1 -0
  366. package/dist/functions/triggers.d.ts +203 -0
  367. package/dist/functions/triggers.d.ts.map +1 -0
  368. package/dist/functions/types.d.ts +151 -0
  369. package/dist/functions/types.d.ts.map +1 -0
  370. package/dist/src/types/types.d.ts +364 -0
  371. package/dist/src/types/types.d.ts.map +1 -0
  372. package/package.json +192 -0
  373. package/scripts/app-install-cli.ts +286 -0
  374. package/scripts/assemble-frontend.sh +79 -0
  375. package/scripts/assemble-functions.sh +62 -0
  376. package/scripts/assemble.sh +35 -0
  377. package/scripts/boundary-check.sh +106 -0
  378. package/scripts/build-manifest.sh +80 -0
  379. package/scripts/check-core-integrity.sh +82 -0
  380. package/scripts/ingest-chunks.cjs +202 -0
  381. package/scripts/kb-chunk-parser.cjs +312 -0
  382. package/scripts/kb-chunk-parser.ts +330 -0
  383. package/scripts/load-test-app-install.ts +484 -0
  384. package/scripts/netlify-dev-wrapper.sh +22 -0
  385. package/scripts/verify-integrity.sh +69 -0
@@ -0,0 +1,125 @@
1
+ /**
2
+ * @module src/types/auth
3
+ * @audience installer
4
+ * @layer frontend-hook
5
+ * @stability stable
6
+ *
7
+ * Authentication and principal type definitions for the Spine frontend.
8
+ * These shapes mirror the response from `GET /api/auth?action=context` and
9
+ * are used throughout `AuthContext`, hooks, and any component that needs
10
+ * to reason about the current user's identity, account, or permissions.
11
+ *
12
+ * **Server source:** `functions/auth.ts` → `get_account_hierarchy` RPC resolves
13
+ * `User.account`, `User.roles`, `User.permissions`, and `User.accessible_accounts`.
14
+ *
15
+ * @seeAlso src/contexts/AuthContext.tsx (stores and exposes User)
16
+ * @seeAlso src/types/types.ts (design-schema types; separate concern)
17
+ * @seeAlso functions/auth.ts (API endpoint that returns User shape)
18
+ */
19
+
20
+ // ─── PRINCIPAL ─────────────────────────────────────────────────────────────────
21
+
22
+ /**
23
+ * The resolved user/principal context returned by the auth API and stored
24
+ * in `AuthContext`. Populated from the `people`, `accounts`, and `roles`
25
+ * tables via the `get_account_hierarchy` RPC.
26
+ *
27
+ * @prop id - UUID of the `people` row (matches `auth.users.id`)
28
+ * @prop email - Primary email address
29
+ * @prop full_name - Display name
30
+ * @prop account_id - UUID of the user's primary account
31
+ * @prop account - Hydrated primary `Account` object (optional join)
32
+ * @prop roles - Flat list of role slugs (e.g. `['admin', 'member']`)
33
+ * @prop permissions - Flat list of permission slugs
34
+ * @prop is_system_admin - Convenience flag set when `system_admin` is in roles
35
+ * @prop accessible_accounts - All accounts the user can act on (multi-tenancy)
36
+ */
37
+ export interface User {
38
+ id: string
39
+ email: string
40
+ full_name: string
41
+ account_id: string
42
+ account?: Account
43
+ roles: string[] // Simplified for now
44
+ permissions: string[] // Simplified for now
45
+ is_system_admin?: boolean
46
+ accessible_accounts?: Account[]
47
+ }
48
+
49
+ /**
50
+ * A Spine account record. Used as the primary organisational scope for all
51
+ * data access.
52
+ *
53
+ * @prop slug - URL-safe unique identifier
54
+ * @prop display_name - Human-readable name shown in UI
55
+ * @prop account_type - `'tenant'` | `'organization'` | `'individual'`
56
+ * @prop owner_account_id - Parent account UUID for tenant hierarchy
57
+ * @prop metadata - Arbitrary extra fields set by the application layer
58
+ */
59
+ export interface Account {
60
+ id: string
61
+ slug: string
62
+ display_name: string
63
+ name?: string
64
+ account_type?: string
65
+ owner_account_id?: string
66
+ metadata?: Record<string, any>
67
+ }
68
+
69
+ // ─── ROLES & PERMISSIONS ──────────────────────────────────────────────────────────
70
+
71
+ /**
72
+ * A role record from the `v2.roles` table.
73
+ *
74
+ * @prop slug - Unique role identifier used in permission checks
75
+ * @prop permissions - Granular permission list attached to this role
76
+ */
77
+ export interface Role {
78
+ id: string
79
+ slug: string
80
+ name: string
81
+ description?: string
82
+ permissions: Permission[]
83
+ }
84
+
85
+ /**
86
+ * A single permission grant.
87
+ *
88
+ * @prop resource - The entity or system resource being guarded
89
+ * @prop action - The allowed action (`'read'`, `'write'`, `'delete'`, etc.)
90
+ * @prop scope - Optional scope qualifier (e.g. `'own'` vs `'any'`)
91
+ */
92
+ export interface Permission {
93
+ id: string
94
+ resource: string
95
+ action: string
96
+ scope?: string
97
+ }
98
+
99
+ // ─── AUTH FLOW ─────────────────────────────────────────────────────────────────
100
+
101
+ /**
102
+ * Shape of a successful auth response (Supabase sign-in).
103
+ * Not used directly by Spine — the frontend uses `supabase.auth.signInWithPassword`
104
+ * and then calls `fetchUserContext`; this type documents the underlying contract.
105
+ */
106
+ export interface AuthResponse {
107
+ user: User
108
+ access_token: string
109
+ refresh_token: string
110
+ expires_in: number
111
+ }
112
+
113
+ /** Credentials for `supabase.auth.signInWithPassword` via `AuthContext.login`. */
114
+ export interface LoginCredentials {
115
+ email: string
116
+ password: string
117
+ }
118
+
119
+ /** Registration data for new user sign-up flows. */
120
+ export interface RegisterData {
121
+ email: string
122
+ password: string
123
+ full_name: string
124
+ account_name?: string
125
+ }
@@ -0,0 +1,407 @@
1
+ /**
2
+ * @module src/types/types
3
+ * @audience installer
4
+ * @layer frontend-hook
5
+ * @stability stable
6
+ *
7
+ * Core TypeScript type definitions for the Spine frontend. These types
8
+ * mirror the `design_schema` and API response shapes used across hooks,
9
+ * components, and pages.
10
+ *
11
+ * **Type hierarchy:**
12
+ * ```
13
+ * DesignSchema
14
+ * ├── fields: Record<string, FieldDefinition>
15
+ * ├── views: Record<string, View> ← ListView | DetailView
16
+ * ├── record_permissions
17
+ * └── functionality?: FunctionalityBindings
18
+ * ItemType ← row in v2.types table
19
+ * Item ← row in v2.items table
20
+ * ```
21
+ *
22
+ * **`system` flag on `FieldDefinition`:** When `system: true`, the field
23
+ * maps to a real DB column (e.g. `title`, `status`). When absent or false,
24
+ * the field value lives in the `data` JSONB column.
25
+ *
26
+ * @seeAlso src/hooks/useSchemaRecord.ts (consumes FieldDefinition[])
27
+ * @seeAlso src/hooks/useForm.ts (consumes FieldDefinition[] for validation)
28
+ * @seeAlso src/hooks/useListSchema.ts (consumes DesignSchema + View)
29
+ * @seeAlso functions/_shared/schema-utils.ts (server-side schema generation)
30
+ */
31
+
32
+ // ─── FIELD DEFINITIONS ───────────────────────────────────────────────────────────
33
+
34
+ /**
35
+ * Definition of a single field in a `design_schema`. Drives both UI rendering
36
+ * and client-side validation in `useForm`.
37
+ *
38
+ * @prop data_type - Controls rendering widget and validation rules
39
+ * @prop label - Human-readable display label
40
+ * @prop required - Whether the field must be non-empty on save
41
+ * @prop system - If true, maps to a top-level DB column; false/absent → `data` JSONB
42
+ * @prop name - Injected at runtime by hooks; not stored in the schema itself
43
+ * @prop validation - Type-specific constraint overrides
44
+ * @prop options - Choice list for select/multiselect/radio fields
45
+ * @prop permissions - Role-based read/write access map; absent = all roles allowed
46
+ */
47
+ export interface FieldDefinition {
48
+ data_type: 'text' | 'textarea' | 'rich_text' | 'email' | 'phone' | 'url' |
49
+ 'number' | 'currency' | 'range' | 'date' | 'datetime' | 'boolean' |
50
+ 'checkbox' | 'select' | 'multiselect' | 'radio' | 'color' |
51
+ 'file' | 'image' | 'json' | 'reference' | 'address'
52
+ label: string
53
+ required: boolean
54
+ system?: boolean // true = DB column, false/absent = custom field in .data
55
+ // Runtime identity — populated by SchemaFields when building field arrays from schema
56
+ name?: string
57
+ // UI hints — informational only, do not affect data contract or permissions
58
+ placeholder?: string
59
+ description?: string
60
+ rows?: number
61
+ min?: number
62
+ max?: number
63
+ step?: number
64
+ readonly?: boolean
65
+ disabled?: boolean
66
+ validation?: {
67
+ pattern?: string
68
+ minLength?: number
69
+ maxLength?: number
70
+ min?: number
71
+ max?: number
72
+ step?: number
73
+ integer?: boolean
74
+ precision?: number
75
+ maxSize?: number
76
+ allowedTypes?: string[]
77
+ maxWidth?: number
78
+ maxHeight?: number
79
+ currency_code?: string
80
+ reference_kind?: string
81
+ reference_type?: string
82
+ }
83
+ // Type-specific constraint properties (move out of validation for clarity)
84
+ options?: (string | { value: string; label: string })[] // For select/multiselect/radio
85
+ permissions?: {
86
+ [role: string]: string[] // Array of actions: ["read", "write"]
87
+ }
88
+ }
89
+
90
+ // ─── VIEW TYPES ─────────────────────────────────────────────────────────────────
91
+
92
+ /**
93
+ * Per-field display/behaviour config within a view. Stored as
94
+ * `design_schema.views[viewSlug].fields[fieldName]`.
95
+ *
96
+ * @prop display_type - Override the default widget for this field in this view
97
+ * @prop sortable - Whether the column header shows a sort toggle in list views
98
+ * @prop searchable - Whether the field is included in free-text search
99
+ */
100
+ export interface ViewFieldConfig {
101
+ display_type: 'input' | 'textarea' | 'rich_text' | 'select' | 'multiselect' |
102
+ 'radio' | 'checkbox' | 'switch' | 'date_picker' | 'datetime_picker' |
103
+ 'color_picker' | 'file_upload' | 'image_upload' | 'range_slider' |
104
+ 'rating' | 'autocomplete' | 'address_form' | 'reference_picker' |
105
+ 'text' | 'badge' | 'timestamp' | 'currency' | 'number'
106
+ sortable?: boolean
107
+ searchable?: boolean
108
+ }
109
+
110
+ /**
111
+ * A list view definition. Rendered by `DataListPage` as a table, card grid,
112
+ * or Kanban board depending on `display`.
113
+ *
114
+ * @prop fields - Ordered map of field name → `ViewFieldConfig`
115
+ * @prop default_sort - Initial sort applied before user interaction
116
+ * @prop filters - Field names to expose as filter controls
117
+ * @prop stats - Summary stat cards shown above the list
118
+ * @prop group_by - Field to use as board column grouping (`display: 'board'` only)
119
+ */
120
+ export interface ListView {
121
+ type: 'list'
122
+ display: 'table' | 'card' | 'board'
123
+ label: string
124
+ fields: Record<string, ViewFieldConfig>
125
+ default_sort?: {
126
+ field: string
127
+ direction: 'asc' | 'desc'
128
+ }
129
+ filters?: string[]
130
+ stats?: Array<{
131
+ title: string
132
+ type: 'count' | 'filter_count'
133
+ icon?: string
134
+ color?: string
135
+ filter?: Record<string, any>
136
+ }>
137
+ group_by?: string // For board display
138
+ }
139
+
140
+ /**
141
+ * A single section within a `DetailView`. Groups related fields under
142
+ * an optional title. Field permissions from the schema still apply —
143
+ * there are no section-level permission overrides.
144
+ */
145
+ export interface DetailViewSection {
146
+ title: string
147
+ fields: Record<string, ViewFieldConfig>
148
+ // Note: No view-level permissions - field permissions from schema apply
149
+ }
150
+
151
+ /**
152
+ * A detail view definition. Rendered by `DataDetailPage` as a sectioned
153
+ * record form.
154
+ */
155
+ export interface DetailView {
156
+ type: 'detail'
157
+ label: string
158
+ sections: DetailViewSection[]
159
+ }
160
+
161
+ /** Discriminated union of all supported view types. */
162
+ export type View = ListView | DetailView
163
+
164
+ // ─── FUNCTIONALITY BINDINGS ──────────────────────────────────────────────────────────
165
+
166
+ /**
167
+ * Optional automation and integration bindings attached to a `DesignSchema`.
168
+ * Each array entry describes a trigger condition and the target pipeline,
169
+ * agent, embedding, integration, or constraint.
170
+ *
171
+ * These bindings are evaluated by API handlers and the system cron — not
172
+ * by the frontend. They are included here as a type contract so the frontend
173
+ * can read and display binding metadata without making blind `any` casts.
174
+ */
175
+ export interface FunctionalityBindings {
176
+ pipelines?: Array<{
177
+ pipeline_id: string
178
+ trigger: 'manual' | 'on_create' | 'on_update' | 'on_field_change' | 'on_delete' | 'scheduled'
179
+ field?: string // For on_field_change
180
+ condition?: string // Expression string
181
+ roles: string[]
182
+ }>
183
+ ai_agents?: Array<{
184
+ agent_id: string
185
+ capabilities: ('read' | 'summarize' | 'suggest' | 'update')[]
186
+ trigger: 'manual' | 'on_create' | 'on_update' | 'on_field_change'
187
+ roles: string[]
188
+ }>
189
+ embeddings?: Array<{
190
+ slug: string
191
+ fields: string[]
192
+ model: string
193
+ vector_column: string
194
+ trigger: 'on_create' | 'on_update' | 'on_create_or_update'
195
+ }>
196
+ integrations?: Array<{
197
+ integration_id: string
198
+ sync: 'bidirectional' | 'inbound' | 'outbound'
199
+ field_map: Record<string, {
200
+ external_field: string
201
+ direction: 'both' | 'inbound' | 'outbound' | 'none'
202
+ transform?: string
203
+ }>
204
+ trigger: 'on_create' | 'on_update' | 'on_create_or_update'
205
+ }>
206
+ constraints?: Array<{
207
+ type: 'unique' | 'conditional_required' | 'immutable'
208
+ fields?: string[] // For unique
209
+ field?: string // For conditional_required and immutable
210
+ condition?: string // For conditional_required
211
+ message: string
212
+ after?: 'create' | 'update' // For immutable
213
+ }>
214
+ }
215
+
216
+ // ─── DESIGN SCHEMA ────────────────────────────────────────────────────────────────
217
+
218
+ /**
219
+ * The complete design schema for a `types` record. Stored as a JSONB column
220
+ * (`design_schema`) and stamp-copied onto records at create time.
221
+ *
222
+ * @prop record_permissions - Role → allowed CRUD actions map for the entire record
223
+ * @prop fields - All field definitions keyed by field name
224
+ * @prop views - Named view definitions (`list`, `detail`, etc.)
225
+ * @prop functionality - Optional automation bindings (pipelines, agents, etc.)
226
+ */
227
+ export interface DesignSchema {
228
+ record_permissions: {
229
+ [role: string]: string[] // Array of actions: ["create", "read", "update", "delete"]
230
+ }
231
+ fields: Record<string, FieldDefinition>
232
+ views: Record<string, View>
233
+ functionality?: FunctionalityBindings
234
+ }
235
+
236
+ // ─── RECORD SHAPES ─────────────────────────────────────────────────────────────────
237
+
238
+ /**
239
+ * A row from the `v2.types` table. Represents a type definition (item type,
240
+ * account type, person type, etc.) including its full `design_schema`.
241
+ *
242
+ * @prop kind - Discriminator: `'item'` | `'account'` | `'person'` | etc.
243
+ * @prop design_schema - Full schema defining fields, views, and functionality
244
+ * @prop validation_schema - Auto-generated JSON Schema used for server-side validation
245
+ * @prop ownership - `'pack'` | `'tenant'` (pack-ownership tracking)
246
+ */
247
+ export interface ItemType {
248
+ id: string
249
+ name: string
250
+ slug: string
251
+ kind: string
252
+ description?: string
253
+ icon?: string
254
+ color?: string
255
+ design_schema: DesignSchema
256
+ validation_schema: {
257
+ fields: Record<string, {
258
+ data_type: string
259
+ required?: boolean
260
+ [key: string]: any // Type-specific validation properties
261
+ }>
262
+ }
263
+ ownership: string
264
+ is_active: boolean
265
+ app_id?: string
266
+ app?: any
267
+ created_at: string
268
+ updated_at: string
269
+ }
270
+
271
+ /**
272
+ * A row from the `v2.items` table. The `data` JSONB column holds all
273
+ * custom field values; system fields (`title`, `status`, etc.) are top-level.
274
+ *
275
+ * @prop design_schema - Stamp of the type's schema at create time (for resilience
276
+ * to schema changes; may be stale relative to `types` table)
277
+ * @prop validation_schema - Stamp of the validation schema at create time
278
+ */
279
+ export interface Item {
280
+ id: string
281
+ item_type_id: string
282
+ item_type_slug?: string
283
+ title: string
284
+ description?: string
285
+ status: string
286
+ is_active: boolean
287
+ data: Record<string, any>
288
+ created_at: string
289
+ updated_at: string
290
+ created_by?: string
291
+ account_id: string
292
+ app_id?: string
293
+ design_schema?: Record<string, any> // Schema snapshot at creation time
294
+ validation_schema?: Record<string, any> // Validation schema snapshot at creation time
295
+ }
296
+
297
+ // ─── FORM & QUERY TYPES ───────────────────────────────────────────────────────────
298
+
299
+ /** A field-level validation failure from `useForm` or server-side validation. */
300
+ export interface ValidationError {
301
+ field: string
302
+ message: string
303
+ }
304
+
305
+ /** Snapshot of form state — used as a shared type between `useForm` and form components. */
306
+ export interface FormState {
307
+ data: Record<string, any>
308
+ errors: Record<string, string>
309
+ touched: Record<string, boolean>
310
+ isSubmitting: boolean
311
+ isValid: boolean
312
+ }
313
+
314
+ /** Pagination query parameters for list endpoints. */
315
+ export interface PaginationParams {
316
+ limit?: number
317
+ offset?: number
318
+ page?: number
319
+ }
320
+
321
+ /** Sort order specification for list endpoints. */
322
+ export interface SortParams {
323
+ field: string
324
+ direction: 'asc' | 'desc'
325
+ }
326
+
327
+ /** Arbitrary key→value filter map for list endpoints. */
328
+ export interface FilterParams {
329
+ [key: string]: any
330
+ }
331
+
332
+ /** Combined search, sort, filter, and pagination params for list queries. */
333
+ export interface SearchParams extends PaginationParams {
334
+ search?: string
335
+ sort?: SortParams
336
+ filters?: FilterParams
337
+ }
338
+
339
+ // ─── UI DISPLAY TYPES ────────────────────────────────────────────────────────────────
340
+
341
+ /** A rendered column descriptor for list/table UI components. */
342
+ export interface EntityColumn {
343
+ key: string
344
+ label: string
345
+ sortable?: boolean
346
+ type?: string
347
+ display_type?: string
348
+ badgeColors?: Record<string, string>
349
+ maxLength?: number
350
+ }
351
+
352
+ /** A stat card shown above entity list pages (count or filtered count). */
353
+ export interface EntityStat {
354
+ title: string
355
+ type: 'count' | 'filter_count'
356
+ icon: string
357
+ color: string
358
+ filter?: Record<string, any>
359
+ }
360
+
361
+ /** A filter control definition for entity list pages. */
362
+ export interface EntityFilter {
363
+ key: string
364
+ label: string
365
+ type: 'search' | 'enum' | 'boolean'
366
+ options?: string[]
367
+ }
368
+
369
+ // ─── ITEM PROGRESS ───────────────────────────────────────────────────────────
370
+
371
+ /**
372
+ * A per-person, per-item progress record. Tracks pipeline status, score, and
373
+ * arbitrary interaction data for courses, onboarding, tasks, and quizzes.
374
+ *
375
+ * `title` is auto-composed as "<item title> — <person name>".
376
+ * `description` is auto-composed as "Completed · score 85 · 2 attempts".
377
+ * `data` holds extensible fields: attempts, time_spent, last_position, etc.
378
+ *
379
+ * INVARIANT: (person_id, item_id) is unique — state, not a log.
380
+ */
381
+ export interface ItemProgress {
382
+ id: string
383
+ type_id: string
384
+ account_id: string
385
+ app_id: string | null
386
+ person_id: string
387
+ item_id: string
388
+ title: string | null
389
+ description: string | null
390
+ status: 'not_started' | 'in_progress' | 'completed' | string
391
+ score: number | null
392
+ data: {
393
+ attempts?: number
394
+ time_spent?: number
395
+ last_position?: number
396
+ started_at?: string
397
+ completed_at?: string
398
+ [key: string]: any
399
+ }
400
+ is_active: boolean
401
+ design_schema: Record<string, any>
402
+ validation_schema: Record<string, any>
403
+ created_by: string | null
404
+ updated_by: string | null
405
+ created_at: string
406
+ updated_at: string
407
+ }
package/STRUCTURE.md ADDED
@@ -0,0 +1,150 @@
1
+ # Spine Enterprise Directory Structure
2
+
3
+ This document explains the directory layout for the Spine framework.
4
+
5
+ ## Overview
6
+
7
+ ```
8
+ my-app/
9
+ ├── .framework/ # 🔒 CLI-managed framework code (read-only)
10
+ ├── custom/ # ✏️ Developer workspace (your code)
11
+ ├── .assembled/ # 🏗️ Build output (gitignored)
12
+ ├── config/ # ⚙️ Build tool configuration
13
+ ├── scripts/ # 🔧 Build automation
14
+ ├── archive/ # 📦 Historical artifacts
15
+ ├── docs/ # 📚 Documentation
16
+ ├── netlify.toml # 🌐 Netlify configuration (must be at root)
17
+ ├── package.json # Root package manifest
18
+ └── STRUCTURE.md # This file
19
+ ```
20
+
21
+ ## Directory Details
22
+
23
+ ### `.framework/` — Framework Core (Hidden)
24
+ **Managed by:** Spine CLI (read-only)
25
+ **Contains:**
26
+ - `functions/` — Core Netlify function handlers
27
+ - `src/` — Core React components (Admin shell, app router)
28
+ - `migrations/` — Base database schema
29
+ - `cli/` — Framework CLI tools
30
+ - `tests/` — Core test suites
31
+
32
+ **You should not edit files here.** The CLI manages updates to this directory.
33
+
34
+ ### `custom/` — Developer Workspace
35
+ **Managed by:** You
36
+ **Contains:**
37
+ - `functions/` — Your custom Netlify function handlers
38
+ - `apps/` — Your applications (one folder per app)
39
+ - `components/` — Shared UI components across your apps
40
+ - `migrations/` — Your database schema changes
41
+ - `tests/` — Your test suites
42
+
43
+ **This is where you build your product.** Everything here is yours.
44
+
45
+ ### `.assembled/` — Build Output (Hidden, Gitignored)
46
+ **Generated by:** Assembly scripts
47
+ **Contains:**
48
+ - `netlify/functions/` — Merged: `.framework/functions` + `custom/functions`
49
+ - `src/` — Merged: `.framework/src` + `custom/apps/*`
50
+
51
+ **Never edit files here.** This is rebuilt on every `netlify dev` or deployment.
52
+
53
+ ### `config/` — Build Tool Configuration
54
+ **Contains:**
55
+ - `vite.config.ts` — Vite build configuration
56
+ - `tsconfig.json` — TypeScript configuration
57
+ - `tailwind.config.ts` — Styling configuration
58
+ - `postcss.config.js` — CSS processing
59
+
60
+ ### `netlify.toml` — Netlify Configuration (Root)
61
+ **Must be at project root** (Netlify CLI requirement)
62
+ - Functions path: `.assembled/netlify/functions/`
63
+ - Dev server settings: port 3001 (Vite) → 8888 (Netlify proxy)
64
+
65
+ ### `scripts/` — Build Automation
66
+ **Contains:**
67
+ - Assembly scripts that merge `.framework/` + `custom/` → `.assembled/`
68
+ - Verification scripts for integrity checking
69
+
70
+ ### `archive/` — Historical Artifacts
71
+ **Contains:**
72
+ - Old audit documents
73
+ - Completed project reports
74
+ - Test artifacts
75
+
76
+ ## Assembly Flow
77
+
78
+ ```bash
79
+ Development:
80
+ .framework/ + custom/ ──► scripts/assemble.sh ──► .assembled/
81
+ ──► netlify dev
82
+
83
+ Production:
84
+ .framework/ + custom/ ──► scripts/assemble.sh ──► .assembled/
85
+ ──► Netlify deploy
86
+ ```
87
+
88
+ ## Path Aliases
89
+
90
+ After assembly, code uses these aliases:
91
+ - `@core` → `.framework/src/`
92
+ - `@custom` → `custom/apps/`
93
+
94
+ ## Adding New Code
95
+
96
+ ### New App
97
+ ```bash
98
+ mkdir custom/apps/my-app
99
+ cd custom/apps/my-app
100
+ # Create src/, components/, pages/
101
+ ```
102
+
103
+ ### New Function
104
+ ```bash
105
+ touch custom/functions/my-handler.ts
106
+ # Edit with your logic
107
+ ```
108
+
109
+ ### New Migration
110
+ ```bash
111
+ touch custom/migrations/101_my_change.sql
112
+ # Write ALTER TABLE statements
113
+ ```
114
+
115
+ ## Updating Framework
116
+
117
+ ```bash
118
+ spine-framework update
119
+ # CLI updates .framework/ to latest version
120
+ # Your custom/ code is untouched
121
+ ```
122
+
123
+ ## Important Rules
124
+
125
+ 1. **Never edit `.framework/`** — use `custom/` instead
126
+ 2. **Never commit `.assembled/`** — it's in `.gitignore`
127
+ 3. **Always use assembly** — don't manually copy to `.assembled/`
128
+ 4. **Test after update** — run `netlify dev` after `spine-framework update`
129
+
130
+ ## Troubleshooting
131
+
132
+ ### "Where do I put X?"
133
+ - Framework extension → `.framework/` (via CLI or PR)
134
+ - Custom business logic → `custom/`
135
+ - App-specific code → `custom/apps/{app-name}/`
136
+
137
+ ### "Assembly failed"
138
+ 1. Check both `.framework/` and `custom/` exist
139
+ 2. Verify no duplicate function names
140
+ 3. Run `scripts/assemble.sh` manually for error details
141
+
142
+ ### "Functions not found"
143
+ 1. Check `.assembled/netlify/functions/` exists
144
+ 2. Verify `netlify.toml` (in project root) points to correct path
145
+ 3. Ensure assembly ran without errors
146
+
147
+ ### "Netlify dev can't connect"
148
+ 1. Check Vite is running on port 3001
149
+ 2. Verify `netlify.toml` is in project root (not config/)
150
+ 3. Check `targetPort = 3001` in netlify.toml [dev] section