@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,300 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action Parameter Resolver
|
|
3
|
+
*
|
|
4
|
+
* Handles parameter validation and resolution for action execution
|
|
5
|
+
*/
|
|
6
|
+
import createDebug from "debug";
|
|
7
|
+
import { InteractivePrompter } from "#prompts/interactive-prompts";
|
|
8
|
+
import { ActionParameterError } from "./types.js";
|
|
9
|
+
const debug = createDebug("hyper:action:parameters");
|
|
10
|
+
export class ActionParameterResolver {
|
|
11
|
+
/**
|
|
12
|
+
* Resolve parameters without interactive prompts.
|
|
13
|
+
* Validates provided parameters and applies defaults.
|
|
14
|
+
* Throws an error if required parameters are missing.
|
|
15
|
+
*/
|
|
16
|
+
async resolveParameters(metadata, provided = {}, options = {}) {
|
|
17
|
+
debug("Resolving parameters for action: %s", metadata.name);
|
|
18
|
+
const resolved = { ...provided };
|
|
19
|
+
if (!metadata.parameters || metadata.parameters.length === 0) {
|
|
20
|
+
debug("No parameters defined for action: %s", metadata.name);
|
|
21
|
+
return resolved;
|
|
22
|
+
}
|
|
23
|
+
// Step 1: Apply provided values and validate them
|
|
24
|
+
for (const param of metadata.parameters) {
|
|
25
|
+
if (resolved[param.name] !== undefined) {
|
|
26
|
+
this.validateParameterValue(param.name, resolved[param.name], param, resolved);
|
|
27
|
+
debug("Using provided value for %s: %o", param.name, resolved[param.name]);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// Step 2: Apply default values if useDefaults is true
|
|
31
|
+
if (options.useDefaults) {
|
|
32
|
+
for (const param of metadata.parameters) {
|
|
33
|
+
if (resolved[param.name] === undefined && param.default !== undefined) {
|
|
34
|
+
resolved[param.name] = param.default;
|
|
35
|
+
debug("Applied default value for %s: %o", param.name, param.default);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Step 3: Final validation - ensure all required parameters have values
|
|
40
|
+
for (const param of metadata.parameters) {
|
|
41
|
+
if (resolved[param.name] === undefined && param.required) {
|
|
42
|
+
throw new ActionParameterError(`Required parameter '${param.name}' not provided and no default available`, param.name, undefined, param.type);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
debug("Parameters resolved for %s: %o", metadata.name, Object.keys(resolved));
|
|
46
|
+
return resolved;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Resolve parameters with proper precedence and interactive prompts
|
|
50
|
+
*
|
|
51
|
+
* Resolution order:
|
|
52
|
+
* 1. Command line arguments (highest priority)
|
|
53
|
+
* 2. Default values (only if --defaults flag is used)
|
|
54
|
+
* 3. Interactive prompts (for any missing values)
|
|
55
|
+
*/
|
|
56
|
+
async resolveParametersInteractively(metadata, provided = {}, options = {}) {
|
|
57
|
+
debug("Resolving parameters interactively for action: %s", metadata.name);
|
|
58
|
+
const resolved = { ...provided };
|
|
59
|
+
if (!metadata.parameters || metadata.parameters.length === 0) {
|
|
60
|
+
debug("No parameters defined for action: %s", metadata.name);
|
|
61
|
+
return resolved;
|
|
62
|
+
}
|
|
63
|
+
// Step 1: Apply provided values and validate them
|
|
64
|
+
for (const param of metadata.parameters) {
|
|
65
|
+
if (resolved[param.name] !== undefined) {
|
|
66
|
+
this.validateParameterValue(param.name, resolved[param.name], param, resolved);
|
|
67
|
+
debug("Using provided value for %s: %o", param.name, resolved[param.name]);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Step 2: Apply default values if --defaults flag is used
|
|
71
|
+
if (options.useDefaults) {
|
|
72
|
+
for (const param of metadata.parameters) {
|
|
73
|
+
if (resolved[param.name] === undefined && param.default !== undefined) {
|
|
74
|
+
resolved[param.name] = param.default;
|
|
75
|
+
debug("Applied default value for %s: %o", param.name, param.default);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Step 3: Identify parameters that still need values
|
|
80
|
+
const parametersNeedingValues = metadata.parameters.filter((param) => {
|
|
81
|
+
const hasValue = resolved[param.name] !== undefined;
|
|
82
|
+
const isRequired = param.required;
|
|
83
|
+
const isOptional = !param.required;
|
|
84
|
+
// We need a value if:
|
|
85
|
+
// - It's required and has no value
|
|
86
|
+
// - It's optional but has no value and we're not skipping optional
|
|
87
|
+
return !hasValue && (isRequired || (!options.skipOptional && isOptional));
|
|
88
|
+
});
|
|
89
|
+
// Step 4: Prompt for missing values
|
|
90
|
+
if (parametersNeedingValues.length > 0) {
|
|
91
|
+
// First check if we have any required parameters that still need values
|
|
92
|
+
const requiredParametersNeedingValues = parametersNeedingValues.filter((param) => param.required);
|
|
93
|
+
if (requiredParametersNeedingValues.length > 0) {
|
|
94
|
+
// In test mode, throw an error instead of prompting
|
|
95
|
+
if (process.env.NODE_ENV === "test") {
|
|
96
|
+
throw new ActionParameterError(`Required parameter '${requiredParametersNeedingValues[0].name}' not provided and no default available`, requiredParametersNeedingValues[0].name, undefined, requiredParametersNeedingValues[0].type);
|
|
97
|
+
}
|
|
98
|
+
// We need to prompt for required parameters
|
|
99
|
+
const templateVariables = {};
|
|
100
|
+
for (const param of parametersNeedingValues) {
|
|
101
|
+
templateVariables[param.name] = this.convertParameterToVariable(param);
|
|
102
|
+
}
|
|
103
|
+
const prompter = new InteractivePrompter();
|
|
104
|
+
const promptResult = await prompter.promptForParameters(templateVariables, resolved, {
|
|
105
|
+
interactive: true,
|
|
106
|
+
skipOptional: options.skipOptional || false,
|
|
107
|
+
timeout: options.timeout,
|
|
108
|
+
intro: options.intro || `🎯 Configure parameters for ${metadata.name}`,
|
|
109
|
+
outro: options.outro || "✅ Parameters configured!",
|
|
110
|
+
});
|
|
111
|
+
if (promptResult.cancelled) {
|
|
112
|
+
throw new ActionParameterError("Parameter configuration cancelled by user", "interactive", undefined, "string");
|
|
113
|
+
}
|
|
114
|
+
if (promptResult.errors.length > 0) {
|
|
115
|
+
throw new ActionParameterError(`Parameter validation failed: ${promptResult.errors.join(", ")}`, "validation", undefined, "string");
|
|
116
|
+
}
|
|
117
|
+
// Merge prompted values
|
|
118
|
+
Object.assign(resolved, promptResult.values);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
// Only optional parameters need values, and we might skip them
|
|
122
|
+
if (!options.skipOptional) {
|
|
123
|
+
// In test mode, skip optional prompts
|
|
124
|
+
if (process.env.NODE_ENV === "test") {
|
|
125
|
+
debug("Skipping optional parameter prompts in test mode");
|
|
126
|
+
return resolved;
|
|
127
|
+
}
|
|
128
|
+
const templateVariables = {};
|
|
129
|
+
for (const param of parametersNeedingValues) {
|
|
130
|
+
templateVariables[param.name] = this.convertParameterToVariable(param);
|
|
131
|
+
}
|
|
132
|
+
const prompter = new InteractivePrompter();
|
|
133
|
+
const promptResult = await prompter.promptForParameters(templateVariables, resolved, {
|
|
134
|
+
interactive: true,
|
|
135
|
+
skipOptional: false,
|
|
136
|
+
timeout: options.timeout,
|
|
137
|
+
intro: options.intro || `🎯 Configure parameters for ${metadata.name}`,
|
|
138
|
+
outro: options.outro || "✅ Parameters configured!",
|
|
139
|
+
});
|
|
140
|
+
if (!promptResult.cancelled && promptResult.errors.length === 0) {
|
|
141
|
+
Object.assign(resolved, promptResult.values);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// Step 5: Final validation - ensure all required parameters have values
|
|
147
|
+
for (const param of metadata.parameters) {
|
|
148
|
+
if (resolved[param.name] !== undefined) {
|
|
149
|
+
this.validateParameterValue(param.name, resolved[param.name], param, resolved);
|
|
150
|
+
}
|
|
151
|
+
else if (param.required) {
|
|
152
|
+
throw new ActionParameterError(`Required parameter '${param.name}' not provided and no default available`, param.name, undefined, param.type);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
debug("Parameters resolved interactively for %s: %o", metadata.name, Object.keys(resolved));
|
|
156
|
+
return resolved;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Convert ActionParameter to TemplateVariable format
|
|
160
|
+
*/
|
|
161
|
+
convertParameterToVariable(param) {
|
|
162
|
+
return {
|
|
163
|
+
type: param.type,
|
|
164
|
+
description: param.description,
|
|
165
|
+
required: param.required,
|
|
166
|
+
default: param.default,
|
|
167
|
+
values: param.values,
|
|
168
|
+
pattern: param.pattern,
|
|
169
|
+
min: param.min,
|
|
170
|
+
max: param.max,
|
|
171
|
+
validation: param.validation,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Validate a parameter value against its definition
|
|
176
|
+
*/
|
|
177
|
+
validateParameterValue(name, value, param, allValues) {
|
|
178
|
+
const validation = this.validateParameterType(name, value, param, allValues);
|
|
179
|
+
if (!validation.valid) {
|
|
180
|
+
throw new ActionParameterError(`Parameter validation failed for '${name}': ${validation.message}`, name, value, param.type);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Validate parameter type and constraints
|
|
185
|
+
*/
|
|
186
|
+
validateParameterType(name, value, param, allValues) {
|
|
187
|
+
// Type validation
|
|
188
|
+
switch (param.type) {
|
|
189
|
+
case "string":
|
|
190
|
+
return this.validateStringParameter(value, param);
|
|
191
|
+
case "boolean":
|
|
192
|
+
return this.validateBooleanParameter(value, param);
|
|
193
|
+
case "number":
|
|
194
|
+
return this.validateNumberParameter(value, param);
|
|
195
|
+
case "enum":
|
|
196
|
+
return this.validateEnumParameter(value, param);
|
|
197
|
+
case "array":
|
|
198
|
+
return this.validateArrayParameter(value, param);
|
|
199
|
+
case "object":
|
|
200
|
+
return this.validateObjectParameter(value, param);
|
|
201
|
+
case "file":
|
|
202
|
+
return this.validateFileParameter(value, param);
|
|
203
|
+
case "directory":
|
|
204
|
+
return this.validateDirectoryParameter(value, param);
|
|
205
|
+
default:
|
|
206
|
+
return {
|
|
207
|
+
valid: false,
|
|
208
|
+
message: `Unknown parameter type: ${param.type}`,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
validateStringParameter(value, param) {
|
|
213
|
+
if (typeof value !== "string") {
|
|
214
|
+
return { valid: false, message: `Expected string, got ${typeof value}` };
|
|
215
|
+
}
|
|
216
|
+
// Pattern validation
|
|
217
|
+
if (param.pattern) {
|
|
218
|
+
const regex = new RegExp(param.pattern);
|
|
219
|
+
if (!regex.test(value)) {
|
|
220
|
+
return {
|
|
221
|
+
valid: false,
|
|
222
|
+
message: param.validation?.message || `Value does not match pattern: ${param.pattern}`,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return { valid: true };
|
|
227
|
+
}
|
|
228
|
+
validateBooleanParameter(value, param) {
|
|
229
|
+
if (typeof value !== "boolean") {
|
|
230
|
+
return { valid: false, message: `Expected boolean, got ${typeof value}` };
|
|
231
|
+
}
|
|
232
|
+
return { valid: true };
|
|
233
|
+
}
|
|
234
|
+
validateNumberParameter(value, param) {
|
|
235
|
+
if (typeof value !== "number" || Number.isNaN(value)) {
|
|
236
|
+
return { valid: false, message: `Expected number, got ${typeof value}` };
|
|
237
|
+
}
|
|
238
|
+
// Range validation
|
|
239
|
+
if (param.min !== undefined && value < param.min) {
|
|
240
|
+
return {
|
|
241
|
+
valid: false,
|
|
242
|
+
message: `Value ${value} is below minimum ${param.min}`,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
if (param.max !== undefined && value > param.max) {
|
|
246
|
+
return {
|
|
247
|
+
valid: false,
|
|
248
|
+
message: `Value ${value} is above maximum ${param.max}`,
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
return { valid: true };
|
|
252
|
+
}
|
|
253
|
+
validateEnumParameter(value, param) {
|
|
254
|
+
if (!param.values || !Array.isArray(param.values)) {
|
|
255
|
+
return { valid: false, message: "Enum parameter missing values array" };
|
|
256
|
+
}
|
|
257
|
+
if (!param.values.includes(value)) {
|
|
258
|
+
return {
|
|
259
|
+
valid: false,
|
|
260
|
+
message: `Value '${value}' is not in allowed values: ${param.values.join(", ")}`,
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
return { valid: true };
|
|
264
|
+
}
|
|
265
|
+
validateArrayParameter(value, param) {
|
|
266
|
+
if (!Array.isArray(value)) {
|
|
267
|
+
return { valid: false, message: `Expected array, got ${typeof value}` };
|
|
268
|
+
}
|
|
269
|
+
return { valid: true };
|
|
270
|
+
}
|
|
271
|
+
validateObjectParameter(value, param) {
|
|
272
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
273
|
+
return { valid: false, message: `Expected object, got ${typeof value}` };
|
|
274
|
+
}
|
|
275
|
+
return { valid: true };
|
|
276
|
+
}
|
|
277
|
+
validateFileParameter(value, param) {
|
|
278
|
+
if (typeof value !== "string") {
|
|
279
|
+
return { valid: false, message: "File path must be a string" };
|
|
280
|
+
}
|
|
281
|
+
// Could add file existence validation here in the future
|
|
282
|
+
// For now, just validate it's a non-empty string
|
|
283
|
+
if (value.trim().length === 0) {
|
|
284
|
+
return { valid: false, message: "File path cannot be empty" };
|
|
285
|
+
}
|
|
286
|
+
return { valid: true };
|
|
287
|
+
}
|
|
288
|
+
validateDirectoryParameter(value, param) {
|
|
289
|
+
if (typeof value !== "string") {
|
|
290
|
+
return { valid: false, message: "Directory path must be a string" };
|
|
291
|
+
}
|
|
292
|
+
// Could add directory existence validation here in the future
|
|
293
|
+
// For now, just validate it's a non-empty string
|
|
294
|
+
if (value.trim().length === 0) {
|
|
295
|
+
return { valid: false, message: "Directory path cannot be empty" };
|
|
296
|
+
}
|
|
297
|
+
return { valid: true };
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
//# sourceMappingURL=parameter-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parameter-resolver.js","sourceRoot":"","sources":["../../src/actions/parameter-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action Registry
|
|
3
|
+
*
|
|
4
|
+
* Central registry for decorated actions with discovery and querying capabilities
|
|
5
|
+
*/
|
|
6
|
+
import type { ActionFunction, ActionMetadata, ActionQueryOptions, DecoratedAction } from "./types.js";
|
|
7
|
+
export declare class ActionRegistry {
|
|
8
|
+
private static instance;
|
|
9
|
+
private actions;
|
|
10
|
+
private categoriesIndex;
|
|
11
|
+
private tagsIndex;
|
|
12
|
+
static getInstance(): ActionRegistry;
|
|
13
|
+
/**
|
|
14
|
+
* Register a decorated action
|
|
15
|
+
*/
|
|
16
|
+
register(fn: ActionFunction, metadata: ActionMetadata): void;
|
|
17
|
+
/**
|
|
18
|
+
* Get a specific action by name
|
|
19
|
+
*/
|
|
20
|
+
get(name: string): DecoratedAction | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Get all registered actions
|
|
23
|
+
*/
|
|
24
|
+
getAll(): DecoratedAction[];
|
|
25
|
+
/**
|
|
26
|
+
* Get actions by category
|
|
27
|
+
*/
|
|
28
|
+
getByCategory(category: string): DecoratedAction[];
|
|
29
|
+
/**
|
|
30
|
+
* Get actions by tags (OR operation - any matching tag)
|
|
31
|
+
*/
|
|
32
|
+
getByTags(tags: string[]): DecoratedAction[];
|
|
33
|
+
/**
|
|
34
|
+
* Query actions with various filters
|
|
35
|
+
*/
|
|
36
|
+
query(options?: ActionQueryOptions): DecoratedAction[];
|
|
37
|
+
/**
|
|
38
|
+
* Get all available categories
|
|
39
|
+
*/
|
|
40
|
+
getCategories(): string[];
|
|
41
|
+
/**
|
|
42
|
+
* Get all available tags
|
|
43
|
+
*/
|
|
44
|
+
getTags(): string[];
|
|
45
|
+
/**
|
|
46
|
+
* Get registry statistics
|
|
47
|
+
*/
|
|
48
|
+
getStats(): {
|
|
49
|
+
totalActions: number;
|
|
50
|
+
categories: Record<string, number>;
|
|
51
|
+
tags: Record<string, number>;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Check if an action exists
|
|
55
|
+
*/
|
|
56
|
+
has(name: string): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Remove an action from the registry
|
|
59
|
+
*/
|
|
60
|
+
unregister(name: string): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Clear all registered actions
|
|
63
|
+
*/
|
|
64
|
+
clear(): void;
|
|
65
|
+
/**
|
|
66
|
+
* Update search indexes for an action
|
|
67
|
+
*/
|
|
68
|
+
private updateIndexes;
|
|
69
|
+
/**
|
|
70
|
+
* Remove action from search indexes
|
|
71
|
+
*/
|
|
72
|
+
private removeFromIndexes;
|
|
73
|
+
/**
|
|
74
|
+
* Extract module path from function for better error reporting
|
|
75
|
+
*/
|
|
76
|
+
private getModulePath;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/actions/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACX,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,MAAM,YAAY,CAAC;AAIpB,qBAAa,cAAc;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiB;IACxC,OAAO,CAAC,OAAO,CAA2C;IAC1D,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,SAAS,CAAuC;IAExD,MAAM,CAAC,WAAW,IAAI,cAAc;IAQpC;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI;IAuB5D;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI9C;;OAEG;IACH,MAAM,IAAI,eAAe,EAAE;IAI3B;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE;IAWlD;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE;IAe5C;;OAEG;IACH,KAAK,CAAC,OAAO,GAAE,kBAAuB,GAAG,eAAe,EAAE;IA4B1D;;OAEG;IACH,aAAa,IAAI,MAAM,EAAE;IAIzB;;OAEG;IACH,OAAO,IAAI,MAAM,EAAE;IAInB;;OAEG;IACH,QAAQ,IAAI;QACX,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC7B;IAmBD;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAajC;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,OAAO,CAAC,aAAa;IAoBrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA0BzB;;OAEG;IACH,OAAO,CAAC,aAAa;CAiBrB"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action Registry
|
|
3
|
+
*
|
|
4
|
+
* Central registry for decorated actions with discovery and querying capabilities
|
|
5
|
+
*/
|
|
6
|
+
import createDebug from "debug";
|
|
7
|
+
const debug = createDebug("hyper:action:registry");
|
|
8
|
+
export class ActionRegistry {
|
|
9
|
+
static instance;
|
|
10
|
+
actions = new Map();
|
|
11
|
+
categoriesIndex = new Map();
|
|
12
|
+
tagsIndex = new Map();
|
|
13
|
+
static getInstance() {
|
|
14
|
+
if (!ActionRegistry.instance) {
|
|
15
|
+
ActionRegistry.instance = new ActionRegistry();
|
|
16
|
+
debug("Action registry initialized");
|
|
17
|
+
}
|
|
18
|
+
return ActionRegistry.instance;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Register a decorated action
|
|
22
|
+
*/
|
|
23
|
+
register(fn, metadata) {
|
|
24
|
+
if (this.actions.has(metadata.name)) {
|
|
25
|
+
debug("Warning: Overriding existing action: %s", metadata.name);
|
|
26
|
+
}
|
|
27
|
+
const action = {
|
|
28
|
+
metadata,
|
|
29
|
+
fn,
|
|
30
|
+
module: this.getModulePath(fn),
|
|
31
|
+
exported: true,
|
|
32
|
+
};
|
|
33
|
+
this.actions.set(metadata.name, action);
|
|
34
|
+
this.updateIndexes(metadata);
|
|
35
|
+
debug("Registered action: %s (category: %s, tags: %s)", metadata.name, metadata.category, metadata.tags?.join(", ") || "none");
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get a specific action by name
|
|
39
|
+
*/
|
|
40
|
+
get(name) {
|
|
41
|
+
return this.actions.get(name);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Get all registered actions
|
|
45
|
+
*/
|
|
46
|
+
getAll() {
|
|
47
|
+
return Array.from(this.actions.values());
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get actions by category
|
|
51
|
+
*/
|
|
52
|
+
getByCategory(category) {
|
|
53
|
+
const actionNames = this.categoriesIndex.get(category);
|
|
54
|
+
if (!actionNames) {
|
|
55
|
+
return [];
|
|
56
|
+
}
|
|
57
|
+
return Array.from(actionNames)
|
|
58
|
+
.map((name) => this.actions.get(name))
|
|
59
|
+
.filter((action) => action !== undefined);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get actions by tags (OR operation - any matching tag)
|
|
63
|
+
*/
|
|
64
|
+
getByTags(tags) {
|
|
65
|
+
const matchingActionNames = new Set();
|
|
66
|
+
for (const tag of tags) {
|
|
67
|
+
const actionNames = this.tagsIndex.get(tag);
|
|
68
|
+
if (actionNames) {
|
|
69
|
+
actionNames.forEach((name) => matchingActionNames.add(name));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return Array.from(matchingActionNames)
|
|
73
|
+
.map((name) => this.actions.get(name))
|
|
74
|
+
.filter((action) => action !== undefined);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Query actions with various filters
|
|
78
|
+
*/
|
|
79
|
+
query(options = {}) {
|
|
80
|
+
let results = this.getAll();
|
|
81
|
+
// Filter by category
|
|
82
|
+
if (options.category) {
|
|
83
|
+
results = results.filter((action) => action.metadata.category === options.category);
|
|
84
|
+
}
|
|
85
|
+
// Filter by tags
|
|
86
|
+
if (options.tags && options.tags.length > 0) {
|
|
87
|
+
results = results.filter((action) => action.metadata.tags?.some((tag) => options.tags?.includes(tag)));
|
|
88
|
+
}
|
|
89
|
+
// Filter by search term (name or description)
|
|
90
|
+
if (options.search) {
|
|
91
|
+
const searchTerm = options.search.toLowerCase();
|
|
92
|
+
results = results.filter((action) => action.metadata.name.toLowerCase().includes(searchTerm) ||
|
|
93
|
+
action.metadata.description?.toLowerCase().includes(searchTerm));
|
|
94
|
+
}
|
|
95
|
+
return results;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get all available categories
|
|
99
|
+
*/
|
|
100
|
+
getCategories() {
|
|
101
|
+
return Array.from(this.categoriesIndex.keys()).sort();
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get all available tags
|
|
105
|
+
*/
|
|
106
|
+
getTags() {
|
|
107
|
+
return Array.from(this.tagsIndex.keys()).sort();
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Get registry statistics
|
|
111
|
+
*/
|
|
112
|
+
getStats() {
|
|
113
|
+
const categories = {};
|
|
114
|
+
const tags = {};
|
|
115
|
+
for (const [category, actionNames] of this.categoriesIndex) {
|
|
116
|
+
categories[category] = actionNames.size;
|
|
117
|
+
}
|
|
118
|
+
for (const [tag, actionNames] of this.tagsIndex) {
|
|
119
|
+
tags[tag] = actionNames.size;
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
totalActions: this.actions.size,
|
|
123
|
+
categories,
|
|
124
|
+
tags,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Check if an action exists
|
|
129
|
+
*/
|
|
130
|
+
has(name) {
|
|
131
|
+
return this.actions.has(name);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Remove an action from the registry
|
|
135
|
+
*/
|
|
136
|
+
unregister(name) {
|
|
137
|
+
const action = this.actions.get(name);
|
|
138
|
+
if (!action) {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
this.actions.delete(name);
|
|
142
|
+
this.removeFromIndexes(action.metadata);
|
|
143
|
+
debug("Unregistered action: %s", name);
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Clear all registered actions
|
|
148
|
+
*/
|
|
149
|
+
clear() {
|
|
150
|
+
this.actions.clear();
|
|
151
|
+
this.categoriesIndex.clear();
|
|
152
|
+
this.tagsIndex.clear();
|
|
153
|
+
debug("Registry cleared");
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Update search indexes for an action
|
|
157
|
+
*/
|
|
158
|
+
updateIndexes(metadata) {
|
|
159
|
+
// Update category index
|
|
160
|
+
if (metadata.category) {
|
|
161
|
+
if (!this.categoriesIndex.has(metadata.category)) {
|
|
162
|
+
this.categoriesIndex.set(metadata.category, new Set());
|
|
163
|
+
}
|
|
164
|
+
this.categoriesIndex.get(metadata.category)?.add(metadata.name);
|
|
165
|
+
}
|
|
166
|
+
// Update tags index
|
|
167
|
+
if (metadata.tags) {
|
|
168
|
+
for (const tag of metadata.tags) {
|
|
169
|
+
if (!this.tagsIndex.has(tag)) {
|
|
170
|
+
this.tagsIndex.set(tag, new Set());
|
|
171
|
+
}
|
|
172
|
+
this.tagsIndex.get(tag)?.add(metadata.name);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Remove action from search indexes
|
|
178
|
+
*/
|
|
179
|
+
removeFromIndexes(metadata) {
|
|
180
|
+
// Remove from category index
|
|
181
|
+
if (metadata.category) {
|
|
182
|
+
const categoryActions = this.categoriesIndex.get(metadata.category);
|
|
183
|
+
if (categoryActions) {
|
|
184
|
+
categoryActions.delete(metadata.name);
|
|
185
|
+
if (categoryActions.size === 0) {
|
|
186
|
+
this.categoriesIndex.delete(metadata.category);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
// Remove from tags index
|
|
191
|
+
if (metadata.tags) {
|
|
192
|
+
for (const tag of metadata.tags) {
|
|
193
|
+
const tagActions = this.tagsIndex.get(tag);
|
|
194
|
+
if (tagActions) {
|
|
195
|
+
tagActions.delete(metadata.name);
|
|
196
|
+
if (tagActions.size === 0) {
|
|
197
|
+
this.tagsIndex.delete(tag);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Extract module path from function for better error reporting
|
|
205
|
+
*/
|
|
206
|
+
getModulePath(fn) {
|
|
207
|
+
// Try to extract file path from function toString
|
|
208
|
+
const fnString = fn.toString();
|
|
209
|
+
// Look for file:// URLs in the function string
|
|
210
|
+
const fileMatch = fnString.match(/file:\/\/([^"'\s]+)/);
|
|
211
|
+
if (fileMatch) {
|
|
212
|
+
return fileMatch[1];
|
|
213
|
+
}
|
|
214
|
+
// Check if function has a name that might indicate its source
|
|
215
|
+
if (fn.name) {
|
|
216
|
+
return `<${fn.name}>`;
|
|
217
|
+
}
|
|
218
|
+
return "<unknown>";
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/actions/registry.ts"],"names":[],"mappings":"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"}
|