@gencode/cli 0.0.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.
Files changed (61) hide show
  1. package/dist/auth.d.ts +4 -0
  2. package/dist/auth.d.ts.map +1 -0
  3. package/dist/auth.js +9 -0
  4. package/dist/auth.js.map +1 -0
  5. package/dist/bin.d.ts +6 -0
  6. package/dist/bin.d.ts.map +1 -0
  7. package/dist/bin.js +12 -0
  8. package/dist/bin.js.map +1 -0
  9. package/dist/commands/agents.d.ts +10 -0
  10. package/dist/commands/agents.d.ts.map +1 -0
  11. package/dist/commands/agents.js +319 -0
  12. package/dist/commands/agents.js.map +1 -0
  13. package/dist/commands/bootstrap.d.ts +12 -0
  14. package/dist/commands/bootstrap.d.ts.map +1 -0
  15. package/dist/commands/bootstrap.js +25 -0
  16. package/dist/commands/bootstrap.js.map +1 -0
  17. package/dist/commands/commands.d.ts +12 -0
  18. package/dist/commands/commands.d.ts.map +1 -0
  19. package/dist/commands/commands.js +37 -0
  20. package/dist/commands/commands.js.map +1 -0
  21. package/dist/commands/memory.d.ts +14 -0
  22. package/dist/commands/memory.d.ts.map +1 -0
  23. package/dist/commands/memory.js +173 -0
  24. package/dist/commands/memory.js.map +1 -0
  25. package/dist/commands/plugins.d.ts +3 -0
  26. package/dist/commands/plugins.d.ts.map +1 -0
  27. package/dist/commands/plugins.js +228 -0
  28. package/dist/commands/plugins.js.map +1 -0
  29. package/dist/commands/run.d.ts +26 -0
  30. package/dist/commands/run.d.ts.map +1 -0
  31. package/dist/commands/run.js +163 -0
  32. package/dist/commands/run.js.map +1 -0
  33. package/dist/commands/sessions.d.ts +14 -0
  34. package/dist/commands/sessions.d.ts.map +1 -0
  35. package/dist/commands/sessions.js +31 -0
  36. package/dist/commands/sessions.js.map +1 -0
  37. package/dist/config.d.ts +21 -0
  38. package/dist/config.d.ts.map +1 -0
  39. package/dist/config.js +33 -0
  40. package/dist/config.js.map +1 -0
  41. package/dist/output.d.ts +20 -0
  42. package/dist/output.d.ts.map +1 -0
  43. package/dist/output.js +90 -0
  44. package/dist/output.js.map +1 -0
  45. package/dist/pkg-path.d.ts +6 -0
  46. package/dist/pkg-path.d.ts.map +1 -0
  47. package/dist/pkg-path.js +8 -0
  48. package/dist/pkg-path.js.map +1 -0
  49. package/dist/plugins-config.d.ts +5 -0
  50. package/dist/plugins-config.d.ts.map +1 -0
  51. package/dist/plugins-config.js +30 -0
  52. package/dist/plugins-config.js.map +1 -0
  53. package/dist/program.d.ts +11 -0
  54. package/dist/program.d.ts.map +1 -0
  55. package/dist/program.js +37 -0
  56. package/dist/program.js.map +1 -0
  57. package/dist/utils/message-input.d.ts +72 -0
  58. package/dist/utils/message-input.d.ts.map +1 -0
  59. package/dist/utils/message-input.js +117 -0
  60. package/dist/utils/message-input.js.map +1 -0
  61. package/package.json +37 -0
