spine-framework 0.3.144 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +5051 -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 +20 -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
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/TestingDashboard.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/pages/admin/TestingDashboard.tsx"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Admin test suite dashboard page module header"]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Declare page imports and component overview for the testing dashboard"]
|
|
4
|
+
// CIL[DOC-CONTEXT module="TestingDashboard" layer="presentation" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/shared/AgentView.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Defines React imports, hooks, utilities, and components used by TestingDashboard" notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
8
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="all"]
|
|
10
|
+
|
|
1
11
|
|
|
2
12
|
|
|
3
13
|
|
|
@@ -10,21 +20,6 @@
|
|
|
10
20
|
|
|
11
21
|
|
|
12
22
|
|
|
13
|
-
// CIL[BEGIN chunk_id="testingdashboard_module_header_1783665503" type="module_header" identity="module_header" parent="none"]
|
|
14
|
-
// CIL[DOC-MACRO purpose="Import React, router, API hooks and define testing interfaces"]
|
|
15
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Provide React components and test data types"]
|
|
16
|
-
// CIL[DOC-CONTEXT module="TestingDashboard" layer="frontend-page" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
|
|
17
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="React components and test interfaces" errors="none" side_effects="none"]
|
|
18
|
-
// CIL[DOC-MICRO logic_summary="Imports testing dependencies and defines SuiteStat and TestRun types" notable_decisions="[]"]
|
|
19
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
20
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
21
|
-
// CIL[DOC-AUDIENCE audience="developer"]
|
|
22
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-page. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, \."]
|
|
23
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
24
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
25
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
26
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
27
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
28
23
|
import React from 'react'
|
|
29
24
|
import { useNavigate } from 'react-router-dom'
|
|
30
25
|
import { useApi } from '../../hooks/useApi'
|
|
@@ -33,7 +28,23 @@ import { AgentView } from '../../components/shared/AgentView'
|
|
|
33
28
|
import { FlaskConical, CheckCircle, XCircle, Clock, RefreshCw } from 'lucide-react';
|
|
34
29
|
import { LoadingSpinner } from '../../components/ui/LoadingSpinner'
|
|
35
30
|
import { formatDateTime } from '../../lib/utils'
|
|
31
|
+
import { PageInstructions } from '../../components/admin/PageInstructions'
|
|
36
32
|
|
|
33
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Admin test suite dashboard page module header'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/components/shared/AgentView.tsx"]
|
|
34
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
35
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
36
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
37
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
38
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
39
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/TestingDashboard.tsx:module_header:module_header"]
|
|
40
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/TestingDashboard.tsx:SuiteStat:interface" type="interface" identity="SuiteStat" parent="~/.framework/src/pages/admin/TestingDashboard.tsx"]
|
|
41
|
+
// CIL[DOC-MACRO purpose="Type definition for suite statistics"]
|
|
42
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Describe the shape of aggregated test suite stats"]
|
|
43
|
+
// CIL[DOC-CONTEXT module="TestingDashboard" layer="types" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/shared/AgentView.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/TestingDashboard.tsx"]
|
|
44
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
45
|
+
// CIL[DOC-MICRO logic_summary="Record of suite, total_runs, last status, counts, and timestamps" notable_decisions="[]"]
|
|
46
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
47
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
37
48
|
interface SuiteStat {
|
|
38
49
|
suite: string
|
|
39
50
|
total_runs: number
|
|
@@ -43,7 +54,23 @@ interface SuiteStat {
|
|
|
43
54
|
last_failed: number | null
|
|
44
55
|
last_total: number | null
|
|
45
56
|
}
|
|
57
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Type definition for suite statistics'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/components/shared/AgentView.tsx"]
|
|
58
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
59
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
60
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
61
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
62
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
63
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/TestingDashboard.tsx:SuiteStat:interface"]
|
|
64
|
+
|
|
46
65
|
|
|
66
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/TestingDashboard.tsx:TestRun:interface" type="interface" identity="TestRun" parent="~/.framework/src/pages/admin/TestingDashboard.tsx"]
|
|
67
|
+
// CIL[DOC-MACRO purpose="Type definition for a test run record"]
|
|
68
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Describe the shape of an individual test run"]
|
|
69
|
+
// CIL[DOC-CONTEXT module="TestingDashboard" layer="types" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/shared/AgentView.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/TestingDashboard.tsx"]
|
|
70
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
71
|
+
// CIL[DOC-MICRO logic_summary="Record of id, suite, status, timing, counts, and trigger" notable_decisions="[]"]
|
|
72
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
73
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
47
74
|
interface TestRun {
|
|
48
75
|
id: string
|
|
49
76
|
suite: string
|
|
@@ -57,29 +84,48 @@ interface TestRun {
|
|
|
57
84
|
skipped: number | null
|
|
58
85
|
triggered_by: string | null
|
|
59
86
|
}
|
|
60
|
-
|
|
61
|
-
// CIL[
|
|
62
|
-
// CIL[
|
|
63
|
-
// CIL[DOC-
|
|
64
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Define suite labels, status badge, and duration formatting"]
|
|
65
|
-
// CIL[DOC-CONTEXT module="TestingDashboard" layer="frontend-page" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
|
|
66
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="formatted UI elements" errors="none" side_effects="none"]
|
|
67
|
-
// CIL[DOC-MICRO logic_summary="Creates status badges, duration labels, and suite name mappings" notable_decisions="[]"]
|
|
68
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
69
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
70
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-page. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, \."]
|
|
71
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
72
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
73
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
87
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Type definition for a test run record'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/components/shared/AgentView.tsx"]
|
|
88
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
89
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
90
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
74
91
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
75
92
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
93
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/TestingDashboard.tsx:TestRun:interface"]
|
|
94
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/TestingDashboard.tsx:suite_labels:constant" type="constant" identity="SUITE_LABELS" parent="~/.framework/src/pages/admin/TestingDashboard.tsx"]
|
|
95
|
+
// CIL[DOC-MACRO purpose="Human readable labels for test suite names"]
|
|
96
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Map suite slugs to display labels"]
|
|
97
|
+
// CIL[DOC-CONTEXT module="TestingDashboard" layer="constants" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/shared/AgentView.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/TestingDashboard.tsx"]
|
|
98
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
99
|
+
// CIL[DOC-MICRO logic_summary="Mapping of unit, integration, api, ui to display names" notable_decisions="[]"]
|
|
100
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
101
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
76
102
|
const SUITE_LABELS: Record<string, string> = {
|
|
77
103
|
unit: 'Unit',
|
|
78
104
|
integration: 'Integration',
|
|
79
105
|
api: 'API',
|
|
80
106
|
ui: 'UI',
|
|
81
107
|
}
|
|
108
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Human readable labels for test suite names'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/components/shared/AgentView.tsx"]
|
|
109
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
110
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
111
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
112
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
113
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
114
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/TestingDashboard.tsx:suite_labels:constant"]
|
|
115
|
+
|
|
116
|
+
|
|
82
117
|
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/TestingDashboard.tsx:StatusBadge:component" type="component" identity="StatusBadge" parent="~/.framework/src/pages/admin/TestingDashboard.tsx"]
|
|
122
|
+
// CIL[DOC-MACRO purpose="Render a colored status badge"]
|
|
123
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Display a status string as a styled badge"]
|
|
124
|
+
// CIL[DOC-CONTEXT module="TestingDashboard" layer="presentation" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/shared/AgentView.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/TestingDashboard.tsx"]
|
|
125
|
+
// CIL[DOC-CONTRACT inputs="status: string | null" outputs="JSX span" errors="none" side_effects="none"]
|
|
126
|
+
// CIL[DOC-MICRO logic_summary="Selects Tailwind color classes based on status and renders text" notable_decisions="[]"]
|
|
127
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
128
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
83
129
|
function StatusBadge({ status }: { status: string | null }) {
|
|
84
130
|
if (!status) return <span className="text-gray-400 text-xs">—</span>
|
|
85
131
|
const color =
|
|
@@ -93,27 +139,44 @@ function StatusBadge({ status }: { status: string | null }) {
|
|
|
93
139
|
</span>
|
|
94
140
|
)
|
|
95
141
|
}
|
|
142
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Render a colored status badge'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/components/shared/AgentView.tsx"]
|
|
143
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
144
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
145
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
146
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
147
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
148
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/TestingDashboard.tsx:StatusBadge:component"]
|
|
149
|
+
|
|
96
150
|
|
|
151
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/TestingDashboard.tsx:durationLabel:function" type="function" identity="durationLabel" parent="~/.framework/src/pages/admin/TestingDashboard.tsx"]
|
|
152
|
+
// CIL[DOC-MACRO purpose="Format a duration in milliseconds as a readable string"]
|
|
153
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Convert millisecond duration to ms or seconds display"]
|
|
154
|
+
// CIL[DOC-CONTEXT module="TestingDashboard" layer="presentation" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/shared/AgentView.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/TestingDashboard.tsx"]
|
|
155
|
+
// CIL[DOC-CONTRACT inputs="ms: number | null" outputs="string" errors="none" side_effects="none"]
|
|
156
|
+
// CIL[DOC-MICRO logic_summary="Returns '—' for null, 'ms' for sub-second, or formatted seconds" notable_decisions="[]"]
|
|
157
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
158
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
97
159
|
function durationLabel(ms: number | null): string {
|
|
98
160
|
if (ms == null) return '—'
|
|
99
161
|
if (ms < 1000) return `${ms}ms`
|
|
100
162
|
return `${(ms / 1000).toFixed(1)}s`
|
|
101
163
|
}
|
|
102
|
-
// CIL[
|
|
103
|
-
// CIL[
|
|
104
|
-
// CIL[DOC-
|
|
105
|
-
// CIL[DOC-
|
|
106
|
-
// CIL[DOC-CONTEXT module="TestingDashboard" layer="frontend-page" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"\\\"]"]
|
|
107
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="JSX card element" errors="none" side_effects="none"]
|
|
108
|
-
// CIL[DOC-MICRO logic_summary="Calculates pass rate and renders suite status with metrics" notable_decisions="[]"]
|
|
109
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
110
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
111
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-page. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, \."]
|
|
112
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
113
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
114
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
164
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Format a duration in milliseconds as a readable string'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/components/shared/AgentView.tsx"]
|
|
165
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
166
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
167
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
115
168
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
116
169
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
170
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/TestingDashboard.tsx:durationLabel:function"]
|
|
171
|
+
|
|
172
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/TestingDashboard.tsx:SuiteCard:component" type="component" identity="SuiteCard" parent="~/.framework/src/pages/admin/TestingDashboard.tsx"]
|
|
173
|
+
// CIL[DOC-MACRO purpose="Render a test suite summary card"]
|
|
174
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Show label, status, last run, pass/fail counts, and pass rate"]
|
|
175
|
+
// CIL[DOC-CONTEXT module="TestingDashboard" layer="presentation" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/shared/AgentView.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/TestingDashboard.tsx"]
|
|
176
|
+
// CIL[DOC-CONTRACT inputs="stat: SuiteStat" outputs="JSX card" errors="none" side_effects="none"]
|
|
177
|
+
// CIL[DOC-MICRO logic_summary="Computes pass rate and displays suite health in a card" notable_decisions="[]"]
|
|
178
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
179
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
117
180
|
function SuiteCard({ stat }: { stat: SuiteStat }) {
|
|
118
181
|
const label = SUITE_LABELS[stat.suite] ?? stat.suite
|
|
119
182
|
const passRate = stat.last_total
|
|
@@ -146,21 +209,22 @@ function SuiteCard({ stat }: { stat: SuiteStat }) {
|
|
|
146
209
|
</div>
|
|
147
210
|
)
|
|
148
211
|
}
|
|
149
|
-
// CIL[
|
|
150
|
-
// CIL[
|
|
151
|
-
// CIL[DOC-
|
|
152
|
-
// CIL[DOC-
|
|
153
|
-
// CIL[DOC-CONTEXT module="TestingDashboard" layer="frontend-page" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
|
|
154
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Complete dashboard UI" errors="none" side_effects="none"]
|
|
155
|
-
// CIL[DOC-MICRO logic_summary="Renders header, suite cards grid, and recent runs table with navigation" notable_decisions="[]"]
|
|
156
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
157
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
158
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-page. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/src/components/ui/dialog.tsx, .framework/functions/_shared/principal.ts, \."]
|
|
159
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
160
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
161
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
212
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Render a test suite summary card'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/components/shared/AgentView.tsx"]
|
|
213
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
214
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
215
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
162
216
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
163
217
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
218
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/TestingDashboard.tsx:SuiteCard:component"]
|
|
219
|
+
|
|
220
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/TestingDashboard.tsx:TestingDashboard:component" type="component" identity="TestingDashboard" parent="~/.framework/src/pages/admin/TestingDashboard.tsx"]
|
|
221
|
+
// CIL[DOC-MACRO purpose="Admin page for viewing test suite health and run history"]
|
|
222
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Fetch stats and recent runs, render suite cards and run table"]
|
|
223
|
+
// CIL[DOC-CONTEXT module="TestingDashboard" layer="page" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/shared/AgentView.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/TestingDashboard.tsx"]
|
|
224
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="JSX page" errors="none" side_effects="Triggers API fetch on load and refresh"]
|
|
225
|
+
// CIL[DOC-MICRO logic_summary="Loads suite stats and recent runs, renders cards, table, and agent view" notable_decisions="[]"]
|
|
226
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
227
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
164
228
|
export default function TestingDashboard() {
|
|
165
229
|
const navigate = useNavigate()
|
|
166
230
|
|
|
@@ -184,20 +248,6 @@ export default function TestingDashboard() {
|
|
|
184
248
|
const stats: SuiteStat[] = (statsData as any)?.data?.data ?? []
|
|
185
249
|
const runs: TestRun[] = (runsData as any)?.data?.data ?? []
|
|
186
250
|
|
|
187
|
-
// CIL[BEGIN chunk_id="testingdashboard_return_1783665503" type="jsx" identity="return" parent="testingdashboard_testingdashboard_1783665503"]
|
|
188
|
-
// CIL[DOC-MACRO purpose="Render testing dashboard with suite health cards and recent runs table"]
|
|
189
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle return"]
|
|
190
|
-
// CIL[DOC-CONTEXT module="TestingDashboard" layer="frontend-page" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
|
|
191
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Complete dashboard UI" errors="none" side_effects="none"]
|
|
192
|
-
// CIL[DOC-MICRO logic_summary="Renders header, suite cards grid, and recent runs table with navigation" notable_decisions="[]"]
|
|
193
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
194
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
195
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-page. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/src/components/ui/dialog.tsx, .framework/functions/_shared/principal.ts, \."]
|
|
196
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
197
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
198
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
199
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
200
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
201
251
|
return (
|
|
202
252
|
<div className="p-6 max-w-6xl mx-auto">
|
|
203
253
|
{/* Header */}
|
|
@@ -322,6 +372,11 @@ export default function TestingDashboard() {
|
|
|
322
372
|
)}
|
|
323
373
|
</div>
|
|
324
374
|
)
|
|
325
|
-
// CIL[END chunk_id="testingdashboard_return_1783665503"]
|
|
326
375
|
}
|
|
327
|
-
// CIL[
|
|
376
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Admin page for viewing test suite health and run history'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/components/shared/AgentView.tsx"]
|
|
377
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
378
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
379
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
380
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
381
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
382
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/TestingDashboard.tsx:TestingDashboard:component"]
|
|
@@ -1,22 +1,17 @@
|
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/TimerDetailPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/pages/admin/TimerDetailPage.tsx"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Admin detail page for creating and editing scheduled timers."]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Renders a form for viewing, creating, and editing timers, and submits changes to the timers API."]
|
|
4
|
+
// CIL[DOC-CONTEXT module="admin" layer="page" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/alert.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/checkbox.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/textarea.tsx,.framework/src/lib/api.ts,.framework/src/lib/utils.ts"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="timer id from URL (optional)" outputs="JSX rendering of the TimerDetailPage" errors="Displays API and JSON validation errors to the user" side_effects="Calls /api/timers endpoints and navigates on successful creation."]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Initializes form state, loads an existing timer when editing, validates JSON config and metadata, and renders the create/edit UI with PageInstructions." notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
8
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="developer"]
|
|
10
|
+
|
|
1
11
|
|
|
2
12
|
|
|
3
13
|
|
|
4
14
|
|
|
5
|
-
// CIL[BEGIN chunk_id="timerdetailpage_moduleheader_1783664706" type="module_header" identity="module_header" parent="none"]
|
|
6
|
-
// CIL[DOC-MACRO purpose="Import dependencies for TimerDetailPage component"]
|
|
7
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Provide all external dependencies and UI components"]
|
|
8
|
-
// CIL[DOC-CONTEXT module="TimerDetailPage" layer="frontend-page" related_files="[\".framework/src/components/ui/dialog.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
9
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="React components and utilities" errors="none" side_effects="none"]
|
|
10
|
-
// CIL[DOC-MICRO logic_summary="Imports React hooks, navigation, API utilities, and UI components" notable_decisions="[]"]
|
|
11
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
12
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
13
|
-
// CIL[DOC-AUDIENCE audience="developer"]
|
|
14
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-page. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
|
|
15
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
16
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
17
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
18
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
19
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
20
15
|
import { useState, useEffect } from 'react'
|
|
21
16
|
import { useParams, useNavigate } from 'react-router-dom'
|
|
22
17
|
import { apiFetch } from '../../lib/api'
|
|
@@ -33,21 +28,22 @@ import { Badge } from '../../components/ui/badge'
|
|
|
33
28
|
import { ArrowLeft, Clock, AlertCircle } from 'lucide-react'
|
|
34
29
|
import { formatDateTime } from '../../lib/utils'
|
|
35
30
|
import { PageInstructions } from '../../components/admin/PageInstructions'
|
|
36
|
-
|
|
37
|
-
// CIL[
|
|
38
|
-
// CIL[DOC-
|
|
39
|
-
// CIL[DOC-
|
|
40
|
-
// CIL[DOC-
|
|
41
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Timer interface" errors="none" side_effects="none"]
|
|
42
|
-
// CIL[DOC-MICRO logic_summary="Defines timer structure with execution tracking and target configuration" notable_decisions="[]"]
|
|
43
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
44
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
45
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-page. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
|
|
46
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
47
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
48
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
31
|
+
|
|
32
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Admin detail page for creating and editing scheduled timers.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/button.tsx,.framework/src/components/ui/input.tsx"]
|
|
33
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
34
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
35
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
49
36
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
50
37
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
38
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/TimerDetailPage.tsx:module_header:module_header"]
|
|
39
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/TimerDetailPage.tsx:Timer:interface" type="interface" identity="Timer" parent="~/.framework/src/pages/admin/TimerDetailPage.tsx"]
|
|
40
|
+
// CIL[DOC-MACRO purpose="TypeScript type contract for a Timer record."]
|
|
41
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Defines the shape and field types of timer data used by the detail page."]
|
|
42
|
+
// CIL[DOC-CONTEXT module="admin" layer="model" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/alert.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/checkbox.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/textarea.tsx,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/TimerDetailPage.tsx"]
|
|
43
|
+
// CIL[DOC-CONTRACT inputs="N/A" outputs="Timer interface declaration" errors="N/A" side_effects="N/A"]
|
|
44
|
+
// CIL[DOC-MICRO logic_summary="Declares fields for id, name, description, app_id, timer_type, config, pipeline_id, metadata, is_active, created_at, and updated_at." notable_decisions="[]"]
|
|
45
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
46
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
51
47
|
interface Timer {
|
|
52
48
|
id: string
|
|
53
49
|
name: string
|
|
@@ -61,41 +57,47 @@ interface Timer {
|
|
|
61
57
|
created_at: string
|
|
62
58
|
updated_at: string
|
|
63
59
|
}
|
|
64
|
-
// CIL[
|
|
65
|
-
// CIL[
|
|
66
|
-
// CIL[DOC-
|
|
67
|
-
// CIL[DOC-
|
|
68
|
-
// CIL[DOC-CONTEXT module="TimerDetailPage" layer="frontend-page" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/functions/_shared/principal.ts\",\".framework/migrations/025_retype_threads_messages.sql\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
|
|
69
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="TIMER_TYPES constant" errors="none" side_effects="none"]
|
|
70
|
-
// CIL[DOC-MICRO logic_summary="Defines available timer types: interval, cron, and one-time" notable_decisions="[]"]
|
|
71
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
72
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
73
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-page. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/functions/_shared/principal.ts, .framework/migrations/025_retype_threads_messages.sql, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
|
|
74
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
75
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
76
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
60
|
+
// CIL[DOC-VECTOR type="context" content="purpose='TypeScript type contract for a Timer record.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/button.tsx,.framework/src/components/ui/input.tsx"]
|
|
61
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
62
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
63
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
77
64
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
78
65
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
66
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/TimerDetailPage.tsx:Timer:interface"]
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/TimerDetailPage.tsx:timer_types:constant" type="constant" identity="timer_types" parent="~/.framework/src/pages/admin/TimerDetailPage.tsx"]
|
|
72
|
+
// CIL[DOC-MACRO purpose="Provides the selectable options for timer type."]
|
|
73
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Supplies value/label pairs for the timer type select input."]
|
|
74
|
+
// CIL[DOC-CONTEXT module="admin" layer="ui" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/alert.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/checkbox.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/textarea.tsx,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/TimerDetailPage.tsx"]
|
|
75
|
+
// CIL[DOC-CONTRACT inputs="N/A" outputs="TIMER_TYPES array of {value, label} objects" errors="N/A" side_effects="N/A"]
|
|
76
|
+
// CIL[DOC-MICRO logic_summary="Maps timer type keys interval, cron, and once to human-readable labels." notable_decisions="[]"]
|
|
77
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
78
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
79
79
|
const TIMER_TYPES = [
|
|
80
80
|
{ value: 'interval', label: 'Interval' },
|
|
81
81
|
{ value: 'cron', label: 'Cron Expression' },
|
|
82
82
|
{ value: 'once', label: 'One-time' }
|
|
83
83
|
]
|
|
84
|
-
// CIL[
|
|
85
|
-
// CIL[
|
|
86
|
-
// CIL[DOC-
|
|
87
|
-
// CIL[DOC-
|
|
88
|
-
// CIL[DOC-CONTEXT module="TimerDetailPage" layer="frontend-page" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
89
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="React component with timer form" errors="API failures, validation errors" side_effects="API calls, navigation"]
|
|
90
|
-
// CIL[DOC-MICRO logic_summary="Form handling with timer configuration and execution tracking" notable_decisions="[]"]
|
|
91
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
92
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
93
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-page. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
|
|
94
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
95
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
96
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
84
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Provides the selectable options for timer type.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/button.tsx,.framework/src/components/ui/input.tsx"]
|
|
85
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
86
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
87
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
97
88
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
98
89
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
90
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/TimerDetailPage.tsx:timer_types:constant"]
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/TimerDetailPage.tsx:TimerDetailPage:component" type="component" identity="TimerDetailPage" parent="~/.framework/src/pages/admin/TimerDetailPage.tsx"]
|
|
94
|
+
// CIL[DOC-MACRO purpose="Renders the timer detail form and handles create/update logic."]
|
|
95
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Fetches timer data when editing, manages form state, validates JSON, and calls the timers API to save."]
|
|
96
|
+
// CIL[DOC-CONTEXT module="admin" layer="page" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/alert.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/checkbox.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/textarea.tsx,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/TimerDetailPage.tsx"]
|
|
97
|
+
// CIL[DOC-CONTRACT inputs="URL param id (optional) and user interactions via form fields" outputs="Rendered TimerDetailPage component with create/edit UI" errors="Displays fetch and save errors and validation errors for invalid JSON" side_effects="Fetches timer on mount, calls /api/timers create/update, and navigates after creation."]
|
|
98
|
+
// CIL[DOC-MICRO logic_summary="Initializes form state, loads a timer in edit mode, parses config and metadata JSON, builds the save payload, conditionally renders editing or read-only fields, and renders PageInstructions." notable_decisions="[]"]
|
|
99
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
100
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
99
101
|
export function TimerDetailPage() {
|
|
100
102
|
const { id } = useParams<{ id: string }>()
|
|
101
103
|
const navigate = useNavigate()
|
|
@@ -120,6 +122,7 @@ export function TimerDetailPage() {
|
|
|
120
122
|
setLoading(false)
|
|
121
123
|
return
|
|
122
124
|
}
|
|
125
|
+
|
|
123
126
|
setLoading(true)
|
|
124
127
|
const fetchTimer = async () => {
|
|
125
128
|
try {
|
|
@@ -225,6 +228,8 @@ export function TimerDetailPage() {
|
|
|
225
228
|
<li>Pipeline ID must refer to an existing pipeline; otherwise the timer will fail with a missing handler.</li>
|
|
226
229
|
</ul> },
|
|
227
230
|
{ title: 'How to create, save, and validate', content: <ol className="list-decimal pl-4 space-y-1">
|
|
231
|
+
|
|
232
|
+
|
|
228
233
|
<li>Pick the timer type and fill the Config JSON with the matching schedule. Enter the Pipeline ID and optional Metadata JSON.</li>
|
|
229
234
|
<li>Click Create to save or Edit then Save for existing timers.</li>
|
|
230
235
|
<li>Validation checks the name, timer type, and that Config and Metadata are valid JSON.</li>
|
|
@@ -258,4 +263,11 @@ export function TimerDetailPage() {
|
|
|
258
263
|
</div>
|
|
259
264
|
)
|
|
260
265
|
}
|
|
261
|
-
|
|
266
|
+
|
|
267
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Renders the timer detail form and handles create/update logic.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/button.tsx,.framework/src/components/ui/input.tsx"]
|
|
268
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
269
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
270
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
271
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
272
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
273
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/TimerDetailPage.tsx:TimerDetailPage:component"]
|