spine-framework 0.3.145 → 0.4.1

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 (451) hide show
  1. package/.env.example +76 -0
  2. package/.framework/.spine-manifest.json +19 -0
  3. package/.framework/cli/commands/agents.ts +61 -33
  4. package/.framework/cli/commands/auth.ts +60 -28
  5. package/.framework/cli/commands/create-app.ts +212 -80
  6. package/.framework/cli/commands/dev.ts +184 -68
  7. package/.framework/cli/commands/doctor.ts +324 -152
  8. package/.framework/cli/commands/generate.ts +119 -68
  9. package/.framework/cli/commands/init.ts +141 -242
  10. package/.framework/cli/commands/install-app.ts +1336 -314
  11. package/.framework/cli/commands/items.ts +31 -29
  12. package/.framework/cli/commands/migrate.ts +299 -156
  13. package/.framework/cli/commands/migrations.ts +62 -30
  14. package/.framework/cli/commands/pipelines.ts +31 -29
  15. package/.framework/cli/commands/status.ts +105 -45
  16. package/.framework/cli/commands/system.ts +47 -42
  17. package/.framework/cli/commands/test.ts +161 -102
  18. package/.framework/cli/commands/upgrade.ts +260 -0
  19. package/.framework/cli/commands/validate-app.ts +517 -161
  20. package/.framework/cli/context.ts +117 -85
  21. package/.framework/cli/env-loader.ts +74 -43
  22. package/.framework/cli/index.ts +70 -46
  23. package/.framework/cli/lib/project-files.ts +404 -0
  24. package/.framework/docs/guides/testing-guide.md +1 -1
  25. package/.framework/docs/runtime-types.md +72 -72
  26. package/.framework/functions/_shared/access.ts +84 -0
  27. package/.framework/functions/_shared/agent-runner.ts +5067 -1026
  28. package/.framework/functions/_shared/app-manifest.ts +214 -94
  29. package/.framework/functions/_shared/ast.ts +214 -0
  30. package/.framework/functions/_shared/audit.ts +91 -55
  31. package/.framework/functions/_shared/cil.ts +368 -127
  32. package/.framework/functions/_shared/db.ts +337 -68
  33. package/.framework/functions/_shared/funnel.ts +228 -0
  34. package/.framework/functions/_shared/geo.ts +105 -0
  35. package/.framework/functions/_shared/hash-api-key.ts +94 -17
  36. package/.framework/functions/_shared/index.ts +22 -224
  37. package/.framework/functions/_shared/kb.ts +832 -58
  38. package/.framework/functions/_shared/llm.ts +118 -18
  39. package/.framework/functions/_shared/logging.ts +317 -19
  40. package/.framework/functions/_shared/middleware.ts +701 -131
  41. package/.framework/functions/_shared/notify.ts +70 -0
  42. package/.framework/functions/_shared/outcomes.ts +34 -19
  43. package/.framework/functions/_shared/permissions.ts +501 -315
  44. package/.framework/functions/_shared/pipeline-runner.ts +704 -155
  45. package/.framework/functions/_shared/principal.ts +436 -263
  46. package/.framework/functions/_shared/rate-limit.ts +233 -0
  47. package/.framework/functions/_shared/resolve-credentials.ts +86 -19
  48. package/.framework/functions/_shared/resolve-ids.ts +203 -139
  49. package/.framework/functions/_shared/retry-deliveries.ts +51 -16
  50. package/.framework/functions/_shared/schema-utils.ts +602 -521
  51. package/.framework/functions/_shared/security.ts +345 -0
  52. package/.framework/functions/_shared/testing.ts +197 -172
  53. package/.framework/functions/_shared/tracing.ts +351 -21
  54. package/.framework/functions/_shared/trigger-engine.ts +425 -136
  55. package/.framework/functions/_shared/webhook-registration.ts +71 -70
  56. package/.framework/functions/_shared/webhook-registry.ts +126 -83
  57. package/.framework/functions/account-nodes.ts +30 -30
  58. package/.framework/functions/adapters/generic-webhook-inbound.ts +49 -16
  59. package/.framework/functions/adapters/generic-webhook-outbound.ts +17 -17
  60. package/.framework/functions/adapters/openai-outbound.ts +15 -16
  61. package/.framework/functions/admin-data.ts +596 -173
  62. package/.framework/functions/admin-funnel.ts +64 -60
  63. package/.framework/functions/admin-install-funnel.ts +84 -66
  64. package/.framework/functions/admin-signals.ts +69 -51
  65. package/.framework/functions/ai-agents.ts +431 -106
  66. package/.framework/functions/ai-interactions.ts +186 -112
  67. package/.framework/functions/api-keys.ts +107 -107
  68. package/.framework/functions/apps.ts +154 -136
  69. package/.framework/functions/auth.ts +83 -65
  70. package/.framework/functions/cil-agent-ingest.ts +189 -232
  71. package/.framework/functions/cil-agent.ts +433 -177
  72. package/.framework/functions/cil-callmap.ts +642 -430
  73. package/.framework/functions/cil-config.ts +139 -135
  74. package/.framework/functions/cil-context.ts +214 -127
  75. package/.framework/functions/cil-doc.ts +587 -458
  76. package/.framework/functions/cil-embeddings.ts +453 -364
  77. package/.framework/functions/cil-graph.ts +427 -142
  78. package/.framework/functions/cil-ingest.ts +1418 -1154
  79. package/.framework/functions/cil-pipeline.ts +276 -21
  80. package/.framework/functions/cil-project.ts +659 -132
  81. package/.framework/functions/cil-validate.ts +198 -164
  82. package/.framework/functions/debug-auth.ts +57 -55
  83. package/.framework/functions/deliveries.ts +80 -21
  84. package/.framework/functions/embeddings.ts +1023 -318
  85. package/.framework/functions/eval-harness.ts +146 -108
  86. package/.framework/functions/integration-outbound.ts +205 -75
  87. package/.framework/functions/integration-routes.ts +128 -23
  88. package/.framework/functions/integrations.ts +125 -100
  89. package/.framework/functions/invites.ts +1095 -460
  90. package/.framework/functions/item-progress.ts +158 -102
  91. package/.framework/functions/kb.ts +34 -10
  92. package/.framework/functions/logs.ts +133 -133
  93. package/.framework/functions/observability.ts +152 -122
  94. package/.framework/functions/pipeline-executions.ts +147 -132
  95. package/.framework/functions/pipelines.ts +134 -119
  96. package/.framework/functions/prompt-configs.ts +96 -80
  97. package/.framework/functions/roles.ts +112 -82
  98. package/.framework/functions/security.ts +450 -0
  99. package/.framework/functions/system-cron.ts +117 -80
  100. package/.framework/functions/system.ts +158 -98
  101. package/.framework/functions/tests.ts +29 -29
  102. package/.framework/functions/timers.ts +94 -95
  103. package/.framework/functions/trigger-scheduler.ts +10 -0
  104. package/.framework/functions/triggers.ts +179 -149
  105. package/.framework/functions/types.ts +137 -125
  106. package/.framework/mcp/index.ts +133 -0
  107. package/.framework/mcp/load-env.ts +60 -0
  108. package/.framework/mcp/shared/app-manifest.ts +275 -0
  109. package/.framework/mcp/shared/db.ts +477 -0
  110. package/.framework/mcp/shared/kb.ts +118 -0
  111. package/.framework/mcp/tools/architect.ts +431 -0
  112. package/.framework/mcp/tools/cil/context.ts +345 -0
  113. package/.framework/mcp/tools/cil/graph.ts +242 -0
  114. package/.framework/mcp/tools/cil/ingest.ts +1217 -0
  115. package/.framework/mcp/tools/cil/pipeline-orchestrator.ts +693 -0
  116. package/.framework/mcp/tools/cil/pipeline.ts +767 -0
  117. package/.framework/mcp/tools/cil/project.ts +791 -0
  118. package/.framework/mcp/tools/cil/retrieval.ts +336 -0
  119. package/.framework/mcp/tools/cil/search-core.ts +454 -0
  120. package/.framework/mcp/tools/cil/search.ts +97 -0
  121. package/.framework/mcp/tools/cil/suggest.ts +186 -0
  122. package/.framework/mcp/tools/cil/validate.ts +1369 -0
  123. package/.framework/mcp/tools/kb/delete.ts +139 -0
  124. package/.framework/mcp/tools/kb/index.ts +52 -0
  125. package/.framework/mcp/tools/kb/ingest.ts +84 -0
  126. package/.framework/mcp/tools/kb/list-types.ts +102 -0
  127. package/.framework/mcp/tools/kb/publish.ts +100 -0
  128. package/.framework/mcp/tools/kb/reindex.ts +86 -0
  129. package/.framework/mcp/tools/kb/revoke.ts +85 -0
  130. package/.framework/mcp/tools/kb/search.ts +101 -0
  131. package/.framework/mcp/tools/kb/upsert.ts +125 -0
  132. package/.framework/mcp/tools/observability.ts +510 -0
  133. package/.framework/migrations/001_core_schema.sql +15 -0
  134. package/.framework/migrations/002_core_rls_and_functions.sql +15 -0
  135. package/.framework/migrations/003_core_system_data.sql +16 -1
  136. package/.framework/migrations/004_core_rpc_and_broker.sql +17 -1
  137. package/.framework/migrations/005_core_observability.sql +17 -1
  138. package/.framework/migrations/006_security_hardening_rls.sql +15 -0
  139. package/.framework/migrations/007_kb_article_list.sql +17 -1
  140. package/.framework/migrations/008_items_target.sql +15 -0
  141. package/.framework/migrations/009_roles_slug_unique.sql +15 -0
  142. package/.framework/migrations/010_auth_user_trigger.sql +15 -0
  143. package/.framework/migrations/011_spine_system_account.sql +16 -0
  144. package/.framework/migrations/012_service_role_grants.sql +16 -0
  145. package/.framework/migrations/013_get_account_apps_role_filter.sql +15 -0
  146. package/.framework/migrations/014_apps_required_roles.sql +16 -0
  147. package/.framework/migrations/015_types_kind_slug_unique.sql +15 -0
  148. package/.framework/migrations/016_cil_types.sql +281 -0
  149. package/.framework/migrations/017_cil_stable_ids.sql +37 -0
  150. package/.framework/migrations/018_runtime_tables.sql +129 -0
  151. package/.framework/migrations/019_agent_prompt_columns.sql +56 -0
  152. package/.framework/migrations/020_schema_reconciliation.sql +67 -0
  153. package/.framework/migrations/021_kb_embedding_lifecycle.sql +31 -0
  154. package/.framework/migrations/032_cil_status_migration.sql +73 -0
  155. package/.framework/migrations/033_cil_versioning.sql +73 -0
  156. package/.framework/migrations/034_match_embeddings_knn.sql +115 -0
  157. package/.framework/migrations/035_rate_limits.sql +55 -0
  158. package/.framework/migrations/036_demo_record_flags.sql +72 -0
  159. package/.framework/migrations/037_kb_types_canonical.sql +244 -0
  160. package/.framework/migrations/038_drop_demo_record_flags.sql +38 -0
  161. package/.framework/migrations/042_registration_hierarchy.sql +309 -0
  162. package/.framework/migrations/043_policy_actor_cleanup.sql +39 -0
  163. package/.framework/migrations/044_match_embeddings_filtered_knn.sql +151 -0
  164. package/.framework/migrations/045_security_critical_rls.sql +139 -0
  165. package/.framework/migrations/046_security_missing_rls.sql +79 -0
  166. package/.framework/migrations/047_people_updated_by.sql +27 -0
  167. package/.framework/migrations/048_watcher_last_seen_at.sql +24 -0
  168. package/.framework/migrations/049_security_blocklist.sql +148 -0
  169. package/.framework/migrations/050_notifications.sql +49 -0
  170. package/.framework/migrations/051_message_agent_fields.sql +74 -0
  171. package/.framework/migrations/052_registration_security.sql +421 -0
  172. package/.framework/migrations/053_builtin_action_seeds.sql +66 -0
  173. package/.framework/migrations/054_kb_ingest_lease.sql +157 -0
  174. package/.framework/migrations/055_type_id_drift_reconciliation.sql +33 -0
  175. package/.framework/migrations/056_slug_column_reconciliation.sql +38 -0
  176. package/.framework/migrations/057_pipelines_slug_identity.sql +14 -0
  177. package/.framework/migrations/058_account_data_field_declarations.sql +53 -0
  178. package/.framework/migrations/059_registration_placement_fixes.sql +269 -0
  179. package/.framework/migrations/060_account_person_record_permissions.sql +38 -0
  180. package/.framework/migrations/061_fk_dedup.sql +32 -0
  181. package/.framework/public/spine-logo.svg +10 -3
  182. package/.framework/scripts/app-install-cli.ts +190 -93
  183. package/.framework/scripts/assemble-frontend.sh +127 -44
  184. package/.framework/scripts/assemble-functions.sh +128 -30
  185. package/.framework/scripts/boundary-check.sh +6 -2
  186. package/.framework/scripts/build-manifest.sh +24 -68
  187. package/.framework/scripts/check-core-integrity.sh +15 -76
  188. package/.framework/scripts/checksum-manifest.mts +343 -0
  189. package/.framework/scripts/cil-migrate-markers.ts +403 -0
  190. package/.framework/scripts/fix-cil-markers.mjs +176 -0
  191. package/.framework/scripts/verify-integrity.sh +21 -57
  192. package/.framework/scripts/verify-manifest.mts +305 -0
  193. package/.framework/seeds/types/funnel_signal_use.json +74 -21
  194. package/.framework/seeds/types/spine_instance.json +73 -21
  195. package/.framework/src/App.tsx +118 -72
  196. package/.framework/src/apps/admin/index.tsx +855 -58
  197. package/.framework/src/components/AppWrapper.tsx +43 -45
  198. package/.framework/src/components/CustomAppLoader.tsx +160 -116
  199. package/.framework/src/components/admin/AdminListPage.tsx +46 -44
  200. package/.framework/src/components/admin/AdminSidebar.tsx +57 -47
  201. package/.framework/src/components/admin/AdminStatsCard.tsx +46 -44
  202. package/.framework/src/components/admin/PageInstructions.tsx +98 -2
  203. package/.framework/src/components/admin/SortableTableHeader.tsx +44 -45
  204. package/.framework/src/components/app-shell/GenericAppShell.tsx +64 -65
  205. package/.framework/src/components/app-shell/GenericDetailPage.tsx +44 -47
  206. package/.framework/src/components/app-shell/GenericListPage.tsx +45 -49
  207. package/.framework/src/components/app-sidebar.tsx +42 -45
  208. package/.framework/src/components/auth/ProtectedRoute.tsx +48 -41
  209. package/.framework/src/components/auth/TurnstileWidget.tsx +27 -0
  210. package/.framework/src/components/kb/KBArticleEditor.tsx +231 -22
  211. package/.framework/src/components/kb/KBArticleList.tsx +251 -10
  212. package/.framework/src/components/layout/AppShell.tsx +51 -45
  213. package/.framework/src/components/layout/Header.tsx +42 -43
  214. package/.framework/src/components/layout/Layout.tsx +46 -46
  215. package/.framework/src/components/layout/Sidebar.tsx +196 -96
  216. package/.framework/src/components/runtime/DataDetailHeader.tsx +55 -30
  217. package/.framework/src/components/runtime/DataDetailPage.tsx +31 -269
  218. package/.framework/src/components/runtime/DataFilters.tsx +49 -74
  219. package/.framework/src/components/runtime/DataHeader.tsx +53 -32
  220. package/.framework/src/components/runtime/DataListPage.tsx +51 -155
  221. package/.framework/src/components/runtime/DataStats.tsx +66 -44
  222. package/.framework/src/components/runtime/DataTable.tsx +49 -149
  223. package/.framework/src/components/runtime/SchemaDetailForm.tsx +45 -75
  224. package/.framework/src/components/runtime/index.ts +119 -16
  225. package/.framework/src/components/search-form.tsx +46 -29
  226. package/.framework/src/components/shared/AgentView.tsx +65 -48
  227. package/.framework/src/components/shared/FieldRenderer.tsx +144 -50
  228. package/.framework/src/components/shared/InviteManager.tsx +207 -97
  229. package/.framework/src/components/shared/MemberList.tsx +97 -0
  230. package/.framework/src/components/shared/SchemaFields.tsx +107 -86
  231. package/.framework/src/components/ui/DataTable.tsx +80 -68
  232. package/.framework/src/components/ui/Form.tsx +157 -146
  233. package/.framework/src/components/ui/ItemCard.tsx +74 -67
  234. package/.framework/src/components/ui/ItemListView.tsx +73 -68
  235. package/.framework/src/components/ui/LoadingSpinner.tsx +43 -48
  236. package/.framework/src/components/ui/Modal.tsx +78 -68
  237. package/.framework/src/components/ui/RichTextEditor.tsx +89 -69
  238. package/.framework/src/components/ui/accordion.tsx +85 -86
  239. package/.framework/src/components/ui/alert-dialog.tsx +197 -184
  240. package/.framework/src/components/ui/alert.tsx +105 -94
  241. package/.framework/src/components/ui/aspect-ratio.tsx +57 -43
  242. package/.framework/src/components/ui/avatar.tsx +122 -107
  243. package/.framework/src/components/ui/badge.tsx +60 -55
  244. package/.framework/src/components/ui/breadcrumb.tsx +127 -128
  245. package/.framework/src/components/ui/button-group.tsx +86 -72
  246. package/.framework/src/components/ui/button.tsx +71 -50
  247. package/.framework/src/components/ui/calendar.tsx +72 -57
  248. package/.framework/src/components/ui/card.tsx +136 -129
  249. package/.framework/src/components/ui/carousel.tsx +226 -107
  250. package/.framework/src/components/ui/chart.tsx +252 -147
  251. package/.framework/src/components/ui/checkbox.tsx +43 -44
  252. package/.framework/src/components/ui/collapsible.tsx +86 -71
  253. package/.framework/src/components/ui/combobox.tsx +282 -249
  254. package/.framework/src/components/ui/command.tsx +158 -146
  255. package/.framework/src/components/ui/context-menu.tsx +239 -240
  256. package/.framework/src/components/ui/dialog.tsx +174 -157
  257. package/.framework/src/components/ui/direction.tsx +72 -56
  258. package/.framework/src/components/ui/drawer.tsx +168 -169
  259. package/.framework/src/components/ui/dropdown-menu.tsx +254 -223
  260. package/.framework/src/components/ui/empty.tsx +131 -120
  261. package/.framework/src/components/ui/field.tsx +205 -173
  262. package/.framework/src/components/ui/hover-card.tsx +71 -72
  263. package/.framework/src/components/ui/input-group.tsx +148 -133
  264. package/.framework/src/components/ui/input-otp.tsx +99 -86
  265. package/.framework/src/components/ui/input.tsx +43 -41
  266. package/.framework/src/components/ui/item.tsx +207 -185
  267. package/.framework/src/components/ui/kbd.tsx +57 -56
  268. package/.framework/src/components/ui/label.tsx +45 -41
  269. package/.framework/src/components/ui/menubar.tsx +268 -236
  270. package/.framework/src/components/ui/native-select.tsx +85 -86
  271. package/.framework/src/components/ui/navigation-menu.tsx +166 -156
  272. package/.framework/src/components/ui/pagination.tsx +131 -141
  273. package/.framework/src/components/ui/popover.tsx +125 -128
  274. package/.framework/src/components/ui/progress.tsx +47 -44
  275. package/.framework/src/components/ui/radio-group.tsx +60 -55
  276. package/.framework/src/components/ui/resizable.tsx +85 -72
  277. package/.framework/src/components/ui/scroll-area.tsx +57 -58
  278. package/.framework/src/components/ui/select.tsx +182 -169
  279. package/.framework/src/components/ui/separator.tsx +42 -43
  280. package/.framework/src/components/ui/sheet.tsx +170 -159
  281. package/.framework/src/components/ui/sidebar.tsx +395 -398
  282. package/.framework/src/components/ui/skeleton.tsx +42 -43
  283. package/.framework/src/components/ui/slider.tsx +61 -44
  284. package/.framework/src/components/ui/sonner.tsx +44 -44
  285. package/.framework/src/components/ui/spinner.tsx +47 -42
  286. package/.framework/src/components/ui/switch.tsx +56 -42
  287. package/.framework/src/components/ui/table-primitives.tsx +272 -132
  288. package/.framework/src/components/ui/table.tsx +140 -142
  289. package/.framework/src/components/ui/tabs.tsx +110 -93
  290. package/.framework/src/components/ui/textarea.tsx +43 -44
  291. package/.framework/src/components/ui/toggle-group.tsx +87 -71
  292. package/.framework/src/components/ui/toggle.tsx +56 -56
  293. package/.framework/src/components/ui/tooltip.tsx +99 -85
  294. package/.framework/src/contexts/AppContext.tsx +166 -114
  295. package/.framework/src/contexts/AuthContext.tsx +232 -137
  296. package/.framework/src/hooks/use-mobile.ts +43 -44
  297. package/.framework/src/hooks/useApi.ts +185 -172
  298. package/.framework/src/hooks/useAppPath.ts +31 -29
  299. package/.framework/src/hooks/useApps.ts +77 -42
  300. package/.framework/src/hooks/useEntityList.ts +66 -29
  301. package/.framework/src/hooks/useEntityRecord.ts +76 -32
  302. package/.framework/src/hooks/useForm.ts +62 -30
  303. package/.framework/src/hooks/useListSchema.ts +60 -43
  304. package/.framework/src/hooks/useSchemaRecord.ts +115 -95
  305. package/.framework/src/lib/api.ts +258 -134
  306. package/.framework/src/lib/registration.ts +181 -0
  307. package/.framework/src/lib/supabase.ts +118 -81
  308. package/.framework/src/lib/utils.ts +266 -266
  309. package/.framework/src/main.tsx +43 -44
  310. package/.framework/src/pages/DashboardPage.tsx +44 -43
  311. package/.framework/src/pages/NoAppPage.tsx +50 -0
  312. package/.framework/src/pages/NotFoundPage.tsx +32 -29
  313. package/.framework/src/pages/SetupPage.tsx +34 -33
  314. package/.framework/src/pages/admin/AIAgentDetailPage.tsx +69 -58
  315. package/.framework/src/pages/admin/AIAgentsPage.tsx +43 -40
  316. package/.framework/src/pages/admin/APIKeyDetailPage.tsx +63 -55
  317. package/.framework/src/pages/admin/APIKeysPage.tsx +44 -42
  318. package/.framework/src/pages/admin/AlertsConfigPage.tsx +117 -94
  319. package/.framework/src/pages/admin/AppDetailPage.tsx +48 -42
  320. package/.framework/src/pages/admin/AppsPage.tsx +45 -42
  321. package/.framework/src/pages/admin/DeliveriesPage.tsx +49 -17
  322. package/.framework/src/pages/admin/DesignedPage.tsx +31 -30
  323. package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +58 -0
  324. package/.framework/src/pages/admin/EmbeddingsPage.tsx +49 -0
  325. package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +31 -29
  326. package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +46 -29
  327. package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -29
  328. package/.framework/src/pages/admin/IntegrationDetailPage.tsx +68 -55
  329. package/.framework/src/pages/admin/IntegrationsPage.tsx +45 -42
  330. package/.framework/src/pages/admin/InvitesPage.tsx +60 -44
  331. package/.framework/src/pages/admin/LogsPage.tsx +87 -137
  332. package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +31 -29
  333. package/.framework/src/pages/admin/ObservabilityDashboard.tsx +150 -89
  334. package/.framework/src/pages/admin/PipelineDetailPage.tsx +77 -104
  335. package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +44 -43
  336. package/.framework/src/pages/admin/PipelinesPage.tsx +59 -145
  337. package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +53 -42
  338. package/.framework/src/pages/admin/PromptConfigsPage.tsx +47 -117
  339. package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +31 -44
  340. package/.framework/src/pages/admin/RoleDetailPage.tsx +49 -92
  341. package/.framework/src/pages/admin/RolesPage.tsx +47 -164
  342. package/.framework/src/pages/admin/SecurityPage.tsx +310 -0
  343. package/.framework/src/pages/admin/SelectTestPage.tsx +30 -32
  344. package/.framework/src/pages/admin/ShadcnTestPage.tsx +37 -44
  345. package/.framework/src/pages/admin/SimpleDashboard.tsx +32 -44
  346. package/.framework/src/pages/admin/TestRunDetailPage.tsx +97 -44
  347. package/.framework/src/pages/admin/TestingDashboard.tsx +126 -71
  348. package/.framework/src/pages/admin/TimerDetailPage.tsx +67 -55
  349. package/.framework/src/pages/admin/TimersPage.tsx +44 -42
  350. package/.framework/src/pages/admin/TriggerDetailPage.tsx +47 -42
  351. package/.framework/src/pages/admin/TriggersPage.tsx +58 -57
  352. package/.framework/src/pages/admin/TypeDetailPage.tsx +91 -55
  353. package/.framework/src/pages/admin/TypesPage.tsx +45 -42
  354. package/.framework/src/pages/admin/cil/CILAgentPage.tsx +258 -128
  355. package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +127 -123
  356. package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +308 -235
  357. package/.framework/src/pages/admin/cil/CILFileListPage.tsx +159 -110
  358. package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +432 -0
  359. package/.framework/src/pages/admin/cil/CILGraphPage.tsx +200 -178
  360. package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +286 -239
  361. package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +211 -90
  362. package/.framework/src/pages/admin/cil/CILSearchPage.tsx +156 -143
  363. package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +379 -0
  364. package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +337 -0
  365. package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +219 -214
  366. package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
  367. package/.framework/src/pages/auth/AuthConfirmPage.tsx +135 -65
  368. package/.framework/src/pages/auth/ForgotPasswordPage.tsx +39 -31
  369. package/.framework/src/pages/auth/LoginPage.tsx +38 -32
  370. package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -28
  371. package/.framework/src/pages/auth/RegisterPage.tsx +429 -155
  372. package/.framework/src/pages/spine-framework/APIPage.tsx +33 -30
  373. package/.framework/src/pages/spine-framework/CLIPage.tsx +32 -30
  374. package/.framework/src/types/auth.ts +101 -93
  375. package/.framework/src/types/types.ts +283 -262
  376. package/.framework/templates/project.json +87 -0
  377. package/.framework/templates/spine.config.neutral.json +7 -0
  378. package/.framework/tests/api/api-surface.test.ts +381 -0
  379. package/.framework/tests/fixtures/seed.ts +427 -0
  380. package/.framework/tests/fixtures/teardown.ts +228 -0
  381. package/.framework/tests/reporter.ts +351 -0
  382. package/.framework/tests/setup.ts +135 -0
  383. package/.framework/tests/ui/ui-sweep.ts +278 -0
  384. package/.framework/tests/unit/admin-data-logger.test.ts +310 -0
  385. package/.framework/tests/unit/agent-runner.test.ts +2389 -0
  386. package/.framework/tests/unit/ai-interactions.test.ts +81 -0
  387. package/.framework/tests/unit/app-manifest.test.ts +359 -0
  388. package/.framework/tests/unit/assembly-scripts.test.ts +172 -0
  389. package/.framework/tests/unit/cil-determinism.test.ts +85 -0
  390. package/.framework/tests/unit/core-isolation.test.ts +153 -0
  391. package/.framework/tests/unit/funnel-signals.test.ts +135 -0
  392. package/.framework/tests/unit/install-app.test.ts +1759 -0
  393. package/.framework/tests/unit/invites-security.test.ts +572 -0
  394. package/.framework/tests/unit/kb-ingest-lease.test.ts +287 -0
  395. package/.framework/tests/unit/kb-search.test.ts +119 -0
  396. package/.framework/tests/unit/migrate.test.ts +509 -0
  397. package/.framework/tests/unit/notify.test.ts +136 -0
  398. package/.framework/tests/unit/permissions.test.ts +269 -0
  399. package/.framework/tests/unit/pipeline-runner.test.ts +755 -0
  400. package/.framework/tests/unit/principal-cache.test.ts +138 -0
  401. package/.framework/tests/unit/retrieval-golden.test.ts +520 -0
  402. package/.framework/tests/unit/runtime-isolation.test.ts +642 -0
  403. package/.framework/tests/unit/schema-utils.test.ts +225 -0
  404. package/.framework/tests/unit/trigger-engine.test.ts +513 -0
  405. package/.framework/tests/unit/validate-app.test.ts +527 -0
  406. package/README.md +34 -3
  407. package/bin/spine-framework.cjs +1 -0
  408. package/config/tailwind.config.cjs +7 -0
  409. package/config/tsconfig.functions.json +42 -0
  410. package/config/tsconfig.json +37 -9
  411. package/config/vite.config.ts +31 -2
  412. package/netlify.toml +31 -3
  413. package/package.json +46 -29
  414. package/scripts/assemble-frontend.sh +127 -44
  415. package/scripts/assemble-functions.sh +127 -29
  416. package/scripts/boundary-check.sh +6 -2
  417. package/scripts/build-manifest.sh +24 -68
  418. package/scripts/checksum-manifest.mts +345 -0
  419. package/scripts/dev-clean.sh +86 -0
  420. package/scripts/dev-netlify.sh +49 -0
  421. package/scripts/netlify-dev-wrapper.sh +2 -0
  422. package/scripts/verify-install.ts +358 -0
  423. package/scripts/verify-integrity.sh +21 -57
  424. package/scripts/verify-manifest.mts +305 -0
  425. package/templates/project/gitignore +45 -0
  426. package/{config → templates/project}/package-lock.json +22335 -9366
  427. package/vitest.config.ts +46 -0
  428. package/.framework/public/spine.config.json +0 -91
  429. package/config/deno.lock +0 -108
  430. package/config/tsconfig.node.tsbuildinfo +0 -1
  431. package/config/tsconfig.tsbuildinfo +0 -1
  432. package/config/vite.config.d.ts +0 -2
  433. package/custom/.devin/AGENT.md +0 -357
  434. package/custom/.devin/skills/install-app/SKILL.md +0 -39
  435. package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +0 -39
  436. package/custom/.devin/skills/spine-workbench-idea/SKILL.md +0 -36
  437. package/custom/.devin/skills/spine-workbench-implement/SKILL.md +0 -46
  438. package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +0 -28
  439. package/custom/.devin/skills/spine-workbench-plan/SKILL.md +0 -38
  440. package/custom/.devin/workflows/app-install.yaml +0 -83
  441. package/custom/README.md +0 -79
  442. package/docs/README.md +0 -15
  443. package/scripts/app-install-cli.ts +0 -286
  444. package/scripts/check-core-integrity.sh +0 -82
  445. package/scripts/ingest-chunks.cjs +0 -202
  446. package/scripts/kb-chunk-parser.cjs +0 -312
  447. package/scripts/kb-chunk-parser.ts +0 -330
  448. package/scripts/kb-ingest-docs.ts +0 -203
  449. package/scripts/load-test-app-install.ts +0 -484
  450. package/scripts/test-login.js +0 -33
  451. package/spine.config.json +0 -91
