devcache-hub 0.1.3 → 0.3.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/dist/analyzers/ArchitectureAnalyzer.d.ts +17 -0
- package/dist/analyzers/ArchitectureAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/ArchitectureAnalyzer.js +217 -0
- package/dist/analyzers/ArchitectureAnalyzer.js.map +1 -0
- package/dist/analyzers/FeaturesAnalyzer.d.ts +18 -0
- package/dist/analyzers/FeaturesAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/FeaturesAnalyzer.js +258 -0
- package/dist/analyzers/FeaturesAnalyzer.js.map +1 -0
- package/dist/analyzers/ImpactAnalyzer.d.ts +16 -0
- package/dist/analyzers/ImpactAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/ImpactAnalyzer.js +165 -0
- package/dist/analyzers/ImpactAnalyzer.js.map +1 -0
- package/dist/analyzers/ProjectAnalyzer.d.ts +14 -0
- package/dist/analyzers/ProjectAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/ProjectAnalyzer.js +142 -0
- package/dist/analyzers/ProjectAnalyzer.js.map +1 -0
- package/dist/analyzers/StackAnalyzer.d.ts +28 -0
- package/dist/analyzers/StackAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/StackAnalyzer.js +320 -0
- package/dist/analyzers/StackAnalyzer.js.map +1 -0
- package/dist/analyzers/base/BaseAnalyzer.d.ts +39 -0
- package/dist/analyzers/base/BaseAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/base/BaseAnalyzer.js +64 -0
- package/dist/analyzers/base/BaseAnalyzer.js.map +1 -0
- package/dist/analyzers/index.d.ts +7 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +23 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +32 -19
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/login.d.ts.map +1 -1
- package/dist/cli/commands/login.js +89 -19
- package/dist/cli/commands/login.js.map +1 -1
- package/dist/cli/commands/push.d.ts.map +1 -1
- package/dist/cli/commands/push.js +81 -10
- package/dist/cli/commands/push.js.map +1 -1
- package/dist/orchestrator/FileSystemHandler.d.ts +35 -0
- package/dist/orchestrator/FileSystemHandler.d.ts.map +1 -0
- package/dist/orchestrator/FileSystemHandler.js +138 -0
- package/dist/orchestrator/FileSystemHandler.js.map +1 -0
- package/dist/orchestrator/Orchestrator.d.ts +31 -0
- package/dist/orchestrator/Orchestrator.d.ts.map +1 -0
- package/dist/orchestrator/Orchestrator.js +141 -0
- package/dist/orchestrator/Orchestrator.js.map +1 -0
- package/dist/orchestrator/TemplateManager.d.ts +35 -0
- package/dist/orchestrator/TemplateManager.d.ts.map +1 -0
- package/dist/orchestrator/TemplateManager.js +116 -0
- package/dist/orchestrator/TemplateManager.js.map +1 -0
- package/dist/orchestrator/index.d.ts +4 -0
- package/dist/orchestrator/index.d.ts.map +1 -0
- package/dist/orchestrator/index.js +20 -0
- package/dist/orchestrator/index.js.map +1 -0
- package/dist/supabase/client.d.ts +54 -0
- package/dist/supabase/client.d.ts.map +1 -0
- package/dist/supabase/client.js +181 -0
- package/dist/supabase/client.js.map +1 -0
- package/dist/supabase/index.d.ts +3 -0
- package/dist/supabase/index.d.ts.map +1 -0
- package/dist/supabase/index.js +19 -0
- package/dist/supabase/index.js.map +1 -0
- package/dist/supabase/oauth.d.ts +25 -0
- package/dist/supabase/oauth.d.ts.map +1 -0
- package/dist/supabase/oauth.js +218 -0
- package/dist/supabase/oauth.js.map +1 -0
- package/dist/supabase/storage.d.ts +46 -0
- package/dist/supabase/storage.d.ts.map +1 -0
- package/dist/supabase/storage.js +179 -0
- package/dist/supabase/storage.js.map +1 -0
- package/dist/types/analyzers.d.ts +51 -0
- package/dist/types/analyzers.d.ts.map +1 -0
- package/dist/types/analyzers.js +3 -0
- package/dist/types/analyzers.js.map +1 -0
- package/dist/types/config.d.ts +27 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +3 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +20 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/templates.d.ts +18 -0
- package/dist/types/templates.d.ts.map +1 -0
- package/dist/types/templates.js +3 -0
- package/dist/types/templates.js.map +1 -0
- package/dist/utils/config.d.ts +17 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +46 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/fileParser.d.ts +28 -0
- package/dist/utils/fileParser.d.ts.map +1 -0
- package/dist/utils/fileParser.js +111 -0
- package/dist/utils/fileParser.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +20 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +9 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +31 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +13 -12
- package/templates/general/project-impact.yaml +34 -0
- package/templates/general/project-overview.yaml +34 -0
- package/templates/tech/architecture-project.yaml +42 -0
- package/templates/tech/features.yaml +38 -0
- package/templates/tech/stack-project.yaml +42 -0
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.OAuthFlow = void 0;
|
|
7
|
+
const http_1 = require("http");
|
|
8
|
+
const utils_1 = require("../utils");
|
|
9
|
+
const open_1 = __importDefault(require("open"));
|
|
10
|
+
const PORT = 54321;
|
|
11
|
+
const CALLBACK_PATH = '/auth/callback';
|
|
12
|
+
class OAuthFlow {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.server = null;
|
|
15
|
+
this.resolve = null;
|
|
16
|
+
this.reject = null;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Start OAuth flow
|
|
20
|
+
*/
|
|
21
|
+
async startFlow(appUrl) {
|
|
22
|
+
return new Promise((resolve, reject) => {
|
|
23
|
+
this.resolve = resolve;
|
|
24
|
+
this.reject = reject;
|
|
25
|
+
// Create local server to receive callback
|
|
26
|
+
this.server = (0, http_1.createServer)((req, res) => this.handleRequest(req, res));
|
|
27
|
+
this.server.listen(PORT, () => {
|
|
28
|
+
utils_1.Logger.info('Starting authentication flow...');
|
|
29
|
+
// Build OAuth URL
|
|
30
|
+
const authUrl = `${appUrl}/auth/cli?redirect_uri=http://localhost:${PORT}${CALLBACK_PATH}`;
|
|
31
|
+
utils_1.Logger.info('Opening browser for authentication...');
|
|
32
|
+
utils_1.Logger.debug(`Auth URL: ${authUrl}`);
|
|
33
|
+
// Open browser
|
|
34
|
+
(0, open_1.default)(authUrl).catch((error) => {
|
|
35
|
+
utils_1.Logger.warn('Could not open browser automatically');
|
|
36
|
+
console.log(`\nPlease open this URL in your browser:\n${authUrl}\n`);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
// Timeout after 5 minutes
|
|
40
|
+
setTimeout(() => {
|
|
41
|
+
this.cleanup();
|
|
42
|
+
reject(new Error('Authentication timeout. Please try again.'));
|
|
43
|
+
}, 5 * 60 * 1000);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Handle callback request
|
|
48
|
+
*/
|
|
49
|
+
handleRequest(req, res) {
|
|
50
|
+
if (!req.url?.startsWith(CALLBACK_PATH)) {
|
|
51
|
+
res.writeHead(404);
|
|
52
|
+
res.end('Not found');
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
// Parse query parameters
|
|
57
|
+
const url = new URL(req.url, `http://localhost:${PORT}`);
|
|
58
|
+
const params = url.searchParams;
|
|
59
|
+
// Check for error
|
|
60
|
+
const error = params.get('error');
|
|
61
|
+
if (error) {
|
|
62
|
+
throw new Error(params.get('error_description') || error);
|
|
63
|
+
}
|
|
64
|
+
// Get tokens
|
|
65
|
+
const access_token = params.get('access_token');
|
|
66
|
+
const refresh_token = params.get('refresh_token');
|
|
67
|
+
const user_id = params.get('user_id');
|
|
68
|
+
const email = params.get('email');
|
|
69
|
+
const expires_at = params.get('expires_at');
|
|
70
|
+
if (!access_token || !refresh_token || !user_id || !email) {
|
|
71
|
+
throw new Error('Missing required authentication parameters');
|
|
72
|
+
}
|
|
73
|
+
// Send success response
|
|
74
|
+
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
75
|
+
res.end(`
|
|
76
|
+
<!DOCTYPE html>
|
|
77
|
+
<html>
|
|
78
|
+
<head>
|
|
79
|
+
<title>Authentication Successful</title>
|
|
80
|
+
<style>
|
|
81
|
+
body {
|
|
82
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
83
|
+
display: flex;
|
|
84
|
+
align-items: center;
|
|
85
|
+
justify-content: center;
|
|
86
|
+
height: 100vh;
|
|
87
|
+
margin: 0;
|
|
88
|
+
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
89
|
+
}
|
|
90
|
+
.container {
|
|
91
|
+
background: white;
|
|
92
|
+
padding: 3rem;
|
|
93
|
+
border-radius: 1rem;
|
|
94
|
+
box-shadow: 0 20px 60px rgba(0,0,0,0.3);
|
|
95
|
+
text-align: center;
|
|
96
|
+
max-width: 400px;
|
|
97
|
+
}
|
|
98
|
+
.success-icon {
|
|
99
|
+
font-size: 4rem;
|
|
100
|
+
margin-bottom: 1rem;
|
|
101
|
+
}
|
|
102
|
+
h1 {
|
|
103
|
+
color: #2d3748;
|
|
104
|
+
margin: 0 0 1rem 0;
|
|
105
|
+
}
|
|
106
|
+
p {
|
|
107
|
+
color: #718096;
|
|
108
|
+
margin: 0 0 1.5rem 0;
|
|
109
|
+
}
|
|
110
|
+
.email {
|
|
111
|
+
background: #f7fafc;
|
|
112
|
+
padding: 0.75rem;
|
|
113
|
+
border-radius: 0.5rem;
|
|
114
|
+
color: #4a5568;
|
|
115
|
+
font-family: monospace;
|
|
116
|
+
margin-bottom: 1.5rem;
|
|
117
|
+
}
|
|
118
|
+
.close-message {
|
|
119
|
+
color: #a0aec0;
|
|
120
|
+
font-size: 0.875rem;
|
|
121
|
+
}
|
|
122
|
+
</style>
|
|
123
|
+
</head>
|
|
124
|
+
<body>
|
|
125
|
+
<div class="container">
|
|
126
|
+
<div class="success-icon">✓</div>
|
|
127
|
+
<h1>Authentication Successful!</h1>
|
|
128
|
+
<p>You have successfully logged in to DevCache.</p>
|
|
129
|
+
<div class="email">${email}</div>
|
|
130
|
+
<p class="close-message">You can close this window and return to your terminal.</p>
|
|
131
|
+
</div>
|
|
132
|
+
</body>
|
|
133
|
+
</html>
|
|
134
|
+
`);
|
|
135
|
+
// Resolve promise
|
|
136
|
+
if (this.resolve) {
|
|
137
|
+
this.resolve({
|
|
138
|
+
access_token,
|
|
139
|
+
refresh_token,
|
|
140
|
+
user_id,
|
|
141
|
+
email,
|
|
142
|
+
expires_at: expires_at ? parseInt(expires_at) : Date.now() / 1000 + 3600,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
// Cleanup
|
|
146
|
+
setTimeout(() => this.cleanup(), 1000);
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
// Send error response
|
|
150
|
+
res.writeHead(400, { 'Content-Type': 'text/html' });
|
|
151
|
+
res.end(`
|
|
152
|
+
<!DOCTYPE html>
|
|
153
|
+
<html>
|
|
154
|
+
<head>
|
|
155
|
+
<title>Authentication Failed</title>
|
|
156
|
+
<style>
|
|
157
|
+
body {
|
|
158
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
159
|
+
display: flex;
|
|
160
|
+
align-items: center;
|
|
161
|
+
justify-content: center;
|
|
162
|
+
height: 100vh;
|
|
163
|
+
margin: 0;
|
|
164
|
+
background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
|
|
165
|
+
}
|
|
166
|
+
.container {
|
|
167
|
+
background: white;
|
|
168
|
+
padding: 3rem;
|
|
169
|
+
border-radius: 1rem;
|
|
170
|
+
box-shadow: 0 20px 60px rgba(0,0,0,0.3);
|
|
171
|
+
text-align: center;
|
|
172
|
+
max-width: 400px;
|
|
173
|
+
}
|
|
174
|
+
.error-icon {
|
|
175
|
+
font-size: 4rem;
|
|
176
|
+
margin-bottom: 1rem;
|
|
177
|
+
}
|
|
178
|
+
h1 {
|
|
179
|
+
color: #2d3748;
|
|
180
|
+
margin: 0 0 1rem 0;
|
|
181
|
+
}
|
|
182
|
+
p {
|
|
183
|
+
color: #718096;
|
|
184
|
+
}
|
|
185
|
+
</style>
|
|
186
|
+
</head>
|
|
187
|
+
<body>
|
|
188
|
+
<div class="container">
|
|
189
|
+
<div class="error-icon">✗</div>
|
|
190
|
+
<h1>Authentication Failed</h1>
|
|
191
|
+
<p>${error.message}</p>
|
|
192
|
+
<p>Please try again from your terminal.</p>
|
|
193
|
+
</div>
|
|
194
|
+
</body>
|
|
195
|
+
</html>
|
|
196
|
+
`);
|
|
197
|
+
// Reject promise
|
|
198
|
+
if (this.reject) {
|
|
199
|
+
this.reject(error);
|
|
200
|
+
}
|
|
201
|
+
// Cleanup
|
|
202
|
+
setTimeout(() => this.cleanup(), 1000);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Cleanup server
|
|
207
|
+
*/
|
|
208
|
+
cleanup() {
|
|
209
|
+
if (this.server) {
|
|
210
|
+
this.server.close();
|
|
211
|
+
this.server = null;
|
|
212
|
+
}
|
|
213
|
+
this.resolve = null;
|
|
214
|
+
this.reject = null;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
exports.OAuthFlow = OAuthFlow;
|
|
218
|
+
//# sourceMappingURL=oauth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/supabase/oauth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { DevCacheSupabaseClient } from './client';
|
|
2
|
+
export interface ProjectFolder {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
user_id: string;
|
|
7
|
+
created_at: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ProjectFile {
|
|
10
|
+
id: string;
|
|
11
|
+
parent_id: string;
|
|
12
|
+
name: string;
|
|
13
|
+
content: string;
|
|
14
|
+
type: 'file';
|
|
15
|
+
user_id: string;
|
|
16
|
+
created_at: string;
|
|
17
|
+
}
|
|
18
|
+
export declare class StorageManager {
|
|
19
|
+
private supabaseClient;
|
|
20
|
+
constructor(supabaseClient: DevCacheSupabaseClient);
|
|
21
|
+
/**
|
|
22
|
+
* Create or update project folder structure
|
|
23
|
+
*/
|
|
24
|
+
createProjectStructure(projectName: string, description?: string): Promise<ProjectFolder>;
|
|
25
|
+
/**
|
|
26
|
+
* Create category folder (general or tech)
|
|
27
|
+
*/
|
|
28
|
+
createCategoryFolder(parentId: string, categoryName: string): Promise<ProjectFolder>;
|
|
29
|
+
/**
|
|
30
|
+
* Upload documentation file
|
|
31
|
+
*/
|
|
32
|
+
uploadFile(parentId: string, fileName: string, content: string): Promise<ProjectFile>;
|
|
33
|
+
/**
|
|
34
|
+
* Upload complete documentation structure with project folder
|
|
35
|
+
*/
|
|
36
|
+
uploadDocumentation(projectName: string, files: Array<{
|
|
37
|
+
category: 'general' | 'tech';
|
|
38
|
+
filename: string;
|
|
39
|
+
content: string;
|
|
40
|
+
}>, indexContent: string, description?: string): Promise<string>;
|
|
41
|
+
/**
|
|
42
|
+
* Get project URL for viewing in dashboard
|
|
43
|
+
*/
|
|
44
|
+
getProjectUrl(projectId: string): string;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/supabase/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAGlD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,cAAc;IACb,OAAO,CAAC,cAAc;gBAAd,cAAc,EAAE,sBAAsB;IAE1D;;OAEG;IACG,sBAAsB,CAC1B,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,CAAC;IAgDzB;;OAEG;IACG,oBAAoB,CACxB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,CAAC;IA8CzB;;OAEG;IACG,UAAU,CACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,WAAW,CAAC;IA+DvB;;OAEG;IACG,mBAAmB,CACvB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,SAAS,GAAG,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,EACjF,YAAY,EAAE,MAAM,EACpB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC;IAyBlB;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;CAIzC"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StorageManager = void 0;
|
|
4
|
+
const utils_1 = require("../utils");
|
|
5
|
+
class StorageManager {
|
|
6
|
+
constructor(supabaseClient) {
|
|
7
|
+
this.supabaseClient = supabaseClient;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Create or update project folder structure
|
|
11
|
+
*/
|
|
12
|
+
async createProjectStructure(projectName, description) {
|
|
13
|
+
const client = this.supabaseClient.getClient();
|
|
14
|
+
const session = await this.supabaseClient.getSession();
|
|
15
|
+
if (!session) {
|
|
16
|
+
throw new Error('Not authenticated');
|
|
17
|
+
}
|
|
18
|
+
// Check if project folder already exists
|
|
19
|
+
const { data: existing, error: searchError } = await client
|
|
20
|
+
.from('project_items')
|
|
21
|
+
.select('*')
|
|
22
|
+
.eq('user_id', session.user_id)
|
|
23
|
+
.eq('name', projectName)
|
|
24
|
+
.eq('type', 'folder')
|
|
25
|
+
.is('parent_id', null)
|
|
26
|
+
.maybeSingle();
|
|
27
|
+
if (searchError) {
|
|
28
|
+
throw new Error(`Failed to search for existing project: ${searchError.message}`);
|
|
29
|
+
}
|
|
30
|
+
if (existing) {
|
|
31
|
+
utils_1.Logger.info(`Project "${projectName}" already exists, will update files`);
|
|
32
|
+
return existing;
|
|
33
|
+
}
|
|
34
|
+
// Create new project folder
|
|
35
|
+
const { data, error } = await client
|
|
36
|
+
.from('project_items')
|
|
37
|
+
.insert({
|
|
38
|
+
user_id: session.user_id,
|
|
39
|
+
name: projectName,
|
|
40
|
+
description: description || `DevCache documentation for ${projectName}`,
|
|
41
|
+
type: 'folder',
|
|
42
|
+
parent_id: null,
|
|
43
|
+
})
|
|
44
|
+
.select()
|
|
45
|
+
.single();
|
|
46
|
+
if (error) {
|
|
47
|
+
throw new Error(`Failed to create project folder: ${error.message}`);
|
|
48
|
+
}
|
|
49
|
+
utils_1.Logger.success(`Created project folder: ${projectName}`);
|
|
50
|
+
return data;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Create category folder (general or tech)
|
|
54
|
+
*/
|
|
55
|
+
async createCategoryFolder(parentId, categoryName) {
|
|
56
|
+
const client = this.supabaseClient.getClient();
|
|
57
|
+
const session = await this.supabaseClient.getSession();
|
|
58
|
+
if (!session) {
|
|
59
|
+
throw new Error('Not authenticated');
|
|
60
|
+
}
|
|
61
|
+
// Check if category folder already exists
|
|
62
|
+
const { data: existing, error: searchError } = await client
|
|
63
|
+
.from('project_items')
|
|
64
|
+
.select('*')
|
|
65
|
+
.eq('user_id', session.user_id)
|
|
66
|
+
.eq('parent_id', parentId)
|
|
67
|
+
.eq('name', categoryName)
|
|
68
|
+
.eq('type', 'folder')
|
|
69
|
+
.maybeSingle();
|
|
70
|
+
if (searchError) {
|
|
71
|
+
throw new Error(`Failed to search for category folder: ${searchError.message}`);
|
|
72
|
+
}
|
|
73
|
+
if (existing) {
|
|
74
|
+
return existing;
|
|
75
|
+
}
|
|
76
|
+
// Create category folder
|
|
77
|
+
const { data, error } = await client
|
|
78
|
+
.from('project_items')
|
|
79
|
+
.insert({
|
|
80
|
+
user_id: session.user_id,
|
|
81
|
+
parent_id: parentId,
|
|
82
|
+
name: categoryName,
|
|
83
|
+
type: 'folder',
|
|
84
|
+
})
|
|
85
|
+
.select()
|
|
86
|
+
.single();
|
|
87
|
+
if (error) {
|
|
88
|
+
throw new Error(`Failed to create category folder: ${error.message}`);
|
|
89
|
+
}
|
|
90
|
+
utils_1.Logger.debug(`Created category folder: ${categoryName}`);
|
|
91
|
+
return data;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Upload documentation file
|
|
95
|
+
*/
|
|
96
|
+
async uploadFile(parentId, fileName, content) {
|
|
97
|
+
const client = this.supabaseClient.getClient();
|
|
98
|
+
const session = await this.supabaseClient.getSession();
|
|
99
|
+
if (!session) {
|
|
100
|
+
throw new Error('Not authenticated');
|
|
101
|
+
}
|
|
102
|
+
// Check if file already exists
|
|
103
|
+
const { data: existing, error: searchError } = await client
|
|
104
|
+
.from('project_items')
|
|
105
|
+
.select('*')
|
|
106
|
+
.eq('user_id', session.user_id)
|
|
107
|
+
.eq('parent_id', parentId)
|
|
108
|
+
.eq('name', fileName)
|
|
109
|
+
.eq('type', 'file')
|
|
110
|
+
.maybeSingle();
|
|
111
|
+
if (searchError) {
|
|
112
|
+
throw new Error(`Failed to search for existing file: ${searchError.message}`);
|
|
113
|
+
}
|
|
114
|
+
if (existing) {
|
|
115
|
+
// Update existing file
|
|
116
|
+
const { data, error } = await client
|
|
117
|
+
.from('project_items')
|
|
118
|
+
.update({
|
|
119
|
+
content,
|
|
120
|
+
updated_at: new Date().toISOString(),
|
|
121
|
+
})
|
|
122
|
+
.eq('id', existing.id)
|
|
123
|
+
.select()
|
|
124
|
+
.single();
|
|
125
|
+
if (error) {
|
|
126
|
+
throw new Error(`Failed to update file: ${error.message}`);
|
|
127
|
+
}
|
|
128
|
+
utils_1.Logger.debug(`Updated file: ${fileName}`);
|
|
129
|
+
return data;
|
|
130
|
+
}
|
|
131
|
+
// Create new file
|
|
132
|
+
const { data, error } = await client
|
|
133
|
+
.from('project_items')
|
|
134
|
+
.insert({
|
|
135
|
+
user_id: session.user_id,
|
|
136
|
+
parent_id: parentId,
|
|
137
|
+
name: fileName,
|
|
138
|
+
content,
|
|
139
|
+
type: 'file',
|
|
140
|
+
})
|
|
141
|
+
.select()
|
|
142
|
+
.single();
|
|
143
|
+
if (error) {
|
|
144
|
+
throw new Error(`Failed to upload file: ${error.message}`);
|
|
145
|
+
}
|
|
146
|
+
utils_1.Logger.debug(`Uploaded file: ${fileName}`);
|
|
147
|
+
return data;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Upload complete documentation structure with project folder
|
|
151
|
+
*/
|
|
152
|
+
async uploadDocumentation(projectName, files, indexContent, description) {
|
|
153
|
+
utils_1.Logger.info('Creating project structure...');
|
|
154
|
+
// Create main project folder
|
|
155
|
+
const projectFolder = await this.createProjectStructure(projectName, description);
|
|
156
|
+
// Upload index.md file
|
|
157
|
+
await this.uploadFile(projectFolder.id, 'index.md', indexContent);
|
|
158
|
+
utils_1.Logger.debug('Uploaded index.md');
|
|
159
|
+
// Create category folders
|
|
160
|
+
const generalFolder = await this.createCategoryFolder(projectFolder.id, 'general');
|
|
161
|
+
const techFolder = await this.createCategoryFolder(projectFolder.id, 'tech');
|
|
162
|
+
// Upload files
|
|
163
|
+
for (const file of files) {
|
|
164
|
+
const parentId = file.category === 'general' ? generalFolder.id : techFolder.id;
|
|
165
|
+
await this.uploadFile(parentId, file.filename, file.content);
|
|
166
|
+
}
|
|
167
|
+
utils_1.Logger.success(`Uploaded ${files.length + 1} files to project "${projectName}"`);
|
|
168
|
+
return projectFolder.id;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Get project URL for viewing in dashboard
|
|
172
|
+
*/
|
|
173
|
+
getProjectUrl(projectId) {
|
|
174
|
+
const baseUrl = process.env.NEXT_PUBLIC_APP_URL || 'http://localhost:3000';
|
|
175
|
+
return `${baseUrl}/dashboard/projects/${projectId}`;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
exports.StorageManager = StorageManager;
|
|
179
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/supabase/storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export interface ProjectContext {
|
|
2
|
+
rootPath: string;
|
|
3
|
+
config: any;
|
|
4
|
+
files: FileInfo[];
|
|
5
|
+
packageJson?: PackageJson;
|
|
6
|
+
readme?: string;
|
|
7
|
+
framework?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface FileInfo {
|
|
10
|
+
path: string;
|
|
11
|
+
relativePath: string;
|
|
12
|
+
name: string;
|
|
13
|
+
extension: string;
|
|
14
|
+
size: number;
|
|
15
|
+
content?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface PackageJson {
|
|
18
|
+
name: string;
|
|
19
|
+
version?: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
main?: string;
|
|
22
|
+
scripts?: Record<string, string>;
|
|
23
|
+
dependencies?: Record<string, string>;
|
|
24
|
+
devDependencies?: Record<string, string>;
|
|
25
|
+
repository?: string | {
|
|
26
|
+
type: string;
|
|
27
|
+
url: string;
|
|
28
|
+
};
|
|
29
|
+
author?: string;
|
|
30
|
+
license?: string;
|
|
31
|
+
[key: string]: any;
|
|
32
|
+
}
|
|
33
|
+
export interface AnalysisOutput {
|
|
34
|
+
title: string;
|
|
35
|
+
sections: Section[];
|
|
36
|
+
metadata?: Record<string, any>;
|
|
37
|
+
}
|
|
38
|
+
export interface Section {
|
|
39
|
+
heading: string;
|
|
40
|
+
content: string;
|
|
41
|
+
subsections?: Section[];
|
|
42
|
+
}
|
|
43
|
+
export interface AnalysisResult {
|
|
44
|
+
analyzer: string;
|
|
45
|
+
outputPath: string;
|
|
46
|
+
category: 'general' | 'tech';
|
|
47
|
+
content: string;
|
|
48
|
+
success: boolean;
|
|
49
|
+
error?: string;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=analyzers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyzers.d.ts","sourceRoot":"","sources":["../../src/types/analyzers.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,GAAG,CAAC;IACZ,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,GAAG,MAAM,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyzers.js","sourceRoot":"","sources":["../../src/types/analyzers.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface DevCacheConfig {
|
|
2
|
+
projectName: string;
|
|
3
|
+
description?: string;
|
|
4
|
+
version?: string;
|
|
5
|
+
outputDir: string;
|
|
6
|
+
templates: {
|
|
7
|
+
general: string[];
|
|
8
|
+
tech: string[];
|
|
9
|
+
};
|
|
10
|
+
supabase: {
|
|
11
|
+
enabled: boolean;
|
|
12
|
+
projectId: string | null;
|
|
13
|
+
};
|
|
14
|
+
analysis: {
|
|
15
|
+
includePatterns: string[];
|
|
16
|
+
excludePatterns: string[];
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export interface ProjectMetadata {
|
|
20
|
+
name: string;
|
|
21
|
+
version?: string;
|
|
22
|
+
description?: string;
|
|
23
|
+
repository?: string;
|
|
24
|
+
author?: string;
|
|
25
|
+
license?: string;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE;QACT,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,IAAI,EAAE,MAAM,EAAE,CAAC;KAChB,CAAC;IACF,QAAQ,EAAE;QACR,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,CAAC;IACF,QAAQ,EAAE;QACR,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;KAC3B,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./config"), exports);
|
|
18
|
+
__exportStar(require("./analyzers"), exports);
|
|
19
|
+
__exportStar(require("./templates"), exports);
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,8CAA4B;AAC5B,8CAA4B"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface Template {
|
|
2
|
+
name: string;
|
|
3
|
+
category: 'general' | 'tech';
|
|
4
|
+
outputFile: string;
|
|
5
|
+
description: string;
|
|
6
|
+
sections: TemplateSection[];
|
|
7
|
+
analyzer: string;
|
|
8
|
+
}
|
|
9
|
+
export interface TemplateSection {
|
|
10
|
+
heading: string;
|
|
11
|
+
prompt: string;
|
|
12
|
+
required: boolean;
|
|
13
|
+
subsections?: TemplateSection[];
|
|
14
|
+
}
|
|
15
|
+
export interface TemplateRegistry {
|
|
16
|
+
[key: string]: Template;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/types/templates.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,SAAS,GAAG,MAAM,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,gBAAgB;IAC/B,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAC;CACzB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/types/templates.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { DevCacheConfig } from '../types';
|
|
2
|
+
export declare class ConfigManager {
|
|
3
|
+
private static CONFIG_FILE;
|
|
4
|
+
/**
|
|
5
|
+
* Read DevCache configuration
|
|
6
|
+
*/
|
|
7
|
+
static readConfig(rootPath?: string): Promise<DevCacheConfig>;
|
|
8
|
+
/**
|
|
9
|
+
* Write DevCache configuration
|
|
10
|
+
*/
|
|
11
|
+
static writeConfig(config: DevCacheConfig, rootPath?: string): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Check if DevCache is initialized
|
|
14
|
+
*/
|
|
15
|
+
static isInitialized(rootPath?: string): Promise<boolean>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,WAAW,CAAoB;IAE9C;;OAEG;WACU,UAAU,CAAC,QAAQ,GAAE,MAAsB,GAAG,OAAO,CAAC,cAAc,CAAC;IAalF;;OAEG;WACU,WAAW,CACtB,MAAM,EAAE,cAAc,EACtB,QAAQ,GAAE,MAAsB,GAC/B,OAAO,CAAC,IAAI,CAAC;IAKhB;;OAEG;WACU,aAAa,CAAC,QAAQ,GAAE,MAAsB,GAAG,OAAO,CAAC,OAAO,CAAC;CAU/E"}
|