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/markdown.js
DELETED
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A3: Markdown Terminal Rendering — regex-based ANSI formatting for terminal output.
|
|
3
|
-
*/
|
|
4
|
-
import { GREEN, GRAY, BOLD, DIM, RESET, CYAN, YELLOW, MAGENTA, BLUE } from './ui.js';
|
|
5
|
-
const BG_GRAY = '\x1b[48;5;237m';
|
|
6
|
-
const ITALIC = '\x1b[3m';
|
|
7
|
-
const UNDERLINE = '\x1b[4m';
|
|
8
|
-
/** Keyword sets for basic syntax highlighting in code blocks */
|
|
9
|
-
const JS_KEYWORDS = new Set([
|
|
10
|
-
'const', 'let', 'var', 'function', 'return', 'if', 'else', 'for', 'while',
|
|
11
|
-
'class', 'import', 'export', 'from', 'default', 'async', 'await', 'try',
|
|
12
|
-
'catch', 'throw', 'new', 'typeof', 'instanceof', 'switch', 'case', 'break',
|
|
13
|
-
'continue', 'true', 'false', 'null', 'undefined', 'this', 'extends', 'implements',
|
|
14
|
-
'interface', 'type', 'enum', 'namespace', 'readonly', 'abstract', 'static',
|
|
15
|
-
'private', 'protected', 'public', 'yield', 'of', 'in', 'do',
|
|
16
|
-
]);
|
|
17
|
-
function highlightCode(line) {
|
|
18
|
-
// Highlight strings
|
|
19
|
-
let result = line.replace(/(["'`])(?:(?!\1|\\).|\\.)*?\1/g, `${GREEN}$&${RESET}${GRAY}`);
|
|
20
|
-
// Highlight comments
|
|
21
|
-
result = result.replace(/(\/\/.*)$/gm, `${DIM}$1${RESET}${GRAY}`);
|
|
22
|
-
// Highlight keywords (word boundaries)
|
|
23
|
-
result = result.replace(/\b(\w+)\b/g, (match) => {
|
|
24
|
-
if (JS_KEYWORDS.has(match))
|
|
25
|
-
return `${YELLOW}${match}${RESET}${GRAY}`;
|
|
26
|
-
return match;
|
|
27
|
-
});
|
|
28
|
-
// Highlight numbers
|
|
29
|
-
result = result.replace(/\b(\d+\.?\d*)\b/g, `${MAGENTA}$1${RESET}${GRAY}`);
|
|
30
|
-
return result;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Render markdown text with ANSI escape codes for terminal display.
|
|
34
|
-
*/
|
|
35
|
-
export function renderMarkdown(text) {
|
|
36
|
-
const lines = text.split('\n');
|
|
37
|
-
const output = [];
|
|
38
|
-
let inCodeBlock = false;
|
|
39
|
-
let codeBlockLang = '';
|
|
40
|
-
for (const line of lines) {
|
|
41
|
-
// Code block fence
|
|
42
|
-
if (line.trimStart().startsWith('```')) {
|
|
43
|
-
if (!inCodeBlock) {
|
|
44
|
-
inCodeBlock = true;
|
|
45
|
-
codeBlockLang = line.trimStart().slice(3).trim();
|
|
46
|
-
output.push(`${DIM} ${'─'.repeat(40)}${RESET}`);
|
|
47
|
-
continue;
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
inCodeBlock = false;
|
|
51
|
-
codeBlockLang = '';
|
|
52
|
-
output.push(`${DIM} ${'─'.repeat(40)}${RESET}`);
|
|
53
|
-
continue;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
// Inside code block
|
|
57
|
-
if (inCodeBlock) {
|
|
58
|
-
const highlighted = highlightCode(line);
|
|
59
|
-
output.push(`${GRAY} ${highlighted}${RESET}`);
|
|
60
|
-
continue;
|
|
61
|
-
}
|
|
62
|
-
// Headings
|
|
63
|
-
const h3Match = line.match(/^###\s+(.*)/);
|
|
64
|
-
if (h3Match) {
|
|
65
|
-
output.push(`${BOLD}${GREEN} ${h3Match[1]}${RESET}`);
|
|
66
|
-
continue;
|
|
67
|
-
}
|
|
68
|
-
const h2Match = line.match(/^##\s+(.*)/);
|
|
69
|
-
if (h2Match) {
|
|
70
|
-
output.push(`${BOLD}${GREEN} ${h2Match[1]}${RESET}`);
|
|
71
|
-
continue;
|
|
72
|
-
}
|
|
73
|
-
const h1Match = line.match(/^#\s+(.*)/);
|
|
74
|
-
if (h1Match) {
|
|
75
|
-
output.push(`${BOLD}${GREEN}${h1Match[1]}${RESET}`);
|
|
76
|
-
continue;
|
|
77
|
-
}
|
|
78
|
-
// Blockquote
|
|
79
|
-
if (line.trimStart().startsWith('> ')) {
|
|
80
|
-
const content = line.trimStart().slice(2);
|
|
81
|
-
output.push(`${DIM} ${GRAY}│ ${content}${RESET}`);
|
|
82
|
-
continue;
|
|
83
|
-
}
|
|
84
|
-
// Unordered list
|
|
85
|
-
const listMatch = line.match(/^(\s*)[-*]\s+(.*)/);
|
|
86
|
-
if (listMatch) {
|
|
87
|
-
const indent = listMatch[1] ?? '';
|
|
88
|
-
const content = formatInline(listMatch[2] ?? '');
|
|
89
|
-
output.push(`${indent}${GREEN} *${RESET} ${content}`);
|
|
90
|
-
continue;
|
|
91
|
-
}
|
|
92
|
-
// Ordered list
|
|
93
|
-
const olMatch = line.match(/^(\s*)(\d+)\.\s+(.*)/);
|
|
94
|
-
if (olMatch) {
|
|
95
|
-
const indent = olMatch[1] ?? '';
|
|
96
|
-
const num = olMatch[2] ?? '';
|
|
97
|
-
const content = formatInline(olMatch[3] ?? '');
|
|
98
|
-
output.push(`${indent}${GREEN} ${num}.${RESET} ${content}`);
|
|
99
|
-
continue;
|
|
100
|
-
}
|
|
101
|
-
// Horizontal rule
|
|
102
|
-
if (/^[-*_]{3,}\s*$/.test(line.trim())) {
|
|
103
|
-
output.push(`${DIM} ${'─'.repeat(40)}${RESET}`);
|
|
104
|
-
continue;
|
|
105
|
-
}
|
|
106
|
-
// Regular text with inline formatting
|
|
107
|
-
output.push(formatInline(line));
|
|
108
|
-
}
|
|
109
|
-
return output.join('\n');
|
|
110
|
-
}
|
|
111
|
-
/** Apply inline markdown formatting */
|
|
112
|
-
function formatInline(text) {
|
|
113
|
-
let result = text;
|
|
114
|
-
// Bold + italic
|
|
115
|
-
result = result.replace(/\*\*\*(.*?)\*\*\*/g, `${BOLD}${ITALIC}$1${RESET}`);
|
|
116
|
-
// Bold
|
|
117
|
-
result = result.replace(/\*\*(.*?)\*\*/g, `${BOLD}$1${RESET}`);
|
|
118
|
-
// Italic
|
|
119
|
-
result = result.replace(/(?<!\*)\*([^*]+?)\*(?!\*)/g, `${DIM}$1${RESET}`);
|
|
120
|
-
// Inline code
|
|
121
|
-
result = result.replace(/`([^`]+?)`/g, `${BG_GRAY}${CYAN} $1 ${RESET}`);
|
|
122
|
-
// Links: [text](url)
|
|
123
|
-
result = result.replace(/\[([^\]]+)\]\(([^)]+)\)/g, `${UNDERLINE}${BLUE}$1${RESET}${DIM} ($2)${RESET}`);
|
|
124
|
-
return result;
|
|
125
|
-
}
|
|
126
|
-
//# sourceMappingURL=markdown.js.map
|
package/dist/markdown.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"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"}
|
package/dist/memory.d.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
type MemoryType = 'user' | 'feedback' | 'project' | 'reference';
|
|
2
|
-
interface Memory {
|
|
3
|
-
name: string;
|
|
4
|
-
type: MemoryType;
|
|
5
|
-
description: string;
|
|
6
|
-
content: string;
|
|
7
|
-
created: string;
|
|
8
|
-
}
|
|
9
|
-
/** Save a memory to disk */
|
|
10
|
-
export declare function saveMemory(type: MemoryType, name: string, content: string, description?: string): void;
|
|
11
|
-
/** Load all memories */
|
|
12
|
-
export declare function loadAllMemories(): Memory[];
|
|
13
|
-
/** Load memories relevant to a given cwd (project memories match by path) */
|
|
14
|
-
export declare function loadMemories(cwd: string): Memory[];
|
|
15
|
-
/** Search memories by keyword */
|
|
16
|
-
export declare function searchMemories(query: string): Memory[];
|
|
17
|
-
/** Delete a memory by name */
|
|
18
|
-
export declare function deleteMemory(name: string): boolean;
|
|
19
|
-
/** Build memory context string for system prompt injection */
|
|
20
|
-
export declare function buildMemoryContext(cwd: string): string;
|
|
21
|
-
/** Handle /remember command */
|
|
22
|
-
export declare function handleRememberCommand(arg: string): void;
|
|
23
|
-
/** Handle /memories command */
|
|
24
|
-
export declare function handleMemoriesCommand(): void;
|
|
25
|
-
/** Handle /forget command */
|
|
26
|
-
export declare function handleForgetCommand(arg: string): void;
|
|
27
|
-
export {};
|
package/dist/memory.js
DELETED
|
@@ -1,208 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* C5: Memory System — persistent memories stored as markdown files.
|
|
3
|
-
*/
|
|
4
|
-
import * as fs from 'node:fs';
|
|
5
|
-
import * as path from 'node:path';
|
|
6
|
-
import * as os from 'node:os';
|
|
7
|
-
import { GREEN, GRAY, BOLD, RESET, YELLOW, WHITE, DIM } from './ui.js';
|
|
8
|
-
const MEMORY_DIR = path.join(os.homedir(), '.oroute', 'memory');
|
|
9
|
-
const MEMORY_INDEX = path.join(MEMORY_DIR, 'MEMORY.md');
|
|
10
|
-
/** Ensure memory directory exists */
|
|
11
|
-
function ensureMemoryDir() {
|
|
12
|
-
if (!fs.existsSync(MEMORY_DIR)) {
|
|
13
|
-
fs.mkdirSync(MEMORY_DIR, { recursive: true });
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
/** Generate a safe filename from a memory name */
|
|
17
|
-
function toFilename(name) {
|
|
18
|
-
return name
|
|
19
|
-
.toLowerCase()
|
|
20
|
-
.replace(/[^a-z0-9_-]/g, '_')
|
|
21
|
-
.replace(/_+/g, '_')
|
|
22
|
-
.slice(0, 60) + '.md';
|
|
23
|
-
}
|
|
24
|
-
/** Parse frontmatter from a memory markdown file */
|
|
25
|
-
function parseMemoryFile(content) {
|
|
26
|
-
const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
|
|
27
|
-
if (!frontmatterMatch)
|
|
28
|
-
return null;
|
|
29
|
-
const frontmatter = frontmatterMatch[1];
|
|
30
|
-
const body = frontmatterMatch[2].trim();
|
|
31
|
-
const fields = {};
|
|
32
|
-
for (const line of frontmatter.split('\n')) {
|
|
33
|
-
const colonIdx = line.indexOf(':');
|
|
34
|
-
if (colonIdx === -1)
|
|
35
|
-
continue;
|
|
36
|
-
const key = line.slice(0, colonIdx).trim();
|
|
37
|
-
const value = line.slice(colonIdx + 1).trim();
|
|
38
|
-
fields[key] = value;
|
|
39
|
-
}
|
|
40
|
-
if (!fields['name'] || !fields['type'])
|
|
41
|
-
return null;
|
|
42
|
-
return {
|
|
43
|
-
name: fields['name'],
|
|
44
|
-
type: fields['type'],
|
|
45
|
-
description: fields['description'] ?? '',
|
|
46
|
-
content: body,
|
|
47
|
-
created: fields['created'] ?? '',
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
/** Save a memory to disk */
|
|
51
|
-
export function saveMemory(type, name, content, description) {
|
|
52
|
-
ensureMemoryDir();
|
|
53
|
-
const filename = toFilename(name);
|
|
54
|
-
const filePath = path.join(MEMORY_DIR, filename);
|
|
55
|
-
const now = new Date().toISOString();
|
|
56
|
-
const fileContent = `---
|
|
57
|
-
name: ${name}
|
|
58
|
-
type: ${type}
|
|
59
|
-
description: ${description ?? name}
|
|
60
|
-
created: ${now}
|
|
61
|
-
---
|
|
62
|
-
${content}
|
|
63
|
-
`;
|
|
64
|
-
fs.writeFileSync(filePath, fileContent);
|
|
65
|
-
updateIndex();
|
|
66
|
-
}
|
|
67
|
-
/** Load all memories */
|
|
68
|
-
export function loadAllMemories() {
|
|
69
|
-
ensureMemoryDir();
|
|
70
|
-
const files = fs.readdirSync(MEMORY_DIR)
|
|
71
|
-
.filter(f => f.endsWith('.md') && f !== 'MEMORY.md');
|
|
72
|
-
const memories = [];
|
|
73
|
-
for (const file of files) {
|
|
74
|
-
try {
|
|
75
|
-
const content = fs.readFileSync(path.join(MEMORY_DIR, file), 'utf-8');
|
|
76
|
-
const memory = parseMemoryFile(content);
|
|
77
|
-
if (memory)
|
|
78
|
-
memories.push(memory);
|
|
79
|
-
}
|
|
80
|
-
catch {
|
|
81
|
-
// Skip corrupt files
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
return memories;
|
|
85
|
-
}
|
|
86
|
-
/** Load memories relevant to a given cwd (project memories match by path) */
|
|
87
|
-
export function loadMemories(cwd) {
|
|
88
|
-
const all = loadAllMemories();
|
|
89
|
-
// Return all non-project memories + project memories matching cwd
|
|
90
|
-
return all.filter(m => {
|
|
91
|
-
if (m.type !== 'project')
|
|
92
|
-
return true;
|
|
93
|
-
// Project memories are relevant if their content mentions the cwd basename
|
|
94
|
-
const projectName = path.basename(cwd).toLowerCase();
|
|
95
|
-
return m.content.toLowerCase().includes(projectName) || m.name.toLowerCase().includes(projectName);
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
/** Search memories by keyword */
|
|
99
|
-
export function searchMemories(query) {
|
|
100
|
-
const all = loadAllMemories();
|
|
101
|
-
const lowerQuery = query.toLowerCase();
|
|
102
|
-
return all.filter(m => m.name.toLowerCase().includes(lowerQuery) ||
|
|
103
|
-
m.content.toLowerCase().includes(lowerQuery) ||
|
|
104
|
-
m.description.toLowerCase().includes(lowerQuery));
|
|
105
|
-
}
|
|
106
|
-
/** Delete a memory by name */
|
|
107
|
-
export function deleteMemory(name) {
|
|
108
|
-
ensureMemoryDir();
|
|
109
|
-
const filename = toFilename(name);
|
|
110
|
-
const filePath = path.join(MEMORY_DIR, filename);
|
|
111
|
-
if (fs.existsSync(filePath)) {
|
|
112
|
-
fs.unlinkSync(filePath);
|
|
113
|
-
updateIndex();
|
|
114
|
-
return true;
|
|
115
|
-
}
|
|
116
|
-
// Try finding by exact name match in files
|
|
117
|
-
const files = fs.readdirSync(MEMORY_DIR)
|
|
118
|
-
.filter(f => f.endsWith('.md') && f !== 'MEMORY.md');
|
|
119
|
-
for (const file of files) {
|
|
120
|
-
try {
|
|
121
|
-
const content = fs.readFileSync(path.join(MEMORY_DIR, file), 'utf-8');
|
|
122
|
-
const memory = parseMemoryFile(content);
|
|
123
|
-
if (memory && memory.name.toLowerCase() === name.toLowerCase()) {
|
|
124
|
-
fs.unlinkSync(path.join(MEMORY_DIR, file));
|
|
125
|
-
updateIndex();
|
|
126
|
-
return true;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
catch {
|
|
130
|
-
continue;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
return false;
|
|
134
|
-
}
|
|
135
|
-
/** Update the MEMORY.md index file */
|
|
136
|
-
function updateIndex() {
|
|
137
|
-
ensureMemoryDir();
|
|
138
|
-
const memories = loadAllMemories();
|
|
139
|
-
const lines = ['# O\'Route Memory Index\n'];
|
|
140
|
-
lines.push(`Last updated: ${new Date().toISOString()}\n`);
|
|
141
|
-
const grouped = {};
|
|
142
|
-
for (const m of memories) {
|
|
143
|
-
if (!grouped[m.type])
|
|
144
|
-
grouped[m.type] = [];
|
|
145
|
-
grouped[m.type].push(m);
|
|
146
|
-
}
|
|
147
|
-
for (const [type, mems] of Object.entries(grouped)) {
|
|
148
|
-
lines.push(`## ${type}`);
|
|
149
|
-
for (const m of mems) {
|
|
150
|
-
lines.push(`- **${m.name}**: ${m.description}`);
|
|
151
|
-
}
|
|
152
|
-
lines.push('');
|
|
153
|
-
}
|
|
154
|
-
fs.writeFileSync(MEMORY_INDEX, lines.join('\n'));
|
|
155
|
-
}
|
|
156
|
-
/** Build memory context string for system prompt injection */
|
|
157
|
-
export function buildMemoryContext(cwd) {
|
|
158
|
-
const memories = loadMemories(cwd);
|
|
159
|
-
if (memories.length === 0)
|
|
160
|
-
return '';
|
|
161
|
-
const parts = ['--- Memories ---'];
|
|
162
|
-
for (const m of memories.slice(0, 10)) {
|
|
163
|
-
parts.push(`[${m.type}] ${m.name}: ${m.content.slice(0, 200)}`);
|
|
164
|
-
}
|
|
165
|
-
parts.push('--- End Memories ---');
|
|
166
|
-
return parts.join('\n');
|
|
167
|
-
}
|
|
168
|
-
/** Handle /remember command */
|
|
169
|
-
export function handleRememberCommand(arg) {
|
|
170
|
-
if (!arg) {
|
|
171
|
-
console.log(`${YELLOW} Usage: /remember <text to remember>${RESET}`);
|
|
172
|
-
return;
|
|
173
|
-
}
|
|
174
|
-
// Extract name from first sentence or use truncated text
|
|
175
|
-
const name = arg.length > 50 ? arg.slice(0, 50) : arg;
|
|
176
|
-
saveMemory('feedback', name, arg);
|
|
177
|
-
console.log(`${GREEN} Remembered: ${name}${RESET}`);
|
|
178
|
-
}
|
|
179
|
-
/** Handle /memories command */
|
|
180
|
-
export function handleMemoriesCommand() {
|
|
181
|
-
const memories = loadAllMemories();
|
|
182
|
-
if (memories.length === 0) {
|
|
183
|
-
console.log(`${GRAY} No memories saved. Use /remember <text> to add one.${RESET}`);
|
|
184
|
-
return;
|
|
185
|
-
}
|
|
186
|
-
console.log();
|
|
187
|
-
console.log(`${BOLD} Memories${RESET}`);
|
|
188
|
-
console.log(`${GRAY} ${'─'.repeat(40)}${RESET}`);
|
|
189
|
-
for (const m of memories) {
|
|
190
|
-
console.log(`${GREEN} [${m.type}]${RESET} ${WHITE}${m.name}${RESET}`);
|
|
191
|
-
console.log(`${DIM} ${m.content.slice(0, 80)}${m.content.length > 80 ? '...' : ''}${RESET}`);
|
|
192
|
-
}
|
|
193
|
-
console.log();
|
|
194
|
-
}
|
|
195
|
-
/** Handle /forget command */
|
|
196
|
-
export function handleForgetCommand(arg) {
|
|
197
|
-
if (!arg) {
|
|
198
|
-
console.log(`${YELLOW} Usage: /forget <memory name>${RESET}`);
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
201
|
-
if (deleteMemory(arg)) {
|
|
202
|
-
console.log(`${GREEN} Forgot: ${arg}${RESET}`);
|
|
203
|
-
}
|
|
204
|
-
else {
|
|
205
|
-
console.log(`${YELLOW} Memory not found: ${arg}${RESET}`);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
//# sourceMappingURL=memory.js.map
|
package/dist/memory.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"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"}
|
package/dist/session.d.ts
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import type { SessionStats } from './cost.js';
|
|
2
|
-
interface Message {
|
|
3
|
-
role: string;
|
|
4
|
-
content: string | Array<{
|
|
5
|
-
type: string;
|
|
6
|
-
[key: string]: unknown;
|
|
7
|
-
}>;
|
|
8
|
-
}
|
|
9
|
-
interface SavedSession {
|
|
10
|
-
name?: string;
|
|
11
|
-
cwd: string;
|
|
12
|
-
messages: Message[];
|
|
13
|
-
stats: SessionStats;
|
|
14
|
-
startTime: number;
|
|
15
|
-
endTime: number;
|
|
16
|
-
messageCount: number;
|
|
17
|
-
}
|
|
18
|
-
interface SessionListEntry {
|
|
19
|
-
id: string;
|
|
20
|
-
name?: string;
|
|
21
|
-
cwd: string;
|
|
22
|
-
messageCount: number;
|
|
23
|
-
date: string;
|
|
24
|
-
}
|
|
25
|
-
/** Save a conversation session to disk */
|
|
26
|
-
export declare function saveSession(messages: Message[], stats: SessionStats, cwd: string, name?: string): string;
|
|
27
|
-
/** Auto-save session on exit if conversation has >2 messages */
|
|
28
|
-
export declare function autoSaveSession(messages: Message[], stats: SessionStats, cwd: string): void;
|
|
29
|
-
/** List saved sessions (most recent first) */
|
|
30
|
-
export declare function listSessions(limit?: number): SessionListEntry[];
|
|
31
|
-
/** Load a saved session by id (filename without .json) */
|
|
32
|
-
export declare function loadSession(id: string): SavedSession | null;
|
|
33
|
-
/** Print session list */
|
|
34
|
-
export declare function printSessionList(): void;
|
|
35
|
-
/** Handle /save command */
|
|
36
|
-
export declare function handleSaveCommand(arg: string, messages: Message[], stats: SessionStats, cwd: string): void;
|
|
37
|
-
/** Handle /resume command — returns loaded messages or null */
|
|
38
|
-
export declare function handleResumeCommand(arg: string): {
|
|
39
|
-
messages: Message[];
|
|
40
|
-
stats: SessionStats;
|
|
41
|
-
cwd: string;
|
|
42
|
-
} | null;
|
|
43
|
-
export {};
|
package/dist/session.js
DELETED
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* B7: Session Save/Restore — persist and resume conversation sessions.
|
|
3
|
-
*/
|
|
4
|
-
import * as fs from 'node:fs';
|
|
5
|
-
import * as path from 'node:path';
|
|
6
|
-
import * as os from 'node:os';
|
|
7
|
-
import { GREEN, GRAY, BOLD, RESET, YELLOW, WHITE, DIM } from './ui.js';
|
|
8
|
-
const SESSIONS_DIR = path.join(os.homedir(), '.oroute', 'sessions');
|
|
9
|
-
/** Ensure the sessions directory exists */
|
|
10
|
-
function ensureSessionsDir() {
|
|
11
|
-
if (!fs.existsSync(SESSIONS_DIR)) {
|
|
12
|
-
fs.mkdirSync(SESSIONS_DIR, { recursive: true });
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
/** Save a conversation session to disk */
|
|
16
|
-
export function saveSession(messages, stats, cwd, name) {
|
|
17
|
-
ensureSessionsDir();
|
|
18
|
-
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
19
|
-
const filename = name
|
|
20
|
-
? `${timestamp}_${name.replace(/[^a-zA-Z0-9_-]/g, '_')}.json`
|
|
21
|
-
: `${timestamp}.json`;
|
|
22
|
-
const filePath = path.join(SESSIONS_DIR, filename);
|
|
23
|
-
const session = {
|
|
24
|
-
name,
|
|
25
|
-
cwd,
|
|
26
|
-
messages,
|
|
27
|
-
stats,
|
|
28
|
-
startTime: stats.startTime,
|
|
29
|
-
endTime: Date.now(),
|
|
30
|
-
messageCount: messages.length,
|
|
31
|
-
};
|
|
32
|
-
fs.writeFileSync(filePath, JSON.stringify(session, null, 2));
|
|
33
|
-
return filename;
|
|
34
|
-
}
|
|
35
|
-
/** Auto-save session on exit if conversation has >2 messages */
|
|
36
|
-
export function autoSaveSession(messages, stats, cwd) {
|
|
37
|
-
if (messages.length <= 2)
|
|
38
|
-
return;
|
|
39
|
-
try {
|
|
40
|
-
saveSession(messages, stats, cwd);
|
|
41
|
-
}
|
|
42
|
-
catch {
|
|
43
|
-
// Silent fail on auto-save
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
/** List saved sessions (most recent first) */
|
|
47
|
-
export function listSessions(limit = 10) {
|
|
48
|
-
ensureSessionsDir();
|
|
49
|
-
const files = fs.readdirSync(SESSIONS_DIR)
|
|
50
|
-
.filter(f => f.endsWith('.json'))
|
|
51
|
-
.sort()
|
|
52
|
-
.reverse()
|
|
53
|
-
.slice(0, limit);
|
|
54
|
-
const entries = [];
|
|
55
|
-
for (const file of files) {
|
|
56
|
-
try {
|
|
57
|
-
const filePath = path.join(SESSIONS_DIR, file);
|
|
58
|
-
const raw = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
|
|
59
|
-
const id = file.replace('.json', '');
|
|
60
|
-
entries.push({
|
|
61
|
-
id,
|
|
62
|
-
name: raw.name,
|
|
63
|
-
cwd: raw.cwd,
|
|
64
|
-
messageCount: raw.messageCount ?? raw.messages.length,
|
|
65
|
-
date: new Date(raw.startTime).toLocaleString(),
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
catch {
|
|
69
|
-
// Skip corrupt files
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
return entries;
|
|
73
|
-
}
|
|
74
|
-
/** Load a saved session by id (filename without .json) */
|
|
75
|
-
export function loadSession(id) {
|
|
76
|
-
ensureSessionsDir();
|
|
77
|
-
// Try exact match first
|
|
78
|
-
const exactPath = path.join(SESSIONS_DIR, `${id}.json`);
|
|
79
|
-
if (fs.existsSync(exactPath)) {
|
|
80
|
-
try {
|
|
81
|
-
return JSON.parse(fs.readFileSync(exactPath, 'utf-8'));
|
|
82
|
-
}
|
|
83
|
-
catch {
|
|
84
|
-
return null;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
// Try partial match (user might type just the first few chars)
|
|
88
|
-
const files = fs.readdirSync(SESSIONS_DIR)
|
|
89
|
-
.filter(f => f.endsWith('.json') && f.startsWith(id))
|
|
90
|
-
.sort()
|
|
91
|
-
.reverse();
|
|
92
|
-
if (files.length === 0)
|
|
93
|
-
return null;
|
|
94
|
-
const filePath = path.join(SESSIONS_DIR, files[0]);
|
|
95
|
-
try {
|
|
96
|
-
return JSON.parse(fs.readFileSync(filePath, 'utf-8'));
|
|
97
|
-
}
|
|
98
|
-
catch {
|
|
99
|
-
return null;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
/** Print session list */
|
|
103
|
-
export function printSessionList() {
|
|
104
|
-
const sessions = listSessions(10);
|
|
105
|
-
if (sessions.length === 0) {
|
|
106
|
-
console.log(`${GRAY} No saved sessions.${RESET}`);
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
console.log();
|
|
110
|
-
console.log(`${BOLD} Saved Sessions${RESET}`);
|
|
111
|
-
console.log(`${GRAY} ${'─'.repeat(50)}${RESET}`);
|
|
112
|
-
for (let i = 0; i < sessions.length; i++) {
|
|
113
|
-
const s = sessions[i];
|
|
114
|
-
const label = s.name ? `${WHITE}${s.name}${RESET}` : `${DIM}unnamed${RESET}`;
|
|
115
|
-
console.log(`${GREEN} ${i + 1}.${RESET} ${label} — ${GRAY}${s.messageCount} msgs, ${s.date}${RESET}`);
|
|
116
|
-
console.log(`${GRAY} ${s.cwd}${RESET}`);
|
|
117
|
-
console.log(`${DIM} id: ${s.id.slice(0, 30)}...${RESET}`);
|
|
118
|
-
}
|
|
119
|
-
console.log();
|
|
120
|
-
}
|
|
121
|
-
/** Handle /save command */
|
|
122
|
-
export function handleSaveCommand(arg, messages, stats, cwd) {
|
|
123
|
-
if (messages.length === 0) {
|
|
124
|
-
console.log(`${YELLOW} Nothing to save (no messages).${RESET}`);
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
const name = arg || undefined;
|
|
128
|
-
const filename = saveSession(messages, stats, cwd, name);
|
|
129
|
-
console.log(`${GREEN} Session saved: ${filename}${RESET}`);
|
|
130
|
-
}
|
|
131
|
-
/** Handle /resume command — returns loaded messages or null */
|
|
132
|
-
export function handleResumeCommand(arg) {
|
|
133
|
-
if (!arg) {
|
|
134
|
-
// Show list and ask user to specify
|
|
135
|
-
printSessionList();
|
|
136
|
-
console.log(`${GRAY} Usage: /resume <id or number>${RESET}`);
|
|
137
|
-
return null;
|
|
138
|
-
}
|
|
139
|
-
// Check if arg is a number (index from list)
|
|
140
|
-
const index = parseInt(arg, 10);
|
|
141
|
-
if (!isNaN(index) && index > 0) {
|
|
142
|
-
const sessions = listSessions(10);
|
|
143
|
-
const session = sessions[index - 1];
|
|
144
|
-
if (!session) {
|
|
145
|
-
console.log(`${YELLOW} Session #${index} not found.${RESET}`);
|
|
146
|
-
return null;
|
|
147
|
-
}
|
|
148
|
-
return loadAndPrint(session.id);
|
|
149
|
-
}
|
|
150
|
-
// Try as session id
|
|
151
|
-
return loadAndPrint(arg);
|
|
152
|
-
}
|
|
153
|
-
function loadAndPrint(id) {
|
|
154
|
-
const session = loadSession(id);
|
|
155
|
-
if (!session) {
|
|
156
|
-
console.log(`${YELLOW} Session not found: ${id}${RESET}`);
|
|
157
|
-
return null;
|
|
158
|
-
}
|
|
159
|
-
console.log(`${GREEN} Resumed session: ${session.name ?? 'unnamed'} (${session.messages.length} messages)${RESET}`);
|
|
160
|
-
return {
|
|
161
|
-
messages: session.messages,
|
|
162
|
-
stats: session.stats,
|
|
163
|
-
cwd: session.cwd,
|
|
164
|
-
};
|
|
165
|
-
}
|
|
166
|
-
//# sourceMappingURL=session.js.map
|
package/dist/session.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
package/dist/streaming.d.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/** A content block accumulated during streaming */
|
|
2
|
-
export interface StreamedContentBlock {
|
|
3
|
-
type: 'text' | 'tool_use';
|
|
4
|
-
text?: string;
|
|
5
|
-
id?: string;
|
|
6
|
-
name?: string;
|
|
7
|
-
inputJson?: string;
|
|
8
|
-
input?: Record<string, unknown>;
|
|
9
|
-
}
|
|
10
|
-
export interface StreamResult {
|
|
11
|
-
contentBlocks: StreamedContentBlock[];
|
|
12
|
-
stopReason: string | null;
|
|
13
|
-
usage: {
|
|
14
|
-
input_tokens: number;
|
|
15
|
-
output_tokens: number;
|
|
16
|
-
};
|
|
17
|
-
model: string;
|
|
18
|
-
routingMetadata?: {
|
|
19
|
-
provider: string;
|
|
20
|
-
taskComplexity: number;
|
|
21
|
-
totalLatencyMs: number;
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
/** Parse an SSE stream from a fetch Response into structured result */
|
|
25
|
-
export declare function parseSSEStream(response: Response, onTextDelta: (text: string) => void): Promise<StreamResult>;
|
|
26
|
-
/** Check if a Response is SSE (streaming) */
|
|
27
|
-
export declare function isSSEResponse(response: Response): boolean;
|