@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,478 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main command for executing recipes
|
|
3
|
+
* Usage: hyper gen <recipe> [options]
|
|
4
|
+
* Or shorthand: hyper <kit> <recipe-path>
|
|
5
|
+
*/
|
|
6
|
+
import fs from "node:fs";
|
|
7
|
+
import path from "node:path";
|
|
8
|
+
import { PathResolver } from "@hypercli/core";
|
|
9
|
+
import { discoverKits, getDefaultKitSearchDirs } from "@hypercli/core";
|
|
10
|
+
import { Args, Flags } from "@oclif/core";
|
|
11
|
+
import { AiCollector } from "#ai/ai-collector";
|
|
12
|
+
import { resolveTransport } from "#ai/transports/resolve-transport";
|
|
13
|
+
import { BaseCommand } from "#lib/base-command";
|
|
14
|
+
import { GroupExecutor } from "#recipe-engine/group-executor";
|
|
15
|
+
import { coerceValue } from "#utils/coerce-value";
|
|
16
|
+
export default class Gen extends BaseCommand {
|
|
17
|
+
static description = "Execute a recipe to generate code";
|
|
18
|
+
static examples = [
|
|
19
|
+
"<%= config.bin %> gen ./my-recipe",
|
|
20
|
+
"<%= config.bin %> gen @kit/starlight/create",
|
|
21
|
+
"<%= config.bin %> gen create-component --name=Button",
|
|
22
|
+
"<%= config.bin %> gen ./my-recipe --answers ./ai-answers.json",
|
|
23
|
+
"<%= config.bin %> gen crud edit-page --model=Organization",
|
|
24
|
+
"<%= config.bin %> nextjs crud update Organization",
|
|
25
|
+
];
|
|
26
|
+
static flags = {
|
|
27
|
+
...BaseCommand.baseFlags,
|
|
28
|
+
dry: Flags.boolean({
|
|
29
|
+
description: "Show what would be generated without writing files",
|
|
30
|
+
default: false,
|
|
31
|
+
}),
|
|
32
|
+
force: Flags.boolean({
|
|
33
|
+
char: "f",
|
|
34
|
+
description: "Overwrite existing files",
|
|
35
|
+
default: false,
|
|
36
|
+
}),
|
|
37
|
+
yes: Flags.boolean({
|
|
38
|
+
char: "y",
|
|
39
|
+
description: "Skip confirmation prompts",
|
|
40
|
+
default: false,
|
|
41
|
+
}),
|
|
42
|
+
answers: Flags.file({
|
|
43
|
+
description: "Path to AI answers JSON file (2-pass generation)",
|
|
44
|
+
}),
|
|
45
|
+
"prompt-template": Flags.file({
|
|
46
|
+
description: "Path to a custom Jig template for the AI prompt document",
|
|
47
|
+
}),
|
|
48
|
+
ask: Flags.string({
|
|
49
|
+
description: "Who resolves missing variables: me (interactive), ai (use configured transport), stdout (print prompt doc to stdout), nobody (error)",
|
|
50
|
+
options: ["me", "ai", "stdout", "nobody"],
|
|
51
|
+
}),
|
|
52
|
+
"no-defaults": Flags.boolean({
|
|
53
|
+
description: "Don't use default values — ask about every variable",
|
|
54
|
+
default: false,
|
|
55
|
+
}),
|
|
56
|
+
};
|
|
57
|
+
static args = {
|
|
58
|
+
recipe: Args.string({
|
|
59
|
+
description: "Recipe to execute (path, package, or cookbook/recipe)",
|
|
60
|
+
required: true,
|
|
61
|
+
}),
|
|
62
|
+
};
|
|
63
|
+
static strict = false;
|
|
64
|
+
/**
|
|
65
|
+
* Names of all flags that are explicitly declared on this command (and its base).
|
|
66
|
+
* Used to strip unknown --key=value recipe variables from argv before oclif
|
|
67
|
+
* parses it — oclif v4 throws NonExistentFlagsError on unknown flags even when
|
|
68
|
+
* `strict = false` (strict only affects extra positional args, not flags).
|
|
69
|
+
*/
|
|
70
|
+
static get knownFlagNames() {
|
|
71
|
+
const names = new Set();
|
|
72
|
+
const allFlags = { ...BaseCommand.baseFlags, ...Gen.flags };
|
|
73
|
+
for (const [name, def] of Object.entries(allFlags)) {
|
|
74
|
+
names.add(name);
|
|
75
|
+
// Also register any aliases declared on the flag
|
|
76
|
+
const flagDef = def;
|
|
77
|
+
if (flagDef.aliases) {
|
|
78
|
+
for (const alias of flagDef.aliases)
|
|
79
|
+
names.add(alias);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return names;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Split argv into two arrays:
|
|
86
|
+
* - safeArgv: only known flags + positional args (safe to pass to oclif)
|
|
87
|
+
* - fullArgv: the original argv (used by parseParameters / extractPathSegments)
|
|
88
|
+
*/
|
|
89
|
+
splitArgv(argv) {
|
|
90
|
+
const known = Gen.knownFlagNames;
|
|
91
|
+
const safeArgv = [];
|
|
92
|
+
let i = 0;
|
|
93
|
+
while (i < argv.length) {
|
|
94
|
+
const arg = argv[i];
|
|
95
|
+
if (arg === "--") {
|
|
96
|
+
// Everything after `--` is safe to pass through as-is
|
|
97
|
+
safeArgv.push(...argv.slice(i));
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
if (arg.startsWith("--")) {
|
|
101
|
+
const eqIdx = arg.indexOf("=");
|
|
102
|
+
const flagName = eqIdx > 0 ? arg.slice(2, eqIdx) : arg.slice(2);
|
|
103
|
+
if (known.has(flagName)) {
|
|
104
|
+
safeArgv.push(arg);
|
|
105
|
+
// If it's --flag value (no `=`), also carry forward the value token
|
|
106
|
+
if (eqIdx < 0 && i + 1 < argv.length && !argv[i + 1].startsWith("-")) {
|
|
107
|
+
i++;
|
|
108
|
+
safeArgv.push(argv[i]);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Unknown --key or --key=value: drop from safeArgv (oclif won't see it)
|
|
112
|
+
}
|
|
113
|
+
else if (arg.startsWith("-") && arg.length === 2) {
|
|
114
|
+
// Short flag: keep only if it belongs to a known flag
|
|
115
|
+
const shortChar = arg.slice(1);
|
|
116
|
+
const isKnown = Object.values({ ...BaseCommand.baseFlags, ...Gen.flags }).some((f) => f.char === shortChar);
|
|
117
|
+
if (isKnown) {
|
|
118
|
+
safeArgv.push(arg);
|
|
119
|
+
// Carry the value token for -f value style
|
|
120
|
+
if (i + 1 < argv.length && !argv[i + 1].startsWith("-")) {
|
|
121
|
+
i++;
|
|
122
|
+
safeArgv.push(argv[i]);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
// Positional arg — always safe
|
|
128
|
+
safeArgv.push(arg);
|
|
129
|
+
}
|
|
130
|
+
i++;
|
|
131
|
+
}
|
|
132
|
+
return { safeArgv, fullArgv: argv };
|
|
133
|
+
}
|
|
134
|
+
async run() {
|
|
135
|
+
// oclif v4 throws NonExistentFlagsError for unknown flags even with strict=false.
|
|
136
|
+
// Recipe variables like --name=Button are unknown to oclif but valid for us.
|
|
137
|
+
// Strip them from argv before parse(), then use the original argv for parseParameters().
|
|
138
|
+
const fullArgv = this.argv;
|
|
139
|
+
const { safeArgv } = this.splitArgv(fullArgv);
|
|
140
|
+
this.argv = safeArgv;
|
|
141
|
+
const { flags } = await this.parse(Gen);
|
|
142
|
+
const argv = fullArgv; // use original argv for path/param extraction
|
|
143
|
+
await this.resolveEffectiveCwd(flags);
|
|
144
|
+
// Collect all non-flag segments for path resolution
|
|
145
|
+
const segments = this.extractPathSegments(argv);
|
|
146
|
+
// Resolve recipe path using PathResolver
|
|
147
|
+
const resolved = await this.resolveRecipePath(segments, flags.cwd);
|
|
148
|
+
if (!resolved) {
|
|
149
|
+
this.error(`Recipe not found: ${segments.join(" ")}\nTry 'hyper gen --help' for usage.`);
|
|
150
|
+
}
|
|
151
|
+
// Parse named parameters (--key=value and --key value)
|
|
152
|
+
const namedParams = this.parseParameters(argv);
|
|
153
|
+
// Map positional args to variables if recipe has position definitions
|
|
154
|
+
const positionalParams = await this.mapPositionalArgs(resolved);
|
|
155
|
+
const params = { ...positionalParams, ...namedParams }; // named wins
|
|
156
|
+
// Load AI answers if provided (Pass 2)
|
|
157
|
+
let answers;
|
|
158
|
+
if (flags.answers) {
|
|
159
|
+
try {
|
|
160
|
+
const content = fs.readFileSync(flags.answers, "utf-8");
|
|
161
|
+
answers = JSON.parse(content);
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
this.error(`Failed to load answers file: ${error instanceof Error ? error.message : String(error)}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// Determine effective ask mode
|
|
168
|
+
// --ask=stdout is sugar for --ask=ai with the stdout transport forced
|
|
169
|
+
const askFlag = flags.ask;
|
|
170
|
+
const askMode = askFlag === "stdout" ? "ai" : (askFlag ?? (process.stdout.isTTY ? "me" : "nobody"));
|
|
171
|
+
const aiConfigOverride = askFlag === "stdout" ? { mode: "stdout" } : undefined;
|
|
172
|
+
const noDefaults = flags["no-defaults"] ?? false;
|
|
173
|
+
if (resolved.type === "group") {
|
|
174
|
+
return this.executeGroup(resolved, params, flags, answers, askMode, noDefaults, aiConfigOverride);
|
|
175
|
+
}
|
|
176
|
+
return this.executeSingleRecipe(resolved, params, flags, answers, askMode, noDefaults, aiConfigOverride);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Execute a single recipe
|
|
180
|
+
*/
|
|
181
|
+
async executeSingleRecipe(resolved, params, flags, answers, askMode = "me", noDefaults = false, aiConfigOverride) {
|
|
182
|
+
// Initialize AiCollector for Pass 1 if no answers provided
|
|
183
|
+
const collector = AiCollector.getInstance();
|
|
184
|
+
collector.clear();
|
|
185
|
+
if (!answers) {
|
|
186
|
+
collector.collectMode = true;
|
|
187
|
+
}
|
|
188
|
+
if (answers) {
|
|
189
|
+
this.log(`Executing recipe: ${resolved.fullPath}`);
|
|
190
|
+
}
|
|
191
|
+
if (flags.dry) {
|
|
192
|
+
this.log("(dry run - no files will be written)");
|
|
193
|
+
}
|
|
194
|
+
const aiConfig = aiConfigOverride
|
|
195
|
+
? { ...this.hypergenConfig?.ai, ...aiConfigOverride }
|
|
196
|
+
: this.hypergenConfig?.ai;
|
|
197
|
+
try {
|
|
198
|
+
let result = await this.recipeEngine.executeRecipe({ type: "file", path: resolved.fullPath }, {
|
|
199
|
+
variables: params,
|
|
200
|
+
workingDir: flags.cwd,
|
|
201
|
+
dryRun: flags.dry,
|
|
202
|
+
force: flags.force,
|
|
203
|
+
answers,
|
|
204
|
+
askMode,
|
|
205
|
+
noDefaults,
|
|
206
|
+
aiConfig,
|
|
207
|
+
});
|
|
208
|
+
// Check if Pass 1 collected any AI entries
|
|
209
|
+
if (collector.collectMode && collector.hasEntries()) {
|
|
210
|
+
const transport = resolveTransport(aiConfig);
|
|
211
|
+
// Build the original command from consumed path segments, remaining positional args,
|
|
212
|
+
// and flags only. Do NOT include process.argv.slice(3) directly — it contains
|
|
213
|
+
// the consumed path segments which would be duplicated since resolved.consumed
|
|
214
|
+
// already has them.
|
|
215
|
+
const flagsOnly = process.argv
|
|
216
|
+
.slice(3)
|
|
217
|
+
.filter((a) => a.startsWith("-") && a !== "--answers" && !a.endsWith(".json"));
|
|
218
|
+
const originalCommand = [
|
|
219
|
+
"hyper",
|
|
220
|
+
"gen",
|
|
221
|
+
...resolved.consumed,
|
|
222
|
+
...resolved.remaining,
|
|
223
|
+
...flagsOnly,
|
|
224
|
+
].join(" ");
|
|
225
|
+
const promptTemplatePath = flags["prompt-template"] || aiConfig?.promptTemplate;
|
|
226
|
+
// Build recipe variable descriptions for the prompt document
|
|
227
|
+
let promptVariables;
|
|
228
|
+
try {
|
|
229
|
+
const loadResult = await this.recipeEngine.loadRecipe({
|
|
230
|
+
type: "file",
|
|
231
|
+
path: resolved.fullPath,
|
|
232
|
+
});
|
|
233
|
+
const varDefs = loadResult.recipe.variables;
|
|
234
|
+
if (varDefs && Object.keys(varDefs).length > 0) {
|
|
235
|
+
promptVariables = Object.entries(varDefs).map(([name, def]) => ({
|
|
236
|
+
name,
|
|
237
|
+
type: def.type,
|
|
238
|
+
required: def.required ?? false,
|
|
239
|
+
default: def.default,
|
|
240
|
+
prompt: def.prompt,
|
|
241
|
+
description: def.description,
|
|
242
|
+
values: def.values,
|
|
243
|
+
provided: params[name] !== undefined,
|
|
244
|
+
providedValue: params[name],
|
|
245
|
+
}));
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
// Non-critical — prompt will just lack variable descriptions
|
|
250
|
+
}
|
|
251
|
+
const transportResult = await transport.resolve({
|
|
252
|
+
collector,
|
|
253
|
+
config: aiConfig ?? {},
|
|
254
|
+
originalCommand,
|
|
255
|
+
answersPath: "./ai-answers.json",
|
|
256
|
+
projectRoot: flags.cwd,
|
|
257
|
+
promptTemplate: promptTemplatePath,
|
|
258
|
+
variables: promptVariables,
|
|
259
|
+
});
|
|
260
|
+
if (transportResult.status === "deferred") {
|
|
261
|
+
collector.clear();
|
|
262
|
+
this.exit(transportResult.exitCode);
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
// Transport resolved answers inline — re-run as Pass 2
|
|
266
|
+
collector.clear();
|
|
267
|
+
collector.collectMode = false;
|
|
268
|
+
result = await this.recipeEngine.executeRecipe({ type: "file", path: resolved.fullPath }, {
|
|
269
|
+
variables: params,
|
|
270
|
+
workingDir: flags.cwd,
|
|
271
|
+
dryRun: flags.dry,
|
|
272
|
+
force: flags.force,
|
|
273
|
+
answers: transportResult.answers,
|
|
274
|
+
askMode: "nobody",
|
|
275
|
+
noDefaults,
|
|
276
|
+
aiConfig,
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
// Pass 1 found no @ai entries — recipe doesn't use AI generation.
|
|
280
|
+
// Re-run without collect mode so files are actually written.
|
|
281
|
+
if (collector.collectMode) {
|
|
282
|
+
collector.collectMode = false;
|
|
283
|
+
collector.clear();
|
|
284
|
+
result = await this.recipeEngine.executeRecipe({ type: "file", path: resolved.fullPath }, {
|
|
285
|
+
variables: params,
|
|
286
|
+
workingDir: flags.cwd,
|
|
287
|
+
dryRun: flags.dry,
|
|
288
|
+
force: flags.force,
|
|
289
|
+
answers,
|
|
290
|
+
askMode: "nobody", // Don't prompt again — variables already resolved
|
|
291
|
+
noDefaults,
|
|
292
|
+
aiConfig,
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
collector.clear();
|
|
297
|
+
}
|
|
298
|
+
if (result.success) {
|
|
299
|
+
this.log("\n✓ Recipe completed successfully");
|
|
300
|
+
this.log(` Steps completed: ${result.metadata.completedSteps}`);
|
|
301
|
+
if (result.filesCreated.length > 0) {
|
|
302
|
+
this.log(` Files created: ${result.filesCreated.length}`);
|
|
303
|
+
}
|
|
304
|
+
if (result.filesModified.length > 0) {
|
|
305
|
+
this.log(` Files modified: ${result.filesModified.length}`);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
const errorMsg = result.errors.length > 0 ? result.errors.join(", ") : "Unknown error";
|
|
310
|
+
this.error(`Recipe failed: ${errorMsg}`);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
catch (error) {
|
|
314
|
+
collector.clear();
|
|
315
|
+
if (error?.code === "EEXIT")
|
|
316
|
+
throw error;
|
|
317
|
+
this.error(`Failed to execute recipe: ${error instanceof Error ? error.message : String(error)}`);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Execute a group of recipes with dependency resolution
|
|
322
|
+
*/
|
|
323
|
+
async executeGroup(resolved, params, flags, answers, askMode = "me", noDefaults = false, aiConfigOverride) {
|
|
324
|
+
const groupExecutor = new GroupExecutor(this.recipeEngine);
|
|
325
|
+
this.log(`Executing recipe group: ${resolved.fullPath}`);
|
|
326
|
+
if (flags.dry) {
|
|
327
|
+
this.log("(dry run - no files will be written)");
|
|
328
|
+
}
|
|
329
|
+
try {
|
|
330
|
+
const group = await groupExecutor.discoverGroup(resolved.fullPath);
|
|
331
|
+
if (group.recipes.length === 0) {
|
|
332
|
+
this.error(`No recipes found in directory: ${resolved.fullPath}`);
|
|
333
|
+
}
|
|
334
|
+
this.log(`Found ${group.recipes.length} recipes: ${group.recipes.map((r) => r.name).join(", ")}`);
|
|
335
|
+
const groupAiConfig = aiConfigOverride
|
|
336
|
+
? { ...this.hypergenConfig?.ai, ...aiConfigOverride }
|
|
337
|
+
: this.hypergenConfig?.ai;
|
|
338
|
+
const result = await groupExecutor.executeGroup(group, params, {
|
|
339
|
+
variables: params,
|
|
340
|
+
workingDir: flags.cwd,
|
|
341
|
+
dryRun: flags.dry,
|
|
342
|
+
force: flags.force,
|
|
343
|
+
answers,
|
|
344
|
+
continueOnError: false,
|
|
345
|
+
askMode,
|
|
346
|
+
noDefaults,
|
|
347
|
+
aiConfig: groupAiConfig,
|
|
348
|
+
});
|
|
349
|
+
if (result.success) {
|
|
350
|
+
this.log("\n✓ Group execution completed successfully");
|
|
351
|
+
this.log(` Recipes executed: ${result.recipeResults.length}`);
|
|
352
|
+
for (const rr of result.recipeResults) {
|
|
353
|
+
const status = rr.result.success ? "✓" : "✗";
|
|
354
|
+
this.log(` ${status} ${rr.name}: ${rr.result.metadata.completedSteps} steps`);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
else {
|
|
358
|
+
const errorMsg = result.errors.length > 0 ? result.errors.join("\n ") : "Unknown error";
|
|
359
|
+
this.error(`Group execution failed:\n ${errorMsg}`);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
catch (error) {
|
|
363
|
+
if (error?.code === "EEXIT")
|
|
364
|
+
throw error;
|
|
365
|
+
this.error(`Failed to execute group: ${error instanceof Error ? error.message : String(error)}`);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Extract non-flag path segments from argv.
|
|
370
|
+
* Everything before `--` and not starting with `-` is a path segment.
|
|
371
|
+
*/
|
|
372
|
+
extractPathSegments(argv) {
|
|
373
|
+
const segments = [];
|
|
374
|
+
for (const arg of argv) {
|
|
375
|
+
if (arg === "--")
|
|
376
|
+
break;
|
|
377
|
+
if (arg.startsWith("-")) {
|
|
378
|
+
// If it's --key=value, skip
|
|
379
|
+
if (arg.startsWith("--")) {
|
|
380
|
+
// If next arg is the value (--key value), we'll handle that in parseParameters
|
|
381
|
+
// but we need to skip it here
|
|
382
|
+
const withoutPrefix = arg.slice(2);
|
|
383
|
+
if (!withoutPrefix.includes("=")) {
|
|
384
|
+
// The next non-flag arg would be the value — but we can't know that here
|
|
385
|
+
// without lookahead. For safety, just skip flags.
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
continue;
|
|
389
|
+
}
|
|
390
|
+
segments.push(arg);
|
|
391
|
+
}
|
|
392
|
+
return segments;
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Resolve recipe path using the PathResolver with kit/cookbook discovery
|
|
396
|
+
*/
|
|
397
|
+
async resolveRecipePath(segments, cwd) {
|
|
398
|
+
if (segments.length === 0)
|
|
399
|
+
return null;
|
|
400
|
+
// cwd is already resolved by resolveEffectiveCwd (hyper.config dir or monorepo root)
|
|
401
|
+
const projectRoot = cwd;
|
|
402
|
+
// Discover kits from project root
|
|
403
|
+
const kitSearchDirs = getDefaultKitSearchDirs(projectRoot);
|
|
404
|
+
// Also add configured search directories
|
|
405
|
+
const configDirs = this.hypergenConfig?.discovery?.directories || [];
|
|
406
|
+
const allSearchDirs = [
|
|
407
|
+
...configDirs.map((d) => path.resolve(cwd, d)),
|
|
408
|
+
path.resolve(cwd, ".hypergen/cookbooks"),
|
|
409
|
+
path.resolve(cwd, "cookbooks"),
|
|
410
|
+
];
|
|
411
|
+
const kits = await discoverKits(kitSearchDirs);
|
|
412
|
+
const resolver = new PathResolver(kits, allSearchDirs, cwd);
|
|
413
|
+
return resolver.resolve(segments);
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Map positional args (resolved.remaining) to recipe variables by position.
|
|
417
|
+
*/
|
|
418
|
+
async mapPositionalArgs(resolved) {
|
|
419
|
+
if (resolved.remaining.length === 0)
|
|
420
|
+
return {};
|
|
421
|
+
if (resolved.type !== "recipe")
|
|
422
|
+
return {};
|
|
423
|
+
try {
|
|
424
|
+
// Load the recipe to get variable definitions
|
|
425
|
+
const loadResult = await this.recipeEngine.loadRecipe({
|
|
426
|
+
type: "file",
|
|
427
|
+
path: resolved.fullPath,
|
|
428
|
+
});
|
|
429
|
+
const variables = loadResult.recipe.variables;
|
|
430
|
+
if (!variables)
|
|
431
|
+
return {};
|
|
432
|
+
// Find variables with `position` field, sorted by position
|
|
433
|
+
const positionalVars = [];
|
|
434
|
+
for (const [name, config] of Object.entries(variables)) {
|
|
435
|
+
if (config.position !== undefined) {
|
|
436
|
+
positionalVars.push({ name, position: config.position, config });
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
positionalVars.sort((a, b) => a.position - b.position);
|
|
440
|
+
// Map remaining segments to positional variables
|
|
441
|
+
const mapped = {};
|
|
442
|
+
for (let i = 0; i < Math.min(resolved.remaining.length, positionalVars.length); i++) {
|
|
443
|
+
mapped[positionalVars[i].name] = resolved.remaining[i];
|
|
444
|
+
}
|
|
445
|
+
return mapped;
|
|
446
|
+
}
|
|
447
|
+
catch {
|
|
448
|
+
// If we can't load the recipe, return empty — error will surface during execution
|
|
449
|
+
return {};
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Parse named parameters from argv (--key=value or --key value)
|
|
454
|
+
*/
|
|
455
|
+
parseParameters(argv) {
|
|
456
|
+
const params = {};
|
|
457
|
+
for (let i = 0; i < argv.length; i++) {
|
|
458
|
+
const arg = argv[i];
|
|
459
|
+
if (arg.startsWith("--")) {
|
|
460
|
+
const eqIndex = arg.indexOf("=");
|
|
461
|
+
if (eqIndex > 0) {
|
|
462
|
+
// --key=value format
|
|
463
|
+
const key = arg.slice(2, eqIndex);
|
|
464
|
+
const value = arg.slice(eqIndex + 1);
|
|
465
|
+
params[key] = coerceValue(value);
|
|
466
|
+
}
|
|
467
|
+
else if (i + 1 < argv.length && !argv[i + 1].startsWith("--")) {
|
|
468
|
+
// --key value format
|
|
469
|
+
const key = arg.slice(2);
|
|
470
|
+
params[key] = coerceValue(argv[i + 1]);
|
|
471
|
+
i++; // skip next
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
return params;
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
//# sourceMappingURL=gen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gen.js","sourceRoot":"","sources":["../../src/commands/gen.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recipe Info command - Show recipe information
|
|
3
|
+
*/
|
|
4
|
+
import { BaseCommand } from "#lib/base-command";
|
|
5
|
+
export default class RecipeInfo extends BaseCommand<typeof RecipeInfo> {
|
|
6
|
+
static description: string;
|
|
7
|
+
static examples: string[];
|
|
8
|
+
static flags: {
|
|
9
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
|
+
verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
|
+
quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
12
|
+
};
|
|
13
|
+
static args: {
|
|
14
|
+
recipe: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
15
|
+
};
|
|
16
|
+
run(): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=info.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/commands/recipe/info.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW,CAAC,OAAO,UAAU,CAAC;IACrE,OAAgB,WAAW,SAAsC;IAEjE,OAAgB,QAAQ,WAGtB;IAEF,OAAgB,KAAK;;;;MAEnB;IAEF,OAAgB,IAAI;;MAKlB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAkE1B"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recipe Info command - Show recipe information
|
|
3
|
+
*/
|
|
4
|
+
import { Args } from "@oclif/core";
|
|
5
|
+
import { BaseCommand } from "#lib/base-command";
|
|
6
|
+
import { outputFlags } from "#lib/flags";
|
|
7
|
+
import { loadRecipe } from "#recipe-engine/recipe-engine";
|
|
8
|
+
export default class RecipeInfo extends BaseCommand {
|
|
9
|
+
static description = "Show detailed recipe information";
|
|
10
|
+
static examples = [
|
|
11
|
+
"<%= config.bin %> <%= command.id %> my-recipe.yml",
|
|
12
|
+
"<%= config.bin %> <%= command.id %> .hyper/kits/component.yml --json",
|
|
13
|
+
];
|
|
14
|
+
static flags = {
|
|
15
|
+
...outputFlags,
|
|
16
|
+
};
|
|
17
|
+
static args = {
|
|
18
|
+
recipe: Args.string({
|
|
19
|
+
description: "Path to recipe file (.yml or .yaml)",
|
|
20
|
+
required: true,
|
|
21
|
+
}),
|
|
22
|
+
};
|
|
23
|
+
async run() {
|
|
24
|
+
const { args, flags } = await this.parse(RecipeInfo);
|
|
25
|
+
const recipePath = args.recipe;
|
|
26
|
+
try {
|
|
27
|
+
const result = await loadRecipe(recipePath);
|
|
28
|
+
const recipe = result.recipe;
|
|
29
|
+
if (flags.json) {
|
|
30
|
+
this.log(JSON.stringify(recipe, null, 2));
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
this.log(`Recipe: ${recipe.name}`);
|
|
34
|
+
this.log(`Version: ${recipe.version || "unversioned"}`);
|
|
35
|
+
if (recipe.description) {
|
|
36
|
+
this.log(`Description: ${recipe.description}`);
|
|
37
|
+
}
|
|
38
|
+
// Variables
|
|
39
|
+
const variables = Object.entries(recipe.variables || {});
|
|
40
|
+
if (variables.length > 0) {
|
|
41
|
+
this.log("");
|
|
42
|
+
this.log(`Variables (${variables.length}):`);
|
|
43
|
+
for (const [name, varConfig] of variables) {
|
|
44
|
+
let line = ` - ${name}`;
|
|
45
|
+
if (typeof varConfig === "object" && varConfig !== null) {
|
|
46
|
+
const config = varConfig;
|
|
47
|
+
if (config.type)
|
|
48
|
+
line += ` (${config.type})`;
|
|
49
|
+
if (config.required)
|
|
50
|
+
line += " *required*";
|
|
51
|
+
if (config.default !== undefined)
|
|
52
|
+
line += ` [default: ${config.default}]`;
|
|
53
|
+
if (config.description)
|
|
54
|
+
line += ` - ${config.description}`;
|
|
55
|
+
}
|
|
56
|
+
this.log(line);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Steps
|
|
60
|
+
if (recipe.steps?.length) {
|
|
61
|
+
this.log("");
|
|
62
|
+
this.log(`Steps (${recipe.steps.length}):`);
|
|
63
|
+
for (let i = 0; i < recipe.steps.length; i++) {
|
|
64
|
+
const step = recipe.steps[i];
|
|
65
|
+
let line = ` ${i + 1}. ${step.name || `Step ${i + 1}`}`;
|
|
66
|
+
line += ` [${step.tool}]`;
|
|
67
|
+
// Check for condition property (may exist on some step types)
|
|
68
|
+
const stepWithCondition = step;
|
|
69
|
+
if (stepWithCondition.condition)
|
|
70
|
+
line += " (conditional)";
|
|
71
|
+
this.log(line);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Dependencies
|
|
75
|
+
if (recipe.dependencies?.length) {
|
|
76
|
+
this.log("");
|
|
77
|
+
this.log(`Dependencies (${recipe.dependencies.length}):`);
|
|
78
|
+
for (const dep of recipe.dependencies) {
|
|
79
|
+
this.log(` - ${dep}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
85
|
+
this.error(`Failed to read recipe: ${message}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/commands/recipe/info.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recipe List command - List available recipes from all discovered kits
|
|
3
|
+
*/
|
|
4
|
+
import { BaseCommand } from "#lib/base-command";
|
|
5
|
+
export default class RecipeList extends BaseCommand<typeof RecipeList> {
|
|
6
|
+
static description: string;
|
|
7
|
+
static examples: string[];
|
|
8
|
+
static flags: {
|
|
9
|
+
kit: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
cookbook: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
12
|
+
verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
|
+
quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
14
|
+
};
|
|
15
|
+
static args: {
|
|
16
|
+
kit: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
17
|
+
};
|
|
18
|
+
run(): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Quick parse a recipe file for display purposes
|
|
21
|
+
*/
|
|
22
|
+
private quickParseRecipe;
|
|
23
|
+
/**
|
|
24
|
+
* Get recipe directories by scanning for recipe.yml files
|
|
25
|
+
*/
|
|
26
|
+
private getRecipeDirs;
|
|
27
|
+
private displayRecipes;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/recipe/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAahD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW,CAAC,OAAO,UAAU,CAAC;IACrE,OAAgB,WAAW,SAAqD;IAEhF,OAAgB,QAAQ,WAItB;IAEF,OAAgB,KAAK;;;;;;MAUnB;IAEF,OAAgB,IAAI;;MAKlB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAwH1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuBxB;;OAEG;IACH,OAAO,CAAC,aAAa;IAqBrB,OAAO,CAAC,cAAc;CA8CtB"}
|