@@ -0,0 +1,14 @@
1
+ /**
2
+ * `aimax sessions` command — lists sessions for a data directory.
3
+ */
4
+ import type { Command } from "commander";
5
+ import { type Channel } from "@gencode/agents";
6
+ import { type OutputFormat } from "../output.js";
7
+ export type SessionsOptions = {
8
+ dataDir: string;
9
+ channel?: Channel;
10
+ output?: OutputFormat;
11
+ };
12
+ /** Registers the `sessions` subcommand on the given Commander program */
13
+ export declare function registerSessionsCommand(program: Command): void;
14
+ //# sourceMappingURL=sessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/commands/sessions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAwB,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAgC,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAE/E,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,CAAC;AAEF,yEAAyE;AACzE,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwB9D"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * `aimax sessions` command — lists sessions for a data directory.
3
+ */
4
+ import { listSessionSummaries } from "@gencode/agents";
5
+ import { printSessionList, writeError } from "../output.js";
6
+ /** Registers the `sessions` subcommand on the given Commander program */
7
+ export function registerSessionsCommand(program) {
8
+ program
9
+ .command("sessions")
10
+ .description("List sessions for a data directory")
11
+ .requiredOption("-d, --data-dir <path>", "Data directory path")
12
+ .option("-c, --channel <channel>", "Filter by channel type: H5 | WEB | KLPA | CRON")
13
+ .option("--output <format>", "Output format: text (default) or json", "text")
14
+ .action(async (options) => {
15
+ const format = options.output === "json" ? "json" : "text";
16
+ // Validate channel if provided
17
+ if (options.channel && options.channel !== "H5" && options.channel !== "WEB" && options.channel !== "KLPA" && options.channel !== "CRON") {
18
+ writeError(`Invalid channel: ${options.channel}. Must be 'H5', 'WEB', 'KLPA', or 'CRON'`);
19
+ process.exit(1);
20
+ }
21
+ try {
22
+ const sessions = await listSessionSummaries(options.dataDir, options.channel);
23
+ printSessionList(sessions, format);
24
+ }
25
+ catch (err) {
26
+ writeError(`Error listing sessions: ${err.message}`);
27
+ process.exit(1);
28
+ }
29
+ });
30
+ }
31
+ //# sourceMappingURL=sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/commands/sessions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,oBAAoB,EAAgB,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAqB,MAAM,cAAc,CAAC;AAQ/E,yEAAyE;AACzE,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,oCAAoC,CAAC;SACjD,cAAc,CAAC,uBAAuB,EAAE,qBAAqB,CAAC;SAC9D,MAAM,CAAC,yBAAyB,EAAE,gDAAgD,CAAC;SACnF,MAAM,CAAC,mBAAmB,EAAE,uCAAuC,EAAE,MAAM,CAAC;SAC5E,MAAM,CAAC,KAAK,EAAE,OAAwB,EAAE,EAAE;QACzC,MAAM,MAAM,GAAiB,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QAEzE,+BAA+B;QAC/B,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK,IAAI,OAAO,CAAC,OAAO,KAAK,MAAM,IAAI,OAAO,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YACzI,UAAU,CAAC,oBAAoB,OAAO,CAAC,OAAO,0CAA0C,CAAC,CAAC;YAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAC9E,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,UAAU,CAAC,2BAA4B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,21 @@
1
+ export type LlmConfig = {
2
+ baseUrl: string;
3
+ apiKey: string;
4
+ model: string;
5
+ contextWindow?: number;
6
+ };
7
+ /** Resolved CLI options that may override env vars */
8
+ export type LlmCliOptions = {
9
+ baseUrl?: string;
10
+ apiKey?: string;
11
+ authToken?: string;
12
+ model?: string;
13
+ contextWindow?: number;
14
+ };
15
+ /**
16
+ * Resolves LLM configuration from CLI options and environment variables.
17
+ * CLI options take precedence over environment variables.
18
+ * Throws if required fields cannot be resolved.
19
+ */
20
+ export declare function resolveLlmConfig(options?: LlmCliOptions): LlmConfig;
21
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,sDAAsD;AACtD,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,aAAkB,GAAG,SAAS,CAqBvE"}
package/dist/config.js ADDED
@@ -0,0 +1,33 @@
1
+ /**
2
+ * LLM configuration resolution for @gencode/cli.
3
+ *
4
+ * Priority: auth token > CLI flags > environment variables > error
5
+ */
6
+ import { generateApiKey } from "./auth.js";
7
+ /**
8
+ * Resolves LLM configuration from CLI options and environment variables.
9
+ * CLI options take precedence over environment variables.
10
+ * Throws if required fields cannot be resolved.
11
+ */
12
+ export function resolveLlmConfig(options = {}) {
13
+ const baseUrl = options.baseUrl ?? process.env["AIMAX_BASE_URL"];
14
+ const envAuthToken = process.env["AIMAX_AUTH_TOKEN"];
15
+ const apiKey = options.authToken
16
+ ? generateApiKey(options.authToken)
17
+ : (envAuthToken ? generateApiKey(envAuthToken) : (options.apiKey ?? process.env["AIMAX_API_KEY"]));
18
+ const model = options.model ?? process.env["AIMAX_MODEL"];
19
+ const missing = [];
20
+ if (!baseUrl)
21
+ missing.push("--base-url / AIMAX_BASE_URL");
22
+ if (!apiKey)
23
+ missing.push("--api-key / AIMAX_API_KEY");
24
+ if (!model)
25
+ missing.push("--model / AIMAX_MODEL");
26
+ if (missing.length > 0) {
27
+ throw new Error(`Missing required LLM configuration: ${missing.join(", ")}`);
28
+ }
29
+ const contextWindow = options.contextWindow
30
+ ?? (process.env["AIMAX_CONTEXT_WINDOW"] ? Number(process.env["AIMAX_CONTEXT_WINDOW"]) : undefined);
31
+ return { baseUrl: baseUrl, apiKey: apiKey, model: model, contextWindow };
32
+ }
33
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAkB3C;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAyB,EAAE;IAC1D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACjE,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS;QAC9B,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC;QACnC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACrG,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAE1D,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO;QAAE,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC1D,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACvD,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAElD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,uCAAuC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa;WACtC,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAErG,OAAO,EAAE,OAAO,EAAE,OAAQ,EAAE,MAAM,EAAE,MAAO,EAAE,KAAK,EAAE,KAAM,EAAE,aAAa,EAAE,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Output formatting utilities for @gencode/cli.
3
+ */
4
+ import type { AgentRunResult, AgentProgressEvent, SessionSummary, BootstrapMountResult } from "@gencode/agents";
5
+ export type OutputFormat = "text" | "json";
6
+ /** Writes a string to stdout without a trailing newline */
7
+ export declare function write(text: string): void;
8
+ /** Writes a line to stdout */
9
+ export declare function writeLine(text: string): void;
10
+ /** Writes a line to stderr */
11
+ export declare function writeError(text: string): void;
12
+ /** Formats and prints a progress event during streaming execution */
13
+ export declare function printProgressEvent(event: AgentProgressEvent): void;
14
+ /** Prints the final run result to stdout */
15
+ export declare function printRunResult(result: AgentRunResult, format: OutputFormat): void;
16
+ /** Prints the session list to stdout */
17
+ export declare function printSessionList(sessions: SessionSummary[], format: OutputFormat): void;
18
+ /** Prints bootstrap result to stdout */
19
+ export declare function printBootstrapResult(result: BootstrapMountResult, format: OutputFormat): void;
20
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC;AAE3C,2DAA2D;AAC3D,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAExC;AAED,8BAA8B;AAC9B,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE5C;AAED,8BAA8B;AAC9B,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,qEAAqE;AACrE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CA8BlE;AAED,4CAA4C;AAC5C,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAYjF;AAED,wCAAwC;AACxC,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAavF;AAED,wCAAwC;AACxC,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAY7F"}
package/dist/output.js ADDED
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Output formatting utilities for @gencode/cli.
3
+ */
4
+ /** Writes a string to stdout without a trailing newline */
5
+ export function write(text) {
6
+ process.stdout.write(text);
7
+ }
8
+ /** Writes a line to stdout */
9
+ export function writeLine(text) {
10
+ process.stdout.write(text + "\n");
11
+ }
12
+ /** Writes a line to stderr */
13
+ export function writeError(text) {
14
+ process.stderr.write(text + "\n");
15
+ }
16
+ /** Formats and prints a progress event during streaming execution */
17
+ export function printProgressEvent(event) {
18
+ switch (event.type) {
19
+ case "text":
20
+ write(event.text);
21
+ break;
22
+ case "bootstrap":
23
+ writeLine(`\n[bootstrap:${event.phase}] ${event.dataDir}`);
24
+ break;
25
+ case "tool_start":
26
+ writeLine(`\n[tool:${event.name}] ${JSON.stringify(event.input)}`);
27
+ break;
28
+ case "tool_end":
29
+ writeLine(`[tool:${event.name}] ${event.isError ? "ERROR" : "OK"} ${event.output.slice(0, 200)}`);
30
+ break;
31
+ case "compaction":
32
+ writeLine(`\n[compaction] ${event.reason}`);
33
+ break;
34
+ case "error":
35
+ writeError(`\n[error] ${event.message}`);
36
+ break;
37
+ case "subagent_spawn": {
38
+ const label = event.label ? ` "${event.label}"` : "";
39
+ writeLine(`\n[subagent:spawn]${label} ${event.task}`);
40
+ break;
41
+ }
42
+ case "subagent_complete": {
43
+ writeLine(`[subagent:${event.status}] ${event.task}`);
44
+ break;
45
+ }
46
+ }
47
+ }
48
+ /** Prints the final run result to stdout */
49
+ export function printRunResult(result, format) {
50
+ if (format === "json") {
51
+ writeLine(JSON.stringify(result, null, 2));
52
+ return;
53
+ }
54
+ writeLine("\n");
55
+ writeLine(`session: ${result.sessionId}`);
56
+ writeLine(`duration: ${result.durationMs}ms`);
57
+ writeLine(`tokens: input=${result.usage.input} output=${result.usage.output} total=${result.usage.total}`);
58
+ if (result.error) {
59
+ writeError(`error: ${result.error}`);
60
+ }
61
+ }
62
+ /** Prints the session list to stdout */
63
+ export function printSessionList(sessions, format) {
64
+ if (format === "json") {
65
+ writeLine(JSON.stringify(sessions, null, 2));
66
+ return;
67
+ }
68
+ if (sessions.length === 0) {
69
+ writeLine("No sessions found.");
70
+ return;
71
+ }
72
+ for (const session of sessions) {
73
+ const date = session.createdAt ? new Date(session.createdAt).toLocaleString() : "unknown";
74
+ writeLine(`${session.id} ${date} [${session.channel}] ${session.title}`);
75
+ }
76
+ }
77
+ /** Prints bootstrap result to stdout */
78
+ export function printBootstrapResult(result, format) {
79
+ if (format === "json") {
80
+ writeLine(JSON.stringify(result, null, 2));
81
+ return;
82
+ }
83
+ writeLine("Bootstrap completed.");
84
+ writeLine(`dataDir: ${result.dataDir}`);
85
+ writeLine(`created dirs: ${result.createdDirs.length}`);
86
+ writeLine(`created files: ${result.createdFiles.length}`);
87
+ writeLine(`skipped dirs: ${result.skippedDirs.length}`);
88
+ writeLine(`skipped files: ${result.skippedFiles.length}`);
89
+ }
90
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ declare global {
2
+ var getPkgPath: (() => string) | undefined;
3
+ }
4
+ export declare function ensurePkgPath(): void;
5
+ export {};
6
+ //# sourceMappingURL=pkg-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pkg-path.d.ts","sourceRoot":"","sources":["../src/pkg-path.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,CAAC;IAGb,IAAI,UAAU,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;CAC5C;AAED,wBAAgB,aAAa,IAAI,IAAI,CAIpC;AAID,OAAO,EAAE,CAAC"}
@@ -0,0 +1,8 @@
1
+ export function ensurePkgPath() {
2
+ if (!globalThis.getPkgPath) {
3
+ globalThis.getPkgPath = () => "@wizard/aimax";
4
+ }
5
+ }
6
+ ensurePkgPath();
7
+ export {};
8
+ //# sourceMappingURL=pkg-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pkg-path.js","sourceRoot":"","sources":["../src/pkg-path.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,aAAa;IAC3B,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QAC3B,UAAU,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC;IAChD,CAAC;AACH,CAAC;AAED,aAAa,EAAE,CAAC;AAEhB,OAAO,EAAE,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { PluginsConfig } from "@gencode/agents";
2
+ export declare function resolvePluginsConfigPath(dataDir: string, explicitPath?: string): string;
3
+ export declare function loadPluginsConfig(dataDir: string, explicitPath?: string): Promise<PluginsConfig | undefined>;
4
+ export declare function savePluginsConfig(dataDir: string, config: PluginsConfig, explicitPath?: string): Promise<void>;
5
+ //# sourceMappingURL=plugins-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins-config.d.ts","sourceRoot":"","sources":["../src/plugins-config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIrD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAKvF;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAapC;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,aAAa,EACrB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAIf"}
@@ -0,0 +1,30 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ const CONFIG_FILE = "plugins.json";
4
+ export function resolvePluginsConfigPath(dataDir, explicitPath) {
5
+ if (explicitPath) {
6
+ return path.resolve(explicitPath);
7
+ }
8
+ return path.join(dataDir, ".aimax", CONFIG_FILE);
9
+ }
10
+ export async function loadPluginsConfig(dataDir, explicitPath) {
11
+ const filePath = resolvePluginsConfigPath(dataDir, explicitPath);
12
+ try {
13
+ const raw = await fs.readFile(filePath, "utf-8");
14
+ const parsed = JSON.parse(raw);
15
+ return parsed;
16
+ }
17
+ catch (err) {
18
+ const code = err.code;
19
+ if (code === "ENOENT") {
20
+ return undefined;
21
+ }
22
+ throw err;
23
+ }
24
+ }
25
+ export async function savePluginsConfig(dataDir, config, explicitPath) {
26
+ const filePath = resolvePluginsConfigPath(dataDir, explicitPath);
27
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
28
+ await fs.writeFile(filePath, JSON.stringify(config, null, 2), "utf-8");
29
+ }
30
+ //# sourceMappingURL=plugins-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins-config.js","sourceRoot":"","sources":["../src/plugins-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,MAAM,WAAW,GAAG,cAAc,CAAC;AAEnC,MAAM,UAAU,wBAAwB,CAAC,OAAe,EAAE,YAAqB;IAC7E,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAe,EACf,YAAqB;IAErB,MAAM,QAAQ,GAAG,wBAAwB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACjE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;QAChD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAI,GAAyB,CAAC,IAAI,CAAC;QAC7C,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAe,EACf,MAAqB,EACrB,YAAqB;IAErB,MAAM,QAAQ,GAAG,wBAAwB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACjE,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACzE,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Commander program setup for @gencode/cli.
3
+ * Exported separately from the binary entrypoint to allow unit testing.
4
+ */
5
+ import { Command } from "commander";
6
+ /**
7
+ * Resolves the data directory from environment or current working directory.
8
+ */
9
+ export declare function getDataDir(): string;
10
+ export declare function createProgram(): Command;
11
+ //# sourceMappingURL=program.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,aAAa,IAAI,OAAO,CAiBvC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Commander program setup for @gencode/cli.
3
+ * Exported separately from the binary entrypoint to allow unit testing.
4
+ */
5
+ import { Command } from "commander";
6
+ import { registerBootstrapCommand } from "./commands/bootstrap.js";
7
+ import { registerRunCommand } from "./commands/run.js";
8
+ import { registerSessionsCommand } from "./commands/sessions.js";
9
+ import { registerMemoryCommand } from "./commands/memory.js";
10
+ import { registerAgentsCommands } from "./commands/agents.js";
11
+ import { registerPluginsCommand } from "./commands/plugins.js";
12
+ import { registerCommandsCommand } from "./commands/commands.js";
13
+ import { createRequire } from "node:module";
14
+ const require = createRequire(import.meta.url);
15
+ const cliPackage = require("../package.json");
16
+ /**
17
+ * Resolves the data directory from environment or current working directory.
18
+ */
19
+ export function getDataDir() {
20
+ return process.env.AIMAX_DATA_DIR || process.cwd();
21
+ }
22
+ export function createProgram() {
23
+ const program = new Command();
24
+ program
25
+ .name("aimax")
26
+ .description("AIMax CLI — runs agent tasks in a containerized environment")
27
+ .version(cliPackage.version);
28
+ registerRunCommand(program);
29
+ registerSessionsCommand(program);
30
+ registerCommandsCommand(program);
31
+ registerBootstrapCommand(program);
32
+ registerMemoryCommand(program);
33
+ registerAgentsCommands(program, getDataDir);
34
+ registerPluginsCommand(program, getDataDir);
35
+ return program;
36
+ }
37
+ //# sourceMappingURL=program.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAErE;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,OAAO,CAAC;SACb,WAAW,CAAC,6DAA6D,CAAC;SAC1E,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAE/B,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5B,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAClC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC5C,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAE5C,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,72 @@
1
+ export type RunMessageInput = {
2
+ kind: "text";
3
+ message: string;
4
+ } | {
5
+ kind: "messages";
6
+ messages: StructuredMessages;
7
+ };
8
+ type TextContent = {
9
+ type: "text";
10
+ text: string;
11
+ textSignature?: string;
12
+ };
13
+ type ImageContent = {
14
+ type: "image";
15
+ data: string;
16
+ mimeType: string;
17
+ };
18
+ type ThinkingContent = {
19
+ type: "thinking";
20
+ thinking: string;
21
+ thinkingSignature?: string;
22
+ redacted?: boolean;
23
+ };
24
+ type ToolCallContent = {
25
+ type: "toolCall";
26
+ id: string;
27
+ name: string;
28
+ arguments: Record<string, unknown>;
29
+ thoughtSignature?: string;
30
+ };
31
+ type MessageUsage = {
32
+ input: number;
33
+ output: number;
34
+ cacheRead: number;
35
+ cacheWrite: number;
36
+ totalTokens: number;
37
+ cost: {
38
+ input: number;
39
+ output: number;
40
+ cacheRead: number;
41
+ cacheWrite: number;
42
+ total: number;
43
+ };
44
+ };
45
+ type StructuredMessage = {
46
+ role: "user";
47
+ content: string | Array<TextContent | ImageContent>;
48
+ } | {
49
+ role: "assistant";
50
+ content: Array<TextContent | ThinkingContent | ToolCallContent>;
51
+ api: string;
52
+ provider: string;
53
+ model: string;
54
+ usage: MessageUsage;
55
+ stopReason: "stop" | "length" | "toolUse" | "error" | "aborted";
56
+ errorMessage?: string;
57
+ } | {
58
+ role: "toolResult";
59
+ toolCallId: string;
60
+ toolName: string;
61
+ content: Array<TextContent | ImageContent>;
62
+ details?: unknown;
63
+ isError: boolean;
64
+ };
65
+ export type StructuredMessages = StructuredMessage[];
66
+ export declare function loadMessagesFromFile(filePath: string): Promise<StructuredMessages>;
67
+ export declare function resolveRunMessageInput(options: {
68
+ message?: string;
69
+ fromFile?: string;
70
+ }): Promise<RunMessageInput>;
71
+ export {};
72
+ //# sourceMappingURL=message-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-input.d.ts","sourceRoot":"","sources":["../../src/utils/message-input.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAEvD,KAAK,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAC1E,KAAK,YAAY,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AACtE,KAAK,eAAe,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAC9G,KAAK,eAAe,GAAG;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AACF,KAAK,YAAY,GAAG;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH,CAAC;AACF,KAAK,iBAAiB,GAClB;IACE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC,WAAW,GAAG,YAAY,CAAC,CAAC;CACrD,GACD;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,KAAK,CAAC,WAAW,GAAG,eAAe,GAAG,eAAe,CAAC,CAAC;IAChE,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GACD;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,KAAK,CAAC,WAAW,GAAG,YAAY,CAAC,CAAC;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AACN,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,EAAE,CAAC;AA8FrD,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAqBxF;AAED,wBAAsB,sBAAsB,CAAC,OAAO,EAAE;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,eAAe,CAAC,CAgB3B"}
@@ -0,0 +1,117 @@
1
+ import fs from "node:fs/promises";
2
+ function isRecord(value) {
3
+ return typeof value === "object" && value !== null;
4
+ }
5
+ function isTextContent(value) {
6
+ return isRecord(value)
7
+ && value.type === "text"
8
+ && typeof value.text === "string"
9
+ && (value.textSignature === undefined || typeof value.textSignature === "string");
10
+ }
11
+ function isImageContent(value) {
12
+ return isRecord(value)
13
+ && value.type === "image"
14
+ && typeof value.data === "string"
15
+ && typeof value.mimeType === "string";
16
+ }
17
+ function isThinkingContent(value) {
18
+ return isRecord(value)
19
+ && value.type === "thinking"
20
+ && typeof value.thinking === "string"
21
+ && (value.thinkingSignature === undefined || typeof value.thinkingSignature === "string")
22
+ && (value.redacted === undefined || typeof value.redacted === "boolean");
23
+ }
24
+ function isToolCallContent(value) {
25
+ return isRecord(value)
26
+ && value.type === "toolCall"
27
+ && typeof value.id === "string"
28
+ && typeof value.name === "string"
29
+ && isRecord(value.arguments)
30
+ && (value.thoughtSignature === undefined || typeof value.thoughtSignature === "string");
31
+ }
32
+ function isUserContent(value) {
33
+ return typeof value === "string" || (Array.isArray(value) && value.every((item) => isTextContent(item) || isImageContent(item)));
34
+ }
35
+ function isAssistantContent(value) {
36
+ return Array.isArray(value) && value.every((item) => isTextContent(item) || isThinkingContent(item) || isToolCallContent(item));
37
+ }
38
+ function isUsage(value) {
39
+ return isRecord(value)
40
+ && typeof value.input === "number"
41
+ && typeof value.output === "number"
42
+ && typeof value.cacheRead === "number"
43
+ && typeof value.cacheWrite === "number"
44
+ && typeof value.totalTokens === "number"
45
+ && isRecord(value.cost)
46
+ && typeof value.cost.input === "number"
47
+ && typeof value.cost.output === "number"
48
+ && typeof value.cost.cacheRead === "number"
49
+ && typeof value.cost.cacheWrite === "number"
50
+ && typeof value.cost.total === "number";
51
+ }
52
+ function isStructuredMessage(value) {
53
+ if (!isRecord(value) || typeof value.role !== "string") {
54
+ return false;
55
+ }
56
+ if (value.role === "user") {
57
+ return isUserContent(value.content);
58
+ }
59
+ if (value.role === "assistant") {
60
+ return isAssistantContent(value.content)
61
+ && typeof value.api === "string"
62
+ && typeof value.provider === "string"
63
+ && typeof value.model === "string"
64
+ && isUsage(value.usage)
65
+ && (value.stopReason === "stop"
66
+ || value.stopReason === "length"
67
+ || value.stopReason === "toolUse"
68
+ || value.stopReason === "error"
69
+ || value.stopReason === "aborted")
70
+ && (value.errorMessage === undefined || typeof value.errorMessage === "string");
71
+ }
72
+ if (value.role === "toolResult") {
73
+ return typeof value.toolCallId === "string"
74
+ && typeof value.toolName === "string"
75
+ && Array.isArray(value.content)
76
+ && value.content.every((item) => isTextContent(item) || isImageContent(item))
77
+ && typeof value.isError === "boolean";
78
+ }
79
+ return false;
80
+ }
81
+ export async function loadMessagesFromFile(filePath) {
82
+ let raw;
83
+ try {
84
+ raw = await fs.readFile(filePath, "utf-8");
85
+ }
86
+ catch (err) {
87
+ throw new Error(`Failed to read message file: ${err.message}`);
88
+ }
89
+ let parsed;
90
+ try {
91
+ parsed = JSON.parse(raw);
92
+ }
93
+ catch (err) {
94
+ throw new Error(`Invalid JSON in message file: ${err.message}`);
95
+ }
96
+ const messages = Array.isArray(parsed) ? parsed : [parsed];
97
+ if (messages.length === 0 || !messages.every((message) => isStructuredMessage(message))) {
98
+ throw new Error("Message file must contain one Message object or an array of Message objects");
99
+ }
100
+ return messages;
101
+ }
102
+ export async function resolveRunMessageInput(options) {
103
+ if (Boolean(options.message) === Boolean(options.fromFile)) {
104
+ throw new Error("Exactly one of --message or --from-file must be provided");
105
+ }
106
+ if (options.fromFile) {
107
+ return {
108
+ kind: "messages",
109
+ messages: await loadMessagesFromFile(options.fromFile),
110
+ };
111
+ }
112
+ return {
113
+ kind: "text",
114
+ message: options.message,
115
+ };
116
+ }
117
+ //# sourceMappingURL=message-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-input.js","sourceRoot":"","sources":["../../src/utils/message-input.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@gencode/cli",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "bin": {
6
+ "aimax": "./dist/bin.js"
7
+ },
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/program.d.ts",
11
+ "default": "./dist/program.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "publishConfig": {
18
+ "access": "public"
19
+ },
20
+ "dependencies": {
21
+ "commander": "^14.0.3",
22
+ "gensign-node": "latest",
23
+ "@gencode/agents": "0.0.1"
24
+ },
25
+ "devDependencies": {
26
+ "@types/node": "^22.0.0",
27
+ "@vitest/coverage-v8": "^4.0.18",
28
+ "typescript": "^5.9.3",
29
+ "vitest": "^4.0.18"
30
+ },
31
+ "scripts": {
32
+ "build": "tsc --project tsconfig.json",
33
+ "test": "vitest run",
34
+ "test:coverage": "vitest run --coverage",
35
+ "typecheck": "tsc --noEmit"
36
+ }
37
+ }