@aiyou-dev/cli 0.1.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.
Files changed (179) hide show
  1. package/bin/aiyoucli-mcp.js +7 -0
  2. package/bin/aiyoucli.js +29 -0
  3. package/dist/commands/index.d.ts +9 -0
  4. package/dist/commands/index.d.ts.map +1 -0
  5. package/dist/commands/index.js +968 -0
  6. package/dist/commands/index.js.map +1 -0
  7. package/dist/config.d.ts +6 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +99 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/index.d.ts +18 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +149 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/init/agentsmd-generator.d.ts +13 -0
  16. package/dist/init/agentsmd-generator.d.ts.map +1 -0
  17. package/dist/init/agentsmd-generator.js +138 -0
  18. package/dist/init/agentsmd-generator.js.map +1 -0
  19. package/dist/init/interactive.d.ts +6 -0
  20. package/dist/init/interactive.d.ts.map +1 -0
  21. package/dist/init/interactive.js +288 -0
  22. package/dist/init/interactive.js.map +1 -0
  23. package/dist/init/settings-generator.d.ts +17 -0
  24. package/dist/init/settings-generator.d.ts.map +1 -0
  25. package/dist/init/settings-generator.js +132 -0
  26. package/dist/init/settings-generator.js.map +1 -0
  27. package/dist/mcp/client.d.ts +27 -0
  28. package/dist/mcp/client.d.ts.map +1 -0
  29. package/dist/mcp/client.js +93 -0
  30. package/dist/mcp/client.js.map +1 -0
  31. package/dist/mcp/server.d.ts +8 -0
  32. package/dist/mcp/server.d.ts.map +1 -0
  33. package/dist/mcp/server.js +74 -0
  34. package/dist/mcp/server.js.map +1 -0
  35. package/dist/mcp/tools/agent-tools.d.ts +6 -0
  36. package/dist/mcp/tools/agent-tools.d.ts.map +1 -0
  37. package/dist/mcp/tools/agent-tools.js +196 -0
  38. package/dist/mcp/tools/agent-tools.js.map +1 -0
  39. package/dist/mcp/tools/analyze-tools.d.ts +6 -0
  40. package/dist/mcp/tools/analyze-tools.d.ts.map +1 -0
  41. package/dist/mcp/tools/analyze-tools.js +49 -0
  42. package/dist/mcp/tools/analyze-tools.js.map +1 -0
  43. package/dist/mcp/tools/config-tools.d.ts +6 -0
  44. package/dist/mcp/tools/config-tools.d.ts.map +1 -0
  45. package/dist/mcp/tools/config-tools.js +69 -0
  46. package/dist/mcp/tools/config-tools.js.map +1 -0
  47. package/dist/mcp/tools/coordination-tools.d.ts +6 -0
  48. package/dist/mcp/tools/coordination-tools.d.ts.map +1 -0
  49. package/dist/mcp/tools/coordination-tools.js +44 -0
  50. package/dist/mcp/tools/coordination-tools.js.map +1 -0
  51. package/dist/mcp/tools/distiller-tools.d.ts +7 -0
  52. package/dist/mcp/tools/distiller-tools.d.ts.map +1 -0
  53. package/dist/mcp/tools/distiller-tools.js +50 -0
  54. package/dist/mcp/tools/distiller-tools.js.map +1 -0
  55. package/dist/mcp/tools/gcc-tools.d.ts +6 -0
  56. package/dist/mcp/tools/gcc-tools.d.ts.map +1 -0
  57. package/dist/mcp/tools/gcc-tools.js +37 -0
  58. package/dist/mcp/tools/gcc-tools.js.map +1 -0
  59. package/dist/mcp/tools/hooks-tools.d.ts +7 -0
  60. package/dist/mcp/tools/hooks-tools.d.ts.map +1 -0
  61. package/dist/mcp/tools/hooks-tools.js +125 -0
  62. package/dist/mcp/tools/hooks-tools.js.map +1 -0
  63. package/dist/mcp/tools/index.d.ts +5 -0
  64. package/dist/mcp/tools/index.d.ts.map +1 -0
  65. package/dist/mcp/tools/index.js +43 -0
  66. package/dist/mcp/tools/index.js.map +1 -0
  67. package/dist/mcp/tools/memory-tools.d.ts +7 -0
  68. package/dist/mcp/tools/memory-tools.d.ts.map +1 -0
  69. package/dist/mcp/tools/memory-tools.js +153 -0
  70. package/dist/mcp/tools/memory-tools.js.map +1 -0
  71. package/dist/mcp/tools/metrics-tools.d.ts +6 -0
  72. package/dist/mcp/tools/metrics-tools.d.ts.map +1 -0
  73. package/dist/mcp/tools/metrics-tools.js +126 -0
  74. package/dist/mcp/tools/metrics-tools.js.map +1 -0
  75. package/dist/mcp/tools/neural-tools.d.ts +11 -0
  76. package/dist/mcp/tools/neural-tools.d.ts.map +1 -0
  77. package/dist/mcp/tools/neural-tools.js +68 -0
  78. package/dist/mcp/tools/neural-tools.js.map +1 -0
  79. package/dist/mcp/tools/performance-tools.d.ts +6 -0
  80. package/dist/mcp/tools/performance-tools.d.ts.map +1 -0
  81. package/dist/mcp/tools/performance-tools.js +54 -0
  82. package/dist/mcp/tools/performance-tools.js.map +1 -0
  83. package/dist/mcp/tools/security-tools.d.ts +6 -0
  84. package/dist/mcp/tools/security-tools.d.ts.map +1 -0
  85. package/dist/mcp/tools/security-tools.js +51 -0
  86. package/dist/mcp/tools/security-tools.js.map +1 -0
  87. package/dist/mcp/tools/session-tools.d.ts +6 -0
  88. package/dist/mcp/tools/session-tools.d.ts.map +1 -0
  89. package/dist/mcp/tools/session-tools.js +85 -0
  90. package/dist/mcp/tools/session-tools.js.map +1 -0
  91. package/dist/mcp/tools/skills-tools.d.ts +9 -0
  92. package/dist/mcp/tools/skills-tools.d.ts.map +1 -0
  93. package/dist/mcp/tools/skills-tools.js +167 -0
  94. package/dist/mcp/tools/skills-tools.js.map +1 -0
  95. package/dist/mcp/tools/statusline-tools.d.ts +6 -0
  96. package/dist/mcp/tools/statusline-tools.d.ts.map +1 -0
  97. package/dist/mcp/tools/statusline-tools.js +26 -0
  98. package/dist/mcp/tools/statusline-tools.js.map +1 -0
  99. package/dist/mcp/tools/swarm-tools.d.ts +6 -0
  100. package/dist/mcp/tools/swarm-tools.d.ts.map +1 -0
  101. package/dist/mcp/tools/swarm-tools.js +75 -0
  102. package/dist/mcp/tools/swarm-tools.js.map +1 -0
  103. package/dist/mcp/tools/system-tools.d.ts +6 -0
  104. package/dist/mcp/tools/system-tools.d.ts.map +1 -0
  105. package/dist/mcp/tools/system-tools.js +68 -0
  106. package/dist/mcp/tools/system-tools.js.map +1 -0
  107. package/dist/mcp/tools/task-tools.d.ts +6 -0
  108. package/dist/mcp/tools/task-tools.d.ts.map +1 -0
  109. package/dist/mcp/tools/task-tools.js +102 -0
  110. package/dist/mcp/tools/task-tools.js.map +1 -0
  111. package/dist/mcp/types.d.ts +19 -0
  112. package/dist/mcp/types.d.ts.map +1 -0
  113. package/dist/mcp/types.js +5 -0
  114. package/dist/mcp/types.js.map +1 -0
  115. package/dist/metrics/benchmark.d.ts +95 -0
  116. package/dist/metrics/benchmark.d.ts.map +1 -0
  117. package/dist/metrics/benchmark.js +195 -0
  118. package/dist/metrics/benchmark.js.map +1 -0
  119. package/dist/metrics/builtin-benchmarks.d.ts +9 -0
  120. package/dist/metrics/builtin-benchmarks.d.ts.map +1 -0
  121. package/dist/metrics/builtin-benchmarks.js +171 -0
  122. package/dist/metrics/builtin-benchmarks.js.map +1 -0
  123. package/dist/metrics/collector.d.ts +89 -0
  124. package/dist/metrics/collector.d.ts.map +1 -0
  125. package/dist/metrics/collector.js +181 -0
  126. package/dist/metrics/collector.js.map +1 -0
  127. package/dist/napi/index.d.ts +159 -0
  128. package/dist/napi/index.d.ts.map +1 -0
  129. package/dist/napi/index.js +111 -0
  130. package/dist/napi/index.js.map +1 -0
  131. package/dist/output.d.ts +44 -0
  132. package/dist/output.d.ts.map +1 -0
  133. package/dist/output.js +138 -0
  134. package/dist/output.js.map +1 -0
  135. package/dist/parser.d.ts +12 -0
  136. package/dist/parser.d.ts.map +1 -0
  137. package/dist/parser.js +135 -0
  138. package/dist/parser.js.map +1 -0
  139. package/dist/production/circuit-breaker.d.ts +31 -0
  140. package/dist/production/circuit-breaker.d.ts.map +1 -0
  141. package/dist/production/circuit-breaker.js +87 -0
  142. package/dist/production/circuit-breaker.js.map +1 -0
  143. package/dist/production/error-handler.d.ts +13 -0
  144. package/dist/production/error-handler.d.ts.map +1 -0
  145. package/dist/production/error-handler.js +52 -0
  146. package/dist/production/error-handler.js.map +1 -0
  147. package/dist/production/index.d.ts +9 -0
  148. package/dist/production/index.d.ts.map +1 -0
  149. package/dist/production/index.js +5 -0
  150. package/dist/production/index.js.map +1 -0
  151. package/dist/production/rate-limiter.d.ts +22 -0
  152. package/dist/production/rate-limiter.d.ts.map +1 -0
  153. package/dist/production/rate-limiter.js +44 -0
  154. package/dist/production/rate-limiter.js.map +1 -0
  155. package/dist/production/retry.d.ts +9 -0
  156. package/dist/production/retry.d.ts.map +1 -0
  157. package/dist/production/retry.js +32 -0
  158. package/dist/production/retry.js.map +1 -0
  159. package/dist/services/worker-daemon.d.ts +44 -0
  160. package/dist/services/worker-daemon.d.ts.map +1 -0
  161. package/dist/services/worker-daemon.js +99 -0
  162. package/dist/services/worker-daemon.js.map +1 -0
  163. package/dist/services/worker-queue.d.ts +38 -0
  164. package/dist/services/worker-queue.d.ts.map +1 -0
  165. package/dist/services/worker-queue.js +86 -0
  166. package/dist/services/worker-queue.js.map +1 -0
  167. package/dist/statusline/generator.d.ts +12 -0
  168. package/dist/statusline/generator.d.ts.map +1 -0
  169. package/dist/statusline/generator.js +361 -0
  170. package/dist/statusline/generator.js.map +1 -0
  171. package/dist/suggest.d.ts +5 -0
  172. package/dist/suggest.d.ts.map +1 -0
  173. package/dist/suggest.js +40 -0
  174. package/dist/suggest.js.map +1 -0
  175. package/dist/types.d.ts +112 -0
  176. package/dist/types.d.ts.map +1 -0
  177. package/dist/types.js +23 -0
  178. package/dist/types.js.map +1 -0
  179. package/package.json +64 -0
