spine-framework 0.4.4 → 0.5.0-rc.5
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/install-app.ts +183 -13
- 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-app.ts +127 -1
- 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/app-manifest.ts +2 -0
- package/.framework/functions/_shared/hash-api-key.ts +183 -79
- package/.framework/functions/_shared/logging.ts +562 -224
- package/.framework/functions/_shared/middleware.ts +47 -44
- package/.framework/functions/_shared/permissions.ts +4 -0
- package/.framework/functions/admin-data.ts +51 -28
- package/.framework/functions/ai-agents.ts +10 -6
- package/.framework/functions/api-keys.ts +301 -122
- package/.framework/functions/apps.ts +63 -29
- 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 +149 -78
- 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 +278 -148
- package/.framework/functions/pipeline-executions.ts +1 -1
- package/.framework/functions/pipelines.ts +14 -9
- package/.framework/functions/prompt-configs.ts +7 -4
- package/.framework/functions/roles.ts +8 -5
- package/.framework/functions/security.ts +30 -17
- package/.framework/functions/system-cron.ts +240 -127
- package/.framework/functions/tests.ts +7 -6
- package/.framework/functions/timers.ts +310 -107
- package/.framework/functions/triggers.ts +28 -13
- package/.framework/functions/types.ts +13 -10
- package/.framework/migrations/069_log_stats_window.sql +54 -0
- package/.framework/migrations/070_app_type_schema_rpcs.sql +166 -0
- package/.framework/migrations/071_timer_interval_keys.sql +96 -0
- package/.framework/migrations/072_slug_autofill.sql +77 -0
- package/.framework/migrations/073_seed_member_roles.sql +26 -0
- package/.framework/migrations/074_app_route_prefix_domains.sql +168 -0
- package/.framework/migrations/075_security_definer_grants.sql +157 -0
- package/.framework/src/apps/admin/index.tsx +1141 -775
- package/.framework/src/components/ErrorBoundary.tsx +136 -0
- package/.framework/src/components/admin/AdminListPage.tsx +81 -73
- package/.framework/src/components/admin/AdminSidebar.tsx +88 -79
- package/.framework/src/components/admin/EntitySelect.tsx +181 -0
- package/.framework/src/components/admin/PageInstructions.tsx +86 -127
- package/.framework/src/components/app-shell/GenericDetailPage.tsx +37 -13
- package/.framework/src/components/app-shell/GenericListPage.tsx +28 -32
- package/.framework/src/components/layout/Sidebar.tsx +300 -177
- package/.framework/src/components/runtime/DataDetailPage.tsx +67 -35
- package/.framework/src/components/runtime/DataHeader.tsx +96 -48
- package/.framework/src/components/runtime/DataListPage.tsx +3 -26
- package/.framework/src/components/runtime/DataStats.tsx +10 -10
- package/.framework/src/components/runtime/DataTable.tsx +12 -10
- package/.framework/src/components/ui/sheet.tsx +24 -26
- package/.framework/src/components/ui/textarea.tsx +74 -48
- package/.framework/src/contexts/AppContext.tsx +5 -12
- package/.framework/src/contexts/AuthContext.tsx +17 -9
- package/.framework/src/hooks/useApps.ts +18 -22
- package/.framework/src/hooks/useEntityList.ts +12 -9
- package/.framework/src/hooks/useListSchema.ts +108 -58
- package/.framework/src/instructions/README.md +74 -0
- package/.framework/src/instructions/accounts.md +97 -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 +228 -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/internal/docs-contract.md +158 -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/notifications.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 +170 -0
- package/.framework/src/instructions/operations/troubleshooting.md +170 -0
- package/.framework/src/instructions/operations/upgrade.md +116 -0
- package/.framework/src/instructions/people.md +91 -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 +184 -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/frontend-sdk.md +207 -0
- package/.framework/src/instructions/reference/functions/account-nodes.md +75 -0
- package/.framework/src/instructions/reference/functions/admin-data.md +197 -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-collaboration.md +106 -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/document-your-app.md +117 -0
- package/.framework/src/instructions/tasks/package-and-install-an-app.md +136 -0
- package/.framework/src/instructions/tasks/register-an-app.md +137 -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 +84 -0
- package/.framework/src/instructions/triggers.md +69 -0
- package/.framework/src/instructions/types.md +93 -0
- package/.framework/src/lib/app-mount.ts +88 -0
- package/.framework/src/pages/NotFoundPage.tsx +62 -31
- package/.framework/src/pages/admin/AIAgentDetailPage.tsx +117 -106
- package/.framework/src/pages/admin/AIAgentsPage.tsx +86 -48
- package/.framework/src/pages/admin/APIKeyDetailPage.tsx +153 -152
- package/.framework/src/pages/admin/APIKeysPage.tsx +91 -90
- package/.framework/src/pages/admin/AlertsConfigPage.tsx +29 -18
- package/.framework/src/pages/admin/AppDetailPage.tsx +6 -60
- package/.framework/src/pages/admin/AppsPage.tsx +104 -66
- package/.framework/src/pages/admin/DeliveriesPage.tsx +5 -5
- package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +5 -23
- package/.framework/src/pages/admin/EmbeddingsPage.tsx +5 -26
- package/.framework/src/pages/admin/IntegrationDetailPage.tsx +7 -7
- package/.framework/src/pages/admin/IntegrationsPage.tsx +85 -43
- package/.framework/src/pages/admin/LogsPage.tsx +144 -76
- package/.framework/src/pages/admin/ObservabilityDashboard.tsx +223 -140
- package/.framework/src/pages/admin/PipelineDetailPage.tsx +134 -113
- package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +108 -45
- package/.framework/src/pages/admin/PipelinesPage.tsx +160 -115
- package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +96 -98
- package/.framework/src/pages/admin/PromptConfigsPage.tsx +101 -59
- package/.framework/src/pages/admin/RoleDetailPage.tsx +90 -79
- package/.framework/src/pages/admin/RolesPage.tsx +86 -43
- package/.framework/src/pages/admin/SecurityPage.tsx +1 -1
- package/.framework/src/pages/admin/TestingDashboard.tsx +16 -28
- package/.framework/src/pages/admin/TimerDetailPage.tsx +117 -100
- package/.framework/src/pages/admin/TimersPage.tsx +90 -62
- package/.framework/src/pages/admin/TriggerDetailPage.tsx +90 -83
- package/.framework/src/pages/admin/TriggersPage.tsx +124 -99
- package/.framework/src/pages/admin/TypeDetailPage.tsx +152 -138
- package/.framework/src/pages/admin/TypesPage.tsx +90 -48
- package/.framework/src/pages/admin/cil/CILAgentPage.tsx +17 -25
- package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +17 -27
- package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +72 -40
- package/.framework/src/pages/admin/cil/CILFileListPage.tsx +321 -129
- package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +18 -29
- package/.framework/src/pages/admin/cil/CILGraphPage.tsx +26 -38
- package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +34 -46
- package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +189 -103
- package/.framework/src/pages/admin/cil/CILSearchPage.tsx +246 -136
- package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +11 -22
- package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +9 -20
- package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +26 -38
- package/.framework/src/pages/admin/kb/KBAdminPage.tsx +7 -26
- package/.framework/src/pages/auth/LoginPage.tsx +3 -2
- package/.framework/src/pages/auth/RegisterPage.tsx +16 -8
- package/.framework/templates/agent/AGENTS.md +167 -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 +79 -0
- package/.framework/templates/agent/skills/spine-migration/SKILL.md +75 -0
- package/.framework/templates/agent/skills/spine-new-app/SKILL.md +79 -0
- package/.framework/templates/agent/skills/spine-new-function/SKILL.md +71 -0
- package/.framework/templates/agent/skills/spine-new-type/SKILL.md +72 -0
- package/.framework/templates/agent/skills/spine-schema/SKILL.md +77 -0
- package/.framework/templates/agent/skills/spine-test/SKILL.md +67 -0
- package/.framework/templates/agent/skills/spine-troubleshoot/SKILL.md +74 -0
- package/.framework/templates/agent/skills/spine-upgrade/SKILL.md +69 -0
- package/.framework/templates/project.json +4 -1
- package/.framework/tests/unit/account-scoping-gates.test.ts +394 -0
- package/.framework/tests/unit/agent-files.test.ts +355 -0
- package/.framework/tests/unit/agent-runner.test.ts +479 -44
- package/.framework/tests/unit/api-keys-create-scope-gate.test.ts +160 -0
- package/.framework/tests/unit/api-keys-omit-secret-fields.test.ts +38 -0
- package/.framework/tests/unit/app-mount.test.ts +80 -0
- package/.framework/tests/unit/bootstrap.test.ts +242 -0
- package/.framework/tests/unit/cli-context-api-key.test.ts +114 -0
- package/.framework/tests/unit/debug-auth.test.ts +38 -0
- package/.framework/tests/unit/deliveries-account-scoping.test.ts +185 -0
- package/.framework/tests/unit/integration-outbound-credentials.test.ts +167 -0
- package/.framework/tests/unit/integrations-audit-redaction.test.ts +130 -0
- package/.framework/tests/unit/logging-app-id.test.ts +75 -0
- package/.framework/tests/unit/security-definer-grants.test.ts +154 -0
- package/.framework/tests/unit/system-context-denial.test.ts +145 -0
- package/.framework/tests/unit/system-cron.test.ts +240 -0
- package/.framework/tests/unit/timers.test.ts +159 -0
- package/README.md +125 -166
- package/config/tsconfig.cli.json +2 -2
- package/package.json +15 -4
- package/templates/project/package-lock.json +2 -2
- package/.framework/docs/admin-routes.md +0 -76
- package/.framework/docs/api-docs-progress.md +0 -38
- package/.framework/docs/api-governance.md +0 -146
- package/.framework/docs/api-testing-results.md +0 -212
- package/.framework/docs/assembly-launch-guide.md +0 -138
- package/.framework/docs/audit-results.md +0 -590
- package/.framework/docs/db-api-inventory.md +0 -95
- package/.framework/docs/gap-remediation-backlog.md +0 -103
- package/.framework/docs/ui-adoption-verification.md +0 -111
- package/.framework/docs/ui-api-coverage.md +0 -84
- package/.framework/docs/v2-compatibility-audit.md +0 -228
- package/.framework/mcp/index.ts +0 -133
- package/.framework/mcp/load-env.ts +0 -60
- package/.framework/mcp/shared/app-manifest.ts +0 -275
- package/.framework/mcp/shared/db.ts +0 -477
- package/.framework/mcp/shared/kb.ts +0 -118
- package/.framework/mcp/tools/architect.ts +0 -431
- package/.framework/mcp/tools/cil/context.ts +0 -345
- package/.framework/mcp/tools/cil/graph.ts +0 -242
- package/.framework/mcp/tools/cil/ingest.ts +0 -1217
- package/.framework/mcp/tools/cil/pipeline-orchestrator.ts +0 -693
- package/.framework/mcp/tools/cil/pipeline.ts +0 -767
- package/.framework/mcp/tools/cil/project.ts +0 -791
- package/.framework/mcp/tools/cil/retrieval.ts +0 -336
- package/.framework/mcp/tools/cil/search-core.ts +0 -454
- package/.framework/mcp/tools/cil/search.ts +0 -97
- package/.framework/mcp/tools/cil/suggest.ts +0 -186
- package/.framework/mcp/tools/cil/validate.ts +0 -1369
- package/.framework/mcp/tools/kb/delete.ts +0 -139
- package/.framework/mcp/tools/kb/index.ts +0 -52
- package/.framework/mcp/tools/kb/ingest.ts +0 -84
- package/.framework/mcp/tools/kb/list-types.ts +0 -102
- package/.framework/mcp/tools/kb/publish.ts +0 -100
- package/.framework/mcp/tools/kb/reindex.ts +0 -86
- package/.framework/mcp/tools/kb/revoke.ts +0 -85
- package/.framework/mcp/tools/kb/search.ts +0 -101
- package/.framework/mcp/tools/kb/upsert.ts +0 -125
- package/.framework/mcp/tools/observability.ts +0 -510
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/admin-data.ts"]
|
|
1
2
|
/**
|
|
2
3
|
* @module admin-data
|
|
3
4
|
* @audience internal
|
|
@@ -13,7 +14,6 @@
|
|
|
13
14
|
*
|
|
14
15
|
* @cil-generated
|
|
15
16
|
*/
|
|
16
|
-
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/admin-data.ts"]
|
|
17
17
|
// CIL[DOC-MACRO purpose="This module handles administrative data operations within the system, providing essential functionalities for managing records and permissions."]
|
|
18
18
|
// CIL[DOC-RESPONSIBILITY responsibility="This module handles administrative data operations within the system, providing essential functionalities for managing records and permissions. It serves as an API handler for various administrative actions, ensuring that only authorized users can perform updates and access sensitive data. INVARIANT: Only users with system admin privileges can execute these operations."]
|
|
19
19
|
// CIL[DOC-CONTEXT module="admin-data" layer="app-specific" related_files="middleware.ts (provides request handling logic).,permissions.ts (manages access control and validation).,db.ts (interfaces with the database for data operations).,principal.ts (determines user roles and permissions)."]
|
|
@@ -62,7 +62,6 @@ import { checkTypeSlugRateLimit } from './_shared/security'
|
|
|
62
62
|
* @stability stable
|
|
63
63
|
* @cil-generated
|
|
64
64
|
*/
|
|
65
|
-
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:permissions_all:constant" type="constant" identity="PERMISSIONS_ALL" parent="~/.framework/functions/admin-data.ts"]
|
|
66
65
|
// CIL[DOC-MACRO purpose="PERMISSIONS_ALL constant"]
|
|
67
66
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the PERMISSIONS_ALL constant."]
|
|
68
67
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -70,11 +69,12 @@ import { checkTypeSlugRateLimit } from './_shared/security'
|
|
|
70
69
|
// CIL[DOC-MICRO logic_summary="Implements the PERMISSIONS_ALL constant." notable_decisions="[]"]
|
|
71
70
|
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
72
71
|
// CIL[DOC-STABILITY stability="stable"]
|
|
72
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:PERMISSIONS_ALL:constant" type="constant" identity="PERMISSIONS_ALL" parent="~/.framework/functions/admin-data.ts"]
|
|
73
73
|
const PERMISSIONS_ALL = {
|
|
74
74
|
record_permissions: { all: ['create', 'read', 'update', 'delete'] },
|
|
75
75
|
fields: {}
|
|
76
76
|
}
|
|
77
|
-
// CIL[END stable_id="~/.framework/functions/admin-data.ts:
|
|
77
|
+
// CIL[END stable_id="~/.framework/functions/admin-data.ts:PERMISSIONS_ALL:constant"]
|
|
78
78
|
// CIL[DOC-VECTOR type="context" content="purpose='PERMISSIONS_ALL defines a comprehensive set of permissions for record management, including create, read, update, and delete actions.'; No verified external callers" status="ready"]
|
|
79
79
|
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
80
80
|
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
@@ -96,7 +96,6 @@ const PERMISSIONS_ALL = {
|
|
|
96
96
|
* @stability stable
|
|
97
97
|
* @cil-generated
|
|
98
98
|
*/
|
|
99
|
-
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:valid_entities:constant" type="constant" identity="VALID_ENTITIES" parent="~/.framework/functions/admin-data.ts"]
|
|
100
99
|
// CIL[DOC-MACRO purpose="VALID_ENTITIES constant"]
|
|
101
100
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the VALID_ENTITIES constant."]
|
|
102
101
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -104,8 +103,19 @@ const PERMISSIONS_ALL = {
|
|
|
104
103
|
// CIL[DOC-MICRO logic_summary="Implements the VALID_ENTITIES constant." notable_decisions="[]"]
|
|
105
104
|
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
106
105
|
// CIL[DOC-STABILITY stability="stable"]
|
|
106
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:VALID_ENTITIES:constant" type="constant" identity="VALID_ENTITIES" parent="~/.framework/functions/admin-data.ts"]
|
|
107
107
|
const VALID_ENTITIES = ['accounts', 'people', 'items', 'threads', 'messages', 'links', 'attachments', 'watchers', 'item_progress', 'logs', 'test_runs', 'observability', 'test_cases', 'types', 'link_types', 'ai_agents', 'prompt_configs']
|
|
108
|
-
// CIL[END stable_id="~/.framework/functions/admin-data.ts:
|
|
108
|
+
// CIL[END stable_id="~/.framework/functions/admin-data.ts:VALID_ENTITIES:constant"]
|
|
109
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:ENTITIES_WITHOUT_IS_ACTIVE:constant" type="constant" identity="ENTITIES_WITHOUT_IS_ACTIVE" parent="none"]
|
|
110
|
+
// CIL[DOC-MACRO purpose="Entities whose table has no is_active column — the default soft-delete filter must skip them"]
|
|
111
|
+
// CIL[DOC-RESPONSIBILITY responsibility="List VALID_ENTITIES tables lacking is_active so the list handler only applies the default is_active filter where the column exists"]
|
|
112
|
+
// CIL[DOC-CONTEXT module="admin-data" layer="functions" related_files=".framework/migrations/001_core_schema.sql"]
|
|
113
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="readonly Set<string> of entity names" errors="none" side_effects="none"]
|
|
114
|
+
// CIL[DOC-MICRO logic_summary="links, attachments, watchers, logs, and observability have no is_active column; applying the default filter to them yields 42703 column-does-not-exist" notable_decisions="['explicit_is_active_param_still_errors_on_these_tables']"]
|
|
115
|
+
// CIL[DOC-CONFIDENCE pass="first" score="0.9" flags="none"]
|
|
116
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
117
|
+
const ENTITIES_WITHOUT_IS_ACTIVE = new Set(['links', 'attachments', 'watchers', 'logs', 'observability'])
|
|
118
|
+
// CIL[END stable_id="~/.framework/functions/admin-data.ts:ENTITIES_WITHOUT_IS_ACTIVE:constant"]
|
|
109
119
|
// CIL[DOC-MACRO purpose="VALID_ENTITIES constant"]
|
|
110
120
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the VALID_ENTITIES constant."]
|
|
111
121
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -134,7 +144,6 @@ const VALID_ENTITIES = ['accounts', 'people', 'items', 'threads', 'messages', 'l
|
|
|
134
144
|
* @stability stable
|
|
135
145
|
* @cil-generated
|
|
136
146
|
*/
|
|
137
|
-
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:raw_entities:constant" type="constant" identity="RAW_ENTITIES" parent="~/.framework/functions/admin-data.ts"]
|
|
138
147
|
// CIL[DOC-MACRO purpose="RAW_ENTITIES constant"]
|
|
139
148
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the RAW_ENTITIES constant."]
|
|
140
149
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -142,11 +151,14 @@ const VALID_ENTITIES = ['accounts', 'people', 'items', 'threads', 'messages', 'l
|
|
|
142
151
|
// CIL[DOC-MICRO logic_summary="Implements the RAW_ENTITIES constant." notable_decisions="[]"]
|
|
143
152
|
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
144
153
|
// CIL[DOC-STABILITY stability="stable"]
|
|
154
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:RAW_ENTITIES:constant" type="constant" identity="RAW_ENTITIES" parent="~/.framework/functions/admin-data.ts"]
|
|
145
155
|
const RAW_ENTITIES = ['logs', 'test_runs', 'observability', 'test_cases']
|
|
156
|
+
// CIL[END stable_id="~/.framework/functions/admin-data.ts:RAW_ENTITIES:constant"]
|
|
146
157
|
// Entities with no created_by/updated_by columns — audit stamps must be
|
|
147
158
|
// omitted or writes fail with schema-cache errors.
|
|
159
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:UNAUDITED_ENTITIES:constant" type="constant" identity="UNAUDITED_ENTITIES" parent="~/.framework/functions/admin-data.ts"]
|
|
148
160
|
const UNAUDITED_ENTITIES = ['types', 'link_types']
|
|
149
|
-
// CIL[END stable_id="~/.framework/functions/admin-data.ts:
|
|
161
|
+
// CIL[END stable_id="~/.framework/functions/admin-data.ts:UNAUDITED_ENTITIES:constant"]
|
|
150
162
|
// CIL[DOC-MACRO purpose="RAW_ENTITIES constant"]
|
|
151
163
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the RAW_ENTITIES constant."]
|
|
152
164
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -175,7 +187,6 @@ const UNAUDITED_ENTITIES = ['types', 'link_types']
|
|
|
175
187
|
* @stability stable
|
|
176
188
|
* @cil-generated
|
|
177
189
|
*/
|
|
178
|
-
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:entity_to_kind:constant" type="constant" identity="ENTITY_TO_KIND" parent="~/.framework/functions/admin-data.ts"]
|
|
179
190
|
// CIL[DOC-MACRO purpose="ENTITY_TO_KIND constant"]
|
|
180
191
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the ENTITY_TO_KIND constant."]
|
|
181
192
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -183,6 +194,7 @@ const UNAUDITED_ENTITIES = ['types', 'link_types']
|
|
|
183
194
|
// CIL[DOC-MICRO logic_summary="Implements the ENTITY_TO_KIND constant." notable_decisions="[]"]
|
|
184
195
|
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
185
196
|
// CIL[DOC-STABILITY stability="stable"]
|
|
197
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:ENTITY_TO_KIND:constant" type="constant" identity="ENTITY_TO_KIND" parent="~/.framework/functions/admin-data.ts"]
|
|
186
198
|
const ENTITY_TO_KIND: Record<string, string> = {
|
|
187
199
|
accounts: 'account',
|
|
188
200
|
people: 'person',
|
|
@@ -194,7 +206,7 @@ const ENTITY_TO_KIND: Record<string, string> = {
|
|
|
194
206
|
watchers: 'watcher',
|
|
195
207
|
item_progress: 'item_progress'
|
|
196
208
|
}
|
|
197
|
-
// CIL[END stable_id="~/.framework/functions/admin-data.ts:
|
|
209
|
+
// CIL[END stable_id="~/.framework/functions/admin-data.ts:ENTITY_TO_KIND:constant"]
|
|
198
210
|
// CIL[DOC-VECTOR type="context" content="purpose='ENTITY_TO_KIND is a mapping of entity names to their corresponding kind identifiers.'; No verified external callers" status="ready"]
|
|
199
211
|
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
200
212
|
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
@@ -217,7 +229,6 @@ const ENTITY_TO_KIND: Record<string, string> = {
|
|
|
217
229
|
* @calls withAdminLogging, resolveTypeIds, getSearchField
|
|
218
230
|
* @cil-generated
|
|
219
231
|
*/
|
|
220
|
-
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:list:constant" type="constant" identity="list" parent="~/.framework/functions/admin-data.ts"]
|
|
221
232
|
// CIL[DOC-MACRO purpose="list constant"]
|
|
222
233
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the list constant."]
|
|
223
234
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -225,8 +236,9 @@ const ENTITY_TO_KIND: Record<string, string> = {
|
|
|
225
236
|
// CIL[DOC-MICRO logic_summary="Implements the list constant." notable_decisions="[]"]
|
|
226
237
|
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
227
238
|
// CIL[DOC-STABILITY stability="stable"]
|
|
239
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:list:constant" type="constant" identity="list" parent="~/.framework/functions/admin-data.ts"]
|
|
228
240
|
export const list = createHandler(async (ctx, _body) => {
|
|
229
|
-
const { entity, action, method, search, sort_field = 'created_at', sort_direction = 'desc', limit = 50, offset = 0, type_slug, type_slugs, view: viewSlug, flag_only, exclude_flag, ...filters } = ctx.query || {}
|
|
241
|
+
const { entity, action, method, search, sort_field = 'created_at', sort_direction = 'desc', limit = 50, offset = 0, type_slug, type_slugs, view: viewSlug, flag_only, exclude_flag, include_inactive, ...filters } = ctx.query || {}
|
|
230
242
|
|
|
231
243
|
return await withAdminLogging(
|
|
232
244
|
ctx,
|
|
@@ -292,6 +304,14 @@ export const list = createHandler(async (ctx, _body) => {
|
|
|
292
304
|
}
|
|
293
305
|
})
|
|
294
306
|
|
|
307
|
+
// Soft-deleted rows are hidden by default — pass is_active=false or
|
|
308
|
+
// include_inactive=true to see them. Entities without an is_active
|
|
309
|
+
// column (links, attachments, watchers, logs, observability) skip the
|
|
310
|
+
// default filter — it would 500 with 42703 column-does-not-exist.
|
|
311
|
+
if (filters.is_active === undefined && include_inactive !== 'true' && !ENTITIES_WITHOUT_IS_ACTIVE.has(entity)) {
|
|
312
|
+
query = query.eq('is_active', true)
|
|
313
|
+
}
|
|
314
|
+
|
|
295
315
|
// Generic record-flag filters on the row's data jsonb. flag_only=<field>
|
|
296
316
|
// returns only rows where data->>field is 'true'; exclude_flag=<field>
|
|
297
317
|
// hides them (null counts as unset). Flag fields are stamped server-side
|
|
@@ -405,7 +425,6 @@ export const list = createHandler(async (ctx, _body) => {
|
|
|
405
425
|
* @errorHandling returns null on error during data fetching.
|
|
406
426
|
* @cil-generated
|
|
407
427
|
*/
|
|
408
|
-
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:attachlineage:function" type="function" identity="attachLineage" parent="~/.framework/functions/admin-data.ts"]
|
|
409
428
|
// CIL[DOC-MACRO purpose="attachLineage function"]
|
|
410
429
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the attachLineage function from type-declared lineage config."]
|
|
411
430
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -413,6 +432,7 @@ export const list = createHandler(async (ctx, _body) => {
|
|
|
413
432
|
// CIL[DOC-MICRO logic_summary="Reads functionality.lineage off the record's type design_schema; parents walk declared link_type then parent_fields (5-hop, visited-set cycle guard); children resolve via reverse link_type edges plus per-child-type data field lookups." notable_decisions="['link_type queries are guarded by the declared link_type, parent scan by declared parent_fields, child field lookups by declared children — a type with no lineage block attaches empty arrays with no link/data queries']"]
|
|
414
433
|
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
415
434
|
// CIL[DOC-STABILITY stability="stable"]
|
|
435
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:attachLineage:function" type="function" identity="attachLineage" parent="~/.framework/functions/admin-data.ts"]
|
|
416
436
|
async function attachLineage(record: any, ctx: any): Promise<void> {
|
|
417
437
|
// Lineage is declared per item type in design_schema.functionality.lineage:
|
|
418
438
|
// { parent_fields: string[], link_type: string, children: { [childTypeSlug]: field } }
|
|
@@ -516,7 +536,7 @@ async function attachLineage(record: any, ctx: any): Promise<void> {
|
|
|
516
536
|
record.parents = parents
|
|
517
537
|
record.children = children
|
|
518
538
|
}
|
|
519
|
-
// CIL[END stable_id="~/.framework/functions/admin-data.ts:
|
|
539
|
+
// CIL[END stable_id="~/.framework/functions/admin-data.ts:attachLineage:function"]
|
|
520
540
|
// CIL[DOC-VECTOR type="context" content="purpose='The attachLineage function retrieves and attaches parent and child records to a given record based on its lineage in a hierarchical structure.'; No verified external callers" status="ready"]
|
|
521
541
|
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
522
542
|
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
@@ -540,7 +560,6 @@ async function attachLineage(record: any, ctx: any): Promise<void> {
|
|
|
540
560
|
* @calls withAdminLogging, ctx.db.from, sanitizeRecordData, adminDb.from, attachLineage, projectMessageForCustomer
|
|
541
561
|
* @cil-generated
|
|
542
562
|
*/
|
|
543
|
-
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:get:constant" type="constant" identity="get" parent="~/.framework/functions/admin-data.ts"]
|
|
544
563
|
// CIL[DOC-MACRO purpose="get constant"]
|
|
545
564
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the get constant."]
|
|
546
565
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -548,6 +567,7 @@ async function attachLineage(record: any, ctx: any): Promise<void> {
|
|
|
548
567
|
// CIL[DOC-MICRO logic_summary="Implements the get constant." notable_decisions="[]"]
|
|
549
568
|
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
550
569
|
// CIL[DOC-STABILITY stability="stable"]
|
|
570
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:get:constant" type="constant" identity="get" parent="~/.framework/functions/admin-data.ts"]
|
|
551
571
|
export const get = createHandler(async (ctx, _body) => {
|
|
552
572
|
const { entity, id, view: viewSlug } = ctx.query || {}
|
|
553
573
|
const method = ctx.query?.method || 'GET'
|
|
@@ -639,7 +659,6 @@ export const get = createHandler(async (ctx, _body) => {
|
|
|
639
659
|
* @calls withAdminLogging, ctx.db.from, fireCreateTriggers, sanitizeRecordData
|
|
640
660
|
* @cil-generated
|
|
641
661
|
*/
|
|
642
|
-
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:create:constant" type="constant" identity="create" parent="~/.framework/functions/admin-data.ts"]
|
|
643
662
|
// CIL[DOC-MACRO purpose="create constant"]
|
|
644
663
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the create constant."]
|
|
645
664
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -647,6 +666,7 @@ export const get = createHandler(async (ctx, _body) => {
|
|
|
647
666
|
// CIL[DOC-MICRO logic_summary="Implements the create constant." notable_decisions="[]"]
|
|
648
667
|
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
649
668
|
// CIL[DOC-STABILITY stability="stable"]
|
|
669
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:create:constant" type="constant" identity="create" parent="~/.framework/functions/admin-data.ts"]
|
|
650
670
|
export const create = createHandler(async (ctx, body) => {
|
|
651
671
|
const entity = body?.entity || ctx.query?.entity
|
|
652
672
|
const type_slug = body?.type_slug
|
|
@@ -686,7 +706,8 @@ export const create = createHandler(async (ctx, body) => {
|
|
|
686
706
|
if (entity === 'observability' && (!raw.metric_name || raw.metric_value === undefined)) { const e: any = new Error('metric_name and metric_value are required for observability'); e.statusCode = 400; throw e }
|
|
687
707
|
if (entity === 'test_cases' && (!raw.slug || !raw.name)) { const e: any = new Error('slug and name are required for test_cases'); e.statusCode = 400; throw e }
|
|
688
708
|
|
|
689
|
-
const
|
|
709
|
+
const rawInsertDb = (ctx.principal?.isInternal || isSystemAdmin(ctx.principal)) ? adminDb : ctx.db
|
|
710
|
+
const { data, error: err } = await rawInsertDb.from(entity).insert(raw).select().single()
|
|
690
711
|
if (err) throw err
|
|
691
712
|
// Await the trigger check: the heavy work already offloads to
|
|
692
713
|
// pipeline-runner-background, so this only adds eval + queue insert
|
|
@@ -802,7 +823,9 @@ export const create = createHandler(async (ctx, body) => {
|
|
|
802
823
|
throw e
|
|
803
824
|
}
|
|
804
825
|
|
|
805
|
-
|
|
826
|
+
// Function-side permission check already ran — write via service role.
|
|
827
|
+
// ctx.db is PostgREST `authenticated` for humans, which holds SELECT only.
|
|
828
|
+
const insertDb = adminDb
|
|
806
829
|
|
|
807
830
|
const { data, error: err } = await insertDb.from(entity)
|
|
808
831
|
.insert(dataToInsert)
|
|
@@ -841,7 +864,6 @@ export const create = createHandler(async (ctx, body) => {
|
|
|
841
864
|
* @calls withAdminLogging, validateUpdatePermissions, ctx.db.from, fireUpdateTriggers, sanitizeRecordData
|
|
842
865
|
* @cil-generated
|
|
843
866
|
*/
|
|
844
|
-
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:update:constant" type="constant" identity="update" parent="~/.framework/functions/admin-data.ts"]
|
|
845
867
|
// CIL[DOC-MACRO purpose="update constant"]
|
|
846
868
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the update constant."]
|
|
847
869
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -849,6 +871,7 @@ export const create = createHandler(async (ctx, body) => {
|
|
|
849
871
|
// CIL[DOC-MICRO logic_summary="Implements the update constant." notable_decisions="[]"]
|
|
850
872
|
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
851
873
|
// CIL[DOC-STABILITY stability="stable"]
|
|
874
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:update:constant" type="constant" identity="update" parent="~/.framework/functions/admin-data.ts"]
|
|
852
875
|
export const update = createHandler(async (ctx, body) => {
|
|
853
876
|
const { entity, id } = ctx.query || {}
|
|
854
877
|
const method = ctx.query?.method || 'PATCH'
|
|
@@ -910,7 +933,7 @@ export const update = createHandler(async (ctx, body) => {
|
|
|
910
933
|
updated_at: new Date().toISOString()
|
|
911
934
|
}
|
|
912
935
|
|
|
913
|
-
const { data, error: err } = await
|
|
936
|
+
const { data, error: err } = await adminDb.from(entity)
|
|
914
937
|
.update(dataToUpdate)
|
|
915
938
|
.eq('id', id)
|
|
916
939
|
.select()
|
|
@@ -950,7 +973,6 @@ export const update = createHandler(async (ctx, body) => {
|
|
|
950
973
|
* @calls withAdminLogging, ctx.db.from, resolveFirstSurfacePermissions, entitySupportsSoftDelete, sanitizeRecordData
|
|
951
974
|
* @cil-generated
|
|
952
975
|
*/
|
|
953
|
-
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:remove:constant" type="constant" identity="remove" parent="~/.framework/functions/admin-data.ts"]
|
|
954
976
|
// CIL[DOC-MACRO purpose="remove constant"]
|
|
955
977
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the remove constant."]
|
|
956
978
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -958,6 +980,7 @@ export const update = createHandler(async (ctx, body) => {
|
|
|
958
980
|
// CIL[DOC-MICRO logic_summary="Implements the remove constant." notable_decisions="[]"]
|
|
959
981
|
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
960
982
|
// CIL[DOC-STABILITY stability="stable"]
|
|
983
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:remove:constant" type="constant" identity="remove" parent="~/.framework/functions/admin-data.ts"]
|
|
961
984
|
export const remove = createHandler(async (ctx, _body) => {
|
|
962
985
|
const { entity, id, soft = 'true' } = ctx.query || {}
|
|
963
986
|
const method = ctx.query?.method || 'DELETE'
|
|
@@ -1006,7 +1029,7 @@ export const remove = createHandler(async (ctx, _body) => {
|
|
|
1006
1029
|
const isSoftDelete = soft === 'true'
|
|
1007
1030
|
|
|
1008
1031
|
if (isSoftDelete && entitySupportsSoftDelete(entity)) {
|
|
1009
|
-
const { data, error: err } = await
|
|
1032
|
+
const { data, error: err } = await adminDb.from(entity)
|
|
1010
1033
|
.update({
|
|
1011
1034
|
is_active: false,
|
|
1012
1035
|
updated_by: ctx.principal?.type === 'human' ? ctx.principal.id : null,
|
|
@@ -1019,7 +1042,7 @@ export const remove = createHandler(async (ctx, _body) => {
|
|
|
1019
1042
|
if (err) throw err
|
|
1020
1043
|
return { deleted: true, soft: true, data: await sanitizeRecordData(ctx, data, entity) }
|
|
1021
1044
|
} else {
|
|
1022
|
-
const { error: err } = await
|
|
1045
|
+
const { error: err } = await adminDb.from(entity)
|
|
1023
1046
|
.delete()
|
|
1024
1047
|
.eq('id', id)
|
|
1025
1048
|
|
|
@@ -1053,7 +1076,6 @@ export const remove = createHandler(async (ctx, _body) => {
|
|
|
1053
1076
|
* @stability stable
|
|
1054
1077
|
* @cil-generated
|
|
1055
1078
|
*/
|
|
1056
|
-
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:getsearchfield:function" type="function" identity="getSearchField" parent="~/.framework/functions/admin-data.ts"]
|
|
1057
1079
|
// CIL[DOC-MACRO purpose="getSearchField function"]
|
|
1058
1080
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the getSearchField function."]
|
|
1059
1081
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -1061,6 +1083,7 @@ export const remove = createHandler(async (ctx, _body) => {
|
|
|
1061
1083
|
// CIL[DOC-MICRO logic_summary="Implements the getSearchField function." notable_decisions="[]"]
|
|
1062
1084
|
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
1063
1085
|
// CIL[DOC-STABILITY stability="stable"]
|
|
1086
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:getSearchField:function" type="function" identity="getSearchField" parent="~/.framework/functions/admin-data.ts"]
|
|
1064
1087
|
function getSearchField(entity: string): string {
|
|
1065
1088
|
const searchFields: Record<string, string> = {
|
|
1066
1089
|
accounts: 'display_name',
|
|
@@ -1079,7 +1102,7 @@ function getSearchField(entity: string): string {
|
|
|
1079
1102
|
}
|
|
1080
1103
|
return searchFields[entity] || 'id'
|
|
1081
1104
|
}
|
|
1082
|
-
// CIL[END stable_id="~/.framework/functions/admin-data.ts:
|
|
1105
|
+
// CIL[END stable_id="~/.framework/functions/admin-data.ts:getSearchField:function"]
|
|
1083
1106
|
// CIL[DOC-VECTOR type="context" content="purpose='Retrieves the appropriate search field name for a given entity type.'; No verified external callers" status="ready"]
|
|
1084
1107
|
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
1085
1108
|
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
@@ -1103,7 +1126,6 @@ function getSearchField(entity: string): string {
|
|
|
1103
1126
|
* @stability stable
|
|
1104
1127
|
* @cil-generated
|
|
1105
1128
|
*/
|
|
1106
|
-
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:entitysupportssoftdelete:function" type="function" identity="entitySupportsSoftDelete" parent="~/.framework/functions/admin-data.ts"]
|
|
1107
1129
|
// CIL[DOC-MACRO purpose="entitySupportsSoftDelete function"]
|
|
1108
1130
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the entitySupportsSoftDelete function."]
|
|
1109
1131
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -1111,11 +1133,12 @@ function getSearchField(entity: string): string {
|
|
|
1111
1133
|
// CIL[DOC-MICRO logic_summary="Implements the entitySupportsSoftDelete function." notable_decisions="[]"]
|
|
1112
1134
|
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
1113
1135
|
// CIL[DOC-STABILITY stability="stable"]
|
|
1136
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:entitySupportsSoftDelete:function" type="function" identity="entitySupportsSoftDelete" parent="~/.framework/functions/admin-data.ts"]
|
|
1114
1137
|
function entitySupportsSoftDelete(entity: string): boolean {
|
|
1115
1138
|
const softDeleteEntities = ['accounts', 'people', 'items', 'threads', 'messages', 'watchers', 'item_progress', 'test_cases']
|
|
1116
1139
|
return softDeleteEntities.includes(entity)
|
|
1117
1140
|
}
|
|
1118
|
-
// CIL[END stable_id="~/.framework/functions/admin-data.ts:
|
|
1141
|
+
// CIL[END stable_id="~/.framework/functions/admin-data.ts:entitySupportsSoftDelete:function"]
|
|
1119
1142
|
// CIL[DOC-VECTOR type="context" content="purpose='Determines if a given entity supports soft deletion by checking against a predefined list of entities.'; No verified external callers" status="ready"]
|
|
1120
1143
|
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
1121
1144
|
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
@@ -1138,7 +1161,6 @@ function entitySupportsSoftDelete(entity: string): boolean {
|
|
|
1138
1161
|
* @calls withAdminLogging, ctx.db.from
|
|
1139
1162
|
* @cil-generated
|
|
1140
1163
|
*/
|
|
1141
|
-
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:stats:constant" type="constant" identity="stats" parent="~/.framework/functions/admin-data.ts"]
|
|
1142
1164
|
// CIL[DOC-MACRO purpose="stats constant"]
|
|
1143
1165
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the stats constant."]
|
|
1144
1166
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -1146,6 +1168,7 @@ function entitySupportsSoftDelete(entity: string): boolean {
|
|
|
1146
1168
|
// CIL[DOC-MICRO logic_summary="Implements the stats constant." notable_decisions="[]"]
|
|
1147
1169
|
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
1148
1170
|
// CIL[DOC-STABILITY stability="stable"]
|
|
1171
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:stats:constant" type="constant" identity="stats" parent="~/.framework/functions/admin-data.ts"]
|
|
1149
1172
|
export const stats = createHandler(async (ctx, _body) => {
|
|
1150
1173
|
const { entity } = ctx.query || {}
|
|
1151
1174
|
const method = ctx.query?.method || 'GET'
|
|
@@ -1194,7 +1217,6 @@ export const stats = createHandler(async (ctx, _body) => {
|
|
|
1194
1217
|
* @calls list, get, stats, create, update, remove
|
|
1195
1218
|
* @cil-generated
|
|
1196
1219
|
*/
|
|
1197
|
-
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:handler:constant" type="constant" identity="handler" parent="~/.framework/functions/admin-data.ts"]
|
|
1198
1220
|
// CIL[DOC-MACRO purpose="handler constant"]
|
|
1199
1221
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the handler constant."]
|
|
1200
1222
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -1202,6 +1224,7 @@ export const stats = createHandler(async (ctx, _body) => {
|
|
|
1202
1224
|
// CIL[DOC-MICRO logic_summary="Implements the handler constant." notable_decisions="[]"]
|
|
1203
1225
|
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
1204
1226
|
// CIL[DOC-STABILITY stability="stable"]
|
|
1227
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:handler:constant" type="constant" identity="handler" parent="~/.framework/functions/admin-data.ts"]
|
|
1205
1228
|
export const handler = createHandler(async (ctx, body) => {
|
|
1206
1229
|
const { action } = ctx.query || {}
|
|
1207
1230
|
const method = ctx.query?.method || 'GET'
|
|
@@ -244,7 +244,8 @@ export const create = createHandler(async (ctx, body) => {
|
|
|
244
244
|
throw new Error('User context (person and account) required')
|
|
245
245
|
}
|
|
246
246
|
|
|
247
|
-
const
|
|
247
|
+
const db = isSystemAdmin(ctx.principal) ? adminDb : ctx.db
|
|
248
|
+
const { data, error: err } = await db
|
|
248
249
|
.from('ai_agents')
|
|
249
250
|
.insert({
|
|
250
251
|
app_id: app_id || null,
|
|
@@ -258,7 +259,7 @@ export const create = createHandler(async (ctx, body) => {
|
|
|
258
259
|
capabilities: capabilities || [],
|
|
259
260
|
constraints: constraints || {},
|
|
260
261
|
metadata: metadata || {},
|
|
261
|
-
created_by: ctx.principal.id
|
|
262
|
+
created_by: ctx.principal.type === 'human' ? ctx.principal.id : null
|
|
262
263
|
})
|
|
263
264
|
.select()
|
|
264
265
|
.single()
|
|
@@ -325,7 +326,8 @@ export const update = createHandler(async (ctx, body) => {
|
|
|
325
326
|
if (updates[key] !== undefined) updateData[key] = updates[key]
|
|
326
327
|
}
|
|
327
328
|
|
|
328
|
-
const
|
|
329
|
+
const db = isSystemAdmin(ctx.principal) ? adminDb : ctx.db
|
|
330
|
+
const { data, error: err } = await db
|
|
329
331
|
.from('ai_agents')
|
|
330
332
|
.update(updateData)
|
|
331
333
|
.eq('id', id)
|
|
@@ -383,7 +385,8 @@ export const remove = createHandler(async (ctx, _body) => {
|
|
|
383
385
|
throw new Error('Agent ID is required')
|
|
384
386
|
}
|
|
385
387
|
|
|
386
|
-
const
|
|
388
|
+
const db = isSystemAdmin(ctx.principal) ? adminDb : ctx.db
|
|
389
|
+
const { data: current } = await db
|
|
387
390
|
.from('ai_agents')
|
|
388
391
|
.select('id, name')
|
|
389
392
|
.eq('id', id)
|
|
@@ -391,7 +394,7 @@ export const remove = createHandler(async (ctx, _body) => {
|
|
|
391
394
|
|
|
392
395
|
if (!current) throw new Error('Agent not found')
|
|
393
396
|
|
|
394
|
-
const { error: err } = await
|
|
397
|
+
const { error: err } = await db
|
|
395
398
|
.from('ai_agents')
|
|
396
399
|
.delete()
|
|
397
400
|
.eq('id', id)
|
|
@@ -449,7 +452,8 @@ export const run = createHandler(async (ctx, body) => {
|
|
|
449
452
|
throw new Error('User context (person and account) required')
|
|
450
453
|
}
|
|
451
454
|
|
|
452
|
-
const
|
|
455
|
+
const db = isSystemAdmin(ctx.principal) ? adminDb : ctx.db
|
|
456
|
+
const { data, error: err } = await db
|
|
453
457
|
.from('threads')
|
|
454
458
|
.select('*, type:types(*)')
|
|
455
459
|
.eq('id', thread_id)
|