@mathzdevolper/phantomcode-cli 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 (42) hide show
  1. package/dist/commands/chat.d.ts +9 -0
  2. package/dist/commands/chat.js +68 -0
  3. package/dist/commands/chat.js.map +1 -0
  4. package/dist/commands/config.d.ts +1 -0
  5. package/dist/commands/config.js +57 -0
  6. package/dist/commands/config.js.map +1 -0
  7. package/dist/commands/interactive.d.ts +7 -0
  8. package/dist/commands/interactive.js +155 -0
  9. package/dist/commands/interactive.js.map +1 -0
  10. package/dist/commands/models.d.ts +5 -0
  11. package/dist/commands/models.js +38 -0
  12. package/dist/commands/models.js.map +1 -0
  13. package/dist/commands/session.d.ts +1 -0
  14. package/dist/commands/session.js +77 -0
  15. package/dist/commands/session.js.map +1 -0
  16. package/dist/config/manager.d.ts +14 -0
  17. package/dist/config/manager.js +49 -0
  18. package/dist/config/manager.js.map +1 -0
  19. package/dist/index.d.ts +2 -0
  20. package/dist/index.js +90 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/provider/dogrouter.d.ts +28 -0
  23. package/dist/provider/dogrouter.js +58 -0
  24. package/dist/provider/dogrouter.js.map +1 -0
  25. package/dist/session/manager.d.ts +20 -0
  26. package/dist/session/manager.js +112 -0
  27. package/dist/session/manager.js.map +1 -0
  28. package/dist/tui/colors.d.ts +15 -0
  29. package/dist/tui/colors.js +47 -0
  30. package/dist/tui/colors.js.map +1 -0
  31. package/package.json +34 -0
  32. package/src/commands/chat.ts +81 -0
  33. package/src/commands/config.ts +74 -0
  34. package/src/commands/interactive.ts +140 -0
  35. package/src/commands/models.ts +41 -0
  36. package/src/commands/session.ts +93 -0
  37. package/src/config/manager.ts +49 -0
  38. package/src/index.ts +109 -0
  39. package/src/provider/dogrouter.ts +82 -0
  40. package/src/session/manager.ts +93 -0
  41. package/src/tui/colors.ts +43 -0
  42. package/tsconfig.json +17 -0