@@ -0,0 +1,111 @@
1
+ /**
2
+ * NAPI binary loader for aiyoucli-napi Rust crate.
3
+ *
4
+ * Loads the platform-specific .node binary and re-exports
5
+ * the Rust-backed VectorHandle class + any future bindings.
6
+ */
7
+ import { createRequire } from "node:module";
8
+ import { join, dirname } from "node:path";
9
+ import { fileURLToPath } from "node:url";
10
+ import { existsSync } from "node:fs";
11
+ const __dirname = dirname(fileURLToPath(import.meta.url));
12
+ const require = createRequire(import.meta.url);
13
+ const PLATFORM_MAP = {
14
+ darwin: {
15
+ arm64: "@aiyou-dev/cli-darwin-arm64",
16
+ x64: "@aiyou-dev/cli-darwin-x64",
17
+ },
18
+ linux: {
19
+ x64: "@aiyou-dev/cli-linux-x64-gnu",
20
+ arm64: "@aiyou-dev/cli-linux-arm64-gnu",
21
+ },
22
+ win32: {
23
+ x64: "@aiyou-dev/cli-win32-x64-msvc",
24
+ },
25
+ };
26
+ function getPlatformPackage() {
27
+ return PLATFORM_MAP[process.platform]?.[process.arch];
28
+ }
29
+ function loadBindings() {
30
+ // Try loading from the workspace root (development: cargo build output)
31
+ const candidates = [
32
+ join(__dirname, "..", "..", "aiyoucli-napi.darwin-arm64.node"),
33
+ join(__dirname, "..", "..", "aiyoucli-napi.darwin-x64.node"),
34
+ join(__dirname, "..", "..", "aiyoucli-napi.linux-x64-gnu.node"),
35
+ join(__dirname, "..", "..", "aiyoucli-napi.node"),
36
+ // napi build output location
37
+ join(__dirname, "..", "..", "crates", "aiyoucli-napi", "aiyoucli-napi.node"),
38
+ ];
39
+ for (const candidate of candidates) {
40
+ if (existsSync(candidate)) {
41
+ return require(candidate);
42
+ }
43
+ }
44
+ // Try loading platform-specific npm package (production)
45
+ const platformPackage = getPlatformPackage();
46
+ if (platformPackage) {
47
+ try {
48
+ return require(platformPackage);
49
+ }
50
+ catch {
51
+ // ignore
52
+ }
53
+ }
54
+ throw new Error("Failed to load aiyoucli-napi native binding. " +
55
+ "Run `npm run build:rs` or `cargo build -p aiyoucli-napi`.");
56
+ }
57
+ let _bindings = null;
58
+ function getBindings() {
59
+ if (!_bindings) {
60
+ _bindings = loadBindings();
61
+ }
62
+ return _bindings;
63
+ }
64
+ /**
65
+ * Open a persistent vector database at the given path.
66
+ */
67
+ export function openVectorDB(path, dimensions) {
68
+ return getBindings().VectorHandle.open(path, dimensions);
69
+ }
70
+ /**
71
+ * Create an in-memory vector database (no persistence).
72
+ */
73
+ export function inMemoryVectorDB(dimensions, enableHnsw) {
74
+ return getBindings().VectorHandle.inMemory(dimensions, enableHnsw);
75
+ }
76
+ export function createSonaEngine() {
77
+ return new (getBindings().SonaHandle)();
78
+ }
79
+ export function createAttentionRouter(dim) {
80
+ return new (getBindings().AttentionHandle)(dim);
81
+ }
82
+ export function createKnowledgeGraph() {
83
+ return new (getBindings().GraphHandle)();
84
+ }
85
+ export function createRoutingEngine() {
86
+ return new (getBindings().RoutingEngine)();
87
+ }
88
+ export function createAnalysisEngine() {
89
+ return new (getBindings().AnalysisEngine)();
90
+ }
91
+ // ── Distiller ────────────────────────────────────────────────────
92
+ /**
93
+ * Distill Markdown into TOON format (Dense Structured Instructions).
94
+ * ~52% fewer tokens for the same semantic content.
95
+ */
96
+ export function distillMarkdown(markdown) {
97
+ return getBindings().distillMarkdown(markdown);
98
+ }
99
+ /**
100
+ * Distill a Markdown file into TOON format. Reads file and returns TOON string.
101
+ */
102
+ export function distillFile(path) {
103
+ return getBindings().distillFile(path);
104
+ }
105
+ /**
106
+ * Detect technologies in a project directory.
107
+ */
108
+ export function detectTechnologies(projectDir) {
109
+ return getBindings().detectTechnologies(projectDir);
110
+ }
111
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/napi/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Output formatter — colors, tables, spinners, verbosity.
3
+ */
4
+ import type { Verbosity } from "./types.js";
5
+ export declare const color: {
6
+ bold: (s: string) => string;
7
+ dim: (s: string) => string;
8
+ red: (s: string) => string;
9
+ green: (s: string) => string;
10
+ yellow: (s: string) => string;
11
+ blue: (s: string) => string;
12
+ cyan: (s: string) => string;
13
+ gray: (s: string) => string;
14
+ };
15
+ export declare class Output {
16
+ private verbosity;
17
+ setVerbosity(v: Verbosity): void;
18
+ isQuiet(): boolean;
19
+ isVerbose(): boolean;
20
+ isDebug(): boolean;
21
+ log(msg: string): void;
22
+ success(msg: string): void;
23
+ warn(msg: string): void;
24
+ error(msg: string): void;
25
+ debug(msg: string): void;
26
+ info(msg: string): void;
27
+ table(headers: string[], rows: string[][], options?: {
28
+ padding?: number;
29
+ }): void;
30
+ spinner(text: string): Spinner;
31
+ json(data: unknown): void;
32
+ }
33
+ export declare class Spinner {
34
+ private timer;
35
+ private frame;
36
+ private text;
37
+ constructor(text: string);
38
+ start(): this;
39
+ stop(finalText?: string): void;
40
+ succeed(text?: string): void;
41
+ fail(text?: string): void;
42
+ }
43
+ export declare const output: Output;
44
+ //# 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,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAyB5C,eAAO,MAAM,KAAK;cACN,MAAM;aACP,MAAM;aACN,MAAM;eACJ,MAAM;gBACL,MAAM;cACR,MAAM;cACN,MAAM;cACN,MAAM;CACjB,CAAC;AAIF,qBAAa,MAAM;IACjB,OAAO,CAAC,SAAS,CAAuB;IAExC,YAAY,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI;IAIhC,OAAO,IAAI,OAAO;IAGlB,SAAS,IAAI,OAAO;IAGpB,OAAO,IAAI,OAAO;IAIlB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAItB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI1B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIvB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIxB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIxB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMvB,KAAK,CACH,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,MAAM,EAAE,EAAE,EAChB,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO,GACjC,IAAI;IAwBP,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAM9B,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;CAG1B;AAMD,qBAAa,OAAO;IAClB,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,IAAI,CAAS;gBAET,IAAI,EAAE,MAAM;IAIxB,KAAK,IAAI,IAAI;IAUb,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAa9B,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAI5B,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;CAG1B;AAQD,eAAO,MAAM,MAAM,QAAe,CAAC"}
package/dist/output.js ADDED
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Output formatter — colors, tables, spinners, verbosity.
3
+ */
4
+ const isColorSupported = process.env.FORCE_COLOR !== "0" &&
5
+ !process.env.NO_COLOR &&
6
+ (process.stdout.isTTY ?? false);
7
+ // ── ANSI codes ──────────────────────────────────────────────────
8
+ const RESET = "\x1b[0m";
9
+ const BOLD = "\x1b[1m";
10
+ const DIM = "\x1b[2m";
11
+ const RED = "\x1b[31m";
12
+ const GREEN = "\x1b[32m";
13
+ const YELLOW = "\x1b[33m";
14
+ const BLUE = "\x1b[34m";
15
+ const CYAN = "\x1b[36m";
16
+ const GRAY = "\x1b[90m";
17
+ function c(code, text) {
18
+ return isColorSupported ? `${code}${text}${RESET}` : text;
19
+ }
20
+ // ── Public color helpers ────────────────────────────────────────
21
+ export const color = {
22
+ bold: (s) => c(BOLD, s),
23
+ dim: (s) => c(DIM, s),
24
+ red: (s) => c(RED, s),
25
+ green: (s) => c(GREEN, s),
26
+ yellow: (s) => c(YELLOW, s),
27
+ blue: (s) => c(BLUE, s),
28
+ cyan: (s) => c(CYAN, s),
29
+ gray: (s) => c(GRAY, s),
30
+ };
31
+ // ── Output class ────────────────────────────────────────────────
32
+ export class Output {
33
+ verbosity = "normal";
34
+ setVerbosity(v) {
35
+ this.verbosity = v;
36
+ }
37
+ isQuiet() {
38
+ return this.verbosity === "quiet";
39
+ }
40
+ isVerbose() {
41
+ return this.verbosity === "verbose" || this.verbosity === "debug";
42
+ }
43
+ isDebug() {
44
+ return this.verbosity === "debug";
45
+ }
46
+ log(msg) {
47
+ if (!this.isQuiet())
48
+ console.log(msg);
49
+ }
50
+ success(msg) {
51
+ this.log(color.green(`OK`) + ` ${msg}`);
52
+ }
53
+ warn(msg) {
54
+ if (!this.isQuiet())
55
+ console.error(color.yellow(`WARN`) + ` ${msg}`);
56
+ }
57
+ error(msg) {
58
+ console.error(color.red(`ERR`) + ` ${msg}`);
59
+ }
60
+ debug(msg) {
61
+ if (this.isVerbose())
62
+ console.error(color.gray(`DBG ${msg}`));
63
+ }
64
+ info(msg) {
65
+ this.log(color.blue(`INFO`) + ` ${msg}`);
66
+ }
67
+ // ── Table ───────────────────────────────────────────────────
68
+ table(headers, rows, options = {}) {
69
+ if (this.isQuiet())
70
+ return;
71
+ const pad = options.padding ?? 2;
72
+ const widths = headers.map((h, i) => {
73
+ const colValues = [h, ...rows.map((r) => r[i] ?? "")];
74
+ return Math.max(...colValues.map((v) => stripAnsi(v).length));
75
+ });
76
+ const formatRow = (cells) => cells.map((cell, i) => {
77
+ const w = stripAnsi(cell).length;
78
+ return cell + " ".repeat(Math.max(0, widths[i] - w + pad));
79
+ }).join("");
80
+ console.log(color.bold(formatRow(headers)));
81
+ console.log(color.dim("─".repeat(widths.reduce((a, b) => a + b + pad, 0))));
82
+ for (const row of rows) {
83
+ console.log(formatRow(row));
84
+ }
85
+ }
86
+ // ── Spinner ─────────────────────────────────────────────────
87
+ spinner(text) {
88
+ return new Spinner(text);
89
+ }
90
+ // ── JSON output ─────────────────────────────────────────────
91
+ json(data) {
92
+ console.log(JSON.stringify(data, null, 2));
93
+ }
94
+ }
95
+ // ── Spinner ──────────────────────────────────────────────────────
96
+ const FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
97
+ export class Spinner {
98
+ timer = null;
99
+ frame = 0;
100
+ text;
101
+ constructor(text) {
102
+ this.text = text;
103
+ }
104
+ start() {
105
+ if (!process.stderr.isTTY)
106
+ return this;
107
+ this.timer = setInterval(() => {
108
+ const f = FRAMES[this.frame % FRAMES.length];
109
+ process.stderr.write(`\r${color.cyan(f)} ${this.text}`);
110
+ this.frame++;
111
+ }, 80);
112
+ return this;
113
+ }
114
+ stop(finalText) {
115
+ if (this.timer) {
116
+ clearInterval(this.timer);
117
+ this.timer = null;
118
+ }
119
+ if (process.stderr.isTTY) {
120
+ process.stderr.write(`\r\x1b[K`); // Clear line
121
+ }
122
+ if (finalText) {
123
+ console.log(finalText);
124
+ }
125
+ }
126
+ succeed(text) {
127
+ this.stop(color.green("OK") + ` ${text ?? this.text}`);
128
+ }
129
+ fail(text) {
130
+ this.stop(color.red("FAIL") + ` ${text ?? this.text}`);
131
+ }
132
+ }
133
+ // ── Util ────────────────────────────────────────────────────────
134
+ function stripAnsi(s) {
135
+ return s.replace(/\x1b\[[0-9;]*m/g, "");
136
+ }
137
+ export const output = new Output();
138
+ //# 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,12 @@
1
+ /**
2
+ * Command parser — argv to structured ParseResult.
3
+ */
4
+ import type { Command, ParseResult } from "./types.js";
5
+ export declare class CommandParser {
6
+ private commands;
7
+ registerCommand(cmd: Command): void;
8
+ getCommand(name: string): Command | undefined;
9
+ getAllCommands(): Command[];
10
+ parse(argv: string[]): ParseResult;
11
+ }
12
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAe,MAAM,YAAY,CAAC;AAEpE,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAA8B;IAE9C,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAOnC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAI7C,cAAc,IAAI,OAAO,EAAE;IAY3B,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW;CA2FnC"}
package/dist/parser.js ADDED
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Command parser — argv to structured ParseResult.
3
+ */
4
+ export class CommandParser {
5
+ commands = new Map();
6
+ registerCommand(cmd) {
7
+ this.commands.set(cmd.name, cmd);
8
+ for (const alias of cmd.aliases ?? []) {
9
+ this.commands.set(alias, cmd);
10
+ }
11
+ }
12
+ getCommand(name) {
13
+ return this.commands.get(name);
14
+ }
15
+ getAllCommands() {
16
+ const seen = new Set();
17
+ const result = [];
18
+ for (const [, cmd] of this.commands) {
19
+ if (!seen.has(cmd.name)) {
20
+ seen.add(cmd.name);
21
+ result.push(cmd);
22
+ }
23
+ }
24
+ return result.filter((c) => !c.hidden);
25
+ }
26
+ parse(argv) {
27
+ const command = [];
28
+ const flags = { _: [] };
29
+ const positional = [];
30
+ let i = 0;
31
+ // Extract command path (non-flag tokens at the start)
32
+ while (i < argv.length && !argv[i].startsWith("-")) {
33
+ const token = argv[i];
34
+ const matched = this.commands.has(command.length === 0 ? token : `${command.join(":")}.${token}`) || this.commands.has(token);
35
+ if (command.length === 0 && matched) {
36
+ command.push(token);
37
+ i++;
38
+ // Check for subcommand
39
+ if (i < argv.length && !argv[i].startsWith("-")) {
40
+ const parentCmd = this.commands.get(token);
41
+ if (parentCmd?.subcommands?.some((s) => s.name === argv[i])) {
42
+ command.push(argv[i]);
43
+ i++;
44
+ }
45
+ }
46
+ break;
47
+ }
48
+ else if (command.length === 0) {
49
+ // Not a known command — still put it in command path for suggest
50
+ command.push(token);
51
+ i++;
52
+ break;
53
+ }
54
+ i++;
55
+ }
56
+ // Parse remaining as flags and positional args
57
+ while (i < argv.length) {
58
+ const arg = argv[i];
59
+ if (arg === "--") {
60
+ // Everything after -- is positional
61
+ positional.push(...argv.slice(i + 1));
62
+ break;
63
+ }
64
+ if (arg.startsWith("--")) {
65
+ const [key, ...valueParts] = arg.slice(2).split("=");
66
+ const flagName = camelCase(key);
67
+ if (valueParts.length > 0) {
68
+ flags[flagName] = valueParts.join("=");
69
+ }
70
+ else if (key.startsWith("no-")) {
71
+ flags[camelCase(key.slice(3))] = false;
72
+ }
73
+ else if (i + 1 < argv.length && !argv[i + 1].startsWith("-")) {
74
+ // Peek: if next arg looks like a value, consume it
75
+ const next = argv[i + 1];
76
+ if (looksLikeValue(next)) {
77
+ flags[flagName] = coerce(next);
78
+ i++;
79
+ }
80
+ else {
81
+ flags[flagName] = true;
82
+ }
83
+ }
84
+ else {
85
+ flags[flagName] = true;
86
+ }
87
+ }
88
+ else if (arg.startsWith("-") && arg.length > 1) {
89
+ // Short flags: -v, -vv, -k 5
90
+ const chars = arg.slice(1);
91
+ if (chars.length === 1) {
92
+ const flagName = chars;
93
+ if (i + 1 < argv.length && looksLikeValue(argv[i + 1])) {
94
+ flags[flagName] = coerce(argv[i + 1]);
95
+ i++;
96
+ }
97
+ else {
98
+ flags[flagName] = true;
99
+ }
100
+ }
101
+ else {
102
+ // Multiple short flags: -abc → a=true, b=true, c=true
103
+ for (const c of chars) {
104
+ flags[c] = true;
105
+ }
106
+ }
107
+ }
108
+ else {
109
+ positional.push(arg);
110
+ }
111
+ i++;
112
+ }
113
+ flags._ = positional;
114
+ return { command, flags, positional, raw: argv };
115
+ }
116
+ }
117
+ function camelCase(str) {
118
+ return str.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
119
+ }
120
+ function looksLikeValue(s) {
121
+ if (s.startsWith("-"))
122
+ return false;
123
+ return true;
124
+ }
125
+ function coerce(s) {
126
+ if (s === "true")
127
+ return true;
128
+ if (s === "false")
129
+ return false;
130
+ const n = Number(s);
131
+ if (!Number.isNaN(n) && s.trim() !== "")
132
+ return n;
133
+ return s;
134
+ }
135
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ export type CircuitState = "closed" | "open" | "half_open";
2
+ export interface CircuitBreakerOptions {
3
+ failureThreshold?: number;
4
+ resetTimeout?: number;
5
+ halfOpenMax?: number;
6
+ }
7
+ export interface CircuitBreakerStats {
8
+ failures: number;
9
+ successes: number;
10
+ state: CircuitState;
11
+ lastFailure?: number;
12
+ }
13
+ export declare class CircuitBreaker {
14
+ private state;
15
+ private failures;
16
+ private successes;
17
+ private lastFailure?;
18
+ private halfOpenAttempts;
19
+ private readonly failureThreshold;
20
+ private readonly resetTimeout;
21
+ private readonly halfOpenMax;
22
+ constructor(options?: CircuitBreakerOptions);
23
+ execute<T>(fn: () => Promise<T>): Promise<T>;
24
+ getState(): CircuitState;
25
+ getStats(): CircuitBreakerStats;
26
+ reset(): void;
27
+ private onSuccess;
28
+ private onFailure;
29
+ private shouldAttemptReset;
30
+ }
31
+ //# sourceMappingURL=circuit-breaker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../../src/production/circuit-breaker.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAE3D,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,YAAY,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,gBAAgB,CAAK;IAE7B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,OAAO,CAAC,EAAE,qBAAqB;IAMrC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IA2BlD,QAAQ,IAAI,YAAY;IAOxB,QAAQ,IAAI,mBAAmB;IAS/B,KAAK,IAAI,IAAI;IAQb,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,kBAAkB;CAI3B"}
@@ -0,0 +1,87 @@
1
+ export class CircuitBreaker {
2
+ state = "closed";
3
+ failures = 0;
4
+ successes = 0;
5
+ lastFailure;
6
+ halfOpenAttempts = 0;
7
+ failureThreshold;
8
+ resetTimeout;
9
+ halfOpenMax;
10
+ constructor(options) {
11
+ this.failureThreshold = options?.failureThreshold ?? 5;
12
+ this.resetTimeout = options?.resetTimeout ?? 30_000;
13
+ this.halfOpenMax = options?.halfOpenMax ?? 1;
14
+ }
15
+ async execute(fn) {
16
+ if (this.state === "open") {
17
+ if (this.shouldAttemptReset()) {
18
+ this.state = "half_open";
19
+ this.halfOpenAttempts = 0;
20
+ }
21
+ else {
22
+ throw new Error("Circuit breaker is open");
23
+ }
24
+ }
25
+ if (this.state === "half_open" && this.halfOpenAttempts >= this.halfOpenMax) {
26
+ throw new Error("Circuit breaker half-open limit reached");
27
+ }
28
+ try {
29
+ if (this.state === "half_open") {
30
+ this.halfOpenAttempts++;
31
+ }
32
+ const result = await fn();
33
+ this.onSuccess();
34
+ return result;
35
+ }
36
+ catch (error) {
37
+ this.onFailure();
38
+ throw error;
39
+ }
40
+ }
41
+ getState() {
42
+ if (this.state === "open" && this.shouldAttemptReset()) {
43
+ return "open";
44
+ }
45
+ return this.state;
46
+ }
47
+ getStats() {
48
+ return {
49
+ failures: this.failures,
50
+ successes: this.successes,
51
+ state: this.state,
52
+ ...(this.lastFailure !== undefined && { lastFailure: this.lastFailure }),
53
+ };
54
+ }
55
+ reset() {
56
+ this.state = "closed";
57
+ this.failures = 0;
58
+ this.successes = 0;
59
+ this.lastFailure = undefined;
60
+ this.halfOpenAttempts = 0;
61
+ }
62
+ onSuccess() {
63
+ this.successes++;
64
+ if (this.state === "half_open") {
65
+ this.state = "closed";
66
+ this.failures = 0;
67
+ this.halfOpenAttempts = 0;
68
+ }
69
+ }
70
+ onFailure() {
71
+ this.failures++;
72
+ this.lastFailure = Date.now();
73
+ if (this.state === "half_open") {
74
+ this.state = "open";
75
+ this.halfOpenAttempts = 0;
76
+ }
77
+ else if (this.failures >= this.failureThreshold) {
78
+ this.state = "open";
79
+ }
80
+ }
81
+ shouldAttemptReset() {
82
+ if (this.lastFailure === undefined)
83
+ return false;
84
+ return Date.now() - this.lastFailure >= this.resetTimeout;
85
+ }
86
+ }
87
+ //# sourceMappingURL=circuit-breaker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../src/production/circuit-breaker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export declare class AppError extends Error {
2
+ readonly code: string;
3
+ readonly context?: Record<string, unknown>;
4
+ constructor(message: string, code: string, context?: Record<string, unknown>);
5
+ }
6
+ export interface HandledError {
7
+ message: string;
8
+ code: string;
9
+ exitCode: number;
10
+ }
11
+ export declare function handleError(error: unknown): HandledError;
12
+ export declare function wrapAsync<T>(fn: () => Promise<T>, context?: string): Promise<T>;
13
+ //# sourceMappingURL=error-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/production/error-handler.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAS,SAAQ,KAAK;IACjC,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAEtC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAM7E;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAWD,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAsBxD;AAED,wBAAsB,SAAS,CAAC,CAAC,EAC/B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,CAAC,CAAC,CAeZ"}