spine-framework 0.3.5 → 0.3.7
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/migrations/000_foundation.sql +12 -32
- package/README.md +8 -8
- package/package.json +3 -1
|
@@ -756,14 +756,19 @@ CREATE TABLE IF NOT EXISTS public.webhook_handlers (
|
|
|
756
756
|
updated_at timestamptz DEFAULT now()
|
|
757
757
|
);
|
|
758
758
|
|
|
759
|
-
|
|
759
|
+
|
|
760
|
+
-- app_installations
|
|
761
|
+
-- Tracks which apps have been installed via `spine-framework install-app`
|
|
760
762
|
CREATE TABLE IF NOT EXISTS public.app_installations (
|
|
761
|
-
id
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
is_enabled
|
|
765
|
-
|
|
766
|
-
|
|
763
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
764
|
+
app_slug text NOT NULL,
|
|
765
|
+
account_id uuid,
|
|
766
|
+
is_enabled boolean DEFAULT true,
|
|
767
|
+
installed_version text,
|
|
768
|
+
package_name text,
|
|
769
|
+
created_at timestamptz DEFAULT now(),
|
|
770
|
+
updated_at timestamptz DEFAULT now(),
|
|
771
|
+
UNIQUE (app_slug, account_id)
|
|
767
772
|
);
|
|
768
773
|
|
|
769
774
|
-- ---------------------------------------------------------------------------
|
|
@@ -791,16 +796,6 @@ CREATE INDEX IF NOT EXISTS idx_api_keys_account ON public.api_keys (account_
|
|
|
791
796
|
CREATE INDEX IF NOT EXISTS idx_api_keys_integration ON public.api_keys (integration_id);
|
|
792
797
|
CREATE INDEX IF NOT EXISTS idx_api_keys_key_value ON public.api_keys (key_value);
|
|
793
798
|
|
|
794
|
-
CREATE INDEX IF NOT EXISTS idx_app_installations_account ON public.app_installations (account_id) WHERE (is_enabled = true);
|
|
795
|
-
CREATE INDEX IF NOT EXISTS idx_app_installations_slug ON public.app_installations (app_slug) WHERE (is_enabled = true);
|
|
796
|
-
-- Dedup: system installs (account_id IS NULL) — one row per app slug
|
|
797
|
-
CREATE UNIQUE INDEX IF NOT EXISTS idx_app_installations_slug_no_account
|
|
798
|
-
ON public.app_installations (app_slug)
|
|
799
|
-
WHERE account_id IS NULL;
|
|
800
|
-
-- Dedup: tenant installs (account_id IS NOT NULL) — one row per (slug, account)
|
|
801
|
-
CREATE UNIQUE INDEX IF NOT EXISTS idx_app_installations_slug_with_account
|
|
802
|
-
ON public.app_installations (app_slug, account_id)
|
|
803
|
-
WHERE account_id IS NOT NULL;
|
|
804
799
|
|
|
805
800
|
CREATE INDEX IF NOT EXISTS idx_apps_owner ON public.apps (owner_account_id);
|
|
806
801
|
CREATE INDEX IF NOT EXISTS idx_apps_slug ON public.apps (slug);
|
|
@@ -1288,21 +1283,6 @@ BEGIN
|
|
|
1288
1283
|
END;
|
|
1289
1284
|
$$;
|
|
1290
1285
|
|
|
1291
|
-
-- ---------------------------------------------------------------------------
|
|
1292
|
-
-- App Installations
|
|
1293
|
-
-- Tracks which apps have been installed via `spine-framework install-app`
|
|
1294
|
-
-- ---------------------------------------------------------------------------
|
|
1295
|
-
CREATE TABLE IF NOT EXISTS public.app_installations (
|
|
1296
|
-
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
1297
|
-
app_slug text NOT NULL,
|
|
1298
|
-
account_id uuid,
|
|
1299
|
-
is_enabled boolean DEFAULT true,
|
|
1300
|
-
installed_version text,
|
|
1301
|
-
package_name text,
|
|
1302
|
-
created_at timestamptz DEFAULT now(),
|
|
1303
|
-
updated_at timestamptz DEFAULT now(),
|
|
1304
|
-
UNIQUE (app_slug, account_id)
|
|
1305
|
-
);
|
|
1306
1286
|
|
|
1307
1287
|
-- ---------------------------------------------------------------------------
|
|
1308
1288
|
-- Role Grants
|
package/README.md
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# Spine Framework
|
|
2
2
|
|
|
3
|
-
**We're building Spine in the open.** The source is visible, the roadmap is public, and we share what we learn along the way. That said, Spine is not open source — commercial use requires a license. See [LICENSE.md](./LICENSE.md) for details.
|
|
3
|
+
**We're building Spine Framework in the open.** The source is visible, the roadmap is public, and we share what we learn along the way. That said, Spine Framework is not open source — commercial use requires a license. See [LICENSE.md](./LICENSE.md) for details.
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
Spine is an enterprise application framework for agentic IDEs. It gives Windsurf, Cursor, and other AI coding tools a production-ready backend to build on — multi-tenant data model, auth, roles, permissions, Netlify functions, and a CLI for installation and app management.
|
|
7
|
+
Spine Framework is an enterprise application framework for agentic IDEs. It gives Windsurf, Cursor, and other AI coding tools a production-ready backend to build on — multi-tenant data model, auth, roles, permissions, Netlify functions, and a CLI for installation and app management.
|
|
8
8
|
|
|
9
|
-
You bring the use case. Spine brings the infrastructure.
|
|
9
|
+
You bring the use case. Spine Framework brings the infrastructure.
|
|
10
10
|
|
|
11
11
|
## Requirements
|
|
12
12
|
|
|
@@ -16,7 +16,7 @@ You bring the use case. Spine brings the infrastructure.
|
|
|
16
16
|
|
|
17
17
|
## Getting Started
|
|
18
18
|
|
|
19
|
-
### 1. Install Spine
|
|
19
|
+
### 1. Install Spine Framework
|
|
20
20
|
|
|
21
21
|
In a new empty directory:
|
|
22
22
|
|
|
@@ -72,9 +72,9 @@ npm run assemble && netlify dev
|
|
|
72
72
|
npx spine-framework <command>
|
|
73
73
|
|
|
74
74
|
Commands:
|
|
75
|
-
init Scaffold a new Spine project
|
|
75
|
+
init Scaffold a new Spine Framework project
|
|
76
76
|
migrate Apply database migrations
|
|
77
|
-
install-app Install a Spine app from npm
|
|
77
|
+
install-app Install a Spine Framework app from npm
|
|
78
78
|
uninstall-app Remove an installed app
|
|
79
79
|
update-app Update an installed app to a newer version
|
|
80
80
|
status Show installed apps and framework version
|
|
@@ -108,13 +108,13 @@ custom/ # Your code lives here
|
|
|
108
108
|
|
|
109
109
|
## Apps
|
|
110
110
|
|
|
111
|
-
Spine apps are npm packages. Install them with the CLI:
|
|
111
|
+
Spine Framework apps are npm packages. Install them with the CLI:
|
|
112
112
|
|
|
113
113
|
```bash
|
|
114
114
|
npx spine-framework install-app spine-framework-portal@latest
|
|
115
115
|
```
|
|
116
116
|
|
|
117
|
-
Each app seeds its own roles, types, and configuration into your database and integrates with the Spine navigation and permission system.
|
|
117
|
+
Each app seeds its own roles, types, and configuration into your database and integrates with the Spine Framework navigation and permission system.
|
|
118
118
|
|
|
119
119
|
## License
|
|
120
120
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "spine-framework",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.7",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Spine — enterprise application framework built on Supabase + Netlify + React",
|
|
6
6
|
"type": "module",
|
|
@@ -78,6 +78,8 @@
|
|
|
78
78
|
"build": "tsc -b config/tsconfig.json && vite build --config config/vite.config.ts",
|
|
79
79
|
"build:lib": "tsc -p config/tsconfig.build.json",
|
|
80
80
|
"prepublishOnly": "npm run build:lib && npm run test:boundary && npm run test:unit",
|
|
81
|
+
"publish:next": "npm publish --tag next --access public",
|
|
82
|
+
"publish:promote": "node -e \"const v=require('./package.json').version;require('child_process').execSync('npm dist-tag add spine-framework@'+v+' latest',{stdio:'inherit'})\"",
|
|
81
83
|
"preview": "vite preview --config config/vite.config.ts",
|
|
82
84
|
"lint": "eslint .",
|
|
83
85
|
"app-install": "tsx scripts/app-install-cli.ts",
|