spine-framework 0.2.1 → 1.0.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 (425) hide show
  1. package/LICENSE.md +213 -8
  2. package/README.md +327 -0
  3. package/package.json +107 -217
  4. package/src/cli/commands/init.ts +192 -0
  5. package/src/cli/commands/install.ts +25 -0
  6. package/src/cli/commands/list.ts +33 -0
  7. package/src/cli/commands/migrate.ts +24 -0
  8. package/src/cli/index.ts +46 -0
  9. package/src/components/AppLayout.tsx +21 -0
  10. package/src/components/AuthGuard.tsx +21 -0
  11. package/src/components/RoleGuard.tsx +23 -0
  12. package/src/components/index.ts +3 -0
  13. package/src/contexts/AppContext.tsx +122 -0
  14. package/src/contexts/AuthContext.tsx +87 -0
  15. package/src/contexts/SpineContext.tsx +46 -0
  16. package/src/contexts/index.ts +3 -0
  17. package/src/hooks/index.ts +4 -0
  18. package/src/hooks/useItems.ts +78 -0
  19. package/src/hooks/useThreads.ts +73 -0
  20. package/src/hooks/useWebSocket.ts +97 -0
  21. package/src/index.ts +22 -0
  22. package/src/types/index.ts +163 -0
  23. package/src/utils/api.ts +88 -0
  24. package/src/utils/client.ts +146 -0
  25. package/src/utils/config.ts +20 -0
  26. package/src/utils/index.ts +3 -0
  27. package/.framework/README.md +0 -129
  28. package/.framework/cli/bin.cjs +0 -14
  29. package/.framework/cli/commands/agents.ts +0 -153
  30. package/.framework/cli/commands/auth.ts +0 -94
  31. package/.framework/cli/commands/create-app.ts +0 -185
  32. package/.framework/cli/commands/dev.ts +0 -113
  33. package/.framework/cli/commands/doctor.ts +0 -442
  34. package/.framework/cli/commands/generate.ts +0 -332
  35. package/.framework/cli/commands/init.ts +0 -186
  36. package/.framework/cli/commands/install-app.ts +0 -565
  37. package/.framework/cli/commands/items.ts +0 -253
  38. package/.framework/cli/commands/migrate.ts +0 -139
  39. package/.framework/cli/commands/migrations.ts +0 -141
  40. package/.framework/cli/commands/pipelines.ts +0 -166
  41. package/.framework/cli/commands/status.ts +0 -197
  42. package/.framework/cli/commands/system.ts +0 -184
  43. package/.framework/cli/commands/test.ts +0 -227
  44. package/.framework/cli/commands/uninstall-app.ts +0 -166
  45. package/.framework/cli/context.ts +0 -268
  46. package/.framework/cli/env-loader.ts +0 -36
  47. package/.framework/cli/index.ts +0 -116
  48. package/.framework/cli/welcome.cjs +0 -45
  49. package/.framework/docs/API.md +0 -384
  50. package/.framework/docs/STABILITY.md +0 -52
  51. package/.framework/docs/admin-routes.md +0 -76
  52. package/.framework/docs/api-docs-progress.md +0 -38
  53. package/.framework/docs/api-governance.md +0 -146
  54. package/.framework/docs/api-testing-results.md +0 -212
  55. package/.framework/docs/apis/admin-configs.md +0 -567
  56. package/.framework/docs/apis/admin-data.md +0 -272
  57. package/.framework/docs/apis/index.md +0 -231
  58. package/.framework/docs/apis/internal.md +0 -295
  59. package/.framework/docs/apis/runtime.md +0 -537
  60. package/.framework/docs/assembly-launch-guide.md +0 -138
  61. package/.framework/docs/audit-results.md +0 -590
  62. package/.framework/docs/authorization-model.md +0 -170
  63. package/.framework/docs/db-api-inventory.md +0 -95
  64. package/.framework/docs/examples/custom-app/README.md +0 -77
  65. package/.framework/docs/examples/custom-function/README.md +0 -27
  66. package/.framework/docs/examples/custom-function/handler.ts +0 -48
  67. package/.framework/docs/examples/custom-webhook/README.md +0 -68
  68. package/.framework/docs/gap-remediation-backlog.md +0 -103
  69. package/.framework/docs/guides/cli-guide.md +0 -224
  70. package/.framework/docs/guides/getting-started.md +0 -103
  71. package/.framework/docs/guides/import-guide.md +0 -193
  72. package/.framework/docs/guides/testing-guide.md +0 -229
  73. package/.framework/docs/permission-examples.md +0 -326
  74. package/.framework/docs/ui-adoption-verification.md +0 -111
  75. package/.framework/docs/ui-api-coverage.md +0 -84
  76. package/.framework/docs/v2-compatibility-audit.md +0 -228
  77. package/.framework/functions/.gitkeep +0 -1
  78. package/.framework/functions/_shared/agent-runner.ts +0 -1097
  79. package/.framework/functions/_shared/app-manifest.ts +0 -184
  80. package/.framework/functions/_shared/audit.ts +0 -150
  81. package/.framework/functions/_shared/db.ts +0 -178
  82. package/.framework/functions/_shared/index.ts +0 -391
  83. package/.framework/functions/_shared/middleware.ts +0 -490
  84. package/.framework/functions/_shared/permissions.ts +0 -1325
  85. package/.framework/functions/_shared/pipeline-runner.ts +0 -731
  86. package/.framework/functions/_shared/principal.ts +0 -818
  87. package/.framework/functions/_shared/resolve-ids.ts +0 -106
  88. package/.framework/functions/_shared/schema-utils.ts +0 -967
  89. package/.framework/functions/_shared/testing.ts +0 -258
  90. package/.framework/functions/_shared/trigger-engine.ts +0 -425
  91. package/.framework/functions/_shared/webhook-registration.ts +0 -168
  92. package/.framework/functions/_shared/webhook-registry.ts +0 -129
  93. package/.framework/functions/account-nodes.ts +0 -111
  94. package/.framework/functions/admin-data.ts +0 -606
  95. package/.framework/functions/ai-agents.ts +0 -323
  96. package/.framework/functions/api-keys.ts +0 -376
  97. package/.framework/functions/apps.ts +0 -483
  98. package/.framework/functions/auth.ts +0 -196
  99. package/.framework/functions/debug-auth.ts +0 -107
  100. package/.framework/functions/embeddings.ts +0 -556
  101. package/.framework/functions/integration-routes.ts +0 -523
  102. package/.framework/functions/integrations.ts +0 -319
  103. package/.framework/functions/item-progress.ts +0 -272
  104. package/.framework/functions/logs.ts +0 -438
  105. package/.framework/functions/observability.ts +0 -275
  106. package/.framework/functions/pipeline-executions.ts +0 -494
  107. package/.framework/functions/pipelines.ts +0 -485
  108. package/.framework/functions/prompt-configs.ts +0 -339
  109. package/.framework/functions/roles.ts +0 -387
  110. package/.framework/functions/system-cron.ts +0 -742
  111. package/.framework/functions/system.ts +0 -323
  112. package/.framework/functions/tests.ts +0 -119
  113. package/.framework/functions/timers.ts +0 -357
  114. package/.framework/functions/triggers.ts +0 -563
  115. package/.framework/functions/types.ts +0 -604
  116. package/.framework/index.html +0 -16
  117. package/.framework/migrations/000_foundation.sql +0 -1266
  118. package/.framework/migrations/001_seed.sql +0 -163
  119. package/.framework/migrations/002_seed_constraints.sql +0 -19
  120. package/.framework/migrations/003_auth_user_trigger.sql +0 -67
  121. package/.framework/src/App.tsx +0 -133
  122. package/.framework/src/apps/admin/index.tsx +0 -173
  123. package/.framework/src/components/AppWrapper.tsx +0 -56
  124. package/.framework/src/components/CustomAppLoader.tsx +0 -116
  125. package/.framework/src/components/admin/AdminListPage.tsx +0 -151
  126. package/.framework/src/components/admin/AdminSidebar.tsx +0 -166
  127. package/.framework/src/components/admin/AdminStatsCard.tsx +0 -62
  128. package/.framework/src/components/admin/SortableTableHeader.tsx +0 -42
  129. package/.framework/src/components/app-shell/GenericAppShell.tsx +0 -181
  130. package/.framework/src/components/app-shell/GenericDetailPage.tsx +0 -200
  131. package/.framework/src/components/app-shell/GenericListPage.tsx +0 -116
  132. package/.framework/src/components/app-sidebar.tsx +0 -228
  133. package/.framework/src/components/auth/ProtectedRoute.tsx +0 -88
  134. package/.framework/src/components/layout/AppShell.tsx +0 -91
  135. package/.framework/src/components/layout/Header.tsx +0 -88
  136. package/.framework/src/components/layout/Layout.tsx +0 -95
  137. package/.framework/src/components/layout/Sidebar.tsx +0 -329
  138. package/.framework/src/components/runtime/DataDetailHeader.tsx +0 -77
  139. package/.framework/src/components/runtime/DataDetailPage.tsx +0 -171
  140. package/.framework/src/components/runtime/DataFilters.tsx +0 -91
  141. package/.framework/src/components/runtime/DataHeader.tsx +0 -68
  142. package/.framework/src/components/runtime/DataListPage.tsx +0 -124
  143. package/.framework/src/components/runtime/DataStats.tsx +0 -70
  144. package/.framework/src/components/runtime/DataTable.tsx +0 -174
  145. package/.framework/src/components/runtime/SchemaDetailForm.tsx +0 -134
  146. package/.framework/src/components/runtime/index.ts +0 -18
  147. package/.framework/src/components/search-form.tsx +0 -29
  148. package/.framework/src/components/shared/AgentView.tsx +0 -213
  149. package/.framework/src/components/shared/FieldRenderer.tsx +0 -478
  150. package/.framework/src/components/shared/SchemaFields.tsx +0 -226
  151. package/.framework/src/components/ui/DataTable.tsx +0 -343
  152. package/.framework/src/components/ui/Form.tsx +0 -281
  153. package/.framework/src/components/ui/ItemCard.tsx +0 -296
  154. package/.framework/src/components/ui/ItemListView.tsx +0 -308
  155. package/.framework/src/components/ui/LoadingSpinner.tsx +0 -52
  156. package/.framework/src/components/ui/Modal.tsx +0 -61
  157. package/.framework/src/components/ui/RichTextEditor.tsx +0 -210
  158. package/.framework/src/components/ui/accordion.tsx +0 -82
  159. package/.framework/src/components/ui/alert-dialog.tsx +0 -197
  160. package/.framework/src/components/ui/alert.tsx +0 -76
  161. package/.framework/src/components/ui/aspect-ratio.tsx +0 -11
  162. package/.framework/src/components/ui/avatar.tsx +0 -110
  163. package/.framework/src/components/ui/badge.tsx +0 -49
  164. package/.framework/src/components/ui/breadcrumb.tsx +0 -122
  165. package/.framework/src/components/ui/button-group.tsx +0 -83
  166. package/.framework/src/components/ui/button.tsx +0 -65
  167. package/.framework/src/components/ui/calendar.tsx +0 -222
  168. package/.framework/src/components/ui/card.tsx +0 -100
  169. package/.framework/src/components/ui/carousel.tsx +0 -240
  170. package/.framework/src/components/ui/chart.tsx +0 -368
  171. package/.framework/src/components/ui/checkbox.tsx +0 -31
  172. package/.framework/src/components/ui/collapsible.tsx +0 -33
  173. package/.framework/src/components/ui/combobox.tsx +0 -299
  174. package/.framework/src/components/ui/command.tsx +0 -193
  175. package/.framework/src/components/ui/context-menu.tsx +0 -261
  176. package/.framework/src/components/ui/dialog.tsx +0 -165
  177. package/.framework/src/components/ui/direction.tsx +0 -6
  178. package/.framework/src/components/ui/drawer.tsx +0 -132
  179. package/.framework/src/components/ui/dropdown-menu.tsx +0 -269
  180. package/.framework/src/components/ui/empty.tsx +0 -104
  181. package/.framework/src/components/ui/field.tsx +0 -238
  182. package/.framework/src/components/ui/hover-card.tsx +0 -42
  183. package/.framework/src/components/ui/input-group.tsx +0 -153
  184. package/.framework/src/components/ui/input-otp.tsx +0 -87
  185. package/.framework/src/components/ui/input.tsx +0 -19
  186. package/.framework/src/components/ui/item.tsx +0 -196
  187. package/.framework/src/components/ui/kbd.tsx +0 -26
  188. package/.framework/src/components/ui/label.tsx +0 -22
  189. package/.framework/src/components/ui/menubar.tsx +0 -277
  190. package/.framework/src/components/ui/native-select.tsx +0 -61
  191. package/.framework/src/components/ui/navigation-menu.tsx +0 -164
  192. package/.framework/src/components/ui/pagination.tsx +0 -129
  193. package/.framework/src/components/ui/popover.tsx +0 -87
  194. package/.framework/src/components/ui/progress.tsx +0 -31
  195. package/.framework/src/components/ui/radio-group.tsx +0 -42
  196. package/.framework/src/components/ui/resizable.tsx +0 -50
  197. package/.framework/src/components/ui/scroll-area.tsx +0 -53
  198. package/.framework/src/components/ui/select.tsx +0 -195
  199. package/.framework/src/components/ui/separator.tsx +0 -26
  200. package/.framework/src/components/ui/sheet.tsx +0 -145
  201. package/.framework/src/components/ui/sidebar.tsx +0 -706
  202. package/.framework/src/components/ui/skeleton.tsx +0 -13
  203. package/.framework/src/components/ui/slider.tsx +0 -59
  204. package/.framework/src/components/ui/sonner.tsx +0 -47
  205. package/.framework/src/components/ui/spinner.tsx +0 -10
  206. package/.framework/src/components/ui/switch.tsx +0 -33
  207. package/.framework/src/components/ui/table-primitives.tsx +0 -141
  208. package/.framework/src/components/ui/table.tsx +0 -114
  209. package/.framework/src/components/ui/tabs.tsx +0 -90
  210. package/.framework/src/components/ui/textarea.tsx +0 -18
  211. package/.framework/src/components/ui/toggle-group.tsx +0 -89
  212. package/.framework/src/components/ui/toggle.tsx +0 -45
  213. package/.framework/src/components/ui/tooltip.tsx +0 -57
  214. package/.framework/src/contexts/AppContext.tsx +0 -133
  215. package/.framework/src/contexts/AuthContext.tsx +0 -371
  216. package/.framework/src/hooks/use-mobile.ts +0 -19
  217. package/.framework/src/hooks/useApi.ts +0 -526
  218. package/.framework/src/hooks/useApps.ts +0 -114
  219. package/.framework/src/hooks/useEntityList.ts +0 -190
  220. package/.framework/src/hooks/useEntityRecord.ts +0 -308
  221. package/.framework/src/hooks/useForm.ts +0 -307
  222. package/.framework/src/hooks/useListSchema.ts +0 -264
  223. package/.framework/src/hooks/useSchemaRecord.ts +0 -223
  224. package/.framework/src/index.css +0 -128
  225. package/.framework/src/lib/api.ts +0 -156
  226. package/.framework/src/lib/supabase.ts +0 -94
  227. package/.framework/src/lib/utils.ts +0 -317
  228. package/.framework/src/main.tsx +0 -27
  229. package/.framework/src/pages/DashboardPage.tsx +0 -181
  230. package/.framework/src/pages/NotFoundPage.tsx +0 -39
  231. package/.framework/src/pages/admin/AIAgentDetailPage.tsx +0 -161
  232. package/.framework/src/pages/admin/AIAgentsPage.tsx +0 -318
  233. package/.framework/src/pages/admin/APIKeyDetailPage.tsx +0 -199
  234. package/.framework/src/pages/admin/APIKeysPage.tsx +0 -303
  235. package/.framework/src/pages/admin/AlertsConfigPage.tsx +0 -523
  236. package/.framework/src/pages/admin/AppDetailPage.tsx +0 -493
  237. package/.framework/src/pages/admin/AppsPage.tsx +0 -355
  238. package/.framework/src/pages/admin/DesignedPage.tsx +0 -491
  239. package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +0 -534
  240. package/.framework/src/pages/admin/EmbeddingsPage.tsx +0 -424
  241. package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +0 -176
  242. package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +0 -109
  243. package/.framework/src/pages/admin/IntegratedDashboard.tsx +0 -402
  244. package/.framework/src/pages/admin/IntegrationDetailPage.tsx +0 -187
  245. package/.framework/src/pages/admin/IntegrationsPage.tsx +0 -301
  246. package/.framework/src/pages/admin/LogsPage.tsx +0 -283
  247. package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +0 -85
  248. package/.framework/src/pages/admin/ObservabilityDashboard.tsx +0 -470
  249. package/.framework/src/pages/admin/PipelineDetailPage.tsx +0 -183
  250. package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +0 -279
  251. package/.framework/src/pages/admin/PipelinesPage.tsx +0 -390
  252. package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +0 -299
  253. package/.framework/src/pages/admin/PromptConfigsPage.tsx +0 -292
  254. package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +0 -434
  255. package/.framework/src/pages/admin/RoleDetailPage.tsx +0 -273
  256. package/.framework/src/pages/admin/RolesPage.tsx +0 -292
  257. package/.framework/src/pages/admin/SelectTestPage.tsx +0 -61
  258. package/.framework/src/pages/admin/ShadcnTestPage.tsx +0 -588
  259. package/.framework/src/pages/admin/SimpleDashboard.tsx +0 -387
  260. package/.framework/src/pages/admin/TestRunDetailPage.tsx +0 -172
  261. package/.framework/src/pages/admin/TestingDashboard.tsx +0 -257
  262. package/.framework/src/pages/admin/TimerDetailPage.tsx +0 -151
  263. package/.framework/src/pages/admin/TimersPage.tsx +0 -376
  264. package/.framework/src/pages/admin/TriggerDetailPage.tsx +0 -149
  265. package/.framework/src/pages/admin/TriggersPage.tsx +0 -381
  266. package/.framework/src/pages/admin/TypeDetailPage.tsx +0 -694
  267. package/.framework/src/pages/admin/TypesPage.tsx +0 -295
  268. package/.framework/src/pages/auth/LoginPage.tsx +0 -187
  269. package/.framework/src/pages/auth/RegisterPage.tsx +0 -163
  270. package/.framework/src/pages/spine-framework/APIPage.tsx +0 -17
  271. package/.framework/src/pages/spine-framework/CLIPage.tsx +0 -25
  272. package/.framework/src/types/auth.ts +0 -125
  273. package/.framework/src/types/types.ts +0 -407
  274. package/STRUCTURE.md +0 -150
  275. package/bin/spine-framework.cjs +0 -62
  276. package/bin/welcome.cjs +0 -45
  277. package/bin/ws-shim.cjs +0 -8
  278. package/bin/ws-shim.ts +0 -10
  279. package/config/components.json +0 -25
  280. package/config/deno.lock +0 -108
  281. package/config/package-lock.json +0 -17183
  282. package/config/postcss.config.cjs +0 -10
  283. package/config/tailwind.config.cjs +0 -78
  284. package/config/tsconfig.build.json +0 -32
  285. package/config/tsconfig.cli.json +0 -18
  286. package/config/tsconfig.json +0 -41
  287. package/config/tsconfig.node.json +0 -17
  288. package/config/tsconfig.node.tsbuildinfo +0 -1
  289. package/config/tsconfig.tsbuildinfo +0 -1
  290. package/config/typedoc.json +0 -16
  291. package/config/vite.config.d.ts +0 -2
  292. package/config/vite.config.ts +0 -71
  293. package/dist/cli/commands/agents.d.ts +0 -39
  294. package/dist/cli/commands/agents.d.ts.map +0 -1
  295. package/dist/cli/commands/auth.d.ts +0 -36
  296. package/dist/cli/commands/auth.d.ts.map +0 -1
  297. package/dist/cli/commands/create-app.d.ts +0 -23
  298. package/dist/cli/commands/create-app.d.ts.map +0 -1
  299. package/dist/cli/commands/dev.d.ts +0 -24
  300. package/dist/cli/commands/dev.d.ts.map +0 -1
  301. package/dist/cli/commands/doctor.d.ts +0 -42
  302. package/dist/cli/commands/doctor.d.ts.map +0 -1
  303. package/dist/cli/commands/generate.d.ts +0 -36
  304. package/dist/cli/commands/generate.d.ts.map +0 -1
  305. package/dist/cli/commands/init.d.ts +0 -20
  306. package/dist/cli/commands/init.d.ts.map +0 -1
  307. package/dist/cli/commands/install-app.d.ts +0 -30
  308. package/dist/cli/commands/install-app.d.ts.map +0 -1
  309. package/dist/cli/commands/items.d.ts +0 -45
  310. package/dist/cli/commands/items.d.ts.map +0 -1
  311. package/dist/cli/commands/migrate.d.ts +0 -21
  312. package/dist/cli/commands/migrate.d.ts.map +0 -1
  313. package/dist/cli/commands/migrations.d.ts +0 -41
  314. package/dist/cli/commands/migrations.d.ts.map +0 -1
  315. package/dist/cli/commands/pipelines.d.ts +0 -40
  316. package/dist/cli/commands/pipelines.d.ts.map +0 -1
  317. package/dist/cli/commands/status.d.ts +0 -23
  318. package/dist/cli/commands/status.d.ts.map +0 -1
  319. package/dist/cli/commands/system.d.ts +0 -29
  320. package/dist/cli/commands/system.d.ts.map +0 -1
  321. package/dist/cli/commands/test.d.ts +0 -46
  322. package/dist/cli/commands/test.d.ts.map +0 -1
  323. package/dist/cli/commands/uninstall-app.d.ts +0 -23
  324. package/dist/cli/commands/uninstall-app.d.ts.map +0 -1
  325. package/dist/cli/context.d.ts +0 -88
  326. package/dist/cli/context.d.ts.map +0 -1
  327. package/dist/cli/env-loader.d.ts +0 -14
  328. package/dist/cli/env-loader.d.ts.map +0 -1
  329. package/dist/cli/index.d.ts +0 -41
  330. package/dist/cli/index.d.ts.map +0 -1
  331. package/dist/functions/_shared/agent-runner.d.ts +0 -156
  332. package/dist/functions/_shared/agent-runner.d.ts.map +0 -1
  333. package/dist/functions/_shared/app-manifest.d.ts +0 -68
  334. package/dist/functions/_shared/app-manifest.d.ts.map +0 -1
  335. package/dist/functions/_shared/audit.d.ts +0 -91
  336. package/dist/functions/_shared/audit.d.ts.map +0 -1
  337. package/dist/functions/_shared/db.d.ts +0 -125
  338. package/dist/functions/_shared/db.d.ts.map +0 -1
  339. package/dist/functions/_shared/index.d.ts +0 -299
  340. package/dist/functions/_shared/index.d.ts.map +0 -1
  341. package/dist/functions/_shared/middleware.d.ts +0 -315
  342. package/dist/functions/_shared/middleware.d.ts.map +0 -1
  343. package/dist/functions/_shared/permissions.d.ts +0 -626
  344. package/dist/functions/_shared/permissions.d.ts.map +0 -1
  345. package/dist/functions/_shared/pipeline-runner.d.ts +0 -124
  346. package/dist/functions/_shared/pipeline-runner.d.ts.map +0 -1
  347. package/dist/functions/_shared/principal.d.ts +0 -284
  348. package/dist/functions/_shared/principal.d.ts.map +0 -1
  349. package/dist/functions/_shared/resolve-ids.d.ts +0 -10
  350. package/dist/functions/_shared/resolve-ids.d.ts.map +0 -1
  351. package/dist/functions/_shared/schema-utils.d.ts +0 -181
  352. package/dist/functions/_shared/schema-utils.d.ts.map +0 -1
  353. package/dist/functions/_shared/testing.d.ts +0 -172
  354. package/dist/functions/_shared/testing.d.ts.map +0 -1
  355. package/dist/functions/_shared/trigger-engine.d.ts +0 -140
  356. package/dist/functions/_shared/trigger-engine.d.ts.map +0 -1
  357. package/dist/functions/_shared/webhook-registration.d.ts +0 -81
  358. package/dist/functions/_shared/webhook-registration.d.ts.map +0 -1
  359. package/dist/functions/_shared/webhook-registry.d.ts +0 -57
  360. package/dist/functions/_shared/webhook-registry.d.ts.map +0 -1
  361. package/dist/functions/account-nodes.d.ts +0 -48
  362. package/dist/functions/account-nodes.d.ts.map +0 -1
  363. package/dist/functions/admin-data.d.ts +0 -178
  364. package/dist/functions/admin-data.d.ts.map +0 -1
  365. package/dist/functions/ai-agents.d.ts +0 -125
  366. package/dist/functions/ai-agents.d.ts.map +0 -1
  367. package/dist/functions/api-keys.d.ts +0 -140
  368. package/dist/functions/api-keys.d.ts.map +0 -1
  369. package/dist/functions/apps.d.ts +0 -163
  370. package/dist/functions/apps.d.ts.map +0 -1
  371. package/dist/functions/auth.d.ts +0 -74
  372. package/dist/functions/auth.d.ts.map +0 -1
  373. package/dist/functions/debug-auth.d.ts +0 -33
  374. package/dist/functions/debug-auth.d.ts.map +0 -1
  375. package/dist/functions/embeddings.d.ts +0 -205
  376. package/dist/functions/embeddings.d.ts.map +0 -1
  377. package/dist/functions/integration-routes.d.ts +0 -45
  378. package/dist/functions/integration-routes.d.ts.map +0 -1
  379. package/dist/functions/integrations.d.ts +0 -124
  380. package/dist/functions/integrations.d.ts.map +0 -1
  381. package/dist/functions/item-progress.d.ts +0 -41
  382. package/dist/functions/item-progress.d.ts.map +0 -1
  383. package/dist/functions/logs.d.ts +0 -162
  384. package/dist/functions/logs.d.ts.map +0 -1
  385. package/dist/functions/observability.d.ts +0 -123
  386. package/dist/functions/observability.d.ts.map +0 -1
  387. package/dist/functions/pipeline-executions.d.ts +0 -190
  388. package/dist/functions/pipeline-executions.d.ts.map +0 -1
  389. package/dist/functions/pipelines.d.ts +0 -171
  390. package/dist/functions/pipelines.d.ts.map +0 -1
  391. package/dist/functions/prompt-configs.d.ts +0 -125
  392. package/dist/functions/prompt-configs.d.ts.map +0 -1
  393. package/dist/functions/roles.d.ts +0 -118
  394. package/dist/functions/roles.d.ts.map +0 -1
  395. package/dist/functions/system-cron.d.ts +0 -65
  396. package/dist/functions/system-cron.d.ts.map +0 -1
  397. package/dist/functions/system.d.ts +0 -29
  398. package/dist/functions/system.d.ts.map +0 -1
  399. package/dist/functions/tests.d.ts +0 -28
  400. package/dist/functions/tests.d.ts.map +0 -1
  401. package/dist/functions/timers.d.ts +0 -139
  402. package/dist/functions/timers.d.ts.map +0 -1
  403. package/dist/functions/triggers.d.ts +0 -203
  404. package/dist/functions/triggers.d.ts.map +0 -1
  405. package/dist/functions/types.d.ts +0 -151
  406. package/dist/functions/types.d.ts.map +0 -1
  407. package/dist/src/types/types.d.ts +0 -364
  408. package/dist/src/types/types.d.ts.map +0 -1
  409. package/index.html +0 -13
  410. package/netlify.toml +0 -36
  411. package/package-project.json +0 -71
  412. package/scripts/app-install-cli.ts +0 -286
  413. package/scripts/assemble-frontend.sh +0 -76
  414. package/scripts/assemble-functions.sh +0 -62
  415. package/scripts/assemble.sh +0 -41
  416. package/scripts/boundary-check.sh +0 -106
  417. package/scripts/build-manifest.sh +0 -80
  418. package/scripts/check-core-integrity.sh +0 -82
  419. package/scripts/ingest-chunks.cjs +0 -202
  420. package/scripts/kb-chunk-parser.cjs +0 -312
  421. package/scripts/kb-chunk-parser.ts +0 -330
  422. package/scripts/load-test-app-install.ts +0 -484
  423. package/scripts/netlify-dev-wrapper.sh +0 -22
  424. package/scripts/verify-integrity.sh +0 -69
  425. package/vitest.config.ts +0 -45
