@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.
Files changed (88) hide show
  1. package/README.md +96 -0
  2. package/dist/db/client.d.ts +59 -0
  3. package/dist/db/client.d.ts.map +1 -0
  4. package/dist/db/client.js +51 -0
  5. package/dist/db/client.js.map +1 -0
  6. package/dist/db/deployments.d.ts +65 -0
  7. package/dist/db/deployments.d.ts.map +1 -0
  8. package/dist/db/deployments.js +249 -0
  9. package/dist/db/deployments.js.map +1 -0
  10. package/dist/db/index.d.ts +7 -0
  11. package/dist/db/index.d.ts.map +1 -0
  12. package/dist/db/index.js +7 -0
  13. package/dist/db/index.js.map +1 -0
  14. package/dist/db/projects.d.ts +48 -0
  15. package/dist/db/projects.d.ts.map +1 -0
  16. package/dist/db/projects.js +192 -0
  17. package/dist/db/projects.js.map +1 -0
  18. package/dist/index.d.ts +11 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +15 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/oss/client.d.ts +65 -0
  23. package/dist/oss/client.d.ts.map +1 -0
  24. package/dist/oss/client.js +146 -0
  25. package/dist/oss/client.js.map +1 -0
  26. package/dist/oss/index.d.ts +7 -0
  27. package/dist/oss/index.d.ts.map +1 -0
  28. package/dist/oss/index.js +7 -0
  29. package/dist/oss/index.js.map +1 -0
  30. package/dist/oss/types.d.ts +96 -0
  31. package/dist/oss/types.d.ts.map +1 -0
  32. package/dist/oss/types.js +5 -0
  33. package/dist/oss/types.js.map +1 -0
  34. package/dist/oss/uploader.d.ts +72 -0
  35. package/dist/oss/uploader.d.ts.map +1 -0
  36. package/dist/oss/uploader.js +185 -0
  37. package/dist/oss/uploader.js.map +1 -0
  38. package/dist/types/deployment.d.ts +112 -0
  39. package/dist/types/deployment.d.ts.map +1 -0
  40. package/dist/types/deployment.js +7 -0
  41. package/dist/types/deployment.js.map +1 -0
  42. package/dist/types/index.d.ts +8 -0
  43. package/dist/types/index.d.ts.map +1 -0
  44. package/dist/types/index.js +8 -0
  45. package/dist/types/index.js.map +1 -0
  46. package/dist/types/project.d.ts +90 -0
  47. package/dist/types/project.d.ts.map +1 -0
  48. package/dist/types/project.js +8 -0
  49. package/dist/types/project.js.map +1 -0
  50. package/dist/types/user.d.ts +71 -0
  51. package/dist/types/user.d.ts.map +1 -0
  52. package/dist/types/user.js +8 -0
  53. package/dist/types/user.js.map +1 -0
  54. package/dist/types/workspace.d.ts +88 -0
  55. package/dist/types/workspace.d.ts.map +1 -0
  56. package/dist/types/workspace.js +27 -0
  57. package/dist/types/workspace.js.map +1 -0
  58. package/dist/utils/build.d.ts +78 -0
  59. package/dist/utils/build.d.ts.map +1 -0
  60. package/dist/utils/build.js +148 -0
  61. package/dist/utils/build.js.map +1 -0
  62. package/dist/utils/index.d.ts +6 -0
  63. package/dist/utils/index.d.ts.map +1 -0
  64. package/dist/utils/index.js +6 -0
  65. package/dist/utils/index.js.map +1 -0
  66. package/dist/utils/manifest.d.ts +106 -0
  67. package/dist/utils/manifest.d.ts.map +1 -0
  68. package/dist/utils/manifest.js +109 -0
  69. package/dist/utils/manifest.js.map +1 -0
  70. package/package.json +62 -0
  71. package/src/db/client.ts +92 -0
  72. package/src/db/deployments.ts +316 -0
  73. package/src/db/index.ts +7 -0
  74. package/src/db/projects.ts +246 -0
  75. package/src/db/schema.sql +156 -0
  76. package/src/index.ts +18 -0
  77. package/src/oss/client.ts +183 -0
  78. package/src/oss/index.ts +7 -0
  79. package/src/oss/types.ts +126 -0
  80. package/src/oss/uploader.ts +254 -0
  81. package/src/types/deployment.ts +147 -0
  82. package/src/types/index.ts +8 -0
  83. package/src/types/project.ts +114 -0
  84. package/src/types/user.ts +91 -0
  85. package/src/types/workspace.ts +124 -0
  86. package/src/utils/build.ts +199 -0
  87. package/src/utils/index.ts +6 -0
  88. package/src/utils/manifest.ts +224 -0
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Direct Uploader
3
+ *
4
+ * High-level interface for uploading build artifacts to OSS.
5
+ * Handles STS credential fetching, multipart upload, and progress tracking.
6
+ */
7
+ import { AliOSSClient } from './client';
8
+ /**
9
+ * DirectUploader - handles the complete upload flow
10
+ *
11
+ * 1. Requests STS credentials from BFF
12
+ * 2. Uploads files directly to OSS
13
+ * 3. Notifies BFF of completion
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const uploader = new DirectUploader({
18
+ * bffBaseUrl: 'http://localhost:11001',
19
+ * authToken: 'eyJ...',
20
+ * });
21
+ *
22
+ * const result = await uploader.upload({
23
+ * projectId: 'project-uuid',
24
+ * files: [
25
+ * { path: 'index.html', content: indexHtml, contentType: 'text/html' },
26
+ * { path: 'assets/main.js', content: mainJs, contentType: 'application/javascript' },
27
+ * ],
28
+ * onProgress: (p) => console.log(`${p.percent}%`),
29
+ * });
30
+ * ```
31
+ */
32
+ export class DirectUploader {
33
+ constructor(config) {
34
+ this.config = config;
35
+ }
36
+ /**
37
+ * Upload files to OSS
38
+ */
39
+ async upload(options) {
40
+ const { projectId, files, version, onProgress } = options;
41
+ // Report preparing stage
42
+ if (onProgress) {
43
+ onProgress({
44
+ currentFile: '',
45
+ uploadedCount: 0,
46
+ totalCount: files.length,
47
+ uploadedBytes: 0,
48
+ totalBytes: 0,
49
+ percent: 0,
50
+ stage: 'preparing',
51
+ });
52
+ }
53
+ try {
54
+ // Step 1: Get upload token from BFF
55
+ const tokenResponse = await this.getUploadToken(projectId, version);
56
+ // Step 2: Create OSS client with STS credentials
57
+ const ossClient = new AliOSSClient({
58
+ region: tokenResponse.region,
59
+ bucket: tokenResponse.bucket,
60
+ credentials: tokenResponse.credentials,
61
+ timeout: this.config.timeout,
62
+ });
63
+ // Calculate total bytes
64
+ let totalBytes = 0;
65
+ for (const file of files) {
66
+ if (file.content instanceof Blob) {
67
+ totalBytes += file.content.size;
68
+ }
69
+ else if (file.content instanceof ArrayBuffer) {
70
+ totalBytes += file.content.byteLength;
71
+ }
72
+ else if (typeof file.content === 'string') {
73
+ totalBytes += new Blob([file.content]).size;
74
+ }
75
+ }
76
+ // Step 3: Upload files with progress tracking
77
+ let uploadedBytes = 0;
78
+ let uploadedCount = 0;
79
+ for (const file of files) {
80
+ // Get file size
81
+ let fileSize = 0;
82
+ if (file.content instanceof Blob) {
83
+ fileSize = file.content.size;
84
+ }
85
+ else if (file.content instanceof ArrayBuffer) {
86
+ fileSize = file.content.byteLength;
87
+ }
88
+ else if (typeof file.content === 'string') {
89
+ fileSize = new Blob([file.content]).size;
90
+ }
91
+ // Report progress before upload
92
+ if (onProgress) {
93
+ onProgress({
94
+ currentFile: file.path,
95
+ uploadedCount,
96
+ totalCount: files.length,
97
+ uploadedBytes,
98
+ totalBytes,
99
+ percent: Math.round((uploadedBytes / totalBytes) * 100),
100
+ stage: 'uploading',
101
+ });
102
+ }
103
+ // Upload file
104
+ const key = `${tokenResponse.keyPrefix}/${file.path}`.replace(/\/+/g, '/');
105
+ await ossClient.uploadFile(key, file.content, file.contentType);
106
+ uploadedBytes += fileSize;
107
+ uploadedCount++;
108
+ }
109
+ // Step 4: Notify BFF of completion
110
+ if (onProgress) {
111
+ onProgress({
112
+ currentFile: '',
113
+ uploadedCount: files.length,
114
+ totalCount: files.length,
115
+ uploadedBytes: totalBytes,
116
+ totalBytes,
117
+ percent: 100,
118
+ stage: 'finalizing',
119
+ });
120
+ }
121
+ const finalResult = await this.completeUpload(tokenResponse.deploymentId, tokenResponse.bucket, tokenResponse.keyPrefix, totalBytes, files.length);
122
+ return {
123
+ success: true,
124
+ deploymentId: tokenResponse.deploymentId,
125
+ url: finalResult.url,
126
+ bucket: tokenResponse.bucket,
127
+ keyPrefix: tokenResponse.keyPrefix,
128
+ totalBytes,
129
+ fileCount: files.length,
130
+ };
131
+ }
132
+ catch (error) {
133
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
134
+ return {
135
+ success: false,
136
+ deploymentId: '',
137
+ totalBytes: 0,
138
+ fileCount: 0,
139
+ error: errorMessage,
140
+ };
141
+ }
142
+ }
143
+ /**
144
+ * Request upload token from BFF
145
+ */
146
+ async getUploadToken(projectId, version) {
147
+ const response = await fetch(`${this.config.bffBaseUrl}/studio/oss/token`, {
148
+ method: 'POST',
149
+ headers: {
150
+ 'Content-Type': 'application/json',
151
+ 'Authorization': `Bearer ${this.config.authToken}`,
152
+ },
153
+ body: JSON.stringify({ projectId, version }),
154
+ });
155
+ if (!response.ok) {
156
+ const error = await response.text();
157
+ throw new Error(`Failed to get upload token: ${error}`);
158
+ }
159
+ return response.json();
160
+ }
161
+ /**
162
+ * Notify BFF that upload is complete
163
+ */
164
+ async completeUpload(deploymentId, bucket, keyPrefix, totalBytes, fileCount) {
165
+ const response = await fetch(`${this.config.bffBaseUrl}/studio/deployments/${deploymentId}/complete`, {
166
+ method: 'POST',
167
+ headers: {
168
+ 'Content-Type': 'application/json',
169
+ 'Authorization': `Bearer ${this.config.authToken}`,
170
+ },
171
+ body: JSON.stringify({
172
+ bucket,
173
+ keyPrefix,
174
+ totalBytes,
175
+ fileCount,
176
+ }),
177
+ });
178
+ if (!response.ok) {
179
+ const error = await response.text();
180
+ throw new Error(`Failed to complete upload: ${error}`);
181
+ }
182
+ return response.json();
183
+ }
184
+ }
185
+ //# sourceMappingURL=uploader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uploader.js","sourceRoot":"","sources":["../../src/oss/uploader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Deployment types
3
+ *
4
+ * A Deployment represents a build and upload of a project to Alibaba Cloud OSS.
5
+ */
6
+ /**
7
+ * Deployment status enum
8
+ */
9
+ export type DeploymentStatus = 'pending' | 'building' | 'uploading' | 'published' | 'failed';
10
+ /**
11
+ * Deployment metadata stored as JSONB
12
+ */
13
+ export interface DeploymentMetadata {
14
+ /** Git commit hash if available */
15
+ commitHash?: string;
16
+ /** Git branch name */
17
+ branch?: string;
18
+ /** Build duration in milliseconds */
19
+ buildDurationMs?: number;
20
+ /** Upload duration in milliseconds */
21
+ uploadDurationMs?: number;
22
+ /** Number of files uploaded */
23
+ fileCount?: number;
24
+ /** Node.js version used for build */
25
+ nodeVersion?: string;
26
+ /** Custom metadata from user */
27
+ custom?: Record<string, unknown>;
28
+ }
29
+ /**
30
+ * Deployment record
31
+ */
32
+ export interface Deployment {
33
+ /** UUID primary key */
34
+ id: string;
35
+ /** Associated project ID */
36
+ projectId: string;
37
+ /** User who created the deployment */
38
+ userId: string;
39
+ /** Version string (semver or timestamp) */
40
+ version: string;
41
+ /** Current deployment status */
42
+ status: DeploymentStatus;
43
+ /** OSS bucket name */
44
+ ossBucket?: string;
45
+ /** Object key/path in OSS bucket */
46
+ ossKey?: string;
47
+ /** Public access URL for the deployed app */
48
+ ossUrl?: string;
49
+ /** Total bundle size in bytes */
50
+ bundleSizeBytes?: number;
51
+ /** Build output log */
52
+ buildLog?: string;
53
+ /** Error message if failed */
54
+ errorMessage?: string;
55
+ /** Additional metadata */
56
+ metadata: DeploymentMetadata;
57
+ /** ISO timestamp of creation */
58
+ createdAt: string;
59
+ /** ISO timestamp when published */
60
+ publishedAt?: string;
61
+ }
62
+ /**
63
+ * Input for creating a new deployment
64
+ */
65
+ export interface CreateDeploymentInput {
66
+ projectId: string;
67
+ version?: string;
68
+ metadata?: Partial<DeploymentMetadata>;
69
+ }
70
+ /**
71
+ * Input for updating deployment status
72
+ */
73
+ export interface UpdateDeploymentInput {
74
+ status?: DeploymentStatus;
75
+ ossBucket?: string;
76
+ ossKey?: string;
77
+ ossUrl?: string;
78
+ bundleSizeBytes?: number;
79
+ buildLog?: string;
80
+ errorMessage?: string;
81
+ metadata?: Partial<DeploymentMetadata>;
82
+ publishedAt?: string;
83
+ }
84
+ /**
85
+ * Deployment list filters
86
+ */
87
+ export interface DeploymentListFilters {
88
+ /** Filter by project */
89
+ projectId?: string;
90
+ /** Filter by status */
91
+ status?: DeploymentStatus;
92
+ /** Limit number of results */
93
+ limit?: number;
94
+ /** Offset for pagination */
95
+ offset?: number;
96
+ /** Order by field */
97
+ orderBy?: 'createdAt' | 'publishedAt' | 'version';
98
+ /** Order direction */
99
+ orderDir?: 'asc' | 'desc';
100
+ }
101
+ /**
102
+ * Deployment progress event for real-time updates
103
+ */
104
+ export interface DeploymentProgress {
105
+ deploymentId: string;
106
+ status: DeploymentStatus;
107
+ stage: 'init' | 'install' | 'build' | 'bundle' | 'upload' | 'finalize';
108
+ percent: number;
109
+ message?: string;
110
+ timestamp: string;
111
+ }
112
+ //# sourceMappingURL=deployment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployment.d.ts","sourceRoot":"","sources":["../../src/types/deployment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Deployment types
3
+ *
4
+ * A Deployment represents a build and upload of a project to Alibaba Cloud OSS.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=deployment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployment.js","sourceRoot":"","sources":["../../src/types/deployment.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Type definitions for Agent Foundry Build Studio
3
+ */
4
+ export * from './project';
5
+ export * from './deployment';
6
+ export * from './workspace';
7
+ export * from './user';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Type definitions for Agent Foundry Build Studio
3
+ */
4
+ export * from './project';
5
+ export * from './deployment';
6
+ export * from './workspace';
7
+ export * from './user';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Studio Project types
3
+ *
4
+ * A StudioProject represents a React/Vite project created and managed
5
+ * within the Build Studio desktop application.
6
+ */
7
+ /**
8
+ * Supported frontend frameworks
9
+ */
10
+ export type ProjectFramework = 'vite-react' | 'next' | 'remix' | 'vite-vue' | 'vite-svelte';
11
+ /**
12
+ * Project configuration stored as JSONB in database
13
+ */
14
+ export interface ProjectConfig {
15
+ /** Build command to execute (default: "pnpm build") */
16
+ buildCommand?: string;
17
+ /** Output directory for build artifacts (default: "dist") */
18
+ outputDir?: string;
19
+ /** Environment variables to inject during build */
20
+ envVars?: Record<string, string>;
21
+ /** Base URL for the deployed app */
22
+ baseUrl?: string;
23
+ /** Custom Vite config overrides */
24
+ viteConfig?: Record<string, unknown>;
25
+ }
26
+ /**
27
+ * Studio Project - a React/Vite project managed by Build Studio
28
+ */
29
+ export interface StudioProject {
30
+ /** UUID primary key */
31
+ id: string;
32
+ /** Owner user ID (from Supabase Auth) */
33
+ userId: string;
34
+ /** Human-readable project name */
35
+ name: string;
36
+ /** URL-safe unique identifier (unique per user) */
37
+ slug: string;
38
+ /** Optional project description */
39
+ description?: string;
40
+ /** Local filesystem path to project root */
41
+ rootPath: string;
42
+ /** Frontend framework used */
43
+ framework: ProjectFramework;
44
+ /** Project configuration */
45
+ config: ProjectConfig;
46
+ /** Parent project ID if this is a fork/copy */
47
+ parentProjectId?: string;
48
+ /** ISO timestamp of creation */
49
+ createdAt: string;
50
+ /** ISO timestamp of last update */
51
+ updatedAt: string;
52
+ }
53
+ /**
54
+ * Input for creating a new project
55
+ */
56
+ export interface CreateProjectInput {
57
+ name: string;
58
+ slug: string;
59
+ description?: string;
60
+ rootPath: string;
61
+ framework?: ProjectFramework;
62
+ config?: ProjectConfig;
63
+ parentProjectId?: string;
64
+ }
65
+ /**
66
+ * Input for updating a project
67
+ */
68
+ export interface UpdateProjectInput {
69
+ name?: string;
70
+ description?: string;
71
+ config?: Partial<ProjectConfig>;
72
+ }
73
+ /**
74
+ * Project list filters
75
+ */
76
+ export interface ProjectListFilters {
77
+ /** Filter by framework */
78
+ framework?: ProjectFramework;
79
+ /** Search by name (case-insensitive) */
80
+ search?: string;
81
+ /** Limit number of results */
82
+ limit?: number;
83
+ /** Offset for pagination */
84
+ offset?: number;
85
+ /** Order by field */
86
+ orderBy?: 'createdAt' | 'updatedAt' | 'name';
87
+ /** Order direction */
88
+ orderDir?: 'asc' | 'desc';
89
+ }
90
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/types/project.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,aAAa,CAAC;AAE5F;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,mCAAmC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,EAAE,EAAE,MAAM,CAAC;IAEX,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IAEf,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IAEb,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IAEb,mCAAmC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;IAEjB,8BAA8B;IAC9B,SAAS,EAAE,gBAAgB,CAAC;IAE5B,4BAA4B;IAC5B,MAAM,EAAE,aAAa,CAAC;IAEtB,+CAA+C;IAC/C,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAElB,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,0BAA0B;IAC1B,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAE7B,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,qBAAqB;IACrB,OAAO,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,MAAM,CAAC;IAE7C,sBAAsB;IACtB,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CAC3B"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Studio Project types
3
+ *
4
+ * A StudioProject represents a React/Vite project created and managed
5
+ * within the Build Studio desktop application.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/types/project.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * User types
3
+ *
4
+ * StudioUser is linked to Supabase Auth user but may have
5
+ * additional Studio-specific metadata.
6
+ */
7
+ /**
8
+ * User preferences for Studio
9
+ */
10
+ export interface UserPreferences {
11
+ /** Default framework for new projects */
12
+ defaultFramework?: string;
13
+ /** Default build command */
14
+ defaultBuildCommand?: string;
15
+ /** Theme preference */
16
+ theme?: 'light' | 'dark' | 'system';
17
+ /** Editor font size */
18
+ editorFontSize?: number;
19
+ /** Show line numbers in editor */
20
+ showLineNumbers?: boolean;
21
+ /** Auto-save interval in seconds (0 = disabled) */
22
+ autoSaveInterval?: number;
23
+ /** Default chat panel width ratio (0.0 - 1.0) */
24
+ chatPanelRatio?: number;
25
+ }
26
+ /**
27
+ * Studio user - extends Supabase Auth user with Studio-specific data
28
+ */
29
+ export interface StudioUser {
30
+ /** User ID from Supabase Auth */
31
+ id: string;
32
+ /** Email address */
33
+ email: string;
34
+ /** Display name */
35
+ displayName?: string;
36
+ /** Avatar URL */
37
+ avatarUrl?: string;
38
+ /** User preferences */
39
+ preferences: UserPreferences;
40
+ /** ISO timestamp of account creation */
41
+ createdAt: string;
42
+ /** ISO timestamp of last login */
43
+ lastLoginAt?: string;
44
+ }
45
+ /**
46
+ * Authentication state
47
+ */
48
+ export interface AuthState {
49
+ /** Whether user is authenticated */
50
+ isAuthenticated: boolean;
51
+ /** Current user if authenticated */
52
+ user?: StudioUser;
53
+ /** Supabase access token */
54
+ accessToken?: string;
55
+ /** Token expiration timestamp */
56
+ expiresAt?: string;
57
+ /** Whether auth state is loading */
58
+ isLoading: boolean;
59
+ }
60
+ /**
61
+ * Login credentials
62
+ */
63
+ export interface LoginCredentials {
64
+ email: string;
65
+ password: string;
66
+ }
67
+ /**
68
+ * OAuth provider
69
+ */
70
+ export type OAuthProvider = 'google' | 'github' | 'apple';
71
+ //# sourceMappingURL=user.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/types/user.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,4BAA4B;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,uBAAuB;IACvB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IAEpC,uBAAuB;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,kCAAkC;IAClC,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,mDAAmD;IACnD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,iCAAiC;IACjC,EAAE,EAAE,MAAM,CAAC;IAEX,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IAEd,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,iBAAiB;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,uBAAuB;IACvB,WAAW,EAAE,eAAe,CAAC;IAE7B,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAElB,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,oCAAoC;IACpC,eAAe,EAAE,OAAO,CAAC;IAEzB,oCAAoC;IACpC,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,oCAAoC;IACpC,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * User types
3
+ *
4
+ * StudioUser is linked to Supabase Auth user but may have
5
+ * additional Studio-specific metadata.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/types/user.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Workspace types
3
+ *
4
+ * Based on AF-studio-SPEC.md - Workspace is the runtime representation
5
+ * of a project being actively worked on in the Studio.
6
+ */
7
+ /**
8
+ * Dev server status
9
+ */
10
+ export type DevServerStatus = 'stopped' | 'starting' | 'running' | 'error';
11
+ /**
12
+ * Dev server runtime state
13
+ */
14
+ export interface DevServerState {
15
+ /** Current server status */
16
+ status: DevServerStatus;
17
+ /** Port number if running */
18
+ port?: number;
19
+ /** Full URL to access dev server */
20
+ url?: string;
21
+ /** Process ID of dev server */
22
+ pid?: number;
23
+ /** Last error message if status is 'error' */
24
+ lastError?: string;
25
+ /** Timestamp when server started */
26
+ startedAt?: string;
27
+ }
28
+ /**
29
+ * Workspace - runtime state of an active project in Studio
30
+ *
31
+ * This extends StudioProject with runtime-specific fields that are
32
+ * not persisted to the database.
33
+ */
34
+ export interface Workspace {
35
+ /** Unique identifier (ULID recommended) */
36
+ id: string;
37
+ /** Human-readable workspace name */
38
+ name: string;
39
+ /** Local filesystem root path */
40
+ rootPath: string;
41
+ /** ISO timestamp of creation */
42
+ createdAt: string;
43
+ /** ISO timestamp of last update */
44
+ updatedAt: string;
45
+ /** Parent workspace ID if this is a fork */
46
+ parentWorkspaceId?: string;
47
+ /** Associated project ID in database (optional - may be local-only) */
48
+ projectId?: string;
49
+ /** Dev server runtime state */
50
+ devServer?: DevServerState;
51
+ }
52
+ /**
53
+ * Session - an agent interaction session within a workspace
54
+ * Based on OpenCode session model
55
+ */
56
+ export interface Session {
57
+ /** Session ID */
58
+ id: string;
59
+ /** Associated workspace ID */
60
+ workspaceId: string;
61
+ /** Active agent (plan or build) */
62
+ agentId: 'plan' | 'build' | string;
63
+ /** Parent session ID if forked */
64
+ parentId?: string;
65
+ /** ISO timestamp of creation */
66
+ createdAt: string;
67
+ /** ISO timestamp of last activity */
68
+ lastActivityAt: string;
69
+ }
70
+ /**
71
+ * Viewport preset for responsive preview
72
+ */
73
+ export interface ViewportPreset {
74
+ name: string;
75
+ width: number;
76
+ height: number;
77
+ deviceScaleFactor?: number;
78
+ }
79
+ /**
80
+ * Built-in viewport presets from SPEC
81
+ */
82
+ export declare const VIEWPORT_PRESETS: ViewportPreset[];
83
+ /**
84
+ * Workspace runner command whitelist (for security)
85
+ */
86
+ export declare const ALLOWED_SCRIPTS: readonly ["install", "dev", "build", "test", "lint", "preview"];
87
+ export type AllowedScript = typeof ALLOWED_SCRIPTS[number];
88
+ //# sourceMappingURL=workspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/types/workspace.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,4BAA4B;IAC5B,MAAM,EAAE,eAAe,CAAC;IAExB,6BAA6B;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,oCAAoC;IACpC,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,+BAA+B;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;IAEX,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IAEb,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IAEjB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAElB,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAElB,4CAA4C;IAC5C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,+BAA+B;IAC/B,SAAS,CAAC,EAAE,cAAc,CAAC;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,iBAAiB;IACjB,EAAE,EAAE,MAAM,CAAC;IAEX,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;IAEpB,mCAAmC;IACnC,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IAEnC,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAElB,qCAAqC;IACrC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,cAAc,EAK5C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,iEAOlB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Workspace types
3
+ *
4
+ * Based on AF-studio-SPEC.md - Workspace is the runtime representation
5
+ * of a project being actively worked on in the Studio.
6
+ */
7
+ /**
8
+ * Built-in viewport presets from SPEC
9
+ */
10
+ export const VIEWPORT_PRESETS = [
11
+ { name: 'Desktop', width: 1280, height: 800 },
12
+ { name: 'iPhone SE', width: 375, height: 667, deviceScaleFactor: 2 },
13
+ { name: 'iPhone 14 Pro', width: 390, height: 844, deviceScaleFactor: 3 },
14
+ { name: 'iPad', width: 768, height: 1024, deviceScaleFactor: 2 },
15
+ ];
16
+ /**
17
+ * Workspace runner command whitelist (for security)
18
+ */
19
+ export const ALLOWED_SCRIPTS = [
20
+ 'install',
21
+ 'dev',
22
+ 'build',
23
+ 'test',
24
+ 'lint',
25
+ 'preview',
26
+ ];
27
+ //# sourceMappingURL=workspace.js.map