spine-framework 0.4.4 → 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/hash-api-key.ts +183 -79
- package/.framework/functions/_shared/logging.ts +562 -224
- package/.framework/functions/_shared/middleware.ts +47 -44
- package/.framework/functions/admin-data.ts +39 -28
- package/.framework/functions/ai-agents.ts +10 -6
- 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/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 +240 -127
- package/.framework/functions/tests.ts +7 -6
- package/.framework/functions/timers.ts +310 -107
- package/.framework/functions/triggers.ts +28 -13
- package/.framework/functions/types.ts +13 -10
- 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/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 +88 -79
- package/.framework/src/components/admin/EntitySelect.tsx +181 -0
- package/.framework/src/components/admin/PageInstructions.tsx +86 -127
- package/.framework/src/components/app-shell/GenericDetailPage.tsx +37 -13
- package/.framework/src/components/app-shell/GenericListPage.tsx +28 -32
- package/.framework/src/components/layout/Sidebar.tsx +300 -177
- 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/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/pages/NotFoundPage.tsx +62 -31
- 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/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 +4 -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 +479 -44
- 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/integration-outbound-credentials.test.ts +167 -0
- package/.framework/tests/unit/integrations-audit-redaction.test.ts +130 -0
- package/.framework/tests/unit/logging-app-id.test.ts +75 -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/README.md +125 -166
- package/config/tsconfig.cli.json +2 -2
- 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/CILProjectsPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/pages/admin/cil/CILProjectsPage.tsx"]
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
2
|
+
/**
|
|
3
|
+
* @module CILProjectsPage
|
|
4
|
+
* @audience internal
|
|
5
|
+
* @layer app-specific
|
|
6
|
+
* @stability stable
|
|
7
|
+
*
|
|
8
|
+
* The CILProjectsPage module is responsible for rendering the user interface for managing CIL projects within the admin section of the application. It fetches project data from the API and displays it in a structured format using cards and badges. INVARIANT: The user must have admin privileges to access this page.
|
|
9
|
+
*
|
|
10
|
+
* @seeAlso apiFetch (used for fetching project data).
|
|
11
|
+
* @seeAlso @core/components/ui/card (provides UI components for displaying project information).
|
|
12
|
+
* @seeAlso react-router-dom (for navigation handling).
|
|
13
|
+
*
|
|
14
|
+
* @cil-generated
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
10
25
|
|
|
11
26
|
import { useEffect, useState } from 'react'
|
|
12
27
|
import { useNavigate } from 'react-router-dom'
|
|
@@ -16,8 +31,10 @@ import { Button } from '@core/components/ui/button'
|
|
|
16
31
|
import { Badge } from '@core/components/ui/badge'
|
|
17
32
|
import { Skeleton } from '@core/components/ui/skeleton'
|
|
18
33
|
import {
|
|
34
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILProjectsPage.tsx:module_header:module_header"]
|
|
19
35
|
Dialog,
|
|
20
36
|
DialogContent,
|
|
37
|
+
DialogDescription,
|
|
21
38
|
DialogHeader,
|
|
22
39
|
DialogTitle,
|
|
23
40
|
DialogFooter,
|
|
@@ -28,24 +45,32 @@ import { Textarea } from '@core/components/ui/textarea'
|
|
|
28
45
|
import { NativeSelect, NativeSelectOption } from '@core/components/ui/native-select'
|
|
29
46
|
import { FolderGit2, Plus, Play, CheckCircle2, Clock, AlertCircle, GitGraph, LayoutDashboard, Trash2, Layers, Pencil, X } from 'lucide-react'
|
|
30
47
|
|
|
31
|
-
import { PageInstructions } from '../../../components/admin/PageInstructions'
|
|
32
48
|
|
|
33
|
-
// CIL[DOC-VECTOR type="context" content="purpose='React page for administering CIL projects — listing, creation, ingestion, and deletion.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
|
|
34
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
35
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
36
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
37
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
38
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
39
|
-
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILProjectsPage.tsx:module_header:module_header"]
|
|
40
|
-
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILProjectsPage.tsx:SourceSet:interface" type="interface" identity="SourceSet" parent="~/.framework/src/pages/admin/cil/CILProjectsPage.tsx"]
|
|
41
|
-
// CIL[DOC-MACRO purpose="Describe an optional source set within a CIL project."]
|
|
42
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Type-check source set fields including base path, globs, and layer."]
|
|
43
|
-
// CIL[DOC-CONTEXT module="admin/cil" layer="domain" 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/dialog.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/native-select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/textarea.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILProjectsPage.tsx"]
|
|
44
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="TypeScript interface" errors="none" side_effects="none"]
|
|
45
|
-
// CIL[DOC-MICRO logic_summary="Optional source set structure with id, name, base_path, globs, exclude_globs, and layer." notable_decisions="[]"]
|
|
46
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
47
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
48
49
|
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILProjectsPage.tsx:SourceSet:interface" type="interface" identity="SourceSet" parent="~/.framework/src/pages/admin/cil/CILProjectsPage.tsx"]
|
|
67
|
+
/**
|
|
68
|
+
* The SourceSet interface defines a structure for managing a set of source files, including their identifiers and paths. It is used to facilitate the organization and retrieval of source files in the application.
|
|
69
|
+
*
|
|
70
|
+
* @sideEffects none
|
|
71
|
+
* @stability stable
|
|
72
|
+
* @cil-generated
|
|
73
|
+
*/
|
|
49
74
|
interface SourceSet {
|
|
50
75
|
id: string
|
|
51
76
|
name: string
|
|
@@ -54,24 +79,35 @@ interface SourceSet {
|
|
|
54
79
|
exclude_globs?: string
|
|
55
80
|
layer?: string
|
|
56
81
|
}
|
|
57
|
-
// CIL[DOC-VECTOR type="context" content="purpose='Describe an optional source set within a CIL project.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
|
|
58
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
59
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
60
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
61
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
62
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
63
82
|
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILProjectsPage.tsx:SourceSet:interface"]
|
|
64
83
|
|
|
65
84
|
|
|
66
|
-
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILProjectsPage.tsx:CILProject:interface" type="interface" identity="CILProject" parent="~/.framework/src/pages/admin/cil/CILProjectsPage.tsx"]
|
|
67
|
-
// CIL[DOC-MACRO purpose="Data model for a CIL project record and its ingestion metadata."]
|
|
68
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Define the shape of project data returned from the CIL API."]
|
|
69
|
-
// CIL[DOC-CONTEXT module="admin/cil" layer="domain" 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/dialog.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/native-select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/textarea.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILProjectsPage.tsx"]
|
|
70
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="TypeScript interface" errors="none" side_effects="none"]
|
|
71
|
-
// CIL[DOC-MICRO logic_summary="Includes id, title, description, status, and a nested data object with repo path, globs, source sets, and ingestion statistics." notable_decisions="[]"]
|
|
72
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
73
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
74
85
|
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILProjectsPage.tsx:CILProject:interface" type="interface" identity="CILProject" parent="~/.framework/src/pages/admin/cil/CILProjectsPage.tsx"]
|
|
104
|
+
/**
|
|
105
|
+
* CILProject defines the structure of a project within the CIL framework, encapsulating essential project details and ingestion data. It standardizes how project information is represented and managed in the application.
|
|
106
|
+
*
|
|
107
|
+
* @sideEffects none
|
|
108
|
+
* @stability stable
|
|
109
|
+
* @cil-generated
|
|
110
|
+
*/
|
|
75
111
|
interface CILProject {
|
|
76
112
|
id: string
|
|
77
113
|
title: string
|
|
@@ -93,12 +129,6 @@ interface CILProject {
|
|
|
93
129
|
}
|
|
94
130
|
created_at: string
|
|
95
131
|
}
|
|
96
|
-
// CIL[DOC-VECTOR type="context" content="purpose='Data model for a CIL project record and its ingestion metadata.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
|
|
97
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
98
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
99
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
100
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
101
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
102
132
|
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILProjectsPage.tsx:CILProject:interface"]
|
|
103
133
|
|
|
104
134
|
|
|
@@ -106,27 +136,47 @@ interface CILProject {
|
|
|
106
136
|
|
|
107
137
|
|
|
108
138
|
|
|
109
|
-
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILProjectsPage.tsx:status_badge:constant" type="constant" identity="STATUS_BADGE" parent="~/.framework/src/pages/admin/cil/CILProjectsPage.tsx"]
|
|
110
|
-
// CIL[DOC-MACRO purpose="Mapping of ingestion statuses to badge label and variant."]
|
|
111
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Provide consistent badge styling for not_started, in_progress, and complete statuses."]
|
|
112
|
-
// CIL[DOC-CONTEXT module="admin/cil" layer="ui" 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/dialog.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/native-select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/textarea.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILProjectsPage.tsx"]
|
|
113
|
-
// CIL[DOC-CONTRACT inputs="ingestion status string" outputs="badge label and variant" errors="none" side_effects="none"]
|
|
114
|
-
// CIL[DOC-MICRO logic_summary="Record keyed by status that returns a label and a shadcn Badge variant." notable_decisions="[]"]
|
|
115
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
116
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
117
139
|
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILProjectsPage.tsx:STATUS_BADGE:constant" type="constant" identity="STATUS_BADGE" parent="~/.framework/src/pages/admin/cil/CILProjectsPage.tsx"]
|
|
158
|
+
/**
|
|
159
|
+
* STATUS_BADGE is a constant that defines the various status labels and their corresponding visual variants for project statuses in the admin interface. It exists to provide a consistent way to represent project states throughout the application.
|
|
160
|
+
*
|
|
161
|
+
* @sideEffects none
|
|
162
|
+
* @stability stable
|
|
163
|
+
* @cil-generated
|
|
164
|
+
*/
|
|
118
165
|
const STATUS_BADGE: Record<string, { label: string; variant: 'default' | 'secondary' | 'outline' }> = {
|
|
119
166
|
not_started: { label: 'Not Started', variant: 'outline' },
|
|
120
167
|
in_progress: { label: 'In Progress', variant: 'secondary' },
|
|
121
168
|
complete: { label: 'Complete', variant: 'default' },
|
|
122
169
|
}
|
|
123
|
-
// CIL[
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
170
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILProjectsPage.tsx:STATUS_BADGE:constant"]
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
|
|
130
180
|
|
|
131
181
|
|
|
132
182
|
|
|
@@ -138,27 +188,35 @@ const STATUS_BADGE: Record<string, { label: string; variant: 'default' | 'second
|
|
|
138
188
|
|
|
139
189
|
|
|
140
190
|
|
|
141
|
-
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILProjectsPage.tsx:status_icon:constant" type="constant" identity="STATUS_ICON" parent="~/.framework/src/pages/admin/cil/CILProjectsPage.tsx"]
|
|
142
|
-
// CIL[DOC-MACRO purpose="Mapping of ingestion statuses to icon components."]
|
|
143
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Render an appropriate Lucide icon for each ingestion status."]
|
|
144
|
-
// CIL[DOC-CONTEXT module="admin/cil" layer="ui" 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/dialog.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/native-select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/textarea.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILProjectsPage.tsx"]
|
|
145
|
-
// CIL[DOC-CONTRACT inputs="ingestion status string" outputs="React icon component" errors="none" side_effects="none"]
|
|
146
|
-
// CIL[DOC-MICRO logic_summary="Record keyed by status that returns Clock, AlertCircle, or CheckCircle2 components." notable_decisions="[]"]
|
|
147
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
148
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
149
191
|
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILProjectsPage.tsx:STATUS_ICON:constant" type="constant" identity="STATUS_ICON" parent="~/.framework/src/pages/admin/cil/CILProjectsPage.tsx"]
|
|
201
|
+
/**
|
|
202
|
+
* STATUS_ICON is a mapping of project statuses to their corresponding React components, providing a consistent way to render status indicators in the UI. This ensures that the visual representation of project statuses is uniform across the application.
|
|
203
|
+
*
|
|
204
|
+
* @sideEffects none
|
|
205
|
+
* @stability stable
|
|
206
|
+
* @cil-generated
|
|
207
|
+
*/
|
|
150
208
|
const STATUS_ICON: Record<string, React.ElementType> = {
|
|
151
209
|
not_started: Clock,
|
|
152
210
|
in_progress: AlertCircle,
|
|
153
211
|
complete: CheckCircle2,
|
|
154
212
|
}
|
|
155
|
-
// CIL[
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
213
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILProjectsPage.tsx:STATUS_ICON:constant"]
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
|
|
162
220
|
|
|
163
221
|
|
|
164
222
|
|
|
@@ -166,15 +224,31 @@ const STATUS_ICON: Record<string, React.ElementType> = {
|
|
|
166
224
|
|
|
167
225
|
|
|
168
226
|
|
|
169
|
-
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILProjectsPage.tsx:CILProjectsPage:component" type="component" identity="CILProjectsPage" parent="~/.framework/src/pages/admin/cil/CILProjectsPage.tsx"]
|
|
170
|
-
// CIL[DOC-MACRO purpose="Default React component for the CIL projects admin page."]
|
|
171
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Display and manage CIL projects, including listing, creating, editing, deleting, and navigation."]
|
|
172
|
-
// CIL[DOC-CONTEXT module="admin/cil" layer="ui" 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/dialog.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/native-select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/textarea.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILProjectsPage.tsx"]
|
|
173
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="JSX page" errors="none" side_effects="API calls, React state and navigation"]
|
|
174
|
-
// CIL[DOC-MICRO logic_summary="Fetches project list, renders status cards with badge and icon, and provides a dialog to register or edit projects and source sets." notable_decisions="[]"]
|
|
175
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
176
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
177
227
|
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILProjectsPage.tsx:CILProjectsPage:component" type="component" identity="CILProjectsPage" parent="~/.framework/src/pages/admin/cil/CILProjectsPage.tsx"]
|
|
240
|
+
/**
|
|
241
|
+
* CILProjectsPage manages the display and creation of CIL projects within the admin interface. It handles project data fetching, creation, and editing functionalities.
|
|
242
|
+
*
|
|
243
|
+
* @macro Component for managing CIL projects in an admin interface.
|
|
244
|
+
* @micro Utilizes React state management and API calls to fetch and manipulate project data.
|
|
245
|
+
* @outputSpec JSX.Element — renders the CIL projects page UI
|
|
246
|
+
* @sideEffects API calls to fetch, create, and update CIL project data
|
|
247
|
+
* @stability stable
|
|
248
|
+
* @calls apiFetch
|
|
249
|
+
* @errorHandling none
|
|
250
|
+
* @cil-generated
|
|
251
|
+
*/
|
|
178
252
|
export default function CILProjectsPage() {
|
|
179
253
|
const navigate = useNavigate()
|
|
180
254
|
const appPath = (path: string) => '/spine-framework/admin' + (path.startsWith('/') ? path : '/' + path)
|
|
@@ -327,17 +401,6 @@ export default function CILProjectsPage() {
|
|
|
327
401
|
New Project
|
|
328
402
|
</Button>
|
|
329
403
|
</div>
|
|
330
|
-
|
|
331
|
-
<PageInstructions
|
|
332
|
-
description="Manage CIL projects and registered codebases."
|
|
333
|
-
sections={[
|
|
334
|
-
{ title: 'What this page is for', content: 'Projects represent codebases that the CIL has indexed. This page lists all projects, their ingestion status, and quick stats.' },
|
|
335
|
-
{ title: 'How to read this page', content: 'Each card shows the project title, repository path, status badge, and counts for files, chunks, and cumulative ingestion cost. Click a card to open the project.' },
|
|
336
|
-
{ title: 'How to create / manage', content: 'Click New Project to register a codebase. Open a project to run ingestion, inspect the graph, or use the agent. Use the dashboard or ingestion tabs for detailed status.' },
|
|
337
|
-
{ title: 'Important notes', content: 'The status badge reflects the latest ingestion pass. Costs are cumulative across all runs and include embedding and documentation generation.' },
|
|
338
|
-
]}
|
|
339
|
-
/>
|
|
340
|
-
|
|
341
404
|
{loading ? (
|
|
342
405
|
<div className="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4">
|
|
343
406
|
{[1, 2, 3].map(i => <Skeleton key={i} className="h-44 rounded-xl" />)}
|
|
@@ -359,18 +422,35 @@ export default function CILProjectsPage() {
|
|
|
359
422
|
|
|
360
423
|
|
|
361
424
|
|
|
425
|
+
|
|
426
|
+
/**
|
|
427
|
+
* The constant 'ingestionStatus' retrieves the ingestion status of a project, defaulting to 'not_started' if the status is not available. It exists to provide a clear indication of the project's ingestion state within the CILProjectsPage module.
|
|
428
|
+
*
|
|
429
|
+
* @sideEffects none
|
|
430
|
+
* @stability stable
|
|
431
|
+
* @cil-generated
|
|
432
|
+
*/
|
|
362
433
|
const ingestionStatus = project.data?.ingestion_status || 'not_started'
|
|
363
434
|
|
|
364
435
|
|
|
365
436
|
|
|
366
437
|
|
|
367
438
|
|
|
439
|
+
|
|
368
440
|
const { label, variant } = STATUS_BADGE[ingestionStatus] || STATUS_BADGE.not_started
|
|
369
441
|
|
|
370
442
|
|
|
371
443
|
|
|
372
444
|
|
|
373
445
|
|
|
446
|
+
|
|
447
|
+
/**
|
|
448
|
+
* StatusIcon determines the appropriate icon to represent the current ingestion status, providing a fallback to a default clock icon if the status is not recognized.
|
|
449
|
+
*
|
|
450
|
+
* @sideEffects none
|
|
451
|
+
* @stability stable
|
|
452
|
+
* @cil-generated
|
|
453
|
+
*/
|
|
374
454
|
const StatusIcon = STATUS_ICON[ingestionStatus] || Clock
|
|
375
455
|
|
|
376
456
|
|
|
@@ -378,6 +458,7 @@ export default function CILProjectsPage() {
|
|
|
378
458
|
|
|
379
459
|
|
|
380
460
|
|
|
461
|
+
|
|
381
462
|
return (
|
|
382
463
|
<Card
|
|
383
464
|
key={project.id}
|
|
@@ -514,6 +595,9 @@ export default function CILProjectsPage() {
|
|
|
514
595
|
<DialogContent className="max-w-2xl max-h-[85vh] overflow-y-auto">
|
|
515
596
|
<DialogHeader>
|
|
516
597
|
<DialogTitle>{editingProjectId ? 'Edit CIL Project' : 'Register New CIL Project'}</DialogTitle>
|
|
598
|
+
<DialogDescription>
|
|
599
|
+
Configure the code intelligence project and its source sets.
|
|
600
|
+
</DialogDescription>
|
|
517
601
|
</DialogHeader>
|
|
518
602
|
<div className="space-y-4 py-2">
|
|
519
603
|
<div className="space-y-1.5">
|
|
@@ -707,10 +791,10 @@ export default function CILProjectsPage() {
|
|
|
707
791
|
<DialogTitle className="text-destructive flex items-center gap-2">
|
|
708
792
|
<Trash2 className="h-4 w-4" /> Delete Project
|
|
709
793
|
</DialogTitle>
|
|
794
|
+
<DialogDescription>
|
|
795
|
+
This will permanently delete the project and <strong>all associated files, chunks, proposals, embeddings, and graph links</strong>. This action cannot be undone.
|
|
796
|
+
</DialogDescription>
|
|
710
797
|
</DialogHeader>
|
|
711
|
-
<p className="text-sm text-muted-foreground">
|
|
712
|
-
This will permanently delete the project and <strong>all associated files, chunks, proposals, embeddings, and graph links</strong>. This action cannot be undone.
|
|
713
|
-
</p>
|
|
714
798
|
<p className="text-sm font-medium">
|
|
715
799
|
Project: <span className="font-mono">{projects.find(p => p.id === confirmDeleteId)?.title || confirmDeleteId}</span>
|
|
716
800
|
</p>
|
|
@@ -725,11 +809,13 @@ export default function CILProjectsPage() {
|
|
|
725
809
|
</div>
|
|
726
810
|
)
|
|
727
811
|
}
|
|
728
|
-
|
|
729
|
-
// CIL[DOC-VECTOR type="context" content="purpose='Default React component for the CIL projects admin page.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
|
|
730
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
731
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
732
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
733
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
734
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
735
812
|
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILProjectsPage.tsx:CILProjectsPage:component"]
|
|
813
|
+
|
|
814
|
+
|
|
815
|
+
|
|
816
|
+
|
|
817
|
+
|
|
818
|
+
|
|
819
|
+
|
|
820
|
+
|
|
821
|
+
|