oroute-cli 0.1.0 → 0.2.1
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.
- package/bin/oroute.cjs +2 -0
- package/dist/oroute.cjs +244533 -0
- package/package.json +27 -6
- package/dist/agent.d.ts +0 -11
- package/dist/agent.js +0 -569
- package/dist/agent.js.map +0 -1
- package/dist/commands.d.ts +0 -24
- package/dist/commands.js +0 -173
- package/dist/commands.js.map +0 -1
- package/dist/context.d.ts +0 -13
- package/dist/context.js +0 -110
- package/dist/context.js.map +0 -1
- package/dist/cost.d.ts +0 -18
- package/dist/cost.js +0 -80
- package/dist/cost.js.map +0 -1
- package/dist/history.d.ts +0 -20
- package/dist/history.js +0 -49
- package/dist/history.js.map +0 -1
- package/dist/hooks.d.ts +0 -13
- package/dist/hooks.js +0 -101
- package/dist/hooks.js.map +0 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.js +0 -475
- package/dist/index.js.map +0 -1
- package/dist/markdown.d.ts +0 -4
- package/dist/markdown.js +0 -126
- package/dist/markdown.js.map +0 -1
- package/dist/memory.d.ts +0 -27
- package/dist/memory.js +0 -208
- package/dist/memory.js.map +0 -1
- package/dist/session.d.ts +0 -43
- package/dist/session.js +0 -166
- package/dist/session.js.map +0 -1
- package/dist/streaming.d.ts +0 -27
- package/dist/streaming.js +0 -201
- package/dist/streaming.js.map +0 -1
- package/dist/tools/editFile.d.ts +0 -34
- package/dist/tools/editFile.js +0 -40
- package/dist/tools/editFile.js.map +0 -1
- package/dist/tools/executeCommand.d.ts +0 -32
- package/dist/tools/executeCommand.js +0 -75
- package/dist/tools/executeCommand.js.map +0 -1
- package/dist/tools/glob.d.ts +0 -24
- package/dist/tools/glob.js +0 -128
- package/dist/tools/glob.js.map +0 -1
- package/dist/tools/index.d.ts +0 -40
- package/dist/tools/index.js +0 -28
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/listDirectory.d.ts +0 -23
- package/dist/tools/listDirectory.js +0 -57
- package/dist/tools/listDirectory.js.map +0 -1
- package/dist/tools/notebook.d.ts +0 -7
- package/dist/tools/notebook.js +0 -76
- package/dist/tools/notebook.js.map +0 -1
- package/dist/tools/readFile.d.ts +0 -28
- package/dist/tools/readFile.js +0 -40
- package/dist/tools/readFile.js.map +0 -1
- package/dist/tools/readImage.d.ts +0 -25
- package/dist/tools/readImage.js +0 -52
- package/dist/tools/readImage.js.map +0 -1
- package/dist/tools/searchFiles.d.ts +0 -33
- package/dist/tools/searchFiles.js +0 -95
- package/dist/tools/searchFiles.js.map +0 -1
- package/dist/tools/writeFile.d.ts +0 -30
- package/dist/tools/writeFile.js +0 -54
- package/dist/tools/writeFile.js.map +0 -1
- package/dist/ui.d.ts +0 -30
- package/dist/ui.js +0 -79
- package/dist/ui.js.map +0 -1
- package/dist/update.d.ts +0 -10
- package/dist/update.js +0 -93
- package/dist/update.js.map +0 -1
package/dist/hooks.js
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* C3: Hooks System — run pre/post tool hooks (Claude Code compatible).
|
|
3
|
-
*/
|
|
4
|
-
import * as fs from 'node:fs';
|
|
5
|
-
import * as path from 'node:path';
|
|
6
|
-
import { execSync } from 'node:child_process';
|
|
7
|
-
import { GRAY, YELLOW, DIM, RESET } from './ui.js';
|
|
8
|
-
const HOOK_TIMEOUT_MS = 5000;
|
|
9
|
-
/** Load hooks configuration from .oroute/hooks.json or .claude/settings.json */
|
|
10
|
-
export function loadHooks(cwd) {
|
|
11
|
-
// Try .oroute/hooks.json first
|
|
12
|
-
const orouteHooksPath = path.join(cwd, '.oroute', 'hooks.json');
|
|
13
|
-
const config = tryLoadJson(orouteHooksPath);
|
|
14
|
-
if (config)
|
|
15
|
-
return config;
|
|
16
|
-
// Try .claude/settings.json (Claude Code compatible)
|
|
17
|
-
const claudeSettingsPath = path.join(cwd, '.claude', 'settings.json');
|
|
18
|
-
const claudeSettings = tryLoadJson(claudeSettingsPath);
|
|
19
|
-
if (claudeSettings) {
|
|
20
|
-
const result = {};
|
|
21
|
-
if (Array.isArray(claudeSettings['PreToolUse'])) {
|
|
22
|
-
result.PreToolUse = claudeSettings['PreToolUse'];
|
|
23
|
-
}
|
|
24
|
-
if (Array.isArray(claudeSettings['PostToolUse'])) {
|
|
25
|
-
result.PostToolUse = claudeSettings['PostToolUse'];
|
|
26
|
-
}
|
|
27
|
-
if (result.PreToolUse || result.PostToolUse)
|
|
28
|
-
return result;
|
|
29
|
-
}
|
|
30
|
-
return {};
|
|
31
|
-
}
|
|
32
|
-
function tryLoadJson(filePath) {
|
|
33
|
-
try {
|
|
34
|
-
if (!fs.existsSync(filePath))
|
|
35
|
-
return null;
|
|
36
|
-
return JSON.parse(fs.readFileSync(filePath, 'utf-8'));
|
|
37
|
-
}
|
|
38
|
-
catch {
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
/** Run matching hooks for a given phase and tool */
|
|
43
|
-
export function runHooks(phase, hooks, toolName, toolInput, cwd) {
|
|
44
|
-
const phaseHooks = hooks[phase];
|
|
45
|
-
if (!phaseHooks || phaseHooks.length === 0)
|
|
46
|
-
return true;
|
|
47
|
-
for (const hook of phaseHooks) {
|
|
48
|
-
const matchRegex = new RegExp(hook.matcher);
|
|
49
|
-
if (!matchRegex.test(toolName))
|
|
50
|
-
continue;
|
|
51
|
-
// Build environment variables for the hook
|
|
52
|
-
const filePath = extractFilePath(toolInput);
|
|
53
|
-
const env = {
|
|
54
|
-
...process.env,
|
|
55
|
-
TOOL_NAME: toolName,
|
|
56
|
-
TOOL_INPUT: JSON.stringify(toolInput),
|
|
57
|
-
};
|
|
58
|
-
if (filePath) {
|
|
59
|
-
env['FILE_PATH'] = filePath;
|
|
60
|
-
}
|
|
61
|
-
try {
|
|
62
|
-
const command = substituteEnvVars(hook.command, env);
|
|
63
|
-
console.log(`${DIM} [${phase}] ${command}${RESET}`);
|
|
64
|
-
execSync(command, {
|
|
65
|
-
cwd,
|
|
66
|
-
timeout: HOOK_TIMEOUT_MS,
|
|
67
|
-
stdio: 'pipe',
|
|
68
|
-
env,
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
catch (err) {
|
|
72
|
-
if (phase === 'PreToolUse') {
|
|
73
|
-
const exitCode = err.status ?? 1;
|
|
74
|
-
if (exitCode !== 0) {
|
|
75
|
-
console.log(`${YELLOW} [${phase}] Hook failed (exit ${exitCode}), skipping tool.${RESET}`);
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
// PostToolUse hook failures are non-blocking
|
|
80
|
-
if (phase === 'PostToolUse') {
|
|
81
|
-
console.log(`${GRAY} [${phase}] Hook warning: ${err.message ?? 'unknown error'}${RESET}`);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
return true;
|
|
86
|
-
}
|
|
87
|
-
/** Extract file path from tool input (if applicable) */
|
|
88
|
-
function extractFilePath(input) {
|
|
89
|
-
if (typeof input['path'] === 'string')
|
|
90
|
-
return input['path'];
|
|
91
|
-
if (typeof input['file_path'] === 'string')
|
|
92
|
-
return input['file_path'];
|
|
93
|
-
return null;
|
|
94
|
-
}
|
|
95
|
-
/** Substitute $VAR_NAME in command string with environment values */
|
|
96
|
-
function substituteEnvVars(command, env) {
|
|
97
|
-
return command.replace(/\$([A-Z_][A-Z0-9_]*)/g, (_match, varName) => {
|
|
98
|
-
return env[varName] ?? '';
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
//# sourceMappingURL=hooks.js.map
|
package/dist/hooks.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
DELETED
package/dist/index.js
DELETED
|
@@ -1,475 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import * as readline from 'node:readline';
|
|
3
|
-
import * as fs from 'node:fs';
|
|
4
|
-
import * as path from 'node:path';
|
|
5
|
-
import * as os from 'node:os';
|
|
6
|
-
import { agentChat } from './agent.js';
|
|
7
|
-
import { checkForUpdates } from './update.js';
|
|
8
|
-
const GREEN = '\x1b[32m';
|
|
9
|
-
const GRAY = '\x1b[90m';
|
|
10
|
-
const BOLD = '\x1b[1m';
|
|
11
|
-
const DIM = '\x1b[2m';
|
|
12
|
-
const RESET = '\x1b[0m';
|
|
13
|
-
const CYAN = '\x1b[36m';
|
|
14
|
-
const YELLOW = '\x1b[33m';
|
|
15
|
-
const WHITE = '\x1b[37m';
|
|
16
|
-
const VERSION = '0.2.0';
|
|
17
|
-
const CONFIG_DIR = path.join(os.homedir(), '.oroute');
|
|
18
|
-
const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
|
|
19
|
-
const DEFAULT_API_URL = 'https://api.oroute.itshin.com';
|
|
20
|
-
const LOCAL_API_URL = 'http://localhost:3001';
|
|
21
|
-
// ── ASCII Art fallback (for terminals without image support) ──
|
|
22
|
-
const ASCII_CHARACTER = `
|
|
23
|
-
${GRAY} ▄▄███▄▄
|
|
24
|
-
▄█${WHITE}▓▓▓▓▓▓▓${GRAY}█▄ ${GREEN}O'Route${RESET}
|
|
25
|
-
█${WHITE}▓▓${GRAY}█▄▄▄▄▄█${WHITE}▓▓${GRAY}█ ${GRAY}AI API Mediation${RESET}
|
|
26
|
-
█${WHITE}▓${GRAY}█ █${WHITE}▓${GRAY}█
|
|
27
|
-
█ ${GREEN}◉${GRAY} █ ${GREEN}◉${GRAY} █
|
|
28
|
-
█ ${GREEN}▽${GRAY} █
|
|
29
|
-
█ ${GREEN}╰───╯${GRAY} █
|
|
30
|
-
█▄▄▄▄▄▄▄▄▄▄▄█
|
|
31
|
-
┌─────────────┐
|
|
32
|
-
┌──┤ ${GREEN}█████████████${GRAY} ├──┐
|
|
33
|
-
│ │ ${GREEN}█████████████${GRAY} │ │
|
|
34
|
-
└──┴─────────────┴──┘${RESET}`;
|
|
35
|
-
/** Display inline image using iTerm2/WezTerm imgcat protocol */
|
|
36
|
-
function displayInlineImage(imagePath, width = 20) {
|
|
37
|
-
const termProgram = process.env['TERM_PROGRAM'] ?? '';
|
|
38
|
-
const supportsImages = ['iTerm.app', 'WezTerm'].includes(termProgram);
|
|
39
|
-
if (!supportsImages)
|
|
40
|
-
return false;
|
|
41
|
-
try {
|
|
42
|
-
const imageData = fs.readFileSync(imagePath);
|
|
43
|
-
const b64 = imageData.toString('base64');
|
|
44
|
-
// iTerm2 inline image protocol: ESC ] 1337 ; File=[args] : base64data BEL
|
|
45
|
-
const args = `inline=1;width=${width};preserveAspectRatio=1`;
|
|
46
|
-
process.stdout.write(`\x1b]1337;File=${args}:${b64}\x07\n`);
|
|
47
|
-
return true;
|
|
48
|
-
}
|
|
49
|
-
catch {
|
|
50
|
-
return false;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
/** Detect if terminal is using dark background */
|
|
54
|
-
function isDarkMode() {
|
|
55
|
-
// Check COLORFGBG env (format: "foreground;background")
|
|
56
|
-
const colorFgBg = process.env['COLORFGBG'];
|
|
57
|
-
if (colorFgBg) {
|
|
58
|
-
const bg = parseInt(colorFgBg.split(';').pop() ?? '0', 10);
|
|
59
|
-
return bg < 8; // 0=black, 15=white
|
|
60
|
-
}
|
|
61
|
-
// Check iTerm2 profile
|
|
62
|
-
const iTermProfile = process.env['ITERM_PROFILE'] ?? '';
|
|
63
|
-
if (iTermProfile.toLowerCase().includes('light'))
|
|
64
|
-
return false;
|
|
65
|
-
// Default: assume dark (most dev terminals are dark)
|
|
66
|
-
return true;
|
|
67
|
-
}
|
|
68
|
-
/** Get the path to the character image — dark or light version */
|
|
69
|
-
function getCharacterImagePath() {
|
|
70
|
-
const variant = isDarkMode() ? 'character-dark.png' : 'character-light.png';
|
|
71
|
-
const fallback = 'character.png';
|
|
72
|
-
const cliDir = path.dirname(new URL(import.meta.url).pathname);
|
|
73
|
-
const candidates = [
|
|
74
|
-
path.join(os.homedir(), '.oroute', variant),
|
|
75
|
-
path.join(cliDir, '..', variant),
|
|
76
|
-
path.join(os.homedir(), '.oroute', fallback),
|
|
77
|
-
path.join(cliDir, '..', fallback),
|
|
78
|
-
];
|
|
79
|
-
for (const p of candidates) {
|
|
80
|
-
if (fs.existsSync(p))
|
|
81
|
-
return p;
|
|
82
|
-
}
|
|
83
|
-
return '';
|
|
84
|
-
}
|
|
85
|
-
const LOGO = `${GREEN}${BOLD}
|
|
86
|
-
___ ' ____ _
|
|
87
|
-
/ _ \\ | _ \\ ___ _ _| |_ ___
|
|
88
|
-
| | | | | |_) / _ \\| | | | __/ _ \\
|
|
89
|
-
| |_| | | _ < (_) | |_| | || __/
|
|
90
|
-
\\___/ |_| \\_\\___/ \\__,_|\\__\\___|${RESET}
|
|
91
|
-
`;
|
|
92
|
-
function loadConfig() {
|
|
93
|
-
try {
|
|
94
|
-
if (fs.existsSync(CONFIG_FILE)) {
|
|
95
|
-
return JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf-8'));
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
catch { }
|
|
99
|
-
return {};
|
|
100
|
-
}
|
|
101
|
-
function saveConfig(config) {
|
|
102
|
-
if (!fs.existsSync(CONFIG_DIR)) {
|
|
103
|
-
fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
104
|
-
}
|
|
105
|
-
fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2));
|
|
106
|
-
}
|
|
107
|
-
function printWelcome() {
|
|
108
|
-
// Try inline image first (iTerm2, WezTerm)
|
|
109
|
-
const imgPath = getCharacterImagePath();
|
|
110
|
-
const imageShown = imgPath ? displayInlineImage(imgPath, 18) : false;
|
|
111
|
-
if (!imageShown) {
|
|
112
|
-
// Fallback: ASCII art for VS Code, Terminal.app, etc.
|
|
113
|
-
console.log(ASCII_CHARACTER);
|
|
114
|
-
}
|
|
115
|
-
console.log(LOGO);
|
|
116
|
-
const termProgram = process.env['TERM_PROGRAM'] ?? 'unknown';
|
|
117
|
-
console.log(`${GRAY} v${VERSION} · oroute.itshin.com · ${termProgram}${RESET}`);
|
|
118
|
-
console.log();
|
|
119
|
-
}
|
|
120
|
-
function printMenu() {
|
|
121
|
-
console.log(`${BOLD} What would you like to do?${RESET}`);
|
|
122
|
-
console.log();
|
|
123
|
-
console.log(` ${GREEN}1.${RESET} Login with Google (browser) ${GRAY}← 추천${RESET}`);
|
|
124
|
-
console.log(` ${GREEN}2.${RESET} Login with API Key`);
|
|
125
|
-
console.log(` ${GREEN}3.${RESET} Agent mode (file access + commands)`);
|
|
126
|
-
console.log(` ${GREEN}4.${RESET} Check status`);
|
|
127
|
-
console.log(` ${GREEN}5.${RESET} Settings`);
|
|
128
|
-
console.log(` ${GREEN}q.${RESET} Quit`);
|
|
129
|
-
console.log();
|
|
130
|
-
}
|
|
131
|
-
/** Parse CLI arguments — B5: --yes and --plan flags */
|
|
132
|
-
function parseArgs(args) {
|
|
133
|
-
let command;
|
|
134
|
-
let targetPath;
|
|
135
|
-
let prompt;
|
|
136
|
-
let debug = false;
|
|
137
|
-
let skipConfirmations = false;
|
|
138
|
-
let planMode = false;
|
|
139
|
-
for (let i = 0; i < args.length; i++) {
|
|
140
|
-
const arg = args[i];
|
|
141
|
-
if (arg === '--debug') {
|
|
142
|
-
debug = true;
|
|
143
|
-
continue;
|
|
144
|
-
}
|
|
145
|
-
if (arg === '--yes' || arg === '-y') {
|
|
146
|
-
skipConfirmations = true;
|
|
147
|
-
continue;
|
|
148
|
-
}
|
|
149
|
-
if (arg === '--plan') {
|
|
150
|
-
planMode = true;
|
|
151
|
-
continue;
|
|
152
|
-
}
|
|
153
|
-
if (arg === '-p' && args[i + 1]) {
|
|
154
|
-
prompt = args[++i];
|
|
155
|
-
continue;
|
|
156
|
-
}
|
|
157
|
-
if (['login', 'chat', 'status', 'agent'].includes(arg)) {
|
|
158
|
-
command = arg;
|
|
159
|
-
continue;
|
|
160
|
-
}
|
|
161
|
-
if (arg.startsWith('-'))
|
|
162
|
-
continue;
|
|
163
|
-
// Treat as path argument
|
|
164
|
-
targetPath = arg;
|
|
165
|
-
}
|
|
166
|
-
return { command, path: targetPath, prompt, debug, skipConfirmations, planMode };
|
|
167
|
-
}
|
|
168
|
-
async function promptInput(prompt) {
|
|
169
|
-
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
170
|
-
return new Promise(resolve => {
|
|
171
|
-
rl.question(prompt, answer => {
|
|
172
|
-
rl.close();
|
|
173
|
-
resolve(answer.trim());
|
|
174
|
-
});
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
async function loginWithApiKey(config) {
|
|
178
|
-
const key = await promptInput(`${GREEN}›${RESET} Enter your O'Route API Key (or-...): `);
|
|
179
|
-
if (!key.startsWith('or-')) {
|
|
180
|
-
console.log(`${YELLOW} Invalid key format. O'Route keys start with "or-"${RESET}`);
|
|
181
|
-
return;
|
|
182
|
-
}
|
|
183
|
-
const apiUrl = config.apiUrl ?? LOCAL_API_URL;
|
|
184
|
-
console.log(`${GRAY} Verifying key...${RESET}`);
|
|
185
|
-
try {
|
|
186
|
-
const res = await fetch(`${apiUrl}/v1/providers/status`, {
|
|
187
|
-
headers: { 'Authorization': `Bearer ${key}` },
|
|
188
|
-
signal: AbortSignal.timeout(5000),
|
|
189
|
-
});
|
|
190
|
-
config.apiKey = key;
|
|
191
|
-
saveConfig(config);
|
|
192
|
-
if (res.ok) {
|
|
193
|
-
console.log(`${GREEN} ✓ API Key verified and saved!${RESET}`);
|
|
194
|
-
}
|
|
195
|
-
else {
|
|
196
|
-
console.log(`${YELLOW} Key saved (server returned ${res.status}).${RESET}`);
|
|
197
|
-
}
|
|
198
|
-
console.log();
|
|
199
|
-
await chat(config);
|
|
200
|
-
return;
|
|
201
|
-
}
|
|
202
|
-
catch {
|
|
203
|
-
config.apiKey = key;
|
|
204
|
-
saveConfig(config);
|
|
205
|
-
console.log(`${YELLOW} Saved (server offline). Starting chat...${RESET}`);
|
|
206
|
-
console.log();
|
|
207
|
-
await chat(config);
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
async function loginWithGoogle(config) {
|
|
211
|
-
const apiUrl = config.apiUrl ?? LOCAL_API_URL;
|
|
212
|
-
console.log(`${GRAY} Requesting device code...${RESET}`);
|
|
213
|
-
try {
|
|
214
|
-
// 1. Request device code
|
|
215
|
-
const res = await fetch(`${apiUrl}/v1/auth/device`, {
|
|
216
|
-
method: 'POST',
|
|
217
|
-
headers: { 'Content-Type': 'application/json' },
|
|
218
|
-
signal: AbortSignal.timeout(5000),
|
|
219
|
-
});
|
|
220
|
-
if (!res.ok)
|
|
221
|
-
throw new Error(`Server error: ${res.status}`);
|
|
222
|
-
const data = await res.json();
|
|
223
|
-
// 2. Open browser
|
|
224
|
-
console.log();
|
|
225
|
-
console.log(`${GREEN} ▶ 브라우저에서 Google 로그인하세요${RESET}`);
|
|
226
|
-
console.log(`${GRAY} ${data.loginUrl}${RESET}`);
|
|
227
|
-
console.log();
|
|
228
|
-
console.log(`${GRAY} 확인 코드: ${WHITE}${BOLD}${data.userCode}${RESET}`);
|
|
229
|
-
console.log(`${GRAY} 브라우저가 열립니다... 로그인 후 자동으로 연결됩니다.${RESET}`);
|
|
230
|
-
console.log();
|
|
231
|
-
const { exec } = await import('node:child_process');
|
|
232
|
-
exec(`open "${data.loginUrl}" || xdg-open "${data.loginUrl}" || start "${data.loginUrl}"`);
|
|
233
|
-
// 3. Poll for approval
|
|
234
|
-
const maxAttempts = 150; // 5 min at 2s intervals
|
|
235
|
-
for (let i = 0; i < maxAttempts; i++) {
|
|
236
|
-
await new Promise(r => setTimeout(r, 2000));
|
|
237
|
-
const pollRes = await fetch(`${apiUrl}/v1/auth/device/${data.deviceCode}`, {
|
|
238
|
-
signal: AbortSignal.timeout(5000),
|
|
239
|
-
});
|
|
240
|
-
const pollData = await pollRes.json();
|
|
241
|
-
if (pollData.status === 'approved' && pollData.apiKey) {
|
|
242
|
-
config.apiKey = pollData.apiKey;
|
|
243
|
-
saveConfig(config);
|
|
244
|
-
console.log(`\n${GREEN} ✓ Logged in!${RESET} ${GRAY}(${pollData.email})${RESET}`);
|
|
245
|
-
console.log(`${GREEN} ✓ API Key saved${RESET}`);
|
|
246
|
-
console.log();
|
|
247
|
-
// Auto-enter chat mode like Claude Code
|
|
248
|
-
await chat(config);
|
|
249
|
-
return;
|
|
250
|
-
}
|
|
251
|
-
if (pollData.status === 'expired') {
|
|
252
|
-
console.log(`${YELLOW} 인증 코드가 만료되었습니다. 다시 시도해주세요.${RESET}`);
|
|
253
|
-
return;
|
|
254
|
-
}
|
|
255
|
-
// Show waiting dots
|
|
256
|
-
process.stdout.write(`\r${GRAY} 대기 중${'·'.repeat((i % 3) + 1).padEnd(3)}${RESET}`);
|
|
257
|
-
}
|
|
258
|
-
console.log(`\n${YELLOW} 시간 초과. 다시 시도해주세요.${RESET}`);
|
|
259
|
-
}
|
|
260
|
-
catch (err) {
|
|
261
|
-
console.log(`${YELLOW} 서버에 연결할 수 없습니다. API Key로 로그인하세요 (옵션 1).${RESET}`);
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
async function chat(config) {
|
|
265
|
-
if (!config.apiKey) {
|
|
266
|
-
console.log(`${YELLOW} No API Key configured. Run option 1 first.${RESET}`);
|
|
267
|
-
return;
|
|
268
|
-
}
|
|
269
|
-
const apiUrl = config.apiUrl ?? LOCAL_API_URL;
|
|
270
|
-
const model = config.model ?? 'auto';
|
|
271
|
-
const cwd = process.cwd();
|
|
272
|
-
console.log(`${GREEN}${BOLD} O'Route${RESET} v${VERSION}`);
|
|
273
|
-
console.log(`${GRAY} model: ${model} (auto-routed) · 13 models${RESET}`);
|
|
274
|
-
console.log(`${GRAY} ${cwd}${RESET}`);
|
|
275
|
-
console.log();
|
|
276
|
-
const messages = [];
|
|
277
|
-
while (true) {
|
|
278
|
-
const input = await promptInput(`${GREEN}›${RESET} `);
|
|
279
|
-
if (!input || input === 'exit' || input === 'quit')
|
|
280
|
-
break;
|
|
281
|
-
messages.push({ role: 'user', content: input });
|
|
282
|
-
try {
|
|
283
|
-
const res = await fetch(`${apiUrl}/v1/messages`, {
|
|
284
|
-
method: 'POST',
|
|
285
|
-
headers: {
|
|
286
|
-
'Authorization': `Bearer ${config.apiKey}`,
|
|
287
|
-
'Content-Type': 'application/json',
|
|
288
|
-
},
|
|
289
|
-
body: JSON.stringify({
|
|
290
|
-
model,
|
|
291
|
-
max_tokens: 4096,
|
|
292
|
-
messages,
|
|
293
|
-
}),
|
|
294
|
-
signal: AbortSignal.timeout(60000),
|
|
295
|
-
});
|
|
296
|
-
if (!res.ok) {
|
|
297
|
-
const errBody = await res.json().catch(() => ({ error: { message: `HTTP ${res.status}` } }));
|
|
298
|
-
const errMsg = typeof errBody.error === 'string' ? errBody.error : errBody.error?.message ?? `HTTP ${res.status}`;
|
|
299
|
-
console.log(`${YELLOW} Error: ${errMsg}${RESET}`);
|
|
300
|
-
messages.pop();
|
|
301
|
-
continue;
|
|
302
|
-
}
|
|
303
|
-
const data = await res.json();
|
|
304
|
-
const text = data.content[0]?.text ?? '';
|
|
305
|
-
const meta = data.routing_metadata;
|
|
306
|
-
console.log();
|
|
307
|
-
console.log(`${WHITE}${text}${RESET}`);
|
|
308
|
-
console.log();
|
|
309
|
-
console.log(`${DIM} ─ ${meta.provider} · L${meta.taskComplexity} · ${meta.totalLatencyMs.toFixed(0)}ms · ${data.usage.input_tokens}+${data.usage.output_tokens} tokens${RESET}`);
|
|
310
|
-
console.log();
|
|
311
|
-
messages.push({ role: 'assistant', content: text });
|
|
312
|
-
}
|
|
313
|
-
catch (err) {
|
|
314
|
-
console.log(`${YELLOW} Request failed: ${err instanceof Error ? err.message : 'unknown'}${RESET}`);
|
|
315
|
-
messages.pop();
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
async function checkStatus(config) {
|
|
320
|
-
const apiUrl = config.apiUrl ?? LOCAL_API_URL;
|
|
321
|
-
console.log(`${GRAY} Checking O'Route status...${RESET}`);
|
|
322
|
-
try {
|
|
323
|
-
const res = await fetch(`${apiUrl}/health`, { signal: AbortSignal.timeout(5000) });
|
|
324
|
-
const data = await res.json();
|
|
325
|
-
console.log(`${GREEN} ✓ Server: ${data.status} (v${data.version})${RESET}`);
|
|
326
|
-
console.log(`${GRAY} URL: ${apiUrl}${RESET}`);
|
|
327
|
-
console.log(`${GRAY} Key: ${config.apiKey ? config.apiKey.slice(0, 11) + '...' : 'not set'}${RESET}`);
|
|
328
|
-
console.log(`${GRAY} Model: ${config.model ?? 'auto'}${RESET}`);
|
|
329
|
-
}
|
|
330
|
-
catch {
|
|
331
|
-
console.log(`${YELLOW} ✗ Server unreachable at ${apiUrl}${RESET}`);
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
async function settings(config) {
|
|
335
|
-
console.log(`${BOLD} Settings${RESET}`);
|
|
336
|
-
console.log(`${GRAY} 1. API URL: ${config.apiUrl ?? LOCAL_API_URL}${RESET}`);
|
|
337
|
-
console.log(`${GRAY} 2. Default model: ${config.model ?? 'auto'}${RESET}`);
|
|
338
|
-
console.log(`${GRAY} 3. Reset config${RESET}`);
|
|
339
|
-
console.log(`${GRAY} b. Back${RESET}`);
|
|
340
|
-
const choice = await promptInput(`${GREEN}›${RESET} `);
|
|
341
|
-
switch (choice) {
|
|
342
|
-
case '1': {
|
|
343
|
-
const url = await promptInput(`${GREEN}›${RESET} API URL: `);
|
|
344
|
-
if (url) {
|
|
345
|
-
config.apiUrl = url;
|
|
346
|
-
saveConfig(config);
|
|
347
|
-
}
|
|
348
|
-
break;
|
|
349
|
-
}
|
|
350
|
-
case '2': {
|
|
351
|
-
console.log(`${GRAY} Options: auto, anthropic/claude-sonnet-4-6, openai/gpt-4o, etc.${RESET}`);
|
|
352
|
-
const model = await promptInput(`${GREEN}›${RESET} Model: `);
|
|
353
|
-
if (model) {
|
|
354
|
-
config.model = model;
|
|
355
|
-
saveConfig(config);
|
|
356
|
-
}
|
|
357
|
-
break;
|
|
358
|
-
}
|
|
359
|
-
case '3':
|
|
360
|
-
fs.unlinkSync(CONFIG_FILE);
|
|
361
|
-
console.log(`${GREEN} ✓ Config reset${RESET}`);
|
|
362
|
-
break;
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
// ── Main ──
|
|
366
|
-
async function main() {
|
|
367
|
-
const rawArgs = process.argv.slice(2);
|
|
368
|
-
const config = loadConfig();
|
|
369
|
-
const parsed = parseArgs(rawArgs);
|
|
370
|
-
// C6: Auto-update check (non-blocking, background)
|
|
371
|
-
checkForUpdates(VERSION);
|
|
372
|
-
// Handle --debug
|
|
373
|
-
if (parsed.debug) {
|
|
374
|
-
console.log(`${GRAY} Debug mode: config=${JSON.stringify(config)}${RESET}`);
|
|
375
|
-
}
|
|
376
|
-
// Handle path argument — change cwd
|
|
377
|
-
if (parsed.path) {
|
|
378
|
-
const resolved = path.resolve(process.cwd(), parsed.path);
|
|
379
|
-
if (!fs.existsSync(resolved)) {
|
|
380
|
-
console.log(`${YELLOW} 디렉토리를 찾을 수 없습니다: ${resolved}${RESET}`);
|
|
381
|
-
process.exit(1);
|
|
382
|
-
}
|
|
383
|
-
const stat = fs.statSync(resolved);
|
|
384
|
-
if (!stat.isDirectory()) {
|
|
385
|
-
console.log(`${YELLOW} 디렉토리가 아닙니다: ${resolved}${RESET}`);
|
|
386
|
-
process.exit(1);
|
|
387
|
-
}
|
|
388
|
-
process.chdir(resolved);
|
|
389
|
-
}
|
|
390
|
-
// Build agent config with flags
|
|
391
|
-
const agentConfig = {
|
|
392
|
-
...config,
|
|
393
|
-
skipConfirmations: parsed.skipConfirmations,
|
|
394
|
-
planMode: parsed.planMode,
|
|
395
|
-
};
|
|
396
|
-
// Direct command shortcuts
|
|
397
|
-
if (parsed.command === 'login') {
|
|
398
|
-
printWelcome();
|
|
399
|
-
await loginWithApiKey(config);
|
|
400
|
-
return;
|
|
401
|
-
}
|
|
402
|
-
if (parsed.command === 'chat' || parsed.command === 'agent') {
|
|
403
|
-
await agentChat(agentConfig);
|
|
404
|
-
return;
|
|
405
|
-
}
|
|
406
|
-
if (parsed.command === 'status') {
|
|
407
|
-
await checkStatus(config);
|
|
408
|
-
return;
|
|
409
|
-
}
|
|
410
|
-
// -p "prompt" → one-shot agent execution
|
|
411
|
-
if (parsed.prompt) {
|
|
412
|
-
if (!config.apiKey) {
|
|
413
|
-
console.log(`${YELLOW}No API Key. Run: oroute login${RESET}`);
|
|
414
|
-
process.exit(1);
|
|
415
|
-
}
|
|
416
|
-
const apiUrl = config.apiUrl ?? LOCAL_API_URL;
|
|
417
|
-
try {
|
|
418
|
-
const res = await fetch(`${apiUrl}/v1/messages`, {
|
|
419
|
-
method: 'POST',
|
|
420
|
-
headers: { 'Authorization': `Bearer ${config.apiKey}`, 'Content-Type': 'application/json' },
|
|
421
|
-
body: JSON.stringify({ model: config.model ?? 'auto', max_tokens: 4096, messages: [{ role: 'user', content: parsed.prompt }] }),
|
|
422
|
-
signal: AbortSignal.timeout(60000),
|
|
423
|
-
});
|
|
424
|
-
const data = await res.json();
|
|
425
|
-
console.log(data.content[0]?.text ?? '');
|
|
426
|
-
}
|
|
427
|
-
catch (err) {
|
|
428
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
429
|
-
console.log(`${YELLOW} Error: ${msg}${RESET}`);
|
|
430
|
-
}
|
|
431
|
-
return;
|
|
432
|
-
}
|
|
433
|
-
// If already logged in → go straight to agent mode (like Claude Code)
|
|
434
|
-
printWelcome();
|
|
435
|
-
if (config.apiKey) {
|
|
436
|
-
await agentChat(agentConfig);
|
|
437
|
-
return;
|
|
438
|
-
}
|
|
439
|
-
// Not logged in → show menu
|
|
440
|
-
while (true) {
|
|
441
|
-
printMenu();
|
|
442
|
-
const choice = await promptInput(`${GREEN}›${RESET} `);
|
|
443
|
-
switch (choice) {
|
|
444
|
-
case '1':
|
|
445
|
-
await loginWithGoogle(config);
|
|
446
|
-
break;
|
|
447
|
-
case '2':
|
|
448
|
-
await loginWithApiKey(config);
|
|
449
|
-
break;
|
|
450
|
-
case '3':
|
|
451
|
-
await agentChat(agentConfig);
|
|
452
|
-
break;
|
|
453
|
-
case '4':
|
|
454
|
-
await checkStatus(config);
|
|
455
|
-
break;
|
|
456
|
-
case '5':
|
|
457
|
-
await settings(config);
|
|
458
|
-
break;
|
|
459
|
-
case 'q':
|
|
460
|
-
case 'quit':
|
|
461
|
-
case 'exit':
|
|
462
|
-
console.log(`${GRAY} Bye!${RESET}`);
|
|
463
|
-
process.exit(0);
|
|
464
|
-
default:
|
|
465
|
-
console.log(`${YELLOW} Unknown option: ${choice}${RESET}`);
|
|
466
|
-
}
|
|
467
|
-
console.log();
|
|
468
|
-
}
|
|
469
|
-
}
|
|
470
|
-
main().catch((err) => {
|
|
471
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
472
|
-
console.error(`${YELLOW} Error: ${msg}${RESET}`);
|
|
473
|
-
process.exit(1);
|
|
474
|
-
});
|
|
475
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/markdown.d.ts
DELETED