ultracode-ai 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +36 -0
- package/dist/commands/authoring-agents.d.ts +19 -0
- package/dist/commands/authoring-agents.d.ts.map +1 -0
- package/dist/commands/authoring-agents.js +123 -0
- package/dist/commands/authoring-agents.js.map +1 -0
- package/dist/commands/budget.d.ts +16 -0
- package/dist/commands/budget.d.ts.map +1 -0
- package/dist/commands/budget.js +105 -0
- package/dist/commands/budget.js.map +1 -0
- package/dist/commands/config.d.ts +15 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +147 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/doctor.d.ts +65 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +188 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/ext-format.d.ts +22 -0
- package/dist/commands/ext-format.d.ts.map +1 -0
- package/dist/commands/ext-format.js +115 -0
- package/dist/commands/ext-format.js.map +1 -0
- package/dist/commands/ext-helpers.d.ts +25 -0
- package/dist/commands/ext-helpers.d.ts.map +1 -0
- package/dist/commands/ext-helpers.js +36 -0
- package/dist/commands/ext-helpers.js.map +1 -0
- package/dist/commands/learn.d.ts +29 -0
- package/dist/commands/learn.d.ts.map +1 -0
- package/dist/commands/learn.js +190 -0
- package/dist/commands/learn.js.map +1 -0
- package/dist/commands/list.d.ts +11 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +58 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/run.d.ts +13 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +46 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/setup.d.ts +40 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +146 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/skills.d.ts +16 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +148 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/versioning.d.ts +13 -0
- package/dist/commands/versioning.d.ts.map +1 -0
- package/dist/commands/versioning.js +63 -0
- package/dist/commands/versioning.js.map +1 -0
- package/dist/context.d.ts +60 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +69 -0
- package/dist/context.js.map +1 -0
- package/dist/core-loader.d.ts +22 -0
- package/dist/core-loader.d.ts.map +1 -0
- package/dist/core-loader.js +22 -0
- package/dist/core-loader.js.map +1 -0
- package/dist/format.d.ts +15 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +80 -0
- package/dist/format.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +59 -0
- package/dist/index.js.map +1 -0
- package/dist/program.d.ts +19 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +120 -0
- package/dist/program.js.map +1 -0
- package/dist/themes/dark.d.ts +4 -0
- package/dist/themes/dark.d.ts.map +1 -0
- package/dist/themes/dark.js +16 -0
- package/dist/themes/dark.js.map +1 -0
- package/dist/themes/dracula.d.ts +4 -0
- package/dist/themes/dracula.d.ts.map +1 -0
- package/dist/themes/dracula.js +16 -0
- package/dist/themes/dracula.js.map +1 -0
- package/dist/themes/index.d.ts +32 -0
- package/dist/themes/index.d.ts.map +1 -0
- package/dist/themes/index.js +45 -0
- package/dist/themes/index.js.map +1 -0
- package/dist/themes/light.d.ts +4 -0
- package/dist/themes/light.d.ts.map +1 -0
- package/dist/themes/light.js +16 -0
- package/dist/themes/light.js.map +1 -0
- package/dist/themes/theme.d.ts +34 -0
- package/dist/themes/theme.d.ts.map +1 -0
- package/dist/themes/theme.js +2 -0
- package/dist/themes/theme.js.map +1 -0
- package/dist/ui/App.d.ts +24 -0
- package/dist/ui/App.d.ts.map +1 -0
- package/dist/ui/App.js +217 -0
- package/dist/ui/App.js.map +1 -0
- package/dist/ui/ChatInput.d.ts +21 -0
- package/dist/ui/ChatInput.d.ts.map +1 -0
- package/dist/ui/ChatInput.js +88 -0
- package/dist/ui/ChatInput.js.map +1 -0
- package/dist/ui/ChatOutput.d.ts +22 -0
- package/dist/ui/ChatOutput.d.ts.map +1 -0
- package/dist/ui/ChatOutput.js +27 -0
- package/dist/ui/ChatOutput.js.map +1 -0
- package/dist/ui/StatusBar.d.ts +22 -0
- package/dist/ui/StatusBar.d.ts.map +1 -0
- package/dist/ui/StatusBar.js +17 -0
- package/dist/ui/StatusBar.js.map +1 -0
- package/dist/ui/ToolOutput.d.ts +20 -0
- package/dist/ui/ToolOutput.d.ts.map +1 -0
- package/dist/ui/ToolOutput.js +14 -0
- package/dist/ui/ToolOutput.js.map +1 -0
- package/dist/ui/ctrl-c.d.ts +21 -0
- package/dist/ui/ctrl-c.d.ts.map +1 -0
- package/dist/ui/ctrl-c.js +27 -0
- package/dist/ui/ctrl-c.js.map +1 -0
- package/dist/ui/start.d.ts +13 -0
- package/dist/ui/start.d.ts.map +1 -0
- package/dist/ui/start.js +25 -0
- package/dist/ui/start.js.map +1 -0
- package/dist/utils/cli-version.d.ts +15 -0
- package/dist/utils/cli-version.d.ts.map +1 -0
- package/dist/utils/cli-version.js +33 -0
- package/dist/utils/cli-version.js.map +1 -0
- package/dist/utils/resolve-home.d.ts +19 -0
- package/dist/utils/resolve-home.d.ts.map +1 -0
- package/dist/utils/resolve-home.js +28 -0
- package/dist/utils/resolve-home.js.map +1 -0
- package/dist/utils/text.d.ts +50 -0
- package/dist/utils/text.d.ts.map +1 -0
- package/dist/utils/text.js +133 -0
- package/dist/utils/text.js.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learn.js","sourceRoot":"","sources":["../../src/commands/learn.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ultracode tools list [--json]` and `ultracode agents list [--json]`.
|
|
3
|
+
*
|
|
4
|
+
* Tabular listings of the registered tools and agents (name, category/type,
|
|
5
|
+
* description, permission/model). `--json` emits the raw definition arrays.
|
|
6
|
+
*/
|
|
7
|
+
import type { Command } from "commander";
|
|
8
|
+
import type { CliContext } from "../context.js";
|
|
9
|
+
/** Register the `tools` and `agents` command groups on `program`. */
|
|
10
|
+
export declare function registerListCommands(program: Command, ctx: CliContext): void;
|
|
11
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAQhD,qEAAqE;AACrE,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAwD5E"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ultracode tools list [--json]` and `ultracode agents list [--json]`.
|
|
3
|
+
*
|
|
4
|
+
* Tabular listings of the registered tools and agents (name, category/type,
|
|
5
|
+
* description, permission/model). `--json` emits the raw definition arrays.
|
|
6
|
+
*/
|
|
7
|
+
import { safeDispose } from "../context.js";
|
|
8
|
+
import { formatTable } from "../utils/text.js";
|
|
9
|
+
/** Register the `tools` and `agents` command groups on `program`. */
|
|
10
|
+
export function registerListCommands(program, ctx) {
|
|
11
|
+
const tools = program.command("tools").description("inspect the tool registry");
|
|
12
|
+
tools
|
|
13
|
+
.command("list")
|
|
14
|
+
.description("list all registered tools")
|
|
15
|
+
.option("--json", "output as JSON")
|
|
16
|
+
.action(async (opts) => {
|
|
17
|
+
const facade = await ctx.createFacade({ cwd: ctx.cwd });
|
|
18
|
+
try {
|
|
19
|
+
const defs = facade.listTools();
|
|
20
|
+
if (opts.json) {
|
|
21
|
+
ctx.stdout.write(`${JSON.stringify(defs)}\n`);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (defs.length === 0) {
|
|
25
|
+
ctx.stdout.write("(no tools registered)\n");
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
ctx.stdout.write(formatTable(["Name", "Category", "Permission", "Description"], defs.map((d) => [d.name, d.category, d.permission, d.description])));
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
await safeDispose(facade);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
const agents = program.command("agents").description("inspect the agent registry");
|
|
35
|
+
agents
|
|
36
|
+
.command("list")
|
|
37
|
+
.description("list all available agents")
|
|
38
|
+
.option("--json", "output as JSON")
|
|
39
|
+
.action(async (opts) => {
|
|
40
|
+
const facade = await ctx.createFacade({ cwd: ctx.cwd });
|
|
41
|
+
try {
|
|
42
|
+
const defs = facade.listAgents();
|
|
43
|
+
if (opts.json) {
|
|
44
|
+
ctx.stdout.write(`${JSON.stringify(defs)}\n`);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (defs.length === 0) {
|
|
48
|
+
ctx.stdout.write("(no agents available)\n");
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
ctx.stdout.write(formatTable(["Name", "Type", "Model", "Description"], defs.map((d) => [d.name, d.type, d.model ?? "(active model)", d.description])));
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
await safeDispose(facade);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ultracode run -p/--print <prompt> [--agent <name>] [--json]`
|
|
3
|
+
*
|
|
4
|
+
* Single non-interactive agent run. Text chunks are streamed to stdout as
|
|
5
|
+
* they arrive; with `--json` the final {@link AgentRunResult} is printed as a
|
|
6
|
+
* single machine-readable JSON line instead. Errors propagate to the global
|
|
7
|
+
* handler (exit code 1).
|
|
8
|
+
*/
|
|
9
|
+
import type { Command } from "commander";
|
|
10
|
+
import type { CliContext } from "../context.js";
|
|
11
|
+
/** Register the `run` command on `program`. */
|
|
12
|
+
export declare function registerRunCommand(program: Command, ctx: CliContext): void;
|
|
13
|
+
//# sourceMappingURL=run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAShD,+CAA+C;AAC/C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAgC1E"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ultracode run -p/--print <prompt> [--agent <name>] [--json]`
|
|
3
|
+
*
|
|
4
|
+
* Single non-interactive agent run. Text chunks are streamed to stdout as
|
|
5
|
+
* they arrive; with `--json` the final {@link AgentRunResult} is printed as a
|
|
6
|
+
* single machine-readable JSON line instead. Errors propagate to the global
|
|
7
|
+
* handler (exit code 1).
|
|
8
|
+
*/
|
|
9
|
+
import { safeDispose } from "../context.js";
|
|
10
|
+
/** Register the `run` command on `program`. */
|
|
11
|
+
export function registerRunCommand(program, ctx) {
|
|
12
|
+
program
|
|
13
|
+
.command("run")
|
|
14
|
+
.description("run a single prompt non-interactively and print the result")
|
|
15
|
+
.requiredOption("-p, --print <prompt>", "prompt to run")
|
|
16
|
+
.option("-a, --agent <name>", "agent to use for this run")
|
|
17
|
+
.option("--json", "print the full run result as JSON instead of streaming text")
|
|
18
|
+
.action(async (opts) => {
|
|
19
|
+
const facade = await ctx.createFacade({ cwd: ctx.cwd });
|
|
20
|
+
try {
|
|
21
|
+
if (opts.json) {
|
|
22
|
+
const result = await facade.run(opts.print, { agent: opts.agent });
|
|
23
|
+
ctx.stdout.write(`${JSON.stringify(result)}\n`);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
let streamed = false;
|
|
27
|
+
const result = await facade.run(opts.print, {
|
|
28
|
+
agent: opts.agent,
|
|
29
|
+
onChunk: (chunk) => {
|
|
30
|
+
if (chunk.type === "text" && typeof chunk.text === "string" && chunk.text !== "") {
|
|
31
|
+
streamed = true;
|
|
32
|
+
ctx.stdout.write(chunk.text);
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
// Providers that do not stream still produce a final text.
|
|
37
|
+
if (!streamed && result.text !== "")
|
|
38
|
+
ctx.stdout.write(result.text);
|
|
39
|
+
ctx.stdout.write("\n");
|
|
40
|
+
}
|
|
41
|
+
finally {
|
|
42
|
+
await safeDispose(facade);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAQ5C,+CAA+C;AAC/C,MAAM,UAAU,kBAAkB,CAAC,OAAgB,EAAE,GAAe;IAClE,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,4DAA4D,CAAC;SACzE,cAAc,CAAC,sBAAsB,EAAE,eAAe,CAAC;SACvD,MAAM,CAAC,oBAAoB,EAAE,2BAA2B,CAAC;SACzD,MAAM,CAAC,QAAQ,EAAE,6DAA6D,CAAC;SAC/E,MAAM,CAAC,KAAK,EAAE,IAAuB,EAAE,EAAE;QACxC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;gBACnE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAChD,OAAO;YACT,CAAC;YACD,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE;gBAC1C,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,OAAO,EAAE,CAAC,KAAsB,EAAE,EAAE;oBAClC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;wBACjF,QAAQ,GAAG,IAAI,CAAC;wBAChB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC/B,CAAC;gBACH,CAAC;aACF,CAAC,CAAC;YACH,2DAA2D;YAC3D,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,EAAE;gBAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACnE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;gBAAS,CAAC;YACT,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ultracode --setup` — interactive first-run wizard.
|
|
3
|
+
*
|
|
4
|
+
* Asks for provider, API key (masked input, echoed as `*`), default agent and
|
|
5
|
+
* theme. Provider/agent/theme are persisted through the facade's
|
|
6
|
+
* ConfigManager (`set` + `save("user")`); the API key is written to
|
|
7
|
+
* `~/.ultracode/.env` (keys never belong in `config.toml`, see
|
|
8
|
+
* docs/GETTING-STARTED/configuration.md). The key is only ever echoed masked.
|
|
9
|
+
*/
|
|
10
|
+
import type { CliContext } from "../context.js";
|
|
11
|
+
/** Providers offered by the wizard. */
|
|
12
|
+
export declare const SETUP_PROVIDERS: readonly ["mistral", "anthropic", "openai", "local"];
|
|
13
|
+
/** Interaction surface of the wizard — injectable for tests. */
|
|
14
|
+
export interface SetupIO {
|
|
15
|
+
/** Ask a question, echoing the user's input. */
|
|
16
|
+
ask(question: string): Promise<string>;
|
|
17
|
+
/** Ask a question with hidden input (echoed as `*`). */
|
|
18
|
+
askMasked(question: string): Promise<string>;
|
|
19
|
+
/** Write informational output. */
|
|
20
|
+
write(s: string): void;
|
|
21
|
+
}
|
|
22
|
+
/** Default {@link SetupIO} backed by the context's stdin/stdout. */
|
|
23
|
+
export declare function createTerminalIO(ctx: CliContext): SetupIO;
|
|
24
|
+
/**
|
|
25
|
+
* Persist an API key into `~/.ultracode/.env` (created with mode 0600 where
|
|
26
|
+
* supported). An existing entry for the same variable is replaced; other
|
|
27
|
+
* lines — including `\r\n`-terminated ones — are preserved.
|
|
28
|
+
*
|
|
29
|
+
* @returns the absolute path of the env file.
|
|
30
|
+
*/
|
|
31
|
+
export declare function writeApiKey(ctx: CliContext, provider: string, apiKey: string): Promise<string>;
|
|
32
|
+
/**
|
|
33
|
+
* Run the interactive setup wizard.
|
|
34
|
+
*
|
|
35
|
+
* @param ctx - CLI context.
|
|
36
|
+
* @param io - interaction surface; defaults to a raw-mode terminal reader.
|
|
37
|
+
* @throws {ConfigError} when an unknown provider is chosen.
|
|
38
|
+
*/
|
|
39
|
+
export declare function runSetup(ctx: CliContext, io?: SetupIO): Promise<void>;
|
|
40
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAMhD,uCAAuC;AACvC,eAAO,MAAM,eAAe,sDAAuD,CAAC;AAEpF,gEAAgE;AAChE,MAAM,WAAW,OAAO;IACtB,gDAAgD;IAChD,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,wDAAwD;IACxD,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7C,kCAAkC;IAClC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AA+CD,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAMzD;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,UAAU,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAcjB;AAED;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,GAAE,OAA+B,GAAG,OAAO,CAAC,IAAI,CAAC,CAiDlG"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ultracode --setup` — interactive first-run wizard.
|
|
3
|
+
*
|
|
4
|
+
* Asks for provider, API key (masked input, echoed as `*`), default agent and
|
|
5
|
+
* theme. Provider/agent/theme are persisted through the facade's
|
|
6
|
+
* ConfigManager (`set` + `save("user")`); the API key is written to
|
|
7
|
+
* `~/.ultracode/.env` (keys never belong in `config.toml`, see
|
|
8
|
+
* docs/GETTING-STARTED/configuration.md). The key is only ever echoed masked.
|
|
9
|
+
*/
|
|
10
|
+
import path from "node:path";
|
|
11
|
+
import { promises as fs } from "node:fs";
|
|
12
|
+
import { ConfigError, USER_ENV_FILE } from "ultracode-shared";
|
|
13
|
+
import { safeDispose } from "../context.js";
|
|
14
|
+
import { ThemeManager } from "../themes/index.js";
|
|
15
|
+
import { resolveHome } from "../utils/resolve-home.js";
|
|
16
|
+
import { maskSecret } from "../utils/text.js";
|
|
17
|
+
/** Providers offered by the wizard. */
|
|
18
|
+
export const SETUP_PROVIDERS = ["mistral", "anthropic", "openai", "local"];
|
|
19
|
+
/**
|
|
20
|
+
* Read one line from `ctx.stdin` in raw mode.
|
|
21
|
+
* Handles Enter (`\r`/`\n`), backspace (`\b`/DEL) and Ctrl+C (returns "").
|
|
22
|
+
* With `mask`, every typed character is echoed as `*`.
|
|
23
|
+
*/
|
|
24
|
+
function readLine(ctx, prompt, mask) {
|
|
25
|
+
ctx.stdout.write(prompt);
|
|
26
|
+
const stdin = ctx.stdin;
|
|
27
|
+
return new Promise((resolve) => {
|
|
28
|
+
stdin.setRawMode?.(true);
|
|
29
|
+
stdin.resume?.();
|
|
30
|
+
let buf = "";
|
|
31
|
+
const finish = (value) => {
|
|
32
|
+
stdin.removeListener("data", onData);
|
|
33
|
+
stdin.setRawMode?.(false);
|
|
34
|
+
stdin.pause?.();
|
|
35
|
+
ctx.stdout.write("\n");
|
|
36
|
+
resolve(value);
|
|
37
|
+
};
|
|
38
|
+
const onData = (chunk) => {
|
|
39
|
+
const s = typeof chunk === "string" ? chunk : chunk.toString("utf8");
|
|
40
|
+
for (const ch of s) {
|
|
41
|
+
if (ch === "\u0003") {
|
|
42
|
+
finish("");
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (ch === "\r" || ch === "\n") {
|
|
46
|
+
finish(buf);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (ch === "\u007F" || ch === "\b") {
|
|
50
|
+
if (buf.length > 0) {
|
|
51
|
+
buf = Array.from(buf).slice(0, -1).join("");
|
|
52
|
+
ctx.stdout.write("\b \b");
|
|
53
|
+
}
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
buf += ch;
|
|
57
|
+
ctx.stdout.write(mask ? "*" : ch);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
stdin.on("data", onData);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/** Default {@link SetupIO} backed by the context's stdin/stdout. */
|
|
64
|
+
export function createTerminalIO(ctx) {
|
|
65
|
+
return {
|
|
66
|
+
ask: (q) => readLine(ctx, q, false),
|
|
67
|
+
askMasked: (q) => readLine(ctx, q, true),
|
|
68
|
+
write: (s) => ctx.stdout.write(s),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Persist an API key into `~/.ultracode/.env` (created with mode 0600 where
|
|
73
|
+
* supported). An existing entry for the same variable is replaced; other
|
|
74
|
+
* lines — including `\r\n`-terminated ones — are preserved.
|
|
75
|
+
*
|
|
76
|
+
* @returns the absolute path of the env file.
|
|
77
|
+
*/
|
|
78
|
+
export async function writeApiKey(ctx, provider, apiKey) {
|
|
79
|
+
const envPath = resolveHome(USER_ENV_FILE, ctx.homedir);
|
|
80
|
+
const varName = `${provider.toUpperCase()}_API_KEY`;
|
|
81
|
+
await fs.mkdir(path.dirname(envPath), { recursive: true });
|
|
82
|
+
let lines = [];
|
|
83
|
+
try {
|
|
84
|
+
const existing = await fs.readFile(envPath, "utf8");
|
|
85
|
+
lines = existing.split(/\r?\n/).filter((l) => l.trim() !== "" && !l.startsWith(`${varName}=`));
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// no existing env file — start fresh
|
|
89
|
+
}
|
|
90
|
+
lines.push(`${varName}=${apiKey}`);
|
|
91
|
+
await fs.writeFile(envPath, `${lines.join("\n")}\n`, { encoding: "utf8", mode: 0o600 });
|
|
92
|
+
return envPath;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Run the interactive setup wizard.
|
|
96
|
+
*
|
|
97
|
+
* @param ctx - CLI context.
|
|
98
|
+
* @param io - interaction surface; defaults to a raw-mode terminal reader.
|
|
99
|
+
* @throws {ConfigError} when an unknown provider is chosen.
|
|
100
|
+
*/
|
|
101
|
+
export async function runSetup(ctx, io = createTerminalIO(ctx)) {
|
|
102
|
+
io.write("UltraCode Setup\n\n");
|
|
103
|
+
const provAnswer = (await io.ask(`Provider (${SETUP_PROVIDERS.join("/")}) [mistral]: `))
|
|
104
|
+
.trim()
|
|
105
|
+
.toLowerCase();
|
|
106
|
+
const provider = provAnswer === "" ? "mistral" : provAnswer;
|
|
107
|
+
if (!SETUP_PROVIDERS.includes(provider)) {
|
|
108
|
+
throw new ConfigError(`Unknown provider "${provAnswer}". Choose one of: ${SETUP_PROVIDERS.join(", ")}`);
|
|
109
|
+
}
|
|
110
|
+
let apiKey = "";
|
|
111
|
+
if (provider !== "local") {
|
|
112
|
+
apiKey = (await io.askMasked(`API key for ${provider} (input hidden, Enter to skip): `)).trim();
|
|
113
|
+
}
|
|
114
|
+
const agent = (await io.ask("Default agent [default]: ")).trim() || "default";
|
|
115
|
+
const themes = new ThemeManager();
|
|
116
|
+
const themeAnswer = (await io.ask(`Theme (${themes.list().join("/")}) [dark]: `)).trim();
|
|
117
|
+
const theme = themes.has(themeAnswer) ? themes.get(themeAnswer).name : "dark";
|
|
118
|
+
if (themeAnswer !== "" && !themes.has(themeAnswer)) {
|
|
119
|
+
io.write(`! Unknown theme "${themeAnswer}" — falling back to "dark"\n`);
|
|
120
|
+
}
|
|
121
|
+
const facade = await ctx.createFacade({ cwd: ctx.cwd });
|
|
122
|
+
try {
|
|
123
|
+
const manager = facade.configManager;
|
|
124
|
+
if (manager && typeof manager.set === "function" && typeof manager.save === "function") {
|
|
125
|
+
manager.set("core.activeProvider", provider);
|
|
126
|
+
manager.set("providers.default", provider);
|
|
127
|
+
manager.set("core.defaultAgent", agent);
|
|
128
|
+
manager.set("agents.default", agent);
|
|
129
|
+
manager.set("ui.theme", theme);
|
|
130
|
+
await manager.save("user");
|
|
131
|
+
io.write("✓ configuration saved (user layer)\n");
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
io.write("! ConfigManager not available — provider/agent/theme were NOT persisted\n");
|
|
135
|
+
}
|
|
136
|
+
if (apiKey !== "") {
|
|
137
|
+
const envPath = await writeApiKey(ctx, provider, apiKey);
|
|
138
|
+
io.write(`✓ API key for ${provider} stored in ${envPath} (${maskSecret(apiKey)})\n`);
|
|
139
|
+
}
|
|
140
|
+
io.write(`\nDone. Provider: ${provider}, agent: ${agent}, theme: ${theme}\n`);
|
|
141
|
+
}
|
|
142
|
+
finally {
|
|
143
|
+
await safeDispose(facade);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ultracode skills list|show <name>|create|test|upgrade`
|
|
3
|
+
*
|
|
4
|
+
* Skill authoring commands backed by the facade's `authoring` sub-API
|
|
5
|
+
* (Module B). `create`/`upgrade` build an {@link AuthoringProposal} from
|
|
6
|
+
* knowledge material (a JSON file or inline `--topic`/`--catalog` flags),
|
|
7
|
+
* `test` validates a proposal/skill, and `persist` is gated behind `--yes`
|
|
8
|
+
* (no implicit writes).
|
|
9
|
+
*
|
|
10
|
+
* Every subcommand supports `--json`.
|
|
11
|
+
*/
|
|
12
|
+
import type { Command } from "commander";
|
|
13
|
+
import type { CliContext } from "../context.js";
|
|
14
|
+
/** Register the `skills` command group on `program`. */
|
|
15
|
+
export declare function registerSkillsCommands(program: Command, ctx: CliContext): void;
|
|
16
|
+
//# sourceMappingURL=skills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/commands/skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAgFhD,wDAAwD;AACxD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CA2E9E"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ultracode skills list|show <name>|create|test|upgrade`
|
|
3
|
+
*
|
|
4
|
+
* Skill authoring commands backed by the facade's `authoring` sub-API
|
|
5
|
+
* (Module B). `create`/`upgrade` build an {@link AuthoringProposal} from
|
|
6
|
+
* knowledge material (a JSON file or inline `--topic`/`--catalog` flags),
|
|
7
|
+
* `test` validates a proposal/skill, and `persist` is gated behind `--yes`
|
|
8
|
+
* (no implicit writes).
|
|
9
|
+
*
|
|
10
|
+
* Every subcommand supports `--json`.
|
|
11
|
+
*/
|
|
12
|
+
import path from "node:path";
|
|
13
|
+
import process from "node:process";
|
|
14
|
+
import { promises as fs } from "node:fs";
|
|
15
|
+
import { ValidationError } from "ultracode-shared";
|
|
16
|
+
import { authoringOf, withExtFacade } from "./ext-helpers.js";
|
|
17
|
+
import { formatBlock, formatSkillList, formatTestResult } from "./ext-format.js";
|
|
18
|
+
/** Build {@link KnowledgeMaterial} from a JSON file or inline flags. */
|
|
19
|
+
async function loadMaterial(ctx, opts) {
|
|
20
|
+
if (opts.file !== undefined) {
|
|
21
|
+
const target = path.resolve(ctx.cwd, opts.file);
|
|
22
|
+
let raw;
|
|
23
|
+
try {
|
|
24
|
+
raw = await fs.readFile(target, "utf8");
|
|
25
|
+
}
|
|
26
|
+
catch (cause) {
|
|
27
|
+
throw new ValidationError(`Cannot read material file: ${target}`, { cause });
|
|
28
|
+
}
|
|
29
|
+
let parsed;
|
|
30
|
+
try {
|
|
31
|
+
parsed = JSON.parse(raw.replace(/^/, ""));
|
|
32
|
+
}
|
|
33
|
+
catch (cause) {
|
|
34
|
+
throw new ValidationError(`Invalid JSON in material file: ${target}`, { cause });
|
|
35
|
+
}
|
|
36
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
37
|
+
throw new ValidationError(`Material file must contain a JSON object: ${target}`);
|
|
38
|
+
}
|
|
39
|
+
return parsed;
|
|
40
|
+
}
|
|
41
|
+
if (opts.topic === undefined || opts.catalog === undefined) {
|
|
42
|
+
throw new ValidationError("Provide --file <material.json>, or both --topic and --catalog to create skill material inline.");
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
catalog: opts.catalog,
|
|
46
|
+
topic: opts.topic,
|
|
47
|
+
summary: opts.summary ?? "",
|
|
48
|
+
facts: [],
|
|
49
|
+
codeSnippets: [],
|
|
50
|
+
sources: [],
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/** Print a proposal in either JSON or human form. */
|
|
54
|
+
function writeProposal(ctx, proposal, json) {
|
|
55
|
+
if (json) {
|
|
56
|
+
ctx.stdout.write(`${JSON.stringify(proposal)}\n`);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
ctx.stdout.write(`Proposal (${proposal.kind}): ${proposal.name}\n`);
|
|
60
|
+
ctx.stdout.write(formatBlock("Rationale", proposal.rationale));
|
|
61
|
+
if (proposal.diffFromExisting !== undefined) {
|
|
62
|
+
ctx.stdout.write(formatBlock("Diff", proposal.diffFromExisting));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
async function createOrUpgrade(ctx, opts) {
|
|
66
|
+
await withExtFacade(ctx, async (facade) => {
|
|
67
|
+
const material = await loadMaterial(ctx, opts);
|
|
68
|
+
const proposal = await authoringOf(facade).createSkill(material);
|
|
69
|
+
writeProposal(ctx, proposal, opts.json === true);
|
|
70
|
+
if (opts.yes === true) {
|
|
71
|
+
await authoringOf(facade).persist(proposal, { approved: true });
|
|
72
|
+
if (opts.json !== true)
|
|
73
|
+
ctx.stdout.write(`✓ skill "${proposal.name}" persisted\n`);
|
|
74
|
+
}
|
|
75
|
+
else if (opts.json !== true) {
|
|
76
|
+
ctx.stdout.write("Run again with --yes to persist this skill.\n");
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
/** Register the `skills` command group on `program`. */
|
|
81
|
+
export function registerSkillsCommands(program, ctx) {
|
|
82
|
+
const skills = program.command("skills").description("author and inspect skills");
|
|
83
|
+
skills
|
|
84
|
+
.command("list")
|
|
85
|
+
.description("list authored skills")
|
|
86
|
+
.argument("[catalog]", "restrict to a catalog")
|
|
87
|
+
.option("--json", "output as JSON")
|
|
88
|
+
.action(async (catalog, opts) => withExtFacade(ctx, async (facade) => {
|
|
89
|
+
const list = await authoringOf(facade).skills.list(catalog);
|
|
90
|
+
ctx.stdout.write(opts.json ? `${JSON.stringify(list)}\n` : formatSkillList(list));
|
|
91
|
+
}));
|
|
92
|
+
skills
|
|
93
|
+
.command("show")
|
|
94
|
+
.description("print a single skill (frontmatter + body)")
|
|
95
|
+
.argument("<name>", "skill name")
|
|
96
|
+
.option("--json", "output as JSON")
|
|
97
|
+
.action(async (name, opts) => withExtFacade(ctx, async (facade) => {
|
|
98
|
+
const skill = await authoringOf(facade).skills.get(name);
|
|
99
|
+
if (skill === null)
|
|
100
|
+
throw new ValidationError(`Unknown skill: "${name}"`);
|
|
101
|
+
if (opts.json) {
|
|
102
|
+
ctx.stdout.write(`${JSON.stringify(skill)}\n`);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
ctx.stdout.write(`# ${skill.name} v${skill.version} [${skill.status}]\n`);
|
|
106
|
+
ctx.stdout.write(`catalog: ${skill.catalog}\n`);
|
|
107
|
+
ctx.stdout.write(`triggers: ${skill.triggers.join(", ")}\n`);
|
|
108
|
+
ctx.stdout.write(`score: ${authoringOf(facade).scoreSkill(skill)}\n\n`);
|
|
109
|
+
ctx.stdout.write(`${skill.body}\n`);
|
|
110
|
+
}));
|
|
111
|
+
skills
|
|
112
|
+
.command("create")
|
|
113
|
+
.description("create a new skill from knowledge material (proposal only unless --yes)")
|
|
114
|
+
.option("--file <path>", "knowledge material JSON file")
|
|
115
|
+
.option("--topic <topic>", "skill topic (inline material)")
|
|
116
|
+
.option("--catalog <catalog>", "skill catalog (inline material)")
|
|
117
|
+
.option("--summary <text>", "skill summary (inline material)")
|
|
118
|
+
.option("--yes", "persist the proposal instead of only printing it")
|
|
119
|
+
.option("--json", "output as JSON")
|
|
120
|
+
.action(async (opts) => createOrUpgrade(ctx, opts));
|
|
121
|
+
skills
|
|
122
|
+
.command("upgrade")
|
|
123
|
+
.description("upgrade an existing skill from new material (proposal only unless --yes)")
|
|
124
|
+
.option("--file <path>", "knowledge material JSON file")
|
|
125
|
+
.option("--topic <topic>", "skill topic (inline material)")
|
|
126
|
+
.option("--catalog <catalog>", "skill catalog (inline material)")
|
|
127
|
+
.option("--summary <text>", "skill summary (inline material)")
|
|
128
|
+
.option("--yes", "persist the proposal instead of only printing it")
|
|
129
|
+
.option("--json", "output as JSON")
|
|
130
|
+
.action(async (opts) => createOrUpgrade(ctx, opts));
|
|
131
|
+
skills
|
|
132
|
+
.command("test")
|
|
133
|
+
.description("test a skill proposal built from material, without persisting")
|
|
134
|
+
.option("--file <path>", "knowledge material JSON file")
|
|
135
|
+
.option("--topic <topic>", "skill topic (inline material)")
|
|
136
|
+
.option("--catalog <catalog>", "skill catalog (inline material)")
|
|
137
|
+
.option("--summary <text>", "skill summary (inline material)")
|
|
138
|
+
.option("--json", "output as JSON")
|
|
139
|
+
.action(async (opts) => withExtFacade(ctx, async (facade) => {
|
|
140
|
+
const material = await loadMaterial(ctx, opts);
|
|
141
|
+
const proposal = await authoringOf(facade).createSkill(material);
|
|
142
|
+
const result = await authoringOf(facade).test(proposal);
|
|
143
|
+
ctx.stdout.write(opts.json ? `${JSON.stringify(result)}\n` : formatTestResult(result));
|
|
144
|
+
if (!result.passed)
|
|
145
|
+
process.exitCode = 1;
|
|
146
|
+
}));
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/commands/skills.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Versioning commands:
|
|
3
|
+
* - `ultracode version analyze [range]` / `version suggest [range]`
|
|
4
|
+
* - `ultracode release plan [version]`
|
|
5
|
+
* - `ultracode quality` (exits 1 when the quality gates fail — CI-friendly)
|
|
6
|
+
*
|
|
7
|
+
* All subcommands support `--json` for machine-readable output.
|
|
8
|
+
*/
|
|
9
|
+
import type { Command } from "commander";
|
|
10
|
+
import type { CliContext } from "../context.js";
|
|
11
|
+
/** Register `version`, `release` and `quality` commands on `program`. */
|
|
12
|
+
export declare function registerVersioningCommands(program: Command, ctx: CliContext): void;
|
|
13
|
+
//# sourceMappingURL=versioning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versioning.d.ts","sourceRoot":"","sources":["../../src/commands/versioning.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,eAAe,CAAC;AAyBjE,yEAAyE;AACzE,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAoDlF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Versioning commands:
|
|
3
|
+
* - `ultracode version analyze [range]` / `version suggest [range]`
|
|
4
|
+
* - `ultracode release plan [version]`
|
|
5
|
+
* - `ultracode quality` (exits 1 when the quality gates fail — CI-friendly)
|
|
6
|
+
*
|
|
7
|
+
* All subcommands support `--json` for machine-readable output.
|
|
8
|
+
*/
|
|
9
|
+
import process from "node:process";
|
|
10
|
+
import { safeDispose } from "../context.js";
|
|
11
|
+
import { formatChangeAnalysis, formatQualityReport, formatReleasePlan, formatVersionSuggestion, } from "../format.js";
|
|
12
|
+
async function withFacade(ctx, fn) {
|
|
13
|
+
const facade = await ctx.createFacade({ cwd: ctx.cwd });
|
|
14
|
+
try {
|
|
15
|
+
return await fn(facade);
|
|
16
|
+
}
|
|
17
|
+
finally {
|
|
18
|
+
await safeDispose(facade);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/** Register `version`, `release` and `quality` commands on `program`. */
|
|
22
|
+
export function registerVersioningCommands(program, ctx) {
|
|
23
|
+
const version = program.command("version").description("AI versioning: change analysis and version suggestions");
|
|
24
|
+
version
|
|
25
|
+
.command("analyze")
|
|
26
|
+
.description("analyze the changes in the working tree / commit range")
|
|
27
|
+
.argument("[range]", 'git range to analyze, e.g. "v1.2.0..HEAD"')
|
|
28
|
+
.option("--json", "output as JSON")
|
|
29
|
+
.action(async (range, opts) => withFacade(ctx, async (facade) => {
|
|
30
|
+
const analysis = await facade.versioning.analyze(range);
|
|
31
|
+
ctx.stdout.write(opts.json ? `${JSON.stringify(analysis)}\n` : formatChangeAnalysis(analysis));
|
|
32
|
+
}));
|
|
33
|
+
version
|
|
34
|
+
.command("suggest")
|
|
35
|
+
.description("suggest the next version based on the analyzed changes")
|
|
36
|
+
.argument("[range]", 'git range to analyze, e.g. "v1.2.0..HEAD"')
|
|
37
|
+
.option("--json", "output as JSON")
|
|
38
|
+
.action(async (range, opts) => withFacade(ctx, async (facade) => {
|
|
39
|
+
const suggestion = await facade.versioning.suggest(range);
|
|
40
|
+
ctx.stdout.write(opts.json ? `${JSON.stringify(suggestion)}\n` : formatVersionSuggestion(suggestion));
|
|
41
|
+
}));
|
|
42
|
+
const release = program.command("release").description("release planning");
|
|
43
|
+
release
|
|
44
|
+
.command("plan")
|
|
45
|
+
.description("draft a release plan for the given (or suggested) version")
|
|
46
|
+
.argument("[version]", "target version; suggested automatically when omitted")
|
|
47
|
+
.option("--json", "output as JSON")
|
|
48
|
+
.action(async (target, opts) => withFacade(ctx, async (facade) => {
|
|
49
|
+
const plan = await facade.versioning.plan(target);
|
|
50
|
+
ctx.stdout.write(opts.json ? `${JSON.stringify(plan)}\n` : formatReleasePlan(plan));
|
|
51
|
+
}));
|
|
52
|
+
program
|
|
53
|
+
.command("quality")
|
|
54
|
+
.description("run the release quality gates (exit code 1 when gates fail)")
|
|
55
|
+
.option("--json", "output as JSON")
|
|
56
|
+
.action(async (opts) => withFacade(ctx, async (facade) => {
|
|
57
|
+
const report = await facade.versioning.quality();
|
|
58
|
+
ctx.stdout.write(opts.json ? `${JSON.stringify(report)}\n` : formatQualityReport(report));
|
|
59
|
+
if (!report.passed)
|
|
60
|
+
process.exitCode = 1;
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=versioning.js.map
|