@hypercli/gen 0.1.1
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/LICENSE +21 -0
- package/README.md +24 -0
- package/dist/actions/communication.d.ts +201 -0
- package/dist/actions/communication.d.ts.map +1 -0
- package/dist/actions/communication.js +515 -0
- package/dist/actions/communication.js.map +1 -0
- package/dist/actions/decorator.d.ts +22 -0
- package/dist/actions/decorator.d.ts.map +1 -0
- package/dist/actions/decorator.js +110 -0
- package/dist/actions/decorator.js.map +1 -0
- package/dist/actions/executor.d.ts +85 -0
- package/dist/actions/executor.d.ts.map +1 -0
- package/dist/actions/executor.js +289 -0
- package/dist/actions/executor.js.map +1 -0
- package/dist/actions/index.d.ts +14 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/index.js +15 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/actions/parameter-resolver.d.ts +54 -0
- package/dist/actions/parameter-resolver.d.ts.map +1 -0
- package/dist/actions/parameter-resolver.js +300 -0
- package/dist/actions/parameter-resolver.js.map +1 -0
- package/dist/actions/registry.d.ts +78 -0
- package/dist/actions/registry.d.ts.map +1 -0
- package/dist/actions/registry.js +221 -0
- package/dist/actions/registry.js.map +1 -0
- package/dist/actions/types.d.ts +109 -0
- package/dist/actions/types.d.ts.map +1 -0
- package/dist/actions/types.js +31 -0
- package/dist/actions/types.js.map +1 -0
- package/dist/actions/utils.d.ts +42 -0
- package/dist/actions/utils.d.ts.map +1 -0
- package/dist/actions/utils.js +144 -0
- package/dist/actions/utils.js.map +1 -0
- package/dist/ai/ai-collector.d.ts +52 -0
- package/dist/ai/ai-collector.d.ts.map +1 -0
- package/dist/ai/ai-collector.js +64 -0
- package/dist/ai/ai-collector.js.map +1 -0
- package/dist/ai/ai-config.d.ts +230 -0
- package/dist/ai/ai-config.d.ts.map +1 -0
- package/dist/ai/ai-config.js +8 -0
- package/dist/ai/ai-config.js.map +1 -0
- package/dist/ai/ai-service.d.ts +66 -0
- package/dist/ai/ai-service.d.ts.map +1 -0
- package/dist/ai/ai-service.js +198 -0
- package/dist/ai/ai-service.js.map +1 -0
- package/dist/ai/ai-variable-resolver.d.ts +59 -0
- package/dist/ai/ai-variable-resolver.d.ts.map +1 -0
- package/dist/ai/ai-variable-resolver.js +219 -0
- package/dist/ai/ai-variable-resolver.js.map +1 -0
- package/dist/ai/context-collector.d.ts +30 -0
- package/dist/ai/context-collector.d.ts.map +1 -0
- package/dist/ai/context-collector.js +158 -0
- package/dist/ai/context-collector.js.map +1 -0
- package/dist/ai/cost-tracker.d.ts +41 -0
- package/dist/ai/cost-tracker.d.ts.map +1 -0
- package/dist/ai/cost-tracker.js +131 -0
- package/dist/ai/cost-tracker.js.map +1 -0
- package/dist/ai/env.d.ts +36 -0
- package/dist/ai/env.d.ts.map +1 -0
- package/dist/ai/env.js +100 -0
- package/dist/ai/env.js.map +1 -0
- package/dist/ai/index.d.ts +17 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +25 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/model-router.d.ts +32 -0
- package/dist/ai/model-router.d.ts.map +1 -0
- package/dist/ai/model-router.js +113 -0
- package/dist/ai/model-router.js.map +1 -0
- package/dist/ai/output-validator.d.ts +24 -0
- package/dist/ai/output-validator.d.ts.map +1 -0
- package/dist/ai/output-validator.js +279 -0
- package/dist/ai/output-validator.js.map +1 -0
- package/dist/ai/prompt-assembler.d.ts +30 -0
- package/dist/ai/prompt-assembler.d.ts.map +1 -0
- package/dist/ai/prompt-assembler.js +93 -0
- package/dist/ai/prompt-assembler.js.map +1 -0
- package/dist/ai/prompt-pipeline.d.ts +63 -0
- package/dist/ai/prompt-pipeline.d.ts.map +1 -0
- package/dist/ai/prompt-pipeline.js +119 -0
- package/dist/ai/prompt-pipeline.js.map +1 -0
- package/dist/ai/prompt-template.jig +88 -0
- package/dist/ai/transports/api-transport.d.ts +12 -0
- package/dist/ai/transports/api-transport.d.ts.map +1 -0
- package/dist/ai/transports/api-transport.js +86 -0
- package/dist/ai/transports/api-transport.js.map +1 -0
- package/dist/ai/transports/command-transport.d.ts +20 -0
- package/dist/ai/transports/command-transport.d.ts.map +1 -0
- package/dist/ai/transports/command-transport.js +203 -0
- package/dist/ai/transports/command-transport.js.map +1 -0
- package/dist/ai/transports/index.d.ts +11 -0
- package/dist/ai/transports/index.d.ts.map +1 -0
- package/dist/ai/transports/index.js +10 -0
- package/dist/ai/transports/index.js.map +1 -0
- package/dist/ai/transports/resolve-transport.d.ts +15 -0
- package/dist/ai/transports/resolve-transport.d.ts.map +1 -0
- package/dist/ai/transports/resolve-transport.js +96 -0
- package/dist/ai/transports/resolve-transport.js.map +1 -0
- package/dist/ai/transports/stdout-transport.d.ts +14 -0
- package/dist/ai/transports/stdout-transport.d.ts.map +1 -0
- package/dist/ai/transports/stdout-transport.js +27 -0
- package/dist/ai/transports/stdout-transport.js.map +1 -0
- package/dist/ai/transports/types.d.ts +77 -0
- package/dist/ai/transports/types.d.ts.map +1 -0
- package/dist/ai/transports/types.js +8 -0
- package/dist/ai/transports/types.js.map +1 -0
- package/dist/commands/cookbook/info.d.ts +22 -0
- package/dist/commands/cookbook/info.d.ts.map +1 -0
- package/dist/commands/cookbook/info.js +217 -0
- package/dist/commands/cookbook/info.js.map +1 -0
- package/dist/commands/cookbook/list.d.ts +20 -0
- package/dist/commands/cookbook/list.d.ts.map +1 -0
- package/dist/commands/cookbook/list.js +133 -0
- package/dist/commands/cookbook/list.js.map +1 -0
- package/dist/commands/gen.d.ts +65 -0
- package/dist/commands/gen.d.ts.map +1 -0
- package/dist/commands/gen.js +478 -0
- package/dist/commands/gen.js.map +1 -0
- package/dist/commands/recipe/info.d.ts +18 -0
- package/dist/commands/recipe/info.d.ts.map +1 -0
- package/dist/commands/recipe/info.js +89 -0
- package/dist/commands/recipe/info.js.map +1 -0
- package/dist/commands/recipe/list.d.ts +29 -0
- package/dist/commands/recipe/list.d.ts.map +1 -0
- package/dist/commands/recipe/list.js +215 -0
- package/dist/commands/recipe/list.js.map +1 -0
- package/dist/commands/recipe/run.d.ts +44 -0
- package/dist/commands/recipe/run.d.ts.map +1 -0
- package/dist/commands/recipe/run.js +239 -0
- package/dist/commands/recipe/run.js.map +1 -0
- package/dist/commands/recipe/validate.d.ts +19 -0
- package/dist/commands/recipe/validate.d.ts.map +1 -0
- package/dist/commands/recipe/validate.js +66 -0
- package/dist/commands/recipe/validate.js.map +1 -0
- package/dist/discovery/generator-discovery.d.ts +130 -0
- package/dist/discovery/generator-discovery.d.ts.map +1 -0
- package/dist/discovery/generator-discovery.js +674 -0
- package/dist/discovery/generator-discovery.js.map +1 -0
- package/dist/discovery/index.d.ts +8 -0
- package/dist/discovery/index.d.ts.map +1 -0
- package/dist/discovery/index.js +7 -0
- package/dist/discovery/index.js.map +1 -0
- package/dist/hooks/command-not-found.d.ts +18 -0
- package/dist/hooks/command-not-found.d.ts.map +1 -0
- package/dist/hooks/command-not-found.js +182 -0
- package/dist/hooks/command-not-found.js.map +1 -0
- package/dist/hooks/suggest.d.ts +13 -0
- package/dist/hooks/suggest.d.ts.map +1 -0
- package/dist/hooks/suggest.js +28 -0
- package/dist/hooks/suggest.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/base-command.d.ts +26 -0
- package/dist/lib/base-command.d.ts.map +1 -0
- package/dist/lib/base-command.js +24 -0
- package/dist/lib/base-command.js.map +1 -0
- package/dist/lib/flags.d.ts +33 -0
- package/dist/lib/flags.d.ts.map +1 -0
- package/dist/lib/flags.js +64 -0
- package/dist/lib/flags.js.map +1 -0
- package/dist/ops/add.d.ts +4 -0
- package/dist/ops/add.d.ts.map +1 -0
- package/dist/ops/add.js +85 -0
- package/dist/ops/add.js.map +1 -0
- package/dist/ops/inject.d.ts +4 -0
- package/dist/ops/inject.d.ts.map +1 -0
- package/dist/ops/inject.js +28 -0
- package/dist/ops/inject.js.map +1 -0
- package/dist/ops/injector.d.ts +4 -0
- package/dist/ops/injector.d.ts.map +1 -0
- package/dist/ops/injector.js +68 -0
- package/dist/ops/injector.js.map +1 -0
- package/dist/ops/result.d.ts +3 -0
- package/dist/ops/result.d.ts.map +1 -0
- package/dist/ops/result.js +8 -0
- package/dist/ops/result.js.map +1 -0
- package/dist/prompts/interactive-prompts.d.ts +152 -0
- package/dist/prompts/interactive-prompts.d.ts.map +1 -0
- package/dist/prompts/interactive-prompts.js +574 -0
- package/dist/prompts/interactive-prompts.js.map +1 -0
- package/dist/recipe-engine/group-executor.d.ts +97 -0
- package/dist/recipe-engine/group-executor.d.ts.map +1 -0
- package/dist/recipe-engine/group-executor.js +293 -0
- package/dist/recipe-engine/group-executor.js.map +1 -0
- package/dist/recipe-engine/index.d.ts +112 -0
- package/dist/recipe-engine/index.d.ts.map +1 -0
- package/dist/recipe-engine/index.js +223 -0
- package/dist/recipe-engine/index.js.map +1 -0
- package/dist/recipe-engine/output-evaluator.d.ts +28 -0
- package/dist/recipe-engine/output-evaluator.d.ts.map +1 -0
- package/dist/recipe-engine/output-evaluator.js +78 -0
- package/dist/recipe-engine/output-evaluator.js.map +1 -0
- package/dist/recipe-engine/recipe-engine.d.ts +227 -0
- package/dist/recipe-engine/recipe-engine.d.ts.map +1 -0
- package/dist/recipe-engine/recipe-engine.js +1036 -0
- package/dist/recipe-engine/recipe-engine.js.map +1 -0
- package/dist/recipe-engine/step-executor.d.ts +172 -0
- package/dist/recipe-engine/step-executor.d.ts.map +1 -0
- package/dist/recipe-engine/step-executor.js +802 -0
- package/dist/recipe-engine/step-executor.js.map +1 -0
- package/dist/recipe-engine/tools/action-tool.d.ts +103 -0
- package/dist/recipe-engine/tools/action-tool.d.ts.map +1 -0
- package/dist/recipe-engine/tools/action-tool.js +473 -0
- package/dist/recipe-engine/tools/action-tool.js.map +1 -0
- package/dist/recipe-engine/tools/ai-tool.d.ts +26 -0
- package/dist/recipe-engine/tools/ai-tool.d.ts.map +1 -0
- package/dist/recipe-engine/tools/ai-tool.js +233 -0
- package/dist/recipe-engine/tools/ai-tool.js.map +1 -0
- package/dist/recipe-engine/tools/base.d.ts +214 -0
- package/dist/recipe-engine/tools/base.d.ts.map +1 -0
- package/dist/recipe-engine/tools/base.js +397 -0
- package/dist/recipe-engine/tools/base.js.map +1 -0
- package/dist/recipe-engine/tools/codemod-tool.d.ts +130 -0
- package/dist/recipe-engine/tools/codemod-tool.d.ts.map +1 -0
- package/dist/recipe-engine/tools/codemod-tool.js +786 -0
- package/dist/recipe-engine/tools/codemod-tool.js.map +1 -0
- package/dist/recipe-engine/tools/ensure-dirs-tool.d.ts +21 -0
- package/dist/recipe-engine/tools/ensure-dirs-tool.d.ts.map +1 -0
- package/dist/recipe-engine/tools/ensure-dirs-tool.js +130 -0
- package/dist/recipe-engine/tools/ensure-dirs-tool.js.map +1 -0
- package/dist/recipe-engine/tools/index.d.ts +126 -0
- package/dist/recipe-engine/tools/index.d.ts.map +1 -0
- package/dist/recipe-engine/tools/index.js +290 -0
- package/dist/recipe-engine/tools/index.js.map +1 -0
- package/dist/recipe-engine/tools/install-tool.d.ts +20 -0
- package/dist/recipe-engine/tools/install-tool.d.ts.map +1 -0
- package/dist/recipe-engine/tools/install-tool.js +194 -0
- package/dist/recipe-engine/tools/install-tool.js.map +1 -0
- package/dist/recipe-engine/tools/parallel-tool.d.ts +21 -0
- package/dist/recipe-engine/tools/parallel-tool.d.ts.map +1 -0
- package/dist/recipe-engine/tools/parallel-tool.js +134 -0
- package/dist/recipe-engine/tools/parallel-tool.js.map +1 -0
- package/dist/recipe-engine/tools/patch-tool.d.ts +21 -0
- package/dist/recipe-engine/tools/patch-tool.d.ts.map +1 -0
- package/dist/recipe-engine/tools/patch-tool.js +248 -0
- package/dist/recipe-engine/tools/patch-tool.js.map +1 -0
- package/dist/recipe-engine/tools/prompt-tool.d.ts +25 -0
- package/dist/recipe-engine/tools/prompt-tool.d.ts.map +1 -0
- package/dist/recipe-engine/tools/prompt-tool.js +162 -0
- package/dist/recipe-engine/tools/prompt-tool.js.map +1 -0
- package/dist/recipe-engine/tools/query-tool.d.ts +21 -0
- package/dist/recipe-engine/tools/query-tool.d.ts.map +1 -0
- package/dist/recipe-engine/tools/query-tool.js +249 -0
- package/dist/recipe-engine/tools/query-tool.js.map +1 -0
- package/dist/recipe-engine/tools/recipe-tool.d.ts +103 -0
- package/dist/recipe-engine/tools/recipe-tool.d.ts.map +1 -0
- package/dist/recipe-engine/tools/recipe-tool.js +617 -0
- package/dist/recipe-engine/tools/recipe-tool.js.map +1 -0
- package/dist/recipe-engine/tools/registry.d.ts +151 -0
- package/dist/recipe-engine/tools/registry.d.ts.map +1 -0
- package/dist/recipe-engine/tools/registry.js +244 -0
- package/dist/recipe-engine/tools/registry.js.map +1 -0
- package/dist/recipe-engine/tools/sequence-tool.d.ts +22 -0
- package/dist/recipe-engine/tools/sequence-tool.d.ts.map +1 -0
- package/dist/recipe-engine/tools/sequence-tool.js +122 -0
- package/dist/recipe-engine/tools/sequence-tool.js.map +1 -0
- package/dist/recipe-engine/tools/shell-tool.d.ts +25 -0
- package/dist/recipe-engine/tools/shell-tool.d.ts.map +1 -0
- package/dist/recipe-engine/tools/shell-tool.js +149 -0
- package/dist/recipe-engine/tools/shell-tool.js.map +1 -0
- package/dist/recipe-engine/tools/template-tool.d.ts +88 -0
- package/dist/recipe-engine/tools/template-tool.d.ts.map +1 -0
- package/dist/recipe-engine/tools/template-tool.js +613 -0
- package/dist/recipe-engine/tools/template-tool.js.map +1 -0
- package/dist/recipe-engine/types.d.ts +963 -0
- package/dist/recipe-engine/types.d.ts.map +1 -0
- package/dist/recipe-engine/types.js +94 -0
- package/dist/recipe-engine/types.js.map +1 -0
- package/dist/template-engines/ai-tags.d.ts +26 -0
- package/dist/template-engines/ai-tags.d.ts.map +1 -0
- package/dist/template-engines/ai-tags.js +233 -0
- package/dist/template-engines/ai-tags.js.map +1 -0
- package/dist/template-engines/index.d.ts +8 -0
- package/dist/template-engines/index.d.ts.map +1 -0
- package/dist/template-engines/index.js +8 -0
- package/dist/template-engines/index.js.map +1 -0
- package/dist/template-engines/jig-engine.d.ts +47 -0
- package/dist/template-engines/jig-engine.d.ts.map +1 -0
- package/dist/template-engines/jig-engine.js +173 -0
- package/dist/template-engines/jig-engine.js.map +1 -0
- package/dist/utils/coerce-value.d.ts +7 -0
- package/dist/utils/coerce-value.d.ts.map +1 -0
- package/dist/utils/coerce-value.js +18 -0
- package/dist/utils/coerce-value.js.map +1 -0
- package/dist/utils/diff.d.ts +8 -0
- package/dist/utils/diff.d.ts.map +1 -0
- package/dist/utils/diff.js +10 -0
- package/dist/utils/diff.js.map +1 -0
- package/dist/utils/global-packages.d.ts +11 -0
- package/dist/utils/global-packages.d.ts.map +1 -0
- package/dist/utils/global-packages.js +88 -0
- package/dist/utils/global-packages.js.map +1 -0
- package/dist/utils/pager.d.ts +6 -0
- package/dist/utils/pager.d.ts.map +1 -0
- package/dist/utils/pager.js +41 -0
- package/dist/utils/pager.js.map +1 -0
- package/help/cookbook/info.md +35 -0
- package/help/cookbook/list.md +37 -0
- package/help/gen.md +26 -0
- package/help/recipe/run.md +52 -0
- package/help/recipe/validate.md +51 -0
- package/oclif.manifest.json +580 -0
- package/package.json +120 -0
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Tool Framework
|
|
3
|
+
*
|
|
4
|
+
* Abstract base class and interfaces for all Recipe Step System tools.
|
|
5
|
+
* Provides common lifecycle management, error handling, and resource management.
|
|
6
|
+
*/
|
|
7
|
+
import { ErrorCode, ErrorHandler, HypergenError, withErrorHandling } from "@hypercli/core";
|
|
8
|
+
import { Logger } from "@hypercli/core";
|
|
9
|
+
import createDebug from "debug";
|
|
10
|
+
/**
|
|
11
|
+
* Abstract base class for all Recipe Step System tools
|
|
12
|
+
*
|
|
13
|
+
* This class provides common functionality for Template, Action, CodeMod, and Recipe tools.
|
|
14
|
+
* Each tool type extends this class to implement specific execution logic.
|
|
15
|
+
*/
|
|
16
|
+
export class Tool {
|
|
17
|
+
toolType;
|
|
18
|
+
name;
|
|
19
|
+
options;
|
|
20
|
+
logger;
|
|
21
|
+
debug;
|
|
22
|
+
resources = new Map();
|
|
23
|
+
metrics;
|
|
24
|
+
_isInitialized = false;
|
|
25
|
+
_isExecuting = false;
|
|
26
|
+
_isCleanedUp = false;
|
|
27
|
+
constructor(toolType, name, options = {}) {
|
|
28
|
+
this.toolType = toolType;
|
|
29
|
+
this.name = name;
|
|
30
|
+
this.options = options;
|
|
31
|
+
this.logger = new Logger(console.log);
|
|
32
|
+
this.debug = createDebug(`hyper:recipe:tool:${toolType}:${name}`);
|
|
33
|
+
this.metrics = {
|
|
34
|
+
startTime: new Date(),
|
|
35
|
+
retryAttempts: 0,
|
|
36
|
+
cleanupCompleted: false,
|
|
37
|
+
events: [],
|
|
38
|
+
};
|
|
39
|
+
this.debug("Tool instance created: %s (%s)", name, toolType);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get tool type
|
|
43
|
+
*/
|
|
44
|
+
getToolType() {
|
|
45
|
+
return this.toolType;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get tool name
|
|
49
|
+
*/
|
|
50
|
+
getName() {
|
|
51
|
+
return this.name;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Check if tool is initialized
|
|
55
|
+
*/
|
|
56
|
+
isInitialized() {
|
|
57
|
+
return this._isInitialized;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Check if tool is currently executing
|
|
61
|
+
*/
|
|
62
|
+
isExecuting() {
|
|
63
|
+
return this._isExecuting;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Check if tool has been cleaned up
|
|
67
|
+
*/
|
|
68
|
+
isCleanedUp() {
|
|
69
|
+
return this._isCleanedUp;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get tool lifecycle metrics
|
|
73
|
+
*/
|
|
74
|
+
getMetrics() {
|
|
75
|
+
return { ...this.metrics };
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Initialize the tool with configuration
|
|
79
|
+
* Called once before any execution
|
|
80
|
+
*/
|
|
81
|
+
async initialize() {
|
|
82
|
+
if (this._isInitialized) {
|
|
83
|
+
this.debug("Tool already initialized, skipping");
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
this.debug("Initializing tool");
|
|
87
|
+
try {
|
|
88
|
+
await withErrorHandling(async () => {
|
|
89
|
+
await this.onInitialize();
|
|
90
|
+
this._isInitialized = true;
|
|
91
|
+
this.addLifecycleEvent("validate", true, { phase: "initialize" });
|
|
92
|
+
this.debug("Tool initialization completed");
|
|
93
|
+
}, { function: "initialize", action: this.name });
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
this.addLifecycleEvent("validate", false, {
|
|
97
|
+
phase: "initialize",
|
|
98
|
+
error: error instanceof Error ? error.message : String(error),
|
|
99
|
+
});
|
|
100
|
+
throw this.wrapError(error, "Tool initialization failed");
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Validate the step configuration and context
|
|
105
|
+
*/
|
|
106
|
+
async validate(step, context) {
|
|
107
|
+
this.debug("Validating step configuration");
|
|
108
|
+
const startTime = Date.now();
|
|
109
|
+
try {
|
|
110
|
+
const result = await withErrorHandling(async () => {
|
|
111
|
+
return await this.onValidate(step, context);
|
|
112
|
+
}, { function: "validate", action: this.name });
|
|
113
|
+
const duration = Date.now() - startTime;
|
|
114
|
+
this.metrics.validationDuration = duration;
|
|
115
|
+
this.addLifecycleEvent("validate", result.isValid, {
|
|
116
|
+
duration,
|
|
117
|
+
errorsCount: result.errors.length,
|
|
118
|
+
warningsCount: result.warnings.length,
|
|
119
|
+
});
|
|
120
|
+
this.debug("Validation completed: %s (errors: %d, warnings: %d)", result.isValid ? "valid" : "invalid", result.errors.length, result.warnings.length);
|
|
121
|
+
return result;
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
const duration = Date.now() - startTime;
|
|
125
|
+
this.metrics.validationDuration = duration;
|
|
126
|
+
this.addLifecycleEvent("validate", false, {
|
|
127
|
+
duration,
|
|
128
|
+
error: error instanceof Error ? error.message : String(error),
|
|
129
|
+
});
|
|
130
|
+
throw this.wrapError(error, "Tool validation failed");
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Execute the tool with the given step configuration and context
|
|
135
|
+
*/
|
|
136
|
+
async execute(step, context, options) {
|
|
137
|
+
if (!this._isInitialized) {
|
|
138
|
+
await this.initialize();
|
|
139
|
+
}
|
|
140
|
+
if (this._isExecuting) {
|
|
141
|
+
throw ErrorHandler.createError(ErrorCode.INTERNAL_ERROR, "Tool is already executing", {
|
|
142
|
+
action: this.name,
|
|
143
|
+
phase: "execute",
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
this._isExecuting = true;
|
|
147
|
+
const startTime = Date.now();
|
|
148
|
+
this.debug("Starting tool execution");
|
|
149
|
+
try {
|
|
150
|
+
// Update metrics
|
|
151
|
+
this.metrics.startTime = new Date();
|
|
152
|
+
// Apply retry logic if specified
|
|
153
|
+
const maxRetries = options?.retries || step.retries || 0;
|
|
154
|
+
let lastError = null;
|
|
155
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
156
|
+
if (attempt > 0) {
|
|
157
|
+
this.debug("Retry attempt %d/%d", attempt, maxRetries);
|
|
158
|
+
this.metrics.retryAttempts = attempt;
|
|
159
|
+
// Add exponential backoff delay
|
|
160
|
+
const delay = Math.min(1000 * 2 ** (attempt - 1), 30000);
|
|
161
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
162
|
+
}
|
|
163
|
+
try {
|
|
164
|
+
const result = await withErrorHandling(async () => {
|
|
165
|
+
return await this.onExecute(step, context, options);
|
|
166
|
+
}, { function: "execute", action: this.name, phase: "execute" });
|
|
167
|
+
const executionTime = Date.now() - startTime;
|
|
168
|
+
this.metrics.executionDuration = executionTime;
|
|
169
|
+
this.metrics.endTime = new Date();
|
|
170
|
+
this.metrics.duration = executionTime;
|
|
171
|
+
this.addLifecycleEvent("execute", result.status === "completed", {
|
|
172
|
+
duration: executionTime,
|
|
173
|
+
attempt,
|
|
174
|
+
filesCreated: result.filesCreated?.length || 0,
|
|
175
|
+
filesModified: result.filesModified?.length || 0,
|
|
176
|
+
filesDeleted: result.filesDeleted?.length || 0,
|
|
177
|
+
});
|
|
178
|
+
this.debug("Tool execution completed: %s (duration: %dms, attempt: %d)", result.status, executionTime, attempt + 1);
|
|
179
|
+
this._isExecuting = false;
|
|
180
|
+
return result;
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
lastError = error;
|
|
184
|
+
this.debug("Tool execution failed on attempt %d: %s", attempt + 1, error instanceof Error ? error.message : String(error));
|
|
185
|
+
// If it's the last attempt, don't continue the retry loop
|
|
186
|
+
if (attempt === maxRetries) {
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
// For certain errors, don't retry
|
|
190
|
+
if (error instanceof HypergenError && !this.shouldRetry(error)) {
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// If we reach here, all attempts failed
|
|
196
|
+
const executionTime = Date.now() - startTime;
|
|
197
|
+
this.metrics.executionDuration = executionTime;
|
|
198
|
+
this.metrics.endTime = new Date();
|
|
199
|
+
this.metrics.duration = executionTime;
|
|
200
|
+
this.addLifecycleEvent("execute", false, {
|
|
201
|
+
duration: executionTime,
|
|
202
|
+
retryAttempts: this.metrics.retryAttempts,
|
|
203
|
+
error: lastError instanceof Error ? lastError.message : String(lastError),
|
|
204
|
+
});
|
|
205
|
+
throw this.wrapError(lastError, `Tool execution failed after ${maxRetries + 1} attempts`);
|
|
206
|
+
}
|
|
207
|
+
finally {
|
|
208
|
+
this._isExecuting = false;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Clean up resources used by the tool
|
|
213
|
+
*/
|
|
214
|
+
async cleanup() {
|
|
215
|
+
if (this._isCleanedUp) {
|
|
216
|
+
this.debug("Tool already cleaned up, skipping");
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
this.debug("Starting tool cleanup");
|
|
220
|
+
const startTime = Date.now();
|
|
221
|
+
const errors = [];
|
|
222
|
+
try {
|
|
223
|
+
// Clean up registered resources
|
|
224
|
+
for (const [id, resource] of this.resources) {
|
|
225
|
+
try {
|
|
226
|
+
this.debug("Cleaning up resource: %s (%s)", id, resource.type);
|
|
227
|
+
await resource.cleanup();
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
231
|
+
errors.push(`Failed to cleanup resource '${id}': ${errorMessage}`);
|
|
232
|
+
this.debug("Resource cleanup failed: %s - %s", id, errorMessage);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
// Call tool-specific cleanup
|
|
236
|
+
try {
|
|
237
|
+
await this.onCleanup();
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
241
|
+
errors.push(`Tool cleanup failed: ${errorMessage}`);
|
|
242
|
+
this.debug("Tool cleanup failed: %s", errorMessage);
|
|
243
|
+
}
|
|
244
|
+
const duration = Date.now() - startTime;
|
|
245
|
+
this.metrics.cleanupDuration = duration;
|
|
246
|
+
this.metrics.cleanupCompleted = errors.length === 0;
|
|
247
|
+
this._isCleanedUp = true;
|
|
248
|
+
this.addLifecycleEvent("cleanup", errors.length === 0, {
|
|
249
|
+
duration,
|
|
250
|
+
resourcesCleanedUp: this.resources.size,
|
|
251
|
+
errorsCount: errors.length,
|
|
252
|
+
});
|
|
253
|
+
if (errors.length > 0) {
|
|
254
|
+
this.logger.warn(`Tool cleanup completed with ${errors.length} errors`);
|
|
255
|
+
for (const error of errors) {
|
|
256
|
+
this.logger.warn(` ${error}`);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
this.debug("Tool cleanup completed successfully");
|
|
261
|
+
}
|
|
262
|
+
// Clear resources map
|
|
263
|
+
this.resources.clear();
|
|
264
|
+
}
|
|
265
|
+
catch (error) {
|
|
266
|
+
const duration = Date.now() - startTime;
|
|
267
|
+
this.metrics.cleanupDuration = duration;
|
|
268
|
+
this.addLifecycleEvent("cleanup", false, {
|
|
269
|
+
duration,
|
|
270
|
+
error: error instanceof Error ? error.message : String(error),
|
|
271
|
+
});
|
|
272
|
+
throw this.wrapError(error, "Tool cleanup failed");
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Register a resource for cleanup
|
|
277
|
+
*/
|
|
278
|
+
registerResource(resource) {
|
|
279
|
+
if (this.resources.has(resource.id)) {
|
|
280
|
+
this.debug("Resource already registered, replacing: %s", resource.id);
|
|
281
|
+
}
|
|
282
|
+
this.resources.set(resource.id, resource);
|
|
283
|
+
this.debug("Resource registered: %s (%s)", resource.id, resource.type);
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Unregister a resource (useful for early cleanup)
|
|
287
|
+
*/
|
|
288
|
+
unregisterResource(resourceId) {
|
|
289
|
+
const resource = this.resources.get(resourceId);
|
|
290
|
+
if (resource) {
|
|
291
|
+
this.resources.delete(resourceId);
|
|
292
|
+
this.debug("Resource unregistered: %s", resourceId);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Get memory usage statistics
|
|
297
|
+
*/
|
|
298
|
+
getMemoryUsage() {
|
|
299
|
+
const usage = process.memoryUsage();
|
|
300
|
+
return {
|
|
301
|
+
used: usage.heapUsed,
|
|
302
|
+
total: usage.heapTotal,
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Add a lifecycle event to metrics
|
|
307
|
+
*/
|
|
308
|
+
addLifecycleEvent(phase, success, metadata) {
|
|
309
|
+
this.metrics.events.push({
|
|
310
|
+
phase,
|
|
311
|
+
timestamp: new Date(),
|
|
312
|
+
success,
|
|
313
|
+
error: metadata?.error,
|
|
314
|
+
metadata,
|
|
315
|
+
});
|
|
316
|
+
// Track peak memory usage
|
|
317
|
+
const memUsage = this.getMemoryUsage();
|
|
318
|
+
if (!this.metrics.peakMemoryUsage || memUsage.used > this.metrics.peakMemoryUsage) {
|
|
319
|
+
this.metrics.peakMemoryUsage = memUsage.used;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Determine if an error should trigger a retry
|
|
324
|
+
*/
|
|
325
|
+
shouldRetry(error) {
|
|
326
|
+
// Don't retry configuration or validation errors
|
|
327
|
+
const nonRetryableCodes = [
|
|
328
|
+
ErrorCode.CONFIG_INVALID_FORMAT,
|
|
329
|
+
ErrorCode.CONFIG_MISSING_REQUIRED,
|
|
330
|
+
ErrorCode.TEMPLATE_INVALID_SYNTAX,
|
|
331
|
+
ErrorCode.TEMPLATE_INVALID_FRONTMATTER,
|
|
332
|
+
ErrorCode.ACTION_INVALID_PARAMETERS,
|
|
333
|
+
ErrorCode.ACTION_INVALID_PARAM_TYPE,
|
|
334
|
+
ErrorCode.ACTION_INVALID_PARAM_VALUE,
|
|
335
|
+
ErrorCode.VALIDATION_ERROR,
|
|
336
|
+
];
|
|
337
|
+
return !nonRetryableCodes.includes(error.code);
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Wrap an error with tool context
|
|
341
|
+
*/
|
|
342
|
+
wrapError(error, message) {
|
|
343
|
+
if (error instanceof HypergenError) {
|
|
344
|
+
// Add tool context to existing error
|
|
345
|
+
error.context = {
|
|
346
|
+
...error.context,
|
|
347
|
+
toolType: this.toolType,
|
|
348
|
+
toolName: this.name,
|
|
349
|
+
phase: "execute",
|
|
350
|
+
};
|
|
351
|
+
return error;
|
|
352
|
+
}
|
|
353
|
+
return ErrorHandler.createError(ErrorCode.INTERNAL_ERROR, `${message}: ${error instanceof Error ? error.message : String(error)}`, {
|
|
354
|
+
toolType: this.toolType,
|
|
355
|
+
toolName: this.name,
|
|
356
|
+
phase: "execute",
|
|
357
|
+
cause: error,
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
// Abstract methods that must be implemented by concrete tool classes
|
|
361
|
+
/**
|
|
362
|
+
* Tool-specific initialization logic
|
|
363
|
+
* Override this method to perform any setup required before execution
|
|
364
|
+
*/
|
|
365
|
+
async onInitialize() {
|
|
366
|
+
// Default implementation does nothing
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Tool-specific cleanup logic
|
|
370
|
+
* Override this method to perform any cleanup required after execution
|
|
371
|
+
*/
|
|
372
|
+
async onCleanup() {
|
|
373
|
+
// Default implementation does nothing
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Abstract base class for tool factories
|
|
378
|
+
*/
|
|
379
|
+
export class BaseToolFactory {
|
|
380
|
+
toolType;
|
|
381
|
+
constructor(toolType) {
|
|
382
|
+
this.toolType = toolType;
|
|
383
|
+
}
|
|
384
|
+
getToolType() {
|
|
385
|
+
return this.toolType;
|
|
386
|
+
}
|
|
387
|
+
validateConfig(config) {
|
|
388
|
+
// Default validation - can be overridden by concrete factories
|
|
389
|
+
return {
|
|
390
|
+
isValid: true,
|
|
391
|
+
errors: [],
|
|
392
|
+
warnings: [],
|
|
393
|
+
suggestions: [],
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/recipe-engine/tools/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CodeMod Tool Implementation for Recipe Step System
|
|
3
|
+
*
|
|
4
|
+
* This tool provides AST-based code transformations and modifications using
|
|
5
|
+
* the TypeScript compiler API for TypeScript/JavaScript files, with fallback
|
|
6
|
+
* support for text-based transformations for other file types.
|
|
7
|
+
*/
|
|
8
|
+
import * as ts from "typescript";
|
|
9
|
+
import { type CodeModStep, type StepContext, type StepExecutionOptions, type StepResult } from "#recipe-engine/types";
|
|
10
|
+
import { Tool, type ToolValidationResult } from "./base.js";
|
|
11
|
+
/**
|
|
12
|
+
* Supported CodeMod transformation types
|
|
13
|
+
*/
|
|
14
|
+
export type CodeModType = "add-import" | "add-export" | "modify-function" | "add-property" | "replace-text" | "custom";
|
|
15
|
+
/**
|
|
16
|
+
* CodeMod transformation parameters
|
|
17
|
+
*/
|
|
18
|
+
export interface CodeModParameters {
|
|
19
|
+
import?: string;
|
|
20
|
+
from?: string;
|
|
21
|
+
importType?: "default" | "named" | "namespace" | "side-effect";
|
|
22
|
+
alias?: string;
|
|
23
|
+
export?: string;
|
|
24
|
+
exportType?: "default" | "named";
|
|
25
|
+
functionName?: string;
|
|
26
|
+
newSignature?: string;
|
|
27
|
+
newBody?: string;
|
|
28
|
+
className?: string;
|
|
29
|
+
objectName?: string;
|
|
30
|
+
propertyName?: string;
|
|
31
|
+
propertyValue?: string;
|
|
32
|
+
propertyType?: string;
|
|
33
|
+
find?: string | RegExp;
|
|
34
|
+
replace?: string;
|
|
35
|
+
global?: boolean;
|
|
36
|
+
transformFunction?: string | ((sourceFile: ts.SourceFile, context: CodeModContext) => ts.SourceFile);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* CodeMod execution context
|
|
40
|
+
*/
|
|
41
|
+
export interface CodeModContext {
|
|
42
|
+
/** File path being transformed */
|
|
43
|
+
filePath: string;
|
|
44
|
+
/** Original source code */
|
|
45
|
+
sourceCode: string;
|
|
46
|
+
/** TypeScript source file (if applicable) */
|
|
47
|
+
sourceFile?: ts.SourceFile;
|
|
48
|
+
/** TypeScript program (if applicable) */
|
|
49
|
+
program?: ts.Program;
|
|
50
|
+
/** Step context */
|
|
51
|
+
stepContext: StepContext;
|
|
52
|
+
/** CodeMod parameters */
|
|
53
|
+
parameters: CodeModParameters;
|
|
54
|
+
/** Whether this is a dry run */
|
|
55
|
+
dryRun: boolean;
|
|
56
|
+
/** Whether to force overwrite */
|
|
57
|
+
force: boolean;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* CodeMod Tool for AST transformations and code modifications
|
|
61
|
+
*
|
|
62
|
+
* Features:
|
|
63
|
+
* - TypeScript/JavaScript AST transformations using TypeScript compiler API
|
|
64
|
+
* - Text-based transformations for other file types
|
|
65
|
+
* - Built-in common transformations (add imports, exports, properties, etc.)
|
|
66
|
+
* - Custom transformation functions
|
|
67
|
+
* - Safe modification with backup and rollback
|
|
68
|
+
* - Batch processing with glob patterns
|
|
69
|
+
* - Comprehensive error handling and validation
|
|
70
|
+
*/
|
|
71
|
+
export declare class CodeModTool extends Tool<CodeModStep> {
|
|
72
|
+
private tsConfigCache;
|
|
73
|
+
private transformationCache;
|
|
74
|
+
private backupFiles;
|
|
75
|
+
constructor(name?: string, options?: Record<string, any>);
|
|
76
|
+
/**
|
|
77
|
+
* Initialize CodeMod tool
|
|
78
|
+
*/
|
|
79
|
+
protected onInitialize(): Promise<void>;
|
|
80
|
+
/**
|
|
81
|
+
* Validate CodeMod step configuration
|
|
82
|
+
*/
|
|
83
|
+
protected onValidate(step: CodeModStep, context: StepContext): Promise<ToolValidationResult>;
|
|
84
|
+
/**
|
|
85
|
+
* Execute the CodeMod tool
|
|
86
|
+
*/
|
|
87
|
+
protected onExecute(step: CodeModStep, context: StepContext, options?: StepExecutionOptions): Promise<StepResult>;
|
|
88
|
+
/**
|
|
89
|
+
* Tool-specific cleanup logic
|
|
90
|
+
*/
|
|
91
|
+
protected onCleanup(): Promise<void>;
|
|
92
|
+
/**
|
|
93
|
+
* Resolve file patterns to actual file paths
|
|
94
|
+
*/
|
|
95
|
+
private resolveFiles;
|
|
96
|
+
/**
|
|
97
|
+
* Glob files with proper error handling
|
|
98
|
+
*/
|
|
99
|
+
private globFiles;
|
|
100
|
+
/**
|
|
101
|
+
* Transform a single file
|
|
102
|
+
*/
|
|
103
|
+
private transformFile;
|
|
104
|
+
/**
|
|
105
|
+
* Apply AST-based transformation for TypeScript/JavaScript files
|
|
106
|
+
*/
|
|
107
|
+
private applyASTTransformation;
|
|
108
|
+
/**
|
|
109
|
+
* Apply text-based transformation for non-TypeScript files
|
|
110
|
+
*/
|
|
111
|
+
private applyTextTransformation;
|
|
112
|
+
/**
|
|
113
|
+
* Determine parser to use for file
|
|
114
|
+
*/
|
|
115
|
+
private determineParser;
|
|
116
|
+
/**
|
|
117
|
+
* Create backup of file before transformation
|
|
118
|
+
*/
|
|
119
|
+
private createBackup;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* CodeMod Tool Factory
|
|
123
|
+
*/
|
|
124
|
+
export declare class CodeModToolFactory {
|
|
125
|
+
create(name?: string, options?: Record<string, any>): CodeModTool;
|
|
126
|
+
getToolType(): "codemod";
|
|
127
|
+
validateConfig(config: Record<string, any>): ToolValidationResult;
|
|
128
|
+
}
|
|
129
|
+
export declare const codemodToolFactory: CodeModToolFactory;
|
|
130
|
+
//# sourceMappingURL=codemod-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codemod-tool.d.ts","sourceRoot":"","sources":["../../../src/recipe-engine/tools/codemod-tool.ts"],"names":[],"mappings":"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"}
|