spine-framework 0.1.0
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/README.md +129 -0
- package/.framework/cli/bin.cjs +14 -0
- package/.framework/cli/commands/agents.ts +153 -0
- package/.framework/cli/commands/auth.ts +94 -0
- package/.framework/cli/commands/create-app.ts +185 -0
- package/.framework/cli/commands/dev.ts +295 -0
- package/.framework/cli/commands/doctor.ts +442 -0
- package/.framework/cli/commands/generate.ts +332 -0
- package/.framework/cli/commands/init.ts +272 -0
- package/.framework/cli/commands/install-app.ts +391 -0
- package/.framework/cli/commands/items.ts +253 -0
- package/.framework/cli/commands/migrations.ts +141 -0
- package/.framework/cli/commands/pipelines.ts +166 -0
- package/.framework/cli/commands/status.ts +197 -0
- package/.framework/cli/commands/system.ts +184 -0
- package/.framework/cli/commands/test.ts +227 -0
- package/.framework/cli/commands/uninstall-app.ts +166 -0
- package/.framework/cli/context.ts +268 -0
- package/.framework/cli/env-loader.ts +36 -0
- package/.framework/cli/index.ts +106 -0
- package/.framework/cli/welcome.cjs +45 -0
- package/.framework/docs/API.md +384 -0
- package/.framework/docs/STABILITY.md +52 -0
- package/.framework/docs/admin-routes.md +76 -0
- package/.framework/docs/api-docs-progress.md +38 -0
- package/.framework/docs/api-governance.md +146 -0
- package/.framework/docs/api-testing-results.md +212 -0
- package/.framework/docs/apis/admin-configs.md +567 -0
- package/.framework/docs/apis/admin-data.md +272 -0
- package/.framework/docs/apis/index.md +231 -0
- package/.framework/docs/apis/internal.md +295 -0
- package/.framework/docs/apis/runtime.md +537 -0
- package/.framework/docs/assembly-launch-guide.md +138 -0
- package/.framework/docs/audit-results.md +590 -0
- package/.framework/docs/authorization-model.md +170 -0
- package/.framework/docs/db-api-inventory.md +95 -0
- package/.framework/docs/examples/custom-app/README.md +77 -0
- package/.framework/docs/examples/custom-function/README.md +27 -0
- package/.framework/docs/examples/custom-function/handler.ts +48 -0
- package/.framework/docs/examples/custom-webhook/README.md +68 -0
- package/.framework/docs/gap-remediation-backlog.md +103 -0
- package/.framework/docs/guides/cli-guide.md +224 -0
- package/.framework/docs/guides/getting-started.md +103 -0
- package/.framework/docs/guides/import-guide.md +193 -0
- package/.framework/docs/guides/testing-guide.md +229 -0
- package/.framework/docs/permission-examples.md +326 -0
- package/.framework/docs/ui-adoption-verification.md +111 -0
- package/.framework/docs/ui-api-coverage.md +84 -0
- package/.framework/docs/v2-compatibility-audit.md +228 -0
- package/.framework/functions/.gitkeep +1 -0
- package/.framework/functions/_shared/agent-runner.ts +1097 -0
- package/.framework/functions/_shared/app-manifest.ts +184 -0
- package/.framework/functions/_shared/audit.ts +150 -0
- package/.framework/functions/_shared/db.ts +174 -0
- package/.framework/functions/_shared/index.ts +382 -0
- package/.framework/functions/_shared/middleware.ts +490 -0
- package/.framework/functions/_shared/permissions.ts +1325 -0
- package/.framework/functions/_shared/pipeline-runner.ts +731 -0
- package/.framework/functions/_shared/principal.ts +760 -0
- package/.framework/functions/_shared/schema-utils.ts +967 -0
- package/.framework/functions/_shared/testing.ts +258 -0
- package/.framework/functions/_shared/trigger-engine.ts +425 -0
- package/.framework/functions/_shared/webhook-registration.ts +168 -0
- package/.framework/functions/_shared/webhook-registry.ts +129 -0
- package/.framework/functions/account-nodes.ts +111 -0
- package/.framework/functions/admin-data.ts +606 -0
- package/.framework/functions/ai-agents.ts +323 -0
- package/.framework/functions/api-keys.ts +376 -0
- package/.framework/functions/apps.ts +483 -0
- package/.framework/functions/auth.ts +196 -0
- package/.framework/functions/debug-auth.ts +107 -0
- package/.framework/functions/embeddings.ts +556 -0
- package/.framework/functions/integration-routes.ts +523 -0
- package/.framework/functions/integrations.ts +319 -0
- package/.framework/functions/item-progress.ts +272 -0
- package/.framework/functions/logs.ts +438 -0
- package/.framework/functions/observability.ts +275 -0
- package/.framework/functions/pipeline-executions.ts +494 -0
- package/.framework/functions/pipelines.ts +485 -0
- package/.framework/functions/prompt-configs.ts +339 -0
- package/.framework/functions/roles.ts +387 -0
- package/.framework/functions/system-cron.ts +742 -0
- package/.framework/functions/system.ts +323 -0
- package/.framework/functions/tests.ts +119 -0
- package/.framework/functions/timers.ts +357 -0
- package/.framework/functions/triggers.ts +563 -0
- package/.framework/functions/types.ts +604 -0
- package/.framework/migrations/000_foundation.sql +1256 -0
- package/.framework/migrations/001_seed.sql +92 -0
- package/.framework/migrations/002_seed_constraints.sql +13 -0
- package/.framework/migrations/003_auth_user_trigger.sql +59 -0
- package/.framework/src/App.tsx +126 -0
- package/.framework/src/apps/admin/index.tsx +173 -0
- package/.framework/src/components/AppWrapper.tsx +56 -0
- package/.framework/src/components/CustomAppLoader.tsx +116 -0
- package/.framework/src/components/admin/AdminListPage.tsx +151 -0
- package/.framework/src/components/admin/AdminSidebar.tsx +166 -0
- package/.framework/src/components/admin/AdminStatsCard.tsx +62 -0
- package/.framework/src/components/admin/SortableTableHeader.tsx +42 -0
- package/.framework/src/components/app-shell/GenericAppShell.tsx +181 -0
- package/.framework/src/components/app-shell/GenericDetailPage.tsx +200 -0
- package/.framework/src/components/app-shell/GenericListPage.tsx +116 -0
- package/.framework/src/components/app-sidebar.tsx +228 -0
- package/.framework/src/components/auth/ProtectedRoute.tsx +88 -0
- package/.framework/src/components/layout/AppShell.tsx +91 -0
- package/.framework/src/components/layout/Header.tsx +88 -0
- package/.framework/src/components/layout/Layout.tsx +95 -0
- package/.framework/src/components/layout/Sidebar.tsx +329 -0
- package/.framework/src/components/runtime/DataDetailHeader.tsx +77 -0
- package/.framework/src/components/runtime/DataDetailPage.tsx +171 -0
- package/.framework/src/components/runtime/DataFilters.tsx +91 -0
- package/.framework/src/components/runtime/DataHeader.tsx +68 -0
- package/.framework/src/components/runtime/DataListPage.tsx +124 -0
- package/.framework/src/components/runtime/DataStats.tsx +70 -0
- package/.framework/src/components/runtime/DataTable.tsx +174 -0
- package/.framework/src/components/runtime/SchemaDetailForm.tsx +134 -0
- package/.framework/src/components/runtime/index.ts +18 -0
- package/.framework/src/components/search-form.tsx +29 -0
- package/.framework/src/components/shared/AgentView.tsx +213 -0
- package/.framework/src/components/shared/FieldRenderer.tsx +478 -0
- package/.framework/src/components/shared/SchemaFields.tsx +226 -0
- package/.framework/src/components/ui/DataTable.tsx +343 -0
- package/.framework/src/components/ui/Form.tsx +281 -0
- package/.framework/src/components/ui/ItemCard.tsx +296 -0
- package/.framework/src/components/ui/ItemListView.tsx +308 -0
- package/.framework/src/components/ui/LoadingSpinner.tsx +52 -0
- package/.framework/src/components/ui/Modal.tsx +61 -0
- package/.framework/src/components/ui/RichTextEditor.tsx +210 -0
- package/.framework/src/components/ui/accordion.tsx +82 -0
- package/.framework/src/components/ui/alert-dialog.tsx +197 -0
- package/.framework/src/components/ui/alert.tsx +76 -0
- package/.framework/src/components/ui/aspect-ratio.tsx +11 -0
- package/.framework/src/components/ui/avatar.tsx +110 -0
- package/.framework/src/components/ui/badge.tsx +49 -0
- package/.framework/src/components/ui/breadcrumb.tsx +122 -0
- package/.framework/src/components/ui/button-group.tsx +83 -0
- package/.framework/src/components/ui/button.tsx +65 -0
- package/.framework/src/components/ui/calendar.tsx +222 -0
- package/.framework/src/components/ui/card.tsx +100 -0
- package/.framework/src/components/ui/carousel.tsx +240 -0
- package/.framework/src/components/ui/chart.tsx +373 -0
- package/.framework/src/components/ui/checkbox.tsx +31 -0
- package/.framework/src/components/ui/collapsible.tsx +33 -0
- package/.framework/src/components/ui/combobox.tsx +299 -0
- package/.framework/src/components/ui/command.tsx +193 -0
- package/.framework/src/components/ui/context-menu.tsx +261 -0
- package/.framework/src/components/ui/dialog.tsx +165 -0
- package/.framework/src/components/ui/direction.tsx +22 -0
- package/.framework/src/components/ui/drawer.tsx +132 -0
- package/.framework/src/components/ui/dropdown-menu.tsx +269 -0
- package/.framework/src/components/ui/empty.tsx +104 -0
- package/.framework/src/components/ui/field.tsx +238 -0
- package/.framework/src/components/ui/hover-card.tsx +42 -0
- package/.framework/src/components/ui/input-group.tsx +153 -0
- package/.framework/src/components/ui/input-otp.tsx +87 -0
- package/.framework/src/components/ui/input.tsx +19 -0
- package/.framework/src/components/ui/item.tsx +196 -0
- package/.framework/src/components/ui/kbd.tsx +26 -0
- package/.framework/src/components/ui/label.tsx +22 -0
- package/.framework/src/components/ui/menubar.tsx +277 -0
- package/.framework/src/components/ui/native-select.tsx +61 -0
- package/.framework/src/components/ui/navigation-menu.tsx +164 -0
- package/.framework/src/components/ui/pagination.tsx +129 -0
- package/.framework/src/components/ui/popover.tsx +87 -0
- package/.framework/src/components/ui/progress.tsx +31 -0
- package/.framework/src/components/ui/radio-group.tsx +42 -0
- package/.framework/src/components/ui/resizable.tsx +50 -0
- package/.framework/src/components/ui/scroll-area.tsx +53 -0
- package/.framework/src/components/ui/select.tsx +195 -0
- package/.framework/src/components/ui/separator.tsx +26 -0
- package/.framework/src/components/ui/sheet.tsx +145 -0
- package/.framework/src/components/ui/sidebar.tsx +706 -0
- package/.framework/src/components/ui/skeleton.tsx +13 -0
- package/.framework/src/components/ui/slider.tsx +59 -0
- package/.framework/src/components/ui/sonner.tsx +47 -0
- package/.framework/src/components/ui/spinner.tsx +10 -0
- package/.framework/src/components/ui/switch.tsx +33 -0
- package/.framework/src/components/ui/table-primitives.tsx +141 -0
- package/.framework/src/components/ui/table.tsx +114 -0
- package/.framework/src/components/ui/tabs.tsx +90 -0
- package/.framework/src/components/ui/textarea.tsx +18 -0
- package/.framework/src/components/ui/toggle-group.tsx +89 -0
- package/.framework/src/components/ui/toggle.tsx +45 -0
- package/.framework/src/components/ui/tooltip.tsx +57 -0
- package/.framework/src/contexts/AppContext.tsx +133 -0
- package/.framework/src/contexts/AuthContext.tsx +371 -0
- package/.framework/src/hooks/use-mobile.ts +19 -0
- package/.framework/src/hooks/useApi.ts +526 -0
- package/.framework/src/hooks/useApps.ts +114 -0
- package/.framework/src/hooks/useEntityList.ts +190 -0
- package/.framework/src/hooks/useEntityRecord.ts +308 -0
- package/.framework/src/hooks/useForm.ts +307 -0
- package/.framework/src/hooks/useListSchema.ts +264 -0
- package/.framework/src/hooks/useSchemaRecord.ts +223 -0
- package/.framework/src/index.css +128 -0
- package/.framework/src/lib/api.ts +156 -0
- package/.framework/src/lib/supabase.ts +94 -0
- package/.framework/src/lib/utils.ts +317 -0
- package/.framework/src/main.tsx +27 -0
- package/.framework/src/pages/DashboardPage.tsx +181 -0
- package/.framework/src/pages/NotFoundPage.tsx +39 -0
- package/.framework/src/pages/admin/AIAgentDetailPage.tsx +161 -0
- package/.framework/src/pages/admin/AIAgentsPage.tsx +318 -0
- package/.framework/src/pages/admin/APIKeyDetailPage.tsx +199 -0
- package/.framework/src/pages/admin/APIKeysPage.tsx +303 -0
- package/.framework/src/pages/admin/AlertsConfigPage.tsx +523 -0
- package/.framework/src/pages/admin/AppDetailPage.tsx +493 -0
- package/.framework/src/pages/admin/AppsPage.tsx +355 -0
- package/.framework/src/pages/admin/DesignedPage.tsx +491 -0
- package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +534 -0
- package/.framework/src/pages/admin/EmbeddingsPage.tsx +424 -0
- package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +176 -0
- package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +109 -0
- package/.framework/src/pages/admin/IntegratedDashboard.tsx +402 -0
- package/.framework/src/pages/admin/IntegrationDetailPage.tsx +187 -0
- package/.framework/src/pages/admin/IntegrationsPage.tsx +301 -0
- package/.framework/src/pages/admin/LogsPage.tsx +283 -0
- package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +85 -0
- package/.framework/src/pages/admin/ObservabilityDashboard.tsx +470 -0
- package/.framework/src/pages/admin/PipelineDetailPage.tsx +183 -0
- package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +279 -0
- package/.framework/src/pages/admin/PipelinesPage.tsx +390 -0
- package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +299 -0
- package/.framework/src/pages/admin/PromptConfigsPage.tsx +292 -0
- package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +434 -0
- package/.framework/src/pages/admin/RoleDetailPage.tsx +273 -0
- package/.framework/src/pages/admin/RolesPage.tsx +292 -0
- package/.framework/src/pages/admin/SelectTestPage.tsx +61 -0
- package/.framework/src/pages/admin/ShadcnTestPage.tsx +588 -0
- package/.framework/src/pages/admin/SimpleDashboard.tsx +387 -0
- package/.framework/src/pages/admin/TestRunDetailPage.tsx +172 -0
- package/.framework/src/pages/admin/TestingDashboard.tsx +257 -0
- package/.framework/src/pages/admin/TimerDetailPage.tsx +151 -0
- package/.framework/src/pages/admin/TimersPage.tsx +376 -0
- package/.framework/src/pages/admin/TriggerDetailPage.tsx +149 -0
- package/.framework/src/pages/admin/TriggersPage.tsx +381 -0
- package/.framework/src/pages/admin/TypeDetailPage.tsx +694 -0
- package/.framework/src/pages/admin/TypesPage.tsx +295 -0
- package/.framework/src/pages/auth/LoginPage.tsx +188 -0
- package/.framework/src/pages/auth/RegisterPage.tsx +163 -0
- package/.framework/src/pages/spine-framework/APIPage.tsx +17 -0
- package/.framework/src/pages/spine-framework/CLIPage.tsx +25 -0
- package/.framework/src/types/auth.ts +125 -0
- package/.framework/src/types/types.ts +407 -0
- package/STRUCTURE.md +150 -0
- package/config/components.json +25 -0
- package/config/deno.lock +108 -0
- package/config/package-lock.json +17183 -0
- package/config/postcss.config.cjs +10 -0
- package/config/tailwind.config.cjs +78 -0
- package/config/tsconfig.build.json +32 -0
- package/config/tsconfig.cli.json +18 -0
- package/config/tsconfig.json +41 -0
- package/config/tsconfig.node.json +17 -0
- package/config/tsconfig.node.tsbuildinfo +1 -0
- package/config/tsconfig.tsbuildinfo +1 -0
- package/config/typedoc.json +16 -0
- package/config/vite.config.d.ts +2 -0
- package/config/vite.config.ts +72 -0
- package/dist/cli/commands/agents.d.ts +39 -0
- package/dist/cli/commands/agents.d.ts.map +1 -0
- package/dist/cli/commands/auth.d.ts +36 -0
- package/dist/cli/commands/auth.d.ts.map +1 -0
- package/dist/cli/commands/create-app.d.ts +23 -0
- package/dist/cli/commands/create-app.d.ts.map +1 -0
- package/dist/cli/commands/dev.d.ts +39 -0
- package/dist/cli/commands/dev.d.ts.map +1 -0
- package/dist/cli/commands/doctor.d.ts +42 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/generate.d.ts +36 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/init.d.ts +30 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/install-app.d.ts +30 -0
- package/dist/cli/commands/install-app.d.ts.map +1 -0
- package/dist/cli/commands/items.d.ts +45 -0
- package/dist/cli/commands/items.d.ts.map +1 -0
- package/dist/cli/commands/migrations.d.ts +41 -0
- package/dist/cli/commands/migrations.d.ts.map +1 -0
- package/dist/cli/commands/pipelines.d.ts +40 -0
- package/dist/cli/commands/pipelines.d.ts.map +1 -0
- package/dist/cli/commands/status.d.ts +23 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/system.d.ts +29 -0
- package/dist/cli/commands/system.d.ts.map +1 -0
- package/dist/cli/commands/test.d.ts +46 -0
- package/dist/cli/commands/test.d.ts.map +1 -0
- package/dist/cli/commands/uninstall-app.d.ts +23 -0
- package/dist/cli/commands/uninstall-app.d.ts.map +1 -0
- package/dist/cli/context.d.ts +88 -0
- package/dist/cli/context.d.ts.map +1 -0
- package/dist/cli/env-loader.d.ts +14 -0
- package/dist/cli/env-loader.d.ts.map +1 -0
- package/dist/cli/index.d.ts +41 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/functions/_shared/agent-runner.d.ts +156 -0
- package/dist/functions/_shared/agent-runner.d.ts.map +1 -0
- package/dist/functions/_shared/app-manifest.d.ts +68 -0
- package/dist/functions/_shared/app-manifest.d.ts.map +1 -0
- package/dist/functions/_shared/audit.d.ts +91 -0
- package/dist/functions/_shared/audit.d.ts.map +1 -0
- package/dist/functions/_shared/db.d.ts +125 -0
- package/dist/functions/_shared/db.d.ts.map +1 -0
- package/dist/functions/_shared/index.d.ts +298 -0
- package/dist/functions/_shared/index.d.ts.map +1 -0
- package/dist/functions/_shared/middleware.d.ts +315 -0
- package/dist/functions/_shared/middleware.d.ts.map +1 -0
- package/dist/functions/_shared/permissions.d.ts +626 -0
- package/dist/functions/_shared/permissions.d.ts.map +1 -0
- package/dist/functions/_shared/pipeline-runner.d.ts +124 -0
- package/dist/functions/_shared/pipeline-runner.d.ts.map +1 -0
- package/dist/functions/_shared/principal.d.ts +284 -0
- package/dist/functions/_shared/principal.d.ts.map +1 -0
- package/dist/functions/_shared/schema-utils.d.ts +181 -0
- package/dist/functions/_shared/schema-utils.d.ts.map +1 -0
- package/dist/functions/_shared/testing.d.ts +172 -0
- package/dist/functions/_shared/testing.d.ts.map +1 -0
- package/dist/functions/_shared/trigger-engine.d.ts +140 -0
- package/dist/functions/_shared/trigger-engine.d.ts.map +1 -0
- package/dist/functions/_shared/webhook-registration.d.ts +81 -0
- package/dist/functions/_shared/webhook-registration.d.ts.map +1 -0
- package/dist/functions/_shared/webhook-registry.d.ts +57 -0
- package/dist/functions/_shared/webhook-registry.d.ts.map +1 -0
- package/dist/functions/account-nodes.d.ts +48 -0
- package/dist/functions/account-nodes.d.ts.map +1 -0
- package/dist/functions/admin-data.d.ts +178 -0
- package/dist/functions/admin-data.d.ts.map +1 -0
- package/dist/functions/ai-agents.d.ts +125 -0
- package/dist/functions/ai-agents.d.ts.map +1 -0
- package/dist/functions/api-keys.d.ts +140 -0
- package/dist/functions/api-keys.d.ts.map +1 -0
- package/dist/functions/apps.d.ts +163 -0
- package/dist/functions/apps.d.ts.map +1 -0
- package/dist/functions/auth.d.ts +74 -0
- package/dist/functions/auth.d.ts.map +1 -0
- package/dist/functions/debug-auth.d.ts +33 -0
- package/dist/functions/debug-auth.d.ts.map +1 -0
- package/dist/functions/embeddings.d.ts +205 -0
- package/dist/functions/embeddings.d.ts.map +1 -0
- package/dist/functions/integration-routes.d.ts +45 -0
- package/dist/functions/integration-routes.d.ts.map +1 -0
- package/dist/functions/integrations.d.ts +124 -0
- package/dist/functions/integrations.d.ts.map +1 -0
- package/dist/functions/item-progress.d.ts +41 -0
- package/dist/functions/item-progress.d.ts.map +1 -0
- package/dist/functions/logs.d.ts +162 -0
- package/dist/functions/logs.d.ts.map +1 -0
- package/dist/functions/observability.d.ts +123 -0
- package/dist/functions/observability.d.ts.map +1 -0
- package/dist/functions/pipeline-executions.d.ts +190 -0
- package/dist/functions/pipeline-executions.d.ts.map +1 -0
- package/dist/functions/pipelines.d.ts +171 -0
- package/dist/functions/pipelines.d.ts.map +1 -0
- package/dist/functions/prompt-configs.d.ts +125 -0
- package/dist/functions/prompt-configs.d.ts.map +1 -0
- package/dist/functions/roles.d.ts +118 -0
- package/dist/functions/roles.d.ts.map +1 -0
- package/dist/functions/system-cron.d.ts +65 -0
- package/dist/functions/system-cron.d.ts.map +1 -0
- package/dist/functions/system.d.ts +29 -0
- package/dist/functions/system.d.ts.map +1 -0
- package/dist/functions/tests.d.ts +28 -0
- package/dist/functions/tests.d.ts.map +1 -0
- package/dist/functions/timers.d.ts +139 -0
- package/dist/functions/timers.d.ts.map +1 -0
- package/dist/functions/triggers.d.ts +203 -0
- package/dist/functions/triggers.d.ts.map +1 -0
- package/dist/functions/types.d.ts +151 -0
- package/dist/functions/types.d.ts.map +1 -0
- package/dist/src/types/types.d.ts +364 -0
- package/dist/src/types/types.d.ts.map +1 -0
- package/package.json +192 -0
- package/scripts/app-install-cli.ts +286 -0
- package/scripts/assemble-frontend.sh +79 -0
- package/scripts/assemble-functions.sh +62 -0
- package/scripts/assemble.sh +35 -0
- package/scripts/boundary-check.sh +106 -0
- package/scripts/build-manifest.sh +80 -0
- package/scripts/check-core-integrity.sh +82 -0
- package/scripts/ingest-chunks.cjs +202 -0
- package/scripts/kb-chunk-parser.cjs +312 -0
- package/scripts/kb-chunk-parser.ts +330 -0
- package/scripts/load-test-app-install.ts +484 -0
- package/scripts/netlify-dev-wrapper.sh +22 -0
- package/scripts/verify-integrity.sh +69 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
/**
|
|
4
|
+
* @module cli/index
|
|
5
|
+
* @audience installer
|
|
6
|
+
* @layer cli
|
|
7
|
+
* @stability stable
|
|
8
|
+
*
|
|
9
|
+
* Spine CLI entry point (`npx spine-framework`). Registers all command groups via
|
|
10
|
+
* Commander and delegates each subcommand to the same core logic used by
|
|
11
|
+
* API handlers and direct imports. No business logic lives here — only
|
|
12
|
+
* command registration and top-level error handling.
|
|
13
|
+
*
|
|
14
|
+
* **Command groups registered:**
|
|
15
|
+
* | Group | File |
|
|
16
|
+
* |-------------|----------------------------|
|
|
17
|
+
* | auth | commands/auth.ts |
|
|
18
|
+
* | pipelines | commands/pipelines.ts |
|
|
19
|
+
* | items | commands/items.ts |
|
|
20
|
+
* | agents | commands/agents.ts |
|
|
21
|
+
* | migrations | commands/migrations.ts |
|
|
22
|
+
* | init | commands/init.ts |
|
|
23
|
+
* | install-app | commands/install-app.ts |
|
|
24
|
+
* | status | commands/status.ts |
|
|
25
|
+
* | uninstall | commands/uninstall-app.ts |
|
|
26
|
+
*
|
|
27
|
+
* **Usage:**
|
|
28
|
+
* ```bash
|
|
29
|
+
* npx spine-framework --help
|
|
30
|
+
* npx spine-framework auth whoami
|
|
31
|
+
* npx spine-framework pipelines run <id> --data '{"key":"value"}'
|
|
32
|
+
* npx spine-framework items list --type support_ticket
|
|
33
|
+
* npx spine-framework items get <id>
|
|
34
|
+
* npx spine-framework agents run <thread-id> --message "Hello"
|
|
35
|
+
* npx spine-framework migrations list
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* @seeAlso cli/context.ts (buildCliContext — constructs CoreContext for every command)
|
|
39
|
+
* @seeAlso functions/_shared/index.ts (core functions exposed to CLI)
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
import './env-loader.ts'
|
|
43
|
+
import { Command } from 'commander'
|
|
44
|
+
|
|
45
|
+
const program = new Command()
|
|
46
|
+
|
|
47
|
+
program
|
|
48
|
+
.name('spine-framework')
|
|
49
|
+
.description('Spine v2 CLI — interact with your Spine instance from the terminal or agentic IDE')
|
|
50
|
+
.version('2.0.0')
|
|
51
|
+
.option('--account <id>', 'Override the account ID for this command')
|
|
52
|
+
|
|
53
|
+
const [
|
|
54
|
+
{ registerAuthCommands },
|
|
55
|
+
{ registerPipelineCommands },
|
|
56
|
+
{ registerItemCommands },
|
|
57
|
+
{ registerAgentCommands },
|
|
58
|
+
{ registerMigrationCommands },
|
|
59
|
+
{ registerDoctorCommands },
|
|
60
|
+
{ registerDevCommands },
|
|
61
|
+
{ registerTestCommands },
|
|
62
|
+
{ registerSystemCommands },
|
|
63
|
+
{ registerGenerateCommands },
|
|
64
|
+
{ registerCreateAppCommands },
|
|
65
|
+
{ registerInitCommands },
|
|
66
|
+
{ registerInstallAppCommands },
|
|
67
|
+
{ registerStatusCommands },
|
|
68
|
+
{ registerUninstallAppCommands },
|
|
69
|
+
] = await Promise.all([
|
|
70
|
+
import('./commands/auth.ts'),
|
|
71
|
+
import('./commands/pipelines.ts'),
|
|
72
|
+
import('./commands/items.ts'),
|
|
73
|
+
import('./commands/agents.ts'),
|
|
74
|
+
import('./commands/migrations.ts'),
|
|
75
|
+
import('./commands/doctor.ts'),
|
|
76
|
+
import('./commands/dev.ts'),
|
|
77
|
+
import('./commands/test.ts'),
|
|
78
|
+
import('./commands/system.ts'),
|
|
79
|
+
import('./commands/generate.ts'),
|
|
80
|
+
import('./commands/create-app.ts'),
|
|
81
|
+
import('./commands/init.ts'),
|
|
82
|
+
import('./commands/install-app.ts'),
|
|
83
|
+
import('./commands/status.ts'),
|
|
84
|
+
import('./commands/uninstall-app.ts'),
|
|
85
|
+
])
|
|
86
|
+
|
|
87
|
+
registerAuthCommands(program)
|
|
88
|
+
registerPipelineCommands(program)
|
|
89
|
+
registerItemCommands(program)
|
|
90
|
+
registerAgentCommands(program)
|
|
91
|
+
registerMigrationCommands(program)
|
|
92
|
+
registerDoctorCommands(program)
|
|
93
|
+
registerDevCommands(program)
|
|
94
|
+
registerTestCommands(program)
|
|
95
|
+
registerSystemCommands(program)
|
|
96
|
+
registerGenerateCommands(program)
|
|
97
|
+
registerCreateAppCommands(program)
|
|
98
|
+
registerInitCommands(program)
|
|
99
|
+
registerInstallAppCommands(program)
|
|
100
|
+
registerStatusCommands(program)
|
|
101
|
+
registerUninstallAppCommands(program)
|
|
102
|
+
|
|
103
|
+
program.parseAsync(process.argv).catch((err) => {
|
|
104
|
+
console.error('Error:', err.message)
|
|
105
|
+
process.exit(1)
|
|
106
|
+
})
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Postinstall welcome message — runs automatically after npm install spine-framework.
|
|
3
|
+
// Tells the agent (or developer) exactly what to do next.
|
|
4
|
+
// Uses only Node built-ins — no dependencies.
|
|
5
|
+
|
|
6
|
+
const lines = [
|
|
7
|
+
'',
|
|
8
|
+
'╭──────────────────────────────────────────────────────────────╮',
|
|
9
|
+
'│ │',
|
|
10
|
+
'│ ███████╗██████╗ ██╗███╗ ██╗███████╗ │',
|
|
11
|
+
'│ ██╔════╝██╔══██╗██║████╗ ██║██╔════╝ │',
|
|
12
|
+
'│ ███████╗██████╔╝██║██╔██╗ ██║█████╗ │',
|
|
13
|
+
'│ ╚════██║██╔═══╝ ██║██║╚██╗██║██╔══╝ │',
|
|
14
|
+
'│ ███████║██║ ██║██║ ╚████║███████╗ │',
|
|
15
|
+
'│ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚══════╝ Framework v0.1 │',
|
|
16
|
+
'│ │',
|
|
17
|
+
'╰──────────────────────────────────────────────────────────────╯',
|
|
18
|
+
'',
|
|
19
|
+
' Spine Framework installed successfully!',
|
|
20
|
+
'',
|
|
21
|
+
' To complete setup you need a Supabase project.',
|
|
22
|
+
' ─────────────────────────────────────────────',
|
|
23
|
+
' If you have one already, run:',
|
|
24
|
+
'',
|
|
25
|
+
' spine-framework init \\',
|
|
26
|
+
' --url https://<project>.supabase.co \\',
|
|
27
|
+
' --anon-key <anon-key> \\',
|
|
28
|
+
' --service-role-key <service-role-key>',
|
|
29
|
+
'',
|
|
30
|
+
' Your credentials are at:',
|
|
31
|
+
' Supabase Dashboard → Your Project → Settings → API',
|
|
32
|
+
'',
|
|
33
|
+
' ─────────────────────────────────────────────',
|
|
34
|
+
' If you need a Supabase project, create one at:',
|
|
35
|
+
' https://supabase.com/dashboard → New project',
|
|
36
|
+
'',
|
|
37
|
+
' After init:',
|
|
38
|
+
' spine-framework install-app <app-slug> # optional apps',
|
|
39
|
+
' npm run assemble && netlify dev # start dev server',
|
|
40
|
+
'',
|
|
41
|
+
' Docs: https://github.com/art-mojo-admin/spine',
|
|
42
|
+
'',
|
|
43
|
+
]
|
|
44
|
+
|
|
45
|
+
console.log(lines.join('\n'))
|
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
# Spine Core Public API
|
|
2
|
+
|
|
3
|
+
**Stability:** Evolving (pre-1.0)
|
|
4
|
+
**Version:** 0.1.0
|
|
5
|
+
|
|
6
|
+
This document describes the stable API surface for building on Spine Core. These exports from `@core/_shared` are intended for use by custom code.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Stability Levels
|
|
11
|
+
|
|
12
|
+
- **Stable** — Safe to use, won't change in minor versions
|
|
13
|
+
- **Evolving** — May change, backward compatibility maintained when possible
|
|
14
|
+
- **Internal** — Not for external use, subject to breaking changes
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Core Context & Authentication
|
|
19
|
+
|
|
20
|
+
### `createHandler`
|
|
21
|
+
**Stability:** Stable
|
|
22
|
+
|
|
23
|
+
Creates a type-safe API handler with built-in authentication, authorization, and logging.
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
import { createHandler } from '@core/_shared'
|
|
27
|
+
|
|
28
|
+
export const handler = createHandler(async (event, ctx) => {
|
|
29
|
+
// ctx.db is RLS-scoped to the authenticated user
|
|
30
|
+
// ctx.principal contains user identity, roles, permissions
|
|
31
|
+
return { data: await ctx.db.from('items').select('*') }
|
|
32
|
+
})
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**Context Object:**
|
|
36
|
+
```typescript
|
|
37
|
+
interface CoreContext {
|
|
38
|
+
db: SupabaseClient // RLS-scoped database client
|
|
39
|
+
principal: Principal // Authenticated user info
|
|
40
|
+
logger: Logger // Structured logging
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
### `resolvePrincipal`
|
|
47
|
+
**Stability:** Stable
|
|
48
|
+
|
|
49
|
+
Resolves an API key or JWT to a principal with permissions.
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
import { resolvePrincipal } from '@core/_shared'
|
|
53
|
+
|
|
54
|
+
const principal = await resolvePrincipal(apiKey, adminDb)
|
|
55
|
+
// Returns: { id, account_id, roles, permissions, ... }
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Webhook Registry
|
|
61
|
+
|
|
62
|
+
### `resolveHandler`
|
|
63
|
+
**Stability:** Evolving
|
|
64
|
+
|
|
65
|
+
Dynamically loads a webhook handler by name from the registry.
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
import { resolveHandler } from '@core/_shared'
|
|
69
|
+
|
|
70
|
+
const handler = await resolveHandler('cortex-webhook')
|
|
71
|
+
if (handler) {
|
|
72
|
+
await handler(event, context)
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Usage in custom code:** See `registerWebhookHandler` below.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
### `registerWebhookHandler`
|
|
81
|
+
**Stability:** Evolving
|
|
82
|
+
|
|
83
|
+
Self-register a custom webhook handler at runtime.
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
import { registerWebhookHandler } from '@core/_shared'
|
|
87
|
+
|
|
88
|
+
await registerWebhookHandler({
|
|
89
|
+
name: 'my-handler', // Unique identifier
|
|
90
|
+
functionName: 'custom_my-handler', // Netlify function name
|
|
91
|
+
description: 'Handles X events',
|
|
92
|
+
events: ['item.created', 'user.updated']
|
|
93
|
+
})
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**Benefits:**
|
|
97
|
+
- No core code changes to add handlers
|
|
98
|
+
- Self-contained registration
|
|
99
|
+
- Runtime discovery
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Pipeline Engine
|
|
104
|
+
|
|
105
|
+
### `runPipeline`
|
|
106
|
+
**Stability:** Evolving
|
|
107
|
+
|
|
108
|
+
Execute a pipeline with the given input and context.
|
|
109
|
+
|
|
110
|
+
```typescript
|
|
111
|
+
import { runPipeline } from '@core/_shared'
|
|
112
|
+
|
|
113
|
+
const result = await runPipeline(pipelineId, {
|
|
114
|
+
item_id: itemId,
|
|
115
|
+
account_id: accountId,
|
|
116
|
+
user_id: userId
|
|
117
|
+
}, context)
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Database
|
|
123
|
+
|
|
124
|
+
### `adminDb`
|
|
125
|
+
**Stability:** Stable
|
|
126
|
+
|
|
127
|
+
Service-role database client (bypasses RLS). Use with caution.
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
import { adminDb } from '@core/_shared'
|
|
131
|
+
|
|
132
|
+
// For operations requiring elevated privileges
|
|
133
|
+
const { data } = await adminDb.from('system_config').select('*')
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**⚠️ Warning:** Only use for cross-tenant operations or when RLS would block legitimate system actions.
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
### `joins`
|
|
141
|
+
**Stability:** Stable
|
|
142
|
+
|
|
143
|
+
Database query builders for common patterns.
|
|
144
|
+
|
|
145
|
+
```typescript
|
|
146
|
+
import { joins } from '@core/_shared'
|
|
147
|
+
|
|
148
|
+
// Joins with common filters applied
|
|
149
|
+
const query = joins.itemsWithAccounts(ctx.db)
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Permissions
|
|
155
|
+
|
|
156
|
+
### `checkPermission`
|
|
157
|
+
**Stability:** Evolving
|
|
158
|
+
|
|
159
|
+
Check if principal has permission for an action.
|
|
160
|
+
|
|
161
|
+
```typescript
|
|
162
|
+
import { checkPermission } from '@core/_shared'
|
|
163
|
+
|
|
164
|
+
const allowed = await checkPermission(ctx.principal, 'item', 'update', itemId)
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
### `sanitizeRecordData`
|
|
170
|
+
**Stability:** Evolving
|
|
171
|
+
|
|
172
|
+
Removes fields user cannot see based on permissions.
|
|
173
|
+
|
|
174
|
+
```typescript
|
|
175
|
+
import { sanitizeRecordData } from '@core/_shared'
|
|
176
|
+
|
|
177
|
+
const safeData = sanitizeRecordData(record, ctx.principal, 'read')
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## App Manifest Utilities
|
|
183
|
+
|
|
184
|
+
### `loadManifest`
|
|
185
|
+
**Stability:** Evolving
|
|
186
|
+
|
|
187
|
+
Load and parse an app manifest.json file.
|
|
188
|
+
|
|
189
|
+
```typescript
|
|
190
|
+
import { loadManifest } from '@core/_shared'
|
|
191
|
+
|
|
192
|
+
const manifest = loadManifest('custom/apps/my-app/manifest.json')
|
|
193
|
+
// Returns: { name, slug, required_roles, routes, nav_items, ... }
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
### `mergeWithManifest`
|
|
199
|
+
**Stability:** Evolving
|
|
200
|
+
|
|
201
|
+
Merge database app record with manifest data.
|
|
202
|
+
|
|
203
|
+
```typescript
|
|
204
|
+
import { mergeWithManifest } from '@core/_shared'
|
|
205
|
+
|
|
206
|
+
const app = mergeWithManifest(dbRecord)
|
|
207
|
+
// Returns merged data with manifest taking precedence for metadata
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## Audit & Logging
|
|
213
|
+
|
|
214
|
+
### `emitAudit`
|
|
215
|
+
**Stability:** Stable
|
|
216
|
+
|
|
217
|
+
Emit structured audit log entry.
|
|
218
|
+
|
|
219
|
+
```typescript
|
|
220
|
+
import { emitAudit } from '@core/_shared'
|
|
221
|
+
|
|
222
|
+
emitAudit({
|
|
223
|
+
action: 'item.updated',
|
|
224
|
+
target: { type: 'item', id: itemId },
|
|
225
|
+
actor: ctx.principal.id,
|
|
226
|
+
metadata: { fields_changed: ['status', 'assignee'] }
|
|
227
|
+
})
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## Schema Utilities
|
|
233
|
+
|
|
234
|
+
### `validateSchema`
|
|
235
|
+
**Stability:** Evolving
|
|
236
|
+
|
|
237
|
+
Validate data against JSON schema.
|
|
238
|
+
|
|
239
|
+
```typescript
|
|
240
|
+
import { validateSchema } from '@core/_shared'
|
|
241
|
+
|
|
242
|
+
const { valid, errors } = validateSchema(data, schema)
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## Agent Runner
|
|
248
|
+
|
|
249
|
+
### `runAgent`
|
|
250
|
+
**Stability:** Evolving
|
|
251
|
+
|
|
252
|
+
Execute an AI agent with context.
|
|
253
|
+
|
|
254
|
+
```typescript
|
|
255
|
+
import { runAgent } from '@core/_shared'
|
|
256
|
+
|
|
257
|
+
const result = await runAgent(agentId, {
|
|
258
|
+
input: userMessage,
|
|
259
|
+
context: { account_id, user_id }
|
|
260
|
+
})
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## Trigger Engine
|
|
266
|
+
|
|
267
|
+
### `registerTrigger`
|
|
268
|
+
**Stability:** Evolving
|
|
269
|
+
|
|
270
|
+
Register a trigger handler.
|
|
271
|
+
|
|
272
|
+
```typescript
|
|
273
|
+
import { registerTrigger } from '@core/_shared'
|
|
274
|
+
|
|
275
|
+
registerTrigger({
|
|
276
|
+
event: 'item.created',
|
|
277
|
+
condition: { item_type: 'ticket' },
|
|
278
|
+
action: { pipeline_id: 'notify-slack' }
|
|
279
|
+
})
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
---
|
|
283
|
+
|
|
284
|
+
## Type Exports
|
|
285
|
+
|
|
286
|
+
### `CoreContext`
|
|
287
|
+
**Stability:** Stable
|
|
288
|
+
|
|
289
|
+
```typescript
|
|
290
|
+
import type { CoreContext } from '@core/_shared'
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### `Principal`
|
|
294
|
+
**Stability:** Stable
|
|
295
|
+
|
|
296
|
+
```typescript
|
|
297
|
+
import type { Principal } from '@core/_shared'
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
### `AppManifest`
|
|
301
|
+
**Stability:** Evolving
|
|
302
|
+
|
|
303
|
+
```typescript
|
|
304
|
+
import type { AppManifest, NavItem } from '@core/_shared'
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
### `WebhookHandlerRegistration`
|
|
308
|
+
**Stability:** Evolving
|
|
309
|
+
|
|
310
|
+
```typescript
|
|
311
|
+
import type { WebhookHandlerRegistration } from '@core/_shared'
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
## Usage Examples
|
|
317
|
+
|
|
318
|
+
### Custom API Endpoint
|
|
319
|
+
|
|
320
|
+
```typescript
|
|
321
|
+
// custom/functions/custom_my-endpoint.ts
|
|
322
|
+
import { createHandler, adminDb } from '@core/_shared'
|
|
323
|
+
|
|
324
|
+
export const handler = createHandler(async (event, ctx) => {
|
|
325
|
+
const { data } = await ctx.db.from('my_items').select('*')
|
|
326
|
+
return { data }
|
|
327
|
+
})
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
### Custom Webhook Handler
|
|
331
|
+
|
|
332
|
+
```typescript
|
|
333
|
+
// custom/functions/custom_slack-webhook.ts
|
|
334
|
+
import { createHandler, registerWebhookHandler, adminDb } from '@core/_shared'
|
|
335
|
+
|
|
336
|
+
export const handler = createHandler(async (event, ctx) => {
|
|
337
|
+
// Handle webhook
|
|
338
|
+
return { status: 'processed' }
|
|
339
|
+
})
|
|
340
|
+
|
|
341
|
+
// Self-register
|
|
342
|
+
registerWebhookHandler({
|
|
343
|
+
name: 'slack-webhook',
|
|
344
|
+
functionName: 'custom_slack-webhook',
|
|
345
|
+
description: 'Posts to Slack',
|
|
346
|
+
events: ['item.created']
|
|
347
|
+
}, adminDb)
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
### Using Manifest
|
|
351
|
+
|
|
352
|
+
```typescript
|
|
353
|
+
// In a custom app component
|
|
354
|
+
import { loadManifest } from '@core/_shared'
|
|
355
|
+
|
|
356
|
+
const manifest = loadManifest('custom/apps/my-app/manifest.json')
|
|
357
|
+
console.log(manifest.required_roles) // ['member', 'operator']
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
---
|
|
361
|
+
|
|
362
|
+
## Breaking Changes Policy
|
|
363
|
+
|
|
364
|
+
- **Stable APIs:** No breaking changes within major version
|
|
365
|
+
- **Evolving APIs:** Breaking changes announced in release notes, 1 version deprecation
|
|
366
|
+
- **Internal APIs:** No guarantees, may break anytime
|
|
367
|
+
|
|
368
|
+
---
|
|
369
|
+
|
|
370
|
+
## Version History
|
|
371
|
+
|
|
372
|
+
### 0.1.0 (Current)
|
|
373
|
+
- Initial public API surface
|
|
374
|
+
- Webhook registry pattern (evolving)
|
|
375
|
+
- App manifest utilities (evolving)
|
|
376
|
+
- Pipeline engine access (evolving)
|
|
377
|
+
|
|
378
|
+
---
|
|
379
|
+
|
|
380
|
+
## See Also
|
|
381
|
+
|
|
382
|
+
- `docs/enterprise-framework-implementation-summary.md` — Architecture overview
|
|
383
|
+
- `.framework/functions/_shared/index.ts` — Source of truth for exports
|
|
384
|
+
- `docs/framework-developer-guide.md` — Developer guide (coming soon)
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Stability Policy
|
|
2
|
+
|
|
3
|
+
> Version target: **0.x** — breaking changes are allowed until 1.0.
|
|
4
|
+
|
|
5
|
+
## Stability Levels
|
|
6
|
+
|
|
7
|
+
Every exported symbol in `_shared/index.ts` is annotated with one of these levels:
|
|
8
|
+
|
|
9
|
+
| Level | Meaning | Breaking change policy |
|
|
10
|
+
|-------|---------|----------------------|
|
|
11
|
+
| **stable** | Safe for custom code to depend on | Minimum 1 minor version deprecation notice before removal |
|
|
12
|
+
| **evolving** | API may change between minor versions | No deprecation period required, but changelog entry mandatory |
|
|
13
|
+
| **internal** | Not exported; core-contributor only | May change without notice |
|
|
14
|
+
|
|
15
|
+
## Versioning
|
|
16
|
+
|
|
17
|
+
Spine follows [semver](https://semver.org/) with these conventions:
|
|
18
|
+
|
|
19
|
+
- **0.x.y** — Pre-stable. Breaking changes increment the minor version.
|
|
20
|
+
- **1.0.0+** — Stable. Breaking changes increment the major version.
|
|
21
|
+
|
|
22
|
+
## Deprecation Process
|
|
23
|
+
|
|
24
|
+
1. Mark the symbol with `@deprecated` JSDoc tag and a migration hint
|
|
25
|
+
2. Add a console warning on first use (once per process)
|
|
26
|
+
3. Remove after the next minor version bump
|
|
27
|
+
|
|
28
|
+
## What Counts as Breaking
|
|
29
|
+
|
|
30
|
+
- Removing or renaming an exported function/type from `_shared/index.ts`
|
|
31
|
+
- Changing function signatures (required params added, return type changed)
|
|
32
|
+
- Removing a CLI command or changing its required arguments
|
|
33
|
+
- Changing database table/column names in migration files
|
|
34
|
+
- Removing seed data keys from `seed/*.json` schemas
|
|
35
|
+
|
|
36
|
+
## What Does NOT Count as Breaking
|
|
37
|
+
|
|
38
|
+
- Adding new optional parameters to existing functions
|
|
39
|
+
- Adding new exports to `_shared/index.ts`
|
|
40
|
+
- Adding new CLI commands
|
|
41
|
+
- Adding new database tables or columns
|
|
42
|
+
- Performance improvements to existing functions
|
|
43
|
+
- Bug fixes (even if they change observable behavior that was clearly wrong)
|
|
44
|
+
|
|
45
|
+
## Release Checklist
|
|
46
|
+
|
|
47
|
+
1. `npm run test:boundary` — architectural boundaries intact
|
|
48
|
+
2. `npm run test:unit` — unit tests pass
|
|
49
|
+
3. Update `CHANGELOG.md` with breaking changes highlighted
|
|
50
|
+
4. Bump version in `package.json`
|
|
51
|
+
5. `npm run prepublishOnly` — build + test gate
|
|
52
|
+
6. `npm publish`
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Admin Route Inventory (v2-core)
|
|
2
|
+
|
|
3
|
+
## Data Management Routes (admin/data/*)
|
|
4
|
+
|
|
5
|
+
| Route | Purpose | Page Component | Entity | Notes |
|
|
6
|
+
|-------|---------|----------------|--------|-------|
|
|
7
|
+
| `/admin/data/accounts` | List accounts | AccountsPage | Account records | Runtime account management |
|
|
8
|
+
| `/admin/data/accounts/new` | Create account | AccountCreatePage | Account records | |
|
|
9
|
+
| `/admin/data/accounts/:id` | Account detail/edit | AccountDetailPage | Account records | |
|
|
10
|
+
| `/admin/data/people` | List people | PeoplePage | Person records | |
|
|
11
|
+
| `/admin/data/people/new` | Create person | PersonCreatePage | Person records | |
|
|
12
|
+
| `/admin/data/people/:id` | Person detail/edit | PersonDetailPage | Person records | |
|
|
13
|
+
| `/admin/data/items` | List items | ItemsPage | Item records | |
|
|
14
|
+
| `/admin/data/items/new` | Create item | ItemCreatePage | Item records | |
|
|
15
|
+
| `/admin/data/items/:id` | Item detail/edit | ItemDetailPage | Item records | |
|
|
16
|
+
|
|
17
|
+
## Configuration Management Routes (admin/configs/*)
|
|
18
|
+
|
|
19
|
+
| Route | Purpose | Page Component | Entity | Notes |
|
|
20
|
+
|-------|---------|----------------|--------|-------|
|
|
21
|
+
| `/admin/configs/types` | List item types | TypesPage | Type definitions | kind='item' |
|
|
22
|
+
| `/admin/configs/types/new` | Create item type | TypeDetailPage | Type definitions | |
|
|
23
|
+
| `/admin/configs/types/:id` | Item type detail/edit | TypeDetailPage | Type definitions | |
|
|
24
|
+
| `/admin/configs/accounts` | List account types | AccountTypesPage | Type definitions | kind='account' |
|
|
25
|
+
| `/admin/configs/accounts/new` | Create account type | AccountTypeDetailPage | Type definitions | |
|
|
26
|
+
| `/admin/configs/accounts/:id` | Account type detail/edit | AccountTypeDetailPage | Type definitions | |
|
|
27
|
+
| `/admin/configs/people` | List person types | PersonTypesPage | Type definitions | kind='person' |
|
|
28
|
+
| `/admin/configs/people/new` | Create person type | PersonTypeDetailPage | Type definitions | |
|
|
29
|
+
| `/admin/configs/people/:id` | Person type detail/edit | PersonTypeDetailPage | Type definitions | |
|
|
30
|
+
| `/admin/configs/apps` | List apps | AppsPage | App definitions | |
|
|
31
|
+
| `/admin/configs/apps/new` | Create app | AppDetailPage | App definitions | |
|
|
32
|
+
| `/admin/configs/apps/:id` | App detail/edit | AppDetailPage | App definitions | |
|
|
33
|
+
| `/admin/configs/pipelines` | List pipelines | PipelinesPage | Pipeline definitions | |
|
|
34
|
+
| `/admin/configs/pipelines/new` | Create pipeline | PipelineDetailPage | Pipeline definitions | |
|
|
35
|
+
| `/admin/configs/pipelines/:id` | Pipeline detail/edit | PipelineDetailPage | Pipeline definitions | |
|
|
36
|
+
| `/admin/configs/triggers` | List triggers | TriggersPage | Trigger definitions | |
|
|
37
|
+
| `/admin/configs/triggers/new` | Create trigger | TriggerDetailPage | Trigger definitions | |
|
|
38
|
+
| `/admin/configs/triggers/:id` | Trigger detail/edit | TriggerDetailPage | Trigger definitions | |
|
|
39
|
+
| `/admin/configs/ai-agents` | List AI agents | AIAgentsPage | AI agent definitions | |
|
|
40
|
+
| `/admin/configs/ai-agents/new` | Create AI agent | AIAgentDetailPage | AI agent definitions | |
|
|
41
|
+
| `/admin/configs/ai-agents/:id` | AI agent detail/edit | AIAgentDetailPage | AI agent definitions | |
|
|
42
|
+
| `/admin/configs/embeddings` | List embeddings | EmbeddingsPage | Embedding definitions | |
|
|
43
|
+
| `/admin/configs/embeddings/new` | Create embedding | EmbeddingDetailPage | Embedding definitions | |
|
|
44
|
+
| `/admin/configs/embeddings/:id` | Embedding detail/edit | EmbeddingDetailPage | Embedding definitions | |
|
|
45
|
+
| `/admin/configs/timers` | List timers | TimersPage | Timer definitions | |
|
|
46
|
+
| `/admin/configs/timers/new` | Create timer | TimerDetailPage | Timer definitions | |
|
|
47
|
+
| `/admin/configs/timers/:id` | Timer detail/edit | TimerDetailPage | Timer definitions | |
|
|
48
|
+
| `/admin/configs/integrations` | List integrations | IntegrationsPage | Integration definitions | |
|
|
49
|
+
| `/admin/configs/integrations/new` | Create integration | IntegrationDetailPage | Integration definitions | |
|
|
50
|
+
| `/admin/configs/integrations/:id` | Integration detail/edit | IntegrationDetailPage | Integration definitions | |
|
|
51
|
+
|
|
52
|
+
## Legacy Routes (Deprecated)
|
|
53
|
+
|
|
54
|
+
| Route | Purpose | Page Component | Entity | Notes |
|
|
55
|
+
|-------|---------|----------------|--------|-------|
|
|
56
|
+
| `/admin/accounts` | Accounts (legacy) | AccountsPage | Account records | Use /admin/data/accounts |
|
|
57
|
+
| `/admin/accounts/:id` | Account detail (legacy) | AccountDetailPage | Account records | Use /admin/data/accounts/:id |
|
|
58
|
+
| `/admin/people` | People (legacy) | PeoplePage | Person records | Use /admin/data/people |
|
|
59
|
+
| `/admin/people/:id` | Person detail (legacy) | PersonDetailPage | Person records | Use /admin/data/people/:id |
|
|
60
|
+
| `/admin/types` | Types (legacy) | TypesPage | Type definitions | Use /admin/configs/types |
|
|
61
|
+
| `/admin/types/:id` | Type detail (legacy) | TypeDetailPage | Type definitions | Use /admin/configs/types/:id |
|
|
62
|
+
| `/admin/apps` | Apps (legacy) | AppsPage | App definitions | Use /admin/configs/apps |
|
|
63
|
+
| `/admin/pipelines` | Pipelines (legacy) | PipelinesPage | Pipeline definitions | Use /admin/configs/pipelines |
|
|
64
|
+
| `/admin/triggers` | Triggers (legacy) | TriggersPage | Trigger definitions | Use /admin/configs/triggers |
|
|
65
|
+
| `/admin/ai-agents` | AI agents (legacy) | AIAgentsPage | AI agent definitions | Use /admin/configs/ai-agents |
|
|
66
|
+
| `/admin/embeddings` | Embeddings (legacy) | EmbeddingsPage | Embedding definitions | Use /admin/configs/embeddings |
|
|
67
|
+
| `/admin/timers` | Timers (legacy) | TimersPage | Timer definitions | Use /admin/configs/timers |
|
|
68
|
+
|
|
69
|
+
## Summary
|
|
70
|
+
|
|
71
|
+
- **Total routes**: 43 active routes (25 data/config + 10 legacy)
|
|
72
|
+
- **Data routes**: 9 (accounts, people, items)
|
|
73
|
+
- **Config routes**: 34 (types, apps, pipelines, triggers, ai-agents, embeddings, timers, integrations)
|
|
74
|
+
- **Legacy routes**: 10 (deprecated but still active)
|
|
75
|
+
|
|
76
|
+
All routes are defined in `v2-core/src/App.tsx` and use lazy-loaded components from `v2-core/src/pages/`.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# API Documentation Progress
|
|
2
|
+
|
|
3
|
+
## Completed Inline Documentation
|
|
4
|
+
|
|
5
|
+
### accounts.ts
|
|
6
|
+
- Added comprehensive header documentation
|
|
7
|
+
- Documented all CRUD operations
|
|
8
|
+
- Fixed lint warnings (unused imports/parameters)
|
|
9
|
+
- Status: COMPLETE
|
|
10
|
+
|
|
11
|
+
### Next Files to Document
|
|
12
|
+
1. people.ts
|
|
13
|
+
2. items.ts
|
|
14
|
+
3. types.ts
|
|
15
|
+
4. apps.ts
|
|
16
|
+
5. pipelines.ts
|
|
17
|
+
6. triggers.ts
|
|
18
|
+
7. ai-agents.ts
|
|
19
|
+
8. embeddings.ts
|
|
20
|
+
9. timers.ts
|
|
21
|
+
10. integrations.ts
|
|
22
|
+
11. All remaining runtime endpoints
|
|
23
|
+
|
|
24
|
+
## Documentation Template Applied
|
|
25
|
+
|
|
26
|
+
Each endpoint file now includes:
|
|
27
|
+
- Domain classification (admin-data/admin-configs/runtime/internal)
|
|
28
|
+
- Auth requirements
|
|
29
|
+
- Account scoping rules
|
|
30
|
+
- v2 schema dependencies
|
|
31
|
+
- Soft delete behavior
|
|
32
|
+
- Audit logging requirements
|
|
33
|
+
- Request/response contracts
|
|
34
|
+
- Error handling
|
|
35
|
+
|
|
36
|
+
## Progress: 1/18 endpoints documented
|
|
37
|
+
|
|
38
|
+
Continuing with remaining endpoints...
|