spine-framework 0.3.125 → 0.3.126
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/.framework/cli/commands/agents.ts +35 -37
- package/.framework/cli/commands/auth.ts +35 -34
- package/.framework/cli/commands/create-app.ts +104 -40
- package/.framework/cli/commands/dev.ts +104 -69
- package/.framework/cli/commands/doctor.ts +169 -97
- package/.framework/cli/commands/generate.ts +82 -160
- package/.framework/cli/commands/init.ts +72 -34
- package/.framework/cli/commands/install-app.ts +260 -125
- package/.framework/cli/commands/items.ts +33 -44
- package/.framework/cli/commands/migrate.ts +122 -40
- package/.framework/cli/commands/migrations.ts +33 -40
- package/.framework/cli/commands/pipelines.ts +31 -39
- package/.framework/cli/commands/status.ts +47 -23
- package/.framework/cli/commands/system.ts +47 -37
- package/.framework/cli/commands/test.ts +112 -68
- package/.framework/cli/commands/validate-app.ts +215 -121
- package/.framework/cli/context.ts +112 -130
- package/.framework/cli/env-loader.ts +47 -18
- package/.framework/cli/index.ts +81 -42
- package/.framework/docs/runtime-types.md +1024 -0
- package/.framework/functions/_shared/agent-runner.ts +1296 -961
- package/.framework/functions/_shared/app-manifest.ts +82 -68
- package/.framework/functions/_shared/audit.ts +135 -83
- package/.framework/functions/_shared/{cil-state.ts → cil.ts} +147 -54
- package/.framework/functions/_shared/db.ts +80 -126
- package/.framework/functions/_shared/hash-api-key.ts +63 -0
- package/.framework/functions/_shared/index.ts +222 -347
- package/.framework/functions/_shared/kb.ts +319 -0
- package/.framework/functions/_shared/llm.ts +92 -0
- package/.framework/functions/_shared/logging.ts +288 -0
- package/.framework/functions/_shared/middleware.ts +329 -365
- package/.framework/functions/_shared/outcomes.ts +36 -0
- package/.framework/functions/_shared/permissions.ts +359 -643
- package/.framework/functions/_shared/pipeline-runner.ts +243 -316
- package/.framework/functions/_shared/principal.ts +376 -468
- package/.framework/functions/_shared/resolve-credentials.ts +102 -0
- package/.framework/functions/_shared/resolve-ids.ts +162 -14
- package/.framework/functions/_shared/retry-deliveries.ts +104 -0
- package/.framework/functions/_shared/schema-utils.ts +611 -373
- package/.framework/functions/_shared/testing.ts +207 -137
- package/.framework/functions/_shared/tracing.ts +276 -0
- package/.framework/functions/_shared/trigger-engine.ts +159 -211
- package/.framework/functions/_shared/webhook-registration.ts +95 -81
- package/.framework/functions/_shared/webhook-registry.ts +153 -75
- package/.framework/functions/account-nodes.ts +31 -53
- package/.framework/functions/adapters/generic-webhook-inbound.ts +56 -0
- package/.framework/functions/adapters/generic-webhook-outbound.ts +43 -0
- package/.framework/functions/adapters/openai-outbound.ts +40 -0
- package/.framework/functions/admin-data.ts +687 -533
- package/.framework/functions/admin-funnel.ts +31 -20
- package/.framework/functions/admin-install-funnel.ts +47 -28
- package/.framework/functions/admin-signals.ts +47 -29
- package/.framework/functions/ai-agents.ts +122 -147
- package/.framework/functions/ai-interactions.ts +180 -90
- package/.framework/functions/api-keys.ts +250 -192
- package/.framework/functions/apps.ts +203 -197
- package/.framework/functions/auth.ts +98 -91
- package/.framework/functions/cil-agent-ingest.ts +773 -0
- package/.framework/functions/cil-agent.ts +592 -0
- package/.framework/functions/cil-callmap.ts +1227 -0
- package/.framework/functions/cil-config.ts +583 -0
- package/.framework/functions/cil-context.ts +445 -0
- package/.framework/functions/cil-doc.ts +1752 -0
- package/.framework/functions/cil-embeddings.ts +1202 -0
- package/.framework/functions/cil-graph.ts +585 -0
- package/.framework/functions/cil-ingest.ts +2416 -0
- package/.framework/functions/cil-pipeline.ts +318 -0
- package/.framework/functions/cil-project.ts +499 -0
- package/.framework/functions/cil-validate.ts +469 -0
- package/.framework/functions/debug-auth.ts +73 -53
- package/.framework/functions/deliveries.ts +117 -0
- package/.framework/functions/embeddings.ts +528 -516
- package/.framework/functions/eval-harness.ts +158 -106
- package/.framework/functions/integration-outbound.ts +311 -0
- package/.framework/functions/integration-routes.ts +240 -466
- package/.framework/functions/integrations.ts +132 -140
- package/.framework/functions/invites.ts +401 -201
- package/.framework/functions/item-progress.ts +113 -53
- package/.framework/functions/kb.ts +28 -0
- package/.framework/functions/logs.ts +239 -222
- package/.framework/functions/observability.ts +308 -259
- package/.framework/functions/pipeline-executions.ts +179 -235
- package/.framework/functions/pipelines.ts +163 -205
- package/.framework/functions/prompt-configs.ts +109 -156
- package/.framework/functions/roles.ts +97 -147
- package/.framework/functions/system-cron.ts +132 -218
- package/.framework/functions/system.ts +112 -52
- package/.framework/functions/tests.ts +32 -28
- package/.framework/functions/timers.ts +162 -210
- package/.framework/functions/triggers.ts +282 -346
- package/.framework/functions/types.ts +283 -400
- package/.framework/migrations/001_core_schema.sql +630 -0
- package/.framework/migrations/002_core_rls_and_functions.sql +532 -0
- package/.framework/migrations/{003_system_data.sql → 003_core_system_data.sql} +26 -153
- package/.framework/migrations/004_core_rpc_and_broker.sql +421 -0
- package/.framework/migrations/005_core_observability.sql +598 -0
- package/.framework/migrations/006_security_hardening_rls.sql +97 -0
- package/.framework/migrations/007_kb_article_list.sql +237 -0
- package/.framework/migrations/008_items_target.sql +8 -0
- package/.framework/migrations/009_roles_slug_unique.sql +11 -0
- package/.framework/public/spine.config.json +91 -0
- package/.framework/scripts/app-install-cli.ts +112 -98
- package/.framework/src/App.tsx +67 -20
- package/.framework/src/apps/admin/index.tsx +97 -27
- package/.framework/src/components/AppWrapper.tsx +50 -11
- package/.framework/src/components/CustomAppLoader.tsx +131 -22
- package/.framework/src/components/admin/AdminListPage.tsx +75 -8
- package/.framework/src/components/admin/AdminSidebar.tsx +148 -36
- package/.framework/src/components/admin/AdminStatsCard.tsx +48 -29
- package/.framework/src/components/admin/PageInstructions.tsx +49 -0
- package/.framework/src/components/admin/SortableTableHeader.tsx +49 -2
- package/.framework/src/components/app-shell/GenericAppShell.tsx +69 -11
- package/.framework/src/components/app-shell/GenericDetailPage.tsx +55 -10
- package/.framework/src/components/app-shell/GenericListPage.tsx +76 -9
- package/.framework/src/components/app-sidebar.tsx +50 -3
- package/.framework/src/components/auth/ProtectedRoute.tsx +53 -45
- package/.framework/src/components/kb/KBArticleEditor.tsx +409 -0
- package/.framework/src/components/kb/KBArticleList.tsx +557 -0
- package/.framework/src/components/layout/AppShell.tsx +54 -16
- package/.framework/src/components/layout/Header.tsx +50 -38
- package/.framework/src/components/layout/Layout.tsx +48 -32
- package/.framework/src/components/layout/Sidebar.tsx +167 -16
- package/.framework/src/components/runtime/DataDetailHeader.tsx +33 -1
- package/.framework/src/components/runtime/DataDetailPage.tsx +289 -4
- package/.framework/src/components/runtime/DataFilters.tsx +78 -1
- package/.framework/src/components/runtime/DataHeader.tsx +32 -29
- package/.framework/src/components/runtime/DataListPage.tsx +161 -2
- package/.framework/src/components/runtime/DataStats.tsx +48 -1
- package/.framework/src/components/runtime/DataTable.tsx +153 -1
- package/.framework/src/components/runtime/SchemaDetailForm.tsx +77 -46
- package/.framework/src/components/runtime/index.ts +16 -9
- package/.framework/src/components/search-form.tsx +33 -1
- package/.framework/src/components/shared/AgentView.tsx +48 -51
- package/.framework/src/components/shared/FieldRenderer.tsx +84 -67
- package/.framework/src/components/shared/InviteManager.tsx +113 -52
- package/.framework/src/components/shared/MemberList.tsx +182 -0
- package/.framework/src/components/shared/SchemaFields.tsx +96 -78
- package/.framework/src/components/ui/DataTable.tsx +86 -56
- package/.framework/src/components/ui/Form.tsx +188 -109
- package/.framework/src/components/ui/ItemCard.tsx +86 -58
- package/.framework/src/components/ui/ItemListView.tsx +88 -61
- package/.framework/src/components/ui/LoadingSpinner.tsx +52 -27
- package/.framework/src/components/ui/Modal.tsx +81 -4
- package/.framework/src/components/ui/RichTextEditor.tsx +101 -9
- package/.framework/src/components/ui/accordion.tsx +97 -5
- package/.framework/src/components/ui/alert-dialog.tsx +225 -13
- package/.framework/src/components/ui/alert.tsx +113 -6
- package/.framework/src/components/ui/aspect-ratio.tsx +49 -2
- package/.framework/src/components/ui/avatar.tsx +129 -7
- package/.framework/src/components/ui/badge.tsx +65 -3
- package/.framework/src/components/ui/breadcrumb.tsx +145 -8
- package/.framework/src/components/ui/button-group.tsx +81 -4
- package/.framework/src/components/ui/button.tsx +49 -2
- package/.framework/src/components/ui/calendar.tsx +65 -3
- package/.framework/src/components/ui/card.tsx +145 -8
- package/.framework/src/components/ui/carousel.tsx +129 -7
- package/.framework/src/components/ui/chart.tsx +161 -10
- package/.framework/src/components/ui/checkbox.tsx +49 -2
- package/.framework/src/components/ui/collapsible.tsx +81 -5
- package/.framework/src/components/ui/combobox.tsx +305 -20
- package/.framework/src/components/ui/command.tsx +177 -11
- package/.framework/src/components/ui/context-menu.tsx +273 -17
- package/.framework/src/components/ui/dialog.tsx +209 -27
- package/.framework/src/components/ui/direction.tsx +64 -4
- package/.framework/src/components/ui/drawer.tsx +193 -12
- package/.framework/src/components/ui/dropdown-menu.tsx +273 -18
- package/.framework/src/components/ui/empty.tsx +145 -9
- package/.framework/src/components/ui/field.tsx +209 -14
- package/.framework/src/components/ui/hover-card.tsx +81 -4
- package/.framework/src/components/ui/input-group.tsx +162 -10
- package/.framework/src/components/ui/input-otp.tsx +98 -5
- package/.framework/src/components/ui/input.tsx +49 -2
- package/.framework/src/components/ui/item.tsx +225 -13
- package/.framework/src/components/ui/kbd.tsx +65 -3
- package/.framework/src/components/ui/label.tsx +49 -2
- package/.framework/src/components/ui/menubar.tsx +289 -17
- package/.framework/src/components/ui/native-select.tsx +97 -5
- package/.framework/src/components/ui/navigation-menu.tsx +177 -10
- package/.framework/src/components/ui/pagination.tsx +161 -9
- package/.framework/src/components/ui/popover.tsx +145 -8
- package/.framework/src/components/ui/progress.tsx +49 -2
- package/.framework/src/components/ui/radio-group.tsx +65 -3
- package/.framework/src/components/ui/resizable.tsx +82 -4
- package/.framework/src/components/ui/scroll-area.tsx +65 -3
- package/.framework/src/components/ui/select.tsx +193 -11
- package/.framework/src/components/ui/separator.tsx +49 -2
- package/.framework/src/components/ui/sheet.tsx +193 -11
- package/.framework/src/components/ui/sidebar.tsx +481 -38
- package/.framework/src/components/ui/skeleton.tsx +49 -2
- package/.framework/src/components/ui/slider.tsx +49 -2
- package/.framework/src/components/ui/sonner.tsx +49 -2
- package/.framework/src/components/ui/spinner.tsx +49 -2
- package/.framework/src/components/ui/switch.tsx +49 -2
- package/.framework/src/components/ui/table-primitives.tsx +160 -33
- package/.framework/src/components/ui/table.tsx +161 -9
- package/.framework/src/components/ui/tabs.tsx +113 -6
- package/.framework/src/components/ui/textarea.tsx +49 -2
- package/.framework/src/components/ui/toggle-group.tsx +81 -4
- package/.framework/src/components/ui/toggle.tsx +65 -3
- package/.framework/src/components/ui/tooltip.tsx +97 -5
- package/.framework/src/contexts/AppContext.tsx +129 -45
- package/.framework/src/contexts/AuthContext.tsx +173 -145
- package/.framework/src/hooks/use-mobile.ts +48 -2
- package/.framework/src/hooks/useApi.ts +208 -159
- package/.framework/src/hooks/useAppPath.ts +32 -23
- package/.framework/src/hooks/useApps.ts +51 -20
- package/.framework/src/hooks/useEntityList.ts +32 -78
- package/.framework/src/hooks/useEntityRecord.ts +35 -96
- package/.framework/src/hooks/useForm.ts +32 -92
- package/.framework/src/hooks/useListSchema.ts +49 -78
- package/.framework/src/hooks/useSchemaRecord.ts +114 -105
- package/.framework/src/lib/api.ts +192 -115
- package/.framework/src/lib/supabase.ts +98 -64
- package/.framework/src/lib/utils.ts +287 -151
- package/.framework/src/main.tsx +49 -3
- package/.framework/src/pages/DashboardPage.tsx +52 -29
- package/.framework/src/pages/NotFoundPage.tsx +32 -10
- package/.framework/src/pages/SetupPage.tsx +32 -12
- package/.framework/src/pages/admin/AIAgentDetailPage.tsx +119 -10
- package/.framework/src/pages/admin/AIAgentsPage.tsx +48 -19
- package/.framework/src/pages/admin/APIKeyDetailPage.tsx +187 -17
- package/.framework/src/pages/admin/APIKeysPage.tsx +98 -22
- package/.framework/src/pages/admin/AlertsConfigPage.tsx +113 -26
- package/.framework/src/pages/admin/AppDetailPage.tsx +125 -8
- package/.framework/src/pages/admin/AppsPage.tsx +49 -2
- package/.framework/src/pages/admin/DeliveriesPage.tsx +196 -0
- package/.framework/src/pages/admin/DesignedPage.tsx +32 -18
- package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +215 -484
- package/.framework/src/pages/admin/EmbeddingsPage.tsx +116 -319
- package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -16
- package/.framework/src/pages/admin/IntegrationDetailPage.tsx +183 -26
- package/.framework/src/pages/admin/IntegrationsPage.tsx +48 -19
- package/.framework/src/pages/admin/InvitesPage.tsx +48 -14
- package/.framework/src/pages/admin/LogsPage.tsx +422 -75
- package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/ObservabilityDashboard.tsx +113 -24
- package/.framework/src/pages/admin/PipelineDetailPage.tsx +206 -34
- package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +50 -17
- package/.framework/src/pages/admin/PipelinesPage.tsx +160 -21
- package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +378 -88
- package/.framework/src/pages/admin/PromptConfigsPage.tsx +125 -16
- package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +49 -10
- package/.framework/src/pages/admin/RoleDetailPage.tsx +130 -10
- package/.framework/src/pages/admin/RolesPage.tsx +171 -18
- package/.framework/src/pages/admin/SelectTestPage.tsx +34 -9
- package/.framework/src/pages/admin/ShadcnTestPage.tsx +49 -11
- package/.framework/src/pages/admin/SimpleDashboard.tsx +49 -10
- package/.framework/src/pages/admin/TestRunDetailPage.tsx +49 -4
- package/.framework/src/pages/admin/TestingDashboard.tsx +98 -28
- package/.framework/src/pages/admin/TimerDetailPage.tsx +143 -33
- package/.framework/src/pages/admin/TimersPage.tsx +48 -20
- package/.framework/src/pages/admin/TriggerDetailPage.tsx +118 -30
- package/.framework/src/pages/admin/TriggersPage.tsx +64 -19
- package/.framework/src/pages/admin/TypeDetailPage.tsx +138 -15
- package/.framework/src/pages/admin/TypesPage.tsx +48 -20
- package/.framework/src/pages/admin/cil/CILAgentPage.tsx +465 -0
- package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +787 -0
- package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +699 -0
- package/.framework/src/pages/admin/cil/CILFileListPage.tsx +647 -0
- package/.framework/src/pages/admin/cil/CILGraphPage.tsx +616 -0
- package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +1402 -0
- package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +614 -0
- package/.framework/src/pages/admin/cil/CILSearchPage.tsx +571 -0
- package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +731 -0
- package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
- package/.framework/src/pages/auth/AuthConfirmPage.tsx +52 -51
- package/.framework/src/pages/auth/ForgotPasswordPage.tsx +31 -22
- package/.framework/src/pages/auth/LoginPage.tsx +50 -23
- package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -15
- package/.framework/src/pages/auth/RegisterPage.tsx +281 -317
- package/.framework/src/pages/spine-framework/APIPage.tsx +33 -0
- package/.framework/src/pages/spine-framework/CLIPage.tsx +33 -0
- package/.framework/src/types/auth.ts +128 -71
- package/.framework/src/types/types.ts +373 -157
- package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +39 -0
- package/custom/.devin/skills/spine-workbench-idea/SKILL.md +36 -0
- package/custom/.devin/skills/spine-workbench-implement/SKILL.md +46 -0
- package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +28 -0
- package/custom/.devin/skills/spine-workbench-plan/SKILL.md +38 -0
- package/docs/README.md +9 -130
- package/netlify.toml +3 -3
- package/package.json +13 -25
- package/scripts/kb-ingest-docs.ts +203 -0
- package/spine.config.json +65 -4
- package/.framework/migrations/001_schema.sql +0 -425
- package/.framework/migrations/002_rls_and_functions.sql +0 -763
- package/.framework/migrations/004_enhancements.sql +0 -43
- package/.framework/migrations/005_auth_user_trigger.sql +0 -105
- package/.framework/migrations/006_fix_current_actor_id.sql +0 -21
- package/.framework/migrations/016_invites.sql +0 -27
- package/.framework/migrations/017_fix_get_account_apps.sql +0 -78
- package/.framework/migrations/018_apps_required_roles.sql +0 -17
- package/.framework/migrations/019_triggers_unique_constraint.sql +0 -13
- package/.framework/migrations/020_get_account_apps_role_filter.sql +0 -117
- package/.framework/migrations/021_app_domains.sql +0 -112
- package/.framework/migrations/022_route_prefix_domain_unique.sql +0 -21
- package/.framework/migrations/023_match_embeddings_rpc.sql +0 -78
- package/.framework/migrations/024_messages_account_id.sql +0 -9
- package/.framework/migrations/025_retype_threads_messages.sql +0 -240
- package/.framework/migrations/026_fix_rls_policies.sql +0 -47
- package/.framework/migrations/027_embedding_lifecycle.sql +0 -176
- package/.framework/migrations/028_fix_message_data_permissions.sql +0 -49
- package/.framework/migrations/029_tighten_support_triage_prompt.sql +0 -41
- package/.framework/migrations/030_messages_updated_by.sql +0 -6
- package/.framework/migrations/031_seed_upsert_constraints.sql +0 -35
- package/docs/APPS.md +0 -232
- package/docs/ARCHITECTURE.md +0 -246
- package/docs/INSTALL.md +0 -155
- package/docs/design-schema-spec.md +0 -1837
- package/docs/dev-guides/01-create-an-app.md +0 -183
- package/docs/dev-guides/02-create-a-function.md +0 -178
- package/docs/dev-guides/03-create-a-component.md +0 -178
- package/docs/dev-guides/04-webhook-handlers.md +0 -129
- package/docs/dev-guides/05-testing.md +0 -168
- package/docs/dev-guides/README.md +0 -40
- package/docs/npm-packages-plan.md +0 -288
- package/docs/spine-core--api-reference.md +0 -822
|
@@ -1,239 +1,54 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module src/pages/admin/EmbeddingsPage
|
|
3
|
-
* @audience installer
|
|
4
|
-
* @layer frontend-page
|
|
5
|
-
* @stability stable
|
|
6
|
-
*
|
|
7
|
-
* Admin list page for embedding model configurations. Fetches all models
|
|
8
|
-
* via `/api/embeddings?action=list`, applies client-side search, provider
|
|
9
|
-
* filter (`openai` | `anthropic` | `local` | `custom`), and sort. Renders
|
|
10
|
-
* inside `AdminListPage`. Row clicks navigate to
|
|
11
|
-
* `/spine-framework/admin/configs/embeddings/:id`.
|
|
12
|
-
*
|
|
13
|
-
* @seeAlso src/pages/admin/EmbeddingDetailPage.tsx
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
1
|
import { useState } from 'react'
|
|
17
2
|
import { useNavigate } from 'react-router-dom'
|
|
18
|
-
import {
|
|
19
|
-
import { formatDateTime
|
|
3
|
+
import { FileText, CheckCircle, XCircle, AlertCircle } from 'lucide-react'
|
|
4
|
+
import { formatDateTime } from '../../lib/utils'
|
|
20
5
|
import { AdminListPage } from '../../components/admin/AdminListPage'
|
|
21
6
|
import { SortableTableHeader } from '../../components/admin/SortableTableHeader'
|
|
22
|
-
import { Badge } from '../../components/ui/badge'
|
|
23
7
|
import { useApi } from '../../hooks/useApi'
|
|
24
8
|
import { apiFetch } from '../../lib/api'
|
|
9
|
+
import { PageInstructions } from '../../components/admin/PageInstructions'
|
|
25
10
|
|
|
26
|
-
interface
|
|
11
|
+
interface EmbeddingRecord {
|
|
27
12
|
id: string
|
|
28
|
-
name: string
|
|
29
|
-
description?: string
|
|
30
|
-
model_name: string
|
|
31
|
-
provider: 'openai' | 'anthropic' | 'local' | 'custom'
|
|
32
|
-
config: {
|
|
33
|
-
dimension: number
|
|
34
|
-
chunk_size: number
|
|
35
|
-
overlap: number
|
|
36
|
-
batch_size: number
|
|
37
|
-
}
|
|
38
|
-
is_active: boolean
|
|
39
|
-
created_at: string
|
|
40
|
-
updated_at: string
|
|
41
|
-
created_by: string
|
|
42
13
|
account_id: string
|
|
43
|
-
document_count: number
|
|
44
|
-
embedding_count: number
|
|
45
|
-
storage_size: number
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
interface EmbeddingDocument {
|
|
49
|
-
id: string
|
|
50
14
|
model_id: string
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
15
|
+
document_id: string
|
|
16
|
+
chunk_index: number
|
|
17
|
+
content: string
|
|
18
|
+
embedding: number[]
|
|
19
|
+
metadata: Record<string, any> | null
|
|
20
|
+
approved_at: string | null
|
|
21
|
+
revoked_at: string | null
|
|
22
|
+
content_hash: string
|
|
56
23
|
created_at: string
|
|
57
24
|
updated_at: string
|
|
58
|
-
created_by: string
|
|
59
|
-
error?: string
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
interface EmbeddingSearch {
|
|
63
|
-
query: string
|
|
64
|
-
results: Array<{
|
|
65
|
-
document_id: string
|
|
66
|
-
document_title: string
|
|
67
|
-
chunk_content: string
|
|
68
|
-
similarity_score: number
|
|
69
|
-
chunk_index: number
|
|
70
|
-
}>
|
|
71
|
-
search_time: number
|
|
72
|
-
total_results: number
|
|
73
25
|
}
|
|
74
26
|
|
|
75
27
|
export function EmbeddingsPage() {
|
|
76
28
|
const navigate = useNavigate()
|
|
77
29
|
const [searchTerm, setSearchTerm] = useState('')
|
|
78
|
-
const [
|
|
79
|
-
const [
|
|
80
|
-
const [sortKey, setSortKey] = useState('name')
|
|
81
|
-
const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>('asc')
|
|
30
|
+
const [sortKey, setSortKey] = useState<string>('created_at')
|
|
31
|
+
const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>('desc')
|
|
82
32
|
|
|
83
|
-
|
|
84
|
-
const { data: embeddings, loading, error, refetch } = useApi<any[]>(
|
|
33
|
+
const { data: records, loading, error, refetch } = useApi<EmbeddingRecord[]>(
|
|
85
34
|
async () => {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
if (!response.ok) {
|
|
92
|
-
console.error('Response not ok:', response.statusText)
|
|
93
|
-
throw new Error(`Failed to fetch embeddings: ${response.statusText}`)
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
const result = await response.json()
|
|
97
|
-
console.log('Raw API result:', result)
|
|
98
|
-
|
|
99
|
-
// Handle both nested and direct responses
|
|
100
|
-
const embeddings = result.data || result
|
|
101
|
-
console.log('Embeddings after processing:', embeddings)
|
|
102
|
-
|
|
103
|
-
return embeddings
|
|
104
|
-
} catch (error) {
|
|
105
|
-
console.error('Error in EmbeddingsPage:', error)
|
|
106
|
-
throw error
|
|
107
|
-
}
|
|
35
|
+
const response = await apiFetch('/api/embeddings?method=GET&action=list')
|
|
36
|
+
if (!response.ok) throw new Error('Failed to fetch embeddings')
|
|
37
|
+
const result = await response.json()
|
|
38
|
+
return (result.data || result) as EmbeddingRecord[]
|
|
108
39
|
},
|
|
109
40
|
{ immediate: true }
|
|
110
41
|
)
|
|
111
42
|
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
chunk_count: 45,
|
|
120
|
-
embedding_count: 45,
|
|
121
|
-
created_at: new Date(Date.now() - 1000 * 60 * 60 * 24 * 5).toISOString(),
|
|
122
|
-
updated_at: new Date(Date.now() - 1000 * 60 * 60 * 4).toISOString(),
|
|
123
|
-
created_by: 'Jane Smith'
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
id: '2',
|
|
127
|
-
model_id: '1',
|
|
128
|
-
title: 'API Documentation',
|
|
129
|
-
content_type: 'markdown',
|
|
130
|
-
status: 'processing',
|
|
131
|
-
chunk_count: 67,
|
|
132
|
-
embedding_count: 0,
|
|
133
|
-
created_at: new Date(Date.now() - 1000 * 60 * 60 * 2).toISOString(),
|
|
134
|
-
updated_at: new Date(Date.now() - 1000 * 60 * 60 * 1).toISOString(),
|
|
135
|
-
created_by: 'John Doe'
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
id: '3',
|
|
139
|
-
model_id: '2',
|
|
140
|
-
title: 'React Components Library',
|
|
141
|
-
content_type: 'code',
|
|
142
|
-
status: 'completed',
|
|
143
|
-
chunk_count: 234,
|
|
144
|
-
embedding_count: 234,
|
|
145
|
-
created_at: new Date(Date.now() - 1000 * 60 * 60 * 24 * 3).toISOString(),
|
|
146
|
-
updated_at: new Date(Date.now() - 1000 * 60 * 60 * 2).toISOString(),
|
|
147
|
-
created_by: 'Mike Johnson'
|
|
148
|
-
},
|
|
149
|
-
{
|
|
150
|
-
id: '4',
|
|
151
|
-
model_id: '1',
|
|
152
|
-
title: 'Company Policies',
|
|
153
|
-
content_type: 'docx',
|
|
154
|
-
status: 'failed',
|
|
155
|
-
chunk_count: 0,
|
|
156
|
-
embedding_count: 0,
|
|
157
|
-
created_at: new Date(Date.now() - 1000 * 60 * 60 * 24).toISOString(),
|
|
158
|
-
updated_at: new Date(Date.now() - 1000 * 60 * 60 * 23).toISOString(),
|
|
159
|
-
created_by: 'Admin',
|
|
160
|
-
error: 'Document format not supported'
|
|
161
|
-
}
|
|
162
|
-
]
|
|
163
|
-
|
|
164
|
-
const mockSearchResults: EmbeddingSearch = {
|
|
165
|
-
query: 'how to reset password',
|
|
166
|
-
results: [
|
|
167
|
-
{
|
|
168
|
-
document_id: '1',
|
|
169
|
-
document_title: 'User Guide - Getting Started',
|
|
170
|
-
chunk_content: 'To reset your password, go to the settings page and click on "Reset Password"...',
|
|
171
|
-
similarity_score: 0.95,
|
|
172
|
-
chunk_index: 12
|
|
173
|
-
},
|
|
174
|
-
{
|
|
175
|
-
document_id: '1',
|
|
176
|
-
document_title: 'User Guide - Getting Started',
|
|
177
|
-
chunk_content: 'Password reset emails are sent to your registered email address...',
|
|
178
|
-
similarity_score: 0.87,
|
|
179
|
-
chunk_index: 13
|
|
180
|
-
},
|
|
181
|
-
{
|
|
182
|
-
document_id: '3',
|
|
183
|
-
document_title: 'React Components Library',
|
|
184
|
-
chunk_content: 'The PasswordReset component handles user password reset functionality...',
|
|
185
|
-
similarity_score: 0.72,
|
|
186
|
-
chunk_index: 45
|
|
187
|
-
}
|
|
188
|
-
],
|
|
189
|
-
search_time: 0.234,
|
|
190
|
-
total_results: 3
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
const providers = [
|
|
194
|
-
{ value: 'all', label: 'All Providers' },
|
|
195
|
-
{ value: 'openai', label: 'OpenAI' },
|
|
196
|
-
{ value: 'anthropic', label: 'Anthropic' },
|
|
197
|
-
{ value: 'local', label: 'Local' },
|
|
198
|
-
{ value: 'custom', label: 'Custom' }
|
|
199
|
-
]
|
|
200
|
-
|
|
201
|
-
const statusOptions = [
|
|
202
|
-
{ value: 'all', label: 'All Statuses' },
|
|
203
|
-
{ value: 'active', label: 'Active' },
|
|
204
|
-
{ value: 'inactive', label: 'Inactive' }
|
|
205
|
-
]
|
|
206
|
-
|
|
207
|
-
const filteredModels = (embeddings || []).filter(embedding => {
|
|
208
|
-
const matchesSearch = embedding.content?.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
|
209
|
-
(embedding.metadata?.source && embedding.metadata.source.toLowerCase().includes(searchTerm.toLowerCase()))
|
|
210
|
-
const matchesProvider = selectedProvider === 'all' || embedding.metadata?.source === selectedProvider
|
|
211
|
-
const matchesStatus = selectedStatus === 'all' ||
|
|
212
|
-
(selectedStatus === 'active' && true) || // All embeddings are considered active
|
|
213
|
-
(selectedStatus === 'inactive' && false)
|
|
214
|
-
return matchesSearch && matchesProvider && matchesStatus
|
|
43
|
+
const filteredRecords = (records || []).filter((record) => {
|
|
44
|
+
const term = searchTerm.toLowerCase()
|
|
45
|
+
return (
|
|
46
|
+
(record.content?.toLowerCase().includes(term) || false) ||
|
|
47
|
+
(record.document_id?.toLowerCase().includes(term) || false) ||
|
|
48
|
+
(record.model_id?.toLowerCase().includes(term) || false)
|
|
49
|
+
)
|
|
215
50
|
})
|
|
216
51
|
|
|
217
|
-
// Helper functions
|
|
218
|
-
const getProviderBadgeColor = (provider: string) => {
|
|
219
|
-
switch (provider) {
|
|
220
|
-
case 'openai':
|
|
221
|
-
return 'bg-green-100 text-green-800'
|
|
222
|
-
case 'anthropic':
|
|
223
|
-
return 'bg-blue-100 text-blue-800'
|
|
224
|
-
case 'local':
|
|
225
|
-
return 'bg-purple-100 text-purple-800'
|
|
226
|
-
case 'custom':
|
|
227
|
-
return 'bg-orange-100 text-orange-800'
|
|
228
|
-
default:
|
|
229
|
-
return 'bg-slate-100 text-slate-800'
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
const getStatusBadgeColor = (isActive: boolean) => {
|
|
234
|
-
return isActive ? 'bg-green-100 text-green-800' : 'bg-slate-100 text-slate-800'
|
|
235
|
-
}
|
|
236
|
-
|
|
237
52
|
const handleSort = (key: string) => {
|
|
238
53
|
if (sortKey === key) {
|
|
239
54
|
setSortDirection(sortDirection === 'asc' ? 'desc' : 'asc')
|
|
@@ -243,121 +58,121 @@ export function EmbeddingsPage() {
|
|
|
243
58
|
}
|
|
244
59
|
}
|
|
245
60
|
|
|
246
|
-
const
|
|
247
|
-
|
|
248
|
-
|
|
61
|
+
const sortedRecords = [...filteredRecords].sort((a, b) => {
|
|
62
|
+
const aValue: any = a[sortKey as keyof EmbeddingRecord]
|
|
63
|
+
const bValue: any = b[sortKey as keyof EmbeddingRecord]
|
|
249
64
|
|
|
250
|
-
|
|
251
|
-
const sortedModels = [...filteredModels].sort((a, b) => {
|
|
252
|
-
let aValue: any = a[sortKey as keyof EmbeddingModel]
|
|
253
|
-
let bValue: any = b[sortKey as keyof EmbeddingModel]
|
|
254
|
-
|
|
65
|
+
if (aValue == null || bValue == null) return 0
|
|
255
66
|
if (typeof aValue === 'string') {
|
|
256
|
-
return sortDirection === 'asc'
|
|
67
|
+
return sortDirection === 'asc'
|
|
257
68
|
? aValue.localeCompare(bValue)
|
|
258
69
|
: bValue.localeCompare(aValue)
|
|
259
70
|
}
|
|
260
|
-
|
|
261
71
|
if (typeof aValue === 'number') {
|
|
262
|
-
return sortDirection === 'asc'
|
|
72
|
+
return sortDirection === 'asc'
|
|
73
|
+
? aValue - bValue
|
|
74
|
+
: bValue - aValue
|
|
263
75
|
}
|
|
264
|
-
|
|
265
76
|
return 0
|
|
266
77
|
})
|
|
267
78
|
|
|
79
|
+
const getStatus = (record: EmbeddingRecord) => {
|
|
80
|
+
if (record.revoked_at) return { label: 'Revoked', color: 'bg-red-100 text-red-700' }
|
|
81
|
+
if (record.approved_at) return { label: 'Approved', color: 'bg-green-100 text-green-700' }
|
|
82
|
+
return { label: 'Pending', color: 'bg-slate-100 text-slate-600' }
|
|
83
|
+
}
|
|
84
|
+
|
|
268
85
|
const statsCards = [
|
|
269
86
|
{
|
|
270
|
-
title: 'Total
|
|
271
|
-
value: (
|
|
87
|
+
title: 'Total Records',
|
|
88
|
+
value: (records || []).length,
|
|
272
89
|
icon: FileText,
|
|
273
|
-
iconColor: 'text-blue-
|
|
90
|
+
iconColor: 'text-blue-600'
|
|
274
91
|
},
|
|
275
92
|
{
|
|
276
|
-
title: '
|
|
277
|
-
value: (
|
|
93
|
+
title: 'Approved',
|
|
94
|
+
value: (records || []).filter(r => r.approved_at && !r.revoked_at).length,
|
|
278
95
|
icon: CheckCircle,
|
|
279
|
-
iconColor: 'text-green-
|
|
96
|
+
iconColor: 'text-green-600'
|
|
280
97
|
},
|
|
281
98
|
{
|
|
282
|
-
title: '
|
|
283
|
-
value: (
|
|
284
|
-
icon:
|
|
285
|
-
iconColor: 'text-
|
|
286
|
-
},
|
|
287
|
-
{
|
|
288
|
-
title: 'Last Updated',
|
|
289
|
-
value: (embeddings || []).length > 0 ? 'Just now' : 'Never',
|
|
290
|
-
icon: Box,
|
|
291
|
-
iconColor: 'text-purple-500'
|
|
292
|
-
}
|
|
293
|
-
]
|
|
294
|
-
|
|
295
|
-
const filters = [
|
|
296
|
-
{
|
|
297
|
-
label: 'Provider',
|
|
298
|
-
value: selectedProvider,
|
|
299
|
-
options: providers,
|
|
300
|
-
onChange: setSelectedProvider
|
|
301
|
-
},
|
|
302
|
-
{
|
|
303
|
-
label: 'Status',
|
|
304
|
-
value: selectedStatus,
|
|
305
|
-
options: statusOptions,
|
|
306
|
-
onChange: setSelectedStatus
|
|
99
|
+
title: 'Revoked',
|
|
100
|
+
value: (records || []).filter(r => r.revoked_at).length,
|
|
101
|
+
icon: XCircle,
|
|
102
|
+
iconColor: 'text-red-600'
|
|
307
103
|
}
|
|
308
104
|
]
|
|
309
105
|
|
|
310
106
|
return (
|
|
311
107
|
<AdminListPage
|
|
312
108
|
title="Embeddings"
|
|
313
|
-
description="
|
|
314
|
-
|
|
315
|
-
newButtonHref="/spine-framework/admin/configs/embeddings/new"
|
|
109
|
+
description="Inspect runtime vector records from the public.embeddings table"
|
|
110
|
+
noPageInstructions
|
|
316
111
|
statsCards={statsCards}
|
|
317
|
-
searchPlaceholder="Search
|
|
112
|
+
searchPlaceholder="Search by content, document, or model..."
|
|
318
113
|
searchValue={searchTerm}
|
|
319
114
|
onSearchChange={setSearchTerm}
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
115
|
+
loading={loading}
|
|
116
|
+
error={error}
|
|
117
|
+
onRetry={refetch}
|
|
118
|
+
emptyMessage="No embedding records found"
|
|
119
|
+
emptyIcon={AlertCircle}
|
|
324
120
|
>
|
|
325
|
-
|
|
121
|
+
<PageInstructions
|
|
122
|
+
title="About the embeddings table"
|
|
123
|
+
description="These are runtime vector records stored in public.embeddings. Each record is a chunk of content with its embedding, model, document, and lifecycle metadata. This page is read-only."
|
|
124
|
+
sections={[
|
|
125
|
+
{
|
|
126
|
+
title: 'Columns',
|
|
127
|
+
content: 'Model ID, Document ID, chunk index, truncated content, approval status, content hash, and creation time.'
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
title: 'Searching',
|
|
131
|
+
content: 'Use the search field to filter by content text, document_id, or model_id.'
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
title: 'Drilling down',
|
|
135
|
+
content: 'Click any row to view the full record, including the full content, metadata JSON, and embedding vector.'
|
|
136
|
+
}
|
|
137
|
+
]}
|
|
138
|
+
/>
|
|
139
|
+
|
|
140
|
+
{sortedRecords.length === 0 ? (
|
|
326
141
|
<div className="p-8 text-center">
|
|
327
|
-
<
|
|
328
|
-
<h3 className="mt-2 text-sm font-medium text-slate-900">No
|
|
329
|
-
<p className="mt-1 text-sm text-slate-500">
|
|
330
|
-
Try adjusting your search or filters
|
|
331
|
-
</p>
|
|
142
|
+
<AlertCircle className="mx-auto h-12 w-12 text-slate-400" />
|
|
143
|
+
<h3 className="mt-2 text-sm font-medium text-slate-900">No embedding records found</h3>
|
|
144
|
+
<p className="mt-1 text-sm text-slate-500">Try adjusting your search</p>
|
|
332
145
|
</div>
|
|
333
146
|
) : (
|
|
334
147
|
<table className="min-w-full divide-y divide-slate-200">
|
|
335
148
|
<thead className="bg-slate-50">
|
|
336
149
|
<tr>
|
|
337
150
|
<SortableTableHeader
|
|
338
|
-
title="
|
|
339
|
-
sortKey="
|
|
151
|
+
title="Model ID"
|
|
152
|
+
sortKey="model_id"
|
|
340
153
|
currentSortKey={sortKey}
|
|
341
154
|
currentSortDirection={sortDirection}
|
|
342
155
|
onSort={handleSort}
|
|
343
156
|
/>
|
|
344
157
|
<SortableTableHeader
|
|
345
|
-
title="
|
|
346
|
-
sortKey="
|
|
158
|
+
title="Document ID"
|
|
159
|
+
sortKey="document_id"
|
|
347
160
|
currentSortKey={sortKey}
|
|
348
161
|
currentSortDirection={sortDirection}
|
|
349
162
|
onSort={handleSort}
|
|
350
163
|
/>
|
|
351
164
|
<SortableTableHeader
|
|
352
|
-
title="
|
|
353
|
-
sortKey="
|
|
165
|
+
title="Chunk Index"
|
|
166
|
+
sortKey="chunk_index"
|
|
354
167
|
currentSortKey={sortKey}
|
|
355
168
|
currentSortDirection={sortDirection}
|
|
356
169
|
onSort={handleSort}
|
|
357
170
|
/>
|
|
171
|
+
<th className="px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-slate-500">Content</th>
|
|
172
|
+
<th className="px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-slate-500">Status</th>
|
|
358
173
|
<SortableTableHeader
|
|
359
|
-
title="
|
|
360
|
-
sortKey="
|
|
174
|
+
title="Content Hash"
|
|
175
|
+
sortKey="content_hash"
|
|
361
176
|
currentSortKey={sortKey}
|
|
362
177
|
currentSortDirection={sortDirection}
|
|
363
178
|
onSort={handleSort}
|
|
@@ -372,50 +187,32 @@ export function EmbeddingsPage() {
|
|
|
372
187
|
</tr>
|
|
373
188
|
</thead>
|
|
374
189
|
<tbody className="bg-white divide-y divide-slate-200">
|
|
375
|
-
{
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
Chunk {model.chunk_index} • {model.metadata?.type}
|
|
390
|
-
</div>
|
|
391
|
-
</div>
|
|
392
|
-
</td>
|
|
393
|
-
<td className="px-6 py-4 whitespace-nowrap">
|
|
394
|
-
<div className="space-y-1">
|
|
395
|
-
<Badge variant={getProviderBadgeColor(model.metadata?.source) as any}>
|
|
396
|
-
{model.metadata?.source}
|
|
397
|
-
</Badge>
|
|
398
|
-
<div className="text-sm text-slate-900 font-mono">{model.metadata?.language}</div>
|
|
399
|
-
</div>
|
|
400
|
-
</td>
|
|
401
|
-
<td className="px-6 py-4 whitespace-nowrap">
|
|
402
|
-
<Badge variant="success">
|
|
403
|
-
Active
|
|
404
|
-
</Badge>
|
|
405
|
-
</td>
|
|
406
|
-
<td className="px-6 py-4 whitespace-nowrap">
|
|
407
|
-
<div>
|
|
408
|
-
<div className="text-sm text-slate-900">1 chunk</div>
|
|
409
|
-
<div className="text-xs text-slate-500">
|
|
410
|
-
{model.embedding?.length} dimensions
|
|
190
|
+
{sortedRecords.map((record) => {
|
|
191
|
+
const status = getStatus(record)
|
|
192
|
+
return (
|
|
193
|
+
<tr
|
|
194
|
+
key={record.id}
|
|
195
|
+
className="hover:bg-slate-50 cursor-pointer transition-colors"
|
|
196
|
+
onClick={() => navigate(`/spine-framework/admin/kb/embeddings/${record.id}`)}
|
|
197
|
+
>
|
|
198
|
+
<td className="px-6 py-4 whitespace-nowrap text-sm text-slate-900">{record.model_id}</td>
|
|
199
|
+
<td className="px-6 py-4 whitespace-nowrap text-sm text-slate-500">{record.document_id}</td>
|
|
200
|
+
<td className="px-6 py-4 whitespace-nowrap text-sm text-slate-500">{record.chunk_index}</td>
|
|
201
|
+
<td className="px-6 py-4 text-sm text-slate-600 max-w-md">
|
|
202
|
+
<div className="truncate">
|
|
203
|
+
{record.content?.slice(0, 80)}{record.content && record.content.length > 80 ? '...' : ''}
|
|
411
204
|
</div>
|
|
412
|
-
</
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
205
|
+
</td>
|
|
206
|
+
<td className="px-6 py-4 whitespace-nowrap">
|
|
207
|
+
<span className={`inline-flex items-center rounded-md px-2 py-0.5 text-xs font-medium ${status.color}`}>
|
|
208
|
+
{status.label}
|
|
209
|
+
</span>
|
|
210
|
+
</td>
|
|
211
|
+
<td className="px-6 py-4 whitespace-nowrap text-xs text-slate-500 font-mono">{record.content_hash}</td>
|
|
212
|
+
<td className="px-6 py-4 whitespace-nowrap text-sm text-slate-500">{formatDateTime(record.created_at)}</td>
|
|
213
|
+
</tr>
|
|
214
|
+
)
|
|
215
|
+
})}
|
|
419
216
|
</tbody>
|
|
420
217
|
</table>
|
|
421
218
|
)}
|
|
@@ -1,12 +1,22 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module src/pages/admin/ExtendedShadcnTestPage
|
|
3
|
-
* @audience installer
|
|
4
|
-
* @layer frontend-page
|
|
5
|
-
* @stability testing
|
|
6
|
-
*
|
|
7
|
-
* Extended test page with more shadcn components to identify problematic imports.
|
|
8
|
-
*/
|
|
9
1
|
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
// CIL[BEGIN chunk_id="extendedshadcntestpage_module_header_1783668992" type="module_header" identity="module_header" parent="none"]
|
|
6
|
+
// CIL[DOC-MACRO purpose="Import dependencies for ExtendedShadcnTestPage component"]
|
|
7
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Import React hooks and UI components for testing"]
|
|
8
|
+
// CIL[DOC-CONTEXT module="ExtendedShadcnTestPage" layer="presentation" related_files="[\".framework/src/components/ui/dialog.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
|
|
9
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="Imported modules" errors="none" side_effects="none"]
|
|
10
|
+
// CIL[DOC-MICRO logic_summary="Imports React state management and shadcn 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: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, .framework/src/components/ui/table-primitives.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/portal/pages/ContentPage.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"]
|
|
10
20
|
import { useState } from 'react'
|
|
11
21
|
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../../components/ui/card'
|
|
12
22
|
import { Button } from '../../components/ui/button'
|
|
@@ -21,7 +31,21 @@ import {
|
|
|
21
31
|
SelectValue,
|
|
22
32
|
} from '../../components/ui/select'
|
|
23
33
|
import { Checkbox } from '../../components/ui/checkbox'
|
|
24
|
-
|
|
34
|
+
// CIL[END chunk_id="extendedshadcntestpage_module_header_1783668992"]
|
|
35
|
+
// CIL[BEGIN chunk_id="extendedshadcntestpage_extendedshadcntestpage_1783668992" type="function" identity="ExtendedShadcnTestPage" parent="none"]
|
|
36
|
+
// CIL[DOC-MACRO purpose="Main ExtendedShadcnTestPage component implementation"]
|
|
37
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Render comprehensive shadcn UI component testing interface"]
|
|
38
|
+
// CIL[DOC-CONTEXT module="ExtendedShadcnTestPage" layer="presentation" related_files="[\".framework/src/components/ui/dialog.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
39
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="React component" errors="none" side_effects="State management"]
|
|
40
|
+
// CIL[DOC-MICRO logic_summary="Creates interactive test page for 7 shadcn components with state management" notable_decisions="[]"]
|
|
41
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
42
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
43
|
+
// CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, .framework/src/components/ui/table-primitives.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
|
|
44
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
45
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
46
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
47
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
48
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
25
49
|
export function ExtendedShadcnTestPage() {
|
|
26
50
|
const [count, setCount] = useState(0)
|
|
27
51
|
const [text, setText] = useState('')
|
|
@@ -174,3 +198,4 @@ export function ExtendedShadcnTestPage() {
|
|
|
174
198
|
</div>
|
|
175
199
|
)
|
|
176
200
|
}
|
|
201
|
+
// CIL[END chunk_id="extendedshadcntestpage_extendedshadcntestpage_1783668992"]
|
|
@@ -1,19 +1,43 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module src/pages/admin/IncrementalShadcnTestPage
|
|
3
|
-
* @audience installer
|
|
4
|
-
* @layer frontend-page
|
|
5
|
-
* @stability testing
|
|
6
|
-
*
|
|
7
|
-
* Incremental test page to identify problematic shadcn component imports.
|
|
8
|
-
*/
|
|
9
1
|
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
// CIL[BEGIN chunk_id="incrementalshadcntestpage_module_header_1783668992" type="module_header" identity="module_header" parent="none"]
|
|
6
|
+
// CIL[DOC-MACRO purpose="Import dependencies for IncrementalShadcnTestPage component"]
|
|
7
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Import React hooks and basic UI components for testing"]
|
|
8
|
+
// CIL[DOC-CONTEXT module="IncrementalShadcnTestPage" layer="presentation" related_files="[\".framework/src/components/ui/dialog.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
|
|
9
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="Imported modules" errors="none" side_effects="none"]
|
|
10
|
+
// CIL[DOC-MICRO logic_summary="Imports React state management and basic shadcn 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: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, .framework/src/components/ui/table-primitives.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/portal/pages/ContentPage.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"]
|
|
10
20
|
import { useState } from 'react'
|
|
11
21
|
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../../components/ui/card'
|
|
12
22
|
import { Button } from '../../components/ui/button'
|
|
13
23
|
import { Badge } from '../../components/ui/badge'
|
|
14
24
|
import { Input } from '../../components/ui/input'
|
|
15
25
|
import { Label } from '../../components/ui/label'
|
|
16
|
-
|
|
26
|
+
// CIL[END chunk_id="incrementalshadcntestpage_module_header_1783668992"]
|
|
27
|
+
// CIL[BEGIN chunk_id="incrementalshadcntestpage_incrementalshadcntestpage_1783668992" type="function" identity="IncrementalShadcnTestPage" parent="none"]
|
|
28
|
+
// CIL[DOC-MACRO purpose="Main IncrementalShadcnTestPage component implementation"]
|
|
29
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Render basic shadcn UI component testing interface"]
|
|
30
|
+
// CIL[DOC-CONTEXT module="IncrementalShadcnTestPage" layer="presentation" related_files="[\".framework/src/components/ui/dialog.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
31
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="React component" errors="none" side_effects="State management"]
|
|
32
|
+
// CIL[DOC-MICRO logic_summary="Creates interactive test page for 4 basic shadcn components with state management" notable_decisions="[]"]
|
|
33
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
34
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
35
|
+
// CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, .framework/src/components/ui/table-primitives.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
|
|
36
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
37
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
38
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
39
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
40
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
17
41
|
export function IncrementalShadcnTestPage() {
|
|
18
42
|
const [count, setCount] = useState(0)
|
|
19
43
|
const [text, setText] = useState('')
|
|
@@ -107,3 +131,4 @@ export function IncrementalShadcnTestPage() {
|
|
|
107
131
|
</div>
|
|
108
132
|
)
|
|
109
133
|
}
|
|
134
|
+
// CIL[END chunk_id="incrementalshadcntestpage_incrementalshadcntestpage_1783668992"]
|