spine-framework 0.4.3 → 0.5.0-rc.4
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 +13 -3
- package/.framework/cli/commands/bootstrap.ts +392 -0
- package/.framework/cli/commands/dev.ts +91 -218
- package/.framework/cli/commands/doctor.ts +132 -26
- package/.framework/cli/commands/generate.ts +38 -298
- package/.framework/cli/commands/init.ts +20 -1
- package/.framework/cli/commands/migrate.ts +36 -30
- package/.framework/cli/commands/migrations.ts +16 -56
- package/.framework/cli/commands/upgrade.ts +35 -0
- package/.framework/cli/commands/validate-schema.ts +147 -0
- package/.framework/cli/context.ts +223 -110
- package/.framework/cli/index.ts +6 -0
- package/.framework/cli/lib/project-files.ts +241 -1
- package/.framework/functions/_shared/agent-runner.ts +1000 -81
- package/.framework/functions/_shared/cil.ts +2 -1
- package/.framework/functions/_shared/db.ts +3 -6
- package/.framework/functions/_shared/hash-api-key.ts +183 -79
- package/.framework/functions/_shared/kb.ts +61 -7
- package/.framework/functions/_shared/logging.ts +562 -224
- package/.framework/functions/_shared/message-sequence.ts +53 -0
- package/.framework/functions/_shared/middleware.ts +47 -44
- package/.framework/functions/_shared/pipeline-runner.ts +150 -37
- package/.framework/functions/_shared/principal.ts +9 -6
- package/.framework/functions/_shared/trigger-engine.ts +149 -40
- package/.framework/functions/admin-data.ts +48 -31
- package/.framework/functions/ai-agents.ts +103 -33
- package/.framework/functions/api-keys.ts +301 -122
- package/.framework/functions/apps.ts +43 -26
- package/.framework/functions/cil-ingest.ts +48 -15
- package/.framework/functions/debug-auth.ts +14 -8
- package/.framework/functions/deliveries.ts +39 -12
- package/.framework/functions/embeddings.ts +145 -76
- package/.framework/functions/integration-outbound.ts +67 -27
- package/.framework/functions/integrations.ts +254 -127
- package/.framework/functions/logs.ts +273 -133
- package/.framework/functions/observability.ts +277 -147
- package/.framework/functions/pipeline-executions.ts +1 -1
- package/.framework/functions/pipeline-runner-background.ts +120 -0
- package/.framework/functions/pipelines.ts +14 -9
- package/.framework/functions/prompt-configs.ts +7 -4
- package/.framework/functions/roles.ts +8 -5
- package/.framework/functions/security.ts +30 -17
- package/.framework/functions/system-cron.ts +250 -128
- package/.framework/functions/tests.ts +7 -6
- package/.framework/functions/timers.ts +310 -107
- package/.framework/functions/trigger-scheduler.ts +65 -5
- package/.framework/functions/triggers.ts +28 -13
- package/.framework/functions/types.ts +13 -10
- package/.framework/migrations/064_episode_leases.sql +196 -0
- package/.framework/migrations/065_execution_tables_updated_at.sql +20 -0
- package/.framework/migrations/066_episode_steal_thread_merge.sql +148 -0
- package/.framework/migrations/067_episode_lease_stale_steal.sql +93 -0
- package/.framework/migrations/068_cron_schedule_timer_rpcs.sql +251 -0
- package/.framework/migrations/069_log_stats_window.sql +54 -0
- package/.framework/migrations/070_app_type_schema_rpcs.sql +166 -0
- package/.framework/migrations/071_timer_interval_keys.sql +96 -0
- package/.framework/migrations/072_slug_autofill.sql +77 -0
- package/.framework/migrations/073_seed_member_roles.sql +26 -0
- package/.framework/schemas/spine.config.schema.json +62 -0
- package/.framework/src/App.tsx +3 -1
- package/.framework/src/apps/admin/index.tsx +1141 -775
- package/.framework/src/components/ErrorBoundary.tsx +136 -0
- package/.framework/src/components/admin/AdminListPage.tsx +81 -73
- package/.framework/src/components/admin/AdminSidebar.tsx +92 -81
- package/.framework/src/components/admin/EntitySelect.tsx +181 -0
- package/.framework/src/components/admin/PageInstructions.tsx +86 -127
- package/.framework/src/components/app-shell/GenericAppShell.tsx +3 -1
- package/.framework/src/components/app-shell/GenericDetailPage.tsx +37 -13
- package/.framework/src/components/app-shell/GenericListPage.tsx +28 -32
- package/.framework/src/components/auth/TurnstileWidget.tsx +9 -6
- package/.framework/src/components/kb/KBArticleEditor.tsx +49 -6
- package/.framework/src/components/layout/Layout.tsx +4 -2
- package/.framework/src/components/layout/Sidebar.tsx +304 -179
- package/.framework/src/components/runtime/DataDetailPage.tsx +67 -35
- package/.framework/src/components/runtime/DataHeader.tsx +96 -48
- package/.framework/src/components/runtime/DataListPage.tsx +3 -26
- package/.framework/src/components/runtime/DataStats.tsx +10 -10
- package/.framework/src/components/runtime/DataTable.tsx +12 -10
- package/.framework/src/components/ui/sheet.tsx +24 -26
- package/.framework/src/components/ui/textarea.tsx +74 -48
- package/.framework/src/hooks/useBranding.ts +47 -0
- package/.framework/src/hooks/useEntityList.ts +12 -9
- package/.framework/src/hooks/useListSchema.ts +108 -58
- package/.framework/src/instructions/README.md +57 -0
- package/.framework/src/instructions/ai-agents.md +69 -0
- package/.framework/src/instructions/alerts.md +80 -0
- package/.framework/src/instructions/api-keys.md +87 -0
- package/.framework/src/instructions/apps.md +77 -0
- package/.framework/src/instructions/concepts/ai-and-prompts.md +150 -0
- package/.framework/src/instructions/concepts/apps-and-renderers.md +162 -0
- package/.framework/src/instructions/concepts/auth-and-api-keys.md +133 -0
- package/.framework/src/instructions/concepts/automation.md +186 -0
- package/.framework/src/instructions/concepts/concurrency-and-idempotency.md +125 -0
- package/.framework/src/instructions/concepts/core-vs-custom.md +124 -0
- package/.framework/src/instructions/concepts/design-schema.md +152 -0
- package/.framework/src/instructions/concepts/integrations-and-webhooks.md +127 -0
- package/.framework/src/instructions/concepts/observability.md +116 -0
- package/.framework/src/instructions/concepts/permissions.md +150 -0
- package/.framework/src/instructions/concepts/runtime-records.md +111 -0
- package/.framework/src/instructions/concepts/scope-and-accounts.md +112 -0
- package/.framework/src/instructions/concepts/spine-way.md +172 -0
- package/.framework/src/instructions/deliveries.md +59 -0
- package/.framework/src/instructions/guide/00-orientation.md +106 -0
- package/.framework/src/instructions/guide/01-install-and-first-run.md +253 -0
- package/.framework/src/instructions/guide/02-project-map.md +147 -0
- package/.framework/src/instructions/guide/03-domain-model.md +223 -0
- package/.framework/src/instructions/guide/04-first-app.md +227 -0
- package/.framework/src/instructions/guide/05-glossary.md +183 -0
- package/.framework/src/instructions/integrations.md +96 -0
- package/.framework/src/instructions/internal/cil-markers.md +83 -0
- package/.framework/src/instructions/invites.md +60 -0
- package/.framework/src/instructions/kb.md +80 -0
- package/.framework/src/instructions/logs.md +77 -0
- package/.framework/src/instructions/observability.md +61 -0
- package/.framework/src/instructions/operations/deployment.md +115 -0
- package/.framework/src/instructions/operations/migrations.md +125 -0
- package/.framework/src/instructions/operations/security-checklist.md +148 -0
- package/.framework/src/instructions/operations/troubleshooting.md +170 -0
- package/.framework/src/instructions/operations/upgrade.md +116 -0
- package/.framework/src/instructions/pipeline-executions.md +62 -0
- package/.framework/src/instructions/pipelines.md +78 -0
- package/.framework/src/instructions/prompts.md +95 -0
- package/.framework/src/instructions/reference/api/admin-data.md +162 -0
- package/.framework/src/instructions/reference/api/auth.md +113 -0
- package/.framework/src/instructions/reference/api/errors-and-envelopes.md +113 -0
- package/.framework/src/instructions/reference/app-manifest.md +150 -0
- package/.framework/src/instructions/reference/cli.md +124 -0
- package/.framework/src/instructions/reference/database.md +132 -0
- package/.framework/src/instructions/reference/design-schema.md +280 -0
- package/.framework/src/instructions/reference/env-vars.md +133 -0
- package/.framework/src/instructions/reference/functions/account-nodes.md +75 -0
- package/.framework/src/instructions/reference/functions/admin-data.md +195 -0
- package/.framework/src/instructions/reference/functions/admin-funnel.md +90 -0
- package/.framework/src/instructions/reference/functions/admin-install-funnel.md +107 -0
- package/.framework/src/instructions/reference/functions/admin-signals.md +102 -0
- package/.framework/src/instructions/reference/functions/ai-agents.md +148 -0
- package/.framework/src/instructions/reference/functions/ai-interactions.md +156 -0
- package/.framework/src/instructions/reference/functions/api-keys.md +130 -0
- package/.framework/src/instructions/reference/functions/apps.md +140 -0
- package/.framework/src/instructions/reference/functions/auth.md +99 -0
- package/.framework/src/instructions/reference/functions/debug-auth.md +91 -0
- package/.framework/src/instructions/reference/functions/deliveries.md +110 -0
- package/.framework/src/instructions/reference/functions/embeddings.md +166 -0
- package/.framework/src/instructions/reference/functions/eval-harness.md +149 -0
- package/.framework/src/instructions/reference/functions/index.md +103 -0
- package/.framework/src/instructions/reference/functions/integration-outbound.md +200 -0
- package/.framework/src/instructions/reference/functions/integration-routes.md +151 -0
- package/.framework/src/instructions/reference/functions/integrations.md +130 -0
- package/.framework/src/instructions/reference/functions/invites.md +182 -0
- package/.framework/src/instructions/reference/functions/item-progress.md +107 -0
- package/.framework/src/instructions/reference/functions/kb.md +166 -0
- package/.framework/src/instructions/reference/functions/logs.md +141 -0
- package/.framework/src/instructions/reference/functions/observability.md +105 -0
- package/.framework/src/instructions/reference/functions/pipeline-executions.md +132 -0
- package/.framework/src/instructions/reference/functions/pipeline-runner-background.md +121 -0
- package/.framework/src/instructions/reference/functions/pipelines.md +136 -0
- package/.framework/src/instructions/reference/functions/prompt-configs.md +121 -0
- package/.framework/src/instructions/reference/functions/roles.md +121 -0
- package/.framework/src/instructions/reference/functions/security.md +140 -0
- package/.framework/src/instructions/reference/functions/system-cron.md +136 -0
- package/.framework/src/instructions/reference/functions/system.md +106 -0
- package/.framework/src/instructions/reference/functions/tests.md +97 -0
- package/.framework/src/instructions/reference/functions/timers.md +117 -0
- package/.framework/src/instructions/reference/functions/trigger-scheduler.md +102 -0
- package/.framework/src/instructions/reference/functions/triggers.md +140 -0
- package/.framework/src/instructions/reference/functions/types.md +146 -0
- package/.framework/src/instructions/reference/seeds.md +126 -0
- package/.framework/src/instructions/reference/shared-modules.md +127 -0
- package/.framework/src/instructions/reference/spine-config.md +114 -0
- package/.framework/src/instructions/roles.md +80 -0
- package/.framework/src/instructions/runtime-detail.md +70 -0
- package/.framework/src/instructions/runtime-list.md +77 -0
- package/.framework/src/instructions/security.md +67 -0
- package/.framework/src/instructions/tasks/add-a-pipeline.md +110 -0
- package/.framework/src/instructions/tasks/add-a-role.md +96 -0
- package/.framework/src/instructions/tasks/add-a-timer.md +114 -0
- package/.framework/src/instructions/tasks/add-a-trigger.md +106 -0
- package/.framework/src/instructions/tasks/add-a-type.md +151 -0
- package/.framework/src/instructions/tasks/add-a-webhook.md +108 -0
- package/.framework/src/instructions/tasks/add-an-ai-agent.md +108 -0
- package/.framework/src/instructions/tasks/add-an-integration.md +124 -0
- package/.framework/src/instructions/tasks/build-a-custom-page.md +118 -0
- package/.framework/src/instructions/tasks/package-and-install-an-app.md +127 -0
- package/.framework/src/instructions/tasks/test-your-code.md +108 -0
- package/.framework/src/instructions/tasks/write-a-function.md +132 -0
- package/.framework/src/instructions/tasks/write-a-migration.md +110 -0
- package/.framework/src/instructions/testing.md +59 -0
- package/.framework/src/instructions/timers.md +82 -0
- package/.framework/src/instructions/triggers.md +69 -0
- package/.framework/src/instructions/types.md +93 -0
- package/.framework/src/lib/branding.ts +128 -0
- package/.framework/src/pages/NoAppPage.tsx +3 -1
- package/.framework/src/pages/NotFoundPage.tsx +62 -31
- package/.framework/src/pages/SetupPage.tsx +5 -2
- package/.framework/src/pages/admin/AIAgentDetailPage.tsx +117 -106
- package/.framework/src/pages/admin/AIAgentsPage.tsx +86 -48
- package/.framework/src/pages/admin/APIKeyDetailPage.tsx +153 -152
- package/.framework/src/pages/admin/APIKeysPage.tsx +91 -90
- package/.framework/src/pages/admin/AlertsConfigPage.tsx +29 -18
- package/.framework/src/pages/admin/AppDetailPage.tsx +6 -60
- package/.framework/src/pages/admin/AppsPage.tsx +104 -66
- package/.framework/src/pages/admin/DeliveriesPage.tsx +5 -5
- package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +5 -23
- package/.framework/src/pages/admin/EmbeddingsPage.tsx +5 -26
- package/.framework/src/pages/admin/IntegrationDetailPage.tsx +7 -7
- package/.framework/src/pages/admin/IntegrationsPage.tsx +85 -43
- package/.framework/src/pages/admin/LogsPage.tsx +144 -76
- package/.framework/src/pages/admin/ObservabilityDashboard.tsx +223 -140
- package/.framework/src/pages/admin/PipelineDetailPage.tsx +134 -113
- package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +108 -45
- package/.framework/src/pages/admin/PipelinesPage.tsx +160 -115
- package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +96 -98
- package/.framework/src/pages/admin/PromptConfigsPage.tsx +101 -59
- package/.framework/src/pages/admin/RoleDetailPage.tsx +90 -79
- package/.framework/src/pages/admin/RolesPage.tsx +86 -43
- package/.framework/src/pages/admin/SecurityPage.tsx +1 -1
- package/.framework/src/pages/admin/TestingDashboard.tsx +16 -28
- package/.framework/src/pages/admin/TimerDetailPage.tsx +117 -100
- package/.framework/src/pages/admin/TimersPage.tsx +90 -62
- package/.framework/src/pages/admin/TriggerDetailPage.tsx +90 -83
- package/.framework/src/pages/admin/TriggersPage.tsx +124 -99
- package/.framework/src/pages/admin/TypeDetailPage.tsx +152 -138
- package/.framework/src/pages/admin/TypesPage.tsx +90 -48
- package/.framework/src/pages/admin/cil/CILAgentPage.tsx +17 -25
- package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +17 -27
- package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +72 -40
- package/.framework/src/pages/admin/cil/CILFileListPage.tsx +321 -129
- package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +18 -29
- package/.framework/src/pages/admin/cil/CILGraphPage.tsx +26 -38
- package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +34 -46
- package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +189 -103
- package/.framework/src/pages/admin/cil/CILSearchPage.tsx +246 -136
- package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +11 -22
- package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +9 -20
- package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +26 -38
- package/.framework/src/pages/admin/kb/KBAdminPage.tsx +7 -26
- package/.framework/src/pages/auth/AuthConfirmPage.tsx +3 -1
- package/.framework/src/pages/auth/ForgotPasswordPage.tsx +3 -1
- package/.framework/src/pages/auth/LoginPage.tsx +4 -2
- package/.framework/src/pages/auth/RegisterPage.tsx +3 -1
- package/.framework/templates/agent/AGENTS.md +150 -0
- package/.framework/templates/agent/skills/spine-add-ai-agent/SKILL.md +58 -0
- package/.framework/templates/agent/skills/spine-add-automation/SKILL.md +62 -0
- package/.framework/templates/agent/skills/spine-add-integration/SKILL.md +63 -0
- package/.framework/templates/agent/skills/spine-architect/SKILL.md +86 -0
- package/.framework/templates/agent/skills/spine-install-app/SKILL.md +72 -0
- package/.framework/templates/agent/skills/spine-migration/SKILL.md +75 -0
- package/.framework/templates/agent/skills/spine-new-app/SKILL.md +67 -0
- package/.framework/templates/agent/skills/spine-new-function/SKILL.md +65 -0
- package/.framework/templates/agent/skills/spine-new-type/SKILL.md +65 -0
- package/.framework/templates/agent/skills/spine-schema/SKILL.md +77 -0
- package/.framework/templates/agent/skills/spine-test/SKILL.md +67 -0
- package/.framework/templates/agent/skills/spine-troubleshoot/SKILL.md +74 -0
- package/.framework/templates/agent/skills/spine-upgrade/SKILL.md +69 -0
- package/.framework/templates/project.json +5 -1
- package/.framework/tests/unit/account-scoping-gates.test.ts +392 -0
- package/.framework/tests/unit/agent-files.test.ts +355 -0
- package/.framework/tests/unit/agent-runner.test.ts +496 -47
- package/.framework/tests/unit/api-keys-create-scope-gate.test.ts +160 -0
- package/.framework/tests/unit/api-keys-omit-secret-fields.test.ts +38 -0
- package/.framework/tests/unit/bootstrap.test.ts +242 -0
- package/.framework/tests/unit/cli-context-api-key.test.ts +114 -0
- package/.framework/tests/unit/debug-auth.test.ts +38 -0
- package/.framework/tests/unit/deliveries-account-scoping.test.ts +185 -0
- package/.framework/tests/unit/episode-lease.test.ts +695 -0
- package/.framework/tests/unit/integration-outbound-credentials.test.ts +167 -0
- package/.framework/tests/unit/integrations-audit-redaction.test.ts +130 -0
- package/.framework/tests/unit/kb-ingest-lease.test.ts +19 -0
- package/.framework/tests/unit/logging-app-id.test.ts +75 -0
- package/.framework/tests/unit/pipeline-runner-background.test.ts +120 -0
- package/.framework/tests/unit/pipeline-runner.test.ts +153 -1
- package/.framework/tests/unit/principal-cache.test.ts +15 -0
- package/.framework/tests/unit/system-context-denial.test.ts +145 -0
- package/.framework/tests/unit/system-cron.test.ts +240 -0
- package/.framework/tests/unit/timers.test.ts +159 -0
- package/.framework/tests/unit/trigger-engine.test.ts +278 -91
- package/.framework/tests/unit/trigger-scheduler.test.ts +78 -0
- package/README.md +125 -166
- package/config/tsconfig.cli.json +2 -2
- package/netlify.toml +5 -0
- package/package.json +15 -4
- package/templates/project/package-lock.json +2 -2
- package/.framework/docs/admin-routes.md +0 -76
- package/.framework/docs/api-docs-progress.md +0 -38
- package/.framework/docs/api-governance.md +0 -146
- package/.framework/docs/api-testing-results.md +0 -212
- package/.framework/docs/assembly-launch-guide.md +0 -138
- package/.framework/docs/audit-results.md +0 -590
- package/.framework/docs/db-api-inventory.md +0 -95
- package/.framework/docs/gap-remediation-backlog.md +0 -103
- package/.framework/docs/ui-adoption-verification.md +0 -111
- package/.framework/docs/ui-api-coverage.md +0 -84
- package/.framework/docs/v2-compatibility-audit.md +0 -228
- package/.framework/mcp/index.ts +0 -133
- package/.framework/mcp/load-env.ts +0 -60
- package/.framework/mcp/shared/app-manifest.ts +0 -275
- package/.framework/mcp/shared/db.ts +0 -477
- package/.framework/mcp/shared/kb.ts +0 -118
- package/.framework/mcp/tools/architect.ts +0 -431
- package/.framework/mcp/tools/cil/context.ts +0 -345
- package/.framework/mcp/tools/cil/graph.ts +0 -242
- package/.framework/mcp/tools/cil/ingest.ts +0 -1217
- package/.framework/mcp/tools/cil/pipeline-orchestrator.ts +0 -693
- package/.framework/mcp/tools/cil/pipeline.ts +0 -767
- package/.framework/mcp/tools/cil/project.ts +0 -791
- package/.framework/mcp/tools/cil/retrieval.ts +0 -336
- package/.framework/mcp/tools/cil/search-core.ts +0 -454
- package/.framework/mcp/tools/cil/search.ts +0 -97
- package/.framework/mcp/tools/cil/suggest.ts +0 -186
- package/.framework/mcp/tools/cil/validate.ts +0 -1369
- package/.framework/mcp/tools/kb/delete.ts +0 -139
- package/.framework/mcp/tools/kb/index.ts +0 -52
- package/.framework/mcp/tools/kb/ingest.ts +0 -84
- package/.framework/mcp/tools/kb/list-types.ts +0 -102
- package/.framework/mcp/tools/kb/publish.ts +0 -100
- package/.framework/mcp/tools/kb/reindex.ts +0 -86
- package/.framework/mcp/tools/kb/revoke.ts +0 -85
- package/.framework/mcp/tools/kb/search.ts +0 -101
- package/.framework/mcp/tools/kb/upsert.ts +0 -125
- package/.framework/mcp/tools/observability.ts +0 -510
|
@@ -1,12 +1,27 @@
|
|
|
1
1
|
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
2
|
+
/**
|
|
3
|
+
* @module CILFileListPage
|
|
4
|
+
* @audience both
|
|
5
|
+
* @layer shared-core
|
|
6
|
+
* @stability stable
|
|
7
|
+
*
|
|
8
|
+
* This module represents the CIL File List Page in the admin section of the application, allowing users to view and manage files related to the CIL. It integrates with the API to fetch file data and provides a user interface for interaction.
|
|
9
|
+
* INVARIANT: The user must have appropriate permissions to access this page.
|
|
10
|
+
*
|
|
11
|
+
* @seeAlso PageInstructions (provides instructional content for the admin interface).
|
|
12
|
+
* @seeAlso apiFetch (handles API requests for fetching file data).
|
|
13
|
+
*
|
|
14
|
+
* @cil-generated
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
10
25
|
|
|
11
26
|
import { useEffect, useState, useCallback } from 'react'
|
|
12
27
|
import { useParams, useNavigate } from 'react-router-dom'
|
|
@@ -17,6 +32,7 @@ import { Badge } from '@core/components/ui/badge'
|
|
|
17
32
|
import { Skeleton } from '@core/components/ui/skeleton'
|
|
18
33
|
import { Input } from '@core/components/ui/input'
|
|
19
34
|
import {
|
|
35
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:module_header:module_header"]
|
|
20
36
|
FileCode2,
|
|
21
37
|
CheckCircle2,
|
|
22
38
|
AlertTriangle,
|
|
@@ -36,23 +52,31 @@ import {
|
|
|
36
52
|
|
|
37
53
|
|
|
38
54
|
|
|
39
|
-
import { PageInstructions } from '../../../components/admin/PageInstructions'
|
|
40
|
-
// CIL[DOC-VECTOR type="context" content="purpose='React admin page for listing and validating CIL files within a project'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
|
|
41
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
42
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
43
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
44
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
45
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
46
|
-
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:module_header:module_header"]
|
|
47
|
-
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:CILFile:interface" type="interface" identity="CILFile" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
|
|
48
|
-
// CIL[DOC-MACRO purpose="Defines the CILFile record shape used by the file list"]
|
|
49
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Describes the data model for an indexed CIL source file"]
|
|
50
|
-
// CIL[DOC-CONTEXT module="admin-cil" layer="data-model" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILFileListPage.tsx"]
|
|
51
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
52
|
-
// CIL[DOC-MICRO logic_summary="Lists metadata fields including chunk_count, ingestion_pass, and dead-code flags" notable_decisions="[]"]
|
|
53
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
54
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
55
55
|
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:CILFile:interface" type="interface" identity="CILFile" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
|
|
73
|
+
/**
|
|
74
|
+
* The CILFile interface defines the structure of a CIL file object, encapsulating its metadata and associated data attributes. It serves to standardize the representation of CIL files within the application.
|
|
75
|
+
*
|
|
76
|
+
* @sideEffects none
|
|
77
|
+
* @stability internal
|
|
78
|
+
* @cil-generated
|
|
79
|
+
*/
|
|
56
80
|
interface CILFile {
|
|
57
81
|
id: string
|
|
58
82
|
title: string
|
|
@@ -71,24 +95,35 @@ interface CILFile {
|
|
|
71
95
|
}
|
|
72
96
|
updated_at: string
|
|
73
97
|
}
|
|
74
|
-
// CIL[DOC-VECTOR type="context" content="purpose='Defines the CILFile record shape used by the file list'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
|
|
75
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
76
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
77
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
78
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
79
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
80
98
|
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:CILFile:interface"]
|
|
81
99
|
|
|
82
100
|
|
|
83
|
-
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:CILChunk:interface" type="interface" identity="CILChunk" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
|
|
84
|
-
// CIL[DOC-MACRO purpose="Defines the CILChunk record shape"]
|
|
85
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Describes the data model for a CIL chunk"]
|
|
86
|
-
// CIL[DOC-CONTEXT module="admin-cil" layer="data-model" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILFileListPage.tsx"]
|
|
87
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
88
|
-
// CIL[DOC-MICRO logic_summary="Exposes chunk_name, chunk_type, line range, and stability fields" notable_decisions="[]"]
|
|
89
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
90
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
91
101
|
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:CILChunk:interface" type="interface" identity="CILChunk" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
|
|
120
|
+
/**
|
|
121
|
+
* The CILChunk interface defines the structure of a chunk of code within a CIL (Common Intermediate Language) file, encapsulating metadata about the chunk for processing and analysis. It exists to facilitate the management and representation of code segments in the application.
|
|
122
|
+
*
|
|
123
|
+
* @sideEffects none
|
|
124
|
+
* @stability internal
|
|
125
|
+
* @cil-generated
|
|
126
|
+
*/
|
|
92
127
|
interface CILChunk {
|
|
93
128
|
id: string
|
|
94
129
|
chunk_name: string
|
|
@@ -104,24 +139,35 @@ interface CILChunk {
|
|
|
104
139
|
file_path: string
|
|
105
140
|
project_id: string
|
|
106
141
|
}
|
|
107
|
-
// CIL[DOC-VECTOR type="context" content="purpose='Defines the CILChunk record shape'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
|
|
108
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
109
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
110
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
111
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
112
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
113
142
|
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:CILChunk:interface"]
|
|
114
143
|
|
|
115
144
|
|
|
116
|
-
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:ValidationSummary:interface" type="interface" identity="ValidationSummary" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
|
|
117
|
-
// CIL[DOC-MACRO purpose="Defines the validation summary shape"]
|
|
118
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Describes aggregate validation trust metrics"]
|
|
119
|
-
// CIL[DOC-CONTEXT module="admin-cil" layer="data-model" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILFileListPage.tsx"]
|
|
120
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
121
|
-
// CIL[DOC-MICRO logic_summary="Contains total, current, drift_detected, not_found, and trust_rating fields" notable_decisions="[]"]
|
|
122
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
123
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
124
145
|
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:ValidationSummary:interface" type="interface" identity="ValidationSummary" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
|
|
164
|
+
/**
|
|
165
|
+
* The ValidationSummary interface defines the structure for summarizing validation results in the application, providing key metrics related to validation status. It includes totals and counts of detected issues to facilitate monitoring and reporting.
|
|
166
|
+
*
|
|
167
|
+
* @sideEffects none
|
|
168
|
+
* @stability internal
|
|
169
|
+
* @cil-generated
|
|
170
|
+
*/
|
|
125
171
|
interface ValidationSummary {
|
|
126
172
|
total: number
|
|
127
173
|
current: number
|
|
@@ -129,50 +175,77 @@ interface ValidationSummary {
|
|
|
129
175
|
not_found: number
|
|
130
176
|
trust_rating: number
|
|
131
177
|
}
|
|
132
|
-
// CIL[DOC-VECTOR type="context" content="purpose='Defines the validation summary shape'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
|
|
133
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
134
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
135
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
136
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
137
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
138
178
|
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:ValidationSummary:interface"]
|
|
139
179
|
|
|
140
180
|
|
|
141
|
-
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:FileValidation:interface" type="interface" identity="FileValidation" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
|
|
142
|
-
// CIL[DOC-MACRO purpose="Defines per-file validation state"]
|
|
143
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Describes the validation result for a single CIL file"]
|
|
144
|
-
// CIL[DOC-CONTEXT module="admin-cil" layer="data-model" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILFileListPage.tsx"]
|
|
145
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
146
|
-
// CIL[DOC-MICRO logic_summary="Includes summary, loading flag, and error message" notable_decisions="[]"]
|
|
147
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
148
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
149
181
|
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:FileValidation:interface" type="interface" identity="FileValidation" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
|
|
200
|
+
/**
|
|
201
|
+
* The FileValidation interface defines the structure for validating file uploads within the admin panel. It encapsulates the file's ID, validation summary, loading state, and any potential error messages.
|
|
202
|
+
*
|
|
203
|
+
* @sideEffects none
|
|
204
|
+
* @stability internal
|
|
205
|
+
* @cil-generated
|
|
206
|
+
*/
|
|
150
207
|
interface FileValidation {
|
|
151
208
|
fileId: string
|
|
152
209
|
summary: ValidationSummary | null
|
|
153
210
|
loading: boolean
|
|
154
211
|
error: string | null
|
|
155
212
|
}
|
|
156
|
-
// CIL[DOC-VECTOR type="context" content="purpose='Defines per-file validation state'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
|
|
157
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
158
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
159
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
160
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
161
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
162
213
|
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:FileValidation:interface"]
|
|
163
214
|
|
|
164
215
|
|
|
165
216
|
|
|
166
217
|
|
|
167
|
-
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:PassBadge:component" type="component" identity="PassBadge" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
|
|
168
|
-
// CIL[DOC-MACRO purpose="Badge component showing ingestion pass status"]
|
|
169
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Renders a label for the current ingestion pass"]
|
|
170
|
-
// CIL[DOC-CONTEXT module="admin-cil" layer="presentation" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILFileListPage.tsx"]
|
|
171
|
-
// CIL[DOC-CONTRACT inputs="pass: number" outputs="Badge React element" errors="none" side_effects="none"]
|
|
172
|
-
// CIL[DOC-MICRO logic_summary="Shows Not ingested, Pass n, or Pass n complete variants" notable_decisions="[]"]
|
|
173
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
174
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
175
218
|
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:PassBadge:component" type="component" identity="PassBadge" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
|
|
237
|
+
/**
|
|
238
|
+
* PassBadge is a React component that visually represents the status of a pass based on its value. It provides feedback for various pass states, including not ingested, in progress, or complete.
|
|
239
|
+
*
|
|
240
|
+
* @macro React component responsible for rendering pass status badges.
|
|
241
|
+
* @micro Utilizes conditional rendering to determine the appropriate badge style and message based on the pass value.
|
|
242
|
+
* @inputSpec
|
|
243
|
+
* pass: number (required) — the number representing the pass status.
|
|
244
|
+
* @outputSpec JSX.Element — a badge element reflecting the pass status.
|
|
245
|
+
* @sideEffects none
|
|
246
|
+
* @stability internal
|
|
247
|
+
* @cil-generated
|
|
248
|
+
*/
|
|
176
249
|
function PassBadge({ pass }: { pass: number }) {
|
|
177
250
|
if (!pass || pass < 1) {
|
|
178
251
|
return <Badge variant="outline" className="text-xs text-muted-foreground">Not ingested</Badge>
|
|
@@ -182,26 +255,42 @@ function PassBadge({ pass }: { pass: number }) {
|
|
|
182
255
|
}
|
|
183
256
|
return <Badge variant="secondary" className="text-xs">Pass {pass}</Badge>
|
|
184
257
|
}
|
|
185
|
-
// CIL[DOC-VECTOR type="context" content="purpose='Badge component showing ingestion pass status'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
|
|
186
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
187
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
188
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
189
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
190
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
191
258
|
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:PassBadge:component"]
|
|
192
259
|
|
|
193
260
|
|
|
194
261
|
|
|
195
262
|
|
|
196
|
-
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:TrustBadge:component" type="component" identity="TrustBadge" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
|
|
197
|
-
// CIL[DOC-MACRO purpose="Badge component showing validation trust"]
|
|
198
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Renders a trust rating and drift count badge"]
|
|
199
|
-
// CIL[DOC-CONTEXT module="admin-cil" layer="presentation" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILFileListPage.tsx"]
|
|
200
|
-
// CIL[DOC-CONTRACT inputs="summary: ValidationSummary | null" outputs="Badge or null" errors="none" side_effects="none"]
|
|
201
|
-
// CIL[DOC-MICRO logic_summary="Displays destructive badge when drift detected, otherwise trusted percentage" notable_decisions="[]"]
|
|
202
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
203
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
204
263
|
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
|
|
281
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:TrustBadge:component" type="component" identity="TrustBadge" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
|
|
282
|
+
/**
|
|
283
|
+
* The TrustBadge component displays a visual indicator of trustworthiness based on a validation summary. It provides feedback on trust ratings and drift detection to inform users of the current state of validation.
|
|
284
|
+
*
|
|
285
|
+
* @macro UI component that renders trust status based on validation summary.
|
|
286
|
+
* @micro Utilizes conditional rendering to display different badge styles based on the presence of drift detection.
|
|
287
|
+
* @inputSpec
|
|
288
|
+
* - summary: ValidationSummary | null (required) — the validation summary containing trust rating and drift detection information.
|
|
289
|
+
* @outputSpec JSX.Element | null — returns a Badge component or null if no summary is provided.
|
|
290
|
+
* @sideEffects none
|
|
291
|
+
* @stability internal
|
|
292
|
+
* @cil-generated
|
|
293
|
+
*/
|
|
205
294
|
function TrustBadge({ summary }: { summary: ValidationSummary | null }) {
|
|
206
295
|
if (!summary) return null
|
|
207
296
|
const { trust_rating, drift_detected } = summary
|
|
@@ -220,26 +309,42 @@ function TrustBadge({ summary }: { summary: ValidationSummary | null }) {
|
|
|
220
309
|
</Badge>
|
|
221
310
|
)
|
|
222
311
|
}
|
|
223
|
-
// CIL[DOC-VECTOR type="context" content="purpose='Badge component showing validation trust'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
|
|
224
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
225
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
226
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
227
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
228
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
229
312
|
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:TrustBadge:component"]
|
|
230
313
|
|
|
231
314
|
|
|
232
315
|
|
|
233
316
|
|
|
234
|
-
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:CILFileListPage:component" type="component" identity="CILFileListPage" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
|
|
235
|
-
// CIL[DOC-MACRO purpose="Main page component for the CIL file list"]
|
|
236
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Fetches and renders CIL files for a project"]
|
|
237
|
-
// CIL[DOC-CONTEXT module="admin-cil" layer="presentation" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILFileListPage.tsx"]
|
|
238
|
-
// CIL[DOC-CONTRACT inputs="projectId from useParams" outputs="React page JSX" errors="Error messages displayed via validations" side_effects="Fetches project and files, manages React state, navigates"]
|
|
239
|
-
// CIL[DOC-MICRO logic_summary="Implements search, summary cards, file chunk expansion, and validation actions" notable_decisions="[]"]
|
|
240
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
241
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
242
317
|
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:CILFileListPage:component" type="component" identity="CILFileListPage" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
|
|
336
|
+
/**
|
|
337
|
+
* CILFileListPage is a React component that manages the display and validation of CIL files associated with a specific project. It fetches project and file data from an API and provides functionality to validate individual files or all visible files at once.
|
|
338
|
+
*
|
|
339
|
+
* @macro React component for managing CIL file listings and validations.
|
|
340
|
+
* @micro Utilizes asynchronous API calls to fetch project and file data, and manages state with React hooks.
|
|
341
|
+
* @outputSpec JSX.Element
|
|
342
|
+
* @sideEffects Makes external API calls to fetch project and file data, and to validate files.
|
|
343
|
+
* @stability internal
|
|
344
|
+
* @calls apiFetch
|
|
345
|
+
* @errorHandling none
|
|
346
|
+
* @cil-generated
|
|
347
|
+
*/
|
|
243
348
|
export default function CILFileListPage() {
|
|
244
349
|
const { id: projectId } = useParams<{ id: string }>()
|
|
245
350
|
const navigate = useNavigate()
|
|
@@ -259,14 +364,29 @@ export default function CILFileListPage() {
|
|
|
259
364
|
if (!projectId) return
|
|
260
365
|
setLoading(true)
|
|
261
366
|
|
|
367
|
+
const PAGE_SIZE = 500
|
|
368
|
+
const fetchAllFiles = async (): Promise<CILFile[]> => {
|
|
369
|
+
const all: CILFile[] = []
|
|
370
|
+
let offset = 0
|
|
371
|
+
while (true) {
|
|
372
|
+
const res = await apiFetch(
|
|
373
|
+
`/api/admin-data?action=list&entity=items&type_slug=cil_file&limit=${PAGE_SIZE}&offset=${offset}`
|
|
374
|
+
)
|
|
375
|
+
const json = await res.json()
|
|
376
|
+
const batch: CILFile[] = json?.data || json?.items || []
|
|
377
|
+
all.push(...batch)
|
|
378
|
+
if (batch.length < PAGE_SIZE) break
|
|
379
|
+
offset += PAGE_SIZE
|
|
380
|
+
}
|
|
381
|
+
return all
|
|
382
|
+
}
|
|
383
|
+
|
|
262
384
|
Promise.all([
|
|
263
385
|
apiFetch(`/api/cil-project?action=get&id=${projectId}`).then(r => r.json()),
|
|
264
|
-
|
|
265
|
-
.then(r => r.json()),
|
|
386
|
+
fetchAllFiles(),
|
|
266
387
|
])
|
|
267
|
-
.then(([projData,
|
|
388
|
+
.then(([projData, allFiles]) => {
|
|
268
389
|
setProject(projData?.project || projData?.data || null)
|
|
269
|
-
const allFiles: CILFile[] = filesData?.data || filesData?.items || []
|
|
270
390
|
setFiles(allFiles.filter(f => f.data?.project_id === projectId))
|
|
271
391
|
})
|
|
272
392
|
.catch(() => {})
|
|
@@ -381,6 +501,7 @@ export default function CILFileListPage() {
|
|
|
381
501
|
variant="ghost"
|
|
382
502
|
size="sm"
|
|
383
503
|
onClick={() => navigate(appPath(`/cil/${projectId}`))}
|
|
504
|
+
|
|
384
505
|
className="flex items-center gap-1 text-muted-foreground"
|
|
385
506
|
>
|
|
386
507
|
<ArrowLeft className="h-4 w-4" />
|
|
@@ -415,17 +536,6 @@ export default function CILFileListPage() {
|
|
|
415
536
|
</Button>
|
|
416
537
|
</div>
|
|
417
538
|
</div>
|
|
418
|
-
|
|
419
|
-
<PageInstructions
|
|
420
|
-
description="Browse indexed files and their chunks for a project."
|
|
421
|
-
sections={[
|
|
422
|
-
{ title: 'What this page is for', content: 'This page lists all files discovered for a CIL project and shows their ingestion, drift, and dead-code status.' },
|
|
423
|
-
{ title: 'How to read this page', content: 'The summary cards show Total Files, Fully Ingested, Dead Code, and Files with Drift. Each file card displays the path, language, chunk count, and status badges.' },
|
|
424
|
-
{ title: 'How to use this page', content: 'Use the search box to filter by path or language. Click a file to view its chunks. Click Validate All to re-check hashes and drift for the filtered files.' },
|
|
425
|
-
{ title: 'Important notes', content: 'Drift means the file changed since the last ingestion and stored hashes no longer match. Dead-code files are not called or imported by any other indexed file.' },
|
|
426
|
-
]}
|
|
427
|
-
/>
|
|
428
|
-
|
|
429
539
|
{}
|
|
430
540
|
<div className="grid grid-cols-2 sm:grid-cols-4 gap-3">
|
|
431
541
|
{[
|
|
@@ -479,31 +589,85 @@ export default function CILFileListPage() {
|
|
|
479
589
|
{filteredFiles.map(file => {
|
|
480
590
|
|
|
481
591
|
|
|
592
|
+
|
|
593
|
+
/**
|
|
594
|
+
* The constant 'd' stores the data from the 'file' object, defaulting to an empty object if no data is present. This ensures that subsequent operations can safely access 'd' without encountering undefined values.
|
|
595
|
+
*
|
|
596
|
+
* @sideEffects none
|
|
597
|
+
* @stability internal
|
|
598
|
+
* @cil-generated
|
|
599
|
+
*/
|
|
482
600
|
const d = file.data || {}
|
|
483
601
|
|
|
484
602
|
|
|
485
603
|
|
|
604
|
+
|
|
605
|
+
|
|
606
|
+
/**
|
|
607
|
+
* The constant 'filePath' holds the file path for a document, defaulting to the title of the file if no specific path is provided. It exists to ensure that a valid file path is always available for further processing.
|
|
608
|
+
*
|
|
609
|
+
* @sideEffects none
|
|
610
|
+
* @stability internal
|
|
611
|
+
* @cil-generated
|
|
612
|
+
*/
|
|
486
613
|
const filePath: string = d.file_path || file.title
|
|
487
614
|
|
|
488
615
|
|
|
489
616
|
|
|
617
|
+
|
|
618
|
+
|
|
619
|
+
/**
|
|
620
|
+
* The constant 'shortName' extracts the last segment of a file path, providing a simplified name for display purposes. It exists to facilitate user-friendly representations of file names in the admin interface.
|
|
621
|
+
*
|
|
622
|
+
* @sideEffects none
|
|
623
|
+
* @stability internal
|
|
624
|
+
* @cil-generated
|
|
625
|
+
*/
|
|
490
626
|
const shortName = filePath.split('/').pop() || filePath
|
|
491
627
|
|
|
492
628
|
|
|
493
629
|
|
|
630
|
+
|
|
631
|
+
|
|
632
|
+
/**
|
|
633
|
+
* The constant 'dirPath' extracts the directory path from a given file path if it contains a '/' character. It exists to facilitate operations that require the directory context of a file path.
|
|
634
|
+
*
|
|
635
|
+
* @sideEffects none
|
|
636
|
+
* @stability internal
|
|
637
|
+
* @cil-generated
|
|
638
|
+
*/
|
|
494
639
|
const dirPath = filePath.includes('/')
|
|
495
640
|
? filePath.split('/').slice(0, -1).join('/')
|
|
496
641
|
: ''
|
|
497
642
|
|
|
498
643
|
|
|
499
644
|
|
|
645
|
+
|
|
646
|
+
|
|
647
|
+
/**
|
|
648
|
+
* The constant 'val' retrieves validation rules associated with a specific file ID from the 'validations' object. It exists to provide the necessary validation logic for the file being processed.
|
|
649
|
+
*
|
|
650
|
+
* @sideEffects none
|
|
651
|
+
* @stability internal
|
|
652
|
+
* @cil-generated
|
|
653
|
+
*/
|
|
500
654
|
const val = validations[file.id]
|
|
501
655
|
|
|
502
656
|
|
|
503
657
|
|
|
658
|
+
|
|
659
|
+
|
|
660
|
+
/**
|
|
661
|
+
* The constant 'isValidating' determines if the loading state of a validation process is active. It is used to conditionally render UI elements based on the validation status.
|
|
662
|
+
*
|
|
663
|
+
* @sideEffects none
|
|
664
|
+
* @stability internal
|
|
665
|
+
* @cil-generated
|
|
666
|
+
*/
|
|
504
667
|
const isValidating = val?.loading === true
|
|
505
668
|
|
|
506
669
|
|
|
670
|
+
|
|
507
671
|
return (
|
|
508
672
|
<Card key={file.id} className="hover:bg-muted/30 transition-colors">
|
|
509
673
|
<CardContent className="p-4">
|
|
@@ -616,8 +780,17 @@ export default function CILFileListPage() {
|
|
|
616
780
|
{expandedFiles.has(file.id) && (() => {
|
|
617
781
|
|
|
618
782
|
|
|
783
|
+
|
|
784
|
+
/**
|
|
785
|
+
* The constant 'fc' retrieves the file chunk associated with a specific file ID, providing a way to manage loading states and display appropriate messages based on the chunk's status. It exists to facilitate the rendering of file chunk information in the UI.
|
|
786
|
+
*
|
|
787
|
+
* @sideEffects none
|
|
788
|
+
* @stability internal
|
|
789
|
+
* @cil-generated
|
|
790
|
+
*/
|
|
619
791
|
const fc = fileChunks[file.id]
|
|
620
792
|
|
|
793
|
+
|
|
621
794
|
if (!fc || fc.loading) return (
|
|
622
795
|
<div className="mt-3 pt-3 border-t space-y-1.5">
|
|
623
796
|
{[...Array(3)].map((_, i) => (
|
|
@@ -631,6 +804,14 @@ export default function CILFileListPage() {
|
|
|
631
804
|
|
|
632
805
|
|
|
633
806
|
|
|
807
|
+
|
|
808
|
+
/**
|
|
809
|
+
* CHUNK_TYPE_COLORS is a mapping of chunk types to their corresponding CSS class styles for visual representation in the UI. It provides consistent styling for different types of code chunks displayed in the admin interface.
|
|
810
|
+
*
|
|
811
|
+
* @sideEffects none
|
|
812
|
+
* @stability internal
|
|
813
|
+
* @cil-generated
|
|
814
|
+
*/
|
|
634
815
|
const CHUNK_TYPE_COLORS: Record<string, string> = {
|
|
635
816
|
function: 'bg-indigo-100 text-indigo-700',
|
|
636
817
|
class: 'bg-violet-100 text-violet-700',
|
|
@@ -644,13 +825,23 @@ export default function CILFileListPage() {
|
|
|
644
825
|
|
|
645
826
|
|
|
646
827
|
|
|
828
|
+
|
|
647
829
|
return (
|
|
648
830
|
<div className="mt-3 pt-3 border-t space-y-1">
|
|
649
831
|
{fc.chunks.map(chunk => {
|
|
650
832
|
|
|
651
833
|
|
|
834
|
+
|
|
835
|
+
/**
|
|
836
|
+
* The constant 'typeClass' determines the CSS class to apply based on the chunk type, providing visual differentiation in the UI. It ensures that each chunk is styled appropriately according to its type, enhancing user experience.
|
|
837
|
+
*
|
|
838
|
+
* @sideEffects none
|
|
839
|
+
* @stability internal
|
|
840
|
+
* @cil-generated
|
|
841
|
+
*/
|
|
652
842
|
const typeClass = CHUNK_TYPE_COLORS[chunk.chunk_type] || 'bg-slate-100 text-slate-600'
|
|
653
843
|
|
|
844
|
+
|
|
654
845
|
return (
|
|
655
846
|
<a
|
|
656
847
|
key={chunk.id}
|
|
@@ -686,11 +877,12 @@ export default function CILFileListPage() {
|
|
|
686
877
|
</div>
|
|
687
878
|
)
|
|
688
879
|
}
|
|
689
|
-
// CIL[DOC-VECTOR type="context" content="purpose='Main page component for the CIL file list'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
|
|
690
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
691
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
692
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
693
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
694
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
695
880
|
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:CILFileListPage:component"]
|
|
696
881
|
|
|
882
|
+
|
|
883
|
+
|
|
884
|
+
|
|
885
|
+
|
|
886
|
+
|
|
887
|
+
|
|
888
|
+
|