@@ -6,63 +6,153 @@
6
6
 
7
7
 
8
8
 
9
- // CIL[BEGIN chunk_id="create-app_module_header_1784071456" type="module_header" identity="module_header" parent="none"]
10
- // CIL[DOC-MACRO purpose="Import dependencies for create-app CLI command"]
11
- // CIL[DOC-RESPONSIBILITY responsibility="Provide imports and utilities for app scaffolding"]
12
- // CIL[DOC-CONTEXT module="create-app-cli" layer="cli" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
13
- // CIL[DOC-CONTRACT inputs="none" outputs="imports" errors="none" side_effects="none"]
14
- // CIL[DOC-MICRO logic_summary="Imports Command type, file system, path, and database modules" notable_decisions="[]"]
15
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
9
+
10
+ // CIL[BEGIN stable_id="~/.framework/cli/commands/create-app.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/cli/commands/create-app.ts"]
11
+ // CIL[DOC-MACRO purpose="Defines the create-app CLI command module, importing dependencies and wiring registration."]
12
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide the create-app command implementation and exports for CLI registration."]
13
+ // CIL[DOC-CONTEXT module="cli/commands/create-app" layer="cli" related_files=".framework/functions/_shared/index.ts"]
14
+ // CIL[DOC-CONTRACT inputs="commander program and CLI arguments" outputs="registered create-app command" errors="none" side_effects="none"]
15
+ // CIL[DOC-MICRO logic_summary="Imports Commander, fs utilities, path helpers, and shared adminDb; re-exports command registration function." notable_decisions="[]"]
16
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
16
17
  // CIL[DOC-STABILITY stability="stable"]
