ultracode-ai 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +36 -0
  3. package/dist/commands/authoring-agents.d.ts +19 -0
  4. package/dist/commands/authoring-agents.d.ts.map +1 -0
  5. package/dist/commands/authoring-agents.js +123 -0
  6. package/dist/commands/authoring-agents.js.map +1 -0
  7. package/dist/commands/budget.d.ts +16 -0
  8. package/dist/commands/budget.d.ts.map +1 -0
  9. package/dist/commands/budget.js +105 -0
  10. package/dist/commands/budget.js.map +1 -0
  11. package/dist/commands/config.d.ts +15 -0
  12. package/dist/commands/config.d.ts.map +1 -0
  13. package/dist/commands/config.js +147 -0
  14. package/dist/commands/config.js.map +1 -0
  15. package/dist/commands/doctor.d.ts +65 -0
  16. package/dist/commands/doctor.d.ts.map +1 -0
  17. package/dist/commands/doctor.js +188 -0
  18. package/dist/commands/doctor.js.map +1 -0
  19. package/dist/commands/ext-format.d.ts +22 -0
  20. package/dist/commands/ext-format.d.ts.map +1 -0
  21. package/dist/commands/ext-format.js +115 -0
  22. package/dist/commands/ext-format.js.map +1 -0
  23. package/dist/commands/ext-helpers.d.ts +25 -0
  24. package/dist/commands/ext-helpers.d.ts.map +1 -0
  25. package/dist/commands/ext-helpers.js +36 -0
  26. package/dist/commands/ext-helpers.js.map +1 -0
  27. package/dist/commands/learn.d.ts +29 -0
  28. package/dist/commands/learn.d.ts.map +1 -0
  29. package/dist/commands/learn.js +190 -0
  30. package/dist/commands/learn.js.map +1 -0
  31. package/dist/commands/list.d.ts +11 -0
  32. package/dist/commands/list.d.ts.map +1 -0
  33. package/dist/commands/list.js +58 -0
  34. package/dist/commands/list.js.map +1 -0
  35. package/dist/commands/run.d.ts +13 -0
  36. package/dist/commands/run.d.ts.map +1 -0
  37. package/dist/commands/run.js +46 -0
  38. package/dist/commands/run.js.map +1 -0
  39. package/dist/commands/setup.d.ts +40 -0
  40. package/dist/commands/setup.d.ts.map +1 -0
  41. package/dist/commands/setup.js +146 -0
  42. package/dist/commands/setup.js.map +1 -0
  43. package/dist/commands/skills.d.ts +16 -0
  44. package/dist/commands/skills.d.ts.map +1 -0
  45. package/dist/commands/skills.js +148 -0
  46. package/dist/commands/skills.js.map +1 -0
  47. package/dist/commands/versioning.d.ts +13 -0
  48. package/dist/commands/versioning.d.ts.map +1 -0
  49. package/dist/commands/versioning.js +63 -0
  50. package/dist/commands/versioning.js.map +1 -0
  51. package/dist/context.d.ts +60 -0
  52. package/dist/context.d.ts.map +1 -0
  53. package/dist/context.js +69 -0
  54. package/dist/context.js.map +1 -0
  55. package/dist/core-loader.d.ts +22 -0
  56. package/dist/core-loader.d.ts.map +1 -0
  57. package/dist/core-loader.js +22 -0
  58. package/dist/core-loader.js.map +1 -0
  59. package/dist/format.d.ts +15 -0
  60. package/dist/format.d.ts.map +1 -0
  61. package/dist/format.js +80 -0
  62. package/dist/format.js.map +1 -0
  63. package/dist/index.d.ts +22 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +59 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/program.d.ts +19 -0
  68. package/dist/program.d.ts.map +1 -0
  69. package/dist/program.js +120 -0
  70. package/dist/program.js.map +1 -0
  71. package/dist/themes/dark.d.ts +4 -0
  72. package/dist/themes/dark.d.ts.map +1 -0
  73. package/dist/themes/dark.js +16 -0
  74. package/dist/themes/dark.js.map +1 -0
  75. package/dist/themes/dracula.d.ts +4 -0
  76. package/dist/themes/dracula.d.ts.map +1 -0
  77. package/dist/themes/dracula.js +16 -0
  78. package/dist/themes/dracula.js.map +1 -0
  79. package/dist/themes/index.d.ts +32 -0
  80. package/dist/themes/index.d.ts.map +1 -0
  81. package/dist/themes/index.js +45 -0
  82. package/dist/themes/index.js.map +1 -0
  83. package/dist/themes/light.d.ts +4 -0
  84. package/dist/themes/light.d.ts.map +1 -0
  85. package/dist/themes/light.js +16 -0
  86. package/dist/themes/light.js.map +1 -0
  87. package/dist/themes/theme.d.ts +34 -0
  88. package/dist/themes/theme.d.ts.map +1 -0
  89. package/dist/themes/theme.js +2 -0
  90. package/dist/themes/theme.js.map +1 -0
  91. package/dist/ui/App.d.ts +24 -0
  92. package/dist/ui/App.d.ts.map +1 -0
  93. package/dist/ui/App.js +217 -0
  94. package/dist/ui/App.js.map +1 -0
  95. package/dist/ui/ChatInput.d.ts +21 -0
  96. package/dist/ui/ChatInput.d.ts.map +1 -0
  97. package/dist/ui/ChatInput.js +88 -0
  98. package/dist/ui/ChatInput.js.map +1 -0
  99. package/dist/ui/ChatOutput.d.ts +22 -0
  100. package/dist/ui/ChatOutput.d.ts.map +1 -0
  101. package/dist/ui/ChatOutput.js +27 -0
  102. package/dist/ui/ChatOutput.js.map +1 -0
  103. package/dist/ui/StatusBar.d.ts +22 -0
  104. package/dist/ui/StatusBar.d.ts.map +1 -0
  105. package/dist/ui/StatusBar.js +17 -0
  106. package/dist/ui/StatusBar.js.map +1 -0
  107. package/dist/ui/ToolOutput.d.ts +20 -0
  108. package/dist/ui/ToolOutput.d.ts.map +1 -0
  109. package/dist/ui/ToolOutput.js +14 -0
  110. package/dist/ui/ToolOutput.js.map +1 -0
  111. package/dist/ui/ctrl-c.d.ts +21 -0
  112. package/dist/ui/ctrl-c.d.ts.map +1 -0
  113. package/dist/ui/ctrl-c.js +27 -0
  114. package/dist/ui/ctrl-c.js.map +1 -0
  115. package/dist/ui/start.d.ts +13 -0
  116. package/dist/ui/start.d.ts.map +1 -0
  117. package/dist/ui/start.js +25 -0
  118. package/dist/ui/start.js.map +1 -0
  119. package/dist/utils/cli-version.d.ts +15 -0
  120. package/dist/utils/cli-version.d.ts.map +1 -0
  121. package/dist/utils/cli-version.js +33 -0
  122. package/dist/utils/cli-version.js.map +1 -0
  123. package/dist/utils/resolve-home.d.ts +19 -0
  124. package/dist/utils/resolve-home.d.ts.map +1 -0
  125. package/dist/utils/resolve-home.js +28 -0
  126. package/dist/utils/resolve-home.js.map +1 -0
  127. package/dist/utils/text.d.ts +50 -0
  128. package/dist/utils/text.d.ts.map +1 -0
  129. package/dist/utils/text.js +133 -0
  130. package/dist/utils/text.js.map +1 -0
  131. package/package.json +45 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versioning.js","sourceRoot":"","sources":["../../src/commands/versioning.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * CLI execution context.
