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,424 @@
1
+ /**
2
+ * @module src/pages/admin/EmbeddingsPage
3
+ * @audience installer
4
+ * @layer frontend-page
5
+ * @stability stable
6
+ *
7
+ * Admin list page for embedding model configurations. Fetches all models
8
+ * via `/api/embeddings?action=list`, applies client-side search, provider
9
+ * filter (`openai` | `anthropic` | `local` | `custom`), and sort. Renders
10
+ * inside `AdminListPage`. Row clicks navigate to
11
+ * `/spine-framework/admin/configs/embeddings/:id`.
12
+ *
13
+ * @seeAlso src/pages/admin/EmbeddingDetailPage.tsx
14
+ */
15
+
16
+ import { useState } from 'react'
17
+ import { useNavigate } from 'react-router-dom'
18
+ import { Box, FileText, CheckCircle, BarChart3 } from 'lucide-react';
19
+ import { formatDateTime, formatFileSize } from '../../lib/utils'
20
+ import { AdminListPage } from '../../components/admin/AdminListPage'
21
+ import { SortableTableHeader } from '../../components/admin/SortableTableHeader'
22
+ import { Badge } from '../../components/ui/badge'
23
+ import { useApi } from '../../hooks/useApi'
24
+ import { apiFetch } from '../../lib/api'
25
+
26
+ interface EmbeddingModel {
27
+ id: string
28
+ name: string
29
+ description?: string
30
+ model_name: string
31
+ provider: 'openai' | 'anthropic' | 'local' | 'custom'
32
+ config: {
33
+ dimension: number
34
+ chunk_size: number
35
+ overlap: number
36
+ batch_size: number
37
+ }
38
+ is_active: boolean
39
+ created_at: string
40
+ updated_at: string
41
+ created_by: string
42
+ account_id: string
43
+ document_count: number
44
+ embedding_count: number
45
+ storage_size: number
46
+ }
47
+
48
+ interface EmbeddingDocument {
49
+ id: string
50
+ model_id: string
51
+ title: string
52
+ content_type: string
53
+ status: 'pending' | 'processing' | 'completed' | 'failed'
54
+ chunk_count: number
55
+ embedding_count: number
56
+ created_at: string
57
+ updated_at: string
58
+ created_by: string
59
+ error?: string
60
+ }
61
+
62
+ interface EmbeddingSearch {
63
+ query: string
64
+ results: Array<{
65
+ document_id: string
66
+ document_title: string
67
+ chunk_content: string
68
+ similarity_score: number
69
+ chunk_index: number
70
+ }>
71
+ search_time: number
72
+ total_results: number
73
+ }
74
+
75
+ export function EmbeddingsPage() {
76
+ const navigate = useNavigate()
77
+ const [searchTerm, setSearchTerm] = useState('')
78
+ const [selectedProvider, setSelectedProvider] = useState('all')
79
+ const [selectedStatus, setSelectedStatus] = useState('all')
80
+ const [sortKey, setSortKey] = useState('name')
81
+ const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>('asc')
82
+
83
+ // Fetch embeddings from API
84
+ const { data: embeddings, loading, error, refetch } = useApi<any[]>(
85
+ async () => {
86
+ try {
87
+ console.log('Fetching embeddings...')
88
+ const response = await apiFetch('/api/embeddings?action=list')
89
+ console.log('Response status:', response.status)
90
+
91
+ if (!response.ok) {
92
+ console.error('Response not ok:', response.statusText)
93
+ throw new Error(`Failed to fetch embeddings: ${response.statusText}`)
94
+ }
95
+
96
+ const result = await response.json()
97
+ console.log('Raw API result:', result)
98
+
99
+ // Handle both nested and direct responses
100
+ const embeddings = result.data || result
101
+ console.log('Embeddings after processing:', embeddings)
102
+
103
+ return embeddings
104
+ } catch (error) {
105
+ console.error('Error in EmbeddingsPage:', error)
106
+ throw error
107
+ }
108
+ },
109
+ { immediate: true }
110
+ )
111
+
112
+ const mockDocuments: EmbeddingDocument[] = [
113
+ {
114
+ id: '1',
115
+ model_id: '1',
116
+ title: 'User Guide - Getting Started',
117
+ content_type: 'pdf',
118
+ status: 'completed',
119
+ chunk_count: 45,
120
+ embedding_count: 45,
121
+ created_at: new Date(Date.now() - 1000 * 60 * 60 * 24 * 5).toISOString(),
122
+ updated_at: new Date(Date.now() - 1000 * 60 * 60 * 4).toISOString(),
123
+ created_by: 'Jane Smith'
124
+ },
125
+ {
126
+ id: '2',
127
+ model_id: '1',
128
+ title: 'API Documentation',
129
+ content_type: 'markdown',
130
+ status: 'processing',
131
+ chunk_count: 67,
132
+ embedding_count: 0,
133
+ created_at: new Date(Date.now() - 1000 * 60 * 60 * 2).toISOString(),
134
+ updated_at: new Date(Date.now() - 1000 * 60 * 60 * 1).toISOString(),
135
+ created_by: 'John Doe'
136
+ },
137
+ {
138
+ id: '3',
139
+ model_id: '2',
140
+ title: 'React Components Library',
141
+ content_type: 'code',
142
+ status: 'completed',
143
+ chunk_count: 234,
144
+ embedding_count: 234,
145
+ created_at: new Date(Date.now() - 1000 * 60 * 60 * 24 * 3).toISOString(),
146
+ updated_at: new Date(Date.now() - 1000 * 60 * 60 * 2).toISOString(),
147
+ created_by: 'Mike Johnson'
148
+ },
149
+ {
150
+ id: '4',
151
+ model_id: '1',
152
+ title: 'Company Policies',
153
+ content_type: 'docx',
154
+ status: 'failed',
155
+ chunk_count: 0,
156
+ embedding_count: 0,
157
+ created_at: new Date(Date.now() - 1000 * 60 * 60 * 24).toISOString(),
158
+ updated_at: new Date(Date.now() - 1000 * 60 * 60 * 23).toISOString(),
159
+ created_by: 'Admin',
160
+ error: 'Document format not supported'
161
+ }
162
+ ]
163
+
164
+ const mockSearchResults: EmbeddingSearch = {
165
+ query: 'how to reset password',
166
+ results: [
167
+ {
168
+ document_id: '1',
169
+ document_title: 'User Guide - Getting Started',
170
+ chunk_content: 'To reset your password, go to the settings page and click on "Reset Password"...',
171
+ similarity_score: 0.95,
172
+ chunk_index: 12
173
+ },
174
+ {
175
+ document_id: '1',
176
+ document_title: 'User Guide - Getting Started',
177
+ chunk_content: 'Password reset emails are sent to your registered email address...',
178
+ similarity_score: 0.87,
179
+ chunk_index: 13
180
+ },
181
+ {
182
+ document_id: '3',
183
+ document_title: 'React Components Library',
184
+ chunk_content: 'The PasswordReset component handles user password reset functionality...',
185
+ similarity_score: 0.72,
186
+ chunk_index: 45
187
+ }
188
+ ],
189
+ search_time: 0.234,
190
+ total_results: 3
191
+ }
192
+
193
+ const providers = [
194
+ { value: 'all', label: 'All Providers' },
195
+ { value: 'openai', label: 'OpenAI' },
196
+ { value: 'anthropic', label: 'Anthropic' },
197
+ { value: 'local', label: 'Local' },
198
+ { value: 'custom', label: 'Custom' }
199
+ ]
200
+
201
+ const statusOptions = [
202
+ { value: 'all', label: 'All Statuses' },
203
+ { value: 'active', label: 'Active' },
204
+ { value: 'inactive', label: 'Inactive' }
205
+ ]
206
+
207
+ const filteredModels = (embeddings || []).filter(embedding => {
208
+ const matchesSearch = embedding.content?.toLowerCase().includes(searchTerm.toLowerCase()) ||
209
+ (embedding.metadata?.source && embedding.metadata.source.toLowerCase().includes(searchTerm.toLowerCase()))
210
+ const matchesProvider = selectedProvider === 'all' || embedding.metadata?.source === selectedProvider
211
+ const matchesStatus = selectedStatus === 'all' ||
212
+ (selectedStatus === 'active' && true) || // All embeddings are considered active
213
+ (selectedStatus === 'inactive' && false)
214
+ return matchesSearch && matchesProvider && matchesStatus
215
+ })
216
+
217
+ // Helper functions
218
+ const getProviderBadgeColor = (provider: string) => {
219
+ switch (provider) {
220
+ case 'openai':
221
+ return 'bg-green-100 text-green-800'
222
+ case 'anthropic':
223
+ return 'bg-blue-100 text-blue-800'
224
+ case 'local':
225
+ return 'bg-purple-100 text-purple-800'
226
+ case 'custom':
227
+ return 'bg-orange-100 text-orange-800'
228
+ default:
229
+ return 'bg-slate-100 text-slate-800'
230
+ }
231
+ }
232
+
233
+ const getStatusBadgeColor = (isActive: boolean) => {
234
+ return isActive ? 'bg-green-100 text-green-800' : 'bg-slate-100 text-slate-800'
235
+ }
236
+
237
+ const handleSort = (key: string) => {
238
+ if (sortKey === key) {
239
+ setSortDirection(sortDirection === 'asc' ? 'desc' : 'asc')
240
+ } else {
241
+ setSortKey(key)
242
+ setSortDirection('asc')
243
+ }
244
+ }
245
+
246
+ const handleRowClick = (model: EmbeddingModel) => {
247
+ navigate(`/spine-framework/admin/configs/embeddings/${model.id}`)
248
+ }
249
+
250
+ // Sort models
251
+ const sortedModels = [...filteredModels].sort((a, b) => {
252
+ let aValue: any = a[sortKey as keyof EmbeddingModel]
253
+ let bValue: any = b[sortKey as keyof EmbeddingModel]
254
+
255
+ if (typeof aValue === 'string') {
256
+ return sortDirection === 'asc'
257
+ ? aValue.localeCompare(bValue)
258
+ : bValue.localeCompare(aValue)
259
+ }
260
+
261
+ if (typeof aValue === 'number') {
262
+ return sortDirection === 'asc' ? aValue - bValue : bValue - aValue
263
+ }
264
+
265
+ return 0
266
+ })
267
+
268
+ const statsCards = [
269
+ {
270
+ title: 'Total Embeddings',
271
+ value: (embeddings || []).length,
272
+ icon: FileText,
273
+ iconColor: 'text-blue-500'
274
+ },
275
+ {
276
+ title: 'Active',
277
+ value: (embeddings || []).filter(m => m.is_active).length,
278
+ icon: CheckCircle,
279
+ iconColor: 'text-green-500'
280
+ },
281
+ {
282
+ title: 'Documents Processed',
283
+ value: (embeddings || []).length, // Simplified count since embeddings table structure is different
284
+ icon: BarChart3,
285
+ iconColor: 'text-orange-500'
286
+ },
287
+ {
288
+ title: 'Last Updated',
289
+ value: (embeddings || []).length > 0 ? 'Just now' : 'Never',
290
+ icon: Box,
291
+ iconColor: 'text-purple-500'
292
+ }
293
+ ]
294
+
295
+ const filters = [
296
+ {
297
+ label: 'Provider',
298
+ value: selectedProvider,
299
+ options: providers,
300
+ onChange: setSelectedProvider
301
+ },
302
+ {
303
+ label: 'Status',
304
+ value: selectedStatus,
305
+ options: statusOptions,
306
+ onChange: setSelectedStatus
307
+ }
308
+ ]
309
+
310
+ return (
311
+ <AdminListPage
312
+ title="Embeddings"
313
+ description="Manage embedding models and document indexes"
314
+ newButtonText="New Model"
315
+ newButtonHref="/spine-framework/admin/configs/embeddings/new"
316
+ statsCards={statsCards}
317
+ searchPlaceholder="Search models..."
318
+ searchValue={searchTerm}
319
+ onSearchChange={setSearchTerm}
320
+ filters={filters}
321
+ loading={false}
322
+ emptyMessage="No embedding models found"
323
+ emptyIcon={FileText}
324
+ >
325
+ {sortedModels.length === 0 ? (
326
+ <div className="p-8 text-center">
327
+ <FileText className="mx-auto h-12 w-12 text-slate-400" />
328
+ <h3 className="mt-2 text-sm font-medium text-slate-900">No models found</h3>
329
+ <p className="mt-1 text-sm text-slate-500">
330
+ Try adjusting your search or filters
331
+ </p>
332
+ </div>
333
+ ) : (
334
+ <table className="min-w-full divide-y divide-slate-200">
335
+ <thead className="bg-slate-50">
336
+ <tr>
337
+ <SortableTableHeader
338
+ title="Content"
339
+ sortKey="content"
340
+ currentSortKey={sortKey}
341
+ currentSortDirection={sortDirection}
342
+ onSort={handleSort}
343
+ />
344
+ <SortableTableHeader
345
+ title="Source/Type"
346
+ sortKey="metadata.source"
347
+ currentSortKey={sortKey}
348
+ currentSortDirection={sortDirection}
349
+ onSort={handleSort}
350
+ />
351
+ <SortableTableHeader
352
+ title="Status"
353
+ sortKey="status"
354
+ currentSortKey={sortKey}
355
+ currentSortDirection={sortDirection}
356
+ onSort={handleSort}
357
+ />
358
+ <SortableTableHeader
359
+ title="Dimensions"
360
+ sortKey="embedding"
361
+ currentSortKey={sortKey}
362
+ currentSortDirection={sortDirection}
363
+ onSort={handleSort}
364
+ />
365
+ <SortableTableHeader
366
+ title="Created"
367
+ sortKey="created_at"
368
+ currentSortKey={sortKey}
369
+ currentSortDirection={sortDirection}
370
+ onSort={handleSort}
371
+ />
372
+ </tr>
373
+ </thead>
374
+ <tbody className="bg-white divide-y divide-slate-200">
375
+ {sortedModels.map((model) => (
376
+ <tr
377
+ key={model.id}
378
+ className="hover:bg-slate-50 cursor-pointer transition-colors"
379
+ onClick={() => handleRowClick(model)}
380
+ >
381
+ <td className="px-6 py-4 whitespace-nowrap">
382
+ <div>
383
+ <div className="font-medium text-slate-900">
384
+ <span className="text-accent-blue hover:text-navy">
385
+ {model.content?.substring(0, 60)}...
386
+ </span>
387
+ </div>
388
+ <div className="text-sm text-slate-500">
389
+ Chunk {model.chunk_index} • {model.metadata?.type}
390
+ </div>
391
+ </div>
392
+ </td>
393
+ <td className="px-6 py-4 whitespace-nowrap">
394
+ <div className="space-y-1">
395
+ <Badge variant={getProviderBadgeColor(model.metadata?.source) as any}>
396
+ {model.metadata?.source}
397
+ </Badge>
398
+ <div className="text-sm text-slate-900 font-mono">{model.metadata?.language}</div>
399
+ </div>
400
+ </td>
401
+ <td className="px-6 py-4 whitespace-nowrap">
402
+ <Badge variant="success">
403
+ Active
404
+ </Badge>
405
+ </td>
406
+ <td className="px-6 py-4 whitespace-nowrap">
407
+ <div>
408
+ <div className="text-sm text-slate-900">1 chunk</div>
409
+ <div className="text-xs text-slate-500">
410
+ {model.embedding?.length} dimensions
411
+ </div>
412
+ </div>
413
+ </td>
414
+ <td className="px-6 py-4 whitespace-nowrap text-sm text-slate-500">
415
+ {formatDateTime(model.created_at)}
416
+ </td>
417
+ </tr>
418
+ ))}
419
+ </tbody>
420
+ </table>
421
+ )}
422
+ </AdminListPage>
423
+ )
424
+ }
@@ -0,0 +1,176 @@
1
+ /**
2
+ * @module src/pages/admin/ExtendedShadcnTestPage
3
+ * @audience installer
4
+ * @layer frontend-page
5
+ * @stability testing
6
+ *
7
+ * Extended test page with more shadcn components to identify problematic imports.
8
+ */
9
+
10
+ import { useState } from 'react'
11
+ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../../components/ui/card'
12
+ import { Button } from '../../components/ui/button'
13
+ import { Badge } from '../../components/ui/badge'
14
+ import { Input } from '../../components/ui/input'
15
+ import { Label } from '../../components/ui/label'
16
+ import {
17
+ Select,
18
+ SelectContent,
19
+ SelectItem,
20
+ SelectTrigger,
21
+ SelectValue,
22
+ } from '../../components/ui/select'
23
+ import { Checkbox } from '../../components/ui/checkbox'
24
+
25
+ export function ExtendedShadcnTestPage() {
26
+ const [count, setCount] = useState(0)
27
+ const [text, setText] = useState('')
28
+ const [selected, setSelected] = useState('')
29
+ const [checked, setChecked] = useState(false)
30
+
31
+ return (
32
+ <div className="flex-1 space-y-6 p-8 pt-6">
33
+ <div className="space-y-2">
34
+ <h1 className="text-3xl font-bold tracking-tight">Extended shadcn Test</h1>
35
+ <p className="text-muted-foreground">
36
+ Testing 7 shadcn components: Card, Button, Badge, Input, Label, Select, Checkbox
37
+ </p>
38
+ </div>
39
+
40
+ <div className="grid gap-6 md:grid-cols-2">
41
+ <Card>
42
+ <CardHeader>
43
+ <CardTitle>Form Controls</CardTitle>
44
+ <CardDescription>Testing Select and Checkbox</CardDescription>
45
+ </CardHeader>
46
+ <CardContent className="space-y-4">
47
+ <div className="space-y-2">
48
+ <Label htmlFor="select-demo">Select Demo</Label>
49
+ <Select value={selected} onValueChange={setSelected}>
50
+ <SelectTrigger id="select-demo">
51
+ <SelectValue placeholder="Choose an option" />
52
+ </SelectTrigger>
53
+ <SelectContent>
54
+ <SelectItem value="option1">Option 1</SelectItem>
55
+ <SelectItem value="option2">Option 2</SelectItem>
56
+ <SelectItem value="option3">Option 3</SelectItem>
57
+ </SelectContent>
58
+ </Select>
59
+ </div>
60
+
61
+ <div className="flex items-center space-x-2">
62
+ <Checkbox
63
+ id="checkbox-demo"
64
+ checked={checked}
65
+ onCheckedChange={(checked) => setChecked(checked as boolean)}
66
+ />
67
+ <Label htmlFor="checkbox-demo">
68
+ Enable notifications
69
+ </Label>
70
+ </div>
71
+
72
+ <div className="text-sm text-muted-foreground">
73
+ Selected: {selected || 'none'}<br/>
74
+ Checked: {checked ? 'yes' : 'no'}
75
+ </div>
76
+ </CardContent>
77
+ </Card>
78
+
79
+ <Card>
80
+ <CardHeader>
81
+ <CardTitle>Interactive Demo</CardTitle>
82
+ <CardDescription>Combining multiple components</CardDescription>
83
+ </CardHeader>
84
+ <CardContent className="space-y-4">
85
+ <div className="space-y-2">
86
+ <Label htmlFor="input-demo">Text Input</Label>
87
+ <Input
88
+ id="input-demo"
89
+ placeholder="Type something..."
90
+ value={text}
91
+ onChange={(e) => setText(e.target.value)}
92
+ />
93
+ </div>
94
+
95
+ <div className="flex gap-2">
96
+ <Button onClick={() => setCount(count + 1)}>
97
+ Add Count
98
+ </Button>
99
+ <Button variant="outline" onClick={() => setCount(0)}>
100
+ Reset
101
+ </Button>
102
+ </div>
103
+
104
+ <div className="flex gap-2">
105
+ <Badge>Count: {count}</Badge>
106
+ <Badge variant={checked ? "default" : "secondary"}>
107
+ {checked ? "Active" : "Inactive"}
108
+ </Badge>
109
+ </div>
110
+ </CardContent>
111
+ </Card>
112
+ </div>
113
+
114
+ <Card>
115
+ <CardHeader>
116
+ <CardTitle>Combined Component Test</CardTitle>
117
+ <CardDescription>All components working together</CardDescription>
118
+ </CardHeader>
119
+ <CardContent className="space-y-4">
120
+ <div className="grid gap-4 md:grid-cols-3">
121
+ <div className="space-y-2">
122
+ <Label htmlFor="combined-input">Your Name</Label>
123
+ <Input
124
+ id="combined-input"
125
+ placeholder="Enter name"
126
+ value={text}
127
+ onChange={(e) => setText(e.target.value)}
128
+ />
129
+ </div>
130
+
131
+ <div className="space-y-2">
132
+ <Label htmlFor="combined-select">Role</Label>
133
+ <Select value={selected} onValueChange={setSelected}>
134
+ <SelectTrigger id="combined-select">
135
+ <SelectValue placeholder="Select role" />
136
+ </SelectTrigger>
137
+ <SelectContent>
138
+ <SelectItem value="admin">Admin</SelectItem>
139
+ <SelectItem value="user">User</SelectItem>
140
+ <SelectItem value="guest">Guest</SelectItem>
141
+ </SelectContent>
142
+ </Select>
143
+ </div>
144
+
145
+ <div className="flex items-end">
146
+ <Button
147
+ onClick={() => setCount(count + 1)}
148
+ disabled={!text || !selected}
149
+ className="w-full"
150
+ >
151
+ Submit ({count})
152
+ </Button>
153
+ </div>
154
+ </div>
155
+
156
+ <div className="flex items-center space-x-4">
157
+ <div className="flex items-center space-x-2">
158
+ <Checkbox
159
+ id="agree-terms"
160
+ checked={checked}
161
+ onCheckedChange={(checked) => setChecked(checked as boolean)}
162
+ />
163
+ <Label htmlFor="agree-terms">
164
+ I agree to the terms
165
+ </Label>
166
+ </div>
167
+
168
+ <Badge variant={checked ? "default" : "outline"}>
169
+ {checked ? "Ready" : "Not Ready"}
170
+ </Badge>
171
+ </div>
172
+ </CardContent>
173
+ </Card>
174
+ </div>
175
+ )
176
+ }