17
- // CIL[DOC-AUDIENCE audience="developer"]
18
- // CIL[DOC-VECTOR type="context" content="Layer: cli. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, \."]
19
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
20
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
21
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
22
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
23
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
18
+ // CIL[DOC-AUDIENCE audience="cli-developers"]
24
19
  import type { Command } from 'commander'
25
20
  import { existsSync, mkdirSync, writeFileSync } from 'fs'
26
21
  import { resolve, dirname } from 'path'
27
22
  import { fileURLToPath } from 'url'
28
23
  import { adminDb } from '../../functions/_shared/index.ts'
24
+ // CIL[DOC-VECTOR type="context" content="purpose='Defines the create-app CLI command module, importing dependencies and wiring registration.'; No verified external callers; imports: .framework/functions/_shared/index.ts"]
25
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
26
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
27
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
28
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
29
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
30
+ // CIL[END stable_id="~/.framework/cli/commands/create-app.ts:module_header:module_header"]
29
31
 
32
+ /**
33
+ * __filename is a constant that holds the resolved file path of the current module, allowing for accurate file system operations and references. It exists to provide a reliable way to access the file's location in the context of ES modules.
34
+ *
35
+ * @sideEffects none
36
+ * @stability stable
37
+ * @calls fileURLToPath
38
+ * @cil-generated
39
+ */
40
+ // CIL[BEGIN stable_id="~/.framework/cli/commands/create-app.ts:__filename:constant" type="constant" identity="__filename" parent="~/.framework/cli/commands/create-app.ts"]
41
+ // CIL[DOC-MACRO purpose="Resolve the current module file path for ES module file system references."]
42
+ // CIL[DOC-RESPONSIBILITY responsibility="Store the absolute file path of this module."]
43
+ // CIL[DOC-CONTEXT module="cli/commands/create-app" layer="cli" related_files=".framework/cli/commands/create-app.ts,.framework/functions/_shared/index.ts"]
44
+ // CIL[DOC-CONTRACT inputs="import.meta.url" outputs="string absolute file path" errors="none" side_effects="none"]
45
+ // CIL[DOC-MICRO logic_summary="Calls fileURLToPath with import.meta.url to produce an absolute path string." notable_decisions="[]"]
46
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
47
+ // CIL[DOC-STABILITY stability="stable"]
30
48
  const __filename = fileURLToPath(import.meta.url)