@@ -1,307 +0,0 @@
1
- /**
2
- * @module src/hooks/useForm
3
- * @audience installer
4
- * @layer frontend-hook
5
- * @stability stable
6
- *
7
- * Schema-aware form state hook. Manages field values, touched state,
8
- * per-field validation (required, email, url, number range, text
9
- * length/pattern), and form submission with async support.
10
- *
11
- * Designed to work directly with `FieldDefinition[]` arrays produced
12
- * by `useSchemaRecord` or static field arrays in admin forms.
13
- *
14
- * **Validation order per field:**
15
- * 1. Required check
16
- * 2. Type-specific rule (email regex, URL parse, number range, text length/pattern)
17
- * 3. Custom `validate` function (whole-form)
18
- *
19
- * @seeAlso src/types/types.ts (FieldDefinition — field schema shape)
20
- * @seeAlso src/hooks/useSchemaRecord.ts (produces FieldDefinition[] for this hook)
21
- * @seeAlso src/components/shared/SchemaFields.tsx (renders fields from FieldDefinition[])
22
- */
23
-
24
- import { useState, useCallback, useEffect } from 'react'
25
- import { FieldDefinition, FormState, ValidationError } from '../types/types'
26
-
27
- // ─── TYPES ───────────────────────────────────────────────────────────────────
28
-
29
- interface UseFormOptions {
30
- initialValues: Record<string, any>
31
- fields: FieldDefinition[]
32
- onSubmit?: (values: Record<string, any>) => void | Promise<void>
33
- validate?: (values: Record<string, any>) => Record<string, string>
34
- onChange?: (values: Record<string, any>) => void
35
- }
36
-
37
- /**
38
- * Return value of `useForm`.
39
- *
40
- * @prop data - Current field values keyed by field name
41
- * @prop errors - Per-field error messages (empty string = cleared, absent = untouched)
42
- * @prop touched - Fields the user has interacted with
43
- * @prop isSubmitting - True while `onSubmit` promise is pending
44
- * @prop isValid - True when `errors` is empty
45
- * @prop isDirty - True when any touched field differs from `initialValues`
46
- * @prop handleChange - Update a field value (clears error, marks touched)
47
- * @prop handleBlur - Mark a field touched and run field-level validation
48
- * @prop handleSubmit - Validate all fields, then call `onSubmit` if valid
49
- * @prop resetForm - Restore all state to `initialValues`
50
- * @prop setFieldValue - Programmatic field update (same as handleChange)
51
- * @prop setFieldError - Inject a server-side error for a field
52
- * @prop clearErrors - Clear all errors (e.g. after navigation)
53
- */
54
- interface UseFormReturn {
55
- data: Record<string, any>
56
- errors: Record<string, string>
57
- touched: Record<string, boolean>
58
- isSubmitting: boolean
59
- isValid: boolean
60
- isDirty: boolean
61
- handleChange: (field: string, value: any) => void
62
- handleBlur: (field: string) => void
63
- handleSubmit: (e?: React.FormEvent) => void
64
- resetForm: () => void
65
- setFieldValue: (field: string, value: any) => void
66
- setFieldError: (field: string, error: string) => void
67
- clearErrors: () => void
68
- }
69
-
70
- // ─── HOOK ────────────────────────────────────────────────────────────────────
71
-
72
- /**
73
- * Schema-driven form state and validation hook.
74
- *
75
- * @param options.initialValues - Seed values for all fields
76
- * @param options.fields - `FieldDefinition[]` from schema or static config
77
- * @param options.onSubmit - Async submit handler; called only if validation passes
78
- * @param options.validate - Optional whole-form custom validator returning
79
- * `Record<fieldName, errorMessage>`
80
- * @param options.onChange - Called on every field change with the full values map
81
- *
82
- * @returns `UseFormReturn` — see interface for full description
83
- *
84
- * @inputSpec fields[].data_type: 'email'|'url'|'number'|'text'|'textarea'
85
- * drives built-in validation rules
86
- * @inputSpec fields[].validation.minLength/maxLength/pattern: text constraints
87
- * @sideEffects React state mutations only
88
- * @calledBy SchemaDetailForm.tsx, all admin detail pages
89
- *
90
- * @example
91
- * ```tsx
92
- * const form = useForm({
93
- * initialValues: { name: '', email: '' },
94
- * fields: [{ name: 'email', data_type: 'email', required: true, label: 'Email' }],
95
- * onSubmit: async (values) => await save(values)
96
- * })
97
- * ```
98
- */
99
- export function useForm({
100
- initialValues,
101
- fields,
102
- onSubmit,
103
- validate,
104
- onChange
105
- }: UseFormOptions): UseFormReturn {
106
- const [data, setData] = useState<Record<string, any>>(initialValues)
107
- const [errors, setErrors] = useState<Record<string, string>>({})
108
- const [touched, setTouched] = useState<Record<string, boolean>>({})
109
- const [isSubmitting, setIsSubmitting] = useState(false)
110
- const [submitCount, setSubmitCount] = useState(0)
111
-
112
- // Validate a single field
113
- const validateField = useCallback((field: string, value: any): string | null => {
114
- const fieldDef = fields.find(f => f.name === field)
115
- if (!fieldDef) return null
116
-
117
- // Required validation
118
- if (fieldDef.required && (!value || value === '')) {
119
- return `${fieldDef.label || field} is required`
120
- }
121
-
122
- // Skip validation for empty optional fields
123
- if (!fieldDef.required && (!value || value === '')) {
124
- return null
125
- }
126
-
127
- // Type-specific validation
128
- switch (fieldDef.data_type) {
129
- case 'email':
130
- const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
131
- if (!emailRegex.test(value)) {
132
- return 'Please enter a valid email address'
133
- }
134
- break
135
-
136
- case 'url':
137
- try {
138
- new URL(value)
139
- } catch {
140
- return 'Please enter a valid URL'
141
- }
142
- break
143
-
144
- case 'number':
145
- const num = Number(value)
146
- if (isNaN(num)) {
147
- return 'Please enter a valid number'
148
- }
149
- if (fieldDef.min !== undefined && num < fieldDef.min) {
150
- return `Value must be at least ${fieldDef.min}`
151
- }
152
- if (fieldDef.max !== undefined && num > fieldDef.max) {
153
- return `Value must be at most ${fieldDef.max}`
154
- }
155
- break
156
-
157
- case 'text':
158
- case 'textarea':
159
- if (fieldDef.validation?.minLength && value.length < fieldDef.validation.minLength) {
160
- return `Must be at least ${fieldDef.validation.minLength} characters`
161
- }
162
- if (fieldDef.validation?.maxLength && value.length > fieldDef.validation.maxLength) {
163
- return `Must be at most ${fieldDef.validation.maxLength} characters`
164
- }
165
- if (fieldDef.validation?.pattern && !new RegExp(fieldDef.validation.pattern).test(value)) {
166
- return 'Invalid format'
167
- }
168
- break
169
- }
170
-
171
- return null
172
- }, [fields])
173
-
174
- // Validate all fields
175
- const validateForm = useCallback((values: Record<string, any>): Record<string, string> => {
176
- const newErrors: Record<string, string> = {}
177
-
178
- // Run field-level validation
179
- fields.forEach(field => {
180
- if (!field.name) return
181
- const fieldErr = validateField(field.name, values[field.name])
182
- if (fieldErr) {
183
- newErrors[field.name] = fieldErr
184
- }
185
- })
186
-
187
- // Run custom validation
188
- if (validate) {
189
- const customErrors = validate(values)
190
- Object.assign(newErrors, customErrors)
191
- }
192
-
193
- return newErrors
194
- }, [fields, validate, validateField])
195
-
196
- // Handle field change
197
- const handleChange = useCallback((field: string, value: any) => {
198
- const newData = { ...data, [field]: value }
199
- setData(newData)
200
-
201
- // Clear error for this field when user starts typing
202
- if (errors[field]) {
203
- setErrors(prev => {
204
- const newErrors = { ...prev }
205
- delete newErrors[field]
206
- return newErrors
207
- })
208
- }
209
-
210
- // Mark field as touched
211
- setTouched(prev => ({ ...prev, [field]: true }))
212
-
213
- // Call onChange callback
214
- onChange?.(newData)
215
- }, [data, errors, onChange])
216
-
217
- // Handle field blur
218
- const handleBlur = useCallback((field: string) => {
219
- setTouched(prev => ({ ...prev, [field]: true }))
220
-
221
- // Validate field on blur
222
- const error = validateField(field, data[field])
223
- setErrors(prev => ({
224
- ...prev,
225
- ...(error ? { [field]: error } : { [field]: '' })
226
- }))
227
- }, [data, validateField])
228
-
229
- // Handle form submission
230
- const handleSubmit = useCallback(async (e?: React.FormEvent) => {
231
- e?.preventDefault()
232
-
233
- // Mark all fields as touched
234
- const allTouched = fields.reduce((acc, field) => {
235
- if (field.name) acc[field.name] = true
236
- return acc
237
- }, {} as Record<string, boolean>)
238
- setTouched(allTouched)
239
-
240
- // Validate form
241
- const newErrors = validateForm(data)
242
- setErrors(newErrors)
243
-
244
- const isValid = Object.keys(newErrors).length === 0
245
- if (!isValid) {
246
- return
247
- }
248
-
249
- setIsSubmitting(true)
250
- setSubmitCount(prev => prev + 1)
251
-
252
- try {
253
- await onSubmit?.(data)
254
- } catch (error) {
255
- console.error('Form submission error:', error)
256
- } finally {
257
- setIsSubmitting(false)
258
- }
259
- }, [data, fields, validateForm, onSubmit])
260
-
261
- // Reset form
262
- const resetForm = useCallback(() => {
263
- setData(initialValues)
264
- setErrors({})
265
- setTouched({})
266
- setIsSubmitting(false)
267
- setSubmitCount(0)
268
- }, [initialValues])
269
-
270
- // Set field value
271
- const setFieldValue = useCallback((field: string, value: any) => {
272
- handleChange(field, value)
273
- }, [handleChange])
274
-
275
- // Set field error
276
- const setFieldError = useCallback((field: string, error: string) => {
277
- setErrors(prev => ({
278
- ...prev,
279
- [field]: error
280
- }))
281
- }, [])
282
-
283
- // Clear all errors
284
- const clearErrors = useCallback(() => {
285
- setErrors({})
286
- }, [])
287
-
288
- // Calculate derived state
289
- const isValid = Object.keys(errors).length === 0
290
- const isDirty = Object.keys(touched).some(field => data[field] !== initialValues[field])
291
-
292
- return {
293
- data,
294
- errors,
295
- touched,
296
- isSubmitting,
297
- isValid,
298
- isDirty,
299
- handleChange,
300
- handleBlur,
301
- handleSubmit,
302
- resetForm,
303
- setFieldValue,
304
- setFieldError,
305
- clearErrors
306
- }
307
- }
@@ -1,264 +0,0 @@
1
- /**
2
- * @module src/hooks/useListSchema
3
- * @audience installer
4
- * @layer frontend-hook
5
- * @stability stable
6
- *
7
- * Resolves the `DesignSchema` and target `View` for a list page. Because
8
- * the `design_schema` is stamp-copied onto records, this hook uses a
9
- * two-stage resolution strategy to handle stale or missing stamps:
10
- *
11
- * **Resolution order:**
12
- * 1. Fetch one sample record via `admin-data?action=list&limit=1`
13
- * 2. If the sample record's `design_schema` has the requested view, use it
14
- * 3. Otherwise, fall back to the canonical `types` table entry for the entity kind
15
- * 4. If no records exist, return a minimal fallback schema so the page renders
16
- *
17
- * **Auth retry:** Auth errors (JWT not ready) trigger a 300 ms retry instead
18
- * of silently falling back to an empty schema (which would render a blank list).
19
- *
20
- * **Entity → kind mapping** (used for the types fallback):
21
- * `accounts→account`, `people→person`, `items→item`, `threads→thread`,
22
- * `messages→message`, `links→link`, `attachments→attachment`, `watchers→watcher`
23
- *
24
- * @seeAlso src/lib/api.ts (apiFetch)
25
- * @seeAlso src/types/types.ts (DesignSchema, View)
26
- * @seeAlso src/components/runtime/DataListPage.tsx (primary consumer)
27
- * @seeAlso functions/admin-data.ts (list action endpoint)
28
- */
29
-
30
- import { useState, useEffect } from 'react'
31
- import { apiFetch } from '../lib/api'
32
- import { DesignSchema, View } from '../types/types'
33
-
34
- // ─── TYPES ───────────────────────────────────────────────────────────────────
35
-
36
- /**
37
- * Options for `useListSchema`.
38
- *
39
- * @prop entity - Entity table name (e.g. `'accounts'`, `'items'`)
40
- * @prop viewSlug - View key in `design_schema.views`; defaults to `'default_list'`
41
- */
42
- interface UseListSchemaOptions {
43
- entity: string
44
- viewSlug?: string
45
- }
46
-
47
- /**
48
- * Return value of `useListSchema`.
49
- *
50
- * @prop schema - Resolved `DesignSchema` or null while loading
51
- * @prop view - The specific `View` for `viewSlug`, or null while loading
52
- * @prop loading - True during initial fetch and auth retry
53
- * @prop error - Error message if schema resolution fails
54
- * @prop refetch - Manually re-run schema resolution
55
- */
56
- interface UseListSchemaResult {
57
- schema: DesignSchema | null
58
- view: View | null
59
- loading: boolean
60
- error: string | null
61
- refetch: () => void
62
- }
63
-
64
- // ─── HOOK ────────────────────────────────────────────────────────────────────
65
-
66
- /**
67
- * Resolves the `DesignSchema` and target `View` for a list page, using a
68
- * two-stage fallback strategy (stamped record → canonical type → minimal fallback).
69
- *
70
- * @param options.entity - Entity name, e.g. `'accounts'`
71
- * @param options.viewSlug - View key; defaults to `'default_list'`
72
- * @returns `UseListSchemaResult` — schema, view, loading, error, refetch
73
- *
74
- * @inputSpec options.entity: string — must be non-empty or an error is set
75
- * @outputSpec schema: DesignSchema — minimal fallback if no records exist
76
- * @outputSpec view: View — matches `viewSlug` from the resolved schema
77
- * @throws never (all errors are caught and stored in `error` state)
78
- * @sideEffects Network requests (1–2 calls); React state mutations; 300ms setTimeout on auth retry
79
- * @calledBy DataListPage.tsx
80
- *
81
- * @example
82
- * ```tsx
83
- * const { schema, view, loading } = useListSchema({ entity: 'accounts' })
84
- * ```
85
- */
86
- export function useListSchema(options: UseListSchemaOptions): UseListSchemaResult {
87
- const { entity, viewSlug = 'default_list' } = options
88
-
89
- const [schema, setSchema] = useState<DesignSchema | null>(null)
90
- const [view, setView] = useState<View | null>(null)
91
- const [loading, setLoading] = useState(true)
92
- const [error, setError] = useState<string | null>(null)
93
-
94
- const fetchSchema = async () => {
95
- let cancelled = false
96
-
97
- try {
98
- setLoading(true)
99
- setError(null)
100
-
101
- // Fetch a sample record to get its design_schema
102
- const response = await apiFetch(`/api/admin-data?action=list&entity=${entity}&limit=1`)
103
-
104
- if (!response.ok) {
105
- throw new Error(`Failed to fetch sample record: ${response.statusText}`)
106
- }
107
-
108
- const data = await response.json()
109
-
110
- if (data.error) {
111
- // Auth errors (session not yet ready) should not silently fall back to
112
- // an empty schema — that causes the list to render with no columns.
113
- // Retry once after a short delay to allow the session to hydrate.
114
- if (
115
- data.error.includes('Invalid authentication') ||
116
- data.error.includes('Unauthorized') ||
117
- data.error.includes('JWT')
118
- ) {
119
- if (cancelled) return
120
- await new Promise(resolve => setTimeout(resolve, 300))
121
- if (!cancelled) fetchSchema()
122
- return
123
- }
124
- throw new Error(data.error || 'Failed to fetch records')
125
- }
126
-
127
- // No records yet — use a minimal fallback schema so the list page still renders
128
- if (!data.data || data.data.length === 0) {
129
- if (cancelled) return
130
- const fallback: DesignSchema = {
131
- fields: {},
132
- record_permissions: {},
133
- views: {
134
- [viewSlug]: {
135
- type: 'list',
136
- label: 'Default List',
137
- fields: {
138
- id: { sortable: false, display_type: 'text' },
139
- created_at: { sortable: true, display_type: 'timestamp' }
140
- },
141
- display: 'table',
142
- default_sort: { field: 'created_at', direction: 'desc' }
143
- }
144
- }
145
- }
146
- setSchema(fallback)
147
- setView(fallback.views![viewSlug]!)
148
- setLoading(false)
149
- return
150
- }
151
-
152
- const sampleRecord = data.data[0]
153
-
154
- // If the sample record has a design_schema with the requested view, use it directly
155
- const stampedSchema = sampleRecord.design_schema as DesignSchema | undefined
156
- const stampedView = stampedSchema?.views?.[viewSlug]
157
-
158
- if (stampedSchema && stampedView) {
159
- if (cancelled) return
160
- setSchema(stampedSchema)
161
- setView(stampedView)
162
- } else {
163
- // Schema missing or stale — fetch current design_schema from the types table
164
- const kindMap: Record<string, string> = { accounts: 'account', people: 'person', items: 'item', threads: 'thread', messages: 'message', links: 'link', attachments: 'attachment', watchers: 'watcher', item_progress: 'progress' }
165
- const kind = kindMap[entity]
166
- let resolvedSchema: DesignSchema | null = null
167
-
168
- if (kind) {
169
- const typeResp = await apiFetch(`/api/types?kind=${kind}&limit=1`)
170
- if (typeResp.ok) {
171
- const typeData = await typeResp.json()
172
- const typeRecord = typeData.data?.[0]
173
- if (typeRecord?.design_schema) {
174
- resolvedSchema = typeRecord.design_schema as DesignSchema
175
- }
176
- }
177
- }
178
-
179
- if (resolvedSchema) {
180
- const resolvedView = resolvedSchema.views?.[viewSlug]
181
- if (resolvedView) {
182
- if (cancelled) return
183
- setSchema(resolvedSchema)
184
- setView(resolvedView)
185
- } else {
186
- // Schema found but view key missing — use minimal fallback
187
- const fallback: DesignSchema = {
188
- fields: {},
189
- record_permissions: {},
190
- views: {
191
- [viewSlug]: {
192
- type: 'list',
193
- label: entity.charAt(0).toUpperCase() + entity.slice(1),
194
- fields: {
195
- id: { sortable: false, display_type: 'text' },
196
- created_at: { sortable: true, display_type: 'timestamp' }
197
- },
198
- display: 'table',
199
- default_sort: { field: 'created_at', direction: 'desc' }
200
- }
201
- }
202
- }
203
- if (cancelled) return
204
- setSchema(fallback)
205
- setView(fallback.views![viewSlug]!)
206
- }
207
- } else {
208
- // No type found in registry — use minimal fallback
209
- const fallback: DesignSchema = {
210
- fields: {},
211
- record_permissions: {},
212
- views: {
213
- [viewSlug]: {
214
- type: 'list',
215
- label: entity.charAt(0).toUpperCase() + entity.slice(1),
216
- fields: {
217
- id: { sortable: false, display_type: 'text' },
218
- created_at: { sortable: true, display_type: 'timestamp' }
219
- },
220
- display: 'table',
221
- default_sort: { field: 'created_at', direction: 'desc' }
222
- }
223
- }
224
- }
225
- if (cancelled) return
226
- setSchema(fallback)
227
- setView(fallback.views![viewSlug]!)
228
- }
229
- }
230
-
231
- } catch (err) {
232
- if (!cancelled) {
233
- setError(err instanceof Error ? err.message : 'Failed to load schema')
234
- setSchema(null)
235
- setView(null)
236
- }
237
- } finally {
238
- if (!cancelled) {
239
- setLoading(false)
240
- }
241
- }
242
-
243
- return () => {
244
- cancelled = true
245
- }
246
- }
247
-
248
- useEffect(() => {
249
- if (entity) {
250
- fetchSchema()
251
- } else {
252
- setError('Entity is required')
253
- setLoading(false)
254
- }
255
- }, [entity, viewSlug])
256
-
257
- return {
258
- schema,
259
- view,
260
- loading,
261
- error,
262
- refetch: fetchSchema
263
- }
264
- }