@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,52 @@
1
+ export class AppError extends Error {
2
+ code;
3
+ context;
4
+ constructor(message, code, context) {
5
+ super(message);
6
+ this.name = "AppError";
7
+ this.code = code;
8
+ this.context = context;
9
+ }
10
+ }
11
+ const ERROR_CODE_EXIT_MAP = {
12
+ VALIDATION_ERROR: 1,
13
+ AUTH_ERROR: 2,
14
+ NETWORK_ERROR: 3,
15
+ TIMEOUT_ERROR: 4,
16
+ CONFIG_ERROR: 5,
17
+ INTERNAL_ERROR: 10,
18
+ };
19
+ export function handleError(error) {
20
+ if (error instanceof AppError) {
21
+ return {
22
+ message: error.message,
23
+ code: error.code,
24
+ exitCode: ERROR_CODE_EXIT_MAP[error.code] ?? 1,
25
+ };
26
+ }
27
+ if (error instanceof Error) {
28
+ return {
29
+ message: "Internal error",
30
+ code: "INTERNAL_ERROR",
31
+ exitCode: 10,
32
+ };
33
+ }
34
+ return {
35
+ message: "Unknown error",
36
+ code: "UNKNOWN_ERROR",
37
+ exitCode: 1,
38
+ };
39
+ }
40
+ export async function wrapAsync(fn, context) {
41
+ try {
42
+ return await fn();
43
+ }
44
+ catch (error) {
45
+ if (error instanceof AppError) {
46
+ throw error;
47
+ }
48
+ const message = error instanceof Error ? error.message : String(error);
49
+ throw new AppError(context ? `${context}: ${message}` : message, "INTERNAL_ERROR", { originalError: error instanceof Error ? error.name : typeof error });
50
+ }
51
+ }
52
+ //# sourceMappingURL=error-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/production/error-handler.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjB,IAAI,CAAS;IACb,OAAO,CAA2B;IAElD,YAAY,OAAe,EAAE,IAAY,EAAE,OAAiC;QAC1E,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAQD,MAAM,mBAAmB,GAA2B;IAClD,gBAAgB,EAAE,CAAC;IACnB,UAAU,EAAE,CAAC;IACb,aAAa,EAAE,CAAC;IAChB,aAAa,EAAE,CAAC;IAChB,YAAY,EAAE,CAAC;IACf,cAAc,EAAE,EAAE;CACnB,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QAC9B,OAAO;YACL,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,QAAQ,EAAE,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;SAC/C,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO;YACL,OAAO,EAAE,gBAAgB;YACzB,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,EAAE;SACb,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,eAAe;QACxB,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,CAAC;KACZ,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,EAAoB,EACpB,OAAgB;IAEhB,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;YAC9B,MAAM,KAAK,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,QAAQ,CAChB,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,EAC5C,gBAAgB,EAChB,EAAE,aAAa,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,KAAK,EAAE,CACtE,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ export { CircuitBreaker } from "./circuit-breaker.js";
2
+ export type { CircuitBreakerOptions, CircuitBreakerStats, CircuitState } from "./circuit-breaker.js";
3
+ export { withRetry } from "./retry.js";
4
+ export type { RetryOptions } from "./retry.js";
5
+ export { RateLimiter } from "./rate-limiter.js";
6
+ export type { RateLimiterOptions, RateLimiterStats } from "./rate-limiter.js";
7
+ export { AppError, handleError, wrapAsync } from "./error-handler.js";
8
+ export type { HandledError } from "./error-handler.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/production/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAErG,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE9E,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACtE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { CircuitBreaker } from "./circuit-breaker.js";
2
+ export { withRetry } from "./retry.js";
3
+ export { RateLimiter } from "./rate-limiter.js";
4
+ export { AppError, handleError, wrapAsync } from "./error-handler.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/production/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,22 @@
1
+ export interface RateLimiterOptions {
2
+ maxTokens?: number;
3
+ refillRate?: number;
4
+ refillInterval?: number;
5
+ }
6
+ export interface RateLimiterStats {
7
+ tokens: number;
8
+ maxTokens: number;
9
+ }
10
+ export declare class RateLimiter {
11
+ private tokens;
12
+ private readonly maxTokens;
13
+ private readonly refillRate;
14
+ private readonly refillInterval;
15
+ private lastRefill;
16
+ constructor(options?: RateLimiterOptions);
17
+ acquire(): boolean;
18
+ wait(): Promise<void>;
19
+ getStats(): RateLimiterStats;
20
+ private refill;
21
+ }
22
+ //# sourceMappingURL=rate-limiter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../src/production/rate-limiter.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,CAAC,EAAE,kBAAkB;IAQxC,OAAO,IAAI,OAAO;IASZ,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,QAAQ,IAAI,gBAAgB;IAQ5B,OAAO,CAAC,MAAM;CAUf"}
@@ -0,0 +1,44 @@
1
+ export class RateLimiter {
2
+ tokens;
3
+ maxTokens;
4
+ refillRate;
5
+ refillInterval;
6
+ lastRefill;
7
+ constructor(options) {
8
+ this.maxTokens = options?.maxTokens ?? 10;
9
+ this.refillRate = options?.refillRate ?? 1;
10
+ this.refillInterval = options?.refillInterval ?? 1000;
11
+ this.tokens = this.maxTokens;
12
+ this.lastRefill = Date.now();
13
+ }
14
+ acquire() {
15
+ this.refill();
16
+ if (this.tokens >= 1) {
17
+ this.tokens--;
18
+ return true;
19
+ }
20
+ return false;
21
+ }
22
+ async wait() {
23
+ while (!this.acquire()) {
24
+ await new Promise((resolve) => setTimeout(resolve, this.refillInterval));
25
+ }
26
+ }
27
+ getStats() {
28
+ this.refill();
29
+ return {
30
+ tokens: Math.floor(this.tokens),
31
+ maxTokens: this.maxTokens,
32
+ };
33
+ }
34
+ refill() {
35
+ const now = Date.now();
36
+ const elapsed = now - this.lastRefill;
37
+ const tokensToAdd = (elapsed / this.refillInterval) * this.refillRate;
38
+ if (tokensToAdd > 0) {
39
+ this.tokens = Math.min(this.maxTokens, this.tokens + tokensToAdd);
40
+ this.lastRefill = now;
41
+ }
42
+ }
43
+ }
44
+ //# sourceMappingURL=rate-limiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/production/rate-limiter.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,WAAW;IACd,MAAM,CAAS;IACN,SAAS,CAAS;IAClB,UAAU,CAAS;IACnB,cAAc,CAAS;IAChC,UAAU,CAAS;IAE3B,YAAY,OAA4B;QACtC,IAAI,CAAC,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,EAAE,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,cAAc,GAAG,OAAO,EAAE,cAAc,IAAI,IAAI,CAAC;QACtD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/B,CAAC;IAED,OAAO;QACL,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,IAAI;QACR,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACvB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC;IACJ,CAAC;IAEO,MAAM;QACZ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;QACtC,MAAM,WAAW,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;QAEtE,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;YAClE,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;QACxB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ export interface RetryOptions {
2
+ maxRetries?: number;
3
+ baseDelay?: number;
4
+ maxDelay?: number;
5
+ backoffFactor?: number;
6
+ jitter?: boolean;
7
+ }
8
+ export declare function withRetry<T>(fn: () => Promise<T>, options?: RetryOptions): Promise<T>;
9
+ //# sourceMappingURL=retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/production/retry.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAqBD,wBAAsB,SAAS,CAAC,CAAC,EAC/B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,CAAC,CAAC,CAsBZ"}
@@ -0,0 +1,32 @@
1
+ function sleep(ms) {
2
+ return new Promise((resolve) => setTimeout(resolve, ms));
3
+ }
4
+ function calculateDelay(attempt, baseDelay, maxDelay, backoffFactor, jitter) {
5
+ const exponentialDelay = baseDelay * Math.pow(backoffFactor, attempt);
6
+ const capped = Math.min(exponentialDelay, maxDelay);
7
+ if (!jitter)
8
+ return capped;
9
+ return Math.random() * capped;
10
+ }
11
+ export async function withRetry(fn, options) {
12
+ const maxRetries = options?.maxRetries ?? 3;
13
+ const baseDelay = options?.baseDelay ?? 1000;
14
+ const maxDelay = options?.maxDelay ?? 30_000;
15
+ const backoffFactor = options?.backoffFactor ?? 2;
16
+ const jitter = options?.jitter ?? true;
17
+ let lastError;
18
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
19
+ try {
20
+ return await fn();
21
+ }
22
+ catch (error) {
23
+ lastError = error;
24
+ if (attempt === maxRetries)
25
+ break;
26
+ const delay = calculateDelay(attempt, baseDelay, maxDelay, backoffFactor, jitter);
27
+ await sleep(delay);
28
+ }
29
+ }
30
+ throw lastError;
31
+ }
32
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/production/retry.ts"],"names":[],"mappings":"AAQA,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,cAAc,CACrB,OAAe,EACf,SAAiB,EACjB,QAAgB,EAChB,aAAqB,EACrB,MAAe;IAEf,MAAM,gBAAgB,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IAEpD,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC;IAE3B,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,EAAoB,EACpB,OAAsB;IAEtB,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC;IAC7C,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,MAAM,CAAC;IAC7C,MAAM,aAAa,GAAG,OAAO,EAAE,aAAa,IAAI,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,IAAI,CAAC;IAEvC,IAAI,SAAkB,CAAC;IAEvB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QACvD,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAK,CAAC;YAClB,IAAI,OAAO,KAAK,UAAU;gBAAE,MAAM;YAElC,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;YAClF,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAC;AAClB,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * EventEmitter-based daemon that polls the worker queue
3
+ * and dispatches tasks to registered listeners.
4
+ */
5
+ import { EventEmitter } from "node:events";
6
+ import { WorkerQueue, type TaskPriority } from "./worker-queue.js";
7
+ declare const WORKER_TYPES: readonly ["optimize", "audit", "testgaps", "document", "map", "deepdive", "benchmark"];
8
+ export type WorkerType = (typeof WORKER_TYPES)[number];
9
+ export interface WorkerDaemonOptions {
10
+ pollInterval?: number;
11
+ }
12
+ export interface WorkerDaemonStatus {
13
+ running: boolean;
14
+ processed: number;
15
+ failed: number;
16
+ queueSize: number;
17
+ }
18
+ export declare class WorkerDaemon extends EventEmitter {
19
+ private queue;
20
+ private pollInterval;
21
+ private timer;
22
+ private running;
23
+ private processed;
24
+ private failed;
25
+ constructor(options?: WorkerDaemonOptions);
26
+ /** Start polling the queue for pending tasks. */
27
+ start(): void;
28
+ /** Stop polling. In-flight tasks are not cancelled. */
29
+ stop(): void;
30
+ /** Whether the daemon is currently polling. */
31
+ isRunning(): boolean;
32
+ /**
33
+ * Enqueue a task for processing.
34
+ * Returns the generated task ID.
35
+ */
36
+ dispatch(type: string, payload: Record<string, unknown>, priority?: TaskPriority | string): string;
37
+ /** Current daemon and queue statistics. */
38
+ status(): WorkerDaemonStatus;
39
+ /** Expose the internal queue for direct inspection. */
40
+ getQueue(): WorkerQueue;
41
+ private poll;
42
+ }
43
+ export {};
44
+ //# sourceMappingURL=worker-daemon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-daemon.d.ts","sourceRoot":"","sources":["../../src/services/worker-daemon.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAMnE,QAAA,MAAM,YAAY,wFAQR,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAIvD,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,MAAM,CAAK;gBAEP,OAAO,CAAC,EAAE,mBAAmB;IAKzC,iDAAiD;IACjD,KAAK,IAAI,IAAI;IAOb,uDAAuD;IACvD,IAAI,IAAI,IAAI;IAUZ,+CAA+C;IAC/C,SAAS,IAAI,OAAO;IAIpB;;;OAGG;IACH,QAAQ,CACN,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,QAAQ,GAAE,YAAY,GAAG,MAAiB,GACzC,MAAM;IAUT,2CAA2C;IAC3C,MAAM,IAAI,kBAAkB;IAS5B,uDAAuD;IACvD,QAAQ,IAAI,WAAW;IAMvB,OAAO,CAAC,IAAI;CAmBb"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * EventEmitter-based daemon that polls the worker queue
3
+ * and dispatches tasks to registered listeners.
4
+ */
5
+ import { EventEmitter } from "node:events";
6
+ import { WorkerQueue } from "./worker-queue.js";
7
+ // ── Constants ────────────────────────────────────────────────────
8
+ const DEFAULT_POLL_INTERVAL = 1000;
9
+ const WORKER_TYPES = [
10
+ "optimize",
11
+ "audit",
12
+ "testgaps",
13
+ "document",
14
+ "map",
15
+ "deepdive",
16
+ "benchmark",
17
+ ];
18
+ export class WorkerDaemon extends EventEmitter {
19
+ queue = new WorkerQueue();
20
+ pollInterval;
21
+ timer = null;
22
+ running = false;
23
+ processed = 0;
24
+ failed = 0;
25
+ constructor(options) {
26
+ super();
27
+ this.pollInterval = options?.pollInterval ?? DEFAULT_POLL_INTERVAL;
28
+ }
29
+ /** Start polling the queue for pending tasks. */
30
+ start() {
31
+ if (this.running)
32
+ return;
33
+ this.running = true;
34
+ this.timer = setInterval(() => this.poll(), this.pollInterval);
35
+ this.emit("daemon:start");
36
+ }
37
+ /** Stop polling. In-flight tasks are not cancelled. */
38
+ stop() {
39
+ if (!this.running)
40
+ return;
41
+ this.running = false;
42
+ if (this.timer) {
43
+ clearInterval(this.timer);
44
+ this.timer = null;
45
+ }
46
+ this.emit("daemon:stop");
47
+ }
48
+ /** Whether the daemon is currently polling. */
49
+ isRunning() {
50
+ return this.running;
51
+ }
52
+ /**
53
+ * Enqueue a task for processing.
54
+ * Returns the generated task ID.
55
+ */
56
+ dispatch(type, payload, priority = "normal") {
57
+ const id = this.queue.enqueue({
58
+ type,
59
+ payload,
60
+ priority: priority,
61
+ });
62
+ this.emit("task:enqueued", { id, type, priority });
63
+ return id;
64
+ }
65
+ /** Current daemon and queue statistics. */
66
+ status() {
67
+ return {
68
+ running: this.running,
69
+ processed: this.processed,
70
+ failed: this.failed,
71
+ queueSize: this.queue.size(),
72
+ };
73
+ }
74
+ /** Expose the internal queue for direct inspection. */
75
+ getQueue() {
76
+ return this.queue;
77
+ }
78
+ // ── Private ──────────────────────────────────────────────────
79
+ poll() {
80
+ const task = this.queue.dequeue();
81
+ if (!task)
82
+ return;
83
+ this.emit("task:start", task);
84
+ try {
85
+ // Emit a type-specific event so listeners can handle it
86
+ this.emit(`worker:${task.type}`, task.payload, task);
87
+ this.queue.complete(task.id);
88
+ this.processed++;
89
+ this.emit("task:complete", task);
90
+ }
91
+ catch (err) {
92
+ const message = err instanceof Error ? err.message : String(err);
93
+ this.queue.fail(task.id, message);
94
+ this.failed++;
95
+ this.emit("task:error", { task, error: message });
96
+ }
97
+ }
98
+ }
99
+ //# sourceMappingURL=worker-daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-daemon.js","sourceRoot":"","sources":["../../src/services/worker-daemon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Priority task queue for background workers.
3
+ *
4
+ * Tasks are dequeued by priority (critical > high > normal > low),
5
+ * with FIFO ordering within the same priority level.
6
+ */
7
+ export type TaskPriority = "low" | "normal" | "high" | "critical";
8
+ export type TaskStatus = "pending" | "running" | "completed" | "failed";
9
+ export interface WorkerTask {
10
+ id: string;
11
+ type: string;
12
+ priority: TaskPriority;
13
+ payload: Record<string, unknown>;
14
+ createdAt: number;
15
+ status: TaskStatus;
16
+ error?: string;
17
+ }
18
+ type TaskInput = Omit<WorkerTask, "id" | "createdAt" | "status">;
19
+ export declare class WorkerQueue {
20
+ private tasks;
21
+ /** Add a task to the queue. Returns the generated task ID. */
22
+ enqueue(input: TaskInput): string;
23
+ /** Remove and return the highest-priority pending task, or null. */
24
+ dequeue(): WorkerTask | null;
25
+ /** Return the highest-priority pending task without removing it. */
26
+ peek(): WorkerTask | null;
27
+ /** Number of pending tasks in the queue. */
28
+ size(): number;
29
+ /** Return all tasks regardless of status. */
30
+ list(): WorkerTask[];
31
+ /** Mark a task as completed. */
32
+ complete(id: string): void;
33
+ /** Mark a task as failed with an optional error message. */
34
+ fail(id: string, error?: string): void;
35
+ private nextPending;
36
+ }
37
+ export {};
38
+ //# sourceMappingURL=worker-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-queue.d.ts","sourceRoot":"","sources":["../../src/services/worker-queue.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAClE,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AAExE,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,KAAK,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,WAAW,GAAG,QAAQ,CAAC,CAAC;AAajE,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAsC;IAEnD,8DAA8D;IAC9D,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM;IAYjC,oEAAoE;IACpE,OAAO,IAAI,UAAU,GAAG,IAAI;IAQ5B,oEAAoE;IACpE,IAAI,IAAI,UAAU,GAAG,IAAI;IAIzB,4CAA4C;IAC5C,IAAI,IAAI,MAAM;IAQd,6CAA6C;IAC7C,IAAI,IAAI,UAAU,EAAE;IAIpB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAM1B,4DAA4D;IAC5D,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAStC,OAAO,CAAC,WAAW;CAiBpB"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Priority task queue for background workers.
3
+ *
4
+ * Tasks are dequeued by priority (critical > high > normal > low),
5
+ * with FIFO ordering within the same priority level.
6
+ */
7
+ // ── Constants ────────────────────────────────────────────────────
8
+ const PRIORITY_ORDER = {
9
+ critical: 0,
10
+ high: 1,
11
+ normal: 2,
12
+ low: 3,
13
+ };
14
+ // ── Queue ────────────────────────────────────────────────────────
15
+ export class WorkerQueue {
16
+ tasks = new Map();
17
+ /** Add a task to the queue. Returns the generated task ID. */
18
+ enqueue(input) {
19
+ const id = Date.now().toString(36);
20
+ const task = {
21
+ ...input,
22
+ id,
23
+ createdAt: Date.now(),
24
+ status: "pending",
25
+ };
26
+ this.tasks.set(id, task);
27
+ return id;
28
+ }
29
+ /** Remove and return the highest-priority pending task, or null. */
30
+ dequeue() {
31
+ const task = this.nextPending();
32
+ if (task) {
33
+ task.status = "running";
34
+ }
35
+ return task ?? null;
36
+ }
37
+ /** Return the highest-priority pending task without removing it. */
38
+ peek() {
39
+ return this.nextPending() ?? null;
40
+ }
41
+ /** Number of pending tasks in the queue. */
42
+ size() {
43
+ let count = 0;
44
+ for (const task of this.tasks.values()) {
45
+ if (task.status === "pending")
46
+ count++;
47
+ }
48
+ return count;
49
+ }
50
+ /** Return all tasks regardless of status. */
51
+ list() {
52
+ return [...this.tasks.values()];
53
+ }
54
+ /** Mark a task as completed. */
55
+ complete(id) {
56
+ const task = this.tasks.get(id);
57
+ if (!task)
58
+ return;
59
+ task.status = "completed";
60
+ }
61
+ /** Mark a task as failed with an optional error message. */
62
+ fail(id, error) {
63
+ const task = this.tasks.get(id);
64
+ if (!task)
65
+ return;
66
+ task.status = "failed";
67
+ if (error)
68
+ task.error = error;
69
+ }
70
+ // ── Private ──────────────────────────────────────────────────
71
+ nextPending() {
72
+ let best;
73
+ for (const task of this.tasks.values()) {
74
+ if (task.status !== "pending")
75
+ continue;
76
+ if (!best ||
77
+ PRIORITY_ORDER[task.priority] < PRIORITY_ORDER[best.priority] ||
78
+ (PRIORITY_ORDER[task.priority] === PRIORITY_ORDER[best.priority] &&
79
+ task.createdAt < best.createdAt)) {
80
+ best = task;
81
+ }
82
+ }
83
+ return best;
84
+ }
85
+ }
86
+ //# sourceMappingURL=worker-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-queue.js","sourceRoot":"","sources":["../../src/services/worker-queue.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmBH,oEAAoE;AAEpE,MAAM,cAAc,GAAiC;IACnD,QAAQ,EAAE,CAAC;IACX,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;CACP,CAAC;AAEF,oEAAoE;AAEpE,MAAM,OAAO,WAAW;IACd,KAAK,GAA4B,IAAI,GAAG,EAAE,CAAC;IAEnD,8DAA8D;IAC9D,OAAO,CAAC,KAAgB;QACtB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,IAAI,GAAe;YACvB,GAAG,KAAK;YACR,EAAE;YACF,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM,EAAE,SAAS;SAClB,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACzB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,oEAAoE;IACpE,OAAO;QACL,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAChC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,IAAI,IAAI,CAAC;IACtB,CAAC;IAED,oEAAoE;IACpE,IAAI;QACF,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC;IACpC,CAAC;IAED,4CAA4C;IAC5C,IAAI;QACF,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;gBAAE,KAAK,EAAE,CAAC;QACzC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,6CAA6C;IAC7C,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,gCAAgC;IAChC,QAAQ,CAAC,EAAU;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;IAC5B,CAAC;IAED,4DAA4D;IAC5D,IAAI,CAAC,EAAU,EAAE,KAAc;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QACvB,IAAI,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IAChC,CAAC;IAED,gEAAgE;IAExD,WAAW;QACjB,IAAI,IAA4B,CAAC;QAEjC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;gBAAE,SAAS;YACxC,IACE,CAAC,IAAI;gBACL,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAC7D,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;oBAC9D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,EAClC,CAAC;gBACD,IAAI,GAAG,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Statusline — honest, minimal dashboard showing only real data.
3
+ *
4
+ * Integrates with Claude Code, Gemini CLI, or standalone terminal.
5
+ * Host CLI can pipe session JSON via stdin (model, context %, cost).
6
+ */
7
+ export declare function generateStatuslineScript(projectRoot: string): string;
8
+ export declare function renderStatusline(cwd: string, options?: {
9
+ json?: boolean;
10
+ compact?: boolean;
11
+ }): string;
12
+ //# sourceMappingURL=generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/statusline/generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAMpE;AAED,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAClD,MAAM,CAKR"}