49
+ // CIL[DOC-VECTOR type="context" content="purpose='Resolve the current module file path for ES module file system references.'; No verified external callers; imports: .framework/functions/_shared/index.ts"]
50
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
51
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
52
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
53
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
54
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
55
+ // CIL[END stable_id="~/.framework/cli/commands/create-app.ts:__filename:constant"]
56
+ /**
57
+ * __dirname is a constant that holds the directory name of the current module, allowing for relative file path resolution. It exists to facilitate file operations within the module's directory context.
58
+ *
59
+ * @sideEffects none
60
+ * @stability stable
61
+ * @calls dirname
62
+ * @cil-generated
63
+ */
64
+ // CIL[BEGIN stable_id="~/.framework/cli/commands/create-app.ts:__dirname:constant" type="constant" identity="__dirname" parent="~/.framework/cli/commands/create-app.ts"]
65
+ // CIL[DOC-MACRO purpose="Resolve the current module directory for relative path resolution."]
66
+ // CIL[DOC-RESPONSIBILITY responsibility="Store the directory path of this module."]
67
+ // CIL[DOC-CONTEXT module="cli/commands/create-app" layer="cli" related_files=".framework/cli/commands/create-app.ts,.framework/functions/_shared/index.ts"]
68
+ // CIL[DOC-CONTRACT inputs="__filename" outputs="string directory path" errors="none" side_effects="none"]
69
+ // CIL[DOC-MICRO logic_summary="Calls dirname on the __filename constant to get the module directory." notable_decisions="[]"]
70
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
71
+ // CIL[DOC-STABILITY stability="stable"]
31
72
  const __dirname = dirname(__filename)
