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 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { Session, ChatMessage } from "../types";
2
+ export declare function createSession(): Promise<Session>;
3
+ export declare function saveSession(session: Session): Promise<void>;
4
+ export declare function loadSession(id: string): Promise<Session | null>;
5
+ export declare function listSessions(): Promise<Session[]>;
6
+ export declare function deleteSession(id: string): Promise<boolean>;
7
+ export declare function addMessage(session: Session, role: "user" | "assistant" | "system", content: string): ChatMessage;
8
+ export declare function getRecentMessages(session: Session, count?: number): ChatMessage[];
9
+ export declare function clearSession(session: Session): void;
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAShD,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAWtD;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAKjE;AAED,wBAAsB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAQrE;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAcvD;AAED,wBAAsB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOhE;AAED,wBAAgB,UAAU,CACxB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,EACrC,OAAO,EAAE,MAAM,GACd,WAAW,CAKb;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,OAAO,EAChB,KAAK,GAAE,MAAW,GACjB,WAAW,EAAE,CAEf;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAGnD"}
@@ -0,0 +1,88 @@
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.createSession = createSession;
7
+ exports.saveSession = saveSession;
8
+ exports.loadSession = loadSession;
9
+ exports.listSessions = listSessions;
10
+ exports.deleteSession = deleteSession;
11
+ exports.addMessage = addMessage;
12
+ exports.getRecentMessages = getRecentMessages;
13
+ exports.clearSession = clearSession;
14
+ const promises_1 = __importDefault(require("fs/promises"));
15
+ const path_1 = __importDefault(require("path"));
16
+ const utils_1 = require("../utils");
17
+ const SESSIONS_DIR = path_1.default.join(process.cwd(), ".devcore", "sessions");
18
+ async function ensureDir() {
19
+ await promises_1.default.mkdir(SESSIONS_DIR, { recursive: true });
20
+ }
21
+ async function createSession() {
22
+ await ensureDir();
23
+ const session = {
24
+ id: (0, utils_1.generateId)(),
25
+ messages: [],
26
+ createdAt: Date.now(),
27
+ updatedAt: Date.now(),
28
+ workingDirectory: process.cwd(),
29
+ };
30
+ await saveSession(session);
31
+ return session;
32
+ }
33
+ async function saveSession(session) {
34
+ await ensureDir();
35
+ session.updatedAt = Date.now();
36
+ const filePath = path_1.default.join(SESSIONS_DIR, `${session.id}.json`);
37
+ await promises_1.default.writeFile(filePath, JSON.stringify(session, null, 2), "utf-8");
38
+ }
39
+ async function loadSession(id) {
40
+ try {
41
+ const filePath = path_1.default.join(SESSIONS_DIR, `${id}.json`);
42
+ const raw = await promises_1.default.readFile(filePath, "utf-8");
43
+ return JSON.parse(raw);
44
+ }
45
+ catch {
46
+ return null;
47
+ }
48
+ }
49
+ async function listSessions() {
50
+ await ensureDir();
51
+ try {
52
+ const files = await promises_1.default.readdir(SESSIONS_DIR);
53
+ const sessions = [];
54
+ for (const file of files) {
55
+ if (!file.endsWith(".json"))
56
+ continue;
57
+ const raw = await promises_1.default.readFile(path_1.default.join(SESSIONS_DIR, file), "utf-8");
58
+ sessions.push(JSON.parse(raw));
59
+ }
60
+ return sessions.sort((a, b) => b.updatedAt - a.updatedAt);
61
+ }
62
+ catch {
63
+ return [];
64
+ }
65
+ }
66
+ async function deleteSession(id) {
67
+ try {
68
+ await promises_1.default.unlink(path_1.default.join(SESSIONS_DIR, `${id}.json`));
69
+ return true;
70
+ }
71
+ catch {
72
+ return false;
73
+ }
74
+ }
75
+ function addMessage(session, role, content) {
76
+ const msg = { role, content, timestamp: Date.now() };
77
+ session.messages.push(msg);
78
+ session.updatedAt = Date.now();
79
+ return msg;
80
+ }
81
+ function getRecentMessages(session, count = 20) {
82
+ return session.messages.slice(-count);
83
+ }
84
+ function clearSession(session) {
85
+ session.messages = [];
86
+ session.updatedAt = Date.now();
87
+ }
88
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { CommandExecution } from "../types";
2
+ export interface ExecResult {
3
+ exitCode: number;
4
+ stdout: string;
5
+ stderr: string;
6
+ success: boolean;
7
+ }
8
+ export declare function executeCommand(cmd: CommandExecution, onStdout?: (data: string) => void, onStderr?: (data: string) => void): Promise<ExecResult>;
9
+ export declare function parseCommand(input: string): CommandExecution;
10
+ export declare function formatExecResult(result: ExecResult): string;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/terminal/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,cAAc,CAClC,GAAG,EAAE,gBAAgB,EACrB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EACjC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,UAAU,CAAC,CAyBrB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAU5D;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAiB3D"}
@@ -0,0 +1,64 @@
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.executeCommand = executeCommand;
7
+ exports.parseCommand = parseCommand;
8
+ exports.formatExecResult = formatExecResult;
9
+ const execa = require("execa");
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ async function executeCommand(cmd, onStdout, onStderr) {
12
+ try {
13
+ const result = await execa(cmd.command, cmd.args, {
14
+ cwd: cmd.cwd,
15
+ shell: true,
16
+ env: { ...process.env, FORCE_COLOR: "0" },
17
+ });
18
+ if (onStdout && result.stdout)
19
+ onStdout(result.stdout);
20
+ if (onStderr && result.stderr)
21
+ onStderr(result.stderr);
22
+ return {
23
+ exitCode: result.exitCode,
24
+ stdout: result.stdout,
25
+ stderr: result.stderr,
26
+ success: true,
27
+ };
28
+ }
29
+ catch (err) {
30
+ return {
31
+ exitCode: err.exitCode || 1,
32
+ stdout: err.stdout || "",
33
+ stderr: err.stderr || err.message || "Command failed",
34
+ success: false,
35
+ };
36
+ }
37
+ }
38
+ function parseCommand(input) {
39
+ const parts = input.trim().split(/\s+/);
40
+ const command = parts[0] || "";
41
+ const args = parts.slice(1);
42
+ return {
43
+ command,
44
+ args,
45
+ cwd: process.cwd(),
46
+ };
47
+ }
48
+ function formatExecResult(result) {
49
+ let output = "";
50
+ if (result.success) {
51
+ output += chalk_1.default.green(`✓ Command completed (exit ${result.exitCode})\n`);
52
+ }
53
+ else {
54
+ output += chalk_1.default.red(`✗ Command failed (exit ${result.exitCode})\n`);
55
+ }
56
+ if (result.stdout) {
57
+ output += chalk_1.default.dim("stdout:\n") + result.stdout + "\n";
58
+ }
59
+ if (result.stderr) {
60
+ output += chalk_1.default.yellow("stderr:\n") + result.stderr + "\n";
61
+ }
62
+ return output;
63
+ }
64
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/terminal/index.ts"],"names":[],"mappings":";;;;;AAWA,wCA6BC;AAED,oCAUC;AAED,4CAiBC;AAvED,+BAAgC;AAChC,kDAA0B;AAUnB,KAAK,UAAU,cAAc,CAClC,GAAqB,EACrB,QAAiC,EACjC,QAAiC;IAEjC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE;YAChD,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,KAAK,EAAE,IAAI;YACX,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE;SAC1C,CAAC,CAAC;QAEH,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM;YAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM;YAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEvD,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO;YACL,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,CAAC;YAC3B,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE;YACxB,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,gBAAgB;YACrD,OAAO,EAAE,KAAK;SACf,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAgB,YAAY,CAAC,KAAa;IACxC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE5B,OAAO;QACL,OAAO;QACP,IAAI;QACJ,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;KACnB,CAAC;AACJ,CAAC;AAED,SAAgB,gBAAgB,CAAC,MAAkB;IACjD,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,IAAI,eAAK,CAAC,KAAK,CAAC,6BAA6B,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC;IAC3E,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,eAAK,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,IAAI,eAAK,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;IAC1D,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,IAAI,eAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;IAC7D,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,67 @@
1
+ export interface AppConfig {
2
+ apiKey: string;
3
+ model: string;
4
+ temperature: number;
5
+ maxTokens: number;
6
+ provider: "openai" | "anthropic" | "gemini" | "groq";
7
+ theme: "default" | "minimal";
8
+ }
9
+ export interface ChatMessage {
10
+ role: "system" | "user" | "assistant";
11
+ content: string;
12
+ timestamp: number;
13
+ }
14
+ export interface Session {
15
+ id: string;
16
+ messages: ChatMessage[];
17
+ createdAt: number;
18
+ updatedAt: number;
19
+ workingDirectory: string;
20
+ }
21
+ export interface ProjectContext {
22
+ rootPath: string;
23
+ packageJson: Record<string, unknown> | null;
24
+ framework: string;
25
+ dependencies: string[];
26
+ devDependencies: string[];
27
+ structure: string[];
28
+ configFiles: string[];
29
+ sourceFiles: string[];
30
+ }
31
+ export interface FileOperation {
32
+ type: "create" | "modify" | "rename" | "delete";
33
+ path: string;
34
+ newPath?: string;
35
+ content?: string;
36
+ backup?: string;
37
+ }
38
+ export interface CommandExecution {
39
+ command: string;
40
+ cwd: string;
41
+ args: string[];
42
+ }
43
+ export interface AIStreamChunk {
44
+ content: string;
45
+ done: boolean;
46
+ }
47
+ export interface CodeReviewResult {
48
+ bugs: string[];
49
+ security: string[];
50
+ readability: string[];
51
+ performance: string[];
52
+ architecture: string[];
53
+ suggestions: string[];
54
+ }
55
+ export interface GitStatus {
56
+ branch: string;
57
+ staged: string[];
58
+ modified: string[];
59
+ untracked: string[];
60
+ clean: boolean;
61
+ }
62
+ export interface ImageGenerationRequest {
63
+ prompt: string;
64
+ size?: "256x256" | "512x512" | "1024x1024";
65
+ outputPath: string;
66
+ }
67
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IACrD,KAAK,EAAE,SAAS,GAAG,SAAS,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;IAC3C,UAAU,EAAE,MAAM,CAAC;CACpB"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ export declare const LOGO: string;
2
+ export declare const MINI_LOGO: string;
3
+ export declare function success(msg: string): string;
4
+ export declare function error(msg: string): string;
5
+ export declare function warning(msg: string): string;
6
+ export declare function info(msg: string): string;
7
+ export declare function dim(msg: string): string;
8
+ export declare function bold(msg: string): string;
9
+ export declare function cyan(msg: string): string;
10
+ export declare function header(msg: string): string;
11
+ export declare function divider(): string;
12
+ export declare function prompt(): string;
13
+ export declare function assistantPrefix(): string;
14
+ export declare function renderMarkdown(text: string): string;
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,IAAI,QAQhB,CAAC;AAEF,eAAO,MAAM,SAAS,QAA+B,CAAC;AAEtD,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAExC;AAED,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEvC;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAExC;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAExC;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE1C;AAED,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAED,wBAAgB,MAAM,IAAI,MAAM,CAE/B;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAanD"}
@@ -0,0 +1,74 @@
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.MINI_LOGO = exports.LOGO = void 0;
7
+ exports.success = success;
8
+ exports.error = error;
9
+ exports.warning = warning;
10
+ exports.info = info;
11
+ exports.dim = dim;
12
+ exports.bold = bold;
13
+ exports.cyan = cyan;
14
+ exports.header = header;
15
+ exports.divider = divider;
16
+ exports.prompt = prompt;
17
+ exports.assistantPrefix = assistantPrefix;
18
+ exports.renderMarkdown = renderMarkdown;
19
+ const chalk_1 = __importDefault(require("chalk"));
20
+ exports.LOGO = `
21
+ ${chalk_1.default.cyan("██╗ ██╗███████╗██╗ ██╗██╗ ██████╗")}
22
+ ${chalk_1.default.cyan("██║ ██║██╔════╝╚██╗ ██╔╝██║██╔════╝")}
23
+ ${chalk_1.default.cyan("██║ ██║█████╗ ╚████╔╝ ██║██║ ")}
24
+ ${chalk_1.default.cyan("╚██╗ ██╔╝██╔══╝ ╚██╔╝ ██║██║ ")}
25
+ ${chalk_1.default.cyan(" ╚████╔╝ ███████╗ ██║ ██║╚██████╗")}
26
+ ${chalk_1.default.cyan(" ╚═══╝ ╚══════╝ ╚═╝ ╚═╝ ╚═════╝")}
27
+ ${chalk_1.default.gray(" AI-Powered Coding Assistant v1.0.0")}
28
+ `;
29
+ exports.MINI_LOGO = chalk_1.default.cyan.bold("⚡ devcore");
30
+ function success(msg) {
31
+ return chalk_1.default.green("✓ ") + msg;
32
+ }
33
+ function error(msg) {
34
+ return chalk_1.default.red("✗ ") + msg;
35
+ }
36
+ function warning(msg) {
37
+ return chalk_1.default.yellow("⚠ ") + msg;
38
+ }
39
+ function info(msg) {
40
+ return chalk_1.default.blue("ℹ ") + msg;
41
+ }
42
+ function dim(msg) {
43
+ return chalk_1.default.dim(msg);
44
+ }
45
+ function bold(msg) {
46
+ return chalk_1.default.bold(msg);
47
+ }
48
+ function cyan(msg) {
49
+ return chalk_1.default.cyan(msg);
50
+ }
51
+ function header(msg) {
52
+ return chalk_1.default.bold.cyan(`\n━━━ ${msg} ━━━\n`);
53
+ }
54
+ function divider() {
55
+ return chalk_1.default.dim("─".repeat(60));
56
+ }
57
+ function prompt() {
58
+ return chalk_1.default.cyan("▸ ");
59
+ }
60
+ function assistantPrefix() {
61
+ return chalk_1.default.magenta("◆ ");
62
+ }
63
+ function renderMarkdown(text) {
64
+ let out = text;
65
+ out = out.replace(/```(\w+)?\n([\s\S]*?)```/g, (_m, lang, code) => {
66
+ const highlighted = code.trim();
67
+ return chalk_1.default.dim("```" + (lang || "") + "\n") + highlighted + chalk_1.default.dim("\n```");
68
+ });
69
+ out = out.replace(/\*\*(.+?)\*\*/g, (_m, p1) => chalk_1.default.bold(p1));
70
+ out = out.replace(/\*(.+?)\*/g, (_m, p1) => chalk_1.default.italic(p1));
71
+ out = out.replace(/`([^`]+)`/g, (_m, p1) => chalk_1.default.cyan(p1));
72
+ return out;
73
+ }
74
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":";;;;;;AAcA,0BAEC;AAED,sBAEC;AAED,0BAEC;AAED,oBAEC;AAED,kBAEC;AAED,oBAEC;AAED,oBAEC;AAED,wBAEC;AAED,0BAEC;AAED,wBAEC;AAED,0CAEC;AAED,wCAaC;AAvED,kDAA0B;AAEb,QAAA,IAAI,GAAG;EAClB,eAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC;EACnD,eAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC;EACnD,eAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC;EACnD,eAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC;EACnD,eAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC;EACnD,eAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC;EACnD,eAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC;CACpD,CAAC;AAEW,QAAA,SAAS,GAAG,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAEtD,SAAgB,OAAO,CAAC,GAAW;IACjC,OAAO,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;AACjC,CAAC;AAED,SAAgB,KAAK,CAAC,GAAW;IAC/B,OAAO,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;AAC/B,CAAC;AAED,SAAgB,OAAO,CAAC,GAAW;IACjC,OAAO,eAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;AAClC,CAAC;AAED,SAAgB,IAAI,CAAC,GAAW;IAC9B,OAAO,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;AAChC,CAAC;AAED,SAAgB,GAAG,CAAC,GAAW;IAC7B,OAAO,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,SAAgB,IAAI,CAAC,GAAW;IAC9B,OAAO,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,SAAgB,IAAI,CAAC,GAAW;IAC9B,OAAO,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,SAAgB,MAAM,CAAC,GAAW;IAChC,OAAO,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAC;AAC/C,CAAC;AAED,SAAgB,OAAO;IACrB,OAAO,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,SAAgB,MAAM;IACpB,OAAO,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAgB,eAAe;IAC7B,OAAO,eAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,SAAgB,cAAc,CAAC,IAAY;IACzC,IAAI,GAAG,GAAG,IAAI,CAAC;IAEf,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,2BAA2B,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QAChE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,OAAO,eAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,WAAW,GAAG,eAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,eAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAChE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,eAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9D,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,eAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5D,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,15 @@
1
+ export declare class StreamRenderer {
2
+ private buffer;
3
+ private inCodeBlock;
4
+ private codeBlockLang;
5
+ private codeBuffer;
6
+ append(token: string): void;
7
+ private processToken;
8
+ private detectCodeBlockStart;
9
+ private flushCodeBlock;
10
+ private colorInlineCode;
11
+ forceFlush(): void;
12
+ getFullOutput(): string;
13
+ reset(): void;
14
+ }
15
+ //# sourceMappingURL=stream-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-renderer.d.ts","sourceRoot":"","sources":["../../src/ui/stream-renderer.ts"],"names":[],"mappings":"AAEA,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,UAAU,CAAgB;IAElC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK3B,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,oBAAoB;IAiB5B,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,eAAe;IAIvB,UAAU,IAAI,IAAI;IAMlB,aAAa,IAAI,MAAM;IAIvB,KAAK,IAAI,IAAI;CAMd"}
@@ -0,0 +1,78 @@
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.StreamRenderer = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ class StreamRenderer {
9
+ constructor() {
10
+ this.buffer = "";
11
+ this.inCodeBlock = false;
12
+ this.codeBlockLang = "";
13
+ this.codeBuffer = [];
14
+ }
15
+ append(token) {
16
+ this.buffer += token;
17
+ this.processToken(token);
18
+ }
19
+ processToken(token) {
20
+ if (this.inCodeBlock) {
21
+ if (token.includes("```")) {
22
+ this.flushCodeBlock();
23
+ return;
24
+ }
25
+ this.codeBuffer.push(token);
26
+ process.stdout.write(chalk_1.default.dim(token));
27
+ return;
28
+ }
29
+ if (this.detectCodeBlockStart(token)) {
30
+ return;
31
+ }
32
+ const colored = this.colorInlineCode(token);
33
+ process.stdout.write(colored);
34
+ }
35
+ detectCodeBlockStart(token) {
36
+ const tripleBacktick = "```";
37
+ const recent = this.buffer.slice(-10);
38
+ if (recent.includes(tripleBacktick)) {
39
+ const match = recent.match(/```(\w*)/);
40
+ if (match) {
41
+ this.inCodeBlock = true;
42
+ this.codeBlockLang = match[1] || "";
43
+ this.codeBuffer = [];
44
+ const prefix = chalk_1.default.dim("```" + this.codeBlockLang);
45
+ process.stdout.write("\r" + prefix + "\n");
46
+ return true;
47
+ }
48
+ }
49
+ return false;
50
+ }
51
+ flushCodeBlock() {
52
+ this.inCodeBlock = false;
53
+ const code = this.codeBuffer.join("");
54
+ process.stdout.write(code);
55
+ process.stdout.write(chalk_1.default.dim("\n```\n"));
56
+ this.codeBuffer = [];
57
+ this.codeBlockLang = "";
58
+ }
59
+ colorInlineCode(text) {
60
+ return text.replace(/`([^`]+)`/g, (_m, p1) => chalk_1.default.cyan(p1));
61
+ }
62
+ forceFlush() {
63
+ if (this.inCodeBlock) {
64
+ this.flushCodeBlock();
65
+ }
66
+ }
67
+ getFullOutput() {
68
+ return this.buffer;
69
+ }
70
+ reset() {
71
+ this.buffer = "";
72
+ this.inCodeBlock = false;
73
+ this.codeBuffer = [];
74
+ this.codeBlockLang = "";
75
+ }
76
+ }
77
+ exports.StreamRenderer = StreamRenderer;
78
+ //# sourceMappingURL=stream-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-renderer.js","sourceRoot":"","sources":["../../src/ui/stream-renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export declare function generateId(): string;
2
+ export declare function formatTimestamp(ts: number): string;
3
+ export declare function truncate(str: string, maxLen: number): string;
4
+ export declare function sanitizePath(p: string): string;
5
+ export declare function escapeShellArg(arg: string): string;
6
+ export declare function isDangerousCommand(command: string): boolean;
7
+ export declare function extractCodeBlocks(text: string): {
8
+ lang: string;
9
+ code: string;
10
+ }[];
11
+ export declare function sleep(ms: number): Promise<void>;
12
+ export declare function pluralize(count: number, singular: string, plural?: string): string;
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAGA,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAG5D;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKlD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAe3D;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAQhF;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAElF"}
@@ -0,0 +1,68 @@
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.generateId = generateId;
7
+ exports.formatTimestamp = formatTimestamp;
8
+ exports.truncate = truncate;
9
+ exports.sanitizePath = sanitizePath;
10
+ exports.escapeShellArg = escapeShellArg;
11
+ exports.isDangerousCommand = isDangerousCommand;
12
+ exports.extractCodeBlocks = extractCodeBlocks;
13
+ exports.sleep = sleep;
14
+ exports.pluralize = pluralize;
15
+ const crypto_1 = __importDefault(require("crypto"));
16
+ const path_1 = __importDefault(require("path"));
17
+ function generateId() {
18
+ return crypto_1.default.randomBytes(8).toString("hex");
19
+ }
20
+ function formatTimestamp(ts) {
21
+ return new Date(ts).toLocaleString();
22
+ }
23
+ function truncate(str, maxLen) {
24
+ if (str.length <= maxLen)
25
+ return str;
26
+ return str.slice(0, maxLen - 3) + "...";
27
+ }
28
+ function sanitizePath(p) {
29
+ return path_1.default.normalize(p).replace(/^(\.\.[/\\])+/, "");
30
+ }
31
+ function escapeShellArg(arg) {
32
+ if (process.platform === "win32") {
33
+ return `"${arg.replace(/"/g, '\\"')}"`;
34
+ }
35
+ return `'${arg.replace(/'/g, "'\\''")}'`;
36
+ }
37
+ function isDangerousCommand(command) {
38
+ const dangerous = [
39
+ "rm -rf /",
40
+ "rm -rf ~",
41
+ "sudo rm",
42
+ "mkfs",
43
+ "dd if=",
44
+ "> /dev/sda",
45
+ "chmod -R 777 /",
46
+ "shutdown",
47
+ "reboot",
48
+ ":(){:|:&};:",
49
+ ];
50
+ const lower = command.toLowerCase().trim();
51
+ return dangerous.some((d) => lower.includes(d));
52
+ }
53
+ function extractCodeBlocks(text) {
54
+ const regex = /```(\w+)?\n([\s\S]*?)```/g;
55
+ const blocks = [];
56
+ let match;
57
+ while ((match = regex.exec(text)) !== null) {
58
+ blocks.push({ lang: match[1] || "", code: match[2].trim() });
59
+ }
60
+ return blocks;
61
+ }
62
+ function sleep(ms) {
63
+ return new Promise((resolve) => setTimeout(resolve, ms));
64
+ }
65
+ function pluralize(count, singular, plural) {
66
+ return count === 1 ? singular : (plural || singular + "s");
67
+ }
68
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;AAGA,gCAEC;AAED,0CAEC;AAED,4BAGC;AAED,oCAEC;AAED,wCAKC;AAED,gDAeC;AAED,8CAQC;AAED,sBAEC;AAED,8BAEC;AA5DD,oDAA4B;AAC5B,gDAAwB;AAExB,SAAgB,UAAU;IACxB,OAAO,gBAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED,SAAgB,eAAe,CAAC,EAAU;IACxC,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC;AACvC,CAAC;AAED,SAAgB,QAAQ,CAAC,GAAW,EAAE,MAAc;IAClD,IAAI,GAAG,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,GAAG,CAAC;IACrC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;AAC1C,CAAC;AAED,SAAgB,YAAY,CAAC,CAAS;IACpC,OAAO,cAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,SAAgB,cAAc,CAAC,GAAW;IACxC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;IACzC,CAAC;IACD,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AAC3C,CAAC;AAED,SAAgB,kBAAkB,CAAC,OAAe;IAChD,MAAM,SAAS,GAAG;QAChB,UAAU;QACV,UAAU;QACV,SAAS;QACT,MAAM;QACN,QAAQ;QACR,YAAY;QACZ,gBAAgB;QAChB,UAAU;QACV,QAAQ;QACR,aAAa;KACd,CAAC;IACF,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAC3C,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,SAAgB,iBAAiB,CAAC,IAAY;IAC5C,MAAM,KAAK,GAAG,2BAA2B,CAAC;IAC1C,MAAM,MAAM,GAAqC,EAAE,CAAC;IACpD,IAAI,KAAK,CAAC;IACV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,KAAK,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAgB,SAAS,CAAC,KAAa,EAAE,QAAgB,EAAE,MAAe;IACxE,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,QAAQ,GAAG,GAAG,CAAC,CAAC;AAC7D,CAAC"}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "devcore-ai",
3
+ "version": "1.0.0",
4
+ "description": "DevCore AI — AI-Powered Coding Assistant for the terminal",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "devcore": "dist/index.js"
8
+ },
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "scripts": {
13
+ "build": "tsc",
14
+ "dev": "ts-node src/index.ts",
15
+ "start": "node dist/index.js",
16
+ "typecheck": "tsc --noEmit",
17
+ "prepublishOnly": "npm run build"
18
+ },
19
+ "keywords": [
20
+ "ai",
21
+ "cli",
22
+ "coding",
23
+ "assistant",
24
+ "devcore",
25
+ "openai",
26
+ "anthropic",
27
+ "gemini",
28
+ "groq",
29
+ "code-review",
30
+ "terminal"
31
+ ],
32
+ "author": "DevCore",
33
+ "license": "MIT",
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "https://github.com/your-username/devcore-ai.git"
37
+ },
38
+ "engines": {
39
+ "node": ">=16.0.0"
40
+ },
41
+ "dependencies": {
42
+ "axios": "^1.7.0",
43
+ "chalk": "^4.1.2",
44
+ "cli-highlight": "^2.1.11",
45
+ "commander": "^12.1.0",
46
+ "dotenv": "^16.4.5",
47
+ "execa": "^5.1.1",
48
+ "inquirer": "^8.2.6",
49
+ "marked": "^12.0.2",
50
+ "ora": "^5.4.1",
51
+ "simple-git": "^3.25.0"
52
+ },
53
+ "devDependencies": {
54
+ "@types/inquirer": "^8.2.6",
55
+ "@types/node": "^20.14.0",
56
+ "typescript": "^5.4.5"
57
+ }
58
+ }