spine-framework 0.3.124 → 0.3.126
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.framework/cli/commands/agents.ts +35 -37
- package/.framework/cli/commands/auth.ts +35 -34
- package/.framework/cli/commands/create-app.ts +104 -40
- package/.framework/cli/commands/dev.ts +104 -69
- package/.framework/cli/commands/doctor.ts +179 -69
- package/.framework/cli/commands/generate.ts +83 -143
- package/.framework/cli/commands/init.ts +72 -34
- package/.framework/cli/commands/install-app.ts +260 -125
- package/.framework/cli/commands/items.ts +33 -44
- package/.framework/cli/commands/migrate.ts +122 -40
- package/.framework/cli/commands/migrations.ts +33 -40
- package/.framework/cli/commands/pipelines.ts +31 -39
- package/.framework/cli/commands/status.ts +47 -23
- package/.framework/cli/commands/system.ts +47 -37
- package/.framework/cli/commands/test.ts +112 -68
- package/.framework/cli/commands/validate-app.ts +215 -121
- package/.framework/cli/context.ts +112 -130
- package/.framework/cli/env-loader.ts +47 -18
- package/.framework/cli/index.ts +81 -42
- package/.framework/docs/runtime-types.md +1024 -0
- package/.framework/functions/_shared/agent-runner.ts +1296 -961
- package/.framework/functions/_shared/app-manifest.ts +82 -68
- package/.framework/functions/_shared/audit.ts +135 -83
- package/.framework/functions/_shared/{cil-state.ts → cil.ts} +158 -56
- package/.framework/functions/_shared/db.ts +80 -126
- package/.framework/functions/_shared/hash-api-key.ts +63 -0
- package/.framework/functions/_shared/index.ts +224 -335
- package/.framework/functions/_shared/kb.ts +319 -0
- package/.framework/functions/_shared/llm.ts +92 -0
- package/.framework/functions/_shared/logging.ts +288 -0
- package/.framework/functions/_shared/middleware.ts +329 -365
- package/.framework/functions/_shared/outcomes.ts +36 -0
- package/.framework/functions/_shared/permissions.ts +359 -643
- package/.framework/functions/_shared/pipeline-runner.ts +243 -316
- package/.framework/functions/_shared/principal.ts +376 -468
- package/.framework/functions/_shared/resolve-credentials.ts +102 -0
- package/.framework/functions/_shared/resolve-ids.ts +188 -16
- package/.framework/functions/_shared/retry-deliveries.ts +104 -0
- package/.framework/functions/_shared/schema-utils.ts +611 -373
- package/.framework/functions/_shared/testing.ts +207 -137
- package/.framework/functions/_shared/tracing.ts +276 -0
- package/.framework/functions/_shared/trigger-engine.ts +159 -211
- package/.framework/functions/_shared/webhook-registration.ts +95 -81
- package/.framework/functions/_shared/webhook-registry.ts +153 -75
- package/.framework/functions/account-nodes.ts +31 -53
- package/.framework/functions/adapters/generic-webhook-inbound.ts +56 -0
- package/.framework/functions/adapters/generic-webhook-outbound.ts +43 -0
- package/.framework/functions/adapters/openai-outbound.ts +40 -0
- package/.framework/functions/admin-data.ts +685 -537
- package/.framework/functions/admin-funnel.ts +31 -20
- package/.framework/functions/admin-install-funnel.ts +47 -28
- package/.framework/functions/admin-signals.ts +47 -29
- package/.framework/functions/ai-agents.ts +122 -147
- package/.framework/functions/ai-interactions.ts +180 -90
- package/.framework/functions/api-keys.ts +250 -192
- package/.framework/functions/apps.ts +203 -197
- package/.framework/functions/auth.ts +98 -91
- package/.framework/functions/cil-agent-ingest.ts +773 -0
- package/.framework/functions/cil-agent.ts +592 -0
- package/.framework/functions/cil-callmap.ts +1227 -0
- package/.framework/functions/cil-config.ts +583 -0
- package/.framework/functions/cil-context.ts +445 -0
- package/.framework/functions/cil-doc.ts +1752 -0
- package/.framework/functions/cil-embeddings.ts +1202 -0
- package/.framework/functions/cil-graph.ts +585 -0
- package/.framework/functions/cil-ingest.ts +2416 -0
- package/.framework/functions/cil-pipeline.ts +318 -0
- package/.framework/functions/cil-project.ts +499 -0
- package/.framework/functions/cil-validate.ts +469 -0
- package/.framework/functions/debug-auth.ts +73 -53
- package/.framework/functions/deliveries.ts +117 -0
- package/.framework/functions/embeddings.ts +528 -516
- package/.framework/functions/eval-harness.ts +158 -106
- package/.framework/functions/integration-outbound.ts +311 -0
- package/.framework/functions/integration-routes.ts +240 -466
- package/.framework/functions/integrations.ts +132 -140
- package/.framework/functions/invites.ts +401 -201
- package/.framework/functions/item-progress.ts +113 -53
- package/.framework/functions/kb.ts +28 -0
- package/.framework/functions/logs.ts +239 -222
- package/.framework/functions/observability.ts +308 -259
- package/.framework/functions/pipeline-executions.ts +179 -235
- package/.framework/functions/pipelines.ts +163 -205
- package/.framework/functions/prompt-configs.ts +109 -156
- package/.framework/functions/roles.ts +97 -147
- package/.framework/functions/system-cron.ts +132 -218
- package/.framework/functions/system.ts +112 -52
- package/.framework/functions/tests.ts +32 -28
- package/.framework/functions/timers.ts +162 -210
- package/.framework/functions/triggers.ts +282 -346
- package/.framework/functions/types.ts +283 -400
- package/.framework/migrations/001_core_schema.sql +630 -0
- package/.framework/migrations/002_core_rls_and_functions.sql +532 -0
- package/.framework/migrations/{003_system_data.sql → 003_core_system_data.sql} +26 -153
- package/.framework/migrations/004_core_rpc_and_broker.sql +421 -0
- package/.framework/migrations/005_core_observability.sql +598 -0
- package/.framework/migrations/006_security_hardening_rls.sql +97 -0
- package/.framework/migrations/007_kb_article_list.sql +237 -0
- package/.framework/migrations/008_items_target.sql +8 -0
- package/.framework/migrations/009_roles_slug_unique.sql +11 -0
- package/.framework/public/spine.config.json +91 -0
- package/.framework/scripts/app-install-cli.ts +112 -98
- package/.framework/src/App.tsx +67 -20
- package/.framework/src/apps/admin/index.tsx +97 -27
- package/.framework/src/components/AppWrapper.tsx +50 -11
- package/.framework/src/components/CustomAppLoader.tsx +131 -22
- package/.framework/src/components/admin/AdminListPage.tsx +75 -8
- package/.framework/src/components/admin/AdminSidebar.tsx +148 -36
- package/.framework/src/components/admin/AdminStatsCard.tsx +48 -29
- package/.framework/src/components/admin/PageInstructions.tsx +49 -0
- package/.framework/src/components/admin/SortableTableHeader.tsx +49 -2
- package/.framework/src/components/app-shell/GenericAppShell.tsx +69 -11
- package/.framework/src/components/app-shell/GenericDetailPage.tsx +55 -10
- package/.framework/src/components/app-shell/GenericListPage.tsx +76 -9
- package/.framework/src/components/app-sidebar.tsx +50 -3
- package/.framework/src/components/auth/ProtectedRoute.tsx +53 -45
- package/.framework/src/components/kb/KBArticleEditor.tsx +409 -0
- package/.framework/src/components/kb/KBArticleList.tsx +557 -0
- package/.framework/src/components/layout/AppShell.tsx +54 -16
- package/.framework/src/components/layout/Header.tsx +50 -38
- package/.framework/src/components/layout/Layout.tsx +48 -32
- package/.framework/src/components/layout/Sidebar.tsx +167 -16
- package/.framework/src/components/runtime/DataDetailHeader.tsx +33 -1
- package/.framework/src/components/runtime/DataDetailPage.tsx +289 -4
- package/.framework/src/components/runtime/DataFilters.tsx +78 -1
- package/.framework/src/components/runtime/DataHeader.tsx +32 -29
- package/.framework/src/components/runtime/DataListPage.tsx +161 -2
- package/.framework/src/components/runtime/DataStats.tsx +48 -1
- package/.framework/src/components/runtime/DataTable.tsx +153 -1
- package/.framework/src/components/runtime/SchemaDetailForm.tsx +77 -46
- package/.framework/src/components/runtime/index.ts +16 -9
- package/.framework/src/components/search-form.tsx +33 -1
- package/.framework/src/components/shared/AgentView.tsx +48 -51
- package/.framework/src/components/shared/FieldRenderer.tsx +84 -67
- package/.framework/src/components/shared/InviteManager.tsx +113 -52
- package/.framework/src/components/shared/MemberList.tsx +182 -0
- package/.framework/src/components/shared/SchemaFields.tsx +96 -78
- package/.framework/src/components/ui/DataTable.tsx +86 -56
- package/.framework/src/components/ui/Form.tsx +188 -109
- package/.framework/src/components/ui/ItemCard.tsx +86 -58
- package/.framework/src/components/ui/ItemListView.tsx +88 -61
- package/.framework/src/components/ui/LoadingSpinner.tsx +52 -27
- package/.framework/src/components/ui/Modal.tsx +81 -4
- package/.framework/src/components/ui/RichTextEditor.tsx +101 -9
- package/.framework/src/components/ui/accordion.tsx +97 -5
- package/.framework/src/components/ui/alert-dialog.tsx +225 -13
- package/.framework/src/components/ui/alert.tsx +113 -6
- package/.framework/src/components/ui/aspect-ratio.tsx +49 -2
- package/.framework/src/components/ui/avatar.tsx +129 -7
- package/.framework/src/components/ui/badge.tsx +65 -3
- package/.framework/src/components/ui/breadcrumb.tsx +145 -8
- package/.framework/src/components/ui/button-group.tsx +81 -4
- package/.framework/src/components/ui/button.tsx +49 -2
- package/.framework/src/components/ui/calendar.tsx +65 -3
- package/.framework/src/components/ui/card.tsx +145 -8
- package/.framework/src/components/ui/carousel.tsx +129 -7
- package/.framework/src/components/ui/chart.tsx +161 -10
- package/.framework/src/components/ui/checkbox.tsx +49 -2
- package/.framework/src/components/ui/collapsible.tsx +81 -5
- package/.framework/src/components/ui/combobox.tsx +305 -20
- package/.framework/src/components/ui/command.tsx +177 -11
- package/.framework/src/components/ui/context-menu.tsx +273 -17
- package/.framework/src/components/ui/dialog.tsx +209 -27
- package/.framework/src/components/ui/direction.tsx +64 -4
- package/.framework/src/components/ui/drawer.tsx +193 -12
- package/.framework/src/components/ui/dropdown-menu.tsx +273 -18
- package/.framework/src/components/ui/empty.tsx +145 -9
- package/.framework/src/components/ui/field.tsx +209 -14
- package/.framework/src/components/ui/hover-card.tsx +81 -4
- package/.framework/src/components/ui/input-group.tsx +162 -10
- package/.framework/src/components/ui/input-otp.tsx +98 -5
- package/.framework/src/components/ui/input.tsx +49 -2
- package/.framework/src/components/ui/item.tsx +225 -13
- package/.framework/src/components/ui/kbd.tsx +65 -3
- package/.framework/src/components/ui/label.tsx +49 -2
- package/.framework/src/components/ui/menubar.tsx +289 -17
- package/.framework/src/components/ui/native-select.tsx +97 -5
- package/.framework/src/components/ui/navigation-menu.tsx +177 -10
- package/.framework/src/components/ui/pagination.tsx +161 -9
- package/.framework/src/components/ui/popover.tsx +145 -8
- package/.framework/src/components/ui/progress.tsx +49 -2
- package/.framework/src/components/ui/radio-group.tsx +65 -3
- package/.framework/src/components/ui/resizable.tsx +82 -4
- package/.framework/src/components/ui/scroll-area.tsx +65 -3
- package/.framework/src/components/ui/select.tsx +193 -11
- package/.framework/src/components/ui/separator.tsx +49 -2
- package/.framework/src/components/ui/sheet.tsx +193 -11
- package/.framework/src/components/ui/sidebar.tsx +481 -38
- package/.framework/src/components/ui/skeleton.tsx +49 -2
- package/.framework/src/components/ui/slider.tsx +49 -2
- package/.framework/src/components/ui/sonner.tsx +49 -2
- package/.framework/src/components/ui/spinner.tsx +49 -2
- package/.framework/src/components/ui/switch.tsx +49 -2
- package/.framework/src/components/ui/table-primitives.tsx +160 -33
- package/.framework/src/components/ui/table.tsx +161 -9
- package/.framework/src/components/ui/tabs.tsx +113 -6
- package/.framework/src/components/ui/textarea.tsx +49 -2
- package/.framework/src/components/ui/toggle-group.tsx +81 -4
- package/.framework/src/components/ui/toggle.tsx +65 -3
- package/.framework/src/components/ui/tooltip.tsx +97 -5
- package/.framework/src/contexts/AppContext.tsx +129 -45
- package/.framework/src/contexts/AuthContext.tsx +187 -144
- package/.framework/src/hooks/use-mobile.ts +48 -2
- package/.framework/src/hooks/useApi.ts +208 -159
- package/.framework/src/hooks/useAppPath.ts +32 -23
- package/.framework/src/hooks/useApps.ts +51 -20
- package/.framework/src/hooks/useEntityList.ts +32 -78
- package/.framework/src/hooks/useEntityRecord.ts +35 -96
- package/.framework/src/hooks/useForm.ts +32 -92
- package/.framework/src/hooks/useListSchema.ts +49 -78
- package/.framework/src/hooks/useSchemaRecord.ts +114 -105
- package/.framework/src/lib/api.ts +195 -116
- package/.framework/src/lib/supabase.ts +98 -64
- package/.framework/src/lib/utils.ts +287 -151
- package/.framework/src/main.tsx +49 -3
- package/.framework/src/pages/DashboardPage.tsx +52 -29
- package/.framework/src/pages/NotFoundPage.tsx +32 -10
- package/.framework/src/pages/SetupPage.tsx +32 -12
- package/.framework/src/pages/admin/AIAgentDetailPage.tsx +119 -10
- package/.framework/src/pages/admin/AIAgentsPage.tsx +48 -19
- package/.framework/src/pages/admin/APIKeyDetailPage.tsx +187 -17
- package/.framework/src/pages/admin/APIKeysPage.tsx +98 -22
- package/.framework/src/pages/admin/AlertsConfigPage.tsx +113 -26
- package/.framework/src/pages/admin/AppDetailPage.tsx +125 -8
- package/.framework/src/pages/admin/AppsPage.tsx +49 -2
- package/.framework/src/pages/admin/DeliveriesPage.tsx +196 -0
- package/.framework/src/pages/admin/DesignedPage.tsx +32 -18
- package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +215 -484
- package/.framework/src/pages/admin/EmbeddingsPage.tsx +116 -319
- package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -16
- package/.framework/src/pages/admin/IntegrationDetailPage.tsx +183 -26
- package/.framework/src/pages/admin/IntegrationsPage.tsx +48 -19
- package/.framework/src/pages/admin/InvitesPage.tsx +48 -14
- package/.framework/src/pages/admin/LogsPage.tsx +422 -75
- package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/ObservabilityDashboard.tsx +113 -24
- package/.framework/src/pages/admin/PipelineDetailPage.tsx +206 -34
- package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +50 -17
- package/.framework/src/pages/admin/PipelinesPage.tsx +160 -21
- package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +378 -88
- package/.framework/src/pages/admin/PromptConfigsPage.tsx +125 -16
- package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +49 -10
- package/.framework/src/pages/admin/RoleDetailPage.tsx +130 -10
- package/.framework/src/pages/admin/RolesPage.tsx +171 -18
- package/.framework/src/pages/admin/SelectTestPage.tsx +34 -9
- package/.framework/src/pages/admin/ShadcnTestPage.tsx +49 -11
- package/.framework/src/pages/admin/SimpleDashboard.tsx +49 -10
- package/.framework/src/pages/admin/TestRunDetailPage.tsx +49 -4
- package/.framework/src/pages/admin/TestingDashboard.tsx +98 -28
- package/.framework/src/pages/admin/TimerDetailPage.tsx +143 -33
- package/.framework/src/pages/admin/TimersPage.tsx +48 -20
- package/.framework/src/pages/admin/TriggerDetailPage.tsx +118 -30
- package/.framework/src/pages/admin/TriggersPage.tsx +64 -19
- package/.framework/src/pages/admin/TypeDetailPage.tsx +138 -15
- package/.framework/src/pages/admin/TypesPage.tsx +48 -20
- package/.framework/src/pages/admin/cil/CILAgentPage.tsx +465 -0
- package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +787 -0
- package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +699 -0
- package/.framework/src/pages/admin/cil/CILFileListPage.tsx +647 -0
- package/.framework/src/pages/admin/cil/CILGraphPage.tsx +616 -0
- package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +1402 -0
- package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +614 -0
- package/.framework/src/pages/admin/cil/CILSearchPage.tsx +571 -0
- package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +731 -0
- package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
- package/.framework/src/pages/auth/AuthConfirmPage.tsx +52 -51
- package/.framework/src/pages/auth/ForgotPasswordPage.tsx +31 -22
- package/.framework/src/pages/auth/LoginPage.tsx +50 -23
- package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -15
- package/.framework/src/pages/auth/RegisterPage.tsx +281 -317
- package/.framework/src/pages/spine-framework/APIPage.tsx +33 -0
- package/.framework/src/pages/spine-framework/CLIPage.tsx +33 -0
- package/.framework/src/types/auth.ts +128 -71
- package/.framework/src/types/types.ts +373 -157
- package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +39 -0
- package/custom/.devin/skills/spine-workbench-idea/SKILL.md +36 -0
- package/custom/.devin/skills/spine-workbench-implement/SKILL.md +46 -0
- package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +28 -0
- package/custom/.devin/skills/spine-workbench-plan/SKILL.md +38 -0
- package/docs/README.md +9 -130
- package/netlify.toml +5 -2
- package/package.json +13 -25
- package/scripts/kb-ingest-docs.ts +203 -0
- package/spine.config.json +65 -4
- package/.framework/migrations/001_schema.sql +0 -425
- package/.framework/migrations/002_rls_and_functions.sql +0 -763
- package/.framework/migrations/004_enhancements.sql +0 -43
- package/.framework/migrations/005_auth_user_trigger.sql +0 -105
- package/.framework/migrations/006_fix_current_actor_id.sql +0 -21
- package/.framework/migrations/016_invites.sql +0 -27
- package/.framework/migrations/017_fix_get_account_apps.sql +0 -78
- package/.framework/migrations/018_apps_required_roles.sql +0 -17
- package/.framework/migrations/019_triggers_unique_constraint.sql +0 -13
- package/.framework/migrations/020_get_account_apps_role_filter.sql +0 -117
- package/.framework/migrations/021_app_domains.sql +0 -112
- package/.framework/migrations/022_route_prefix_domain_unique.sql +0 -21
- package/.framework/migrations/023_match_embeddings_rpc.sql +0 -78
- package/.framework/migrations/024_messages_account_id.sql +0 -9
- package/.framework/migrations/025_retype_threads_messages.sql +0 -240
- package/.framework/migrations/026_fix_rls_policies.sql +0 -47
- package/.framework/migrations/027_embedding_lifecycle.sql +0 -176
- package/.framework/migrations/028_fix_message_data_permissions.sql +0 -49
- package/.framework/migrations/029_tighten_support_triage_prompt.sql +0 -41
- package/.framework/migrations/030_messages_updated_by.sql +0 -6
- package/.framework/migrations/031_seed_upsert_constraints.sql +0 -35
- package/docs/APPS.md +0 -232
- package/docs/ARCHITECTURE.md +0 -246
- package/docs/INSTALL.md +0 -155
- package/docs/design-schema-spec.md +0 -1837
- package/docs/dev-guides/01-create-an-app.md +0 -183
- package/docs/dev-guides/02-create-a-function.md +0 -178
- package/docs/dev-guides/03-create-a-component.md +0 -178
- package/docs/dev-guides/04-webhook-handlers.md +0 -129
- package/docs/dev-guides/05-testing.md +0 -168
- package/docs/dev-guides/README.md +0 -40
- package/docs/npm-packages-plan.md +0 -288
- package/docs/spine-core--api-reference.md +0 -822
|
@@ -1,26 +1,45 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module item-progress
|
|
3
|
-
* @audience both
|
|
4
|
-
* @layer api-handler
|
|
5
|
-
* @stability stable
|
|
6
|
-
*
|
|
7
|
-
* CRUD + upsert API for the `item_progress` table. Tracks per-person, per-item
|
|
8
|
-
* progress state for courses, tasks, onboarding, and any item-based pipeline.
|
|
9
|
-
*
|
|
10
|
-
* Routed by: GET/POST/PATCH /.netlify/functions/item-progress
|
|
11
|
-
*
|
|
12
|
-
* INVARIANT: (person_id, item_id) is unique — state, not a log.
|
|
13
|
-
* INVARIANT: status transitions are forward-only unless force: true.
|
|
14
|
-
* INVARIANT: score must be 0–100 or null.
|
|
15
|
-
*/
|
|
16
1
|
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
// CIL[BEGIN chunk_id="itemprogress_moduleheader_1783968140" type="module_header" identity="imports" parent="none"]
|
|
8
|
+
// CIL[DOC-MACRO purpose="Import dependencies for item progress tracking API"]
|
|
9
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Import handler utilities and database access"]
|
|
10
|
+
// CIL[DOC-CONTEXT module="item-progress" layer="api-handler" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
|
|
11
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="Imported modules" errors="Import failures" side_effects="none"]
|
|
12
|
+
// CIL[DOC-MICRO logic_summary="Imports createHandler, adminDb, resolveTypeId, emitLog" notable_decisions="[]"]
|
|
13
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
14
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
15
|
+
// CIL[DOC-AUDIENCE audience="developer"]
|
|
16
|
+
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, \."]
|
|
17
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
18
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
19
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
20
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
21
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
17
22
|
import { createHandler } from './_shared/middleware'
|
|
18
23
|
import { adminDb } from './_shared/db'
|
|
19
24
|
import { resolveTypeId } from './_shared/resolve-ids'
|
|
20
25
|
import { emitLog } from './_shared/audit'
|
|
21
|
-
|
|
22
|
-
//
|
|
23
|
-
|
|
26
|
+
// CIL[END chunk_id="itemprogress_moduleheader_1783968140"]
|
|
27
|
+
// CIL[BEGIN chunk_id="itemprogress_constants_1783968140" type="constants" identity="constants" parent="none"]
|
|
28
|
+
// CIL[DOC-LEARNING topic="runtime-type:generic/pipeline" content="item-progress reads typeRecord.design_schema.pipeline for the ordered list of statuses. Transitions are valid when the target index is greater than or equal to the current index. If pipeline is missing, the default is [not_started, in_progress, completed]."]
|
|
29
|
+
// CIL[DOC-NOTE type="design_schema_caveat" content="Any status not in the pipeline array is treated as always allowed. Force=true bypasses pipeline validation, so the client can override if the type changes."]
|
|
30
|
+
// CIL[DOC-MACRO purpose="Define progress pipeline constants and helper functions"]
|
|
31
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Provide pipeline validation and composition utilities"]
|
|
32
|
+
// CIL[DOC-CONTEXT module="item-progress" layer="api-handler" related_files="[\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\".framework/functions/_shared/db.ts\",\"\\\"]"]
|
|
33
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="Constants and helper functions" errors="none" side_effects="none"]
|
|
34
|
+
// CIL[DOC-MICRO logic_summary="Defines default pipeline, transition validation, and composition helpers" notable_decisions="[]"]
|
|
35
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
36
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
37
|
+
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/functions/custom_cil-embeddings.ts, custom/apps/portal/pages/ContentPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, .framework/functions/_shared/db.ts, \."]
|
|
38
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
39
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
40
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
41
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
42
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
24
43
|
const PIPELINE_DEFAULT = ['not_started', 'in_progress', 'completed']
|
|
25
44
|
|
|
26
45
|
function getPipeline(typeRecord: any): string[] {
|
|
@@ -49,13 +68,21 @@ function composeDescription(status: string, score: number | null, attempts: numb
|
|
|
49
68
|
if (attempts !== null && attempts !== undefined && attempts > 0) parts.push(`${attempts} attempt${attempts === 1 ? '' : 's'}`)
|
|
50
69
|
return parts.join(' · ')
|
|
51
70
|
}
|
|
52
|
-
|
|
53
|
-
//
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
71
|
+
// CIL[END chunk_id="itemprogress_constants_1783968140"]
|
|
72
|
+
// CIL[BEGIN chunk_id="itemprogress_list_1783968140" type="function" identity="list" parent="none"]
|
|
73
|
+
// CIL[DOC-MACRO purpose="List progress records with filtering and pagination"]
|
|
74
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Query and return paginated progress records"]
|
|
75
|
+
// CIL[DOC-CONTEXT module="item-progress" layer="api-handler" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
|
|
76
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="Array of progress records" errors="DB errors" side_effects="DB read operations"]
|
|
77
|
+
// CIL[DOC-MICRO logic_summary="Builds filtered query with person/item/status filters, applies pagination" notable_decisions="[]"]
|
|
78
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
79
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
80
|
+
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, .framework/functions/_shared/principal.ts, \."]
|
|
81
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
82
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
83
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
84
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
85
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
59
86
|
export const list = createHandler(async (ctx) => {
|
|
60
87
|
const { person_id, item_id, item_ids, status, limit = '100', offset = '0' } = ctx.query || {}
|
|
61
88
|
|
|
@@ -75,10 +102,21 @@ export const list = createHandler(async (ctx) => {
|
|
|
75
102
|
if (error) throw error
|
|
76
103
|
return data
|
|
77
104
|
})
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
105
|
+
// CIL[END chunk_id="itemprogress_list_1783968140"]
|
|
106
|
+
// CIL[BEGIN chunk_id="itemprogress_get_1783968140" type="function" identity="get" parent="none"]
|
|
107
|
+
// CIL[DOC-MACRO purpose="Get single progress record by ID"]
|
|
108
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Retrieve individual progress record"]
|
|
109
|
+
// CIL[DOC-CONTEXT module="item-progress" layer="api-handler" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"\\\"]"]
|
|
110
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="Progress record" errors="ID required, not found, DB errors" side_effects="DB read operation"]
|
|
111
|
+
// CIL[DOC-MICRO logic_summary="Queries by ID, returns full progress record" notable_decisions="[]"]
|
|
112
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
113
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
114
|
+
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 26. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, \."]
|
|
115
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 26. Total affected: 29."]
|
|
116
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
117
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
118
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
119
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
82
120
|
export const get = createHandler(async (ctx) => {
|
|
83
121
|
const id = ctx.query?.id
|
|
84
122
|
if (!id) throw new Error('Progress record ID is required')
|
|
@@ -92,20 +130,25 @@ export const get = createHandler(async (ctx) => {
|
|
|
92
130
|
if (error || !data) throw new Error('Progress record not found')
|
|
93
131
|
return data
|
|
94
132
|
})
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
133
|
+
// CIL[END chunk_id="itemprogress_get_1783968140"]
|
|
134
|
+
// CIL[BEGIN chunk_id="itemprogress_upsert_1783968140" type="function" identity="upsert" parent="none"]
|
|
135
|
+
// CIL[DOC-MACRO purpose="Upsert progress record with pipeline validation and auto-composition"]
|
|
136
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Create or update progress with smart defaults"]
|
|
137
|
+
// CIL[DOC-CONTEXT module="item-progress" layer="api-handler" related_files="[\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
|
|
138
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="Progress record" errors="Required fields missing, invalid transition, DB errors" side_effects="DB upsert, audit logging"]
|
|
139
|
+
// CIL[DOC-MICRO logic_summary="Validates pipeline transitions, auto-composes metadata, handles timestamps" notable_decisions="[]"]
|
|
140
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="complex_dependencies"]
|
|
141
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
142
|
+
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 6. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, \."]
|
|
143
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 6. Total affected: 6."]
|
|
144
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
145
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
146
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
147
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
104
148
|
export const upsert = createHandler(async (ctx, body) => {
|
|
105
149
|
const { person_id, item_id, type_id, type_slug, account_id, app_id, force } = body || {}
|
|
106
150
|
let { status, score, data: dataPayload, title, description } = body || {}
|
|
107
151
|
|
|
108
|
-
// Resolve type_id from type_slug if provided; otherwise require it directly
|
|
109
152
|
let resolvedTypeId = type_id
|
|
110
153
|
if (!resolvedTypeId && type_slug) {
|
|
111
154
|
resolvedTypeId = await resolveTypeId('item_progress', type_slug)
|
|
@@ -115,7 +158,6 @@ export const upsert = createHandler(async (ctx, body) => {
|
|
|
115
158
|
throw new Error('person_id, item_id, type_id (or type_slug), and account_id are required')
|
|
116
159
|
}
|
|
117
160
|
|
|
118
|
-
// Fetch type record for pipeline
|
|
119
161
|
const { data: typeRecord } = await adminDb
|
|
120
162
|
.from('types')
|
|
121
163
|
.select('design_schema')
|
|
@@ -124,7 +166,6 @@ export const upsert = createHandler(async (ctx, body) => {
|
|
|
124
166
|
|
|
125
167
|
const pipeline = getPipeline(typeRecord)
|
|
126
168
|
|
|
127
|
-
// Fetch existing record (if any)
|
|
128
169
|
const { data: existing } = await ctx.db
|
|
129
170
|
.from('item_progress')
|
|
130
171
|
.select('*')
|
|
@@ -135,12 +176,10 @@ export const upsert = createHandler(async (ctx, body) => {
|
|
|
135
176
|
const currentStatus = existing?.status ?? 'not_started'
|
|
136
177
|
const targetStatus = status ?? currentStatus
|
|
137
178
|
|
|
138
|
-
// Validate pipeline transition
|
|
139
179
|
if (status && existing && !force && !isValidTransition(pipeline, currentStatus, targetStatus)) {
|
|
140
180
|
throw new Error(`Invalid status transition: ${currentStatus} → ${targetStatus}. Use force: true to override.`)
|
|
141
181
|
}
|
|
142
182
|
|
|
143
|
-
// Merge data payload with timestamps and attempts
|
|
144
183
|
const now = new Date().toISOString()
|
|
145
184
|
const existingData = existing?.data ?? {}
|
|
146
185
|
const attempts = (existingData.attempts ?? 0) + (status && status !== currentStatus ? 1 : 0)
|
|
@@ -152,7 +191,6 @@ export const upsert = createHandler(async (ctx, body) => {
|
|
|
152
191
|
if (targetStatus === 'in_progress' && !existingData.started_at) mergedData.started_at = now
|
|
153
192
|
if (targetStatus === 'completed' && !existingData.completed_at) mergedData.completed_at = now
|
|
154
193
|
|
|
155
|
-
// Auto-compose title/description if not provided
|
|
156
194
|
if (!title) {
|
|
157
195
|
const [{ data: itemRow }, { data: personRow }] = await Promise.all([
|
|
158
196
|
adminDb.from('items').select('title').eq('id', item_id).single(),
|
|
@@ -201,12 +239,21 @@ export const upsert = createHandler(async (ctx, body) => {
|
|
|
201
239
|
|
|
202
240
|
return result
|
|
203
241
|
})
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
242
|
+
// CIL[END chunk_id="itemprogress_upsert_1783968140"]
|
|
243
|
+
// CIL[BEGIN chunk_id="itemprogress_update_1783968140" type="function" identity="update" parent="none"]
|
|
244
|
+
// CIL[DOC-MACRO purpose="Update progress record with pipeline validation and audit logging"]
|
|
245
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Modify progress with transition safety checks"]
|
|
246
|
+
// CIL[DOC-CONTEXT module="item-progress" layer="api-handler" related_files="[\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
|
|
247
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="Updated progress record" errors="ID required, not found, invalid transition, DB errors" side_effects="DB update, audit logging"]
|
|
248
|
+
// CIL[DOC-MICRO logic_summary="Validates pipeline transitions, updates timestamps, logs changes" notable_decisions="[]"]
|
|
249
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="complex_dependencies"]
|
|
250
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
251
|
+
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, \."]
|
|
252
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
253
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
254
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
255
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
256
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
210
257
|
export const update = createHandler(async (ctx, body) => {
|
|
211
258
|
const id = body?.id || ctx.query?.id
|
|
212
259
|
if (!id) throw new Error('Progress record ID is required')
|
|
@@ -264,9 +311,21 @@ export const update = createHandler(async (ctx, body) => {
|
|
|
264
311
|
|
|
265
312
|
return result
|
|
266
313
|
})
|
|
267
|
-
|
|
268
|
-
//
|
|
269
|
-
|
|
314
|
+
// CIL[END chunk_id="itemprogress_update_1783968140"]
|
|
315
|
+
// CIL[BEGIN chunk_id="itemprogress_handler_1783968140" type="function" identity="handler" parent="none"]
|
|
316
|
+
// CIL[DOC-MACRO purpose="Route HTTP methods to appropriate progress handlers"]
|
|
317
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Dispatch CRUD requests to correct handler functions"]
|
|
318
|
+
// CIL[DOC-CONTEXT module="item-progress" layer="api-handler" related_files="[\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
|
|
319
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="Varies by method" errors="Unsupported method" side_effects="Delegates to handlers"]
|
|
320
|
+
// CIL[DOC-MICRO logic_summary="Switch statement routes GET/POST/PATCH to appropriate handlers" notable_decisions="[]"]
|
|
321
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
322
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
323
|
+
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/functions/custom_cil-embeddings.ts, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/src/components/ui/table-primitives.tsx, \."]
|
|
324
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
325
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
326
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
327
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
328
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
270
329
|
export const handler = createHandler(async (ctx, body) => {
|
|
271
330
|
const method = ctx.query?.method || 'GET'
|
|
272
331
|
const id = ctx.query?.id
|
|
@@ -277,3 +336,4 @@ export const handler = createHandler(async (ctx, body) => {
|
|
|
277
336
|
|
|
278
337
|
throw new Error(`Method ${method} not supported`)
|
|
279
338
|
})
|
|
339
|
+
// CIL[END chunk_id="itemprogress_handler_1783968140"]
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { createHandler } from './_shared/middleware'
|
|
2
|
+
import { kbIngest, kbRevoke, kbReindex, kbSearch } from './_shared/kb'
|
|
3
|
+
import { update as adminUpdate } from './admin-data'
|
|
4
|
+
|
|
5
|
+
export const handler = createHandler(async (ctx, body) => {
|
|
6
|
+
const action = ctx.query?.action || 'search'
|
|
7
|
+
|
|
8
|
+
switch (action) {
|
|
9
|
+
case 'ingest':
|
|
10
|
+
return await kbIngest(ctx, body)
|
|
11
|
+
case 'revoke':
|
|
12
|
+
return await kbRevoke(ctx, body)
|
|
13
|
+
case 'reindex':
|
|
14
|
+
return await kbReindex(ctx, body)
|
|
15
|
+
case 'search':
|
|
16
|
+
return await kbSearch(ctx, body)
|
|
17
|
+
case 'publish': {
|
|
18
|
+
const { id } = body
|
|
19
|
+
if (!id) throw new Error('id is required')
|
|
20
|
+
const updateCtx = { ...ctx, query: { ...ctx.query, entity: 'items', id, method: 'PATCH' } }
|
|
21
|
+
const record = await adminUpdate(updateCtx, { status: 'published' })
|
|
22
|
+
const ingest = await kbIngest(ctx, { id })
|
|
23
|
+
return { record, ingest }
|
|
24
|
+
}
|
|
25
|
+
default:
|
|
26
|
+
throw new Error(`unknown kb action: ${action}`)
|
|
27
|
+
}
|
|
28
|
+
})
|