32
- const PROJECT_ROOT = resolve(__dirname, '../../../')
33
- // CIL[END chunk_id="create-app_module_header_1784071456"]
34
- // CIL[BEGIN chunk_id="create-app_totitlecase_1784071456" type="function" identity="toTitleCase" parent="none"]
35
- // CIL[DOC-MACRO purpose="Convert slug to title case format"]
36
- // CIL[DOC-RESPONSIBILITY responsibility="Format slugs as readable display names"]
37
- // CIL[DOC-CONTEXT module="create-app-cli" layer="cli" related_files="[\".framework/src/components/ui/dialog.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
38
- // CIL[DOC-CONTRACT inputs="none" outputs="string" errors="none" side_effects="none"]
39
- // CIL[DOC-MICRO logic_summary="Converts kebab-case to Title Case for display names" notable_decisions="[]"]
40
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
73
+ // CIL[DOC-VECTOR type="context" content="purpose='Resolve the current module directory for relative path resolution.'; No verified external callers; imports: .framework/functions/_shared/index.ts"]
74
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
75
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
76
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
77
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
78
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
79
+ // CIL[END stable_id="~/.framework/cli/commands/create-app.ts:__dirname:constant"]
80
+ /**
81
+ * PROJECT_ROOT defines the root directory of the project, allowing for relative path resolution. It exists to facilitate file operations within the project structure.
82
+ *
83
+ * @sideEffects none
84
+ * @stability stable
85
+ * @calls resolve
86
+ * @cil-generated
87
+ */
88
+ // CIL[BEGIN stable_id="~/.framework/cli/commands/create-app.ts:PROJECT_ROOT:constant" type="constant" identity="PROJECT_ROOT" parent="~/.framework/cli/commands/create-app.ts"]
89
+ // CIL[DOC-MACRO purpose="Resolve the project root directory for absolute path operations."]
90
+ // CIL[DOC-RESPONSIBILITY responsibility="Store the project root path relative to this module."]
91
+ // CIL[DOC-CONTEXT module="cli/commands/create-app" layer="cli" related_files=".framework/cli/commands/create-app.ts,.framework/functions/_shared/index.ts"]
92
+ // CIL[DOC-CONTRACT inputs="__dirname" outputs="string project root path" errors="none" side_effects="none"]
93
+ // CIL[DOC-MICRO logic_summary="Resolves the parent directory three levels above __dirname to locate the project root." notable_decisions="[]"]
94
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
41
95
  // CIL[DOC-STABILITY stability="stable"]
