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.
- package/.env.example +76 -0
- package/.framework/.spine-manifest.json +19 -0
- package/.framework/cli/commands/agents.ts +61 -33
- package/.framework/cli/commands/auth.ts +60 -28
- package/.framework/cli/commands/create-app.ts +212 -80
- package/.framework/cli/commands/dev.ts +184 -68
- package/.framework/cli/commands/doctor.ts +324 -152
- package/.framework/cli/commands/generate.ts +119 -68
- package/.framework/cli/commands/init.ts +141 -242
- package/.framework/cli/commands/install-app.ts +1336 -314
- package/.framework/cli/commands/items.ts +31 -29
- package/.framework/cli/commands/migrate.ts +299 -156
- package/.framework/cli/commands/migrations.ts +62 -30
- package/.framework/cli/commands/pipelines.ts +31 -29
- package/.framework/cli/commands/status.ts +105 -45
- package/.framework/cli/commands/system.ts +47 -42
- package/.framework/cli/commands/test.ts +161 -102
- package/.framework/cli/commands/upgrade.ts +260 -0
- package/.framework/cli/commands/validate-app.ts +517 -161
- package/.framework/cli/context.ts +117 -85
- package/.framework/cli/env-loader.ts +74 -43
- package/.framework/cli/index.ts +70 -46
- package/.framework/cli/lib/project-files.ts +404 -0
- package/.framework/docs/guides/testing-guide.md +1 -1
- package/.framework/docs/runtime-types.md +72 -72
- package/.framework/functions/_shared/access.ts +84 -0
- package/.framework/functions/_shared/agent-runner.ts +5067 -1026
- package/.framework/functions/_shared/app-manifest.ts +214 -94
- package/.framework/functions/_shared/ast.ts +214 -0
- package/.framework/functions/_shared/audit.ts +91 -55
- package/.framework/functions/_shared/cil.ts +368 -127
- package/.framework/functions/_shared/db.ts +337 -68
- package/.framework/functions/_shared/funnel.ts +228 -0
- package/.framework/functions/_shared/geo.ts +105 -0
- package/.framework/functions/_shared/hash-api-key.ts +94 -17
- package/.framework/functions/_shared/index.ts +22 -224
- package/.framework/functions/_shared/kb.ts +832 -58
- package/.framework/functions/_shared/llm.ts +118 -18
- package/.framework/functions/_shared/logging.ts +317 -19
- package/.framework/functions/_shared/middleware.ts +701 -131
- package/.framework/functions/_shared/notify.ts +70 -0
- package/.framework/functions/_shared/outcomes.ts +34 -19
- package/.framework/functions/_shared/permissions.ts +501 -315
- package/.framework/functions/_shared/pipeline-runner.ts +704 -155
- package/.framework/functions/_shared/principal.ts +436 -263
- package/.framework/functions/_shared/rate-limit.ts +233 -0
- package/.framework/functions/_shared/resolve-credentials.ts +86 -19
- package/.framework/functions/_shared/resolve-ids.ts +203 -139
- package/.framework/functions/_shared/retry-deliveries.ts +51 -16
- package/.framework/functions/_shared/schema-utils.ts +602 -521
- package/.framework/functions/_shared/security.ts +345 -0
- package/.framework/functions/_shared/testing.ts +197 -172
- package/.framework/functions/_shared/tracing.ts +351 -21
- package/.framework/functions/_shared/trigger-engine.ts +425 -136
- package/.framework/functions/_shared/webhook-registration.ts +71 -70
- package/.framework/functions/_shared/webhook-registry.ts +126 -83
- package/.framework/functions/account-nodes.ts +30 -30
- package/.framework/functions/adapters/generic-webhook-inbound.ts +49 -16
- package/.framework/functions/adapters/generic-webhook-outbound.ts +17 -17
- package/.framework/functions/adapters/openai-outbound.ts +15 -16
- package/.framework/functions/admin-data.ts +596 -173
- package/.framework/functions/admin-funnel.ts +64 -60
- package/.framework/functions/admin-install-funnel.ts +84 -66
- package/.framework/functions/admin-signals.ts +69 -51
- package/.framework/functions/ai-agents.ts +431 -106
- package/.framework/functions/ai-interactions.ts +186 -112
- package/.framework/functions/api-keys.ts +107 -107
- package/.framework/functions/apps.ts +154 -136
- package/.framework/functions/auth.ts +83 -65
- package/.framework/functions/cil-agent-ingest.ts +189 -232
- package/.framework/functions/cil-agent.ts +433 -177
- package/.framework/functions/cil-callmap.ts +642 -430
- package/.framework/functions/cil-config.ts +139 -135
- package/.framework/functions/cil-context.ts +214 -127
- package/.framework/functions/cil-doc.ts +587 -458
- package/.framework/functions/cil-embeddings.ts +453 -364
- package/.framework/functions/cil-graph.ts +427 -142
- package/.framework/functions/cil-ingest.ts +1418 -1154
- package/.framework/functions/cil-pipeline.ts +276 -21
- package/.framework/functions/cil-project.ts +659 -132
- package/.framework/functions/cil-validate.ts +198 -164
- package/.framework/functions/debug-auth.ts +57 -55
- package/.framework/functions/deliveries.ts +80 -21
- package/.framework/functions/embeddings.ts +1023 -318
- package/.framework/functions/eval-harness.ts +146 -108
- package/.framework/functions/integration-outbound.ts +205 -75
- package/.framework/functions/integration-routes.ts +128 -23
- package/.framework/functions/integrations.ts +125 -100
- package/.framework/functions/invites.ts +1095 -460
- package/.framework/functions/item-progress.ts +158 -102
- package/.framework/functions/kb.ts +34 -10
- package/.framework/functions/logs.ts +133 -133
- package/.framework/functions/observability.ts +152 -122
- package/.framework/functions/pipeline-executions.ts +147 -132
- package/.framework/functions/pipelines.ts +134 -119
- package/.framework/functions/prompt-configs.ts +96 -80
- package/.framework/functions/roles.ts +112 -82
- package/.framework/functions/security.ts +450 -0
- package/.framework/functions/system-cron.ts +117 -80
- package/.framework/functions/system.ts +158 -98
- package/.framework/functions/tests.ts +29 -29
- package/.framework/functions/timers.ts +94 -95
- package/.framework/functions/trigger-scheduler.ts +10 -0
- package/.framework/functions/triggers.ts +179 -149
- package/.framework/functions/types.ts +137 -125
- package/.framework/mcp/index.ts +133 -0
- package/.framework/mcp/load-env.ts +60 -0
- package/.framework/mcp/shared/app-manifest.ts +275 -0
- package/.framework/mcp/shared/db.ts +477 -0
- package/.framework/mcp/shared/kb.ts +118 -0
- package/.framework/mcp/tools/architect.ts +431 -0
- package/.framework/mcp/tools/cil/context.ts +345 -0
- package/.framework/mcp/tools/cil/graph.ts +242 -0
- package/.framework/mcp/tools/cil/ingest.ts +1217 -0
- package/.framework/mcp/tools/cil/pipeline-orchestrator.ts +693 -0
- package/.framework/mcp/tools/cil/pipeline.ts +767 -0
- package/.framework/mcp/tools/cil/project.ts +791 -0
- package/.framework/mcp/tools/cil/retrieval.ts +336 -0
- package/.framework/mcp/tools/cil/search-core.ts +454 -0
- package/.framework/mcp/tools/cil/search.ts +97 -0
- package/.framework/mcp/tools/cil/suggest.ts +186 -0
- package/.framework/mcp/tools/cil/validate.ts +1369 -0
- package/.framework/mcp/tools/kb/delete.ts +139 -0
- package/.framework/mcp/tools/kb/index.ts +52 -0
- package/.framework/mcp/tools/kb/ingest.ts +84 -0
- package/.framework/mcp/tools/kb/list-types.ts +102 -0
- package/.framework/mcp/tools/kb/publish.ts +100 -0
- package/.framework/mcp/tools/kb/reindex.ts +86 -0
- package/.framework/mcp/tools/kb/revoke.ts +85 -0
- package/.framework/mcp/tools/kb/search.ts +101 -0
- package/.framework/mcp/tools/kb/upsert.ts +125 -0
- package/.framework/mcp/tools/observability.ts +510 -0
- package/.framework/migrations/001_core_schema.sql +15 -0
- package/.framework/migrations/002_core_rls_and_functions.sql +15 -0
- package/.framework/migrations/003_core_system_data.sql +16 -1
- package/.framework/migrations/004_core_rpc_and_broker.sql +17 -1
- package/.framework/migrations/005_core_observability.sql +17 -1
- package/.framework/migrations/006_security_hardening_rls.sql +15 -0
- package/.framework/migrations/007_kb_article_list.sql +17 -1
- package/.framework/migrations/008_items_target.sql +15 -0
- package/.framework/migrations/009_roles_slug_unique.sql +15 -0
- package/.framework/migrations/010_auth_user_trigger.sql +15 -0
- package/.framework/migrations/011_spine_system_account.sql +16 -0
- package/.framework/migrations/012_service_role_grants.sql +16 -0
- package/.framework/migrations/013_get_account_apps_role_filter.sql +15 -0
- package/.framework/migrations/014_apps_required_roles.sql +16 -0
- package/.framework/migrations/015_types_kind_slug_unique.sql +15 -0
- package/.framework/migrations/016_cil_types.sql +281 -0
- package/.framework/migrations/017_cil_stable_ids.sql +37 -0
- package/.framework/migrations/018_runtime_tables.sql +129 -0
- package/.framework/migrations/019_agent_prompt_columns.sql +56 -0
- package/.framework/migrations/020_schema_reconciliation.sql +67 -0
- package/.framework/migrations/021_kb_embedding_lifecycle.sql +31 -0
- package/.framework/migrations/032_cil_status_migration.sql +73 -0
- package/.framework/migrations/033_cil_versioning.sql +73 -0
- package/.framework/migrations/034_match_embeddings_knn.sql +115 -0
- package/.framework/migrations/035_rate_limits.sql +55 -0
- package/.framework/migrations/036_demo_record_flags.sql +72 -0
- package/.framework/migrations/037_kb_types_canonical.sql +244 -0
- package/.framework/migrations/038_drop_demo_record_flags.sql +38 -0
- package/.framework/migrations/042_registration_hierarchy.sql +309 -0
- package/.framework/migrations/043_policy_actor_cleanup.sql +39 -0
- package/.framework/migrations/044_match_embeddings_filtered_knn.sql +151 -0
- package/.framework/migrations/045_security_critical_rls.sql +139 -0
- package/.framework/migrations/046_security_missing_rls.sql +79 -0
- package/.framework/migrations/047_people_updated_by.sql +27 -0
- package/.framework/migrations/048_watcher_last_seen_at.sql +24 -0
- package/.framework/migrations/049_security_blocklist.sql +148 -0
- package/.framework/migrations/050_notifications.sql +49 -0
- package/.framework/migrations/051_message_agent_fields.sql +74 -0
- package/.framework/migrations/052_registration_security.sql +421 -0
- package/.framework/migrations/053_builtin_action_seeds.sql +66 -0
- package/.framework/migrations/054_kb_ingest_lease.sql +157 -0
- package/.framework/migrations/055_type_id_drift_reconciliation.sql +33 -0
- package/.framework/migrations/056_slug_column_reconciliation.sql +38 -0
- package/.framework/migrations/057_pipelines_slug_identity.sql +14 -0
- package/.framework/migrations/058_account_data_field_declarations.sql +53 -0
- package/.framework/migrations/059_registration_placement_fixes.sql +269 -0
- package/.framework/migrations/060_account_person_record_permissions.sql +38 -0
- package/.framework/migrations/061_fk_dedup.sql +32 -0
- package/.framework/public/spine-logo.svg +10 -3
- package/.framework/scripts/app-install-cli.ts +190 -93
- package/.framework/scripts/assemble-frontend.sh +127 -44
- package/.framework/scripts/assemble-functions.sh +128 -30
- package/.framework/scripts/boundary-check.sh +6 -2
- package/.framework/scripts/build-manifest.sh +24 -68
- package/.framework/scripts/check-core-integrity.sh +15 -76
- package/.framework/scripts/checksum-manifest.mts +343 -0
- package/.framework/scripts/cil-migrate-markers.ts +403 -0
- package/.framework/scripts/fix-cil-markers.mjs +176 -0
- package/.framework/scripts/verify-integrity.sh +21 -57
- package/.framework/scripts/verify-manifest.mts +305 -0
- package/.framework/seeds/types/funnel_signal_use.json +74 -21
- package/.framework/seeds/types/spine_instance.json +73 -21
- package/.framework/src/App.tsx +118 -72
- package/.framework/src/apps/admin/index.tsx +855 -58
- package/.framework/src/components/AppWrapper.tsx +43 -45
- package/.framework/src/components/CustomAppLoader.tsx +160 -116
- package/.framework/src/components/admin/AdminListPage.tsx +46 -44
- package/.framework/src/components/admin/AdminSidebar.tsx +57 -47
- package/.framework/src/components/admin/AdminStatsCard.tsx +46 -44
- package/.framework/src/components/admin/PageInstructions.tsx +98 -2
- package/.framework/src/components/admin/SortableTableHeader.tsx +44 -45
- package/.framework/src/components/app-shell/GenericAppShell.tsx +64 -65
- package/.framework/src/components/app-shell/GenericDetailPage.tsx +44 -47
- package/.framework/src/components/app-shell/GenericListPage.tsx +45 -49
- package/.framework/src/components/app-sidebar.tsx +42 -45
- package/.framework/src/components/auth/ProtectedRoute.tsx +48 -41
- package/.framework/src/components/auth/TurnstileWidget.tsx +27 -0
- package/.framework/src/components/kb/KBArticleEditor.tsx +231 -22
- package/.framework/src/components/kb/KBArticleList.tsx +251 -10
- package/.framework/src/components/layout/AppShell.tsx +51 -45
- package/.framework/src/components/layout/Header.tsx +42 -43
- package/.framework/src/components/layout/Layout.tsx +46 -46
- package/.framework/src/components/layout/Sidebar.tsx +196 -96
- package/.framework/src/components/runtime/DataDetailHeader.tsx +55 -30
- package/.framework/src/components/runtime/DataDetailPage.tsx +31 -269
- package/.framework/src/components/runtime/DataFilters.tsx +49 -74
- package/.framework/src/components/runtime/DataHeader.tsx +53 -32
- package/.framework/src/components/runtime/DataListPage.tsx +51 -155
- package/.framework/src/components/runtime/DataStats.tsx +66 -44
- package/.framework/src/components/runtime/DataTable.tsx +49 -149
- package/.framework/src/components/runtime/SchemaDetailForm.tsx +45 -75
- package/.framework/src/components/runtime/index.ts +119 -16
- package/.framework/src/components/search-form.tsx +46 -29
- package/.framework/src/components/shared/AgentView.tsx +65 -48
- package/.framework/src/components/shared/FieldRenderer.tsx +144 -50
- package/.framework/src/components/shared/InviteManager.tsx +207 -97
- package/.framework/src/components/shared/MemberList.tsx +97 -0
- package/.framework/src/components/shared/SchemaFields.tsx +107 -86
- package/.framework/src/components/ui/DataTable.tsx +80 -68
- package/.framework/src/components/ui/Form.tsx +157 -146
- package/.framework/src/components/ui/ItemCard.tsx +74 -67
- package/.framework/src/components/ui/ItemListView.tsx +73 -68
- package/.framework/src/components/ui/LoadingSpinner.tsx +43 -48
- package/.framework/src/components/ui/Modal.tsx +78 -68
- package/.framework/src/components/ui/RichTextEditor.tsx +89 -69
- package/.framework/src/components/ui/accordion.tsx +85 -86
- package/.framework/src/components/ui/alert-dialog.tsx +197 -184
- package/.framework/src/components/ui/alert.tsx +105 -94
- package/.framework/src/components/ui/aspect-ratio.tsx +57 -43
- package/.framework/src/components/ui/avatar.tsx +122 -107
- package/.framework/src/components/ui/badge.tsx +60 -55
- package/.framework/src/components/ui/breadcrumb.tsx +127 -128
- package/.framework/src/components/ui/button-group.tsx +86 -72
- package/.framework/src/components/ui/button.tsx +71 -50
- package/.framework/src/components/ui/calendar.tsx +72 -57
- package/.framework/src/components/ui/card.tsx +136 -129
- package/.framework/src/components/ui/carousel.tsx +226 -107
- package/.framework/src/components/ui/chart.tsx +252 -147
- package/.framework/src/components/ui/checkbox.tsx +43 -44
- package/.framework/src/components/ui/collapsible.tsx +86 -71
- package/.framework/src/components/ui/combobox.tsx +282 -249
- package/.framework/src/components/ui/command.tsx +158 -146
- package/.framework/src/components/ui/context-menu.tsx +239 -240
- package/.framework/src/components/ui/dialog.tsx +174 -157
- package/.framework/src/components/ui/direction.tsx +72 -56
- package/.framework/src/components/ui/drawer.tsx +168 -169
- package/.framework/src/components/ui/dropdown-menu.tsx +254 -223
- package/.framework/src/components/ui/empty.tsx +131 -120
- package/.framework/src/components/ui/field.tsx +205 -173
- package/.framework/src/components/ui/hover-card.tsx +71 -72
- package/.framework/src/components/ui/input-group.tsx +148 -133
- package/.framework/src/components/ui/input-otp.tsx +99 -86
- package/.framework/src/components/ui/input.tsx +43 -41
- package/.framework/src/components/ui/item.tsx +207 -185
- package/.framework/src/components/ui/kbd.tsx +57 -56
- package/.framework/src/components/ui/label.tsx +45 -41
- package/.framework/src/components/ui/menubar.tsx +268 -236
- package/.framework/src/components/ui/native-select.tsx +85 -86
- package/.framework/src/components/ui/navigation-menu.tsx +166 -156
- package/.framework/src/components/ui/pagination.tsx +131 -141
- package/.framework/src/components/ui/popover.tsx +125 -128
- package/.framework/src/components/ui/progress.tsx +47 -44
- package/.framework/src/components/ui/radio-group.tsx +60 -55
- package/.framework/src/components/ui/resizable.tsx +85 -72
- package/.framework/src/components/ui/scroll-area.tsx +57 -58
- package/.framework/src/components/ui/select.tsx +182 -169
- package/.framework/src/components/ui/separator.tsx +42 -43
- package/.framework/src/components/ui/sheet.tsx +170 -159
- package/.framework/src/components/ui/sidebar.tsx +395 -398
- package/.framework/src/components/ui/skeleton.tsx +42 -43
- package/.framework/src/components/ui/slider.tsx +61 -44
- package/.framework/src/components/ui/sonner.tsx +44 -44
- package/.framework/src/components/ui/spinner.tsx +47 -42
- package/.framework/src/components/ui/switch.tsx +56 -42
- package/.framework/src/components/ui/table-primitives.tsx +272 -132
- package/.framework/src/components/ui/table.tsx +140 -142
- package/.framework/src/components/ui/tabs.tsx +110 -93
- package/.framework/src/components/ui/textarea.tsx +43 -44
- package/.framework/src/components/ui/toggle-group.tsx +87 -71
- package/.framework/src/components/ui/toggle.tsx +56 -56
- package/.framework/src/components/ui/tooltip.tsx +99 -85
- package/.framework/src/contexts/AppContext.tsx +166 -114
- package/.framework/src/contexts/AuthContext.tsx +232 -137
- package/.framework/src/hooks/use-mobile.ts +43 -44
- package/.framework/src/hooks/useApi.ts +185 -172
- package/.framework/src/hooks/useAppPath.ts +31 -29
- package/.framework/src/hooks/useApps.ts +77 -42
- package/.framework/src/hooks/useEntityList.ts +66 -29
- package/.framework/src/hooks/useEntityRecord.ts +76 -32
- package/.framework/src/hooks/useForm.ts +62 -30
- package/.framework/src/hooks/useListSchema.ts +60 -43
- package/.framework/src/hooks/useSchemaRecord.ts +115 -95
- package/.framework/src/lib/api.ts +258 -134
- package/.framework/src/lib/registration.ts +181 -0
- package/.framework/src/lib/supabase.ts +118 -81
- package/.framework/src/lib/utils.ts +266 -266
- package/.framework/src/main.tsx +43 -44
- package/.framework/src/pages/DashboardPage.tsx +44 -43
- package/.framework/src/pages/NoAppPage.tsx +50 -0
- package/.framework/src/pages/NotFoundPage.tsx +32 -29
- package/.framework/src/pages/SetupPage.tsx +34 -33
- package/.framework/src/pages/admin/AIAgentDetailPage.tsx +69 -58
- package/.framework/src/pages/admin/AIAgentsPage.tsx +43 -40
- package/.framework/src/pages/admin/APIKeyDetailPage.tsx +63 -55
- package/.framework/src/pages/admin/APIKeysPage.tsx +44 -42
- package/.framework/src/pages/admin/AlertsConfigPage.tsx +117 -94
- package/.framework/src/pages/admin/AppDetailPage.tsx +48 -42
- package/.framework/src/pages/admin/AppsPage.tsx +45 -42
- package/.framework/src/pages/admin/DeliveriesPage.tsx +49 -17
- package/.framework/src/pages/admin/DesignedPage.tsx +31 -30
- package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +58 -0
- package/.framework/src/pages/admin/EmbeddingsPage.tsx +49 -0
- package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +31 -29
- package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +46 -29
- package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -29
- package/.framework/src/pages/admin/IntegrationDetailPage.tsx +68 -55
- package/.framework/src/pages/admin/IntegrationsPage.tsx +45 -42
- package/.framework/src/pages/admin/InvitesPage.tsx +60 -44
- package/.framework/src/pages/admin/LogsPage.tsx +87 -137
- package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +31 -29
- package/.framework/src/pages/admin/ObservabilityDashboard.tsx +150 -89
- package/.framework/src/pages/admin/PipelineDetailPage.tsx +77 -104
- package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +44 -43
- package/.framework/src/pages/admin/PipelinesPage.tsx +59 -145
- package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +53 -42
- package/.framework/src/pages/admin/PromptConfigsPage.tsx +47 -117
- package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +31 -44
- package/.framework/src/pages/admin/RoleDetailPage.tsx +49 -92
- package/.framework/src/pages/admin/RolesPage.tsx +47 -164
- package/.framework/src/pages/admin/SecurityPage.tsx +310 -0
- package/.framework/src/pages/admin/SelectTestPage.tsx +30 -32
- package/.framework/src/pages/admin/ShadcnTestPage.tsx +37 -44
- package/.framework/src/pages/admin/SimpleDashboard.tsx +32 -44
- package/.framework/src/pages/admin/TestRunDetailPage.tsx +97 -44
- package/.framework/src/pages/admin/TestingDashboard.tsx +126 -71
- package/.framework/src/pages/admin/TimerDetailPage.tsx +67 -55
- package/.framework/src/pages/admin/TimersPage.tsx +44 -42
- package/.framework/src/pages/admin/TriggerDetailPage.tsx +47 -42
- package/.framework/src/pages/admin/TriggersPage.tsx +58 -57
- package/.framework/src/pages/admin/TypeDetailPage.tsx +91 -55
- package/.framework/src/pages/admin/TypesPage.tsx +45 -42
- package/.framework/src/pages/admin/cil/CILAgentPage.tsx +258 -128
- package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +127 -123
- package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +308 -235
- package/.framework/src/pages/admin/cil/CILFileListPage.tsx +159 -110
- package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +432 -0
- package/.framework/src/pages/admin/cil/CILGraphPage.tsx +200 -178
- package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +286 -239
- package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +211 -90
- package/.framework/src/pages/admin/cil/CILSearchPage.tsx +156 -143
- package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +379 -0
- package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +337 -0
- package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +219 -214
- package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
- package/.framework/src/pages/auth/AuthConfirmPage.tsx +135 -65
- package/.framework/src/pages/auth/ForgotPasswordPage.tsx +39 -31
- package/.framework/src/pages/auth/LoginPage.tsx +38 -32
- package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -28
- package/.framework/src/pages/auth/RegisterPage.tsx +429 -155
- package/.framework/src/pages/spine-framework/APIPage.tsx +33 -30
- package/.framework/src/pages/spine-framework/CLIPage.tsx +32 -30
- package/.framework/src/types/auth.ts +101 -93
- package/.framework/src/types/types.ts +283 -262
- package/.framework/templates/project.json +87 -0
- package/.framework/templates/spine.config.neutral.json +7 -0
- package/.framework/tests/api/api-surface.test.ts +381 -0
- package/.framework/tests/fixtures/seed.ts +427 -0
- package/.framework/tests/fixtures/teardown.ts +228 -0
- package/.framework/tests/reporter.ts +351 -0
- package/.framework/tests/setup.ts +135 -0
- package/.framework/tests/ui/ui-sweep.ts +278 -0
- package/.framework/tests/unit/admin-data-logger.test.ts +310 -0
- package/.framework/tests/unit/agent-runner.test.ts +2389 -0
- package/.framework/tests/unit/ai-interactions.test.ts +81 -0
- package/.framework/tests/unit/app-manifest.test.ts +359 -0
- package/.framework/tests/unit/assembly-scripts.test.ts +172 -0
- package/.framework/tests/unit/cil-determinism.test.ts +85 -0
- package/.framework/tests/unit/core-isolation.test.ts +153 -0
- package/.framework/tests/unit/funnel-signals.test.ts +135 -0
- package/.framework/tests/unit/install-app.test.ts +1759 -0
- package/.framework/tests/unit/invites-security.test.ts +572 -0
- package/.framework/tests/unit/kb-ingest-lease.test.ts +287 -0
- package/.framework/tests/unit/kb-search.test.ts +119 -0
- package/.framework/tests/unit/migrate.test.ts +509 -0
- package/.framework/tests/unit/notify.test.ts +136 -0
- package/.framework/tests/unit/permissions.test.ts +269 -0
- package/.framework/tests/unit/pipeline-runner.test.ts +755 -0
- package/.framework/tests/unit/principal-cache.test.ts +138 -0
- package/.framework/tests/unit/retrieval-golden.test.ts +520 -0
- package/.framework/tests/unit/runtime-isolation.test.ts +642 -0
- package/.framework/tests/unit/schema-utils.test.ts +225 -0
- package/.framework/tests/unit/trigger-engine.test.ts +513 -0
- package/.framework/tests/unit/validate-app.test.ts +527 -0
- package/README.md +34 -3
- package/bin/spine-framework.cjs +1 -0
- package/config/tailwind.config.cjs +7 -0
- package/config/tsconfig.functions.json +42 -0
- package/config/tsconfig.json +37 -9
- package/config/vite.config.ts +31 -2
- package/netlify.toml +31 -3
- package/package.json +46 -29
- package/scripts/assemble-frontend.sh +127 -44
- package/scripts/assemble-functions.sh +127 -29
- package/scripts/boundary-check.sh +6 -2
- package/scripts/build-manifest.sh +24 -68
- package/scripts/checksum-manifest.mts +345 -0
- package/scripts/dev-clean.sh +86 -0
- package/scripts/dev-netlify.sh +49 -0
- package/scripts/netlify-dev-wrapper.sh +2 -0
- package/scripts/verify-install.ts +358 -0
- package/scripts/verify-integrity.sh +21 -57
- package/scripts/verify-manifest.mts +305 -0
- package/templates/project/gitignore +45 -0
- package/{config → templates/project}/package-lock.json +22335 -9366
- package/vitest.config.ts +46 -0
- package/.framework/public/spine.config.json +0 -91
- package/config/deno.lock +0 -108
- package/config/tsconfig.node.tsbuildinfo +0 -1
- package/config/tsconfig.tsbuildinfo +0 -1
- package/config/vite.config.d.ts +0 -2
- package/custom/.devin/AGENT.md +0 -357
- package/custom/.devin/skills/install-app/SKILL.md +0 -39
- package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +0 -39
- package/custom/.devin/skills/spine-workbench-idea/SKILL.md +0 -36
- package/custom/.devin/skills/spine-workbench-implement/SKILL.md +0 -46
- package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +0 -28
- package/custom/.devin/skills/spine-workbench-plan/SKILL.md +0 -38
- package/custom/.devin/workflows/app-install.yaml +0 -83
- package/custom/README.md +0 -79
- package/docs/README.md +0 -15
- package/scripts/app-install-cli.ts +0 -286
- package/scripts/check-core-integrity.sh +0 -82
- package/scripts/ingest-chunks.cjs +0 -202
- package/scripts/kb-chunk-parser.cjs +0 -312
- package/scripts/kb-chunk-parser.ts +0 -330
- package/scripts/kb-ingest-docs.ts +0 -203
- package/scripts/load-test-app-install.ts +0 -484
- package/scripts/test-login.js +0 -33
- package/spine.config.json +0 -91
|
@@ -6,63 +6,153 @@
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
// CIL[
|
|
11
|
-
// CIL[DOC-
|
|
12
|
-
// CIL[DOC-
|
|
13
|
-
// CIL[DOC-
|
|
14
|
-
// CIL[DOC-
|
|
15
|
-
// CIL[DOC-
|
|
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="
|
|
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
|
-
|
|
33
|
-
// CIL[
|
|
34
|
-
// CIL[
|
|
35
|
-
// CIL[DOC-
|
|
36
|
-
// CIL[DOC-
|
|
37
|
-
// CIL[DOC-
|
|
38
|
-
// CIL[
|
|
39
|
-
|
|
40
|
-
|
|
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
|
-
|
|
43
|
-
// CIL[DOC-VECTOR type="
|
|
44
|
-
// CIL[DOC-VECTOR type="
|
|
45
|
-
// CIL[DOC-VECTOR type="
|
|
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[
|
|
52
|
-
// CIL[
|
|
53
|
-
// CIL[DOC-
|
|
54
|
-
// CIL[DOC-
|
|
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[
|
|
91
|
-
// CIL[
|
|
92
|
-
// CIL[DOC-
|
|
93
|
-
// CIL[DOC-
|
|
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[
|
|
132
|
-
// CIL[
|
|
133
|
-
// CIL[DOC-
|
|
134
|
-
// CIL[DOC-
|
|
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[
|
|
219
|
-
// CIL[
|
|
220
|
-
// CIL[DOC-
|
|
221
|
-
// CIL[DOC-
|
|
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[
|
|
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"]
|