devcore-ai 1.0.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 (78) hide show
  1. package/README.md +191 -0
  2. package/dist/ai/index.d.ts +20 -0
  3. package/dist/ai/index.d.ts.map +1 -0
  4. package/dist/ai/index.js +251 -0
  5. package/dist/ai/index.js.map +1 -0
  6. package/dist/commands/config-cmd.d.ts +3 -0
  7. package/dist/commands/config-cmd.d.ts.map +1 -0
  8. package/dist/commands/config-cmd.js +106 -0
  9. package/dist/commands/config-cmd.js.map +1 -0
  10. package/dist/commands/files-cmd.d.ts +3 -0
  11. package/dist/commands/files-cmd.d.ts.map +1 -0
  12. package/dist/commands/files-cmd.js +29 -0
  13. package/dist/commands/files-cmd.js.map +1 -0
  14. package/dist/commands/git-cmd.d.ts +3 -0
  15. package/dist/commands/git-cmd.d.ts.map +1 -0
  16. package/dist/commands/git-cmd.js +114 -0
  17. package/dist/commands/git-cmd.js.map +1 -0
  18. package/dist/commands/help.d.ts +12 -0
  19. package/dist/commands/help.d.ts.map +1 -0
  20. package/dist/commands/help.js +97 -0
  21. package/dist/commands/help.js.map +1 -0
  22. package/dist/commands/image-cmd.d.ts +3 -0
  23. package/dist/commands/image-cmd.d.ts.map +1 -0
  24. package/dist/commands/image-cmd.js +38 -0
  25. package/dist/commands/image-cmd.js.map +1 -0
  26. package/dist/commands/index.d.ts +9 -0
  27. package/dist/commands/index.d.ts.map +1 -0
  28. package/dist/commands/index.js +263 -0
  29. package/dist/commands/index.js.map +1 -0
  30. package/dist/commands/review-cmd.d.ts +4 -0
  31. package/dist/commands/review-cmd.d.ts.map +1 -0
  32. package/dist/commands/review-cmd.js +72 -0
  33. package/dist/commands/review-cmd.js.map +1 -0
  34. package/dist/commands/terminal-cmd.d.ts +2 -0
  35. package/dist/commands/terminal-cmd.d.ts.map +1 -0
  36. package/dist/commands/terminal-cmd.js +34 -0
  37. package/dist/commands/terminal-cmd.js.map +1 -0
  38. package/dist/config/index.d.ts +6 -0
  39. package/dist/config/index.d.ts.map +1 -0
  40. package/dist/config/index.js +56 -0
  41. package/dist/config/index.js.map +1 -0
  42. package/dist/filesystem/index.d.ts +5 -0
  43. package/dist/filesystem/index.d.ts.map +1 -0
  44. package/dist/filesystem/index.js +174 -0
  45. package/dist/filesystem/index.js.map +1 -0
  46. package/dist/git/index.d.ts +9 -0
  47. package/dist/git/index.d.ts.map +1 -0
  48. package/dist/git/index.js +121 -0
  49. package/dist/git/index.js.map +1 -0
  50. package/dist/index.d.ts +3 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +108 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/memory/index.d.ts +10 -0
  55. package/dist/memory/index.d.ts.map +1 -0
  56. package/dist/memory/index.js +88 -0
  57. package/dist/memory/index.js.map +1 -0
  58. package/dist/terminal/index.d.ts +11 -0
  59. package/dist/terminal/index.d.ts.map +1 -0
  60. package/dist/terminal/index.js +64 -0
  61. package/dist/terminal/index.js.map +1 -0
  62. package/dist/types.d.ts +67 -0
  63. package/dist/types.d.ts.map +1 -0
  64. package/dist/types.js +3 -0
  65. package/dist/types.js.map +1 -0
  66. package/dist/ui/index.d.ts +15 -0
  67. package/dist/ui/index.d.ts.map +1 -0
  68. package/dist/ui/index.js +74 -0
  69. package/dist/ui/index.js.map +1 -0
  70. package/dist/ui/stream-renderer.d.ts +15 -0
  71. package/dist/ui/stream-renderer.d.ts.map +1 -0
  72. package/dist/ui/stream-renderer.js +78 -0
  73. package/dist/ui/stream-renderer.js.map +1 -0
  74. package/dist/utils/index.d.ts +13 -0
  75. package/dist/utils/index.d.ts.map +1 -0
  76. package/dist/utils/index.js +68 -0
  77. package/dist/utils/index.js.map +1 -0
  78. package/package.json +58 -0
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.gitCommand = gitCommand;
40
+ const inquirer_1 = __importDefault(require("inquirer"));
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const git_1 = require("../git");
43
+ const ui_1 = require("../ui");
44
+ async function gitCommand(args, ai) {
45
+ const sub = args.trim().toLowerCase();
46
+ if (sub === "status" || sub === "") {
47
+ const status = await (0, git_1.getStatus)();
48
+ let output = `${(0, ui_1.header)("Git Status")}`;
49
+ output += ` Branch: ${chalk_1.default.cyan(status.branch)}\n`;
50
+ if (status.staged.length) {
51
+ output += ` ${chalk_1.default.green("Staged:")}\n`;
52
+ status.staged.forEach((f) => (output += ` + ${f}\n`));
53
+ }
54
+ if (status.modified.length) {
55
+ output += ` ${chalk_1.default.yellow("Modified:")}\n`;
56
+ status.modified.forEach((f) => (output += ` ~ ${f}\n`));
57
+ }
58
+ if (status.untracked.length) {
59
+ output += ` ${chalk_1.default.dim("Untracked:")}\n`;
60
+ status.untracked.forEach((f) => (output += ` ? ${f}\n`));
61
+ }
62
+ if (status.clean) {
63
+ output += ` ${(0, ui_1.success)("Working tree clean")}\n`;
64
+ }
65
+ return output;
66
+ }
67
+ if (sub === "diff") {
68
+ const diff = await (0, git_1.getDiff)();
69
+ return diff ? chalk_1.default.dim(diff) : (0, ui_1.info)("No changes");
70
+ }
71
+ if (sub === "log") {
72
+ return await (0, git_1.getLog)(15);
73
+ }
74
+ if (sub === "branch" || sub === "branches") {
75
+ return await (0, git_1.getBranches)();
76
+ }
77
+ if (sub === "commit") {
78
+ const status = await (0, git_1.getStatus)();
79
+ if (status.clean) {
80
+ return (0, ui_1.info)("Nothing to commit — working tree clean");
81
+ }
82
+ const diff = await (0, git_1.getDiff)();
83
+ const spinner = (await Promise.resolve().then(() => __importStar(require("ora")))).default("Generating commit message...");
84
+ spinner.start();
85
+ let commitMsg = "";
86
+ for await (const chunk of ai.streamChat([
87
+ {
88
+ role: "user",
89
+ content: `Generate a concise conventional commit message for these changes:\n\n${diff.slice(0, 3000)}`,
90
+ },
91
+ ], null)) {
92
+ if (!chunk.done) {
93
+ commitMsg += chunk.content;
94
+ }
95
+ }
96
+ spinner.stop();
97
+ console.log(`\n Proposed commit message:\n ${chalk_1.default.cyan(commitMsg)}\n`);
98
+ const { confirm } = await inquirer_1.default.prompt([
99
+ {
100
+ type: "confirm",
101
+ name: "confirm",
102
+ message: "Commit with this message?",
103
+ default: true,
104
+ },
105
+ ]);
106
+ if (confirm) {
107
+ const result = await (0, git_1.commit)(commitMsg);
108
+ return result;
109
+ }
110
+ return (0, ui_1.info)("Commit cancelled");
111
+ }
112
+ return `${(0, ui_1.info)("Git sub-commands:")} status, diff, log, branch, commit`;
113
+ }
114
+ //# sourceMappingURL=git-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-cmd.js","sourceRoot":"","sources":["../../src/commands/git-cmd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { AppConfig } from "../types";
2
+ export declare const HELP_TEXT: string;
3
+ export declare const GIT_HELP: string;
4
+ export declare const MODELS: {
5
+ openai: string[];
6
+ anthropic: string[];
7
+ gemini: string[];
8
+ groq: string[];
9
+ };
10
+ export declare function printModelsList(provider: string): string;
11
+ export declare function printSettings(config: AppConfig): string;
12
+ //# sourceMappingURL=help.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,eAAO,MAAM,SAAS,QAgCrB,CAAC;AAEF,eAAO,MAAM,QAAQ,QAQpB,CAAC;AAEF,eAAO,MAAM,MAAM;;;;;CAyBlB,CAAC;AAEF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQxD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAUvD"}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.MODELS = exports.GIT_HELP = exports.HELP_TEXT = void 0;
7
+ exports.printModelsList = printModelsList;
8
+ exports.printSettings = printSettings;
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ const ui_1 = require("../ui");
11
+ exports.HELP_TEXT = `
12
+ ${(0, ui_1.header)("DevCore AI — Commands")}
13
+
14
+ ${chalk_1.default.cyan.bold("Chat Commands:")}
15
+ ${(0, ui_1.dim)("Type any message to chat with the AI assistant.")}
16
+
17
+ ${chalk_1.default.cyan.bold("Slash Commands:")}
18
+ ${chalk_1.default.yellow("/help")} Show this help message
19
+ ${chalk_1.default.yellow("/fix")} Ask AI to fix the last issue
20
+ ${chalk_1.default.yellow("/explain")} Ask AI to explain code or concept
21
+ ${chalk_1.default.yellow("/refactor")} Ask AI to refactor selected code
22
+ ${chalk_1.default.yellow("/review")} Run code review on current project
23
+ ${chalk_1.default.yellow("/image")} Generate an image from a prompt
24
+ ${chalk_1.default.yellow("/terminal")} Execute a terminal command
25
+ ${chalk_1.default.yellow("/files")} List project files
26
+ ${chalk_1.default.yellow("/git")} Git assistant commands
27
+
28
+ ${chalk_1.default.cyan.bold("Session Commands:")}
29
+ ${chalk_1.default.yellow("/clear")} Clear current chat history
30
+ ${chalk_1.default.yellow("/history")} Show chat history
31
+ ${chalk_1.default.yellow("/save")} Save current session
32
+ ${chalk_1.default.yellow("/load")} Load a previous session
33
+ ${chalk_1.default.yellow("/sessions")} List all saved sessions
34
+
35
+ ${chalk_1.default.cyan.bold("Config Commands:")}
36
+ ${chalk_1.default.yellow("/models")} List available models
37
+ ${chalk_1.default.yellow("/settings")} View or change settings
38
+
39
+ ${chalk_1.default.cyan.bold("Utility:")}
40
+ ${chalk_1.default.yellow("Ctrl+C")} Exit the CLI
41
+ ${chalk_1.default.yellow("Ctrl+L")} Clear the screen
42
+ ${(0, ui_1.dim)((0, ui_1.divider)())}
43
+ `;
44
+ exports.GIT_HELP = `
45
+ ${(0, ui_1.header)("Git Assistant")}
46
+
47
+ ${chalk_1.default.yellow("/git status")} Show working tree status
48
+ ${chalk_1.default.yellow("/git diff")} Show unstaged changes
49
+ ${chalk_1.default.yellow("/git log")} Show recent commits
50
+ ${chalk_1.default.yellow("/git branch")} List branches
51
+ ${chalk_1.default.yellow("/git commit")} Auto-generate commit message
52
+ `;
53
+ exports.MODELS = {
54
+ openai: [
55
+ "gpt-4o",
56
+ "gpt-4o-mini",
57
+ "gpt-4-turbo",
58
+ "gpt-3.5-turbo",
59
+ "o1-preview",
60
+ "o1-mini",
61
+ ],
62
+ anthropic: [
63
+ "claude-sonnet-4-20250514",
64
+ "claude-3-5-haiku-20241022",
65
+ "claude-3-opus-20240229",
66
+ ],
67
+ gemini: [
68
+ "gemini-2.0-flash",
69
+ "gemini-1.5-pro",
70
+ "gemini-1.5-flash",
71
+ ],
72
+ groq: [
73
+ "llama-3.3-70b-versatile",
74
+ "llama-3.1-8b-instant",
75
+ "mixtral-8x7b-32768",
76
+ "gemma2-9b-it",
77
+ ],
78
+ };
79
+ function printModelsList(provider) {
80
+ const models = exports.MODELS[provider] || exports.MODELS.openai;
81
+ let output = `\n${(0, ui_1.header)("Available Models")}Provider: ${chalk_1.default.cyan(provider)}\n\n`;
82
+ models.forEach((m, i) => {
83
+ output += ` ${chalk_1.default.dim(`${i + 1}.`)} ${chalk_1.default.yellow(m)}\n`;
84
+ });
85
+ output += "\n" + (0, ui_1.dim)("Use /settings to change model") + "\n";
86
+ return output;
87
+ }
88
+ function printSettings(config) {
89
+ let output = `\n${(0, ui_1.header)("Current Settings")}`;
90
+ output += ` ${chalk_1.default.dim("Provider:")} ${chalk_1.default.cyan(String(config.provider))}\n`;
91
+ output += ` ${chalk_1.default.dim("Model:")} ${chalk_1.default.cyan(String(config.model))}\n`;
92
+ output += ` ${chalk_1.default.dim("Temp:")} ${chalk_1.default.cyan(String(config.temperature))}\n`;
93
+ output += ` ${chalk_1.default.dim("MaxTokens:")} ${chalk_1.default.cyan(String(config.maxTokens))}\n`;
94
+ output += ` ${chalk_1.default.dim("API Key:")} ${chalk_1.default.cyan(config.apiKey ? "***" + String(config.apiKey).slice(-4) : "(not set)")}\n`;
95
+ return output;
96
+ }
97
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { AIService } from "../ai";
2
+ export declare function imageCommand(prompt: string, ai: AIService): Promise<string>;
3
+ //# sourceMappingURL=image-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-cmd.d.ts","sourceRoot":"","sources":["../../src/commands/image-cmd.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGlC,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CA8BjF"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.imageCommand = imageCommand;
7
+ const promises_1 = __importDefault(require("fs/promises"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ const ora_1 = __importDefault(require("ora"));
11
+ const ui_1 = require("../ui");
12
+ async function imageCommand(prompt, ai) {
13
+ if (!prompt.trim()) {
14
+ return (0, ui_1.error)("Usage: /image <prompt>");
15
+ }
16
+ const spinner = (0, ora_1.default)("Generating image...").start();
17
+ try {
18
+ const imagesDir = path_1.default.join(process.cwd(), "images");
19
+ await promises_1.default.mkdir(imagesDir, { recursive: true });
20
+ const timestamp = Date.now();
21
+ const filename = `devcore-${timestamp}.png`;
22
+ const outputPath = path_1.default.join(imagesDir, filename);
23
+ const buffer = await ai.generateImage(prompt, "1024x1024");
24
+ await promises_1.default.writeFile(outputPath, buffer);
25
+ spinner.stop();
26
+ return [
27
+ (0, ui_1.header)("Image Generated"),
28
+ ` ${(0, ui_1.success)(`Saved to: ${chalk_1.default.cyan(outputPath)}`)}`,
29
+ ` ${chalk_1.default.dim("Prompt:")} ${prompt}`,
30
+ ` ${chalk_1.default.dim("Size:")} 1024x1024`,
31
+ ].join("\n");
32
+ }
33
+ catch (err) {
34
+ spinner.stop();
35
+ return (0, ui_1.error)("Image generation failed: " + err.message);
36
+ }
37
+ }
38
+ //# sourceMappingURL=image-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-cmd.js","sourceRoot":"","sources":["../../src/commands/image-cmd.ts"],"names":[],"mappings":";;;;;AAOA,oCA8BC;AArCD,2DAA6B;AAC7B,gDAAwB;AACxB,kDAA0B;AAC1B,8CAAsB;AAEtB,8BAA+C;AAExC,KAAK,UAAU,YAAY,CAAC,MAAc,EAAE,EAAa;IAC9D,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACnB,OAAO,IAAA,UAAK,EAAC,wBAAwB,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEnD,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;QACrD,MAAM,kBAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,WAAW,SAAS,MAAM,CAAC;QAC5C,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAElD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC3D,MAAM,kBAAE,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAEvC,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,OAAO;YACL,IAAA,WAAM,EAAC,iBAAiB,CAAC;YACzB,KAAK,IAAA,YAAO,EAAC,aAAa,eAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;YACrD,KAAK,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,MAAM,EAAE;YACrC,KAAK,eAAK,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc;SACtC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,IAAA,UAAK,EAAC,2BAA2B,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { AIService } from "../ai";
2
+ import { AppConfig, Session, ProjectContext } from "../types";
3
+ export declare function handleCommand(input: string, config: AppConfig, session: Session, ai: AIService, ctx: ProjectContext): Promise<{
4
+ command: string;
5
+ config?: AppConfig;
6
+ session?: Session;
7
+ } | null>;
8
+ export declare function chatLoop(config: AppConfig, session: Session, ai: AIService): Promise<void>;
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAe,cAAc,EAAE,MAAM,UAAU,CAAC;AAe3E,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,SAAS,EACb,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAAC,CAsJ5E;AAmED,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,SAAS,GACZ,OAAO,CAAC,IAAI,CAAC,CA+Df"}
@@ -0,0 +1,263 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.handleCommand = handleCommand;
7
+ exports.chatLoop = chatLoop;
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const inquirer_1 = __importDefault(require("inquirer"));
10
+ const ora_1 = __importDefault(require("ora"));
11
+ const stream_renderer_1 = require("../ui/stream-renderer");
12
+ const memory_1 = require("../memory");
13
+ const filesystem_1 = require("../filesystem");
14
+ const utils_1 = require("../utils");
15
+ const ui_1 = require("../ui");
16
+ const help_1 = require("./help");
17
+ const config_cmd_1 = require("./config-cmd");
18
+ const git_cmd_1 = require("./git-cmd");
19
+ const image_cmd_1 = require("./image-cmd");
20
+ const review_cmd_1 = require("./review-cmd");
21
+ const files_cmd_1 = require("./files-cmd");
22
+ const terminal_cmd_1 = require("./terminal-cmd");
23
+ async function handleCommand(input, config, session, ai, ctx) {
24
+ const trimmed = input.trim();
25
+ if (!trimmed.startsWith("/"))
26
+ return null;
27
+ const parts = trimmed.split(/\s+/);
28
+ const cmd = parts[0].toLowerCase();
29
+ const args = parts.slice(1).join(" ");
30
+ switch (cmd) {
31
+ case "/help":
32
+ console.log(help_1.HELP_TEXT);
33
+ break;
34
+ case "/clear":
35
+ (0, memory_1.clearSession)(session);
36
+ console.log((0, ui_1.success)("Chat history cleared"));
37
+ break;
38
+ case "/history":
39
+ if (session.messages.length === 0) {
40
+ console.log((0, ui_1.info)("No messages yet"));
41
+ }
42
+ else {
43
+ console.log((0, ui_1.header)("Chat History"));
44
+ session.messages.forEach((m) => {
45
+ const role = m.role === "user" ? (0, ui_1.cyan)("You") : chalk_1.default.magenta("AI");
46
+ const preview = m.content.slice(0, 120).replace(/\n/g, " ");
47
+ console.log(` ${role}: ${chalk_1.default.dim(preview)}...`);
48
+ });
49
+ }
50
+ break;
51
+ case "/save":
52
+ await (0, memory_1.saveSession)(session);
53
+ console.log((0, ui_1.success)(`Session saved: ${session.id}`));
54
+ break;
55
+ case "/load": {
56
+ const sessions = await (0, memory_1.listSessions)();
57
+ if (sessions.length === 0) {
58
+ console.log((0, ui_1.info)("No saved sessions"));
59
+ break;
60
+ }
61
+ const { chosen } = await inquirer_1.default.prompt([
62
+ {
63
+ type: "list",
64
+ name: "chosen",
65
+ message: "Select session to load:",
66
+ choices: sessions.map((s) => ({
67
+ name: `${s.id} — ${new Date(s.updatedAt).toLocaleString()} — ${s.messages.length} messages`,
68
+ value: s.id,
69
+ })),
70
+ },
71
+ ]);
72
+ const loaded = await (0, memory_1.loadSession)(chosen);
73
+ if (loaded) {
74
+ console.log((0, ui_1.success)(`Loaded session ${loaded.id} (${loaded.messages.length} messages)`));
75
+ return { command: "load", session: loaded };
76
+ }
77
+ break;
78
+ }
79
+ case "/sessions": {
80
+ const sessions = await (0, memory_1.listSessions)();
81
+ if (sessions.length === 0) {
82
+ console.log((0, ui_1.info)("No saved sessions"));
83
+ }
84
+ else {
85
+ console.log((0, ui_1.header)("Saved Sessions"));
86
+ sessions.forEach((s) => {
87
+ console.log(` ${chalk_1.default.yellow(s.id)} — ${new Date(s.updatedAt).toLocaleString()} — ${s.messages.length} messages`);
88
+ });
89
+ }
90
+ break;
91
+ }
92
+ case "/settings":
93
+ console.log((0, help_1.printSettings)(config));
94
+ break;
95
+ case "/models":
96
+ console.log((0, help_1.printModelsList)(config.provider));
97
+ break;
98
+ case "/config": {
99
+ const updated = await (0, config_cmd_1.configCommand)(config);
100
+ ai.updateConfig(updated);
101
+ return { command: "config", config: updated };
102
+ }
103
+ case "/git":
104
+ console.log(await (0, git_cmd_1.gitCommand)(args, ai));
105
+ break;
106
+ case "/commit":
107
+ console.log(await (0, git_cmd_1.gitCommand)("commit", ai));
108
+ break;
109
+ case "/diff":
110
+ console.log(await (0, git_cmd_1.gitCommand)("diff", ai));
111
+ break;
112
+ case "/branch":
113
+ console.log(await (0, git_cmd_1.gitCommand)("branch", ai));
114
+ break;
115
+ case "/image":
116
+ console.log(await (0, image_cmd_1.imageCommand)(args, ai));
117
+ break;
118
+ case "/review":
119
+ console.log(await (0, review_cmd_1.reviewCommand)(args, ctx, ai));
120
+ break;
121
+ case "/files":
122
+ console.log((0, files_cmd_1.filesCommand)(ctx));
123
+ break;
124
+ case "/terminal":
125
+ case "/exec":
126
+ case "/run":
127
+ console.log(await (0, terminal_cmd_1.terminalCommand)(args));
128
+ break;
129
+ case "/fix": {
130
+ const fixPrompt = args || "Fix any issues you can find in the recent code";
131
+ (0, memory_1.addMessage)(session, "user", fixPrompt);
132
+ await streamResponse(session, ai, ctx);
133
+ break;
134
+ }
135
+ case "/explain": {
136
+ const explainPrompt = args || "Explain what this code does and how it works";
137
+ (0, memory_1.addMessage)(session, "user", explainPrompt);
138
+ await streamResponse(session, ai, ctx);
139
+ break;
140
+ }
141
+ case "/refactor": {
142
+ const refactorPrompt = args || "Refactor the code for better readability and performance";
143
+ (0, memory_1.addMessage)(session, "user", refactorPrompt);
144
+ await streamResponse(session, ai, ctx);
145
+ break;
146
+ }
147
+ default:
148
+ console.log((0, ui_1.warning)(`Unknown command: ${cmd}. Type /help for available commands.`));
149
+ }
150
+ return { command: cmd };
151
+ }
152
+ async function streamResponse(session, ai, ctx) {
153
+ const renderer = new stream_renderer_1.StreamRenderer();
154
+ const messages = (0, memory_1.getRecentMessages)(session, 30);
155
+ let fullResponse = "";
156
+ const spinner = (0, ora_1.default)({ text: "Thinking...", spinner: "dots" }).start();
157
+ try {
158
+ let started = false;
159
+ for await (const chunk of ai.streamChat(messages, ctx)) {
160
+ if (!chunk.done) {
161
+ if (!started) {
162
+ spinner.stop();
163
+ process.stdout.write((0, ui_1.prompt)());
164
+ started = true;
165
+ }
166
+ renderer.append(chunk.content);
167
+ fullResponse += chunk.content;
168
+ }
169
+ }
170
+ renderer.forceFlush();
171
+ if (!started)
172
+ spinner.stop();
173
+ console.log("");
174
+ }
175
+ catch (err) {
176
+ spinner.stop();
177
+ const errMsg = (0, ui_1.error)(err.message);
178
+ console.log(errMsg);
179
+ fullResponse = `[Error: ${err.message}]`;
180
+ }
181
+ (0, memory_1.addMessage)(session, "assistant", fullResponse);
182
+ return fullResponse;
183
+ }
184
+ async function handleFileOperations(response, ai, ctx) {
185
+ const codeBlocks = (0, utils_1.extractCodeBlocks)(response);
186
+ for (const block of codeBlocks) {
187
+ if (!block.lang || block.lang === "text")
188
+ continue;
189
+ const looksLikeFile = block.code.includes("import ") ||
190
+ block.code.includes("export ") ||
191
+ block.code.includes("function ") ||
192
+ block.code.includes("class ") ||
193
+ block.code.includes("def ") ||
194
+ block.code.includes("fn ") ||
195
+ block.code.includes("<div") ||
196
+ block.code.includes("<html");
197
+ if (looksLikeFile) {
198
+ console.log((0, ui_1.info)(`Code block detected (${block.lang}). Use /terminal to save or create files.`));
199
+ }
200
+ }
201
+ }
202
+ async function chatLoop(config, session, ai) {
203
+ let ctx;
204
+ const spinner = (0, ora_1.default)("Scanning project...").start();
205
+ try {
206
+ ctx = await (0, filesystem_1.scanProject)(process.cwd());
207
+ spinner.succeed(`Project: ${chalk_1.default.cyan(ctx.framework)} — ${ctx.sourceFiles.length} source files`);
208
+ }
209
+ catch {
210
+ spinner.stop();
211
+ ctx = {
212
+ rootPath: process.cwd(),
213
+ packageJson: null,
214
+ framework: "unknown",
215
+ dependencies: [],
216
+ devDependencies: [],
217
+ structure: [],
218
+ configFiles: [],
219
+ sourceFiles: [],
220
+ };
221
+ }
222
+ while (true) {
223
+ try {
224
+ const { input } = await inquirer_1.default.prompt([
225
+ {
226
+ type: "input",
227
+ name: "input",
228
+ message: (0, ui_1.prompt)(),
229
+ prefix: "",
230
+ },
231
+ ]);
232
+ if (!input.trim())
233
+ continue;
234
+ if (input.trim().toLowerCase() === "exit" || input.trim().toLowerCase() === "quit") {
235
+ console.log(chalk_1.default.dim("\nGoodbye! 👋\n"));
236
+ break;
237
+ }
238
+ if (input.trim() === "\u0003") {
239
+ console.log(chalk_1.default.dim("\nGoodbye! 👋\n"));
240
+ break;
241
+ }
242
+ const cmdResult = await handleCommand(input, config, session, ai, ctx);
243
+ if (cmdResult) {
244
+ if (cmdResult.config)
245
+ config = cmdResult.config;
246
+ if (cmdResult.session)
247
+ session = cmdResult.session;
248
+ continue;
249
+ }
250
+ (0, memory_1.addMessage)(session, "user", input);
251
+ const response = await streamResponse(session, ai, ctx);
252
+ await handleFileOperations(response, ai, ctx);
253
+ }
254
+ catch (err) {
255
+ if (err.name === "ExitPromptError" || err.message?.includes("User force closed")) {
256
+ console.log(chalk_1.default.dim("\nGoodbye! 👋\n"));
257
+ break;
258
+ }
259
+ console.log((0, ui_1.error)(err.message || "An error occurred"));
260
+ }
261
+ }
262
+ }
263
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { AIService } from "../ai";
2
+ import { ProjectContext } from "../types";
3
+ export declare function reviewCommand(target: string, ctx: ProjectContext, ai: AIService): Promise<string>;
4
+ //# sourceMappingURL=review-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-cmd.d.ts","sourceRoot":"","sources":["../../src/commands/review-cmd.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1C,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,cAAc,EACnB,EAAE,EAAE,SAAS,GACZ,OAAO,CAAC,MAAM,CAAC,CAiEjB"}