@@ -0,0 +1,9 @@
1
+ interface ChatArgs {
2
+ message: string;
3
+ model?: string;
4
+ noSave?: boolean;
5
+ session?: string;
6
+ system?: string;
7
+ }
8
+ export declare function handleChat(args: ChatArgs): Promise<void>;
9
+ export {};
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleChat = handleChat;
4
+ const manager_1 = require("../config/manager");
5
+ const dogrouter_1 = require("../provider/dogrouter");
6
+ const colors_1 = require("../tui/colors");
7
+ const manager_2 = require("../session/manager");
8
+ async function handleChat(args) {
9
+ let apiKey;
10
+ try {
11
+ apiKey = (0, manager_1.getApiKey)();
12
+ }
13
+ catch {
14
+ console.error(colors_1.style.error("✗ API key nao configurada"));
15
+ console.log(colors_1.style.muted(" Execute: phantomcode config set <sua-api-key>"));
16
+ process.exit(1);
17
+ }
18
+ const model = args.model || (0, manager_1.getDefaultModel)();
19
+ const messages = [];
20
+ if (args.session) {
21
+ const session = (0, manager_2.getSession)(args.session);
22
+ if (session) {
23
+ messages.push(...session.messages.map((m) => ({ role: m.role, content: m.content })));
24
+ console.log(colors_1.style.muted(`↻ Continuando sessao: ${session.title}`));
25
+ }
26
+ }
27
+ if (args.system) {
28
+ messages.unshift({ role: "system", content: args.system });
29
+ }
30
+ messages.push({ role: "user", content: args.message });
31
+ console.log(colors_1.style.separator());
32
+ console.log(`${colors_1.style.label("Voce:")} ${args.message}`);
33
+ console.log(colors_1.style.separator());
34
+ try {
35
+ const response = await (0, dogrouter_1.chat)(apiKey, messages, { model });
36
+ console.log(`${colors_1.style.primary("Phantom:")} ${response.content}`);
37
+ if (response.usage) {
38
+ console.log(colors_1.style.separator());
39
+ console.log(colors_1.style.muted(`↳ Modelo: ${response.model} | Tokens: ${response.usage.promptTokens}→${response.usage.completionTokens} (${response.usage.totalTokens})`));
40
+ }
41
+ if (!args.noSave) {
42
+ if (!args.session) {
43
+ const session = (0, manager_2.createSession)(model, args.message);
44
+ (0, manager_2.addMessage)(session.id, "user", args.message);
45
+ (0, manager_2.addMessage)(session.id, "assistant", response.content);
46
+ console.log(colors_1.style.muted(`↳ Sessao salva: ${session.id}`));
47
+ }
48
+ else {
49
+ (0, manager_2.addMessage)(args.session, "user", args.message);
50
+ (0, manager_2.addMessage)(args.session, "assistant", response.content);
51
+ }
52
+ }
53
+ }
54
+ catch (error) {
55
+ const err = error;
56
+ if (err.status === 401) {
57
+ console.error(colors_1.style.error("✗ API key invalida. Use: phantomcode config set <api-key>"));
58
+ }
59
+ else if (err.status === 429) {
60
+ console.error(colors_1.style.error("✗ Limite de requisicoes excedido. Tente novamente mais tarde"));
61
+ }
62
+ else {
63
+ console.error(colors_1.style.error(`✗ Erro: ${err.message || "Erro desconhecido"}`));
64
+ }
65
+ process.exit(1);
66
+ }
67
+ }
68
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function buildConfigCommand(yargs: any): any;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildConfigCommand = buildConfigCommand;
4
+ const manager_1 = require("../config/manager");
5
+ const colors_1 = require("../tui/colors");
6
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
+ function buildConfigCommand(yargs) {
8
+ return yargs
9
+ .command("set <api-key>", "Define a API key do DogRouter",
10
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
+ (y) => y.positional("api-key", {
12
+ describe: "Sua API key do DogRouter",
13
+ type: "string",
14
+ demandOption: true,
15
+ }), (args) => {
16
+ (0, manager_1.setApiKey)(args.apiKey);
17
+ console.log(colors_1.style.success("✓ API key configurada com sucesso"));
18
+ })
19
+ .command("get", "Exibe as configuracoes atuais",
20
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
+ (y) => y
22
+ .option("api-key", { type: "boolean", desc: "Exibir apenas a API key" })
23
+ .option("model", { type: "boolean", desc: "Exibir apenas o modelo padrao" })
24
+ .option("all", { type: "boolean", desc: "Exibir todas as configuracoes" }), (args) => {
25
+ if (args.apiKey) {
26
+ console.log(colors_1.style.label(`API Key: ${(0, manager_1.hasApiKey)() ? colors_1.style.code((0, manager_1.getApiKey)()) : colors_1.style.warning("nao definida")}`));
27
+ return;
28
+ }
29
+ if (args.model) {
30
+ console.log(colors_1.style.label(`Modelo padrao: ${colors_1.style.code((0, manager_1.getDefaultModel)())}`));
31
+ return;
32
+ }
33
+ const all = (0, manager_1.getAll)();
34
+ console.log(colors_1.style.header("┌─ Configuracao ──────────────────────"));
35
+ console.log(colors_1.style.label(`│ API Key: ${all.apiKey ? colors_1.style.code(all.apiKey.slice(0, 12) + "...") : colors_1.style.muted("nao definida")}`));
36
+ console.log(colors_1.style.label(`│ Modelo padrao: ${colors_1.style.code(all.defaultModel || "dogrouter/auto")}`));
37
+ console.log(colors_1.style.label(`│ Tema: ${colors_1.style.code(all.theme || "dark")}`));
38
+ console.log(colors_1.style.header("└────────────────────────────────────"));
39
+ })
40
+ .command("reset", "Remove a API key configurada", () => ({}), () => {
41
+ (0, manager_1.removeApiKey)();
42
+ console.log(colors_1.style.warning("⚠ API key removida"));
43
+ })
44
+ .command("set-model <model>", "Define o modelo padrao",
45
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
46
+ (y) => y.positional("model", {
47
+ describe: "Nome do modelo (ex: dogrouter/auto)",
48
+ type: "string",
49
+ demandOption: true,
50
+ }), (args) => {
51
+ (0, manager_1.setDefaultModel)(args.model);
52
+ console.log(colors_1.style.success(`✓ Modelo padrao alterado para: ${colors_1.style.code(args.model)}`));
53
+ })
54
+ .demandCommand(1, "Use: phantomcode config <comando>")
55
+ .help();
56
+ }
57
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ interface InteractiveArgs {
2
+ model?: string;
3
+ session?: string;
4
+ system?: string;
5
+ }
6
+ export declare function runInteractive(args: InteractiveArgs): Promise<void>;
7
+ export {};
@@ -0,0 +1,155 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.runInteractive = runInteractive;
37
+ const readline = __importStar(require("readline"));
38
+ const manager_1 = require("../config/manager");
39
+ const dogrouter_1 = require("../provider/dogrouter");
40
+ const colors_1 = require("../tui/colors");
41
+ const manager_2 = require("../session/manager");
42
+ async function runInteractive(args) {
43
+ let apiKey;
44
+ try {
45
+ apiKey = (0, manager_1.getApiKey)();
46
+ }
47
+ catch {
48
+ console.error(colors_1.style.error("✗ API key nao configurada"));
49
+ console.log(colors_1.style.muted(" Execute: phantomcode config set <sua-api-key>"));
50
+ process.exit(1);
51
+ }
52
+ const model = args.model || (0, manager_1.getDefaultModel)();
53
+ let sessionId = null;
54
+ const messages = [];
55
+ if (args.session) {
56
+ const existing = (0, manager_2.getSession)(args.session);
57
+ if (existing) {
58
+ sessionId = existing.id;
59
+ messages.push(...existing.messages.map((m) => ({ role: m.role, content: m.content })));
60
+ console.log(colors_1.style.muted(`↻ Continuando sessao: ${existing.title}\n`));
61
+ }
62
+ }
63
+ if (args.system) {
64
+ messages.unshift({ role: "system", content: args.system });
65
+ }
66
+ printBanner();
67
+ const rl = readline.createInterface({
68
+ input: process.stdin,
69
+ output: process.stdout,
70
+ prompt: colors_1.style.primary("» "),
71
+ });
72
+ rl.prompt();
73
+ rl.on("line", async (line) => {
74
+ const input = line.trim();
75
+ if (input === "" || input === "/exit" || input === "/quit") {
76
+ rl.close();
77
+ return;
78
+ }
79
+ if (input === "/help") {
80
+ printHelp();
81
+ rl.prompt();
82
+ return;
83
+ }
84
+ if (input === "/clear") {
85
+ console.clear();
86
+ printBanner();
87
+ rl.prompt();
88
+ return;
89
+ }
90
+ if (input === "/new") {
91
+ messages.length = 0;
92
+ if (args.system)
93
+ messages.unshift({ role: "system", content: args.system });
94
+ sessionId = null;
95
+ console.log(colors_1.style.success("✓ Nova conversa iniciada\n"));
96
+ rl.prompt();
97
+ return;
98
+ }
99
+ if (input.startsWith("/model ")) {
100
+ const newModel = input.slice(7).trim();
101
+ if (newModel) {
102
+ console.log(colors_1.style.muted(`Modelo alterado para: ${colors_1.style.code(newModel)}\n`));
103
+ }
104
+ rl.prompt();
105
+ return;
106
+ }
107
+ messages.push({ role: "user", content: input });
108
+ try {
109
+ const response = await (0, dogrouter_1.chat)(apiKey, messages, { model });
110
+ console.log(`\n${colors_1.style.primary("Phantom:")} ${response.content}\n`);
111
+ messages.push({ role: "assistant", content: response.content });
112
+ if (sessionId) {
113
+ (0, manager_2.addMessage)(sessionId, "user", input);
114
+ (0, manager_2.addMessage)(sessionId, "assistant", response.content);
115
+ }
116
+ else {
117
+ const session = (0, manager_2.createSession)(model, input);
118
+ sessionId = session.id;
119
+ (0, manager_2.addMessage)(sessionId, "user", input);
120
+ (0, manager_2.addMessage)(sessionId, "assistant", response.content);
121
+ }
122
+ }
123
+ catch (error) {
124
+ const err = error;
125
+ console.error(`\n${colors_1.style.error(`✗ ${err.message || "Erro"}`)}\n`);
126
+ }
127
+ rl.prompt();
128
+ });
129
+ rl.on("close", () => {
130
+ console.log(`\n${colors_1.style.muted("Sessao encerrada")}`);
131
+ if (sessionId) {
132
+ console.log(colors_1.style.muted(`ID da sessao: ${sessionId}`));
133
+ }
134
+ process.exit(0);
135
+ });
136
+ }
137
+ function printBanner() {
138
+ console.clear();
139
+ console.log(colors_1.style.header("╔══════════════════════════════════════════════╗"));
140
+ console.log(colors_1.style.header("║ PhantomCode - Modo Interativo ║"));
141
+ console.log(colors_1.style.header("║ DogRouter AI Integration ║"));
142
+ console.log(colors_1.style.header("╚══════════════════════════════════════════════╝"));
143
+ console.log(colors_1.style.muted(" /help /exit /clear /new /model <nome>\n"));
144
+ }
145
+ function printHelp() {
146
+ console.log(colors_1.style.header("\n┌─ Comandos Disponiveis ──────────────────────"));
147
+ console.log(` ${colors_1.style.code("/exit")} ${colors_1.style.muted("Sair do modo interativo")}`);
148
+ console.log(` ${colors_1.style.code("/quit")} ${colors_1.style.muted("Sair do modo interativo")}`);
149
+ console.log(` ${colors_1.style.code("/clear")} ${colors_1.style.muted("Limpar a tela")}`);
150
+ console.log(` ${colors_1.style.code("/new")} ${colors_1.style.muted("Iniciar nova conversa")}`);
151
+ console.log(` ${colors_1.style.code("/model")} ${colors_1.style.muted("Alterar o modelo (ex: /model dogrouter/auto)")}`);
152
+ console.log(` ${colors_1.style.code("/help")} ${colors_1.style.muted("Exibir esta ajuda")}`);
153
+ console.log(colors_1.style.header("└───────────────────────────────────────────────┘\n"));
154
+ }
155
+ //# sourceMappingURL=interactive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../src/commands/interactive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ interface ModelsArgs {
2
+ search?: string;
3
+ }
4
+ export declare function handleModels(args: ModelsArgs): Promise<void>;
5
+ export {};
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleModels = handleModels;
4
+ const manager_1 = require("../config/manager");
5
+ const dogrouter_1 = require("../provider/dogrouter");
6
+ const colors_1 = require("../tui/colors");
7
+ async function handleModels(args) {
8
+ let apiKey;
9
+ try {
10
+ apiKey = (0, manager_1.getApiKey)();
11
+ }
12
+ catch {
13
+ console.error(colors_1.style.error("✗ API key nao configurada"));
14
+ console.log(colors_1.style.muted(" Execute: phantomcode config set <sua-api-key>"));
15
+ process.exit(1);
16
+ }
17
+ try {
18
+ const models = await (0, dogrouter_1.listModels)(apiKey);
19
+ const filtered = args.search
20
+ ? models.filter((m) => m.id.toLowerCase().includes(args.search.toLowerCase()))
21
+ : models;
22
+ if (filtered.length === 0) {
23
+ console.log(colors_1.style.warning("Nenhum modelo encontrado"));
24
+ return;
25
+ }
26
+ console.log(colors_1.style.header(`┌─ Modelos Disponiveis (${filtered.length}) ───────────`));
27
+ for (const m of filtered) {
28
+ console.log(`│ ${colors_1.style.code(m.id)}`);
29
+ }
30
+ console.log(colors_1.style.header("└───────────────────────────────────────────"));
31
+ }
32
+ catch (error) {
33
+ const err = error;
34
+ console.error(colors_1.style.error(`✗ Erro ao listar modelos: ${err.message || "Erro desconhecido"}`));
35
+ process.exit(1);
36
+ }
37
+ }
38
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/commands/models.ts"],"names":[],"mappings":";;AAQA,oCAgCC;AAxCD,+CAA8C;AAC9C,qDAAmD;AACnD,0CAAsC;AAM/B,KAAK,UAAU,YAAY,CAAC,IAAgB;IACjD,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAA,mBAAS,GAAE,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,cAAK,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,sBAAU,EAAC,MAAM,CAAC,CAAC;QAExC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM;YAC1B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YAC/E,CAAC,CAAC,MAAM,CAAC;QAEX,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACvD,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,MAAM,CAAC,2BAA2B,QAAQ,CAAC,MAAM,eAAe,CAAC,CAAC,CAAC;QACrF,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,cAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,MAAM,CAAC,8CAA8C,CAAC,CAAC,CAAC;IAC5E,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,KAA6B,CAAC;QAC1C,OAAO,CAAC,KAAK,CAAC,cAAK,CAAC,KAAK,CAAC,6BAA6B,GAAG,CAAC,OAAO,IAAI,mBAAmB,EAAE,CAAC,CAAC,CAAC;QAC9F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function buildSessionCommand(yargs: any): any;
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildSessionCommand = buildSessionCommand;
4
+ const manager_1 = require("../session/manager");
5
+ const colors_1 = require("../tui/colors");
6
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
+ function buildSessionCommand(yargs) {
8
+ return yargs
9
+ .command("list", "Lista todas as sessoes salvas",
10
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
+ (y) => y.option("limit", {
12
+ alias: "n",
13
+ describe: "Numero maximo de sessoes",
14
+ type: "number",
15
+ default: 10,
16
+ }), (args) => {
17
+ const sessions = (0, manager_1.listSessions)().slice(0, args.limit);
18
+ if (sessions.length === 0) {
19
+ console.log(colors_1.style.muted("Nenhuma sessao encontrada"));
20
+ return;
21
+ }
22
+ console.log(colors_1.style.header(`┌─ Sessoes (${sessions.length}) ───────────────────────────`));
23
+ for (const s of sessions) {
24
+ const date = new Date(s.updatedAt).toLocaleString("pt-BR");
25
+ console.log(`│ ${colors_1.style.code(s.id.slice(0, 8))}... ${colors_1.style.highlight(s.title)}`);
26
+ console.log(`│ ${colors_1.style.muted(`${date} · ${s.model} · ${s.messages.length} msgs`)}`);
27
+ console.log(`│`);
28
+ }
29
+ console.log(colors_1.style.header("└───────────────────────────────────────────"));
30
+ })
31
+ .command("show <id>", "Exibe detalhes de uma sessao",
32
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
33
+ (y) => y.positional("id", {
34
+ describe: "ID da sessao",
35
+ type: "string",
36
+ demandOption: true,
37
+ }), (args) => {
38
+ const session = (0, manager_1.getSession)(args.id);
39
+ if (!session) {
40
+ console.error(colors_1.style.error("✗ Sessao nao encontrada"));
41
+ process.exit(1);
42
+ }
43
+ console.log(colors_1.style.header("┌─ Sessao ─────────────────────────────────"));
44
+ console.log(`│ ID: ${colors_1.style.code(session.id)}`);
45
+ console.log(`│ Titulo: ${colors_1.style.highlight(session.title)}`);
46
+ console.log(`│ Modelo: ${colors_1.style.code(session.model)}`);
47
+ console.log(`│ Mensagens: ${session.messages.length}`);
48
+ console.log(`│ Criada: ${new Date(session.createdAt).toLocaleString("pt-BR")}`);
49
+ console.log(colors_1.style.header("├─ Mensagens ──────────────────────────────"));
50
+ for (const msg of session.messages) {
51
+ const role = msg.role === "user" ? "Voce" : msg.role === "assistant" ? "Phantom" : "Sistema";
52
+ const color = msg.role === "user" ? colors_1.style.label : msg.role === "assistant" ? colors_1.style.primary : colors_1.style.warning;
53
+ const preview = msg.content.slice(0, 200) + (msg.content.length > 200 ? "..." : "");
54
+ console.log(color(`${role}: ${preview}`));
55
+ console.log("");
56
+ }
57
+ console.log(colors_1.style.header("└───────────────────────────────────────────"));
58
+ })
59
+ .command("delete <id>", "Deleta uma sessao",
60
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
61
+ (y) => y.positional("id", {
62
+ describe: "ID da sessao",
63
+ type: "string",
64
+ demandOption: true,
65
+ }), (args) => {
66
+ const session = (0, manager_1.getSession)(args.id);
67
+ if (!session) {
68
+ console.error(colors_1.style.error("✗ Sessao nao encontrada"));
69
+ process.exit(1);
70
+ }
71
+ (0, manager_1.deleteSession)(args.id);
72
+ console.log(colors_1.style.success(`✓ Sessao "${session.title}" deletada`));
73
+ })
74
+ .demandCommand(1, "Use: phantomcode session <comando>")
75
+ .help();
76
+ }
77
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ interface PhantomConfig {
2
+ apiKey?: string;
3
+ defaultModel?: string;
4
+ theme?: "light" | "dark";
5
+ }
6
+ export declare function getApiKey(): string;
7
+ export declare function setApiKey(key: string): void;
8
+ export declare function removeApiKey(): void;
9
+ export declare function hasApiKey(): boolean;
10
+ export declare function getDefaultModel(): string;
11
+ export declare function setDefaultModel(model: string): void;
12
+ export declare function getTheme(): string;
13
+ export declare function getAll(): PhantomConfig;
14
+ export {};
@@ -0,0 +1,49 @@
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.getApiKey = getApiKey;
7
+ exports.setApiKey = setApiKey;
8
+ exports.removeApiKey = removeApiKey;
9
+ exports.hasApiKey = hasApiKey;
10
+ exports.getDefaultModel = getDefaultModel;
11
+ exports.setDefaultModel = setDefaultModel;
12
+ exports.getTheme = getTheme;
13
+ exports.getAll = getAll;
14
+ const conf_1 = __importDefault(require("conf"));
15
+ const store = new conf_1.default({
16
+ projectName: "phantomcode",
17
+ defaults: {
18
+ defaultModel: "dogrouter/auto",
19
+ theme: "dark",
20
+ },
21
+ });
22
+ function getApiKey() {
23
+ const key = store.get("apiKey");
24
+ if (!key)
25
+ throw new Error("API key nao configurada. Use: phantomcode config --set <api-key>");
26
+ return key;
27
+ }
28
+ function setApiKey(key) {
29
+ store.set("apiKey", key);
30
+ }
31
+ function removeApiKey() {
32
+ store.delete("apiKey");
33
+ }
34
+ function hasApiKey() {
35
+ return store.has("apiKey");
36
+ }
37
+ function getDefaultModel() {
38
+ return store.get("defaultModel", "dogrouter/auto");
39
+ }
40
+ function setDefaultModel(model) {
41
+ store.set("defaultModel", model);
42
+ }
43
+ function getTheme() {
44
+ return store.get("theme", "dark");
45
+ }
46
+ function getAll() {
47
+ return store.store;
48
+ }
49
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":";;;;;AAgBA,8BAIC;AAED,8BAEC;AAED,oCAEC;AAED,8BAEC;AAED,0CAEC;AAED,0CAEC;AAED,4BAEC;AAED,wBAEC;AAhDD,gDAAwB;AAQxB,MAAM,KAAK,GAAG,IAAI,cAAI,CAAgB;IACpC,WAAW,EAAE,aAAa;IAC1B,QAAQ,EAAE;QACR,YAAY,EAAE,gBAAgB;QAC9B,KAAK,EAAE,MAAM;KACd;CACF,CAAC,CAAC;AAEH,SAAgB,SAAS;IACvB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAChC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IAC9F,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAgB,SAAS,CAAC,GAAW;IACnC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED,SAAgB,YAAY;IAC1B,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACzB,CAAC;AAED,SAAgB,SAAS;IACvB,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED,SAAgB,eAAe;IAC7B,OAAO,KAAK,CAAC,GAAG,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;AACrD,CAAC;AAED,SAAgB,eAAe,CAAC,KAAa;IAC3C,KAAK,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,SAAgB,QAAQ;IACtB,OAAO,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,SAAgB,MAAM;IACpB,OAAO,KAAK,CAAC,KAAK,CAAC;AACrB,CAAC"}
@@ -0,0 +1,2 @@
1
+ #! /usr/bin/env node
2
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,90 @@
1
+ #! /usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const yargs_1 = __importDefault(require("yargs"));
8
+ const helpers_1 = require("yargs/helpers");
9
+ const colors_1 = require("./tui/colors");
10
+ const chat_1 = require("./commands/chat");
11
+ const models_1 = require("./commands/models");
12
+ const config_1 = require("./commands/config");
13
+ const session_1 = require("./commands/session");
14
+ const interactive_1 = require("./commands/interactive");
15
+ const pkg = require("../package.json");
16
+ (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
17
+ .scriptName("phantomcode")
18
+ .version(`PhantomCode v${pkg.version}`)
19
+ .command("chat <message>", "Envia mensagem para IA via DogRouter",
20
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
+ ((y) => y
22
+ .positional("message", {
23
+ describe: "Mensagem a ser enviada",
24
+ type: "string",
25
+ demandOption: true,
26
+ })
27
+ .option("model", {
28
+ alias: "m",
29
+ describe: "Modelo a usar",
30
+ type: "string",
31
+ })
32
+ .option("system", {
33
+ alias: "s",
34
+ describe: "System prompt",
35
+ type: "string",
36
+ })
37
+ .option("session", {
38
+ describe: "ID de sessao para continuar",
39
+ type: "string",
40
+ })
41
+ .option("no-save", {
42
+ describe: "Nao salvar em sessao",
43
+ type: "boolean",
44
+ default: false,
45
+ })), chat_1.handleChat)
46
+ .command("interactive", "Modo interativo com historico de conversa", ((y) => y
47
+ .option("model", { alias: "m", describe: "Modelo a usar", type: "string" })
48
+ .option("system", { alias: "s", describe: "System prompt", type: "string" })
49
+ .option("session", { describe: "ID de sessao para continuar", type: "string" })), interactive_1.runInteractive)
50
+ .command("models", "Lista modelos disponiveis via DogRouter", ((y) => y.option("search", {
51
+ alias: "s",
52
+ describe: "Filtrar modelos por nome",
53
+ type: "string",
54
+ })), models_1.handleModels)
55
+ .command("config", "Gerencia configuracoes do CLI", config_1.buildConfigCommand, () => { })
56
+ .command("session", "Gerencia sessoes de conversa", session_1.buildSessionCommand, () => { })
57
+ .command("$0", "", () => { }, () => {
58
+ printWelcome();
59
+ })
60
+ .demandCommand(0)
61
+ .strict()
62
+ .help()
63
+ .fail((msg, err) => {
64
+ if (err) {
65
+ console.error(colors_1.style.error(`\n✗ ${err.message}`));
66
+ }
67
+ else {
68
+ console.error(colors_1.style.error(`\n✗ ${msg}`));
69
+ console.log(colors_1.style.muted("\n Use: phantomcode --help para ver os comandos disponiveis"));
70
+ }
71
+ process.exit(1);
72
+ })
73
+ .parse();
74
+ function printWelcome() {
75
+ console.log(colors_1.style.header(`
76
+ ╔══════════════════════════════════════════════╗
77
+ ║ ✦ PhantomCode - CLI v${pkg.version} ✦ ║
78
+ ║ DogRouter AI Integration Platform ║
79
+ ╚══════════════════════════════════════════════╝`));
80
+ console.log(colors_1.style.muted("\n Um CLI poderoso para interagir com modelos de IA via DogRouter."));
81
+ console.log(colors_1.style.muted(" Roteamento inteligente, multi-modelo, sessoes e historico.\n"));
82
+ console.log(`${colors_1.style.primary(" USO:")}`);
83
+ console.log(` ${colors_1.style.code("phantomcode chat <mensagem>")} ${colors_1.style.muted("Enviar mensagem para IA")}`);
84
+ console.log(` ${colors_1.style.code("phantomcode interactive")} ${colors_1.style.muted("Modo interativo")}`);
85
+ console.log(` ${colors_1.style.code("phantomcode models")} ${colors_1.style.muted("Listar modelos")}`);
86
+ console.log(` ${colors_1.style.code("phantomcode config set <key>")} ${colors_1.style.muted("Configurar API key")}`);
87
+ console.log(` ${colors_1.style.code("phantomcode session list")} ${colors_1.style.muted("Listar sessoes")}`);
88
+ console.log(colors_1.style.muted(`\n Documentacao: https://dogrouter.ai\n`));
89
+ }
90
+ //# sourceMappingURL=index.js.map