3
+ *
4
+ * Everything the commands need from the outside world (streams, environment,
5
+ * facade construction, git probing) is bundled in a {@link CliContext} and
6
+ * passed down explicitly. Production code uses {@link createDefaultContext};
7
+ * tests inject fakes, which keeps every command fully unit-testable, offline
8
+ * and cross-platform.
9
+ */
10
+ import type { UltraCode, UltraCodeCreateOptions } from "ultracode-core";
11
+ /** Instance type of the UltraCode facade. */
12
+ export type UltraCodeFacade = UltraCode;
13
+ /** Minimal writable stream surface used by the CLI. */
14
+ export interface CliWriter {
15
+ write(s: string): unknown;
16
+ isTTY?: boolean;
17
+ }
18
+ /** Minimal readable stream surface used by the CLI (stdin). */
19
+ export interface CliReader {
20
+ isTTY?: boolean;
21
+ setRawMode?(mode: boolean): unknown;
22
+ on(event: "data", listener: (chunk: Buffer | string) => void): unknown;
23
+ removeListener(event: "data", listener: (chunk: Buffer | string) => void): unknown;
24
+ resume?(): unknown;
25
+ pause?(): unknown;
26
+ }
27
+ /** Dependency bundle handed to every CLI command. */
28
+ export interface CliContext {
29
+ /** Working directory commands resolve project paths against. */
30
+ cwd: string;
31
+ /** Environment snapshot (API-key presence checks etc.). */
32
+ env: NodeJS.ProcessEnv;
33
+ /** Home directory used to expand `~`-prefixed shared constants. */
34
+ homedir: string;
35
+ /** Node.js runtime version (`process.versions.node`). */
36
+ nodeVersion: string;
37
+ /** Standard output. */
38
+ stdout: CliWriter;
39
+ /** Standard error. */
40
+ stderr: CliWriter;
41
+ /** Standard input. */
42
+ stdin: CliReader;
43
+ /** Construct the UltraCode facade (lazily imports `ultracode-core`). */
44
+ createFacade(options?: UltraCodeCreateOptions): Promise<UltraCodeFacade>;
45
+ /** Probe `git --version`; resolves `null` when git is unavailable. */
46
+ gitVersion(): Promise<string | null>;
47
+ }
48
+ /**
49
+ * Probe for a working `git` binary by spawning `git --version`.
50
+ * Never rejects: missing binaries and spawn failures resolve to `null`.
51
+ */
52
+ export declare function defaultGitVersion(): Promise<string | null>;
53
+ /**
54
+ * Build the production {@link CliContext} from the real process streams and
55
+ * the dynamically imported `ultracode-core` facade.
56
+ */
57
+ export declare function createDefaultContext(): CliContext;
58
+ /** Dispose a facade, swallowing secondary errors (never masks the original). */
59
+ export declare function safeDispose(facade: UltraCodeFacade): Promise<void>;
60
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAGxE,6CAA6C;AAC7C,MAAM,MAAM,eAAe,GAAG,SAAS,CAAC;AAExC,uDAAuD;AACvD,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,+DAA+D;AAC/D,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACpC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC;IACvE,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC;IACnF,MAAM,CAAC,IAAI,OAAO,CAAC;IACnB,KAAK,CAAC,IAAI,OAAO,CAAC;CACnB;AAED,qDAAqD;AACrD,MAAM,WAAW,UAAU;IACzB,gEAAgE;IAChE,GAAG,EAAE,MAAM,CAAC;IACZ,2DAA2D;IAC3D,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,MAAM,EAAE,SAAS,CAAC;IAClB,sBAAsB;IACtB,MAAM,EAAE,SAAS,CAAC;IAClB,sBAAsB;IACtB,KAAK,EAAE,SAAS,CAAC;IACjB,wEAAwE;IACxE,YAAY,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACzE,sEAAsE;IACtE,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACtC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAoB1D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,UAAU,CAejD;AAED,gFAAgF;AAChF,wBAAsB,WAAW,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAMxE"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * CLI execution context.
3
+ *
4
+ * Everything the commands need from the outside world (streams, environment,
5
+ * facade construction, git probing) is bundled in a {@link CliContext} and
6
+ * passed down explicitly. Production code uses {@link createDefaultContext};
7
+ * tests inject fakes, which keeps every command fully unit-testable, offline
8
+ * and cross-platform.
9
+ */
10
+ import os from "node:os";
11
+ import process from "node:process";
12
+ import { spawn } from "node:child_process";
13
+ import { loadCore } from "./core-loader.js";
14
+ /**
15
+ * Probe for a working `git` binary by spawning `git --version`.
16
+ * Never rejects: missing binaries and spawn failures resolve to `null`.
17
+ */
18
+ export function defaultGitVersion() {
19
+ return new Promise((resolve) => {
20
+ let child;
21
+ try {
22
+ child = spawn("git", ["--version"], { stdio: ["ignore", "pipe", "ignore"] });
23
+ }
24
+ catch {
25
+ resolve(null);
26
+ return;
27
+ }
28
+ let out = "";
29
+ child.once("error", () => {
30
+ resolve(null);
31
+ });
32
+ child.stdout?.on("data", (d) => {
33
+ out += String(d);
34
+ });
35
+ child.once("close", (code) => {
36
+ resolve(code === 0 && out.trim() !== "" ? out.trim() : null);
37
+ });
38
+ });
39
+ }
40
+ /**
41
+ * Build the production {@link CliContext} from the real process streams and
42
+ * the dynamically imported `ultracode-core` facade.
43
+ */
44
+ export function createDefaultContext() {
45
+ return {
46
+ cwd: process.cwd(),
47
+ env: process.env,
48
+ homedir: os.homedir(),
49
+ nodeVersion: process.versions.node,
50
+ stdout: process.stdout,
51
+ stderr: process.stderr,
52
+ stdin: process.stdin,
53
+ createFacade: async (options) => {
54
+ const core = await loadCore();
55
+ return core.UltraCode.create({ cwd: process.cwd(), ...options });
56
+ },
57
+ gitVersion: defaultGitVersion,
58
+ };
59
+ }
60
+ /** Dispose a facade, swallowing secondary errors (never masks the original). */
61
+ export async function safeDispose(facade) {
62
+ try {
63
+ await facade.dispose();
64
+ }
65
+ catch {
66
+ // Disposal failures must never shadow the primary command outcome.
67
+ }
68
+ }
69
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AA2C5C;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,KAA+B,CAAC;QACpC,IAAI,CAAC;YACH,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC/E,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,CAAC;YACd,OAAO;QACT,CAAC;QACD,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACvB,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;YACrC,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YAC3B,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE;QACrB,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI;QAClC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,YAAY,EAAE,KAAK,EAAE,OAAgC,EAAE,EAAE;YACvD,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,UAAU,EAAE,iBAAiB;KAC9B,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAuB;IACvD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,mEAAmE;IACrE,CAAC;AACH,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Indirection module for loading `ultracode-core`.
3
+ *
4
+ * The CLI never imports `ultracode-core` statically: the import happens
5
+ * lazily inside {@link loadCore}. This keeps startup fast for non-interactive
6
+ * commands and — crucially — lets tests replace the whole core package by
7
+ * mocking *this local module* (`vi.mock("./core-loader.js", ...)`), which works
8
+ * even while `ultracode-core` is not built yet.
9
+ */
10
+ import type { UltraCode } from "ultracode-core";
11
+ /** Shape of the dynamically imported `ultracode-core` module. */
12
+ export interface CoreModule {
13
+ /** The UltraCode facade class. */
14
+ UltraCode: typeof UltraCode;
15
+ }
16
+ /**
17
+ * Dynamically import `ultracode-core`.
18
+ *
19
+ * @returns the core module, exposing the {@link CoreModule.UltraCode} facade.
20
+ */
21
+ export declare function loadCore(): Promise<CoreModule>;
22
+ //# sourceMappingURL=core-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-loader.d.ts","sourceRoot":"","sources":["../src/core-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,iEAAiE;AACjE,MAAM,WAAW,UAAU;IACzB,kCAAkC;IAClC,SAAS,EAAE,OAAO,SAAS,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,CAMpD"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Indirection module for loading `ultracode-core`.
3
+ *
4
+ * The CLI never imports `ultracode-core` statically: the import happens
5
+ * lazily inside {@link loadCore}. This keeps startup fast for non-interactive
6
+ * commands and — crucially — lets tests replace the whole core package by
7
+ * mocking *this local module* (`vi.mock("./core-loader.js", ...)`), which works
8
+ * even while `ultracode-core` is not built yet.
9
+ */
10
+ /**
11
+ * Dynamically import `ultracode-core`.
12
+ *
13
+ * @returns the core module, exposing the {@link CoreModule.UltraCode} facade.
14
+ */
15
+ export async function loadCore() {
16
+ // The `@vite-ignore` hint stops Vitest's (Vite's) import analysis from
17
+ // eagerly resolving the not-yet-built core package at transform time.
18
+ // Node's runtime behaviour is unaffected.
19
+ const specifier = "ultracode-core";
20
+ return (await import(/* @vite-ignore */ specifier));
21
+ }
22
+ //# sourceMappingURL=core-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-loader.js","sourceRoot":"","sources":["../src/core-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC5B,uEAAuE;IACvE,sEAAsE;IACtE,0CAA0C;IAC1C,MAAM,SAAS,GAAG,gBAAgB,CAAC;IACnC,OAAO,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAe,CAAC;AACpE,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Human-readable formatters for the versioning subsystem's result types
3
+ * (`ChangeAnalysis`, `VersionSuggestion`, `ReleasePlan`, `QualityReport`).
4
+ * All formatters are pure, total and ANSI-free.
5
+ */
6
+ import type { ChangeAnalysis, QualityReport, ReleasePlan, VersionSuggestion } from "ultracode-shared";
7
+ /** Format a {@link ChangeAnalysis} as an indented plain-text report. */
8
+ export declare function formatChangeAnalysis(a: ChangeAnalysis): string;
9
+ /** Format a {@link VersionSuggestion} including bump, confidence and reasons. */
10
+ export declare function formatVersionSuggestion(s: VersionSuggestion): string;
11
+ /** Format a {@link ReleasePlan} with milestones, risks and changelog draft. */
12
+ export declare function formatReleasePlan(p: ReleasePlan): string;
13
+ /** Format a {@link QualityReport}: per-gate `✓`/`✗` plus the overall score. */
14
+ export declare function formatQualityReport(q: QualityReport): string;
15
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,WAAW,EACX,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAM1B,wEAAwE;AACxE,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,cAAc,GAAG,MAAM,CAsB9D;AAED,iFAAiF;AACjF,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAWpE;AAED,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAoBxD;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAU5D"}
package/dist/format.js ADDED
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Human-readable formatters for the versioning subsystem's result types
3
+ * (`ChangeAnalysis`, `VersionSuggestion`, `ReleasePlan`, `QualityReport`).
4
+ * All formatters are pure, total and ANSI-free.
5
+ */
6
+ import { truncate } from "ultracode-shared";
7
+ /** Cap applied to free-form blocks (changelog drafts etc.). */
8
+ const MAX_BLOCK_CHARS = 10_000;
9
+ /** Format a {@link ChangeAnalysis} as an indented plain-text report. */
10
+ export function formatChangeAnalysis(a) {
11
+ const additions = a.files.reduce((n, f) => n + f.additions, 0);
12
+ const deletions = a.files.reduce((n, f) => n + f.deletions, 0);
13
+ const cats = Object.entries(a.categories)
14
+ .map(([k, v]) => `${k} ${v}`)
15
+ .join(", ");
16
+ const lines = [
17
+ "Change Analysis",
18
+ ` Files: ${a.files.length} changed (+${additions} / -${deletions})`,
19
+ ` Commits: ${a.commits.length} (${cats})`,
20
+ ` Breaking changes: ${a.breakingChanges.length}`,
21
+ ];
22
+ for (const b of a.breakingChanges) {
23
+ lines.push(` - [${b.source}] ${b.description}${b.location ? ` (${b.location})` : ""}`);
24
+ }
25
+ lines.push(` Security findings: ${a.securityFindings.length}`);
26
+ for (const s of a.securityFindings) {
27
+ lines.push(` - [${s.severity}] ${s.rule} in ${s.file}${s.line !== undefined ? `:${s.line}` : ""} — ${s.description}`);
28
+ }
29
+ return `${lines.join("\n")}\n`;
30
+ }
31
+ /** Format a {@link VersionSuggestion} including bump, confidence and reasons. */
32
+ export function formatVersionSuggestion(s) {
33
+ const confidence = Math.round(s.confidence * 100);
34
+ const lines = [
35
+ "Version Suggestion",
36
+ ` ${s.currentVersion} → ${s.suggestedVersion} (${s.bump} bump, confidence ${confidence}%)`,
37
+ ];
38
+ if (s.reasons.length > 0) {
39
+ lines.push(" Reasons:");
40
+ for (const r of s.reasons)
41
+ lines.push(` - ${truncate(r, 200)}`);
42
+ }
43
+ return `${lines.join("\n")}\n`;
44
+ }
45
+ /** Format a {@link ReleasePlan} with milestones, risks and changelog draft. */
46
+ export function formatReleasePlan(p) {
47
+ const lines = [
48
+ `Release Plan ${p.version}${p.targetDate ? ` (target ${p.targetDate})` : ""}`,
49
+ ];
50
+ lines.push(` Milestones: ${p.milestones.length}`);
51
+ for (const m of p.milestones) {
52
+ lines.push(` [${m.done ? "x" : " "}] ${m.title}`);
53
+ for (const item of m.items)
54
+ lines.push(` - ${truncate(item, 200)}`);
55
+ }
56
+ lines.push(` Risks: ${p.risks.length}`);
57
+ for (const r of p.risks) {
58
+ lines.push(` - [${r.severity}] ${r.description} — mitigation: ${r.mitigation}`);
59
+ }
60
+ if (p.changelogDraft.trim() !== "") {
61
+ lines.push(" Changelog draft:");
62
+ for (const l of truncate(p.changelogDraft, MAX_BLOCK_CHARS).split(/\r?\n/)) {
63
+ lines.push(` ${l}`);
64
+ }
65
+ }
66
+ return `${lines.join("\n")}\n`;
67
+ }
68
+ /** Format a {@link QualityReport}: per-gate `✓`/`✗` plus the overall score. */
69
+ export function formatQualityReport(q) {
70
+ const lines = [
71
+ `Quality Report — ${q.passed ? "✓ PASSED" : "✗ FAILED"} (overall score ${q.overallScore})`,
72
+ ];
73
+ for (const g of q.gates) {
74
+ const mark = g.passed ? "✓" : "✗";
75
+ const score = g.score !== undefined ? ` (${g.score})` : "";
76
+ lines.push(` ${mark} ${g.gate}${score} — ${truncate(g.details, 200)}`);
77
+ }
78
+ return `${lines.join("\n")}\n`;
79
+ }
80
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * UltraCode CLI entry point.
4
+ *
5
+ * All argument parsing, command dispatch and error handling lives in
6
+ * {@link runCli}; this file only forwards `process.argv` and propagates the
7
+ * resulting exit code via `process.exitCode` (never `process.exit`, so
8
+ * pending stdout writes are flushed).
9
+ */
10
+ /**
11
+ * Silence the single `node:sqlite` `ExperimentalWarning` so the CLI's
12
+ * first-run output stays clean.
13
+ *
14
+ * Persistent sessions dynamically import `node:sqlite` (still flagged
15
+ * experimental), which makes Node emit a noisy multi-line warning to stderr on
16
+ * first use. We register a `warning` listener *before* anything loads the module
17
+ * and re-emit every warning except that one — so all other warnings (including
18
+ * unrelated `ExperimentalWarning`s) reach the user unchanged. The guard is
19
+ * idempotent and returns a disposer for tests.
20
+ */
21
+ export declare function suppressSqliteExperimentalWarning(proc?: NodeJS.Process): () => void;
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AAMH;;;;;;;;;;GAUG;AACH,wBAAgB,iCAAiC,CAAC,IAAI,GAAE,MAAM,CAAC,OAAiB,GAAG,MAAM,IAAI,CAkB5F"}
package/dist/index.js ADDED
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * UltraCode CLI entry point.
4
+ *
5
+ * All argument parsing, command dispatch and error handling lives in
6
+ * {@link runCli}; this file only forwards `process.argv` and propagates the
7
+ * resulting exit code via `process.exitCode` (never `process.exit`, so
8
+ * pending stdout writes are flushed).
9
+ */
10
+ import process from "node:process";
11
+ import { fileURLToPath } from "node:url";
12
+ import { runCli } from "./program.js";
13
+ /**
14
+ * Silence the single `node:sqlite` `ExperimentalWarning` so the CLI's
15
+ * first-run output stays clean.
16
+ *
17
+ * Persistent sessions dynamically import `node:sqlite` (still flagged
18
+ * experimental), which makes Node emit a noisy multi-line warning to stderr on
19
+ * first use. We register a `warning` listener *before* anything loads the module
20
+ * and re-emit every warning except that one — so all other warnings (including
21
+ * unrelated `ExperimentalWarning`s) reach the user unchanged. The guard is
22
+ * idempotent and returns a disposer for tests.
23
+ */
24
+ export function suppressSqliteExperimentalWarning(proc = process) {
25
+ const isSqliteExperimental = (warning) => warning.name === "ExperimentalWarning" && /\bSQLite\b/i.test(warning.message);
26
+ // Capture the default printer once, then take over emission ourselves.
27
+ const previous = proc.listeners("warning");
28
+ for (const listener of previous)
29
+ proc.removeListener("warning", listener);
30
+ const filter = (warning) => {
31
+ if (isSqliteExperimental(warning))
32
+ return;
33
+ for (const listener of previous)
34
+ listener.call(proc, warning);
35
+ };
36
+ proc.on("warning", filter);
37
+ return () => {
38
+ proc.removeListener("warning", filter);
39
+ for (const listener of previous)
40
+ proc.on("warning", listener);
41
+ };
42
+ }
43
+ /** True when this module is the process entry point (not imported by a test). */
44
+ function isMainModule() {
45
+ const entry = process.argv[1];
46
+ if (entry === undefined)
47
+ return false;
48
+ try {
49
+ return fileURLToPath(import.meta.url) === entry;
50
+ }
51
+ catch {
52
+ return false;
53
+ }
54
+ }
55
+ if (isMainModule()) {
56
+ suppressSqliteExperimentalWarning();
57
+ process.exitCode = await runCli(process.argv);
58
+ }
59
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AAEH,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iCAAiC,CAAC,OAAuB,OAAO;IAC9E,MAAM,oBAAoB,GAAG,CAAC,OAAc,EAAW,EAAE,CACvD,OAAO,CAAC,IAAI,KAAK,qBAAqB,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhF,uEAAuE;IACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAiC,CAAC;IAC3E,KAAK,MAAM,QAAQ,IAAI,QAAQ;QAAE,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAE1E,MAAM,MAAM,GAAG,CAAC,OAAc,EAAQ,EAAE;QACtC,IAAI,oBAAoB,CAAC,OAAO,CAAC;YAAE,OAAO;QAC1C,KAAK,MAAM,QAAQ,IAAI,QAAQ;YAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC,CAAC;IACF,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAE3B,OAAO,GAAG,EAAE;QACV,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACvC,KAAK,MAAM,QAAQ,IAAI,QAAQ;YAAE,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChE,CAAC,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,SAAS,YAAY;IACnB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,CAAC;QACH,OAAO,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,IAAI,YAAY,EAAE,EAAE,CAAC;IACnB,iCAAiC,EAAE,CAAC;IACpC,OAAO,CAAC,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAChD,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Commander program assembly and the top-level error boundary.
3
+ *
4
+ * {@link createProgram} wires all subcommands against a {@link CliContext};
5
+ * {@link runCli} parses an argv, maps every failure mode to a process exit
6
+ * code (UltraCodeError → red message + 1, unknown → message + `--debug` hint
7
+ * + 1) and never calls `process.exit` itself — only `process.exitCode`.
8
+ */
9
+ import { Command } from "commander";
10
+ import type { CliContext } from "./context.js";
11
+ /** Build the fully wired commander program for the given context. */
12
+ export declare function createProgram(ctx: CliContext): Command;
13
+ /**
14
+ * Parse and execute an argv (node-style: `[node, script, ...args]`).
15
+ *
16
+ * @returns the process exit code (also assigned to `process.exitCode`).
17
+ */
18
+ export declare function runCli(argv: readonly string[], ctx?: CliContext): Promise<number>;
19
+ //# sourceMappingURL=program.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,OAAO,EAAkB,MAAM,WAAW,CAAC;AAEpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAoB/C,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAwDtD;AAED;;;;GAIG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAmCvF"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Commander program assembly and the top-level error boundary.
3
+ *
4
+ * {@link createProgram} wires all subcommands against a {@link CliContext};
5
+ * {@link runCli} parses an argv, maps every failure mode to a process exit
6
+ * code (UltraCodeError → red message + 1, unknown → message + `--debug` hint
7
+ * + 1) and never calls `process.exit` itself — only `process.exitCode`.
8
+ */
9
+ import process from "node:process";
10
+ import { Command, CommanderError } from "commander";
11
+ import { UltraCodeError } from "ultracode-shared";
12
+ import { createDefaultContext } from "./context.js";
13
+ import { registerConfigCommand } from "./commands/config.js";
14
+ import { registerDoctorCommand } from "./commands/doctor.js";
15
+ import { registerListCommands } from "./commands/list.js";
16
+ import { registerRunCommand } from "./commands/run.js";
17
+ import { runSetup } from "./commands/setup.js";
18
+ import { registerVersioningCommands } from "./commands/versioning.js";
19
+ import { registerBudgetCommands } from "./commands/budget.js";
20
+ import { registerSkillsCommands } from "./commands/skills.js";
21
+ import { registerAuthoringAgentCommands } from "./commands/authoring-agents.js";
22
+ import { registerLearnCommands } from "./commands/learn.js";
23
+ import { getCliVersion } from "./utils/cli-version.js";
24
+ import { paint } from "./utils/text.js";
25
+ /** Build the fully wired commander program for the given context. */
26
+ export function createProgram(ctx) {
27
+ const program = new Command();
28
+ program
29
+ .name("ultracode-ai")
30
+ .description("UltraCode — interactive AI code assistant for the terminal")
31
+ .version(getCliVersion(), "-V, --version", "print the CLI version")
32
+ .option("--debug", "print stack traces for unexpected errors")
33
+ .option("--setup", "run the interactive setup wizard")
34
+ .exitOverride()
35
+ .configureOutput({
36
+ writeOut: (s) => {
37
+ ctx.stdout.write(s);
38
+ },
39
+ writeErr: (s) => {
40
+ ctx.stderr.write(s);
41
+ },
42
+ });
43
+ registerRunCommand(program, ctx);
44
+ registerConfigCommand(program, ctx);
45
+ registerListCommands(program, ctx);
46
+ // Must run after registerListCommands so it attaches to the existing `agents` group.
47
+ registerAuthoringAgentCommands(program, ctx);
48
+ registerVersioningCommands(program, ctx);
49
+ registerBudgetCommands(program, ctx);
50
+ registerSkillsCommands(program, ctx);
51
+ registerLearnCommands(program, ctx);
52
+ registerDoctorCommand(program, ctx);
53
+ // Default action: setup wizard via --setup, otherwise the interactive UI.
54
+ program.action(async (opts) => {
55
+ if (program.args.length > 0) {
56
+ ctx.stderr.write(`error: unknown command '${program.args[0]}'\n`);
57
+ ctx.stderr.write("Run `ultracode --help` for a list of commands.\n");
58
+ process.exitCode = 1;
59
+ return;
60
+ }
61
+ if (opts.setup) {
62
+ await runSetup(ctx);
63
+ return;
64
+ }
65
+ if (ctx.stdout.isTTY !== true || ctx.stdin.isTTY !== true) {
66
+ ctx.stdout.write("No interactive terminal detected. Use `ultracode run -p \"<prompt>\"` for one-shot runs.\n\n");
67
+ ctx.stdout.write(program.helpInformation());
68
+ process.exitCode = 1;
69
+ return;
70
+ }
71
+ // Ink/React are only loaded when the interactive UI actually starts.
72
+ const { startInteractive } = await import("./ui/start.js");
73
+ await startInteractive(ctx);
74
+ });
75
+ return program;
76
+ }
77
+ /**
78
+ * Parse and execute an argv (node-style: `[node, script, ...args]`).
79
+ *
80
+ * @returns the process exit code (also assigned to `process.exitCode`).
81
+ */
82
+ export async function runCli(argv, ctx) {
83
+ const context = ctx ?? createDefaultContext();
84
+ const debug = argv.includes("--debug");
85
+ const program = createProgram(context);
86
+ try {
87
+ await program.parseAsync([...argv]);
88
+ const code = typeof process.exitCode === "number" ? process.exitCode : 0;
89
+ return code;
90
+ }
91
+ catch (err) {
92
+ if (err instanceof CommanderError) {
93
+ // --help/--version and usage errors; commander already wrote the output.
94
+ const code = err.code === "commander.helpDisplayed" || err.code === "commander.version"
95
+ ? 0
96
+ : (err.exitCode ?? 1);
97
+ process.exitCode = code;
98
+ return code;
99
+ }
100
+ const colored = context.stderr.isTTY === true;
101
+ if (err instanceof UltraCodeError) {
102
+ context.stderr.write(paint(`✗ ${err.code}: ${err.message}\n`, "31", colored));
103
+ if (debug && err.stack !== undefined)
104
+ context.stderr.write(`${err.stack}\n`);
105
+ process.exitCode = 1;
106
+ return 1;
107
+ }
108
+ const message = err instanceof Error ? err.message : String(err);
109
+ context.stderr.write(paint(`✗ Unexpected error: ${message}\n`, "31", colored));
110
+ if (debug && err instanceof Error && err.stack !== undefined) {
111
+ context.stderr.write(`${err.stack}\n`);
112
+ }
113
+ else {
114
+ context.stderr.write("Run again with --debug for a stack trace.\n");
115
+ }
116
+ process.exitCode = 1;
117
+ return 1;
118
+ }
119
+ }
120
+ //# sourceMappingURL=program.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Theme } from "./theme.js";
2
+ /** Default dark theme (Ink colour names, safe on dark terminal backgrounds). */
3
+ export declare const dark: Theme;
4
+ //# sourceMappingURL=dark.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dark.d.ts","sourceRoot":"","sources":["../../src/themes/dark.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,gFAAgF;AAChF,eAAO,MAAM,IAAI,EAAE,KAalB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /** Default dark theme (Ink colour names, safe on dark terminal backgrounds). */
2
+ export const dark = {
3
+ name: "dark",
4
+ primary: "cyan",
5
+ secondary: "magenta",
6
+ accent: "blueBright",
7
+ text: "white",
8
+ dim: "gray",
9
+ success: "green",
10
+ warning: "yellow",
11
+ error: "red",
12
+ user: "cyanBright",
13
+ assistant: "white",
14
+ tool: "yellow",
15
+ };
16
+ //# sourceMappingURL=dark.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dark.js","sourceRoot":"","sources":["../../src/themes/dark.ts"],"names":[],"mappings":"AAEA,gFAAgF;AAChF,MAAM,CAAC,MAAM,IAAI,GAAU;IACzB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,MAAM;IACf,SAAS,EAAE,SAAS;IACpB,MAAM,EAAE,YAAY;IACpB,IAAI,EAAE,OAAO;IACb,GAAG,EAAE,MAAM;IACX,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,QAAQ;IACjB,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,YAAY;IAClB,SAAS,EAAE,OAAO;IAClB,IAAI,EAAE,QAAQ;CACf,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Theme } from "./theme.js";
2
+ /** Dracula theme (https://draculatheme.com palette). */
3
+ export declare const dracula: Theme;
4
+ //# sourceMappingURL=dracula.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dracula.d.ts","sourceRoot":"","sources":["../../src/themes/dracula.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,wDAAwD;AACxD,eAAO,MAAM,OAAO,EAAE,KAarB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /** Dracula theme (https://draculatheme.com palette). */
2
+ export const dracula = {
3
+ name: "dracula",
4
+ primary: "#bd93f9",
5
+ secondary: "#ff79c6",
6
+ accent: "#8be9fd",
7
+ text: "#f8f8f2",
8
+ dim: "#6272a4",
9
+ success: "#50fa7b",
10
+ warning: "#f1fa8c",
11
+ error: "#ff5555",
12
+ user: "#8be9fd",
13
+ assistant: "#f8f8f2",
14
+ tool: "#ffb86c",
15
+ };
16
+ //# sourceMappingURL=dracula.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dracula.js","sourceRoot":"","sources":["../../src/themes/dracula.ts"],"names":[],"mappings":"AAEA,wDAAwD;AACxD,MAAM,CAAC,MAAM,OAAO,GAAU;IAC5B,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,SAAS;IACpB,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,SAAS;IACd,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,SAAS;IACpB,IAAI,EAAE,SAAS;CAChB,CAAC"}