@agent-foundry/studio 1.0.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/README.md +96 -0
- package/dist/db/client.d.ts +59 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +51 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/deployments.d.ts +65 -0
- package/dist/db/deployments.d.ts.map +1 -0
- package/dist/db/deployments.js +249 -0
- package/dist/db/deployments.js.map +1 -0
- package/dist/db/index.d.ts +7 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +7 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/projects.d.ts +48 -0
- package/dist/db/projects.d.ts.map +1 -0
- package/dist/db/projects.js +192 -0
- package/dist/db/projects.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/oss/client.d.ts +65 -0
- package/dist/oss/client.d.ts.map +1 -0
- package/dist/oss/client.js +146 -0
- package/dist/oss/client.js.map +1 -0
- package/dist/oss/index.d.ts +7 -0
- package/dist/oss/index.d.ts.map +1 -0
- package/dist/oss/index.js +7 -0
- package/dist/oss/index.js.map +1 -0
- package/dist/oss/types.d.ts +96 -0
- package/dist/oss/types.d.ts.map +1 -0
- package/dist/oss/types.js +5 -0
- package/dist/oss/types.js.map +1 -0
- package/dist/oss/uploader.d.ts +72 -0
- package/dist/oss/uploader.d.ts.map +1 -0
- package/dist/oss/uploader.js +185 -0
- package/dist/oss/uploader.js.map +1 -0
- package/dist/types/deployment.d.ts +112 -0
- package/dist/types/deployment.d.ts.map +1 -0
- package/dist/types/deployment.js +7 -0
- package/dist/types/deployment.js.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/project.d.ts +90 -0
- package/dist/types/project.d.ts.map +1 -0
- package/dist/types/project.js +8 -0
- package/dist/types/project.js.map +1 -0
- package/dist/types/user.d.ts +71 -0
- package/dist/types/user.d.ts.map +1 -0
- package/dist/types/user.js +8 -0
- package/dist/types/user.js.map +1 -0
- package/dist/types/workspace.d.ts +88 -0
- package/dist/types/workspace.d.ts.map +1 -0
- package/dist/types/workspace.js +27 -0
- package/dist/types/workspace.js.map +1 -0
- package/dist/utils/build.d.ts +78 -0
- package/dist/utils/build.d.ts.map +1 -0
- package/dist/utils/build.js +148 -0
- package/dist/utils/build.js.map +1 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/manifest.d.ts +106 -0
- package/dist/utils/manifest.d.ts.map +1 -0
- package/dist/utils/manifest.js +109 -0
- package/dist/utils/manifest.js.map +1 -0
- package/package.json +62 -0
- package/src/db/client.ts +92 -0
- package/src/db/deployments.ts +316 -0
- package/src/db/index.ts +7 -0
- package/src/db/projects.ts +246 -0
- package/src/db/schema.sql +156 -0
- package/src/index.ts +18 -0
- package/src/oss/client.ts +183 -0
- package/src/oss/index.ts +7 -0
- package/src/oss/types.ts +126 -0
- package/src/oss/uploader.ts +254 -0
- package/src/types/deployment.ts +147 -0
- package/src/types/index.ts +8 -0
- package/src/types/project.ts +114 -0
- package/src/types/user.ts +91 -0
- package/src/types/workspace.ts +124 -0
- package/src/utils/build.ts +199 -0
- package/src/utils/index.ts +6 -0
- package/src/utils/manifest.ts +224 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/types/workspace.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgGH;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAqB;IAChD,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;IAC7C,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,iBAAiB,EAAE,CAAC,EAAE;IACpE,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,iBAAiB,EAAE,CAAC,EAAE;IACxE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,EAAE;CACjE,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,SAAS;IACT,KAAK;IACL,OAAO;IACP,MAAM;IACN,MAAM;IACN,SAAS;CACD,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build utilities for Vite projects
|
|
3
|
+
*
|
|
4
|
+
* Provides helpers for running builds and collecting output files.
|
|
5
|
+
*/
|
|
6
|
+
import type { UploadFile } from '../oss/types';
|
|
7
|
+
import type { ProjectConfig } from '../types/project';
|
|
8
|
+
/**
|
|
9
|
+
* Get MIME type for a file based on extension
|
|
10
|
+
*/
|
|
11
|
+
export declare function getMimeType(filename: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Build command configuration
|
|
14
|
+
*/
|
|
15
|
+
export interface BuildConfig {
|
|
16
|
+
/** Working directory (project root) */
|
|
17
|
+
cwd: string;
|
|
18
|
+
/** Build command (default: "pnpm build") */
|
|
19
|
+
command?: string;
|
|
20
|
+
/** Environment variables to set */
|
|
21
|
+
env?: Record<string, string>;
|
|
22
|
+
/** Timeout in milliseconds (default: 5 minutes) */
|
|
23
|
+
timeout?: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Build result
|
|
27
|
+
*/
|
|
28
|
+
export interface BuildResult {
|
|
29
|
+
/** Whether build was successful */
|
|
30
|
+
success: boolean;
|
|
31
|
+
/** Output directory path */
|
|
32
|
+
outputDir: string;
|
|
33
|
+
/** Build output log */
|
|
34
|
+
log: string;
|
|
35
|
+
/** Error message if failed */
|
|
36
|
+
error?: string;
|
|
37
|
+
/** Build duration in milliseconds */
|
|
38
|
+
durationMs: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get the default build command based on project config
|
|
42
|
+
*/
|
|
43
|
+
export declare function getDefaultBuildCommand(config: ProjectConfig): string;
|
|
44
|
+
/**
|
|
45
|
+
* Get the output directory based on project config
|
|
46
|
+
*/
|
|
47
|
+
export declare function getOutputDir(config: ProjectConfig): string;
|
|
48
|
+
/**
|
|
49
|
+
* Convert a File object to UploadFile format
|
|
50
|
+
*
|
|
51
|
+
* @param file - File object from file input or FileList
|
|
52
|
+
* @param relativePath - Relative path within the bundle
|
|
53
|
+
*/
|
|
54
|
+
export declare function fileToUploadFile(file: File, relativePath: string): UploadFile;
|
|
55
|
+
/**
|
|
56
|
+
* Calculate total size of files
|
|
57
|
+
*/
|
|
58
|
+
export declare function calculateTotalSize(files: UploadFile[]): number;
|
|
59
|
+
/**
|
|
60
|
+
* Format file size for display
|
|
61
|
+
*/
|
|
62
|
+
export declare function formatFileSize(bytes: number): string;
|
|
63
|
+
/**
|
|
64
|
+
* Validate that required files exist in the bundle
|
|
65
|
+
*/
|
|
66
|
+
export declare function validateBundle(files: UploadFile[]): {
|
|
67
|
+
valid: boolean;
|
|
68
|
+
errors: string[];
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Files to exclude from upload (common patterns)
|
|
72
|
+
*/
|
|
73
|
+
export declare const EXCLUDE_PATTERNS: RegExp[];
|
|
74
|
+
/**
|
|
75
|
+
* Check if a file should be excluded from upload
|
|
76
|
+
*/
|
|
77
|
+
export declare function shouldExclude(path: string, includeSourceMaps?: boolean): boolean;
|
|
78
|
+
//# sourceMappingURL=build.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/utils/build.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA6BtD;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGpD;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAC;IAEZ,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,mCAAmC;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7B,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC;IAEjB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAElB,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;IAEZ,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAEpE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAE1D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,GAAG,UAAU,CAM7E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,CAY9D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CA4BxF;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,UAO5B,CAAC;AAEF;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,UAAQ,GAAG,OAAO,CAW9E"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build utilities for Vite projects
|
|
3
|
+
*
|
|
4
|
+
* Provides helpers for running builds and collecting output files.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* MIME type mapping for common file extensions
|
|
8
|
+
*/
|
|
9
|
+
const MIME_TYPES = {
|
|
10
|
+
'.html': 'text/html',
|
|
11
|
+
'.css': 'text/css',
|
|
12
|
+
'.js': 'application/javascript',
|
|
13
|
+
'.mjs': 'application/javascript',
|
|
14
|
+
'.json': 'application/json',
|
|
15
|
+
'.svg': 'image/svg+xml',
|
|
16
|
+
'.png': 'image/png',
|
|
17
|
+
'.jpg': 'image/jpeg',
|
|
18
|
+
'.jpeg': 'image/jpeg',
|
|
19
|
+
'.gif': 'image/gif',
|
|
20
|
+
'.webp': 'image/webp',
|
|
21
|
+
'.ico': 'image/x-icon',
|
|
22
|
+
'.woff': 'font/woff',
|
|
23
|
+
'.woff2': 'font/woff2',
|
|
24
|
+
'.ttf': 'font/ttf',
|
|
25
|
+
'.eot': 'application/vnd.ms-fontobject',
|
|
26
|
+
'.otf': 'font/otf',
|
|
27
|
+
'.map': 'application/json',
|
|
28
|
+
'.txt': 'text/plain',
|
|
29
|
+
'.xml': 'application/xml',
|
|
30
|
+
'.webmanifest': 'application/manifest+json',
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Get MIME type for a file based on extension
|
|
34
|
+
*/
|
|
35
|
+
export function getMimeType(filename) {
|
|
36
|
+
const ext = filename.substring(filename.lastIndexOf('.')).toLowerCase();
|
|
37
|
+
return MIME_TYPES[ext] || 'application/octet-stream';
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Get the default build command based on project config
|
|
41
|
+
*/
|
|
42
|
+
export function getDefaultBuildCommand(config) {
|
|
43
|
+
return config.buildCommand || 'pnpm build';
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get the output directory based on project config
|
|
47
|
+
*/
|
|
48
|
+
export function getOutputDir(config) {
|
|
49
|
+
return config.outputDir || 'dist';
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Convert a File object to UploadFile format
|
|
53
|
+
*
|
|
54
|
+
* @param file - File object from file input or FileList
|
|
55
|
+
* @param relativePath - Relative path within the bundle
|
|
56
|
+
*/
|
|
57
|
+
export function fileToUploadFile(file, relativePath) {
|
|
58
|
+
return {
|
|
59
|
+
path: relativePath,
|
|
60
|
+
content: file,
|
|
61
|
+
contentType: file.type || getMimeType(file.name),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Calculate total size of files
|
|
66
|
+
*/
|
|
67
|
+
export function calculateTotalSize(files) {
|
|
68
|
+
let total = 0;
|
|
69
|
+
for (const file of files) {
|
|
70
|
+
if (file.content instanceof Blob) {
|
|
71
|
+
total += file.content.size;
|
|
72
|
+
}
|
|
73
|
+
else if (file.content instanceof ArrayBuffer) {
|
|
74
|
+
total += file.content.byteLength;
|
|
75
|
+
}
|
|
76
|
+
else if (typeof file.content === 'string') {
|
|
77
|
+
total += new Blob([file.content]).size;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return total;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Format file size for display
|
|
84
|
+
*/
|
|
85
|
+
export function formatFileSize(bytes) {
|
|
86
|
+
if (bytes === 0)
|
|
87
|
+
return '0 B';
|
|
88
|
+
const units = ['B', 'KB', 'MB', 'GB'];
|
|
89
|
+
const k = 1024;
|
|
90
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
91
|
+
return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${units[i]}`;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Validate that required files exist in the bundle
|
|
95
|
+
*/
|
|
96
|
+
export function validateBundle(files) {
|
|
97
|
+
const errors = [];
|
|
98
|
+
const paths = new Set(files.map(f => f.path));
|
|
99
|
+
// Check for index.html
|
|
100
|
+
if (!paths.has('index.html')) {
|
|
101
|
+
errors.push('Missing index.html - required for web deployment');
|
|
102
|
+
}
|
|
103
|
+
// Warn about large files
|
|
104
|
+
for (const file of files) {
|
|
105
|
+
let size = 0;
|
|
106
|
+
if (file.content instanceof Blob) {
|
|
107
|
+
size = file.content.size;
|
|
108
|
+
}
|
|
109
|
+
else if (file.content instanceof ArrayBuffer) {
|
|
110
|
+
size = file.content.byteLength;
|
|
111
|
+
}
|
|
112
|
+
// Warn if file is larger than 10MB
|
|
113
|
+
if (size > 10 * 1024 * 1024) {
|
|
114
|
+
errors.push(`Large file detected: ${file.path} (${formatFileSize(size)})`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
valid: errors.length === 0 || !errors.some(e => e.includes('Missing')),
|
|
119
|
+
errors,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Files to exclude from upload (common patterns)
|
|
124
|
+
*/
|
|
125
|
+
export const EXCLUDE_PATTERNS = [
|
|
126
|
+
/^\.git\//,
|
|
127
|
+
/^node_modules\//,
|
|
128
|
+
/^\.DS_Store$/,
|
|
129
|
+
/^Thumbs\.db$/,
|
|
130
|
+
/\.map$/, // Source maps (optional)
|
|
131
|
+
/^\.env/,
|
|
132
|
+
];
|
|
133
|
+
/**
|
|
134
|
+
* Check if a file should be excluded from upload
|
|
135
|
+
*/
|
|
136
|
+
export function shouldExclude(path, includeSourceMaps = false) {
|
|
137
|
+
for (const pattern of EXCLUDE_PATTERNS) {
|
|
138
|
+
if (pattern.test(path)) {
|
|
139
|
+
// Allow source maps if requested
|
|
140
|
+
if (pattern.source === '\\.map$' && includeSourceMaps) {
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/utils/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebApp Manifest utilities
|
|
3
|
+
*
|
|
4
|
+
* Generates manifest files for deployed web applications,
|
|
5
|
+
* compatible with Agent Foundry's app registry.
|
|
6
|
+
*/
|
|
7
|
+
import type { StudioProject } from '../types/project';
|
|
8
|
+
import type { Deployment } from '../types/deployment';
|
|
9
|
+
/**
|
|
10
|
+
* WebApp manifest structure for Agent Foundry
|
|
11
|
+
*/
|
|
12
|
+
export interface WebAppManifest {
|
|
13
|
+
/** Schema version */
|
|
14
|
+
schema: string;
|
|
15
|
+
/** App ID (e.g., "com.agentfoundry.myapp") */
|
|
16
|
+
id: string;
|
|
17
|
+
/** Display name */
|
|
18
|
+
name: string;
|
|
19
|
+
/** Short name for icons */
|
|
20
|
+
shortName?: string;
|
|
21
|
+
/** App description */
|
|
22
|
+
description?: string;
|
|
23
|
+
/** App version */
|
|
24
|
+
version: string;
|
|
25
|
+
/** Entry URL (index.html) */
|
|
26
|
+
entryUrl: string;
|
|
27
|
+
/** Icon URLs */
|
|
28
|
+
icons?: {
|
|
29
|
+
src: string;
|
|
30
|
+
sizes: string;
|
|
31
|
+
type?: string;
|
|
32
|
+
}[];
|
|
33
|
+
/** Theme color */
|
|
34
|
+
themeColor?: string;
|
|
35
|
+
/** Background color */
|
|
36
|
+
backgroundColor?: string;
|
|
37
|
+
/** Display mode */
|
|
38
|
+
display?: 'standalone' | 'fullscreen' | 'minimal-ui' | 'browser';
|
|
39
|
+
/** Orientation preference */
|
|
40
|
+
orientation?: 'any' | 'portrait' | 'landscape';
|
|
41
|
+
/** Categories */
|
|
42
|
+
categories?: string[];
|
|
43
|
+
/** Agent Foundry specific metadata */
|
|
44
|
+
agentFoundry?: {
|
|
45
|
+
/** Creator user ID */
|
|
46
|
+
createdBy: string;
|
|
47
|
+
/** Deployment ID */
|
|
48
|
+
deploymentId: string;
|
|
49
|
+
/** Project ID */
|
|
50
|
+
projectId: string;
|
|
51
|
+
/** Framework used */
|
|
52
|
+
framework: string;
|
|
53
|
+
/** Build timestamp */
|
|
54
|
+
builtAt: string;
|
|
55
|
+
/** Bundle size in bytes */
|
|
56
|
+
bundleSize?: number;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Options for generating a manifest
|
|
61
|
+
*/
|
|
62
|
+
export interface ManifestOptions {
|
|
63
|
+
/** App ID prefix (default: "com.agentfoundry.studio") */
|
|
64
|
+
idPrefix?: string;
|
|
65
|
+
/** Theme color */
|
|
66
|
+
themeColor?: string;
|
|
67
|
+
/** Background color */
|
|
68
|
+
backgroundColor?: string;
|
|
69
|
+
/** Icon URL */
|
|
70
|
+
iconUrl?: string;
|
|
71
|
+
/** Categories */
|
|
72
|
+
categories?: string[];
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Generate a WebApp manifest for a deployed project
|
|
76
|
+
*
|
|
77
|
+
* @param project - The Studio project
|
|
78
|
+
* @param deployment - The deployment record
|
|
79
|
+
* @param options - Optional manifest configuration
|
|
80
|
+
*/
|
|
81
|
+
export declare function generateManifest(project: StudioProject, deployment: Deployment, options?: ManifestOptions): WebAppManifest;
|
|
82
|
+
/**
|
|
83
|
+
* Generate a standard web app manifest (PWA compatible)
|
|
84
|
+
*/
|
|
85
|
+
export declare function generateWebManifest(project: StudioProject, options?: ManifestOptions): Record<string, unknown>;
|
|
86
|
+
/**
|
|
87
|
+
* Serialize manifest to JSON string
|
|
88
|
+
*/
|
|
89
|
+
export declare function serializeManifest(manifest: WebAppManifest): string;
|
|
90
|
+
/**
|
|
91
|
+
* Parse manifest from JSON string
|
|
92
|
+
*/
|
|
93
|
+
export declare function parseManifest(json: string): WebAppManifest;
|
|
94
|
+
/**
|
|
95
|
+
* Generate deployment URL path
|
|
96
|
+
*
|
|
97
|
+
* @param userId - User ID
|
|
98
|
+
* @param projectSlug - Project slug
|
|
99
|
+
* @param version - Deployment version
|
|
100
|
+
*/
|
|
101
|
+
export declare function generateDeploymentPath(userId: string, projectSlug: string, version: string): string;
|
|
102
|
+
/**
|
|
103
|
+
* Generate a unique deployment version based on timestamp
|
|
104
|
+
*/
|
|
105
|
+
export declare function generateVersionFromTimestamp(date?: Date): string;
|
|
106
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/utils/manifest.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IAEf,8CAA8C;IAC9C,EAAE,EAAE,MAAM,CAAC;IAEX,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IAEb,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,sBAAsB;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;IAEhB,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IAEjB,gBAAgB;IAChB,KAAK,CAAC,EAAE;QACN,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IAEJ,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,uBAAuB;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,mBAAmB;IACnB,OAAO,CAAC,EAAE,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,SAAS,CAAC;IAEjE,6BAA6B;IAC7B,WAAW,CAAC,EAAE,KAAK,GAAG,UAAU,GAAG,WAAW,CAAC;IAE/C,iBAAiB;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB,sCAAsC;IACtC,YAAY,CAAC,EAAE;QACb,sBAAsB;QACtB,SAAS,EAAE,MAAM,CAAC;QAElB,oBAAoB;QACpB,YAAY,EAAE,MAAM,CAAC;QAErB,iBAAiB;QACjB,SAAS,EAAE,MAAM,CAAC;QAElB,qBAAqB;QACrB,SAAS,EAAE,MAAM,CAAC;QAElB,sBAAsB;QACtB,OAAO,EAAE,MAAM,CAAC;QAEhB,2BAA2B;QAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,uBAAuB;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,eAAe;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,iBAAiB;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,UAAU,EACtB,OAAO,GAAE,eAAoB,GAC5B,cAAc,CAmChB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,eAAoB,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAgBzB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAElE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAa1D;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,MAAM,CAER;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,GAAE,IAAiB,GAAG,MAAM,CAS5E"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebApp Manifest utilities
|
|
3
|
+
*
|
|
4
|
+
* Generates manifest files for deployed web applications,
|
|
5
|
+
* compatible with Agent Foundry's app registry.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Generate a WebApp manifest for a deployed project
|
|
9
|
+
*
|
|
10
|
+
* @param project - The Studio project
|
|
11
|
+
* @param deployment - The deployment record
|
|
12
|
+
* @param options - Optional manifest configuration
|
|
13
|
+
*/
|
|
14
|
+
export function generateManifest(project, deployment, options = {}) {
|
|
15
|
+
const idPrefix = options.idPrefix ?? 'com.agentfoundry.studio';
|
|
16
|
+
const appId = `${idPrefix}.${project.slug}`;
|
|
17
|
+
const manifest = {
|
|
18
|
+
schema: 'agent-foundry.webapp.v1',
|
|
19
|
+
id: appId,
|
|
20
|
+
name: project.name,
|
|
21
|
+
shortName: project.slug,
|
|
22
|
+
description: project.description,
|
|
23
|
+
version: deployment.version,
|
|
24
|
+
entryUrl: deployment.ossUrl ?? `https://placeholder/${deployment.id}/index.html`,
|
|
25
|
+
display: 'standalone',
|
|
26
|
+
orientation: 'any',
|
|
27
|
+
themeColor: options.themeColor ?? '#000000',
|
|
28
|
+
backgroundColor: options.backgroundColor ?? '#ffffff',
|
|
29
|
+
categories: options.categories ?? ['tools', 'productivity'],
|
|
30
|
+
agentFoundry: {
|
|
31
|
+
createdBy: project.userId,
|
|
32
|
+
deploymentId: deployment.id,
|
|
33
|
+
projectId: project.id,
|
|
34
|
+
framework: project.framework,
|
|
35
|
+
builtAt: deployment.publishedAt ?? deployment.createdAt,
|
|
36
|
+
bundleSize: deployment.bundleSizeBytes,
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
if (options.iconUrl) {
|
|
40
|
+
manifest.icons = [
|
|
41
|
+
{ src: options.iconUrl, sizes: '192x192', type: 'image/png' },
|
|
42
|
+
{ src: options.iconUrl, sizes: '512x512', type: 'image/png' },
|
|
43
|
+
];
|
|
44
|
+
}
|
|
45
|
+
return manifest;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Generate a standard web app manifest (PWA compatible)
|
|
49
|
+
*/
|
|
50
|
+
export function generateWebManifest(project, options = {}) {
|
|
51
|
+
return {
|
|
52
|
+
name: project.name,
|
|
53
|
+
short_name: project.slug,
|
|
54
|
+
description: project.description,
|
|
55
|
+
start_url: '/',
|
|
56
|
+
display: 'standalone',
|
|
57
|
+
background_color: options.backgroundColor ?? '#ffffff',
|
|
58
|
+
theme_color: options.themeColor ?? '#000000',
|
|
59
|
+
icons: options.iconUrl
|
|
60
|
+
? [
|
|
61
|
+
{ src: options.iconUrl, sizes: '192x192', type: 'image/png' },
|
|
62
|
+
{ src: options.iconUrl, sizes: '512x512', type: 'image/png' },
|
|
63
|
+
]
|
|
64
|
+
: [],
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Serialize manifest to JSON string
|
|
69
|
+
*/
|
|
70
|
+
export function serializeManifest(manifest) {
|
|
71
|
+
return JSON.stringify(manifest, null, 2);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Parse manifest from JSON string
|
|
75
|
+
*/
|
|
76
|
+
export function parseManifest(json) {
|
|
77
|
+
const parsed = JSON.parse(json);
|
|
78
|
+
// Validate schema
|
|
79
|
+
if (!parsed.schema || !parsed.schema.startsWith('agent-foundry.webapp.')) {
|
|
80
|
+
throw new Error('Invalid manifest: missing or invalid schema');
|
|
81
|
+
}
|
|
82
|
+
if (!parsed.id || !parsed.name || !parsed.version) {
|
|
83
|
+
throw new Error('Invalid manifest: missing required fields (id, name, version)');
|
|
84
|
+
}
|
|
85
|
+
return parsed;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Generate deployment URL path
|
|
89
|
+
*
|
|
90
|
+
* @param userId - User ID
|
|
91
|
+
* @param projectSlug - Project slug
|
|
92
|
+
* @param version - Deployment version
|
|
93
|
+
*/
|
|
94
|
+
export function generateDeploymentPath(userId, projectSlug, version) {
|
|
95
|
+
return `${userId}/${projectSlug}/${version}`;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Generate a unique deployment version based on timestamp
|
|
99
|
+
*/
|
|
100
|
+
export function generateVersionFromTimestamp(date = new Date()) {
|
|
101
|
+
const year = date.getFullYear();
|
|
102
|
+
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
103
|
+
const day = String(date.getDate()).padStart(2, '0');
|
|
104
|
+
const hours = String(date.getHours()).padStart(2, '0');
|
|
105
|
+
const minutes = String(date.getMinutes()).padStart(2, '0');
|
|
106
|
+
const seconds = String(date.getSeconds()).padStart(2, '0');
|
|
107
|
+
return `${year}.${month}.${day}-${hours}${minutes}${seconds}`;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/utils/manifest.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@agent-foundry/studio",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Full SDK for Agent Foundry Build Studio - types, OSS upload, and Supabase client",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts"
|
|
13
|
+
},
|
|
14
|
+
"./types": {
|
|
15
|
+
"import": "./dist/types/index.js",
|
|
16
|
+
"types": "./dist/types/index.d.ts"
|
|
17
|
+
},
|
|
18
|
+
"./oss": {
|
|
19
|
+
"import": "./dist/oss/index.js",
|
|
20
|
+
"types": "./dist/oss/index.d.ts"
|
|
21
|
+
},
|
|
22
|
+
"./db": {
|
|
23
|
+
"import": "./dist/db/index.js",
|
|
24
|
+
"types": "./dist/db/index.d.ts"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "tsc",
|
|
29
|
+
"dev": "tsc --watch",
|
|
30
|
+
"clean": "rimraf dist",
|
|
31
|
+
"prepublishOnly": "pnpm run clean && pnpm run build"
|
|
32
|
+
},
|
|
33
|
+
"keywords": [
|
|
34
|
+
"agent-foundry",
|
|
35
|
+
"studio",
|
|
36
|
+
"build-studio",
|
|
37
|
+
"oss",
|
|
38
|
+
"supabase",
|
|
39
|
+
"typescript",
|
|
40
|
+
"sdk"
|
|
41
|
+
],
|
|
42
|
+
"author": "Agent Foundry",
|
|
43
|
+
"license": "MIT",
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"@supabase/supabase-js": "^2.47.0",
|
|
46
|
+
"ali-oss": "^6.21.0"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@types/ali-oss": "^6.16.0",
|
|
50
|
+
"@types/node": "^20.10.0",
|
|
51
|
+
"typescript": "^5.3.3",
|
|
52
|
+
"rimraf": "^5.0.5"
|
|
53
|
+
},
|
|
54
|
+
"files": [
|
|
55
|
+
"dist",
|
|
56
|
+
"src",
|
|
57
|
+
"README.md"
|
|
58
|
+
],
|
|
59
|
+
"publishConfig": {
|
|
60
|
+
"access": "public"
|
|
61
|
+
}
|
|
62
|
+
}
|
package/src/db/client.ts
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supabase Studio Client
|
|
3
|
+
*
|
|
4
|
+
* Wrapper around @supabase/supabase-js providing typed access to
|
|
5
|
+
* Studio-specific tables (studio_projects, studio_deployments).
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { createClient, SupabaseClient } from '@supabase/supabase-js';
|
|
9
|
+
import { ProjectsRepository } from './projects';
|
|
10
|
+
import { DeploymentsRepository } from './deployments';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Configuration for creating a Studio client
|
|
14
|
+
*/
|
|
15
|
+
export interface StudioClientConfig {
|
|
16
|
+
/** Supabase project URL */
|
|
17
|
+
supabaseUrl: string;
|
|
18
|
+
|
|
19
|
+
/** Supabase anon key (or service role key for server-side) */
|
|
20
|
+
supabaseKey: string;
|
|
21
|
+
|
|
22
|
+
/** Optional: Pass an existing Supabase client instance */
|
|
23
|
+
existingClient?: SupabaseClient;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Studio Client - main entry point for database operations
|
|
28
|
+
*/
|
|
29
|
+
export interface StudioClient {
|
|
30
|
+
/** Raw Supabase client for advanced operations */
|
|
31
|
+
readonly supabase: SupabaseClient;
|
|
32
|
+
|
|
33
|
+
/** Projects repository */
|
|
34
|
+
readonly projects: ProjectsRepository;
|
|
35
|
+
|
|
36
|
+
/** Deployments repository */
|
|
37
|
+
readonly deployments: DeploymentsRepository;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Get current authenticated user ID
|
|
41
|
+
* @throws Error if not authenticated
|
|
42
|
+
*/
|
|
43
|
+
getCurrentUserId(): Promise<string>;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Create a new Studio client
|
|
48
|
+
*
|
|
49
|
+
* @param config - Client configuration
|
|
50
|
+
* @returns StudioClient instance
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```typescript
|
|
54
|
+
* const client = createStudioClient({
|
|
55
|
+
* supabaseUrl: 'https://your-project.supabase.co',
|
|
56
|
+
* supabaseKey: 'your-anon-key',
|
|
57
|
+
* });
|
|
58
|
+
*
|
|
59
|
+
* // Create a project
|
|
60
|
+
* const project = await client.projects.create({
|
|
61
|
+
* name: 'My App',
|
|
62
|
+
* slug: 'my-app',
|
|
63
|
+
* rootPath: '/Users/me/projects/my-app',
|
|
64
|
+
* });
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
export function createStudioClient(config: StudioClientConfig): StudioClient {
|
|
68
|
+
const supabase = config.existingClient ?? createClient(
|
|
69
|
+
config.supabaseUrl,
|
|
70
|
+
config.supabaseKey
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
const projects = new ProjectsRepository(supabase);
|
|
74
|
+
const deployments = new DeploymentsRepository(supabase);
|
|
75
|
+
|
|
76
|
+
return {
|
|
77
|
+
supabase,
|
|
78
|
+
projects,
|
|
79
|
+
deployments,
|
|
80
|
+
|
|
81
|
+
async getCurrentUserId(): Promise<string> {
|
|
82
|
+
const { data: { user }, error } = await supabase.auth.getUser();
|
|
83
|
+
if (error) {
|
|
84
|
+
throw new Error(`Failed to get current user: ${error.message}`);
|
|
85
|
+
}
|
|
86
|
+
if (!user) {
|
|
87
|
+
throw new Error('Not authenticated');
|
|
88
|
+
}
|
|
89
|
+
return user.id;
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
}
|