spine-framework 0.4.4 → 0.5.0-rc.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +13 -3
- package/.framework/cli/commands/bootstrap.ts +392 -0
- package/.framework/cli/commands/dev.ts +91 -218
- package/.framework/cli/commands/doctor.ts +132 -26
- package/.framework/cli/commands/generate.ts +38 -298
- package/.framework/cli/commands/init.ts +20 -1
- package/.framework/cli/commands/migrate.ts +36 -30
- package/.framework/cli/commands/migrations.ts +16 -56
- package/.framework/cli/commands/upgrade.ts +35 -0
- package/.framework/cli/commands/validate-schema.ts +147 -0
- package/.framework/cli/context.ts +223 -110
- package/.framework/cli/index.ts +6 -0
- package/.framework/cli/lib/project-files.ts +241 -1
- package/.framework/functions/_shared/hash-api-key.ts +183 -79
- package/.framework/functions/_shared/logging.ts +562 -224
- package/.framework/functions/_shared/middleware.ts +47 -44
- package/.framework/functions/admin-data.ts +39 -28
- package/.framework/functions/ai-agents.ts +10 -6
- package/.framework/functions/api-keys.ts +301 -122
- package/.framework/functions/apps.ts +43 -26
- package/.framework/functions/cil-ingest.ts +48 -15
- package/.framework/functions/debug-auth.ts +14 -8
- package/.framework/functions/deliveries.ts +39 -12
- package/.framework/functions/embeddings.ts +145 -76
- package/.framework/functions/integration-outbound.ts +67 -27
- package/.framework/functions/integrations.ts +254 -127
- package/.framework/functions/logs.ts +273 -133
- package/.framework/functions/observability.ts +277 -147
- package/.framework/functions/pipeline-executions.ts +1 -1
- package/.framework/functions/pipelines.ts +14 -9
- package/.framework/functions/prompt-configs.ts +7 -4
- package/.framework/functions/roles.ts +8 -5
- package/.framework/functions/security.ts +30 -17
- package/.framework/functions/system-cron.ts +240 -127
- package/.framework/functions/tests.ts +7 -6
- package/.framework/functions/timers.ts +310 -107
- package/.framework/functions/triggers.ts +28 -13
- package/.framework/functions/types.ts +13 -10
- package/.framework/migrations/069_log_stats_window.sql +54 -0
- package/.framework/migrations/070_app_type_schema_rpcs.sql +166 -0
- package/.framework/migrations/071_timer_interval_keys.sql +96 -0
- package/.framework/migrations/072_slug_autofill.sql +77 -0
- package/.framework/migrations/073_seed_member_roles.sql +26 -0
- package/.framework/src/apps/admin/index.tsx +1141 -775
- package/.framework/src/components/ErrorBoundary.tsx +136 -0
- package/.framework/src/components/admin/AdminListPage.tsx +81 -73
- package/.framework/src/components/admin/AdminSidebar.tsx +88 -79
- package/.framework/src/components/admin/EntitySelect.tsx +181 -0
- package/.framework/src/components/admin/PageInstructions.tsx +86 -127
- package/.framework/src/components/app-shell/GenericDetailPage.tsx +37 -13
- package/.framework/src/components/app-shell/GenericListPage.tsx +28 -32
- package/.framework/src/components/layout/Sidebar.tsx +300 -177
- package/.framework/src/components/runtime/DataDetailPage.tsx +67 -35
- package/.framework/src/components/runtime/DataHeader.tsx +96 -48
- package/.framework/src/components/runtime/DataListPage.tsx +3 -26
- package/.framework/src/components/runtime/DataStats.tsx +10 -10
- package/.framework/src/components/runtime/DataTable.tsx +12 -10
- package/.framework/src/components/ui/sheet.tsx +24 -26
- package/.framework/src/components/ui/textarea.tsx +74 -48
- package/.framework/src/hooks/useEntityList.ts +12 -9
- package/.framework/src/hooks/useListSchema.ts +108 -58
- package/.framework/src/instructions/README.md +57 -0
- package/.framework/src/instructions/ai-agents.md +69 -0
- package/.framework/src/instructions/alerts.md +80 -0
- package/.framework/src/instructions/api-keys.md +87 -0
- package/.framework/src/instructions/apps.md +77 -0
- package/.framework/src/instructions/concepts/ai-and-prompts.md +150 -0
- package/.framework/src/instructions/concepts/apps-and-renderers.md +162 -0
- package/.framework/src/instructions/concepts/auth-and-api-keys.md +133 -0
- package/.framework/src/instructions/concepts/automation.md +186 -0
- package/.framework/src/instructions/concepts/concurrency-and-idempotency.md +125 -0
- package/.framework/src/instructions/concepts/core-vs-custom.md +124 -0
- package/.framework/src/instructions/concepts/design-schema.md +152 -0
- package/.framework/src/instructions/concepts/integrations-and-webhooks.md +127 -0
- package/.framework/src/instructions/concepts/observability.md +116 -0
- package/.framework/src/instructions/concepts/permissions.md +150 -0
- package/.framework/src/instructions/concepts/runtime-records.md +111 -0
- package/.framework/src/instructions/concepts/scope-and-accounts.md +112 -0
- package/.framework/src/instructions/concepts/spine-way.md +172 -0
- package/.framework/src/instructions/deliveries.md +59 -0
- package/.framework/src/instructions/guide/00-orientation.md +106 -0
- package/.framework/src/instructions/guide/01-install-and-first-run.md +253 -0
- package/.framework/src/instructions/guide/02-project-map.md +147 -0
- package/.framework/src/instructions/guide/03-domain-model.md +223 -0
- package/.framework/src/instructions/guide/04-first-app.md +227 -0
- package/.framework/src/instructions/guide/05-glossary.md +183 -0
- package/.framework/src/instructions/integrations.md +96 -0
- package/.framework/src/instructions/internal/cil-markers.md +83 -0
- package/.framework/src/instructions/invites.md +60 -0
- package/.framework/src/instructions/kb.md +80 -0
- package/.framework/src/instructions/logs.md +77 -0
- package/.framework/src/instructions/observability.md +61 -0
- package/.framework/src/instructions/operations/deployment.md +115 -0
- package/.framework/src/instructions/operations/migrations.md +125 -0
- package/.framework/src/instructions/operations/security-checklist.md +148 -0
- package/.framework/src/instructions/operations/troubleshooting.md +170 -0
- package/.framework/src/instructions/operations/upgrade.md +116 -0
- package/.framework/src/instructions/pipeline-executions.md +62 -0
- package/.framework/src/instructions/pipelines.md +78 -0
- package/.framework/src/instructions/prompts.md +95 -0
- package/.framework/src/instructions/reference/api/admin-data.md +162 -0
- package/.framework/src/instructions/reference/api/auth.md +113 -0
- package/.framework/src/instructions/reference/api/errors-and-envelopes.md +113 -0
- package/.framework/src/instructions/reference/app-manifest.md +150 -0
- package/.framework/src/instructions/reference/cli.md +124 -0
- package/.framework/src/instructions/reference/database.md +132 -0
- package/.framework/src/instructions/reference/design-schema.md +280 -0
- package/.framework/src/instructions/reference/env-vars.md +133 -0
- package/.framework/src/instructions/reference/functions/account-nodes.md +75 -0
- package/.framework/src/instructions/reference/functions/admin-data.md +195 -0
- package/.framework/src/instructions/reference/functions/admin-funnel.md +90 -0
- package/.framework/src/instructions/reference/functions/admin-install-funnel.md +107 -0
- package/.framework/src/instructions/reference/functions/admin-signals.md +102 -0
- package/.framework/src/instructions/reference/functions/ai-agents.md +148 -0
- package/.framework/src/instructions/reference/functions/ai-interactions.md +156 -0
- package/.framework/src/instructions/reference/functions/api-keys.md +130 -0
- package/.framework/src/instructions/reference/functions/apps.md +140 -0
- package/.framework/src/instructions/reference/functions/auth.md +99 -0
- package/.framework/src/instructions/reference/functions/debug-auth.md +91 -0
- package/.framework/src/instructions/reference/functions/deliveries.md +110 -0
- package/.framework/src/instructions/reference/functions/embeddings.md +166 -0
- package/.framework/src/instructions/reference/functions/eval-harness.md +149 -0
- package/.framework/src/instructions/reference/functions/index.md +103 -0
- package/.framework/src/instructions/reference/functions/integration-outbound.md +200 -0
- package/.framework/src/instructions/reference/functions/integration-routes.md +151 -0
- package/.framework/src/instructions/reference/functions/integrations.md +130 -0
- package/.framework/src/instructions/reference/functions/invites.md +182 -0
- package/.framework/src/instructions/reference/functions/item-progress.md +107 -0
- package/.framework/src/instructions/reference/functions/kb.md +166 -0
- package/.framework/src/instructions/reference/functions/logs.md +141 -0
- package/.framework/src/instructions/reference/functions/observability.md +105 -0
- package/.framework/src/instructions/reference/functions/pipeline-executions.md +132 -0
- package/.framework/src/instructions/reference/functions/pipeline-runner-background.md +121 -0
- package/.framework/src/instructions/reference/functions/pipelines.md +136 -0
- package/.framework/src/instructions/reference/functions/prompt-configs.md +121 -0
- package/.framework/src/instructions/reference/functions/roles.md +121 -0
- package/.framework/src/instructions/reference/functions/security.md +140 -0
- package/.framework/src/instructions/reference/functions/system-cron.md +136 -0
- package/.framework/src/instructions/reference/functions/system.md +106 -0
- package/.framework/src/instructions/reference/functions/tests.md +97 -0
- package/.framework/src/instructions/reference/functions/timers.md +117 -0
- package/.framework/src/instructions/reference/functions/trigger-scheduler.md +102 -0
- package/.framework/src/instructions/reference/functions/triggers.md +140 -0
- package/.framework/src/instructions/reference/functions/types.md +146 -0
- package/.framework/src/instructions/reference/seeds.md +126 -0
- package/.framework/src/instructions/reference/shared-modules.md +127 -0
- package/.framework/src/instructions/reference/spine-config.md +114 -0
- package/.framework/src/instructions/roles.md +80 -0
- package/.framework/src/instructions/runtime-detail.md +70 -0
- package/.framework/src/instructions/runtime-list.md +77 -0
- package/.framework/src/instructions/security.md +67 -0
- package/.framework/src/instructions/tasks/add-a-pipeline.md +110 -0
- package/.framework/src/instructions/tasks/add-a-role.md +96 -0
- package/.framework/src/instructions/tasks/add-a-timer.md +114 -0
- package/.framework/src/instructions/tasks/add-a-trigger.md +106 -0
- package/.framework/src/instructions/tasks/add-a-type.md +151 -0
- package/.framework/src/instructions/tasks/add-a-webhook.md +108 -0
- package/.framework/src/instructions/tasks/add-an-ai-agent.md +108 -0
- package/.framework/src/instructions/tasks/add-an-integration.md +124 -0
- package/.framework/src/instructions/tasks/build-a-custom-page.md +118 -0
- package/.framework/src/instructions/tasks/package-and-install-an-app.md +127 -0
- package/.framework/src/instructions/tasks/test-your-code.md +108 -0
- package/.framework/src/instructions/tasks/write-a-function.md +132 -0
- package/.framework/src/instructions/tasks/write-a-migration.md +110 -0
- package/.framework/src/instructions/testing.md +59 -0
- package/.framework/src/instructions/timers.md +82 -0
- package/.framework/src/instructions/triggers.md +69 -0
- package/.framework/src/instructions/types.md +93 -0
- package/.framework/src/pages/NotFoundPage.tsx +62 -31
- package/.framework/src/pages/admin/AIAgentDetailPage.tsx +117 -106
- package/.framework/src/pages/admin/AIAgentsPage.tsx +86 -48
- package/.framework/src/pages/admin/APIKeyDetailPage.tsx +153 -152
- package/.framework/src/pages/admin/APIKeysPage.tsx +91 -90
- package/.framework/src/pages/admin/AlertsConfigPage.tsx +29 -18
- package/.framework/src/pages/admin/AppDetailPage.tsx +6 -60
- package/.framework/src/pages/admin/AppsPage.tsx +104 -66
- package/.framework/src/pages/admin/DeliveriesPage.tsx +5 -5
- package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +5 -23
- package/.framework/src/pages/admin/EmbeddingsPage.tsx +5 -26
- package/.framework/src/pages/admin/IntegrationDetailPage.tsx +7 -7
- package/.framework/src/pages/admin/IntegrationsPage.tsx +85 -43
- package/.framework/src/pages/admin/LogsPage.tsx +144 -76
- package/.framework/src/pages/admin/ObservabilityDashboard.tsx +223 -140
- package/.framework/src/pages/admin/PipelineDetailPage.tsx +134 -113
- package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +108 -45
- package/.framework/src/pages/admin/PipelinesPage.tsx +160 -115
- package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +96 -98
- package/.framework/src/pages/admin/PromptConfigsPage.tsx +101 -59
- package/.framework/src/pages/admin/RoleDetailPage.tsx +90 -79
- package/.framework/src/pages/admin/RolesPage.tsx +86 -43
- package/.framework/src/pages/admin/SecurityPage.tsx +1 -1
- package/.framework/src/pages/admin/TestingDashboard.tsx +16 -28
- package/.framework/src/pages/admin/TimerDetailPage.tsx +117 -100
- package/.framework/src/pages/admin/TimersPage.tsx +90 -62
- package/.framework/src/pages/admin/TriggerDetailPage.tsx +90 -83
- package/.framework/src/pages/admin/TriggersPage.tsx +124 -99
- package/.framework/src/pages/admin/TypeDetailPage.tsx +152 -138
- package/.framework/src/pages/admin/TypesPage.tsx +90 -48
- package/.framework/src/pages/admin/cil/CILAgentPage.tsx +17 -25
- package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +17 -27
- package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +72 -40
- package/.framework/src/pages/admin/cil/CILFileListPage.tsx +321 -129
- package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +18 -29
- package/.framework/src/pages/admin/cil/CILGraphPage.tsx +26 -38
- package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +34 -46
- package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +189 -103
- package/.framework/src/pages/admin/cil/CILSearchPage.tsx +246 -136
- package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +11 -22
- package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +9 -20
- package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +26 -38
- package/.framework/src/pages/admin/kb/KBAdminPage.tsx +7 -26
- package/.framework/templates/agent/AGENTS.md +150 -0
- package/.framework/templates/agent/skills/spine-add-ai-agent/SKILL.md +58 -0
- package/.framework/templates/agent/skills/spine-add-automation/SKILL.md +62 -0
- package/.framework/templates/agent/skills/spine-add-integration/SKILL.md +63 -0
- package/.framework/templates/agent/skills/spine-architect/SKILL.md +86 -0
- package/.framework/templates/agent/skills/spine-install-app/SKILL.md +72 -0
- package/.framework/templates/agent/skills/spine-migration/SKILL.md +75 -0
- package/.framework/templates/agent/skills/spine-new-app/SKILL.md +67 -0
- package/.framework/templates/agent/skills/spine-new-function/SKILL.md +65 -0
- package/.framework/templates/agent/skills/spine-new-type/SKILL.md +65 -0
- package/.framework/templates/agent/skills/spine-schema/SKILL.md +77 -0
- package/.framework/templates/agent/skills/spine-test/SKILL.md +67 -0
- package/.framework/templates/agent/skills/spine-troubleshoot/SKILL.md +74 -0
- package/.framework/templates/agent/skills/spine-upgrade/SKILL.md +69 -0
- package/.framework/templates/project.json +4 -1
- package/.framework/tests/unit/account-scoping-gates.test.ts +392 -0
- package/.framework/tests/unit/agent-files.test.ts +355 -0
- package/.framework/tests/unit/agent-runner.test.ts +479 -44
- package/.framework/tests/unit/api-keys-create-scope-gate.test.ts +160 -0
- package/.framework/tests/unit/api-keys-omit-secret-fields.test.ts +38 -0
- package/.framework/tests/unit/bootstrap.test.ts +242 -0
- package/.framework/tests/unit/cli-context-api-key.test.ts +114 -0
- package/.framework/tests/unit/debug-auth.test.ts +38 -0
- package/.framework/tests/unit/deliveries-account-scoping.test.ts +185 -0
- package/.framework/tests/unit/integration-outbound-credentials.test.ts +167 -0
- package/.framework/tests/unit/integrations-audit-redaction.test.ts +130 -0
- package/.framework/tests/unit/logging-app-id.test.ts +75 -0
- package/.framework/tests/unit/system-context-denial.test.ts +145 -0
- package/.framework/tests/unit/system-cron.test.ts +240 -0
- package/.framework/tests/unit/timers.test.ts +159 -0
- package/README.md +125 -166
- package/config/tsconfig.cli.json +2 -2
- package/package.json +15 -4
- package/templates/project/package-lock.json +2 -2
- package/.framework/docs/admin-routes.md +0 -76
- package/.framework/docs/api-docs-progress.md +0 -38
- package/.framework/docs/api-governance.md +0 -146
- package/.framework/docs/api-testing-results.md +0 -212
- package/.framework/docs/assembly-launch-guide.md +0 -138
- package/.framework/docs/audit-results.md +0 -590
- package/.framework/docs/db-api-inventory.md +0 -95
- package/.framework/docs/gap-remediation-backlog.md +0 -103
- package/.framework/docs/ui-adoption-verification.md +0 -111
- package/.framework/docs/ui-api-coverage.md +0 -84
- package/.framework/docs/v2-compatibility-audit.md +0 -228
- package/.framework/mcp/index.ts +0 -133
- package/.framework/mcp/load-env.ts +0 -60
- package/.framework/mcp/shared/app-manifest.ts +0 -275
- package/.framework/mcp/shared/db.ts +0 -477
- package/.framework/mcp/shared/kb.ts +0 -118
- package/.framework/mcp/tools/architect.ts +0 -431
- package/.framework/mcp/tools/cil/context.ts +0 -345
- package/.framework/mcp/tools/cil/graph.ts +0 -242
- package/.framework/mcp/tools/cil/ingest.ts +0 -1217
- package/.framework/mcp/tools/cil/pipeline-orchestrator.ts +0 -693
- package/.framework/mcp/tools/cil/pipeline.ts +0 -767
- package/.framework/mcp/tools/cil/project.ts +0 -791
- package/.framework/mcp/tools/cil/retrieval.ts +0 -336
- package/.framework/mcp/tools/cil/search-core.ts +0 -454
- package/.framework/mcp/tools/cil/search.ts +0 -97
- package/.framework/mcp/tools/cil/suggest.ts +0 -186
- package/.framework/mcp/tools/cil/validate.ts +0 -1369
- package/.framework/mcp/tools/kb/delete.ts +0 -139
- package/.framework/mcp/tools/kb/index.ts +0 -52
- package/.framework/mcp/tools/kb/ingest.ts +0 -84
- package/.framework/mcp/tools/kb/list-types.ts +0 -102
- package/.framework/mcp/tools/kb/publish.ts +0 -100
- package/.framework/mcp/tools/kb/reindex.ts +0 -86
- package/.framework/mcp/tools/kb/revoke.ts +0 -85
- package/.framework/mcp/tools/kb/search.ts +0 -101
- package/.framework/mcp/tools/kb/upsert.ts +0 -125
- package/.framework/mcp/tools/observability.ts +0 -510
|
@@ -1,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,9 @@ 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
109
|
// CIL[DOC-MACRO purpose="VALID_ENTITIES constant"]
|
|
110
110
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the VALID_ENTITIES constant."]
|
|
111
111
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -134,7 +134,6 @@ const VALID_ENTITIES = ['accounts', 'people', 'items', 'threads', 'messages', 'l
|
|
|
134
134
|
* @stability stable
|
|
135
135
|
* @cil-generated
|
|
136
136
|
*/
|
|
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
137
|
// CIL[DOC-MACRO purpose="RAW_ENTITIES constant"]
|
|
139
138
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the RAW_ENTITIES constant."]
|
|
140
139
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -142,11 +141,14 @@ const VALID_ENTITIES = ['accounts', 'people', 'items', 'threads', 'messages', 'l
|
|
|
142
141
|
// CIL[DOC-MICRO logic_summary="Implements the RAW_ENTITIES constant." notable_decisions="[]"]
|
|
143
142
|
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
144
143
|
// CIL[DOC-STABILITY stability="stable"]
|
|
144
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:RAW_ENTITIES:constant" type="constant" identity="RAW_ENTITIES" parent="~/.framework/functions/admin-data.ts"]
|
|
145
145
|
const RAW_ENTITIES = ['logs', 'test_runs', 'observability', 'test_cases']
|
|
146
|
+
// CIL[END stable_id="~/.framework/functions/admin-data.ts:RAW_ENTITIES:constant"]
|
|
146
147
|
// Entities with no created_by/updated_by columns — audit stamps must be
|
|
147
148
|
// omitted or writes fail with schema-cache errors.
|
|
149
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:UNAUDITED_ENTITIES:constant" type="constant" identity="UNAUDITED_ENTITIES" parent="~/.framework/functions/admin-data.ts"]
|
|
148
150
|
const UNAUDITED_ENTITIES = ['types', 'link_types']
|
|
149
|
-
// CIL[END stable_id="~/.framework/functions/admin-data.ts:
|
|
151
|
+
// CIL[END stable_id="~/.framework/functions/admin-data.ts:UNAUDITED_ENTITIES:constant"]
|
|
150
152
|
// CIL[DOC-MACRO purpose="RAW_ENTITIES constant"]
|
|
151
153
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the RAW_ENTITIES constant."]
|
|
152
154
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -175,7 +177,6 @@ const UNAUDITED_ENTITIES = ['types', 'link_types']
|
|
|
175
177
|
* @stability stable
|
|
176
178
|
* @cil-generated
|
|
177
179
|
*/
|
|
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
180
|
// CIL[DOC-MACRO purpose="ENTITY_TO_KIND constant"]
|
|
180
181
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the ENTITY_TO_KIND constant."]
|
|
181
182
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -183,6 +184,7 @@ const UNAUDITED_ENTITIES = ['types', 'link_types']
|
|
|
183
184
|
// CIL[DOC-MICRO logic_summary="Implements the ENTITY_TO_KIND constant." notable_decisions="[]"]
|
|
184
185
|
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
185
186
|
// CIL[DOC-STABILITY stability="stable"]
|
|
187
|
+
// 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
188
|
const ENTITY_TO_KIND: Record<string, string> = {
|
|
187
189
|
accounts: 'account',
|
|
188
190
|
people: 'person',
|
|
@@ -194,7 +196,7 @@ const ENTITY_TO_KIND: Record<string, string> = {
|
|
|
194
196
|
watchers: 'watcher',
|
|
195
197
|
item_progress: 'item_progress'
|
|
196
198
|
}
|
|
197
|
-
// CIL[END stable_id="~/.framework/functions/admin-data.ts:
|
|
199
|
+
// CIL[END stable_id="~/.framework/functions/admin-data.ts:ENTITY_TO_KIND:constant"]
|
|
198
200
|
// 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
201
|
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
200
202
|
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
@@ -217,7 +219,6 @@ const ENTITY_TO_KIND: Record<string, string> = {
|
|
|
217
219
|
* @calls withAdminLogging, resolveTypeIds, getSearchField
|
|
218
220
|
* @cil-generated
|
|
219
221
|
*/
|
|
220
|
-
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:list:constant" type="constant" identity="list" parent="~/.framework/functions/admin-data.ts"]
|
|
221
222
|
// CIL[DOC-MACRO purpose="list constant"]
|
|
222
223
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the list constant."]
|
|
223
224
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -225,8 +226,9 @@ const ENTITY_TO_KIND: Record<string, string> = {
|
|
|
225
226
|
// CIL[DOC-MICRO logic_summary="Implements the list constant." notable_decisions="[]"]
|
|
226
227
|
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
227
228
|
// CIL[DOC-STABILITY stability="stable"]
|
|
229
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:list:constant" type="constant" identity="list" parent="~/.framework/functions/admin-data.ts"]
|
|
228
230
|
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 || {}
|
|
231
|
+
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
232
|
|
|
231
233
|
return await withAdminLogging(
|
|
232
234
|
ctx,
|
|
@@ -292,6 +294,12 @@ export const list = createHandler(async (ctx, _body) => {
|
|
|
292
294
|
}
|
|
293
295
|
})
|
|
294
296
|
|
|
297
|
+
// Soft-deleted rows are hidden by default — pass is_active=false or
|
|
298
|
+
// include_inactive=true to see them.
|
|
299
|
+
if (filters.is_active === undefined && include_inactive !== 'true') {
|
|
300
|
+
query = query.eq('is_active', true)
|
|
301
|
+
}
|
|
302
|
+
|
|
295
303
|
// Generic record-flag filters on the row's data jsonb. flag_only=<field>
|
|
296
304
|
// returns only rows where data->>field is 'true'; exclude_flag=<field>
|
|
297
305
|
// hides them (null counts as unset). Flag fields are stamped server-side
|
|
@@ -405,7 +413,6 @@ export const list = createHandler(async (ctx, _body) => {
|
|
|
405
413
|
* @errorHandling returns null on error during data fetching.
|
|
406
414
|
* @cil-generated
|
|
407
415
|
*/
|
|
408
|
-
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:attachlineage:function" type="function" identity="attachLineage" parent="~/.framework/functions/admin-data.ts"]
|
|
409
416
|
// CIL[DOC-MACRO purpose="attachLineage function"]
|
|
410
417
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the attachLineage function from type-declared lineage config."]
|
|
411
418
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -413,6 +420,7 @@ export const list = createHandler(async (ctx, _body) => {
|
|
|
413
420
|
// 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
421
|
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
415
422
|
// CIL[DOC-STABILITY stability="stable"]
|
|
423
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:attachLineage:function" type="function" identity="attachLineage" parent="~/.framework/functions/admin-data.ts"]
|
|
416
424
|
async function attachLineage(record: any, ctx: any): Promise<void> {
|
|
417
425
|
// Lineage is declared per item type in design_schema.functionality.lineage:
|
|
418
426
|
// { parent_fields: string[], link_type: string, children: { [childTypeSlug]: field } }
|
|
@@ -516,7 +524,7 @@ async function attachLineage(record: any, ctx: any): Promise<void> {
|
|
|
516
524
|
record.parents = parents
|
|
517
525
|
record.children = children
|
|
518
526
|
}
|
|
519
|
-
// CIL[END stable_id="~/.framework/functions/admin-data.ts:
|
|
527
|
+
// CIL[END stable_id="~/.framework/functions/admin-data.ts:attachLineage:function"]
|
|
520
528
|
// 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
529
|
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
522
530
|
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
@@ -540,7 +548,6 @@ async function attachLineage(record: any, ctx: any): Promise<void> {
|
|
|
540
548
|
* @calls withAdminLogging, ctx.db.from, sanitizeRecordData, adminDb.from, attachLineage, projectMessageForCustomer
|
|
541
549
|
* @cil-generated
|
|
542
550
|
*/
|
|
543
|
-
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:get:constant" type="constant" identity="get" parent="~/.framework/functions/admin-data.ts"]
|
|
544
551
|
// CIL[DOC-MACRO purpose="get constant"]
|
|
545
552
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the get constant."]
|
|
546
553
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -548,6 +555,7 @@ async function attachLineage(record: any, ctx: any): Promise<void> {
|
|
|
548
555
|
// CIL[DOC-MICRO logic_summary="Implements the get constant." notable_decisions="[]"]
|
|
549
556
|
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
550
557
|
// CIL[DOC-STABILITY stability="stable"]
|
|
558
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:get:constant" type="constant" identity="get" parent="~/.framework/functions/admin-data.ts"]
|
|
551
559
|
export const get = createHandler(async (ctx, _body) => {
|
|
552
560
|
const { entity, id, view: viewSlug } = ctx.query || {}
|
|
553
561
|
const method = ctx.query?.method || 'GET'
|
|
@@ -639,7 +647,6 @@ export const get = createHandler(async (ctx, _body) => {
|
|
|
639
647
|
* @calls withAdminLogging, ctx.db.from, fireCreateTriggers, sanitizeRecordData
|
|
640
648
|
* @cil-generated
|
|
641
649
|
*/
|
|
642
|
-
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:create:constant" type="constant" identity="create" parent="~/.framework/functions/admin-data.ts"]
|
|
643
650
|
// CIL[DOC-MACRO purpose="create constant"]
|
|
644
651
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the create constant."]
|
|
645
652
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -647,6 +654,7 @@ export const get = createHandler(async (ctx, _body) => {
|
|
|
647
654
|
// CIL[DOC-MICRO logic_summary="Implements the create constant." notable_decisions="[]"]
|
|
648
655
|
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
649
656
|
// CIL[DOC-STABILITY stability="stable"]
|
|
657
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:create:constant" type="constant" identity="create" parent="~/.framework/functions/admin-data.ts"]
|
|
650
658
|
export const create = createHandler(async (ctx, body) => {
|
|
651
659
|
const entity = body?.entity || ctx.query?.entity
|
|
652
660
|
const type_slug = body?.type_slug
|
|
@@ -686,7 +694,8 @@ export const create = createHandler(async (ctx, body) => {
|
|
|
686
694
|
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
695
|
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
696
|
|
|
689
|
-
const
|
|
697
|
+
const rawInsertDb = (ctx.principal?.isInternal || isSystemAdmin(ctx.principal)) ? adminDb : ctx.db
|
|
698
|
+
const { data, error: err } = await rawInsertDb.from(entity).insert(raw).select().single()
|
|
690
699
|
if (err) throw err
|
|
691
700
|
// Await the trigger check: the heavy work already offloads to
|
|
692
701
|
// pipeline-runner-background, so this only adds eval + queue insert
|
|
@@ -802,7 +811,9 @@ export const create = createHandler(async (ctx, body) => {
|
|
|
802
811
|
throw e
|
|
803
812
|
}
|
|
804
813
|
|
|
805
|
-
|
|
814
|
+
// Function-side permission check already ran — write via service role.
|
|
815
|
+
// ctx.db is PostgREST `authenticated` for humans, which holds SELECT only.
|
|
816
|
+
const insertDb = adminDb
|
|
806
817
|
|
|
807
818
|
const { data, error: err } = await insertDb.from(entity)
|
|
808
819
|
.insert(dataToInsert)
|
|
@@ -841,7 +852,6 @@ export const create = createHandler(async (ctx, body) => {
|
|
|
841
852
|
* @calls withAdminLogging, validateUpdatePermissions, ctx.db.from, fireUpdateTriggers, sanitizeRecordData
|
|
842
853
|
* @cil-generated
|
|
843
854
|
*/
|
|
844
|
-
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:update:constant" type="constant" identity="update" parent="~/.framework/functions/admin-data.ts"]
|
|
845
855
|
// CIL[DOC-MACRO purpose="update constant"]
|
|
846
856
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the update constant."]
|
|
847
857
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -849,6 +859,7 @@ export const create = createHandler(async (ctx, body) => {
|
|
|
849
859
|
// CIL[DOC-MICRO logic_summary="Implements the update constant." notable_decisions="[]"]
|
|
850
860
|
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
851
861
|
// CIL[DOC-STABILITY stability="stable"]
|
|
862
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:update:constant" type="constant" identity="update" parent="~/.framework/functions/admin-data.ts"]
|
|
852
863
|
export const update = createHandler(async (ctx, body) => {
|
|
853
864
|
const { entity, id } = ctx.query || {}
|
|
854
865
|
const method = ctx.query?.method || 'PATCH'
|
|
@@ -910,7 +921,7 @@ export const update = createHandler(async (ctx, body) => {
|
|
|
910
921
|
updated_at: new Date().toISOString()
|
|
911
922
|
}
|
|
912
923
|
|
|
913
|
-
const { data, error: err } = await
|
|
924
|
+
const { data, error: err } = await adminDb.from(entity)
|
|
914
925
|
.update(dataToUpdate)
|
|
915
926
|
.eq('id', id)
|
|
916
927
|
.select()
|
|
@@ -950,7 +961,6 @@ export const update = createHandler(async (ctx, body) => {
|
|
|
950
961
|
* @calls withAdminLogging, ctx.db.from, resolveFirstSurfacePermissions, entitySupportsSoftDelete, sanitizeRecordData
|
|
951
962
|
* @cil-generated
|
|
952
963
|
*/
|
|
953
|
-
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:remove:constant" type="constant" identity="remove" parent="~/.framework/functions/admin-data.ts"]
|
|
954
964
|
// CIL[DOC-MACRO purpose="remove constant"]
|
|
955
965
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the remove constant."]
|
|
956
966
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -958,6 +968,7 @@ export const update = createHandler(async (ctx, body) => {
|
|
|
958
968
|
// CIL[DOC-MICRO logic_summary="Implements the remove constant." notable_decisions="[]"]
|
|
959
969
|
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
960
970
|
// CIL[DOC-STABILITY stability="stable"]
|
|
971
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:remove:constant" type="constant" identity="remove" parent="~/.framework/functions/admin-data.ts"]
|
|
961
972
|
export const remove = createHandler(async (ctx, _body) => {
|
|
962
973
|
const { entity, id, soft = 'true' } = ctx.query || {}
|
|
963
974
|
const method = ctx.query?.method || 'DELETE'
|
|
@@ -1006,7 +1017,7 @@ export const remove = createHandler(async (ctx, _body) => {
|
|
|
1006
1017
|
const isSoftDelete = soft === 'true'
|
|
1007
1018
|
|
|
1008
1019
|
if (isSoftDelete && entitySupportsSoftDelete(entity)) {
|
|
1009
|
-
const { data, error: err } = await
|
|
1020
|
+
const { data, error: err } = await adminDb.from(entity)
|
|
1010
1021
|
.update({
|
|
1011
1022
|
is_active: false,
|
|
1012
1023
|
updated_by: ctx.principal?.type === 'human' ? ctx.principal.id : null,
|
|
@@ -1019,7 +1030,7 @@ export const remove = createHandler(async (ctx, _body) => {
|
|
|
1019
1030
|
if (err) throw err
|
|
1020
1031
|
return { deleted: true, soft: true, data: await sanitizeRecordData(ctx, data, entity) }
|
|
1021
1032
|
} else {
|
|
1022
|
-
const { error: err } = await
|
|
1033
|
+
const { error: err } = await adminDb.from(entity)
|
|
1023
1034
|
.delete()
|
|
1024
1035
|
.eq('id', id)
|
|
1025
1036
|
|
|
@@ -1053,7 +1064,6 @@ export const remove = createHandler(async (ctx, _body) => {
|
|
|
1053
1064
|
* @stability stable
|
|
1054
1065
|
* @cil-generated
|
|
1055
1066
|
*/
|
|
1056
|
-
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:getsearchfield:function" type="function" identity="getSearchField" parent="~/.framework/functions/admin-data.ts"]
|
|
1057
1067
|
// CIL[DOC-MACRO purpose="getSearchField function"]
|
|
1058
1068
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the getSearchField function."]
|
|
1059
1069
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -1061,6 +1071,7 @@ export const remove = createHandler(async (ctx, _body) => {
|
|
|
1061
1071
|
// CIL[DOC-MICRO logic_summary="Implements the getSearchField function." notable_decisions="[]"]
|
|
1062
1072
|
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
1063
1073
|
// CIL[DOC-STABILITY stability="stable"]
|
|
1074
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:getSearchField:function" type="function" identity="getSearchField" parent="~/.framework/functions/admin-data.ts"]
|
|
1064
1075
|
function getSearchField(entity: string): string {
|
|
1065
1076
|
const searchFields: Record<string, string> = {
|
|
1066
1077
|
accounts: 'display_name',
|
|
@@ -1079,7 +1090,7 @@ function getSearchField(entity: string): string {
|
|
|
1079
1090
|
}
|
|
1080
1091
|
return searchFields[entity] || 'id'
|
|
1081
1092
|
}
|
|
1082
|
-
// CIL[END stable_id="~/.framework/functions/admin-data.ts:
|
|
1093
|
+
// CIL[END stable_id="~/.framework/functions/admin-data.ts:getSearchField:function"]
|
|
1083
1094
|
// 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
1095
|
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
1085
1096
|
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
@@ -1103,7 +1114,6 @@ function getSearchField(entity: string): string {
|
|
|
1103
1114
|
* @stability stable
|
|
1104
1115
|
* @cil-generated
|
|
1105
1116
|
*/
|
|
1106
|
-
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:entitysupportssoftdelete:function" type="function" identity="entitySupportsSoftDelete" parent="~/.framework/functions/admin-data.ts"]
|
|
1107
1117
|
// CIL[DOC-MACRO purpose="entitySupportsSoftDelete function"]
|
|
1108
1118
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the entitySupportsSoftDelete function."]
|
|
1109
1119
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -1111,11 +1121,12 @@ function getSearchField(entity: string): string {
|
|
|
1111
1121
|
// CIL[DOC-MICRO logic_summary="Implements the entitySupportsSoftDelete function." notable_decisions="[]"]
|
|
1112
1122
|
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
1113
1123
|
// CIL[DOC-STABILITY stability="stable"]
|
|
1124
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:entitySupportsSoftDelete:function" type="function" identity="entitySupportsSoftDelete" parent="~/.framework/functions/admin-data.ts"]
|
|
1114
1125
|
function entitySupportsSoftDelete(entity: string): boolean {
|
|
1115
1126
|
const softDeleteEntities = ['accounts', 'people', 'items', 'threads', 'messages', 'watchers', 'item_progress', 'test_cases']
|
|
1116
1127
|
return softDeleteEntities.includes(entity)
|
|
1117
1128
|
}
|
|
1118
|
-
// CIL[END stable_id="~/.framework/functions/admin-data.ts:
|
|
1129
|
+
// CIL[END stable_id="~/.framework/functions/admin-data.ts:entitySupportsSoftDelete:function"]
|
|
1119
1130
|
// 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
1131
|
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
1121
1132
|
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
@@ -1138,7 +1149,6 @@ function entitySupportsSoftDelete(entity: string): boolean {
|
|
|
1138
1149
|
* @calls withAdminLogging, ctx.db.from
|
|
1139
1150
|
* @cil-generated
|
|
1140
1151
|
*/
|
|
1141
|
-
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:stats:constant" type="constant" identity="stats" parent="~/.framework/functions/admin-data.ts"]
|
|
1142
1152
|
// CIL[DOC-MACRO purpose="stats constant"]
|
|
1143
1153
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the stats constant."]
|
|
1144
1154
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -1146,6 +1156,7 @@ function entitySupportsSoftDelete(entity: string): boolean {
|
|
|
1146
1156
|
// CIL[DOC-MICRO logic_summary="Implements the stats constant." notable_decisions="[]"]
|
|
1147
1157
|
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
1148
1158
|
// CIL[DOC-STABILITY stability="stable"]
|
|
1159
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:stats:constant" type="constant" identity="stats" parent="~/.framework/functions/admin-data.ts"]
|
|
1149
1160
|
export const stats = createHandler(async (ctx, _body) => {
|
|
1150
1161
|
const { entity } = ctx.query || {}
|
|
1151
1162
|
const method = ctx.query?.method || 'GET'
|
|
@@ -1194,7 +1205,6 @@ export const stats = createHandler(async (ctx, _body) => {
|
|
|
1194
1205
|
* @calls list, get, stats, create, update, remove
|
|
1195
1206
|
* @cil-generated
|
|
1196
1207
|
*/
|
|
1197
|
-
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:handler:constant" type="constant" identity="handler" parent="~/.framework/functions/admin-data.ts"]
|
|
1198
1208
|
// CIL[DOC-MACRO purpose="handler constant"]
|
|
1199
1209
|
// CIL[DOC-RESPONSIBILITY responsibility="Implements the handler constant."]
|
|
1200
1210
|
// CIL[DOC-CONTEXT module=".framework/functions/admin-data.ts" layer="app-specific" related_files=""]
|
|
@@ -1202,6 +1212,7 @@ export const stats = createHandler(async (ctx, _body) => {
|
|
|
1202
1212
|
// CIL[DOC-MICRO logic_summary="Implements the handler constant." notable_decisions="[]"]
|
|
1203
1213
|
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
1204
1214
|
// CIL[DOC-STABILITY stability="stable"]
|
|
1215
|
+
// CIL[BEGIN stable_id="~/.framework/functions/admin-data.ts:handler:constant" type="constant" identity="handler" parent="~/.framework/functions/admin-data.ts"]
|
|
1205
1216
|
export const handler = createHandler(async (ctx, body) => {
|
|
1206
1217
|
const { action } = ctx.query || {}
|
|
1207
1218
|
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)
|