42
- // CIL[DOC-VECTOR type="context" content="Layer: cli. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
43
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
44
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
45
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
96
+ const PROJECT_ROOT = resolve(__dirname, '../../../')
97
+ // CIL[DOC-VECTOR type="context" content="purpose='Resolve the project root directory for absolute path operations.'; No verified external callers; imports: .framework/functions/_shared/index.ts"]
98
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
99
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
100
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
46
101
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
47
102
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
103
+ // CIL[END stable_id="~/.framework/cli/commands/create-app.ts:PROJECT_ROOT:constant"]
104
+
105
+ /**
106
+ * Converts a slug string formatted with hyphens into title case by capitalizing the first letter of each word. This function is useful for generating user-friendly titles from URL slugs.
107
+ *
108
+ * @inputSpec
109
+ * - slug: string (required) — the slug string to be converted to title case.
110
+ * @outputSpec string — the title-cased version of the input slug.
111
+ * @sideEffects none
112
+ * @stability stable
113
+ * @cil-generated
114
+ */
115
+ // CIL[BEGIN stable_id="~/.framework/cli/commands/create-app.ts:toTitleCase:function" type="function" identity="toTitleCase" parent="~/.framework/cli/commands/create-app.ts"]
116
+ // CIL[DOC-MACRO purpose="Convert hyphenated slug strings to title case for display names."]
117
+ // CIL[DOC-RESPONSIBILITY responsibility="Generate a human-readable title from a slug."]
118
+ // CIL[DOC-CONTEXT module="cli/commands/create-app" layer="cli" related_files=".framework/cli/commands/create-app.ts,.framework/functions/_shared/index.ts"]
119
+ // CIL[DOC-CONTRACT inputs="slug: string" outputs="string" errors="none" side_effects="none"]
120
+ // CIL[DOC-MICRO logic_summary="Splits the slug on hyphens, capitalizes each word, and joins them with spaces." notable_decisions="[]"]
121
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
122
+ // CIL[DOC-STABILITY stability="stable"]
48
123
  function toTitleCase(slug: string): string {
49
124
  return slug.split('-').map(s => s.charAt(0).toUpperCase() + s.slice(1)).join(' ')
50
125
  }
