spine-framework 0.3.125 → 0.3.127
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.framework/cli/commands/agents.ts +35 -37
- package/.framework/cli/commands/auth.ts +35 -34
- package/.framework/cli/commands/create-app.ts +104 -40
- package/.framework/cli/commands/dev.ts +104 -69
- package/.framework/cli/commands/doctor.ts +169 -97
- package/.framework/cli/commands/generate.ts +82 -161
- package/.framework/cli/commands/init.ts +72 -34
- package/.framework/cli/commands/install-app.ts +260 -125
- package/.framework/cli/commands/items.ts +33 -44
- package/.framework/cli/commands/migrate.ts +122 -40
- package/.framework/cli/commands/migrations.ts +33 -40
- package/.framework/cli/commands/pipelines.ts +31 -39
- package/.framework/cli/commands/status.ts +47 -23
- package/.framework/cli/commands/system.ts +47 -37
- package/.framework/cli/commands/test.ts +112 -68
- package/.framework/cli/commands/validate-app.ts +215 -121
- package/.framework/cli/context.ts +112 -130
- package/.framework/cli/env-loader.ts +47 -18
- package/.framework/cli/index.ts +81 -42
- package/.framework/docs/runtime-types.md +1024 -0
- package/.framework/functions/_shared/agent-runner.ts +1296 -961
- package/.framework/functions/_shared/app-manifest.ts +82 -68
- package/.framework/functions/_shared/audit.ts +135 -83
- package/.framework/functions/_shared/{cil-state.ts → cil.ts} +147 -54
- package/.framework/functions/_shared/db.ts +80 -126
- package/.framework/functions/_shared/hash-api-key.ts +63 -0
- package/.framework/functions/_shared/index.ts +222 -347
- package/.framework/functions/_shared/kb.ts +319 -0
- package/.framework/functions/_shared/llm.ts +92 -0
- package/.framework/functions/_shared/logging.ts +288 -0
- package/.framework/functions/_shared/middleware.ts +329 -365
- package/.framework/functions/_shared/outcomes.ts +36 -0
- package/.framework/functions/_shared/permissions.ts +359 -643
- package/.framework/functions/_shared/pipeline-runner.ts +243 -316
- package/.framework/functions/_shared/principal.ts +376 -468
- package/.framework/functions/_shared/resolve-credentials.ts +102 -0
- package/.framework/functions/_shared/resolve-ids.ts +162 -14
- package/.framework/functions/_shared/retry-deliveries.ts +104 -0
- package/.framework/functions/_shared/schema-utils.ts +611 -373
- package/.framework/functions/_shared/testing.ts +207 -137
- package/.framework/functions/_shared/tracing.ts +276 -0
- package/.framework/functions/_shared/trigger-engine.ts +159 -211
- package/.framework/functions/_shared/webhook-registration.ts +95 -81
- package/.framework/functions/_shared/webhook-registry.ts +153 -75
- package/.framework/functions/account-nodes.ts +31 -53
- package/.framework/functions/adapters/generic-webhook-inbound.ts +56 -0
- package/.framework/functions/adapters/generic-webhook-outbound.ts +43 -0
- package/.framework/functions/adapters/openai-outbound.ts +40 -0
- package/.framework/functions/admin-data.ts +687 -533
- package/.framework/functions/admin-funnel.ts +31 -20
- package/.framework/functions/admin-install-funnel.ts +47 -28
- package/.framework/functions/admin-signals.ts +47 -29
- package/.framework/functions/ai-agents.ts +122 -147
- package/.framework/functions/ai-interactions.ts +180 -90
- package/.framework/functions/api-keys.ts +250 -192
- package/.framework/functions/apps.ts +203 -197
- package/.framework/functions/auth.ts +98 -91
- package/.framework/functions/cil-agent-ingest.ts +773 -0
- package/.framework/functions/cil-agent.ts +592 -0
- package/.framework/functions/cil-callmap.ts +1227 -0
- package/.framework/functions/cil-config.ts +583 -0
- package/.framework/functions/cil-context.ts +445 -0
- package/.framework/functions/cil-doc.ts +1752 -0
- package/.framework/functions/cil-embeddings.ts +1202 -0
- package/.framework/functions/cil-graph.ts +585 -0
- package/.framework/functions/cil-ingest.ts +2416 -0
- package/.framework/functions/cil-pipeline.ts +318 -0
- package/.framework/functions/cil-project.ts +499 -0
- package/.framework/functions/cil-validate.ts +469 -0
- package/.framework/functions/debug-auth.ts +73 -53
- package/.framework/functions/deliveries.ts +117 -0
- package/.framework/functions/embeddings.ts +528 -516
- package/.framework/functions/eval-harness.ts +158 -106
- package/.framework/functions/integration-outbound.ts +311 -0
- package/.framework/functions/integration-routes.ts +240 -466
- package/.framework/functions/integrations.ts +132 -140
- package/.framework/functions/invites.ts +401 -201
- package/.framework/functions/item-progress.ts +113 -53
- package/.framework/functions/kb.ts +28 -0
- package/.framework/functions/logs.ts +239 -222
- package/.framework/functions/observability.ts +308 -259
- package/.framework/functions/pipeline-executions.ts +179 -235
- package/.framework/functions/pipelines.ts +163 -205
- package/.framework/functions/prompt-configs.ts +109 -156
- package/.framework/functions/roles.ts +97 -147
- package/.framework/functions/system-cron.ts +132 -218
- package/.framework/functions/system.ts +112 -52
- package/.framework/functions/tests.ts +32 -28
- package/.framework/functions/timers.ts +162 -210
- package/.framework/functions/triggers.ts +282 -346
- package/.framework/functions/types.ts +283 -400
- package/.framework/migrations/001_core_schema.sql +630 -0
- package/.framework/migrations/002_core_rls_and_functions.sql +532 -0
- package/.framework/migrations/{003_system_data.sql → 003_core_system_data.sql} +26 -153
- package/.framework/migrations/004_core_rpc_and_broker.sql +421 -0
- package/.framework/migrations/005_core_observability.sql +598 -0
- package/.framework/migrations/006_security_hardening_rls.sql +97 -0
- package/.framework/migrations/007_kb_article_list.sql +237 -0
- package/.framework/migrations/008_items_target.sql +8 -0
- package/.framework/migrations/009_roles_slug_unique.sql +11 -0
- package/.framework/public/spine.config.json +91 -0
- package/.framework/scripts/app-install-cli.ts +112 -98
- package/.framework/src/App.tsx +67 -20
- package/.framework/src/apps/admin/index.tsx +97 -27
- package/.framework/src/components/AppWrapper.tsx +50 -11
- package/.framework/src/components/CustomAppLoader.tsx +131 -22
- package/.framework/src/components/admin/AdminListPage.tsx +75 -8
- package/.framework/src/components/admin/AdminSidebar.tsx +148 -36
- package/.framework/src/components/admin/AdminStatsCard.tsx +48 -29
- package/.framework/src/components/admin/PageInstructions.tsx +49 -0
- package/.framework/src/components/admin/SortableTableHeader.tsx +49 -2
- package/.framework/src/components/app-shell/GenericAppShell.tsx +69 -11
- package/.framework/src/components/app-shell/GenericDetailPage.tsx +55 -10
- package/.framework/src/components/app-shell/GenericListPage.tsx +76 -9
- package/.framework/src/components/app-sidebar.tsx +50 -3
- package/.framework/src/components/auth/ProtectedRoute.tsx +53 -45
- package/.framework/src/components/kb/KBArticleEditor.tsx +409 -0
- package/.framework/src/components/kb/KBArticleList.tsx +557 -0
- package/.framework/src/components/layout/AppShell.tsx +54 -16
- package/.framework/src/components/layout/Header.tsx +50 -38
- package/.framework/src/components/layout/Layout.tsx +48 -32
- package/.framework/src/components/layout/Sidebar.tsx +167 -16
- package/.framework/src/components/runtime/DataDetailHeader.tsx +33 -1
- package/.framework/src/components/runtime/DataDetailPage.tsx +289 -4
- package/.framework/src/components/runtime/DataFilters.tsx +78 -1
- package/.framework/src/components/runtime/DataHeader.tsx +32 -29
- package/.framework/src/components/runtime/DataListPage.tsx +161 -2
- package/.framework/src/components/runtime/DataStats.tsx +48 -1
- package/.framework/src/components/runtime/DataTable.tsx +153 -1
- package/.framework/src/components/runtime/SchemaDetailForm.tsx +77 -46
- package/.framework/src/components/runtime/index.ts +16 -9
- package/.framework/src/components/search-form.tsx +33 -1
- package/.framework/src/components/shared/AgentView.tsx +48 -51
- package/.framework/src/components/shared/FieldRenderer.tsx +84 -67
- package/.framework/src/components/shared/InviteManager.tsx +113 -52
- package/.framework/src/components/shared/MemberList.tsx +182 -0
- package/.framework/src/components/shared/SchemaFields.tsx +96 -78
- package/.framework/src/components/ui/DataTable.tsx +86 -56
- package/.framework/src/components/ui/Form.tsx +188 -109
- package/.framework/src/components/ui/ItemCard.tsx +86 -58
- package/.framework/src/components/ui/ItemListView.tsx +88 -61
- package/.framework/src/components/ui/LoadingSpinner.tsx +52 -27
- package/.framework/src/components/ui/Modal.tsx +81 -4
- package/.framework/src/components/ui/RichTextEditor.tsx +101 -9
- package/.framework/src/components/ui/accordion.tsx +97 -5
- package/.framework/src/components/ui/alert-dialog.tsx +225 -13
- package/.framework/src/components/ui/alert.tsx +113 -6
- package/.framework/src/components/ui/aspect-ratio.tsx +49 -2
- package/.framework/src/components/ui/avatar.tsx +129 -7
- package/.framework/src/components/ui/badge.tsx +65 -3
- package/.framework/src/components/ui/breadcrumb.tsx +145 -8
- package/.framework/src/components/ui/button-group.tsx +81 -4
- package/.framework/src/components/ui/button.tsx +49 -2
- package/.framework/src/components/ui/calendar.tsx +65 -3
- package/.framework/src/components/ui/card.tsx +145 -8
- package/.framework/src/components/ui/carousel.tsx +129 -7
- package/.framework/src/components/ui/chart.tsx +161 -10
- package/.framework/src/components/ui/checkbox.tsx +49 -2
- package/.framework/src/components/ui/collapsible.tsx +81 -5
- package/.framework/src/components/ui/combobox.tsx +305 -20
- package/.framework/src/components/ui/command.tsx +177 -11
- package/.framework/src/components/ui/context-menu.tsx +273 -17
- package/.framework/src/components/ui/dialog.tsx +209 -27
- package/.framework/src/components/ui/direction.tsx +64 -4
- package/.framework/src/components/ui/drawer.tsx +193 -12
- package/.framework/src/components/ui/dropdown-menu.tsx +273 -18
- package/.framework/src/components/ui/empty.tsx +145 -9
- package/.framework/src/components/ui/field.tsx +209 -14
- package/.framework/src/components/ui/hover-card.tsx +81 -4
- package/.framework/src/components/ui/input-group.tsx +162 -10
- package/.framework/src/components/ui/input-otp.tsx +98 -5
- package/.framework/src/components/ui/input.tsx +49 -2
- package/.framework/src/components/ui/item.tsx +225 -13
- package/.framework/src/components/ui/kbd.tsx +65 -3
- package/.framework/src/components/ui/label.tsx +49 -2
- package/.framework/src/components/ui/menubar.tsx +289 -17
- package/.framework/src/components/ui/native-select.tsx +97 -5
- package/.framework/src/components/ui/navigation-menu.tsx +177 -10
- package/.framework/src/components/ui/pagination.tsx +161 -9
- package/.framework/src/components/ui/popover.tsx +145 -8
- package/.framework/src/components/ui/progress.tsx +49 -2
- package/.framework/src/components/ui/radio-group.tsx +65 -3
- package/.framework/src/components/ui/resizable.tsx +82 -4
- package/.framework/src/components/ui/scroll-area.tsx +65 -3
- package/.framework/src/components/ui/select.tsx +193 -11
- package/.framework/src/components/ui/separator.tsx +49 -2
- package/.framework/src/components/ui/sheet.tsx +193 -11
- package/.framework/src/components/ui/sidebar.tsx +481 -38
- package/.framework/src/components/ui/skeleton.tsx +49 -2
- package/.framework/src/components/ui/slider.tsx +49 -2
- package/.framework/src/components/ui/sonner.tsx +49 -2
- package/.framework/src/components/ui/spinner.tsx +49 -2
- package/.framework/src/components/ui/switch.tsx +49 -2
- package/.framework/src/components/ui/table-primitives.tsx +160 -33
- package/.framework/src/components/ui/table.tsx +161 -9
- package/.framework/src/components/ui/tabs.tsx +113 -6
- package/.framework/src/components/ui/textarea.tsx +49 -2
- package/.framework/src/components/ui/toggle-group.tsx +81 -4
- package/.framework/src/components/ui/toggle.tsx +65 -3
- package/.framework/src/components/ui/tooltip.tsx +97 -5
- package/.framework/src/contexts/AppContext.tsx +129 -45
- package/.framework/src/contexts/AuthContext.tsx +173 -145
- package/.framework/src/hooks/use-mobile.ts +48 -2
- package/.framework/src/hooks/useApi.ts +208 -159
- package/.framework/src/hooks/useAppPath.ts +32 -23
- package/.framework/src/hooks/useApps.ts +51 -20
- package/.framework/src/hooks/useEntityList.ts +32 -78
- package/.framework/src/hooks/useEntityRecord.ts +35 -96
- package/.framework/src/hooks/useForm.ts +32 -92
- package/.framework/src/hooks/useListSchema.ts +49 -78
- package/.framework/src/hooks/useSchemaRecord.ts +114 -105
- package/.framework/src/lib/api.ts +192 -115
- package/.framework/src/lib/supabase.ts +98 -64
- package/.framework/src/lib/utils.ts +287 -151
- package/.framework/src/main.tsx +49 -3
- package/.framework/src/pages/DashboardPage.tsx +52 -29
- package/.framework/src/pages/NotFoundPage.tsx +32 -10
- package/.framework/src/pages/SetupPage.tsx +32 -12
- package/.framework/src/pages/admin/AIAgentDetailPage.tsx +119 -10
- package/.framework/src/pages/admin/AIAgentsPage.tsx +48 -19
- package/.framework/src/pages/admin/APIKeyDetailPage.tsx +187 -17
- package/.framework/src/pages/admin/APIKeysPage.tsx +98 -22
- package/.framework/src/pages/admin/AlertsConfigPage.tsx +113 -26
- package/.framework/src/pages/admin/AppDetailPage.tsx +125 -8
- package/.framework/src/pages/admin/AppsPage.tsx +49 -2
- package/.framework/src/pages/admin/DeliveriesPage.tsx +196 -0
- package/.framework/src/pages/admin/DesignedPage.tsx +32 -18
- package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +215 -484
- package/.framework/src/pages/admin/EmbeddingsPage.tsx +116 -319
- package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -16
- package/.framework/src/pages/admin/IntegrationDetailPage.tsx +183 -26
- package/.framework/src/pages/admin/IntegrationsPage.tsx +48 -19
- package/.framework/src/pages/admin/InvitesPage.tsx +48 -14
- package/.framework/src/pages/admin/LogsPage.tsx +422 -75
- package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/ObservabilityDashboard.tsx +113 -24
- package/.framework/src/pages/admin/PipelineDetailPage.tsx +206 -34
- package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +50 -17
- package/.framework/src/pages/admin/PipelinesPage.tsx +160 -21
- package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +378 -88
- package/.framework/src/pages/admin/PromptConfigsPage.tsx +125 -16
- package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +49 -10
- package/.framework/src/pages/admin/RoleDetailPage.tsx +130 -10
- package/.framework/src/pages/admin/RolesPage.tsx +171 -18
- package/.framework/src/pages/admin/SelectTestPage.tsx +34 -9
- package/.framework/src/pages/admin/ShadcnTestPage.tsx +49 -11
- package/.framework/src/pages/admin/SimpleDashboard.tsx +49 -10
- package/.framework/src/pages/admin/TestRunDetailPage.tsx +49 -4
- package/.framework/src/pages/admin/TestingDashboard.tsx +98 -28
- package/.framework/src/pages/admin/TimerDetailPage.tsx +143 -33
- package/.framework/src/pages/admin/TimersPage.tsx +48 -20
- package/.framework/src/pages/admin/TriggerDetailPage.tsx +118 -30
- package/.framework/src/pages/admin/TriggersPage.tsx +64 -19
- package/.framework/src/pages/admin/TypeDetailPage.tsx +138 -15
- package/.framework/src/pages/admin/TypesPage.tsx +48 -20
- package/.framework/src/pages/admin/cil/CILAgentPage.tsx +465 -0
- package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +787 -0
- package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +699 -0
- package/.framework/src/pages/admin/cil/CILFileListPage.tsx +647 -0
- package/.framework/src/pages/admin/cil/CILGraphPage.tsx +616 -0
- package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +1402 -0
- package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +614 -0
- package/.framework/src/pages/admin/cil/CILSearchPage.tsx +571 -0
- package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +731 -0
- package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
- package/.framework/src/pages/auth/AuthConfirmPage.tsx +52 -51
- package/.framework/src/pages/auth/ForgotPasswordPage.tsx +31 -22
- package/.framework/src/pages/auth/LoginPage.tsx +50 -23
- package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -15
- package/.framework/src/pages/auth/RegisterPage.tsx +281 -317
- package/.framework/src/pages/spine-framework/APIPage.tsx +33 -0
- package/.framework/src/pages/spine-framework/CLIPage.tsx +33 -0
- package/.framework/src/types/auth.ts +128 -71
- package/.framework/src/types/types.ts +373 -157
- package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +39 -0
- package/custom/.devin/skills/spine-workbench-idea/SKILL.md +36 -0
- package/custom/.devin/skills/spine-workbench-implement/SKILL.md +46 -0
- package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +28 -0
- package/custom/.devin/skills/spine-workbench-plan/SKILL.md +38 -0
- package/docs/README.md +9 -130
- package/netlify.toml +3 -3
- package/package.json +13 -25
- package/scripts/kb-ingest-docs.ts +203 -0
- package/spine.config.json +65 -4
- package/.framework/migrations/001_schema.sql +0 -425
- package/.framework/migrations/002_rls_and_functions.sql +0 -763
- package/.framework/migrations/004_enhancements.sql +0 -43
- package/.framework/migrations/005_auth_user_trigger.sql +0 -105
- package/.framework/migrations/006_fix_current_actor_id.sql +0 -21
- package/.framework/migrations/016_invites.sql +0 -27
- package/.framework/migrations/017_fix_get_account_apps.sql +0 -78
- package/.framework/migrations/018_apps_required_roles.sql +0 -17
- package/.framework/migrations/019_triggers_unique_constraint.sql +0 -13
- package/.framework/migrations/020_get_account_apps_role_filter.sql +0 -117
- package/.framework/migrations/021_app_domains.sql +0 -112
- package/.framework/migrations/022_route_prefix_domain_unique.sql +0 -21
- package/.framework/migrations/023_match_embeddings_rpc.sql +0 -78
- package/.framework/migrations/024_messages_account_id.sql +0 -9
- package/.framework/migrations/025_retype_threads_messages.sql +0 -240
- package/.framework/migrations/026_fix_rls_policies.sql +0 -47
- package/.framework/migrations/027_embedding_lifecycle.sql +0 -176
- package/.framework/migrations/028_fix_message_data_permissions.sql +0 -49
- package/.framework/migrations/029_tighten_support_triage_prompt.sql +0 -41
- package/.framework/migrations/030_messages_updated_by.sql +0 -6
- package/.framework/migrations/031_seed_upsert_constraints.sql +0 -35
- package/docs/APPS.md +0 -232
- package/docs/ARCHITECTURE.md +0 -246
- package/docs/INSTALL.md +0 -155
- package/docs/design-schema-spec.md +0 -1837
- package/docs/dev-guides/01-create-an-app.md +0 -183
- package/docs/dev-guides/02-create-a-function.md +0 -178
- package/docs/dev-guides/03-create-a-component.md +0 -178
- package/docs/dev-guides/04-webhook-handlers.md +0 -129
- package/docs/dev-guides/05-testing.md +0 -168
- package/docs/dev-guides/README.md +0 -40
- package/docs/npm-packages-plan.md +0 -288
- package/docs/spine-core--api-reference.md +0 -822
|
@@ -1,18 +1,23 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module src/pages/admin/PromptConfigsPage
|
|
3
|
-
* @audience installer
|
|
4
|
-
* @layer frontend-page
|
|
5
|
-
* @stability stable
|
|
6
|
-
*
|
|
7
|
-
* Admin list page for LLM prompt configurations. Fetches all configs via
|
|
8
|
-
* `/api/prompt-configs?action=list`, applies client-side search, category
|
|
9
|
-
* filter, and sort. Highlights the default config with a star badge.
|
|
10
|
-
* Renders inside `AdminListPage`. Row clicks navigate to
|
|
11
|
-
* `/spine-framework/admin/configs/prompt-configs/:id`.
|
|
12
|
-
*
|
|
13
|
-
* @seeAlso src/pages/admin/PromptConfigDetailPage.tsx
|
|
14
|
-
*/
|
|
15
1
|
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
// CIL[BEGIN chunk_id="promptconfigspage_module_header_1783666257" type="module_header" identity="imports" parent="none"]
|
|
7
|
+
// CIL[DOC-MACRO purpose="Import React dependencies and UI components"]
|
|
8
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Import all required modules for PromptConfigsPage component"]
|
|
9
|
+
// CIL[DOC-CONTEXT module="PromptConfigsPage" layer="ui" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
10
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="React hooks, UI components, utilities" errors="Import errors" side_effects="Module loading"]
|
|
11
|
+
// CIL[DOC-MICRO logic_summary="Imports React, icons, UI components, and utility functions" notable_decisions="[]"]
|
|
12
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
13
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
14
|
+
// CIL[DOC-AUDIENCE audience="developer"]
|
|
15
|
+
// CIL[DOC-VECTOR type="context" content="Layer: ui. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
|
|
16
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
17
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
18
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
19
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
20
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
16
21
|
import React, { useState } from 'react'
|
|
17
22
|
import { Plus, FileText, CheckCircle, Star, Cpu, MessageSquare } from 'lucide-react';
|
|
18
23
|
import { LoadingSpinner } from '../../components/ui/LoadingSpinner'
|
|
@@ -22,7 +27,21 @@ import { SortableTableHeader } from '../../components/admin/SortableTableHeader'
|
|
|
22
27
|
import { formatDateTime } from '../../lib/utils'
|
|
23
28
|
import { useApi } from '../../hooks/useApi'
|
|
24
29
|
import { apiFetch } from '../../lib/api'
|
|
25
|
-
|
|
30
|
+
// CIL[END chunk_id="promptconfigspage_module_header_1783666257"]
|
|
31
|
+
// CIL[BEGIN chunk_id="promptconfigspage_interface_promptconfig_1783666257" type="interface" identity="PromptConfig" parent="none"]
|
|
32
|
+
// CIL[DOC-MACRO purpose="Define prompt configuration data structure"]
|
|
33
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Type definition for prompt configuration entities"]
|
|
34
|
+
// CIL[DOC-CONTEXT module="PromptConfigsPage" layer="types" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\".framework/functions/_shared/schema-utils.ts\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
|
|
35
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="PromptConfig interface" errors="Type errors" side_effects="Type system"]
|
|
36
|
+
// CIL[DOC-MICRO logic_summary="Defines structure for AI prompt configurations with model settings" notable_decisions="[]"]
|
|
37
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
38
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
39
|
+
// CIL[DOC-VECTOR type="context" content="Layer: types. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, .framework/functions/_shared/schema-utils.ts, .framework/functions/_shared/principal.ts, \."]
|
|
40
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
41
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
42
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
43
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
44
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
26
45
|
interface PromptConfig {
|
|
27
46
|
id: string
|
|
28
47
|
name: string
|
|
@@ -42,7 +61,21 @@ interface PromptConfig {
|
|
|
42
61
|
created_at: string
|
|
43
62
|
updated_at: string
|
|
44
63
|
}
|
|
45
|
-
|
|
64
|
+
// CIL[END chunk_id="promptconfigspage_interface_promptconfig_1783666257"]
|
|
65
|
+
// CIL[BEGIN chunk_id="promptconfigspage_function_promptconfigspage_1783666257" type="function" identity="PromptConfigsPage" parent="none"]
|
|
66
|
+
// CIL[DOC-MACRO purpose="Render the complete prompt configs interface"]
|
|
67
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Main render logic for prompt configs page"]
|
|
68
|
+
// CIL[DOC-CONTEXT module="PromptConfigsPage" layer="ui" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\"]"]
|
|
69
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="JSX structure" errors="Render errors" side_effects="DOM updates"]
|
|
70
|
+
// CIL[DOC-MICRO logic_summary="Renders AdminListPage with stats, filters, and prompt config table" notable_decisions="[]"]
|
|
71
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
72
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
73
|
+
// CIL[DOC-VECTOR type="context" content="Layer: ui. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx."]
|
|
74
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
75
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
76
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
77
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
78
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
46
79
|
export function PromptConfigsPage() {
|
|
47
80
|
const [searchTerm, setSearchTerm] = useState('')
|
|
48
81
|
const [selectedStatus, setSelectedStatus] = useState('all')
|
|
@@ -50,6 +83,20 @@ export function PromptConfigsPage() {
|
|
|
50
83
|
const [sortKey, setSortKey] = useState('name')
|
|
51
84
|
const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>('asc')
|
|
52
85
|
|
|
86
|
+
// CIL[BEGIN chunk_id="promptconfigspage_hooks_1783666257" type="hooks" identity="useApi" parent="promptconfigspage_function_promptconfigspage_1783666257"]
|
|
87
|
+
// CIL[DOC-MACRO purpose="Fetch prompt configurations from API"]
|
|
88
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle useApi"]
|
|
89
|
+
// CIL[DOC-CONTEXT module="PromptConfigsPage" layer="data" related_files="[\"\\\"]"]
|
|
90
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="prompt configs array" errors="API errors" side_effects="HTTP requests"]
|
|
91
|
+
// CIL[DOC-MICRO logic_summary="Uses useApi hook to fetch prompt configurations list" notable_decisions="[]"]
|
|
92
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
93
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
94
|
+
// CIL[DOC-VECTOR type="context" content="Layer: data. Direct callers: 0. Direct calls: 0. Related files: \."]
|
|
95
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
96
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
97
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
98
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
99
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
53
100
|
const { data: promptConfigs, loading, error, refetch } = useApi<PromptConfig[]>(
|
|
54
101
|
async () => {
|
|
55
102
|
const response = await apiFetch('/api/prompt-configs?action=list')
|
|
@@ -59,7 +106,22 @@ export function PromptConfigsPage() {
|
|
|
59
106
|
},
|
|
60
107
|
{ immediate: true }
|
|
61
108
|
)
|
|
109
|
+
// CIL[END chunk_id="promptconfigspage_hooks_1783666257"]
|
|
62
110
|
|
|
111
|
+
// CIL[BEGIN chunk_id="promptconfigspage_filters_1783666257" type="filter_logic" identity="filteredPromptConfigs" parent="promptconfigspage_function_promptconfigspage_1783666257"]
|
|
112
|
+
// CIL[DOC-MACRO purpose="Filter and sort prompt configurations"]
|
|
113
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle filteredPromptConfigs"]
|
|
114
|
+
// CIL[DOC-CONTEXT module="PromptConfigsPage" layer="logic" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
|
|
115
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="filtered configs" errors="none" side_effects="none"]
|
|
116
|
+
// CIL[DOC-MICRO logic_summary="Filters configs by search, status, and type; extracts unique types" notable_decisions="[]"]
|
|
117
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
118
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
119
|
+
// CIL[DOC-VECTOR type="context" content="Layer: logic. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, \."]
|
|
120
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
121
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
122
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
123
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
124
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
63
125
|
const filteredPromptConfigs = (promptConfigs || []).filter(config => {
|
|
64
126
|
const matchesSearch = config.name.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
|
65
127
|
config.slug.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
|
@@ -72,7 +134,22 @@ export function PromptConfigsPage() {
|
|
|
72
134
|
})
|
|
73
135
|
|
|
74
136
|
const promptTypes = Array.from(new Set((promptConfigs || []).map(c => c.prompt_type).filter(Boolean)))
|
|
137
|
+
// CIL[END chunk_id="promptconfigspage_filters_1783666257"]
|
|
75
138
|
|
|
139
|
+
// CIL[BEGIN chunk_id="promptconfigspage_handlers_1783666257" type="event_handlers" identity="handleSort" parent="promptconfigspage_function_promptconfigspage_1783666257"]
|
|
140
|
+
// CIL[DOC-MACRO purpose="Handle sorting and row click events"]
|
|
141
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle handleSort"]
|
|
142
|
+
// CIL[DOC-CONTEXT module="handleSort" layer="unknown" related_files="[]"]
|
|
143
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
144
|
+
// CIL[DOC-MICRO logic_summary="Implements handleSort" notable_decisions="[]"]
|
|
145
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
146
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
147
|
+
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
148
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
149
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
150
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
151
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
152
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
76
153
|
const handleSort = (key: string) => {
|
|
77
154
|
if (sortKey === key) {
|
|
78
155
|
setSortDirection(sortDirection === 'asc' ? 'desc' : 'asc')
|
|
@@ -102,7 +179,22 @@ export function PromptConfigsPage() {
|
|
|
102
179
|
|
|
103
180
|
return 0
|
|
104
181
|
})
|
|
182
|
+
// CIL[END chunk_id="promptconfigspage_handlers_1783666257"]
|
|
105
183
|
|
|
184
|
+
// CIL[BEGIN chunk_id="promptconfigspage_stats_1783666257" type="stats_config" identity="statsCards" parent="promptconfigspage_function_promptconfigspage_1783666257"]
|
|
185
|
+
// CIL[DOC-MACRO purpose="Configure statistics cards and filter options"]
|
|
186
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle statsCards"]
|
|
187
|
+
// CIL[DOC-CONTEXT module="statsCards" layer="unknown" related_files="[]"]
|
|
188
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
189
|
+
// CIL[DOC-MICRO logic_summary="Implements statsCards" notable_decisions="[]"]
|
|
190
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
191
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
192
|
+
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
193
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
194
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
195
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
196
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
197
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
106
198
|
const statsCards = [
|
|
107
199
|
{
|
|
108
200
|
title: 'Total Prompts',
|
|
@@ -155,7 +247,22 @@ export function PromptConfigsPage() {
|
|
|
155
247
|
onChange: (v: string) => setSelectedType(v)
|
|
156
248
|
}
|
|
157
249
|
]
|
|
250
|
+
// CIL[END chunk_id="promptconfigspage_stats_1783666257"]
|
|
158
251
|
|
|
252
|
+
// CIL[BEGIN chunk_id="promptconfigspage_render_1783666257" type="render_logic" identity="return" parent="promptconfigspage_function_promptconfigspage_1783666257"]
|
|
253
|
+
// CIL[DOC-MACRO purpose="Render the complete prompt configs interface"]
|
|
254
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle return"]
|
|
255
|
+
// CIL[DOC-CONTEXT module="return" layer="unknown" related_files="[]"]
|
|
256
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
257
|
+
// CIL[DOC-MICRO logic_summary="Implements return" notable_decisions="[]"]
|
|
258
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
259
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
260
|
+
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
261
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
262
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
263
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
264
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
265
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
159
266
|
return (
|
|
160
267
|
<AdminListPage
|
|
161
268
|
title="Prompt Configs"
|
|
@@ -290,3 +397,5 @@ export function PromptConfigsPage() {
|
|
|
290
397
|
</AdminListPage>
|
|
291
398
|
)
|
|
292
399
|
}
|
|
400
|
+
// CIL[END chunk_id="promptconfigspage_render_1783666257"]
|
|
401
|
+
// CIL[END chunk_id="promptconfigspage_function_promptconfigspage_1783666257"]
|
|
@@ -1,13 +1,22 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module src/pages/admin/ProperlyDesignedPage
|
|
3
|
-
* @audience installer
|
|
4
|
-
* @layer frontend-page
|
|
5
|
-
* @stability testing
|
|
6
|
-
*
|
|
7
|
-
* A properly designed page that works within the Spine admin layout.
|
|
8
|
-
* Demonstrates shadcn components in a real application context.
|
|
9
|
-
*/
|
|
10
1
|
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
// CIL[BEGIN chunk_id="properlydesignedpage_module_header_1783666257" type="module_header" identity="imports" parent="none"]
|
|
6
|
+
// CIL[DOC-MACRO purpose="Import React dependencies and UI components"]
|
|
7
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Import all required modules for ProperlyDesignedPage component"]
|
|
8
|
+
// CIL[DOC-CONTEXT module="ProperlyDesignedPage" layer="ui" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
|
|
9
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="React hooks, UI components, utilities" errors="Import errors" side_effects="Module loading"]
|
|
10
|
+
// CIL[DOC-MICRO logic_summary="Imports React, comprehensive UI components, icons, and utility functions" notable_decisions="[]"]
|
|
11
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
12
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
13
|
+
// CIL[DOC-AUDIENCE audience="developer"]
|
|
14
|
+
// CIL[DOC-VECTOR type="context" content="Layer: ui. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, .framework/src/components/ui/table-primitives.tsx, \."]
|
|
15
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
16
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
17
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
18
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
19
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
11
20
|
import { useState } from 'react'
|
|
12
21
|
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../../components/ui/card'
|
|
13
22
|
import { Button } from '../../components/ui/button'
|
|
@@ -77,13 +86,41 @@ import {
|
|
|
77
86
|
TrendingUp,
|
|
78
87
|
Activity
|
|
79
88
|
} from 'lucide-react'
|
|
80
|
-
|
|
89
|
+
// CIL[END chunk_id="properlydesignedpage_module_header_1783666257"]
|
|
90
|
+
// CIL[BEGIN chunk_id="properlydesignedpage_function_properlydesignedpage_1783666257" type="function" identity="ProperlyDesignedPage" parent="none"]
|
|
91
|
+
// CIL[DOC-MACRO purpose="Render the complete dashboard interface"]
|
|
92
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Main render logic for comprehensive dashboard page"]
|
|
93
|
+
// CIL[DOC-CONTEXT module="ProperlyDesignedPage" layer="ui" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
|
|
94
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="JSX structure" errors="Render errors" side_effects="DOM updates"]
|
|
95
|
+
// CIL[DOC-MICRO logic_summary="Renders header, stats cards, search bar, tabs with multiple content sections" notable_decisions="[]"]
|
|
96
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
97
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
98
|
+
// CIL[DOC-VECTOR type="context" content="Layer: ui. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, .framework/functions/_shared/principal.ts, .framework/src/components/ui/table-primitives.tsx, \."]
|
|
99
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
100
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
101
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
102
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
103
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
81
104
|
export function ProperlyDesignedPage() {
|
|
82
105
|
const [selectedTab, setSelectedTab] = useState('overview')
|
|
83
106
|
const [searchQuery, setSearchQuery] = useState('')
|
|
84
107
|
const [notifications, setNotifications] = useState(true)
|
|
85
108
|
const [autoSave, setAutoSave] = useState(true)
|
|
86
109
|
|
|
110
|
+
// CIL[BEGIN chunk_id="properlydesignedpage_render_1783666257" type="render_logic" identity="return" parent="properlydesignedpage_function_properlydesignedpage_1783666257"]
|
|
111
|
+
// CIL[DOC-MACRO purpose="Render the complete dashboard interface"]
|
|
112
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle return"]
|
|
113
|
+
// CIL[DOC-CONTEXT module="ProperlyDesignedPage" layer="ui" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
|
|
114
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="JSX structure" errors="Render errors" side_effects="DOM updates"]
|
|
115
|
+
// CIL[DOC-MICRO logic_summary="Renders header, stats cards, search bar, tabs with multiple content sections" notable_decisions="[]"]
|
|
116
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
117
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
118
|
+
// CIL[DOC-VECTOR type="context" content="Layer: ui. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, .framework/functions/_shared/principal.ts, .framework/src/components/ui/table-primitives.tsx, \."]
|
|
119
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
120
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
121
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
122
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
123
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
87
124
|
return (
|
|
88
125
|
<div className="container mx-auto p-6 space-y-6">
|
|
89
126
|
{/* Header Section */}
|
|
@@ -432,3 +469,5 @@ export function ProperlyDesignedPage() {
|
|
|
432
469
|
</div>
|
|
433
470
|
)
|
|
434
471
|
}
|
|
472
|
+
// CIL[END chunk_id="properlydesignedpage_render_1783666257"]
|
|
473
|
+
// CIL[END chunk_id="properlydesignedpage_function_properlydesignedpage_1783666257"]
|
|
@@ -1,12 +1,23 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module src/pages/admin/RoleDetailPage
|
|
3
|
-
* @audience installer
|
|
4
|
-
* @layer frontend-page
|
|
5
|
-
* @stability stable
|
|
6
|
-
*
|
|
7
|
-
* Create / view / edit page for a single role.
|
|
8
|
-
*/
|
|
9
1
|
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
// CIL[BEGIN chunk_id="roledetailpage_module_header_1783666257" type="module_header" identity="imports" parent="none"]
|
|
7
|
+
// CIL[DOC-MACRO purpose="Import React dependencies and UI components"]
|
|
8
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Import all required modules for RoleDetailPage component"]
|
|
9
|
+
// CIL[DOC-CONTEXT module="RoleDetailPage" layer="ui" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
10
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="React hooks, UI components, utilities" errors="Import errors" side_effects="Module loading"]
|
|
11
|
+
// CIL[DOC-MICRO logic_summary="Imports React, router, UI components, icons, and utility functions" notable_decisions="[]"]
|
|
12
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
13
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
14
|
+
// CIL[DOC-AUDIENCE audience="developer"]
|
|
15
|
+
// CIL[DOC-VECTOR type="context" content="Layer: ui. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
|
|
16
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
17
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
18
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
19
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
20
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
10
21
|
import { useState, useEffect } from 'react'
|
|
11
22
|
import { useParams, useNavigate } from 'react-router-dom'
|
|
12
23
|
import { Button } from '../../components/ui/button'
|
|
@@ -21,7 +32,22 @@ import { ArrowLeft, ShieldCheck, AlertCircle } from 'lucide-react'
|
|
|
21
32
|
import { useApi } from '../../hooks/useApi'
|
|
22
33
|
import { apiFetch } from '../../lib/api'
|
|
23
34
|
import { formatDateTime } from '../../lib/utils'
|
|
24
|
-
|
|
35
|
+
import { PageInstructions } from '../../components/admin/PageInstructions'
|
|
36
|
+
// CIL[END chunk_id="roledetailpage_module_header_1783666257"]
|
|
37
|
+
// CIL[BEGIN chunk_id="roledetailpage_interface_role_1783666257" type="interface" identity="Role" parent="none"]
|
|
38
|
+
// CIL[DOC-MACRO purpose="Define role data structure"]
|
|
39
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Type definition for role entities"]
|
|
40
|
+
// CIL[DOC-CONTEXT module="RoleDetailPage" layer="types" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
41
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="Role interface" errors="Type errors" side_effects="Type system"]
|
|
42
|
+
// CIL[DOC-MICRO logic_summary="Defines structure for role configuration with permissions and metadata" notable_decisions="[]"]
|
|
43
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
44
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
45
|
+
// CIL[DOC-VECTOR type="context" content="Layer: types. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
|
|
46
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
47
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
48
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
49
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
50
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
25
51
|
interface Role {
|
|
26
52
|
id: string
|
|
27
53
|
name: string
|
|
@@ -34,7 +60,21 @@ interface Role {
|
|
|
34
60
|
created_at: string
|
|
35
61
|
updated_at: string
|
|
36
62
|
}
|
|
37
|
-
|
|
63
|
+
// CIL[END chunk_id="roledetailpage_interface_role_1783666257"]
|
|
64
|
+
// CIL[BEGIN chunk_id="roledetailpage_function_roledetailpage_1783666257" type="function" identity="RoleDetailPage" parent="none"]
|
|
65
|
+
// CIL[DOC-MACRO purpose="Render the complete role management interface"]
|
|
66
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Main render logic for role detail page"]
|
|
67
|
+
// CIL[DOC-CONTEXT module="RoleDetailPage" layer="ui" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\"]"]
|
|
68
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="JSX structure" errors="Render errors" side_effects="DOM updates"]
|
|
69
|
+
// CIL[DOC-MICRO logic_summary="Renders loading states, error states, and role form with all fields" notable_decisions="[]"]
|
|
70
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
71
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
72
|
+
// CIL[DOC-VECTOR type="context" content="Layer: ui. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx."]
|
|
73
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
74
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
75
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
76
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
77
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
38
78
|
export function RoleDetailPage() {
|
|
39
79
|
const { id } = useParams<{ id: string }>()
|
|
40
80
|
const navigate = useNavigate()
|
|
@@ -52,6 +92,20 @@ export function RoleDetailPage() {
|
|
|
52
92
|
const [isSubmitting, setIsSubmitting] = useState(false)
|
|
53
93
|
const [error, setError] = useState<string | null>(null)
|
|
54
94
|
|
|
95
|
+
// CIL[BEGIN chunk_id="roledetailpage_hooks_1783666257" type="hooks" identity="useApi" parent="roledetailpage_function_roledetailpage_1783666257"]
|
|
96
|
+
// CIL[DOC-MACRO purpose="Fetch role data and manage form state"]
|
|
97
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle useApi"]
|
|
98
|
+
// CIL[DOC-CONTEXT module="RoleDetailPage" layer="data" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
99
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="role data, form state" errors="API errors" side_effects="HTTP requests, state updates"]
|
|
100
|
+
// CIL[DOC-MICRO logic_summary="Uses useApi hook to fetch role data and useEffect to sync form state" notable_decisions="[]"]
|
|
101
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
102
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
103
|
+
// CIL[DOC-VECTOR type="context" content="Layer: data. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
|
|
104
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
105
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
106
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
107
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
108
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
55
109
|
const { data: role, loading, error: fetchError } = useApi<Role>(
|
|
56
110
|
async () => {
|
|
57
111
|
if (isCreateMode) return null
|
|
@@ -76,7 +130,22 @@ export function RoleDetailPage() {
|
|
|
76
130
|
setPermissionsJson(JSON.stringify(role.permissions || {}, null, 2))
|
|
77
131
|
}
|
|
78
132
|
}, [role])
|
|
133
|
+
// CIL[END chunk_id="roledetailpage_hooks_1783666257"]
|
|
79
134
|
|
|
135
|
+
// CIL[BEGIN chunk_id="roledetailpage_handlers_1783666257" type="event_handlers" identity="handleSubmit" parent="roledetailpage_function_roledetailpage_1783666257"]
|
|
136
|
+
// CIL[DOC-MACRO purpose="Handle form submission for role creation/editing"]
|
|
137
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle handleSubmit"]
|
|
138
|
+
// CIL[DOC-CONTEXT module="RoleDetailPage" layer="logic" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
|
|
139
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="API response, navigation" errors="Validation errors, API errors" side_effects="HTTP requests, navigation"]
|
|
140
|
+
// CIL[DOC-MICRO logic_summary="Validates form data, parses permissions, submits to API, handles errors" notable_decisions="[]"]
|
|
141
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
142
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
143
|
+
// CIL[DOC-VECTOR type="context" content="Layer: logic. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
|
|
144
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
145
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
146
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
147
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
148
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
80
149
|
const handleSubmit = async (e: React.FormEvent) => {
|
|
81
150
|
e.preventDefault()
|
|
82
151
|
setIsSubmitting(true)
|
|
@@ -117,7 +186,22 @@ export function RoleDetailPage() {
|
|
|
117
186
|
setIsSubmitting(false)
|
|
118
187
|
}
|
|
119
188
|
}
|
|
189
|
+
// CIL[END chunk_id="roledetailpage_handlers_1783666257"]
|
|
120
190
|
|
|
191
|
+
// CIL[BEGIN chunk_id="roledetailpage_render_1783666257" type="render_logic" identity="return" parent="roledetailpage_function_roledetailpage_1783666257"]
|
|
192
|
+
// CIL[DOC-MACRO purpose="Render the complete role management interface"]
|
|
193
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle return"]
|
|
194
|
+
// CIL[DOC-CONTEXT module="return" layer="unknown" related_files="[]"]
|
|
195
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
196
|
+
// CIL[DOC-MICRO logic_summary="Implements return" notable_decisions="[]"]
|
|
197
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
198
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
199
|
+
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
200
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
201
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
202
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
203
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
204
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
121
205
|
if (loading) {
|
|
122
206
|
return (
|
|
123
207
|
<div className="space-y-6">
|
|
@@ -155,6 +239,40 @@ export function RoleDetailPage() {
|
|
|
155
239
|
</h1>
|
|
156
240
|
</div>
|
|
157
241
|
|
|
242
|
+
<PageInstructions
|
|
243
|
+
description="Define a role and set its permissions and metadata."
|
|
244
|
+
sections={[
|
|
245
|
+
{ title: 'What this role controls', content: 'A role is a named permission set assigned to people. It controls which record types a person can create, read, update, delete, or admin, and whether the role can be assigned in the first place.' },
|
|
246
|
+
{ title: 'Fields explained', content: <ul className="list-disc pl-4 space-y-1">
|
|
247
|
+
<li><strong>Name</strong> — string, required. The display label such as Sales Manager. Empty name blocks save.</li>
|
|
248
|
+
<li><strong>Slug</strong> — string, required. A unique URL-friendly identifier. Disabled after creation because permissions and references depend on it.</li>
|
|
249
|
+
<li><strong>Description</strong> — string. Optional context for other admins.</li>
|
|
250
|
+
<li><strong>System Role</strong> — checkbox, create-only. Marks a reserved role that cannot be deleted and is protected for core functions.</li>
|
|
251
|
+
<li><strong>Active</strong> — checkbox. Inactive roles cannot be assigned to people.</li>
|
|
252
|
+
<li><strong>Permissions (JSON)</strong> — JSON. Maps type slugs to arrays of allowed actions. Invalid JSON or wrong shape will cause save to fail.</li>
|
|
253
|
+
</ul> },
|
|
254
|
+
{ title: 'Options and values', content: <ul className="list-disc pl-4 space-y-1">
|
|
255
|
+
<li><strong>Actions per type</strong>: typical values are create, read, update, delete, and admin. Use the array format with a type slug mapped to an array: type_slug: ["read", "write"].</li>
|
|
256
|
+
<li><strong>System Role</strong>: can only be set during creation and prevents deletion later.</li>
|
|
257
|
+
</ul> },
|
|
258
|
+
{ title: 'Downstream impact', content: <ul className="list-disc pl-4 space-y-1">
|
|
259
|
+
<li>People assigned to this role receive the effective permissions immediately after the role is saved.</li>
|
|
260
|
+
<li>The admin-data API and runtime record UIs evaluate the role permissions for every create, read, update, and delete request.</li>
|
|
261
|
+
<li>Missing or malformed permissions can lock people out of records or grant unintended access.</li>
|
|
262
|
+
</ul> },
|
|
263
|
+
{ title: 'How to create, save, and validate', content: <ol className="list-decimal pl-4 space-y-1">
|
|
264
|
+
<li>In create mode, enter Name and Slug, then set Active and optionally System. Existing roles cannot change the slug.</li>
|
|
265
|
+
<li>Enter valid Permissions JSON mapping type slugs to action arrays.</li>
|
|
266
|
+
<li>Click Create Role or Update Role. Save fails if the name/slug are empty, the slug is changed, or the permissions JSON cannot be parsed.</li>
|
|
267
|
+
</ol> },
|
|
268
|
+
{ title: 'Common mistakes', content: <ul className="list-disc pl-4 space-y-1">
|
|
269
|
+
<li>Writing permissions as a flat list instead of an object of arrays.</li>
|
|
270
|
+
<li>Trying to change the slug after creation, which is disabled and will be ignored.</li>
|
|
271
|
+
<li>Forgetting to mark a role Active, which prevents assignment.</li>
|
|
272
|
+
</ul> },
|
|
273
|
+
]}
|
|
274
|
+
/>
|
|
275
|
+
|
|
158
276
|
{error && (
|
|
159
277
|
<Alert variant="destructive">
|
|
160
278
|
<AlertCircle className="h-4 w-4" />
|
|
@@ -271,3 +389,5 @@ export function RoleDetailPage() {
|
|
|
271
389
|
</div>
|
|
272
390
|
)
|
|
273
391
|
}
|
|
392
|
+
// CIL[END chunk_id="roledetailpage_render_1783666257"]
|
|
393
|
+
// CIL[END chunk_id="roledetailpage_function_roledetailpage_1783666257"]
|