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,29 @@
|
|
|
1
1
|
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/TypeDetailPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/pages/admin/TypeDetailPage.tsx"]
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
2
|
+
/**
|
|
3
|
+
* @module TypeDetailPage
|
|
4
|
+
* @audience internal
|
|
5
|
+
* @layer app-specific
|
|
6
|
+
* @stability stable
|
|
7
|
+
*
|
|
8
|
+
* This module represents the Type Detail Page in the admin section of the application, allowing users to view and manage details of a specific type. It integrates with the API to fetch and update type data, providing a user-friendly interface with various UI components for interaction.
|
|
9
|
+
* INVARIANT: The user must have appropriate permissions to access this page and perform actions on types.
|
|
10
|
+
*
|
|
11
|
+
* @seeAlso useApi (provides API interaction hooks).
|
|
12
|
+
* @seeAlso Button (UI component for actions).
|
|
13
|
+
* @seeAlso Modal (UI component for confirmations).
|
|
14
|
+
* @seeAlso DataTable (UI component for displaying data).
|
|
15
|
+
*
|
|
16
|
+
* @cil-generated
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
10
27
|
|
|
11
28
|
|
|
12
29
|
|
|
@@ -31,23 +48,31 @@ import { Alert, AlertDescription, AlertTitle } from '../../components/ui/alert'
|
|
|
31
48
|
import { DataTable } from '../../components/ui/DataTable'
|
|
32
49
|
import { ArrowLeft, Pencil, Trash2, AlertCircle } from 'lucide-react'
|
|
33
50
|
import { formatDateTime } from '../../lib/utils'
|
|
34
|
-
import { PageInstructions } from '../../components/admin/PageInstructions'
|
|
35
|
-
|
|
36
|
-
// CIL[DOC-VECTOR type="context" content="purpose='Admin type detail page for viewing, creating, and editing Spine type schemas'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/components/ui/button.tsx"]
|
|
37
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
38
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
39
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
40
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
41
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
42
51
|
// CIL[END stable_id="~/.framework/src/pages/admin/TypeDetailPage.tsx:module_header:module_header"]
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
43
68
|
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/TypeDetailPage.tsx:Type:interface" type="interface" identity="Type" parent="~/.framework/src/pages/admin/TypeDetailPage.tsx"]
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
69
|
+
/**
|
|
70
|
+
* The Type interface defines the structure of a type object used in the admin panel, encapsulating various attributes related to types. It serves to standardize the representation of types across the application.
|
|
71
|
+
*
|
|
72
|
+
* @sideEffects none
|
|
73
|
+
* @stability stable
|
|
74
|
+
* @cil-generated
|
|
75
|
+
*/
|
|
51
76
|
interface Type {
|
|
52
77
|
id: string
|
|
53
78
|
name: string
|
|
@@ -61,7 +86,6 @@ interface Type {
|
|
|
61
86
|
record_permissions?: Record<string, string[]>
|
|
62
87
|
}
|
|
63
88
|
validation_schema?: Record<string, any>
|
|
64
|
-
view_config?: Record<string, any>
|
|
65
89
|
ownership: string
|
|
66
90
|
is_active: boolean
|
|
67
91
|
app_id?: string
|
|
@@ -69,22 +93,31 @@ interface Type {
|
|
|
69
93
|
created_at: string
|
|
70
94
|
updated_at: string
|
|
71
95
|
}
|
|
72
|
-
// CIL[DOC-VECTOR type="context" content="purpose='Shape of a Spine type record used by the admin detail page'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/components/ui/button.tsx"]
|
|
73
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
74
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
75
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
76
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
77
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
78
96
|
// CIL[END stable_id="~/.framework/src/pages/admin/TypeDetailPage.tsx:Type:interface"]
|
|
79
97
|
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
80
113
|
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/TypeDetailPage.tsx:TypeItem:interface" type="interface" identity="TypeItem" parent="~/.framework/src/pages/admin/TypeDetailPage.tsx"]
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
114
|
+
/**
|
|
115
|
+
* The TypeItem interface defines the structure of a type item used in the admin module, encapsulating essential attributes for managing type data. It serves as a blueprint for creating and manipulating type items within the application.
|
|
116
|
+
*
|
|
117
|
+
* @sideEffects none
|
|
118
|
+
* @stability stable
|
|
119
|
+
* @cil-generated
|
|
120
|
+
*/
|
|
88
121
|
interface TypeItem {
|
|
89
122
|
id: string
|
|
90
123
|
item_type_id: string
|
|
@@ -95,22 +128,37 @@ interface TypeItem {
|
|
|
95
128
|
created_by: string
|
|
96
129
|
account_id: string
|
|
97
130
|
}
|
|
98
|
-
// CIL[DOC-VECTOR type="context" content="purpose='Shape of a runtime item that belongs to a Spine type'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/components/ui/button.tsx"]
|
|
99
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
100
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
101
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
102
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
103
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
104
131
|
// CIL[END stable_id="~/.framework/src/pages/admin/TypeDetailPage.tsx:TypeItem:interface"]
|
|
105
132
|
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
|
|
106
148
|
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/TypeDetailPage.tsx:TypeDetailPage:component" type="component" identity="TypeDetailPage" parent="~/.framework/src/pages/admin/TypeDetailPage.tsx"]
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
149
|
+
/**
|
|
150
|
+
* The TypeDetailPage component manages the creation and editing of type entities within the admin interface. It handles fetching available applications and type details based on the provided parameters.
|
|
151
|
+
*
|
|
152
|
+
* @macro Component for managing type details in an admin interface.
|
|
153
|
+
* @micro Utilizes React hooks for state management and side effects, including API calls to fetch data.
|
|
154
|
+
* @outputSpec JSX.Element — renders the type detail page UI.
|
|
155
|
+
* @throws Error — Type ID or slug is required
|
|
156
|
+
* @sideEffects Fetches data from external API endpoints.
|
|
157
|
+
* @stability stable
|
|
158
|
+
* @calls apiFetch, useApi, useParams, useNavigate
|
|
159
|
+
* @errorHandling Logs errors to the console during API fetch failures.
|
|
160
|
+
* @cil-generated
|
|
161
|
+
*/
|
|
114
162
|
export function TypeDetailPage() {
|
|
115
163
|
const { id, kind } = useParams<{ id: string, kind: string }>()
|
|
116
164
|
const navigate = useNavigate()
|
|
@@ -127,13 +175,13 @@ export function TypeDetailPage() {
|
|
|
127
175
|
color: '',
|
|
128
176
|
kind: typeKind,
|
|
129
177
|
design_schema: { fields: {} },
|
|
130
|
-
view_config: {},
|
|
131
178
|
ownership: 'app',
|
|
132
179
|
app_id: '',
|
|
133
180
|
is_active: true
|
|
134
181
|
})
|
|
135
182
|
const [schemaText, setSchemaText] = useState(JSON.stringify({ fields: {} }, null, 2))
|
|
136
|
-
const [
|
|
183
|
+
const [formError, setFormError] = useState<string | null>(null)
|
|
184
|
+
|
|
137
185
|
const [availableApps, setAvailableApps] = useState<Array<{id: string, name: string}>>([])
|
|
138
186
|
|
|
139
187
|
React.useEffect(() => {
|
|
@@ -185,8 +233,8 @@ export function TypeDetailPage() {
|
|
|
185
233
|
if (!id) throw new Error('Type ID or slug is required')
|
|
186
234
|
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i
|
|
187
235
|
const url = uuidRegex.test(id)
|
|
188
|
-
? `/api/types?action=get&id=${id}`
|
|
189
|
-
: `/api/types?action=get&slug=${id}`
|
|
236
|
+
? `/api/types?action=get&id=${id}&include_schema=true`
|
|
237
|
+
: `/api/types?action=get&slug=${id}&include_schema=true`
|
|
190
238
|
const response = await apiFetch(url)
|
|
191
239
|
if (!response.ok) {
|
|
192
240
|
throw new Error(response.status === 500 ? 'Type not found' : 'Failed to fetch type')
|
|
@@ -208,39 +256,31 @@ export function TypeDetailPage() {
|
|
|
208
256
|
color: type.color || '',
|
|
209
257
|
kind: type.kind || 'item',
|
|
210
258
|
design_schema: type.design_schema || { fields: {} },
|
|
211
|
-
view_config: type.view_config || {},
|
|
212
259
|
ownership: type.ownership || 'system',
|
|
213
260
|
app_id: type.app_id || '',
|
|
214
261
|
is_active: type.is_active ?? true
|
|
215
262
|
})
|
|
216
263
|
setSchemaText(JSON.stringify(type.design_schema || { fields: {} }, null, 2))
|
|
217
|
-
setViewConfigText(JSON.stringify(type.view_config || {}, null, 2))
|
|
218
264
|
}
|
|
219
265
|
}, [type])
|
|
220
266
|
|
|
221
267
|
const handleSave = async () => {
|
|
222
268
|
try {
|
|
269
|
+
setFormError(null)
|
|
223
270
|
const { app_id } = editData
|
|
224
271
|
const ownership = (editData.ownership || '').toLowerCase()
|
|
225
272
|
if (ownership !== 'system' && !app_id) {
|
|
226
273
|
throw new Error('App selection is required when ownership is not "System"')
|
|
227
274
|
}
|
|
228
275
|
let parsedSchema = { fields: {} }
|
|
229
|
-
let parsedViewConfig = {}
|
|
230
276
|
try {
|
|
231
277
|
parsedSchema = JSON.parse(schemaText)
|
|
232
278
|
} catch (error) {
|
|
233
279
|
console.warn('Invalid JSON in schema field, using default:', error)
|
|
234
280
|
}
|
|
235
|
-
try {
|
|
236
|
-
parsedViewConfig = JSON.parse(viewConfigText)
|
|
237
|
-
} catch (error) {
|
|
238
|
-
console.warn('Invalid JSON in view config field, using default:', error)
|
|
239
|
-
}
|
|
240
281
|
const saveData = {
|
|
241
282
|
...editData,
|
|
242
283
|
design_schema: parsedSchema,
|
|
243
|
-
view_config: parsedViewConfig,
|
|
244
284
|
app_id: editData.app_id || null
|
|
245
285
|
}
|
|
246
286
|
const url = isCreateMode
|
|
@@ -263,7 +303,7 @@ export function TypeDetailPage() {
|
|
|
263
303
|
}
|
|
264
304
|
} catch (error) {
|
|
265
305
|
console.error(`Error ${isCreateMode ? 'creating' : 'updating'} type:`, error)
|
|
266
|
-
|
|
306
|
+
setFormError(error instanceof Error ? error.message : 'Unknown error occurred')
|
|
267
307
|
}
|
|
268
308
|
}
|
|
269
309
|
|
|
@@ -280,13 +320,11 @@ export function TypeDetailPage() {
|
|
|
280
320
|
icon: type.icon || '',
|
|
281
321
|
color: type.color || '',
|
|
282
322
|
design_schema: type.design_schema || { fields: {} },
|
|
283
|
-
view_config: type.view_config || {},
|
|
284
323
|
ownership: type.ownership || 'system',
|
|
285
324
|
app_id: type.app_id || '',
|
|
286
325
|
is_active: type.is_active ?? true
|
|
287
326
|
})
|
|
288
327
|
setSchemaText(JSON.stringify(type.design_schema || { fields: {} }, null, 2))
|
|
289
|
-
setViewConfigText(JSON.stringify(type.view_config || {}, null, 2))
|
|
290
328
|
}
|
|
291
329
|
setIsEditing(false)
|
|
292
330
|
}
|
|
@@ -350,7 +388,6 @@ export function TypeDetailPage() {
|
|
|
350
388
|
<AlertTitle>Failed to load type details</AlertTitle>
|
|
351
389
|
<AlertDescription>{error || 'Type not found'}</AlertDescription>
|
|
352
390
|
<Button onClick={() => refetch()} variant="outline" className="mt-4">Retry</Button>
|
|
353
|
-
|
|
354
391
|
</Alert>
|
|
355
392
|
)
|
|
356
393
|
}
|
|
@@ -359,15 +396,20 @@ export function TypeDetailPage() {
|
|
|
359
396
|
|
|
360
397
|
|
|
361
398
|
|
|
399
|
+
/**
|
|
400
|
+
* The 'itemColumns' constant defines the structure of columns for displaying items in a table format, including their keys, titles, and rendering logic. It is used to present item data in a user-friendly manner within the admin interface.
|
|
401
|
+
*
|
|
402
|
+
* @sideEffects none
|
|
403
|
+
* @stability stable
|
|
404
|
+
* @calls formatDateTime
|
|
405
|
+
* @cil-generated
|
|
406
|
+
*/
|
|
362
407
|
const itemColumns = [
|
|
363
408
|
{
|
|
364
409
|
key: 'id' as keyof TypeItem,
|
|
365
410
|
title: 'ID',
|
|
366
411
|
render: (row: any) => (
|
|
367
412
|
<span className="font-mono text-xs">{row.id?.slice(0, 8)}...</span>
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
413
|
)
|
|
372
414
|
},
|
|
373
415
|
{
|
|
@@ -378,12 +420,26 @@ export function TypeDetailPage() {
|
|
|
378
420
|
|
|
379
421
|
|
|
380
422
|
|
|
423
|
+
/**
|
|
424
|
+
* The constant 'firstFieldKey' retrieves the first key from the 'fields' object in the 'design_schema' of a given 'type'. It exists to facilitate access to the first field's key for further processing in the module.
|
|
425
|
+
*
|
|
426
|
+
* @sideEffects none
|
|
427
|
+
* @stability stable
|
|
428
|
+
* @cil-generated
|
|
429
|
+
*/
|
|
381
430
|
const firstFieldKey = Object.keys(type?.design_schema?.fields || {})[0]
|
|
382
431
|
|
|
383
432
|
|
|
384
433
|
|
|
385
434
|
|
|
386
435
|
|
|
436
|
+
/**
|
|
437
|
+
* The constant 'displayValue' determines the value to display based on the presence of 'firstFieldKey'. It defaults to 'No data' if 'firstFieldKey' is not defined or if the corresponding data is unavailable.
|
|
438
|
+
*
|
|
439
|
+
* @sideEffects none
|
|
440
|
+
* @stability stable
|
|
441
|
+
* @cil-generated
|
|
442
|
+
*/
|
|
387
443
|
const displayValue = firstFieldKey ? row.data?.[firstFieldKey] : 'No data'
|
|
388
444
|
|
|
389
445
|
return (
|
|
@@ -435,7 +491,8 @@ export function TypeDetailPage() {
|
|
|
435
491
|
</div>
|
|
436
492
|
</div>
|
|
437
493
|
|
|
438
|
-
<div className="flex space-x-2">
|
|
494
|
+
<div className="flex space-x-2 items-center">
|
|
495
|
+
{formError && <p className="text-sm text-red-600 mr-auto">{formError}</p>}
|
|
439
496
|
{isEditing ? (
|
|
440
497
|
<>
|
|
441
498
|
<Button variant="outline" onClick={handleCancel}>Cancel</Button>
|
|
@@ -463,55 +520,6 @@ export function TypeDetailPage() {
|
|
|
463
520
|
)}
|
|
464
521
|
</div>
|
|
465
522
|
</div>
|
|
466
|
-
|
|
467
|
-
<PageInstructions
|
|
468
|
-
description="Manage type schemas, fields, and permissions for items, accounts, or people."
|
|
469
|
-
sections={[
|
|
470
|
-
{ title: 'What this type controls', content: 'A type is the design schema for a runtime record kind. It defines the fields, default list/detail views, record permissions, icon, color, and metadata that the generic admin and runtime UIs use to create, validate, and display records.' },
|
|
471
|
-
{ title: 'Fields explained', content: <ul className="list-disc pl-4 space-y-1">
|
|
472
|
-
<li><strong>Name</strong> — string. The display label for the type. Empty name blocks save.</li>
|
|
473
|
-
<li><strong>Slug</strong> — string. A unique, URL-friendly identifier scoped by kind. Used for type resolution and must be globally unique.</li>
|
|
474
|
-
<li><strong>Description</strong> — string. Optional human-readable context.</li>
|
|
475
|
-
<li><strong>Kind</strong> — select. item, account, person, thread, or message. Determines which runtime table the type governs.</li>
|
|
476
|
-
<li><strong>Ownership</strong> — select. system, app, or tenant. Controls the data scope and who can manage the type.</li>
|
|
477
|
-
<li><strong>Is Active</strong> — checkbox. Inactive types cannot have records created.</li>
|
|
478
|
-
|
|
479
|
-
]
|
|
480
|
-
<li><strong>App ID</strong> — select. Optional owning app. None means a system type. Selecting an app scopes the type to that app.</li>
|
|
481
|
-
]
|
|
482
|
-
<li><strong>Icon</strong> — string. An icon name for the UI stored in the types row.</li>
|
|
483
|
-
<li><strong>Color</strong> — select. The theme color for the type stored in the types row.</li>
|
|
484
|
-
<li><strong>Created / Updated</strong> — read-only timestamps.</li>
|
|
485
|
-
<li><strong>Design Schema (JSON)</strong> — JSON. The full design_schema with fields, views, and record_permissions. The validation_schema is regenerated from this on save.</li>
|
|
486
|
-
<li><strong>View Config (JSON)</strong> — JSON. Optional view_config object stored alongside the design schema.</li>
|
|
487
|
-
</ul> },
|
|
488
|
-
{ title: 'Options and values', content: <ul className="list-disc pl-4 space-y-1">
|
|
489
|
-
<li><strong>Kind</strong>: <em>item</em> for records, <em>account</em> for accounts, <em>person</em> for people, <em>thread</em> for threads, <em>message</em> for messages.</li>
|
|
490
|
-
<li><strong>Ownership</strong>: <em>system</em> for platform types, <em>app</em> for an app, <em>tenant</em> for account-specific.</li>
|
|
491
|
-
<li><strong>Color</strong>: blue, green, red, yellow, purple, pink, indigo, gray, slate.</li>
|
|
492
|
-
<li><strong>Design Schema</strong>: must include fields, default_list, default_detail, and record_permissions to satisfy the generic UI.</li>
|
|
493
|
-
</ul> },
|
|
494
|
-
{ title: 'Downstream impact', content: <ul className="list-disc pl-4 space-y-1">
|
|
495
|
-
<li>Generic List and Detail pages render directly from this schema. A missing view or bad field will break those pages.</li>
|
|
496
|
-
<li>Record creation and validation use the design schema. Bad permissions or data_type values can cause permission errors or failed saves.</li>
|
|
497
|
-
<li>Other apps, pipelines, and triggers resolve types by slug; duplicate or changed slugs break those lookups.</li>
|
|
498
|
-
</ul> },
|
|
499
|
-
{ title: 'How to create, save, and validate', content: <ol className="list-decimal pl-4 space-y-1">
|
|
500
|
-
<li>In create mode, choose a kind, name, slug, and ownership, then fill the Design Schema and optional View Config JSON.</li>
|
|
501
|
-
<li>Click Create or Save Changes. The form validates that the JSON is valid; the API regenerates validation_schema from design_schema.</li>
|
|
502
|
-
<li>Delete is disabled for system-owned types. Delete opens a confirmation modal for others.</li>
|
|
503
|
-
</ol> },
|
|
504
|
-
{ title: 'Common mistakes', content: <ul className="list-disc pl-4 space-y-1">
|
|
505
|
-
|
|
506
|
-
]
|
|
507
|
-
<li>Reusing a slug for the same kind, which breaks type resolution.</li>
|
|
508
|
-
]
|
|
509
|
-
<li>Missing default_list or default_detail in the design schema, causing the generic UI to fail.</li>
|
|
510
|
-
<li>Using an unknown data_type or display_type, leading to validation or rendering errors.</li>
|
|
511
|
-
</ul> },
|
|
512
|
-
]}
|
|
513
|
-
/>
|
|
514
|
-
|
|
515
523
|
{isEditing ? (
|
|
516
524
|
<>
|
|
517
525
|
<Card>
|
|
@@ -661,20 +669,17 @@ export function TypeDetailPage() {
|
|
|
661
669
|
rows={8}
|
|
662
670
|
placeholder='Enter JSON design schema with fields, views, and record_permissions'
|
|
663
671
|
/>
|
|
672
|
+
{(() => {
|
|
673
|
+
try {
|
|
674
|
+
JSON.parse(schemaText)
|
|
675
|
+
return null
|
|
676
|
+
} catch (err) {
|
|
677
|
+
return <p className="text-xs text-red-600">Invalid JSON: {(err as Error).message}</p>
|
|
678
|
+
}
|
|
679
|
+
})()}
|
|
664
680
|
<p className="text-xs text-muted-foreground">JSON schema defining the fields, list/detail views, and record permissions for this type. The validation_schema is generated from this on save.</p>
|
|
665
681
|
</div>
|
|
666
682
|
|
|
667
|
-
<div className="mt-8 space-y-2">
|
|
668
|
-
<Label>View Config</Label>
|
|
669
|
-
<Textarea
|
|
670
|
-
value={viewConfigText}
|
|
671
|
-
onChange={(e) => setViewConfigText(e.target.value)}
|
|
672
|
-
className="font-mono text-sm"
|
|
673
|
-
rows={4}
|
|
674
|
-
placeholder='Enter optional view_config JSON'
|
|
675
|
-
/>
|
|
676
|
-
<p className="text-xs text-muted-foreground">Optional JSON view configuration stored alongside the design schema.</p>
|
|
677
|
-
</div>
|
|
678
683
|
</CardContent>
|
|
679
684
|
</Card>
|
|
680
685
|
</>
|
|
@@ -760,6 +765,15 @@ export function TypeDetailPage() {
|
|
|
760
765
|
{JSON.stringify(type?.design_schema || { fields: {} }, null, 2)}
|
|
761
766
|
</pre>
|
|
762
767
|
</div>
|
|
768
|
+
|
|
769
|
+
{type?.validation_schema && (
|
|
770
|
+
<div className="mt-4 space-y-2">
|
|
771
|
+
<h3 className="text-sm font-medium text-muted-foreground">Validation Schema (auto-generated on save)</h3>
|
|
772
|
+
<pre className="text-xs bg-muted p-3 rounded border overflow-auto max-h-48">
|
|
773
|
+
{JSON.stringify(type.validation_schema, null, 2)}
|
|
774
|
+
</pre>
|
|
775
|
+
</div>
|
|
776
|
+
)}
|
|
763
777
|
</CardContent>
|
|
764
778
|
</Card>
|
|
765
779
|
|
|
@@ -843,11 +857,11 @@ export function TypeDetailPage() {
|
|
|
843
857
|
</div>
|
|
844
858
|
)
|
|
845
859
|
}
|
|
860
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/TypeDetailPage.tsx:TypeDetailPage:component"]
|
|
861
|
+
|
|
862
|
+
|
|
863
|
+
|
|
864
|
+
|
|
865
|
+
|
|
866
|
+
|
|
846
867
|
|
|
847
|
-
// CIL[DOC-VECTOR type="context" content="purpose='Render and manage the admin type detail page with create, edit, view, and delete flows'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/components/ui/button.tsx"]
|
|
848
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
849
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
850
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
851
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
852
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
853
|
-
// CIL[END stable_id="~/.framework/src/pages/admin/TypeDetailPage.tsx:TypeDetailPage:component"]
|