51
- // CIL[END chunk_id="create-app_totitlecase_1784071456"]
52
- // CIL[BEGIN chunk_id="create-app_generatemanifest_1784071456" type="function" identity="generateManifest" parent="none"]
53
- // CIL[DOC-MACRO purpose="Generate app manifest JSON content"]
54
- // CIL[DOC-RESPONSIBILITY responsibility="Create default manifest configuration for new apps"]
55
- // CIL[DOC-CONTEXT module="create-app-cli" layer="cli" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/migrations/015_simplify_apps_table.sql\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"\\\"]"]
56
- // CIL[DOC-CONTRACT inputs="none" outputs="string" errors="none" side_effects="none"]
57
- // CIL[DOC-MICRO logic_summary="Creates JSON manifest with routes, nav items, and metadata" notable_decisions="[]"]
58
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
59
- // CIL[DOC-STABILITY stability="stable"]
60
- // CIL[DOC-VECTOR type="context" content="Layer: cli. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/migrations/015_simplify_apps_table.sql, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, \."]
61
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
62
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
63
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
126
+ // CIL[DOC-VECTOR type="context" content="purpose='Convert hyphenated slug strings to title case for display names.'; No verified external callers; imports: .framework/functions/_shared/index.ts"]
127
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
128
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
129
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
64
130
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
65
131
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
132
+ // CIL[END stable_id="~/.framework/cli/commands/create-app.ts:toTitleCase:function"]
133
+
134
+ /**
135
+ * Generates a manifest JSON string for an application with specified properties. This function is used to create a structured representation of the app's metadata and configuration.
136
+ *
137
+ * @macro Function that constructs a JSON manifest for an application.
138
+ * @micro Utilizes JSON.stringify to format the manifest object into a string.
139
+ * @inputSpec
140
+ * slug: string (required) — a unique identifier for the app.
141
+ * name: string (required) — the display name of the app.
142
+ * role: string (required) — the role required to access the app.
143
+ * @outputSpec string — a formatted JSON string representing the app manifest.
144
+ * @sideEffects none
145
+ * @stability stable
146
+ * @cil-generated
147
+ */
148
+ // CIL[BEGIN stable_id="~/.framework/cli/commands/create-app.ts:generateManifest:function" type="function" identity="generateManifest" parent="~/.framework/cli/commands/create-app.ts"]
149
+ // CIL[DOC-MACRO purpose="Build a manifest JSON string describing a custom app."]
150
+ // CIL[DOC-RESPONSIBILITY responsibility="Generate the manifest.json payload for an app."]
151
+ // CIL[DOC-CONTEXT module="cli/commands/create-app" layer="cli" related_files=".framework/cli/commands/create-app.ts,.framework/functions/_shared/index.ts"]
152
+ // CIL[DOC-CONTRACT inputs="slug: string, name: string, role: string" outputs="string formatted JSON" errors="none" side_effects="none"]
153
+ // CIL[DOC-MICRO logic_summary="Creates an object with app metadata, routes, nav, and serializes it with JSON.stringify." notable_decisions="[]"]
154
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
155
+ // CIL[DOC-STABILITY stability="stable"]
66
156
  function generateManifest(slug: string, name: string, role: string): string {
67
157
  return JSON.stringify({
68
158
  name,
@@ -87,21 +177,22 @@ function generateManifest(slug: string, name: string, role: string): string {
87
177
  entry_point: "./index.tsx"
88
178
  }, null, 2) + '\n'
89
179
  }
90
- // CIL[END chunk_id="create-app_generatemanifest_1784071456"]
91
- // CIL[BEGIN chunk_id="create-app_generateindextsx_1784071456" type="function" identity="generateIndexTsx" parent="none"]
92
- // CIL[DOC-MACRO purpose="Generate React component index file"]
93
- // CIL[DOC-RESPONSIBILITY responsibility="Create default React app component with routing"]
94
- // CIL[DOC-CONTEXT module="create-app-cli" layer="cli" related_files="[\".framework/src/components/ui/dialog.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
95
- // CIL[DOC-CONTRACT inputs="none" outputs="string" errors="none" side_effects="none"]
96
- // CIL[DOC-MICRO logic_summary="Generates TSX file with React Router and dashboard component" notable_decisions="[]"]
97
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
98
- // CIL[DOC-STABILITY stability="stable"]
99
- // CIL[DOC-VECTOR type="context" content="Layer: cli. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/components/ui/table-primitives.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
100
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
101
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
102
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
180
+ // CIL[DOC-VECTOR type="context" content="purpose='Build a manifest JSON string describing a custom app.'; No verified external callers; imports: .framework/functions/_shared/index.ts"]
181
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
182
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
183
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
103
184
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
104
185
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
186
+ // CIL[END stable_id="~/.framework/cli/commands/create-app.ts:generateManifest:function"]
187
+
188
+ // CIL[BEGIN stable_id="~/.framework/cli/commands/create-app.ts:generateIndexTsx:function" type="function" identity="generateIndexTsx" parent="~/.framework/cli/commands/create-app.ts"]
189
+ // CIL[DOC-MACRO purpose="Generate a starter index.tsx for a custom app."]
190
+ // CIL[DOC-RESPONSIBILITY responsibility="Produce the React component source for a new app shell."]
191
+ // CIL[DOC-CONTEXT module="cli/commands/create-app" layer="cli" related_files=".framework/cli/commands/create-app.ts,.framework/functions/_shared/index.ts"]
192
+ // CIL[DOC-CONTRACT inputs="slug: string, name: string" outputs="string tsx source" errors="none" side_effects="none"]
193
+ // CIL[DOC-MICRO logic_summary="Computes a component name from the slug and returns a template string with React Router routes." notable_decisions="[]"]
194
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
195
+ // CIL[DOC-STABILITY stability="stable"]
105
196
  function generateIndexTsx(slug: string, name: string): string {
106
197
  const componentName = slug.split('-').map(s => s.charAt(0).toUpperCase() + s.slice(1)).join('')
107
198
  return `
@@ -128,21 +219,37 @@ export default function ${componentName}App() {
128
219
  }
129
220
  `
130
221
  }
131
- // CIL[END chunk_id="create-app_generateindextsx_1784071456"]
132
- // CIL[BEGIN chunk_id="create-app_createapp_1784071456" type="function" identity="createApp" parent="none"]
133
- // CIL[DOC-MACRO purpose="Create new app directory and database entry"]
134
- // CIL[DOC-RESPONSIBILITY responsibility="Scaffold app files and register in database"]
135
- // CIL[DOC-CONTEXT module="create-app-cli" layer="cli" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/migrations/015_simplify_apps_table.sql\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/db.ts\"]"]
136
- // CIL[DOC-CONTRACT inputs="none" outputs="void" errors="file system and database errors" side_effects="creates files, inserts database records"]
137
- // CIL[DOC-MICRO logic_summary="Creates app structure, generates files, and registers app in database" notable_decisions="[]"]
138
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="external_symbols_unknown"]
139
- // CIL[DOC-STABILITY stability="stable"]
140
- // CIL[DOC-VECTOR type="context" content="Layer: cli. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/migrations/015_simplify_apps_table.sql, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/db.ts."]
141
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
142
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
143
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
222
+ // CIL[DOC-VECTOR type="context" content="purpose='Generate a starter index.tsx for a custom app.'; No verified external callers; imports: .framework/functions/_shared/index.ts"]
223
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
224
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
225
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
144
226
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
145
227
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
228
+ // CIL[END stable_id="~/.framework/cli/commands/create-app.ts:generateIndexTsx:function"]
229
+
230
+ /**
231
+ * Creates a new application directory and its associated files based on the provided slug and options. It also registers the app in the database if it does not already exist.
232
+ *
233
+ * @macro Async function responsible for application creation and database registration.
234
+ * @micro Checks for existing application directories and conditionally overwrites them based on the force option.
235
+ * @inputSpec
236
+ * slug: string (required) — the unique identifier for the app.
237
+ * options: { name?: string; role: string; force: boolean } (required) — configuration options for the app creation.
238
+ * @outputSpec Promise<void>
239
+ * @sideEffects Creates directories and files in the filesystem, writes to the database.
240
+ * @stability stable
241
+ * @calls adminDb.from('apps'), adminDb.select, adminDb.eq, adminDb.single, adminDb.insert
242
+ * @errorHandling Logs errors to the console for database insert failures.
243
+ * @cil-generated
244
+ */
245
+ // CIL[BEGIN stable_id="~/.framework/cli/commands/create-app.ts:createApp:function" type="function" identity="createApp" parent="~/.framework/cli/commands/create-app.ts"]
246
+ // CIL[DOC-MACRO purpose="Create a new custom app directory, files, and database registration."]
247
+ // CIL[DOC-RESPONSIBILITY responsibility="Scaffold an app on disk and register it in the apps table."]
248
+ // CIL[DOC-CONTEXT module="cli/commands/create-app" layer="cli" related_files=".framework/cli/commands/create-app.ts,.framework/functions/_shared/index.ts"]
249
+ // CIL[DOC-CONTRACT inputs="slug: string, options: { name?: string; role: string; force: boolean }" outputs="Promise<void>" errors="Database or filesystem errors logged; exits if the directory already exists and force is false" side_effects="Creates directories and files in custom/apps/{slug}; writes to the database"]
250
+ // CIL[DOC-MICRO logic_summary="Validates or overwrites the app directory, writes manifest.json, index.tsx, .gitkeep, then upserts the app record via adminDb." notable_decisions="[]"]
251
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
252
+ // CIL[DOC-STABILITY stability="stable"]
146
253
  async function createApp(slug: string, options: { name?: string; role: string; force: boolean }): Promise<void> {
147
254
  const name = options.name || toTitleCase(slug)
148
255
  const appDir = resolve(PROJECT_ROOT, `custom/apps/${slug}`)
@@ -215,21 +322,40 @@ async function createApp(slug: string, options: { name?: string; role: string; f
215
322
  console.log(` 2. Edit custom/apps/${slug}/index.tsx to build your app`)
216
323
  console.log(` 3. npm run assemble && netlify dev`)
217
324
  }
218
- // CIL[END chunk_id="create-app_createapp_1784071456"]
219
- // CIL[BEGIN chunk_id="create-app_registercreateappcommands_1784071456" type="function" identity="registerCreateAppCommands" parent="none"]
220
- // CIL[DOC-MACRO purpose="Register create-app command with CLI framework"]
221
- // CIL[DOC-RESPONSIBILITY responsibility="Provide app scaffolding command interface"]
222
- // CIL[DOC-CONTEXT module="create-app-cli" layer="cli" related_files="[]"]
223
- // CIL[DOC-CONTRACT inputs="none" outputs="create-app command registration" errors="app creation errors" side_effects="creates app files and database entries"]
224
- // CIL[DOC-MICRO logic_summary="Registers create-app command with options for name, role, and force" notable_decisions="[]"]
225
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
226
- // CIL[DOC-STABILITY stability="stable"]
227
- // CIL[DOC-VECTOR type="context" content="Layer: cli. Direct callers: 0. Direct calls: 0. Related files: none."]
228
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
229
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
230
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
325
+ // CIL[DOC-VECTOR type="context" content="purpose='Create a new custom app directory, files, and database registration.'; No verified external callers; imports: .framework/functions/_shared/index.ts"]
326
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
327
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
328
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
231
329
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
232
330
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
331
+ // CIL[END stable_id="~/.framework/cli/commands/create-app.ts:createApp:function"]
332
+
333
+ /**
334
+ * Registers a command to scaffold a new custom app in a specified directory. This command allows users to create an app with customizable options such as name and role.
335
+ *
336
+ * @macro Command registration function for creating custom applications.
337
+ * @micro Handles command execution asynchronously and manages error logging.
338
+ * @inputSpec
339
+ * program: Command (required) — the command program to register the create-app command with.
340
+ * slug: string (required) — the unique identifier for the app being created.
341
+ * name: string (optional) — display name for the app (defaults to title-cased slug).
342
+ * role: string (optional) — required role to access this app (defaults to 'member').
343
+ * force: boolean (optional) — flag to overwrite existing files (defaults to false).
344
+ * @outputSpec Promise<void>
345
+ * @sideEffects Creates files and directories for the new app based on the provided slug.
346
+ * @stability stable
347
+ * @calls createApp
348
+ * @errorHandling Logs error messages to the console and exits the process on failure.
349
+ * @cil-generated
350
+ */
351
+ // CIL[BEGIN stable_id="~/.framework/cli/commands/create-app.ts:registerCreateAppCommands:function" type="function" identity="registerCreateAppCommands" parent="~/.framework/cli/commands/create-app.ts"]
352
+ // CIL[DOC-MACRO purpose="Register the create-app command with a commander program."]
353
+ // CIL[DOC-RESPONSIBILITY responsibility="Wire the create-app CLI subcommand and its options."]
354
+ // CIL[DOC-CONTEXT module="cli/commands/create-app" layer="cli" related_files=".framework/cli/commands/create-app.ts,.framework/functions/_shared/index.ts"]
355
+ // CIL[DOC-CONTRACT inputs="program: Command" outputs="void (command registered)" errors="Runtime errors logged; process exits on createApp failure" side_effects="Registers a command and attaches an action handler"]
356
+ // CIL[DOC-MICRO logic_summary="Defines the create-app command, options for name, role, and force, and calls createApp on action." notable_decisions="[]"]
357
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
358
+ // CIL[DOC-STABILITY stability="stable"]
233
359
  export function registerCreateAppCommands(program: Command) {
234
360
  program
235
361
  .command('create-app <slug>')
@@ -246,4 +372,10 @@ export function registerCreateAppCommands(program: Command) {
246
372
  }
247
373
  })
248
374
  }
249
- // CIL[END chunk_id="create-app_registercreateappcommands_1784071456"]
375
+ // CIL[DOC-VECTOR type="context" content="purpose='Register the create-app command with a commander program.'; No verified external callers; imports: .framework/functions/_shared/index.ts"]
376
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
377
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
378
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
379
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
380
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
381
+ // CIL[END stable_id="~/.framework/cli/commands/create-app.ts:registerCreateAppCommands:function"]