mycontext-cli 1.0.94 → 2.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 +446 -130
- package/dist/agents/implementations/ClaudeAgentWorkflow.d.ts +110 -0
- package/dist/agents/implementations/ClaudeAgentWorkflow.d.ts.map +1 -0
- package/dist/agents/implementations/ClaudeAgentWorkflow.js +590 -0
- package/dist/agents/implementations/ClaudeAgentWorkflow.js.map +1 -0
- package/dist/agents/implementations/WorkflowAgent.d.ts +5 -0
- package/dist/agents/implementations/WorkflowAgent.d.ts.map +1 -1
- package/dist/agents/implementations/WorkflowAgent.js +98 -10
- package/dist/agents/implementations/WorkflowAgent.js.map +1 -1
- package/dist/agents/interfaces/SubAgent.d.ts +5 -0
- package/dist/agents/interfaces/SubAgent.d.ts.map +1 -1
- package/dist/commands/build-app.d.ts +5 -0
- package/dist/commands/build-app.d.ts.map +1 -1
- package/dist/commands/build-app.js +127 -4
- package/dist/commands/build-app.js.map +1 -1
- package/dist/commands/compile-prd.d.ts.map +1 -1
- package/dist/commands/compile-prd.js +18 -54
- package/dist/commands/compile-prd.js.map +1 -1
- package/dist/commands/enhance.d.ts +21 -0
- package/dist/commands/enhance.d.ts.map +1 -1
- package/dist/commands/enhance.js +155 -12
- package/dist/commands/enhance.js.map +1 -1
- package/dist/commands/generate-components.d.ts +43 -0
- package/dist/commands/generate-components.d.ts.map +1 -1
- package/dist/commands/generate-components.js +270 -0
- package/dist/commands/generate-components.js.map +1 -1
- package/dist/constants/fileNames.d.ts +68 -0
- package/dist/constants/fileNames.d.ts.map +1 -0
- package/dist/constants/fileNames.js +102 -0
- package/dist/constants/fileNames.js.map +1 -0
- package/dist/interfaces/AIClient.d.ts +198 -0
- package/dist/interfaces/AIClient.d.ts.map +1 -0
- package/dist/interfaces/AIClient.js +40 -0
- package/dist/interfaces/AIClient.js.map +1 -0
- package/dist/package.json +5 -3
- package/dist/types/index.d.ts +423 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/agentDefinitions.d.ts +60 -0
- package/dist/utils/agentDefinitions.d.ts.map +1 -0
- package/dist/utils/agentDefinitions.js +344 -0
- package/dist/utils/agentDefinitions.js.map +1 -0
- package/dist/utils/aiClientFactory.d.ts +93 -0
- package/dist/utils/aiClientFactory.d.ts.map +1 -0
- package/dist/utils/aiClientFactory.js +290 -0
- package/dist/utils/aiClientFactory.js.map +1 -0
- package/dist/utils/aiClientRouter.d.ts +121 -0
- package/dist/utils/aiClientRouter.d.ts.map +1 -0
- package/dist/utils/aiClientRouter.js +401 -0
- package/dist/utils/aiClientRouter.js.map +1 -0
- package/dist/utils/claudeAgentClient.d.ts +166 -0
- package/dist/utils/claudeAgentClient.d.ts.map +1 -0
- package/dist/utils/claudeAgentClient.js +714 -0
- package/dist/utils/claudeAgentClient.js.map +1 -0
- package/dist/utils/claudeClient.d.ts +7 -3
- package/dist/utils/claudeClient.d.ts.map +1 -1
- package/dist/utils/claudeClient.js +28 -5
- package/dist/utils/claudeClient.js.map +1 -1
- package/dist/utils/completeArchitectureEngine.d.ts +67 -0
- package/dist/utils/completeArchitectureEngine.d.ts.map +1 -0
- package/dist/utils/completeArchitectureEngine.js +329 -0
- package/dist/utils/completeArchitectureEngine.js.map +1 -0
- package/dist/utils/contextLoader.d.ts +1 -12
- package/dist/utils/contextLoader.d.ts.map +1 -1
- package/dist/utils/contextLoader.js +29 -150
- package/dist/utils/contextLoader.js.map +1 -1
- package/dist/utils/contextManager.d.ts +76 -0
- package/dist/utils/contextManager.d.ts.map +1 -0
- package/dist/utils/contextManager.js +327 -0
- package/dist/utils/contextManager.js.map +1 -0
- package/dist/utils/hybridAIClient.d.ts +25 -1
- package/dist/utils/hybridAIClient.d.ts.map +1 -1
- package/dist/utils/hybridAIClient.js +69 -2
- package/dist/utils/hybridAIClient.js.map +1 -1
- package/dist/utils/mcpAgentIntegration.d.ts +104 -0
- package/dist/utils/mcpAgentIntegration.d.ts.map +1 -0
- package/dist/utils/mcpAgentIntegration.js +382 -0
- package/dist/utils/mcpAgentIntegration.js.map +1 -0
- package/dist/utils/mcpTools.d.ts +164 -0
- package/dist/utils/mcpTools.d.ts.map +1 -0
- package/dist/utils/mcpTools.js +385 -0
- package/dist/utils/mcpTools.js.map +1 -0
- package/dist/utils/routeGenerator.d.ts +56 -0
- package/dist/utils/routeGenerator.d.ts.map +1 -0
- package/dist/utils/routeGenerator.js +231 -0
- package/dist/utils/routeGenerator.js.map +1 -0
- package/dist/utils/serverActionGenerator.d.ts +56 -0
- package/dist/utils/serverActionGenerator.d.ts.map +1 -0
- package/dist/utils/serverActionGenerator.js +258 -0
- package/dist/utils/serverActionGenerator.js.map +1 -0
- package/dist/utils/streamingHandler.d.ts +98 -0
- package/dist/utils/streamingHandler.d.ts.map +1 -0
- package/dist/utils/streamingHandler.js +259 -0
- package/dist/utils/streamingHandler.js.map +1 -0
- package/dist/utils/toolPermissions.d.ts +105 -0
- package/dist/utils/toolPermissions.d.ts.map +1 -0
- package/dist/utils/toolPermissions.js +408 -0
- package/dist/utils/toolPermissions.js.map +1 -0
- package/package.json +5 -3
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RouteGenerator = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Route Generator
|
|
6
|
+
* Generates Next.js App Router routes based on component hierarchy
|
|
7
|
+
*/
|
|
8
|
+
class RouteGenerator {
|
|
9
|
+
/**
|
|
10
|
+
* Generate routes for a component
|
|
11
|
+
*/
|
|
12
|
+
async generateRoutes(component, level, parentPath = "") {
|
|
13
|
+
const routes = [];
|
|
14
|
+
// Root level components get root route
|
|
15
|
+
if (level === 0) {
|
|
16
|
+
routes.push(this.generateRootRoute(component));
|
|
17
|
+
}
|
|
18
|
+
// Feature-level components get their own routes
|
|
19
|
+
if (component.type === "layout" && level === 1) {
|
|
20
|
+
routes.push(this.generateFeatureRoute(component, parentPath));
|
|
21
|
+
}
|
|
22
|
+
// Form components get specific routes
|
|
23
|
+
if (component.type === "form") {
|
|
24
|
+
routes.push(...this.generateFormRoutes(component, parentPath));
|
|
25
|
+
}
|
|
26
|
+
// Generate dynamic routes if needed
|
|
27
|
+
if (this.needsDynamicRoute(component)) {
|
|
28
|
+
routes.push(this.generateDynamicRoute(component, parentPath));
|
|
29
|
+
}
|
|
30
|
+
return routes;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Generate root route
|
|
34
|
+
*/
|
|
35
|
+
generateRootRoute(component) {
|
|
36
|
+
return {
|
|
37
|
+
path: "/",
|
|
38
|
+
type: "page",
|
|
39
|
+
page: component.name,
|
|
40
|
+
layout: "RootLayout",
|
|
41
|
+
components: [component.name],
|
|
42
|
+
actions: [],
|
|
43
|
+
metadata: {
|
|
44
|
+
title: component.description || component.name,
|
|
45
|
+
description: `${component.name} - Main Application`,
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Generate feature route
|
|
51
|
+
*/
|
|
52
|
+
generateFeatureRoute(component, parentPath) {
|
|
53
|
+
const path = `${parentPath}/${this.toKebabCase(component.name)}`;
|
|
54
|
+
return {
|
|
55
|
+
path,
|
|
56
|
+
type: "page",
|
|
57
|
+
page: component.name,
|
|
58
|
+
layout: `${component.name}Layout`,
|
|
59
|
+
components: this.collectComponentNames(component),
|
|
60
|
+
actions: component.actions?.map((a) => a.name) || [],
|
|
61
|
+
metadata: {
|
|
62
|
+
title: component.description || component.name,
|
|
63
|
+
description: component.description,
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Generate form routes (create, edit)
|
|
69
|
+
*/
|
|
70
|
+
generateFormRoutes(component, parentPath) {
|
|
71
|
+
const routes = [];
|
|
72
|
+
const baseName = this.extractBaseName(component.name);
|
|
73
|
+
// Create route
|
|
74
|
+
routes.push({
|
|
75
|
+
path: `${parentPath}/${this.toKebabCase(baseName)}/new`,
|
|
76
|
+
type: "page",
|
|
77
|
+
page: component.name,
|
|
78
|
+
layout: `${baseName}Layout`,
|
|
79
|
+
components: [component.name],
|
|
80
|
+
actions: component.actions
|
|
81
|
+
?.filter((a) => a.type === "form-action")
|
|
82
|
+
.map((a) => a.name) || [],
|
|
83
|
+
metadata: {
|
|
84
|
+
title: `Create ${baseName}`,
|
|
85
|
+
description: `Create new ${baseName}`,
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
// Edit route
|
|
89
|
+
routes.push({
|
|
90
|
+
path: `${parentPath}/${this.toKebabCase(baseName)}/[id]/edit`,
|
|
91
|
+
type: "dynamic",
|
|
92
|
+
page: component.name,
|
|
93
|
+
layout: `${baseName}Layout`,
|
|
94
|
+
components: [component.name],
|
|
95
|
+
actions: component.actions
|
|
96
|
+
?.filter((a) => a.type === "form-action")
|
|
97
|
+
.map((a) => a.name) || [],
|
|
98
|
+
metadata: {
|
|
99
|
+
title: `Edit ${baseName}`,
|
|
100
|
+
description: `Edit existing ${baseName}`,
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
return routes;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Generate dynamic route
|
|
107
|
+
*/
|
|
108
|
+
generateDynamicRoute(component, parentPath) {
|
|
109
|
+
const baseName = this.extractBaseName(component.name);
|
|
110
|
+
return {
|
|
111
|
+
path: `${parentPath}/${this.toKebabCase(baseName)}/[id]`,
|
|
112
|
+
type: "dynamic",
|
|
113
|
+
page: component.name,
|
|
114
|
+
layout: `${baseName}Layout`,
|
|
115
|
+
components: this.collectComponentNames(component),
|
|
116
|
+
actions: component.actions
|
|
117
|
+
?.filter((a) => a.type === "server-action")
|
|
118
|
+
.map((a) => a.name) || [],
|
|
119
|
+
metadata: {
|
|
120
|
+
title: `${baseName} Details`,
|
|
121
|
+
description: `View ${baseName} details`,
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Generate route metadata from component and actions
|
|
127
|
+
*/
|
|
128
|
+
generateRouteMetadata(component, actions) {
|
|
129
|
+
return {
|
|
130
|
+
title: component.description || component.name,
|
|
131
|
+
description: component.description,
|
|
132
|
+
openGraph: {
|
|
133
|
+
title: component.description || component.name,
|
|
134
|
+
description: component.description,
|
|
135
|
+
type: "website",
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Determine if component needs a dynamic route
|
|
141
|
+
*/
|
|
142
|
+
needsDynamicRoute(component) {
|
|
143
|
+
// Components that display individual items need dynamic routes
|
|
144
|
+
if (component.name.includes("Detail"))
|
|
145
|
+
return true;
|
|
146
|
+
if (component.name.includes("View"))
|
|
147
|
+
return true;
|
|
148
|
+
// Components with actions that require an ID
|
|
149
|
+
const hasIdAction = component.actions?.some((a) => a.parameters?.includes("id"));
|
|
150
|
+
if (hasIdAction)
|
|
151
|
+
return true;
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Collect all component names from hierarchy
|
|
156
|
+
*/
|
|
157
|
+
collectComponentNames(component) {
|
|
158
|
+
const names = [component.name];
|
|
159
|
+
if (component.children) {
|
|
160
|
+
Object.values(component.children).forEach((child) => {
|
|
161
|
+
names.push(...this.collectComponentNames(child));
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
return names;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Extract base name from component name (e.g., "ProductForm" -> "Product")
|
|
168
|
+
*/
|
|
169
|
+
extractBaseName(componentName) {
|
|
170
|
+
return componentName
|
|
171
|
+
.replace(/Form$/, "")
|
|
172
|
+
.replace(/List$/, "")
|
|
173
|
+
.replace(/Grid$/, "")
|
|
174
|
+
.replace(/Detail$/, "")
|
|
175
|
+
.replace(/View$/, "")
|
|
176
|
+
.replace(/Card$/, "");
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Helper: Convert to kebab-case
|
|
180
|
+
*/
|
|
181
|
+
toKebabCase(str) {
|
|
182
|
+
return str
|
|
183
|
+
.replace(/([a-z])([A-Z])/g, "$1-$2")
|
|
184
|
+
.replace(/\s+/g, "-")
|
|
185
|
+
.toLowerCase();
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Generate layout file content for route
|
|
189
|
+
*/
|
|
190
|
+
generateLayoutContent(component, childRoutes) {
|
|
191
|
+
return `
|
|
192
|
+
import { ReactNode } from 'react';
|
|
193
|
+
|
|
194
|
+
export default function ${component.name}Layout({
|
|
195
|
+
children,
|
|
196
|
+
}: {
|
|
197
|
+
children: ReactNode;
|
|
198
|
+
}) {
|
|
199
|
+
return (
|
|
200
|
+
<div className="${this.toKebabCase(component.name)}-layout">
|
|
201
|
+
{/* Add layout-specific UI here */}
|
|
202
|
+
{children}
|
|
203
|
+
</div>
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
`;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Generate page file content for route
|
|
210
|
+
*/
|
|
211
|
+
generatePageContent(component, route) {
|
|
212
|
+
const isDynamic = route.type === "dynamic";
|
|
213
|
+
const params = isDynamic ? "{ params }: { params: { id: string } }" : "";
|
|
214
|
+
return `
|
|
215
|
+
import { ${component.name} } from '@/components/${this.toKebabCase(component.name)}';
|
|
216
|
+
${route.actions.map((action) => `import { ${action} } from '@/actions/${this.toKebabCase(action)}';`).join("\n")}
|
|
217
|
+
|
|
218
|
+
export default async function ${component.name}Page(${params}) {
|
|
219
|
+
${isDynamic ? "const data = await " + route.actions[0] + "(params.id);" : ""}
|
|
220
|
+
|
|
221
|
+
return (
|
|
222
|
+
<div className="container">
|
|
223
|
+
<${component.name} ${isDynamic ? "data={data}" : ""} />
|
|
224
|
+
</div>
|
|
225
|
+
);
|
|
226
|
+
}
|
|
227
|
+
`;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
exports.RouteGenerator = RouteGenerator;
|
|
231
|
+
//# sourceMappingURL=routeGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routeGenerator.js","sourceRoot":"","sources":["../../src/utils/routeGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { ServerActionDefinition, ActionDefinition, EnhancedComponent, HttpMethod } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* Server Action Generator
|
|
4
|
+
* Generates Next.js server actions based on component requirements
|
|
5
|
+
*/
|
|
6
|
+
export declare class ServerActionGenerator {
|
|
7
|
+
/**
|
|
8
|
+
* Generate server actions for a component
|
|
9
|
+
*/
|
|
10
|
+
generateServerActions(component: EnhancedComponent): Promise<ServerActionDefinition[]>;
|
|
11
|
+
/**
|
|
12
|
+
* Generate form submission server action
|
|
13
|
+
*/
|
|
14
|
+
private generateFormSubmitAction;
|
|
15
|
+
/**
|
|
16
|
+
* Generate data fetching server action
|
|
17
|
+
*/
|
|
18
|
+
private generateDataFetchAction;
|
|
19
|
+
/**
|
|
20
|
+
* Generate CRUD actions for interactive components
|
|
21
|
+
*/
|
|
22
|
+
private generateCRUDActions;
|
|
23
|
+
/**
|
|
24
|
+
* Generate client actions that connect to server actions
|
|
25
|
+
*/
|
|
26
|
+
generateClientActions(component: EnhancedComponent, serverActions: ServerActionDefinition[]): ActionDefinition[];
|
|
27
|
+
/**
|
|
28
|
+
* Generate API endpoint definition from server action
|
|
29
|
+
*/
|
|
30
|
+
generateApiEndpoint(serverAction: ServerActionDefinition, component: EnhancedComponent): {
|
|
31
|
+
path: string;
|
|
32
|
+
method: HttpMethod;
|
|
33
|
+
action: string;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Helper: Get database table name from component
|
|
37
|
+
*/
|
|
38
|
+
private getDatabaseTable;
|
|
39
|
+
/**
|
|
40
|
+
* Helper: Convert to kebab-case
|
|
41
|
+
*/
|
|
42
|
+
private toKebabCase;
|
|
43
|
+
/**
|
|
44
|
+
* Helper: Convert to snake_case
|
|
45
|
+
*/
|
|
46
|
+
private toSnakeCase;
|
|
47
|
+
/**
|
|
48
|
+
* Helper: Pluralize word
|
|
49
|
+
*/
|
|
50
|
+
private pluralize;
|
|
51
|
+
/**
|
|
52
|
+
* Helper: Capitalize first letter
|
|
53
|
+
*/
|
|
54
|
+
private capitalize;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=serverActionGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serverActionGenerator.d.ts","sourceRoot":"","sources":["../../src/utils/serverActionGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,EACX,MAAM,UAAU,CAAC;AAElB;;;GAGG;AACH,qBAAa,qBAAqB;IAChC;;OAEG;IACG,qBAAqB,CACzB,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAqBpC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAkChC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAiC/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAyF3B;;OAEG;IACH,qBAAqB,CACnB,SAAS,EAAE,iBAAiB,EAC5B,aAAa,EAAE,sBAAsB,EAAE,GACtC,gBAAgB,EAAE;IAgBrB;;OAEG;IACH,mBAAmB,CACjB,YAAY,EAAE,sBAAsB,EACpC,SAAS,EAAE,iBAAiB,GAC3B;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,UAAU,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAevD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;OAEG;IACH,OAAO,CAAC,SAAS;IAUjB;;OAEG;IACH,OAAO,CAAC,UAAU;CAGnB"}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ServerActionGenerator = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Server Action Generator
|
|
6
|
+
* Generates Next.js server actions based on component requirements
|
|
7
|
+
*/
|
|
8
|
+
class ServerActionGenerator {
|
|
9
|
+
/**
|
|
10
|
+
* Generate server actions for a component
|
|
11
|
+
*/
|
|
12
|
+
async generateServerActions(component) {
|
|
13
|
+
const actions = [];
|
|
14
|
+
// Form components need submit actions
|
|
15
|
+
if (component.type === "form") {
|
|
16
|
+
actions.push(this.generateFormSubmitAction(component));
|
|
17
|
+
}
|
|
18
|
+
// Display components need data fetching actions
|
|
19
|
+
if (component.type === "display") {
|
|
20
|
+
actions.push(this.generateDataFetchAction(component));
|
|
21
|
+
}
|
|
22
|
+
// Interactive components may need CRUD actions
|
|
23
|
+
if (component.type === "interactive") {
|
|
24
|
+
actions.push(...this.generateCRUDActions(component));
|
|
25
|
+
}
|
|
26
|
+
return actions;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Generate form submission server action
|
|
30
|
+
*/
|
|
31
|
+
generateFormSubmitAction(component) {
|
|
32
|
+
const actionName = `submit${component.name}`;
|
|
33
|
+
const tableName = this.getDatabaseTable(component);
|
|
34
|
+
return {
|
|
35
|
+
name: actionName,
|
|
36
|
+
description: `Handle ${component.name} form submission`,
|
|
37
|
+
parameters: [
|
|
38
|
+
{
|
|
39
|
+
name: "formData",
|
|
40
|
+
type: "FormData",
|
|
41
|
+
required: true,
|
|
42
|
+
description: "Form data from client submission",
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: "userId",
|
|
46
|
+
type: "string",
|
|
47
|
+
required: false,
|
|
48
|
+
description: "Optional user ID for authentication",
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
returns: `{ success: boolean; data?: ${component.name}; error?: string }`,
|
|
52
|
+
database: tableName,
|
|
53
|
+
validation: `${component.name.toLowerCase()}Schema`,
|
|
54
|
+
middleware: ["auth", "rateLimit"],
|
|
55
|
+
errorHandling: ["ValidationError", "DatabaseError", "AuthError"],
|
|
56
|
+
caching: {
|
|
57
|
+
strategy: "no-cache",
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Generate data fetching server action
|
|
63
|
+
*/
|
|
64
|
+
generateDataFetchAction(component) {
|
|
65
|
+
const actionName = `get${this.pluralize(component.name)}`;
|
|
66
|
+
const tableName = this.getDatabaseTable(component);
|
|
67
|
+
return {
|
|
68
|
+
name: actionName,
|
|
69
|
+
description: `Fetch data for ${component.name} display`,
|
|
70
|
+
parameters: [
|
|
71
|
+
{
|
|
72
|
+
name: "filters",
|
|
73
|
+
type: "Record<string, any>",
|
|
74
|
+
required: false,
|
|
75
|
+
description: "Optional filters for data fetching",
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
name: "pagination",
|
|
79
|
+
type: "{ page: number; limit: number }",
|
|
80
|
+
required: false,
|
|
81
|
+
description: "Pagination parameters",
|
|
82
|
+
},
|
|
83
|
+
],
|
|
84
|
+
returns: `${component.name}[]`,
|
|
85
|
+
database: tableName,
|
|
86
|
+
middleware: ["auth"],
|
|
87
|
+
caching: {
|
|
88
|
+
strategy: "revalidate",
|
|
89
|
+
revalidate: 60, // 1 minute
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Generate CRUD actions for interactive components
|
|
95
|
+
*/
|
|
96
|
+
generateCRUDActions(component) {
|
|
97
|
+
const tableName = this.getDatabaseTable(component);
|
|
98
|
+
const actions = [];
|
|
99
|
+
// Create
|
|
100
|
+
actions.push({
|
|
101
|
+
name: `create${component.name}`,
|
|
102
|
+
description: `Create new ${component.name}`,
|
|
103
|
+
parameters: [
|
|
104
|
+
{
|
|
105
|
+
name: "data",
|
|
106
|
+
type: `Omit<${component.name}, 'id'>`,
|
|
107
|
+
required: true,
|
|
108
|
+
description: `${component.name} data without ID`,
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
returns: component.name,
|
|
112
|
+
database: tableName,
|
|
113
|
+
validation: `${component.name.toLowerCase()}Schema`,
|
|
114
|
+
middleware: ["auth", "rateLimit"],
|
|
115
|
+
caching: { strategy: "no-cache" },
|
|
116
|
+
});
|
|
117
|
+
// Read
|
|
118
|
+
actions.push({
|
|
119
|
+
name: `get${component.name}`,
|
|
120
|
+
description: `Get ${component.name} by ID`,
|
|
121
|
+
parameters: [
|
|
122
|
+
{
|
|
123
|
+
name: "id",
|
|
124
|
+
type: "string",
|
|
125
|
+
required: true,
|
|
126
|
+
description: `${component.name} ID`,
|
|
127
|
+
},
|
|
128
|
+
],
|
|
129
|
+
returns: `${component.name} | null`,
|
|
130
|
+
database: tableName,
|
|
131
|
+
middleware: ["auth"],
|
|
132
|
+
caching: { strategy: "revalidate", revalidate: 60 },
|
|
133
|
+
});
|
|
134
|
+
// Update
|
|
135
|
+
actions.push({
|
|
136
|
+
name: `update${component.name}`,
|
|
137
|
+
description: `Update existing ${component.name}`,
|
|
138
|
+
parameters: [
|
|
139
|
+
{
|
|
140
|
+
name: "id",
|
|
141
|
+
type: "string",
|
|
142
|
+
required: true,
|
|
143
|
+
description: `${component.name} ID`,
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
name: "data",
|
|
147
|
+
type: `Partial<${component.name}>`,
|
|
148
|
+
required: true,
|
|
149
|
+
description: "Fields to update",
|
|
150
|
+
},
|
|
151
|
+
],
|
|
152
|
+
returns: component.name,
|
|
153
|
+
database: tableName,
|
|
154
|
+
validation: `${component.name.toLowerCase()}UpdateSchema`,
|
|
155
|
+
middleware: ["auth", "rateLimit"],
|
|
156
|
+
caching: { strategy: "no-cache" },
|
|
157
|
+
});
|
|
158
|
+
// Delete
|
|
159
|
+
actions.push({
|
|
160
|
+
name: `delete${component.name}`,
|
|
161
|
+
description: `Delete ${component.name}`,
|
|
162
|
+
parameters: [
|
|
163
|
+
{
|
|
164
|
+
name: "id",
|
|
165
|
+
type: "string",
|
|
166
|
+
required: true,
|
|
167
|
+
description: `${component.name} ID`,
|
|
168
|
+
},
|
|
169
|
+
],
|
|
170
|
+
returns: "boolean",
|
|
171
|
+
database: tableName,
|
|
172
|
+
middleware: ["auth", "rateLimit"],
|
|
173
|
+
caching: { strategy: "no-cache" },
|
|
174
|
+
});
|
|
175
|
+
return actions;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Generate client actions that connect to server actions
|
|
179
|
+
*/
|
|
180
|
+
generateClientActions(component, serverActions) {
|
|
181
|
+
const clientActions = [];
|
|
182
|
+
serverActions.forEach((serverAction) => {
|
|
183
|
+
clientActions.push({
|
|
184
|
+
name: `handle${this.capitalize(serverAction.name)}`,
|
|
185
|
+
type: "client-action",
|
|
186
|
+
description: `Client-side handler for ${serverAction.name}`,
|
|
187
|
+
parameters: serverAction.parameters.map((p) => p.name),
|
|
188
|
+
serverAction: serverAction.name,
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
return clientActions;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Generate API endpoint definition from server action
|
|
195
|
+
*/
|
|
196
|
+
generateApiEndpoint(serverAction, component) {
|
|
197
|
+
const path = `/api/${this.toKebabCase(component.name)}`;
|
|
198
|
+
let method = "GET";
|
|
199
|
+
if (serverAction.name.startsWith("create"))
|
|
200
|
+
method = "POST";
|
|
201
|
+
if (serverAction.name.startsWith("update"))
|
|
202
|
+
method = "PUT";
|
|
203
|
+
if (serverAction.name.startsWith("delete"))
|
|
204
|
+
method = "DELETE";
|
|
205
|
+
return {
|
|
206
|
+
path,
|
|
207
|
+
method,
|
|
208
|
+
action: serverAction.name,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Helper: Get database table name from component
|
|
213
|
+
*/
|
|
214
|
+
getDatabaseTable(component) {
|
|
215
|
+
if (component.database?.table) {
|
|
216
|
+
return component.database.table;
|
|
217
|
+
}
|
|
218
|
+
return this.toSnakeCase(this.pluralize(component.name));
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Helper: Convert to kebab-case
|
|
222
|
+
*/
|
|
223
|
+
toKebabCase(str) {
|
|
224
|
+
return str
|
|
225
|
+
.replace(/([a-z])([A-Z])/g, "$1-$2")
|
|
226
|
+
.replace(/\s+/g, "-")
|
|
227
|
+
.toLowerCase();
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Helper: Convert to snake_case
|
|
231
|
+
*/
|
|
232
|
+
toSnakeCase(str) {
|
|
233
|
+
return str
|
|
234
|
+
.replace(/([a-z])([A-Z])/g, "$1_$2")
|
|
235
|
+
.replace(/\s+/g, "_")
|
|
236
|
+
.toLowerCase();
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Helper: Pluralize word
|
|
240
|
+
*/
|
|
241
|
+
pluralize(word) {
|
|
242
|
+
if (word.endsWith("y")) {
|
|
243
|
+
return word.slice(0, -1) + "ies";
|
|
244
|
+
}
|
|
245
|
+
if (word.endsWith("s")) {
|
|
246
|
+
return word + "es";
|
|
247
|
+
}
|
|
248
|
+
return word + "s";
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Helper: Capitalize first letter
|
|
252
|
+
*/
|
|
253
|
+
capitalize(str) {
|
|
254
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
exports.ServerActionGenerator = ServerActionGenerator;
|
|
258
|
+
//# sourceMappingURL=serverActionGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serverActionGenerator.js","sourceRoot":"","sources":["../../src/utils/serverActionGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Streaming Handler for Claude Agent SDK
|
|
3
|
+
*
|
|
4
|
+
* Handles streaming messages, progress tracking, and user feedback
|
|
5
|
+
* for long-running agent operations.
|
|
6
|
+
*/
|
|
7
|
+
import type { Query } from '@anthropic-ai/claude-agent-sdk';
|
|
8
|
+
export interface StreamingOptions {
|
|
9
|
+
showProgress?: boolean;
|
|
10
|
+
showTokens?: boolean;
|
|
11
|
+
showToolUsage?: boolean;
|
|
12
|
+
onProgress?: (message: string) => void;
|
|
13
|
+
onToken?: (token: string) => void;
|
|
14
|
+
onToolUse?: (tool: string, input: any) => void;
|
|
15
|
+
onError?: (error: Error) => void;
|
|
16
|
+
}
|
|
17
|
+
export interface StreamingStats {
|
|
18
|
+
totalTokens: number;
|
|
19
|
+
inputTokens: number;
|
|
20
|
+
outputTokens: number;
|
|
21
|
+
toolsUsed: string[];
|
|
22
|
+
duration: number;
|
|
23
|
+
messagesProcessed: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Handles streaming from Claude Agent SDK with progress tracking
|
|
27
|
+
*/
|
|
28
|
+
export declare class StreamingHandler {
|
|
29
|
+
private spinner;
|
|
30
|
+
private stats;
|
|
31
|
+
private startTime;
|
|
32
|
+
private options;
|
|
33
|
+
constructor(options?: StreamingOptions);
|
|
34
|
+
/**
|
|
35
|
+
* Start streaming handler
|
|
36
|
+
*/
|
|
37
|
+
start(message?: string): void;
|
|
38
|
+
/**
|
|
39
|
+
* Process streaming messages from query
|
|
40
|
+
*/
|
|
41
|
+
processStream(query: Query): Promise<string>;
|
|
42
|
+
/**
|
|
43
|
+
* Handle assistant message
|
|
44
|
+
*/
|
|
45
|
+
private handleAssistantMessage;
|
|
46
|
+
/**
|
|
47
|
+
* Handle partial assistant message (streaming)
|
|
48
|
+
*/
|
|
49
|
+
private handlePartialMessage;
|
|
50
|
+
/**
|
|
51
|
+
* Handle tool result message
|
|
52
|
+
*/
|
|
53
|
+
private handleToolResult;
|
|
54
|
+
/**
|
|
55
|
+
* Handle system message
|
|
56
|
+
*/
|
|
57
|
+
private handleSystemMessage;
|
|
58
|
+
/**
|
|
59
|
+
* Handle permission denial
|
|
60
|
+
*/
|
|
61
|
+
private handlePermissionDenial;
|
|
62
|
+
/**
|
|
63
|
+
* Update spinner text
|
|
64
|
+
*/
|
|
65
|
+
private updateSpinner;
|
|
66
|
+
/**
|
|
67
|
+
* Complete streaming successfully
|
|
68
|
+
*/
|
|
69
|
+
complete(message?: string): void;
|
|
70
|
+
/**
|
|
71
|
+
* Handle error during streaming
|
|
72
|
+
*/
|
|
73
|
+
error(error: Error): void;
|
|
74
|
+
/**
|
|
75
|
+
* Stop spinner without completion
|
|
76
|
+
*/
|
|
77
|
+
stop(): void;
|
|
78
|
+
/**
|
|
79
|
+
* Get current statistics
|
|
80
|
+
*/
|
|
81
|
+
getStats(): StreamingStats;
|
|
82
|
+
/**
|
|
83
|
+
* Reset statistics
|
|
84
|
+
*/
|
|
85
|
+
resetStats(): void;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Convenience function to create and use streaming handler
|
|
89
|
+
*/
|
|
90
|
+
export declare function streamWithProgress(query: Query, options?: StreamingOptions): Promise<{
|
|
91
|
+
content: string;
|
|
92
|
+
stats: StreamingStats;
|
|
93
|
+
}>;
|
|
94
|
+
/**
|
|
95
|
+
* Simplified streaming with default options
|
|
96
|
+
*/
|
|
97
|
+
export declare function simpleStream(query: Query): Promise<string>;
|
|
98
|
+
//# sourceMappingURL=streamingHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamingHandler.d.ts","sourceRoot":"","sources":["../../src/utils/streamingHandler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAc,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAExE,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,KAAK,CAOX;IACF,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,OAAO,CAAmB;gBAEtB,OAAO,GAAE,gBAAqB;IAS1C;;OAEG;IACH,KAAK,CAAC,OAAO,GAAE,MAAwB;IAOvC;;OAEG;IACG,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IA2ClD;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAwC9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkB5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAO9B;;OAEG;IACH,OAAO,CAAC,aAAa;IAMrB;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM;IAmBzB;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,KAAK;IAUlB;;OAEG;IACH,IAAI;IAMJ;;OAEG;IACH,QAAQ,IAAI,cAAc;IAI1B;;OAEG;IACH,UAAU;CAUX;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,CAAC,CAQrD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAOhE"}
|