spine-framework 0.2.1 → 0.2.2
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/claim.ts +447 -0
- package/.framework/cli/commands/install-app.ts +67 -7
- package/.framework/cli/commands/migrate.ts +13 -1
- package/.framework/cli/commands/publish.ts +191 -0
- package/.framework/cli/commands/status.ts +74 -3
- package/.framework/cli/commands/update-app.ts +397 -0
- package/.framework/cli/index.ts +12 -0
- package/.framework/migrations/000_foundation.sql +18 -4
- package/.framework/migrations/004_app_version_tracking.sql +8 -0
- package/.framework/src/App.tsx +6 -1
- package/.framework/src/components/CustomAppLoader.tsx +17 -0
- package/bin/{spine-framework.cjs → spine-framework.js} +1 -1
- package/bin/{welcome.cjs → welcome.js} +2 -2
- package/dist/cli/commands/claim.d.ts +56 -0
- package/dist/cli/commands/claim.d.ts.map +1 -0
- package/dist/cli/commands/install-app.d.ts.map +1 -1
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/publish.d.ts +23 -0
- package/dist/cli/commands/publish.d.ts.map +1 -0
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/update-app.d.ts +24 -0
- package/dist/cli/commands/update-app.d.ts.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/config/signals.d.ts +82 -0
- package/dist/config/signals.d.ts.map +1 -0
- package/package.json +4 -3
- package/bin/ws-shim.cjs +0 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../.framework/cli/commands/status.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../.framework/cli/commands/status.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAkOxC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,QAmBtD"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module cli/commands/update-app
|
|
3
|
+
* @audience installer
|
|
4
|
+
* @layer cli
|
|
5
|
+
* @stability stable
|
|
6
|
+
*
|
|
7
|
+
* `spine-framework update-app <slug>` — Check for and assist with app updates.
|
|
8
|
+
*
|
|
9
|
+
* Design principle: the agentic IDE is the merge tool. This command never
|
|
10
|
+
* writes to custom/apps/. It only:
|
|
11
|
+
* 1. Gets the new version into node_modules/ (read-only upstream reference)
|
|
12
|
+
* 2. Gives the agent a complete picture: versions, changelog, file diff summary
|
|
13
|
+
* 3. Records the new version in DB once the agent signals it is done (--accept)
|
|
14
|
+
*
|
|
15
|
+
* **Usage:**
|
|
16
|
+
* ```bash
|
|
17
|
+
* spine-framework update-app cortex # check for updates
|
|
18
|
+
* spine-framework update-app cortex --dry-run # full plan: changelog + file diff
|
|
19
|
+
* spine-framework update-app cortex --accept # record new version in DB only
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
import type { Command } from 'commander';
|
|
23
|
+
export declare function registerUpdateAppCommands(program: Command): void;
|
|
24
|
+
//# sourceMappingURL=update-app.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-app.d.ts","sourceRoot":"","sources":["../../../.framework/cli/commands/update-app.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAsWxC,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,QAezD"}
|
package/dist/cli/index.d.ts
CHANGED
|
@@ -20,7 +20,10 @@
|
|
|
20
20
|
* | migrations | commands/migrations.ts |
|
|
21
21
|
* | init | commands/init.ts |
|
|
22
22
|
* | install-app | commands/install-app.ts |
|
|
23
|
+
* | update-app | commands/update-app.ts |
|
|
24
|
+
* | publish | commands/publish.ts |
|
|
23
25
|
* | status | commands/status.ts |
|
|
26
|
+
* | claim | commands/claim.ts |
|
|
24
27
|
* | uninstall | commands/uninstall-app.ts |
|
|
25
28
|
*
|
|
26
29
|
* **Usage:**
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../.framework/cli/index.ts"],"names":[],"mappings":";AAEA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../.framework/cli/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module config/signals
|
|
3
|
+
* @audience installer
|
|
4
|
+
* @layer cli
|
|
5
|
+
* @stability stable
|
|
6
|
+
*
|
|
7
|
+
* Signal endpoint configuration for framework install tracking and engagement.
|
|
8
|
+
*
|
|
9
|
+
* The public framework sends anonymous signals to a configurable endpoint.
|
|
10
|
+
* Private Cortex instances receive and process these signals.
|
|
11
|
+
*/
|
|
12
|
+
export interface SignalConfig {
|
|
13
|
+
endpoint: string;
|
|
14
|
+
timeout: number;
|
|
15
|
+
retryAttempts: number;
|
|
16
|
+
batchSize: number;
|
|
17
|
+
}
|
|
18
|
+
export declare const signalConfig: SignalConfig;
|
|
19
|
+
export declare const engagementSignals: {
|
|
20
|
+
readonly framework_installed: {
|
|
21
|
+
readonly score: 1;
|
|
22
|
+
readonly description: "Framework npm install completion";
|
|
23
|
+
};
|
|
24
|
+
readonly framework_initialized: {
|
|
25
|
+
readonly score: 3;
|
|
26
|
+
readonly description: "First successful startup";
|
|
27
|
+
};
|
|
28
|
+
readonly framework_connected_db: {
|
|
29
|
+
readonly score: 5;
|
|
30
|
+
readonly description: "Database connection success";
|
|
31
|
+
};
|
|
32
|
+
readonly app_install: {
|
|
33
|
+
readonly score: 4;
|
|
34
|
+
readonly description: "App installation";
|
|
35
|
+
};
|
|
36
|
+
readonly app_initialized: {
|
|
37
|
+
readonly score: 4;
|
|
38
|
+
readonly description: "App first load";
|
|
39
|
+
};
|
|
40
|
+
readonly app_first_action: {
|
|
41
|
+
readonly score: 6;
|
|
42
|
+
readonly description: "First feature usage";
|
|
43
|
+
};
|
|
44
|
+
readonly account_created: {
|
|
45
|
+
readonly score: 8;
|
|
46
|
+
readonly description: "Anonymous → identified migration";
|
|
47
|
+
};
|
|
48
|
+
readonly first_deploy: {
|
|
49
|
+
readonly score: 10;
|
|
50
|
+
readonly description: "Production deployment";
|
|
51
|
+
};
|
|
52
|
+
readonly team_collaboration: {
|
|
53
|
+
readonly score: 12;
|
|
54
|
+
readonly description: "Multi-user usage";
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
export type EngagementSignalType = keyof typeof engagementSignals;
|
|
58
|
+
export declare const claimTriggers: {
|
|
59
|
+
readonly immediate: 0;
|
|
60
|
+
readonly gentle_nudge: 3;
|
|
61
|
+
readonly value_realized: 5;
|
|
62
|
+
readonly ecosystem_engaged: 8;
|
|
63
|
+
readonly power_user: 10;
|
|
64
|
+
};
|
|
65
|
+
export interface EngagementEntry {
|
|
66
|
+
type: EngagementSignalType;
|
|
67
|
+
timestamp: string;
|
|
68
|
+
score: number;
|
|
69
|
+
}
|
|
70
|
+
export interface EngagementData {
|
|
71
|
+
framework_install_serial: string;
|
|
72
|
+
engagement_score: number;
|
|
73
|
+
signals: EngagementEntry[];
|
|
74
|
+
claim_status: 'anonymous' | 'claimed' | 'pending';
|
|
75
|
+
last_claim_prompt?: string;
|
|
76
|
+
account_id?: string;
|
|
77
|
+
}
|
|
78
|
+
export interface ClaimPrompt {
|
|
79
|
+
timing: keyof typeof claimTriggers;
|
|
80
|
+
message: string;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=signals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../.framework/config/signals.ts"],"names":[],"mappings":"AACA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,eAAO,MAAM,YAAY,EAAE,YAK1B,CAAA;AAGD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAUpB,CAAA;AAEV,MAAM,MAAM,oBAAoB,GAAG,MAAM,OAAO,iBAAiB,CAAA;AAGjE,eAAO,MAAM,aAAa;;;;;;CAMhB,CAAA;AAEV,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,oBAAoB,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,wBAAwB,EAAE,MAAM,CAAA;IAChC,gBAAgB,EAAE,MAAM,CAAA;IACxB,OAAO,EAAE,eAAe,EAAE,CAAA;IAC1B,YAAY,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,CAAA;IACjD,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,OAAO,aAAa,CAAA;IAClC,OAAO,EAAE,MAAM,CAAA;CAChB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "spine-framework",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Spine — enterprise application framework built on Supabase + Netlify + React",
|
|
6
6
|
"type": "module",
|
|
@@ -26,7 +26,8 @@
|
|
|
26
26
|
"node": ">=18.0.0"
|
|
27
27
|
},
|
|
28
28
|
"bin": {
|
|
29
|
-
"spine-framework": "./bin/spine-framework.
|
|
29
|
+
"spine-framework": "./bin/spine-framework.js",
|
|
30
|
+
"spine": "./bin/spine-framework.js"
|
|
30
31
|
},
|
|
31
32
|
"exports": {
|
|
32
33
|
".": {
|
|
@@ -86,7 +87,7 @@
|
|
|
86
87
|
"test:integration": "vitest run .framework/tests/integration",
|
|
87
88
|
"test:boundary": "bash scripts/boundary-check.sh",
|
|
88
89
|
"test:custom": "vitest run custom/tests",
|
|
89
|
-
"postinstall": "node bin/welcome.
|
|
90
|
+
"postinstall": "node bin/welcome.js || true",
|
|
90
91
|
"docs": "typedoc --config config/typedoc.json"
|
|
91
92
|
},
|
|
92
93
|
"dependencies": {
|
package/bin/ws-shim.cjs
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
// Polyfill globalThis.WebSocket with the 'ws' package for Node < 22.
|
|
2
|
-
// Required by supabase-js Realtime client which checks for WebSocket at construction time.
|
|
3
|
-
if (typeof globalThis.WebSocket === 'undefined') {
|
|
4
|
-
try {
|
|
5
|
-
const { WebSocket } = require('ws')
|
|
6
|
-
globalThis.WebSocket = WebSocket
|
|
7
|
-
} catch {}
|
|
8
|
-
}
|