@bluelibs/runner-dev 4.1.0 → 4.2.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/AI.md +40 -43
- package/README.md +70 -0
- package/dist/architect/core/errors.d.ts +39 -0
- package/dist/architect/core/errors.js +143 -0
- package/dist/architect/core/errors.js.map +1 -0
- package/dist/architect/core/index.d.ts +3 -0
- package/dist/architect/core/index.js +21 -0
- package/dist/architect/core/index.js.map +1 -0
- package/dist/architect/core/interfaces.d.ts +158 -0
- package/dist/architect/core/interfaces.js +3 -0
- package/dist/architect/core/interfaces.js.map +1 -0
- package/dist/architect/core/types.d.ts +544 -0
- package/dist/architect/core/types.js +49 -0
- package/dist/architect/core/types.js.map +1 -0
- package/dist/architect/execution/executor.d.ts +23 -0
- package/dist/architect/execution/executor.js +476 -0
- package/dist/architect/execution/executor.js.map +1 -0
- package/dist/architect/execution/index.d.ts +1 -0
- package/dist/architect/execution/index.js +19 -0
- package/dist/architect/execution/index.js.map +1 -0
- package/dist/architect/executor.d.ts +7 -0
- package/dist/architect/executor.js +150 -0
- package/dist/architect/executor.js.map +1 -0
- package/dist/architect/index.d.ts +45 -0
- package/dist/architect/index.js +76 -0
- package/dist/architect/index.js.map +1 -0
- package/dist/architect/llmClient.d.ts +10 -0
- package/dist/architect/llmClient.js +33 -0
- package/dist/architect/llmClient.js.map +1 -0
- package/dist/architect/models/base.d.ts +16 -0
- package/dist/architect/models/base.js +68 -0
- package/dist/architect/models/base.js.map +1 -0
- package/dist/architect/models/factory.d.ts +16 -0
- package/dist/architect/models/factory.js +73 -0
- package/dist/architect/models/factory.js.map +1 -0
- package/dist/architect/models/index.d.ts +3 -0
- package/dist/architect/models/index.js +21 -0
- package/dist/architect/models/index.js.map +1 -0
- package/dist/architect/models/openai.d.ts +7 -0
- package/dist/architect/models/openai.js +71 -0
- package/dist/architect/models/openai.js.map +1 -0
- package/dist/architect/planner.d.ts +9 -0
- package/dist/architect/planner.js +42 -0
- package/dist/architect/planner.js.map +1 -0
- package/dist/architect/planning/index.d.ts +4 -0
- package/dist/architect/planning/index.js +22 -0
- package/dist/architect/planning/index.js.map +1 -0
- package/dist/architect/planning/optimizer.d.ts +14 -0
- package/dist/architect/planning/optimizer.js +275 -0
- package/dist/architect/planning/optimizer.js.map +1 -0
- package/dist/architect/planning/planner.d.ts +15 -0
- package/dist/architect/planning/planner.js +124 -0
- package/dist/architect/planning/planner.js.map +1 -0
- package/dist/architect/planning/prompts.d.ts +6 -0
- package/dist/architect/planning/prompts.js +111 -0
- package/dist/architect/planning/prompts.js.map +1 -0
- package/dist/architect/planning/validator.d.ts +16 -0
- package/dist/architect/planning/validator.js +331 -0
- package/dist/architect/planning/validator.js.map +1 -0
- package/dist/architect/prompt.d.ts +1 -0
- package/dist/architect/prompt.js +13 -0
- package/dist/architect/prompt.js.map +1 -0
- package/dist/architect/types.d.ts +4 -0
- package/dist/architect/types.js +24 -0
- package/dist/architect/types.js.map +1 -0
- package/dist/cli/format.d.ts +19 -0
- package/dist/cli/format.js +62 -0
- package/dist/cli/format.js.map +1 -0
- package/dist/cli/init.d.ts +1 -0
- package/dist/cli/init.js +279 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/query.js +69 -0
- package/dist/cli/query.js.map +1 -1
- package/dist/cli.js +48 -21
- package/dist/cli.js.map +1 -1
- package/dist/code.d.ts +50 -0
- package/dist/code.js +357 -0
- package/dist/code.js.map +1 -0
- package/dist/generated/resolvers-types.d.ts +150 -29
- package/dist/index.d.ts +6 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/resources/cli.config.resource.d.ts +7 -0
- package/dist/resources/cli.config.resource.js +11 -0
- package/dist/resources/cli.config.resource.js.map +1 -0
- package/dist/resources/coverage.resource.d.ts +19 -0
- package/dist/resources/coverage.resource.js +213 -0
- package/dist/resources/coverage.resource.js.map +1 -0
- package/dist/resources/dev.resource.js +0 -2
- package/dist/resources/dev.resource.js.map +1 -1
- package/dist/resources/graphql.cli.resource.d.ts +4 -0
- package/dist/resources/graphql.cli.resource.js +27 -0
- package/dist/resources/graphql.cli.resource.js.map +1 -0
- package/dist/resources/graphql.query.cli.task.d.ts +47 -0
- package/dist/resources/graphql.query.cli.task.js +54 -0
- package/dist/resources/graphql.query.cli.task.js.map +1 -0
- package/dist/resources/introspector.cli.resource.d.ts +6 -0
- package/dist/resources/introspector.cli.resource.js +17 -0
- package/dist/resources/introspector.cli.resource.js.map +1 -0
- package/dist/resources/live.resource.d.ts +2 -1
- package/dist/resources/live.resource.js +4 -2
- package/dist/resources/live.resource.js.map +1 -1
- package/dist/resources/models/Introspector.d.ts +1 -1
- package/dist/resources/models/Introspector.js +5 -34
- package/dist/resources/models/Introspector.js.map +1 -1
- package/dist/resources/models/initializeFromStore.js +26 -34
- package/dist/resources/models/initializeFromStore.js.map +1 -1
- package/dist/resources/models/initializeFromStore.utils.js +25 -6
- package/dist/resources/models/initializeFromStore.utils.js.map +1 -1
- package/dist/resources/models/introspector.tools.js +2 -2
- package/dist/resources/models/introspector.tools.js.map +1 -1
- package/dist/resources/routeHandlers/getDocsData.d.ts +6 -0
- package/dist/resources/routeHandlers/getDocsData.js +106 -0
- package/dist/resources/routeHandlers/getDocsData.js.map +1 -1
- package/dist/resources/routeHandlers/registerHttpRoutes.hook.d.ts +4 -0
- package/dist/resources/routeHandlers/registerHttpRoutes.hook.js +9 -7
- package/dist/resources/routeHandlers/registerHttpRoutes.hook.js.map +1 -1
- package/dist/resources/server.resource.d.ts +3 -0
- package/dist/resources/server.resource.js +8 -1
- package/dist/resources/server.resource.js.map +1 -1
- package/dist/resources/swap.cli.resource.d.ts +11 -0
- package/dist/resources/swap.cli.resource.js +54 -0
- package/dist/resources/swap.cli.resource.js.map +1 -0
- package/dist/schema/context.d.ts +2 -0
- package/dist/schema/model.d.ts +4 -1
- package/dist/schema/model.js.map +1 -1
- package/dist/schema/mutation.js +38 -0
- package/dist/schema/mutation.js.map +1 -1
- package/dist/schema/query.js +22 -18
- package/dist/schema/query.js.map +1 -1
- package/dist/schema/types/BaseElementCommon.d.ts +2 -4
- package/dist/schema/types/BaseElementCommon.js +28 -0
- package/dist/schema/types/BaseElementCommon.js.map +1 -1
- package/dist/schema/types/CoverageType.d.ts +7 -0
- package/dist/schema/types/CoverageType.js +54 -0
- package/dist/schema/types/CoverageType.js.map +1 -0
- package/dist/schema/types/LiveType.js +4 -0
- package/dist/schema/types/LiveType.js.map +1 -1
- package/dist/schema/types/ResourceType.js +6 -0
- package/dist/schema/types/ResourceType.js.map +1 -1
- package/dist/schema/types/TagType.js +4 -3
- package/dist/schema/types/TagType.js.map +1 -1
- package/dist/schema/types/index.d.ts +1 -0
- package/dist/schema/types/index.js +3 -1
- package/dist/schema/types/index.js.map +1 -1
- package/dist/ui/.vite/manifest.json +2 -2
- package/dist/ui/assets/docs-DR80KoAA.js +416 -0
- package/dist/ui/assets/docs-DR80KoAA.js.map +1 -0
- package/dist/ui/assets/docs-WKK9Zcu5.css +1 -0
- package/dist/utils/path.js +10 -0
- package/dist/utils/path.js.map +1 -1
- package/package.json +12 -8
- package/dist/ui/assets/docs-DVEzFAJo.css +0 -1
- package/dist/ui/assets/docs-l9XdmrRL.js +0 -174
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/architect/planning/prompts.ts"],"names":[],"mappings":";;;AAEA,MAAa,eAAe;IAC1B,oBAAoB,CAAC,OAAwB;QAC3C,OAAO;;;kBAGO,OAAO,CAAC,WAAW;yBACZ,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;uBACpC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;mBACnC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;oBAClC,OAAO,CAAC,aAAa,CAAC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yCAgDP,CAAC;IACxC,CAAC;IAED,kBAAkB,CAAC,WAAmB,EAAE,OAAwB;QAC9D,IAAI,MAAM,GAAG,iBAAiB,WAAW,MAAM,CAAC;QAEhD,mCAAmC;QACnC,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,iBAAiB,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACrF,CAAC;QAED,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,MAAM,IAAI,iBAAiB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;iBAC3D,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,KAAK,KAAK,EAAE,CAAC;iBAC3C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACtB,CAAC;QAED,iCAAiC;QACjC,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YAC1E,MAAM,IAAI,oBAAoB,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAC1F,CAAC;QAED,qCAAqC;QACrC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;YACjE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;YAEvE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,MAAM,IAAI,iBAAiB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACjD,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,IAAI,qBAAqB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACxD,CAAC;YACD,MAAM,IAAI,IAAI,CAAC;QACjB,CAAC;QAED,MAAM,IAAI,2IAA2I,CAAC;QAEtJ,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,0BAA0B,CAAC,IAAY,EAAE,MAAgB;QACvD,OAAO;;EAET,IAAI;;;EAGJ,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;yDAQW,CAAC;IACxD,CAAC;CACF;AAlHD,0CAkHC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ValidationResult, ArchitectPlan, PlanningContext } from '../core';
|
|
2
|
+
export declare class PlanValidator {
|
|
3
|
+
validate(plan: ArchitectPlan, context?: PlanningContext): Promise<ValidationResult>;
|
|
4
|
+
private validatePlanStructure;
|
|
5
|
+
private validateAction;
|
|
6
|
+
private validateFileAction;
|
|
7
|
+
private validateDeleteAction;
|
|
8
|
+
private validateDirectoryAction;
|
|
9
|
+
private validateFileOperationAction;
|
|
10
|
+
private validateCommandAction;
|
|
11
|
+
private validatePackageAction;
|
|
12
|
+
private validateRegistrationAction;
|
|
13
|
+
private validateLogAction;
|
|
14
|
+
private validateActionSequence;
|
|
15
|
+
private generateSuggestions;
|
|
16
|
+
}
|
|
@@ -0,0 +1,331 @@
|
|
|
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.PlanValidator = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
class PlanValidator {
|
|
9
|
+
async validate(plan, context) {
|
|
10
|
+
const errors = [];
|
|
11
|
+
const warnings = [];
|
|
12
|
+
const suggestions = [];
|
|
13
|
+
// Validate plan structure
|
|
14
|
+
this.validatePlanStructure(plan, errors);
|
|
15
|
+
// Validate individual actions
|
|
16
|
+
plan.actions.forEach((action, index) => {
|
|
17
|
+
this.validateAction(action, index, errors, warnings, context);
|
|
18
|
+
});
|
|
19
|
+
// Validate action sequences and dependencies
|
|
20
|
+
this.validateActionSequence(plan.actions, errors, warnings);
|
|
21
|
+
// Generate suggestions
|
|
22
|
+
this.generateSuggestions(plan, suggestions);
|
|
23
|
+
return {
|
|
24
|
+
valid: errors.filter(e => e.severity === 'error').length === 0,
|
|
25
|
+
errors,
|
|
26
|
+
warnings,
|
|
27
|
+
suggestions
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
validatePlanStructure(plan, errors) {
|
|
31
|
+
if (!plan.id || plan.id.trim().length === 0) {
|
|
32
|
+
errors.push({
|
|
33
|
+
actionIndex: -1,
|
|
34
|
+
field: 'id',
|
|
35
|
+
message: 'Plan must have a unique ID',
|
|
36
|
+
severity: 'error'
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
if (!plan.description || plan.description.trim().length === 0) {
|
|
40
|
+
errors.push({
|
|
41
|
+
actionIndex: -1,
|
|
42
|
+
field: 'description',
|
|
43
|
+
message: 'Plan must have a description',
|
|
44
|
+
severity: 'error'
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
if (!plan.actions || plan.actions.length === 0) {
|
|
48
|
+
errors.push({
|
|
49
|
+
actionIndex: -1,
|
|
50
|
+
field: 'actions',
|
|
51
|
+
message: 'Plan must have at least one action',
|
|
52
|
+
severity: 'error'
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
validateAction(action, index, errors, warnings, context) {
|
|
57
|
+
switch (action.type) {
|
|
58
|
+
case 'createFile':
|
|
59
|
+
case 'updateFile':
|
|
60
|
+
this.validateFileAction(action, index, errors, warnings, context);
|
|
61
|
+
break;
|
|
62
|
+
case 'deleteFile':
|
|
63
|
+
this.validateDeleteAction(action, index, errors, warnings);
|
|
64
|
+
break;
|
|
65
|
+
case 'createDirectory':
|
|
66
|
+
this.validateDirectoryAction(action, index, errors, warnings);
|
|
67
|
+
break;
|
|
68
|
+
case 'moveFile':
|
|
69
|
+
case 'copyFile':
|
|
70
|
+
this.validateFileOperationAction(action, index, errors, warnings);
|
|
71
|
+
break;
|
|
72
|
+
case 'runCommand':
|
|
73
|
+
this.validateCommandAction(action, index, errors, warnings);
|
|
74
|
+
break;
|
|
75
|
+
case 'installPackage':
|
|
76
|
+
this.validatePackageAction(action, index, errors, warnings);
|
|
77
|
+
break;
|
|
78
|
+
case 'registerTask':
|
|
79
|
+
case 'registerTest':
|
|
80
|
+
this.validateRegistrationAction(action, index, errors, warnings);
|
|
81
|
+
break;
|
|
82
|
+
case 'log':
|
|
83
|
+
this.validateLogAction(action, index, errors);
|
|
84
|
+
break;
|
|
85
|
+
default:
|
|
86
|
+
errors.push({
|
|
87
|
+
actionIndex: index,
|
|
88
|
+
field: 'type',
|
|
89
|
+
message: `Unknown action type: ${action.type}`,
|
|
90
|
+
severity: 'error'
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
validateFileAction(action, index, errors, warnings, context) {
|
|
95
|
+
if (!action.path || action.path.trim().length === 0) {
|
|
96
|
+
errors.push({
|
|
97
|
+
actionIndex: index,
|
|
98
|
+
field: 'path',
|
|
99
|
+
message: 'File path is required',
|
|
100
|
+
severity: 'error'
|
|
101
|
+
});
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
// Validate path format
|
|
105
|
+
if (path_1.default.isAbsolute(action.path)) {
|
|
106
|
+
warnings.push({
|
|
107
|
+
actionIndex: index,
|
|
108
|
+
message: 'Consider using relative paths for better portability',
|
|
109
|
+
recommendation: 'Use paths relative to project root'
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
// Check for potentially dangerous paths
|
|
113
|
+
if (action.path.includes('..')) {
|
|
114
|
+
errors.push({
|
|
115
|
+
actionIndex: index,
|
|
116
|
+
field: 'path',
|
|
117
|
+
message: 'Path traversal detected - paths cannot contain ".."',
|
|
118
|
+
severity: 'error'
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
// Validate content
|
|
122
|
+
if (!action.content || action.content.trim().length === 0) {
|
|
123
|
+
warnings.push({
|
|
124
|
+
actionIndex: index,
|
|
125
|
+
message: 'File content is empty',
|
|
126
|
+
recommendation: 'Ensure file content is meaningful'
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
// Check for TypeScript files without proper extensions
|
|
130
|
+
if (action.path.endsWith('.js') && action.content.includes('import') && action.content.includes('export')) {
|
|
131
|
+
warnings.push({
|
|
132
|
+
actionIndex: index,
|
|
133
|
+
message: 'Consider using .ts extension for TypeScript files',
|
|
134
|
+
recommendation: 'Change extension to .ts for better type support'
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
// Validate against existing files if context available
|
|
138
|
+
if (context?.existingFiles && action.type === 'createFile') {
|
|
139
|
+
if (context.existingFiles.includes(action.path)) {
|
|
140
|
+
errors.push({
|
|
141
|
+
actionIndex: index,
|
|
142
|
+
field: 'path',
|
|
143
|
+
message: `File already exists: ${action.path}`,
|
|
144
|
+
severity: 'error'
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
validateDeleteAction(action, index, errors, warnings) {
|
|
150
|
+
if (!action.path || action.path.trim().length === 0) {
|
|
151
|
+
errors.push({
|
|
152
|
+
actionIndex: index,
|
|
153
|
+
field: 'path',
|
|
154
|
+
message: 'File path is required for deletion',
|
|
155
|
+
severity: 'error'
|
|
156
|
+
});
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
// Only allow deletion of test files and temporary files for safety
|
|
160
|
+
const safePatterns = [/\.test\.(ts|js)$/, /\.spec\.(ts|js)$/, /^temp\//, /^tmp\//, /\.tmp$/];
|
|
161
|
+
const isSafe = safePatterns.some(pattern => pattern.test(action.path));
|
|
162
|
+
if (!isSafe) {
|
|
163
|
+
warnings.push({
|
|
164
|
+
actionIndex: index,
|
|
165
|
+
message: `Deleting non-test file: ${action.path}`,
|
|
166
|
+
recommendation: 'Consider if file deletion is necessary'
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
validateDirectoryAction(action, index, errors, warnings) {
|
|
171
|
+
if (!action.path || action.path.trim().length === 0) {
|
|
172
|
+
errors.push({
|
|
173
|
+
actionIndex: index,
|
|
174
|
+
field: 'path',
|
|
175
|
+
message: 'Directory path is required',
|
|
176
|
+
severity: 'error'
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
validateFileOperationAction(action, index, errors, warnings) {
|
|
181
|
+
if (!action.from || action.from.trim().length === 0) {
|
|
182
|
+
errors.push({
|
|
183
|
+
actionIndex: index,
|
|
184
|
+
field: 'from',
|
|
185
|
+
message: 'Source path is required',
|
|
186
|
+
severity: 'error'
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
if (!action.to || action.to.trim().length === 0) {
|
|
190
|
+
errors.push({
|
|
191
|
+
actionIndex: index,
|
|
192
|
+
field: 'to',
|
|
193
|
+
message: 'Destination path is required',
|
|
194
|
+
severity: 'error'
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
if (action.from === action.to) {
|
|
198
|
+
errors.push({
|
|
199
|
+
actionIndex: index,
|
|
200
|
+
field: 'to',
|
|
201
|
+
message: 'Source and destination paths cannot be the same',
|
|
202
|
+
severity: 'error'
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
validateCommandAction(action, index, errors, warnings) {
|
|
207
|
+
if (!action.command || action.command.trim().length === 0) {
|
|
208
|
+
errors.push({
|
|
209
|
+
actionIndex: index,
|
|
210
|
+
field: 'command',
|
|
211
|
+
message: 'Command is required',
|
|
212
|
+
severity: 'error'
|
|
213
|
+
});
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
// Check for potentially dangerous commands
|
|
217
|
+
const dangerousCommands = ['rm -rf', 'sudo', 'chmod 777', 'curl | sh', 'wget | sh'];
|
|
218
|
+
const isDangerous = dangerousCommands.some(cmd => action.command.includes(cmd));
|
|
219
|
+
if (isDangerous) {
|
|
220
|
+
warnings.push({
|
|
221
|
+
actionIndex: index,
|
|
222
|
+
message: `Potentially dangerous command: ${action.command}`,
|
|
223
|
+
recommendation: 'Review command for security implications'
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
validatePackageAction(action, index, errors, warnings) {
|
|
228
|
+
if (!action.name || action.name.trim().length === 0) {
|
|
229
|
+
errors.push({
|
|
230
|
+
actionIndex: index,
|
|
231
|
+
field: 'name',
|
|
232
|
+
message: 'Package name is required',
|
|
233
|
+
severity: 'error'
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
// Validate package name format
|
|
237
|
+
if (action.name && !/^(@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/.test(action.name)) {
|
|
238
|
+
warnings.push({
|
|
239
|
+
actionIndex: index,
|
|
240
|
+
message: `Invalid package name format: ${action.name}`,
|
|
241
|
+
recommendation: 'Ensure package name follows npm naming conventions'
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
validateRegistrationAction(action, index, errors, warnings) {
|
|
246
|
+
const idField = action.type === 'registerTask' ? 'taskId' : 'testId';
|
|
247
|
+
const id = action[idField];
|
|
248
|
+
if (!id || id.trim().length === 0) {
|
|
249
|
+
errors.push({
|
|
250
|
+
actionIndex: index,
|
|
251
|
+
field: idField,
|
|
252
|
+
message: `${action.type === 'registerTask' ? 'Task' : 'Test'} ID is required`,
|
|
253
|
+
severity: 'error'
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
if (!action.file || action.file.trim().length === 0) {
|
|
257
|
+
errors.push({
|
|
258
|
+
actionIndex: index,
|
|
259
|
+
field: 'file',
|
|
260
|
+
message: 'File path is required',
|
|
261
|
+
severity: 'error'
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
validateLogAction(action, index, errors) {
|
|
266
|
+
if (!action.message || action.message.trim().length === 0) {
|
|
267
|
+
errors.push({
|
|
268
|
+
actionIndex: index,
|
|
269
|
+
field: 'message',
|
|
270
|
+
message: 'Log message is required',
|
|
271
|
+
severity: 'error'
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
validateActionSequence(actions, errors, warnings) {
|
|
276
|
+
const createdFiles = new Set();
|
|
277
|
+
const deletedFiles = new Set();
|
|
278
|
+
actions.forEach((action, index) => {
|
|
279
|
+
switch (action.type) {
|
|
280
|
+
case 'createFile':
|
|
281
|
+
if (createdFiles.has(action.path)) {
|
|
282
|
+
errors.push({
|
|
283
|
+
actionIndex: index,
|
|
284
|
+
field: 'path',
|
|
285
|
+
message: `File ${action.path} is created multiple times`,
|
|
286
|
+
severity: 'error'
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
if (deletedFiles.has(action.path)) {
|
|
290
|
+
warnings.push({
|
|
291
|
+
actionIndex: index,
|
|
292
|
+
message: `Creating file ${action.path} after deleting it`,
|
|
293
|
+
recommendation: 'Consider if this sequence is intentional'
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
createdFiles.add(action.path);
|
|
297
|
+
break;
|
|
298
|
+
case 'updateFile':
|
|
299
|
+
if (!createdFiles.has(action.path)) {
|
|
300
|
+
warnings.push({
|
|
301
|
+
actionIndex: index,
|
|
302
|
+
message: `Updating file ${action.path} that wasn't created in this plan`,
|
|
303
|
+
recommendation: 'Ensure the file exists or create it first'
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
break;
|
|
307
|
+
case 'deleteFile':
|
|
308
|
+
deletedFiles.add(action.path);
|
|
309
|
+
break;
|
|
310
|
+
}
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
generateSuggestions(plan, suggestions) {
|
|
314
|
+
const actionTypes = plan.actions.map(a => a.type);
|
|
315
|
+
const fileActions = actionTypes.filter(t => ['createFile', 'updateFile'].includes(t)).length;
|
|
316
|
+
const testActions = actionTypes.filter(t => t === 'registerTest').length;
|
|
317
|
+
if (fileActions > 0 && testActions === 0) {
|
|
318
|
+
suggestions.push('Consider adding tests for the created/modified functionality');
|
|
319
|
+
}
|
|
320
|
+
if (plan.actions.length > 10) {
|
|
321
|
+
suggestions.push('Large plans might benefit from being split into smaller, focused plans');
|
|
322
|
+
}
|
|
323
|
+
const hasPackageInstalls = actionTypes.includes('installPackage');
|
|
324
|
+
const hasCommands = actionTypes.includes('runCommand');
|
|
325
|
+
if (hasPackageInstalls || hasCommands) {
|
|
326
|
+
suggestions.push('Plans with package installations or commands may require elevated permissions');
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
exports.PlanValidator = PlanValidator;
|
|
331
|
+
//# sourceMappingURL=validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../src/architect/planning/validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const SYSTEM_PROMPT = "\nYou are an assistant that writes TypeScript code for a BlueLibs Runner application.\nWhen given a natural-language request, output ONLY a JSON object that matches the TypeScript type ArchitectPlan defined in src/architect/types.ts.\nDo NOT wrap the JSON in markdown, do NOT add extra keys, and do NOT hallucinate.\nThe JSON must be valid and parsable.\nIf you are unsure, respond with a single action of type \"log\" explaining the issue.\n";
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// src/architect/prompt.ts
|
|
3
|
+
// System prompt that guides the LLM to output a strict ArchitectPlan JSON.
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.SYSTEM_PROMPT = void 0;
|
|
6
|
+
exports.SYSTEM_PROMPT = `
|
|
7
|
+
You are an assistant that writes TypeScript code for a BlueLibs Runner application.
|
|
8
|
+
When given a natural-language request, output ONLY a JSON object that matches the TypeScript type ArchitectPlan defined in src/architect/types.ts.
|
|
9
|
+
Do NOT wrap the JSON in markdown, do NOT add extra keys, and do NOT hallucinate.
|
|
10
|
+
The JSON must be valid and parsable.
|
|
11
|
+
If you are unsure, respond with a single action of type "log" explaining the issue.
|
|
12
|
+
`;
|
|
13
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/architect/prompt.ts"],"names":[],"mappings":";AAAA,0BAA0B;AAC1B,2EAA2E;;;AAE9D,QAAA,aAAa,GAAG;;;;;;CAM5B,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Legacy types - deprecated in favor of the new core types
|
|
3
|
+
// This file is kept for backward compatibility
|
|
4
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
5
|
+
if (k2 === undefined) k2 = k;
|
|
6
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
7
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
8
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
9
|
+
}
|
|
10
|
+
Object.defineProperty(o, k2, desc);
|
|
11
|
+
}) : (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
o[k2] = m[k];
|
|
14
|
+
}));
|
|
15
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
16
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
17
|
+
};
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
/**
|
|
20
|
+
* @deprecated Use types from './core/types' instead
|
|
21
|
+
*/
|
|
22
|
+
// Re-export the new types for compatibility
|
|
23
|
+
__exportStar(require("./core/types"), exports);
|
|
24
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/architect/types.ts"],"names":[],"mappings":";AAAA,2DAA2D;AAC3D,+CAA+C;;;;;;;;;;;;;;;;AAE/C;;GAEG;AAEH,4CAA4C;AAC5C,+CAA6B"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare const c: {
|
|
2
|
+
bold: (input: string) => string;
|
|
3
|
+
dim: (input: string) => string;
|
|
4
|
+
underline: (input: string) => string;
|
|
5
|
+
cyan: (input: string) => string;
|
|
6
|
+
green: (input: string) => string;
|
|
7
|
+
yellow: (input: string) => string;
|
|
8
|
+
magenta: (input: string) => string;
|
|
9
|
+
gray: (input: string) => string;
|
|
10
|
+
title: (input: string) => string;
|
|
11
|
+
cmd: (input: string) => string;
|
|
12
|
+
};
|
|
13
|
+
export declare function stripAnsi(input: string): string;
|
|
14
|
+
export declare function indentLines(input: string, spaces?: number): string;
|
|
15
|
+
export declare function alignRows(rows: Array<[string, string]>, options?: {
|
|
16
|
+
gap?: number;
|
|
17
|
+
indent?: number;
|
|
18
|
+
}): string;
|
|
19
|
+
export declare function divider(width?: number): string;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Lightweight CLI formatting utilities with optional ANSI colors
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.c = void 0;
|
|
5
|
+
exports.stripAnsi = stripAnsi;
|
|
6
|
+
exports.indentLines = indentLines;
|
|
7
|
+
exports.alignRows = alignRows;
|
|
8
|
+
exports.divider = divider;
|
|
9
|
+
const FORCE_COLOR = process.env.FORCE_COLOR;
|
|
10
|
+
const NO_COLOR = process.env.NO_COLOR;
|
|
11
|
+
const isColorEnabled = Boolean((FORCE_COLOR && FORCE_COLOR !== "0") ||
|
|
12
|
+
(!NO_COLOR && process.stdout && process.stdout.isTTY));
|
|
13
|
+
function wrap(open, close) {
|
|
14
|
+
return (input) => isColorEnabled ? `\u001b[${open}m${input}\u001b[${close}m` : input;
|
|
15
|
+
}
|
|
16
|
+
function chain(...stylers) {
|
|
17
|
+
return (input) => stylers.reduce((acc, fn) => fn(acc), input);
|
|
18
|
+
}
|
|
19
|
+
exports.c = {
|
|
20
|
+
bold: wrap(1, 22),
|
|
21
|
+
dim: wrap(2, 22),
|
|
22
|
+
underline: wrap(4, 24),
|
|
23
|
+
cyan: wrap(36, 39),
|
|
24
|
+
green: wrap(32, 39),
|
|
25
|
+
yellow: wrap(33, 39),
|
|
26
|
+
magenta: wrap(35, 39),
|
|
27
|
+
gray: wrap(90, 39),
|
|
28
|
+
// Convenience combos
|
|
29
|
+
title: chain(wrap(1, 22), wrap(36, 39)), // bold + cyan
|
|
30
|
+
cmd: chain(wrap(32, 39), wrap(1, 22)), // green + bold
|
|
31
|
+
};
|
|
32
|
+
const ANSI_PATTERN = /\u001b\[[0-9;]*m/g;
|
|
33
|
+
function stripAnsi(input) {
|
|
34
|
+
return input.replace(ANSI_PATTERN, "");
|
|
35
|
+
}
|
|
36
|
+
function indentLines(input, spaces = 2) {
|
|
37
|
+
const pad = " ".repeat(spaces);
|
|
38
|
+
return input
|
|
39
|
+
.split("\n")
|
|
40
|
+
.map((line) => (line.length ? pad + line : line))
|
|
41
|
+
.join("\n");
|
|
42
|
+
}
|
|
43
|
+
function alignRows(rows, options = {}) {
|
|
44
|
+
const gap = options.gap ?? 2;
|
|
45
|
+
const leftIndent = options.indent ?? 2;
|
|
46
|
+
const labelWidth = rows.reduce((max, [label]) => {
|
|
47
|
+
const width = stripAnsi(label).length;
|
|
48
|
+
return width > max ? width : max;
|
|
49
|
+
}, 0);
|
|
50
|
+
const prefix = " ".repeat(leftIndent);
|
|
51
|
+
return rows
|
|
52
|
+
.map(([label, desc]) => {
|
|
53
|
+
const visibleLen = stripAnsi(label).length;
|
|
54
|
+
const spaces = Math.max(0, labelWidth - visibleLen + gap);
|
|
55
|
+
return `${prefix}${label}${" ".repeat(spaces)}${desc}`;
|
|
56
|
+
})
|
|
57
|
+
.join("\n");
|
|
58
|
+
}
|
|
59
|
+
function divider(width = 60) {
|
|
60
|
+
return "-".repeat(width);
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/cli/format.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function main(argv: string[]): Promise<void>;
|