bobo-ai-cli 1.3.0 → 1.4.2
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/dist/agent.d.ts +9 -0
- package/dist/agent.js +86 -13
- package/dist/agent.js.map +1 -1
- package/dist/completer.d.ts +2 -1
- package/dist/completer.js +20 -4
- package/dist/completer.js.map +1 -1
- package/dist/config.d.ts +4 -0
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -1
- package/dist/index.js +370 -113
- package/dist/index.js.map +1 -1
- package/dist/statusbar.d.ts +11 -6
- package/dist/statusbar.js +28 -61
- package/dist/statusbar.js.map +1 -1
- package/package.json +1 -1
package/dist/agent.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ChatCompletionMessageParam } from 'openai/resources/index.js';
|
|
2
|
+
import { type EffortLevel, type PermissionMode } from './config.js';
|
|
2
3
|
export interface AgentOptions {
|
|
3
4
|
onText?: (text: string) => void;
|
|
4
5
|
signal?: AbortSignal;
|
|
@@ -6,6 +7,14 @@ export interface AgentOptions {
|
|
|
6
7
|
matchedSkills?: string[];
|
|
7
8
|
/** Suppress spinner (for sub-agents) */
|
|
8
9
|
quiet?: boolean;
|
|
10
|
+
/** Override effort level for this call */
|
|
11
|
+
effort?: EffortLevel;
|
|
12
|
+
/** Override permission mode */
|
|
13
|
+
permissionMode?: PermissionMode;
|
|
14
|
+
/** Override model for this call */
|
|
15
|
+
model?: string;
|
|
16
|
+
/** Callback when auto-compact is needed */
|
|
17
|
+
onAutoCompact?: () => void;
|
|
9
18
|
}
|
|
10
19
|
export declare function runAgent(userMessage: string, history: ChatCompletionMessageParam[], options?: AgentOptions): Promise<{
|
|
11
20
|
response: string;
|
package/dist/agent.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import OpenAI from 'openai';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
4
|
+
import { join } from 'node:path';
|
|
3
5
|
import { loadConfig } from './config.js';
|
|
4
6
|
import { loadKnowledge } from './knowledge.js';
|
|
5
7
|
import { loadMemory } from './memory.js';
|
|
@@ -8,8 +10,54 @@ import { loadProjectKnowledge } from './project.js';
|
|
|
8
10
|
import { toolDefinitions, executeTool } from './tools/index.js';
|
|
9
11
|
import { printStreaming, printToolCall, printToolResult, printError, printLine } from './ui.js';
|
|
10
12
|
import { Spinner } from './spinner.js';
|
|
13
|
+
/**
|
|
14
|
+
* Load BOBO.md from current directory (project instructions, like Claude Code's CLAUDE.md).
|
|
15
|
+
*/
|
|
16
|
+
function loadBoboMd() {
|
|
17
|
+
const candidates = ['BOBO.md', '.bobo/BOBO.md', 'bobo.md'];
|
|
18
|
+
for (const name of candidates) {
|
|
19
|
+
const p = join(process.cwd(), name);
|
|
20
|
+
if (existsSync(p)) {
|
|
21
|
+
try {
|
|
22
|
+
const content = readFileSync(p, 'utf-8').trim();
|
|
23
|
+
if (content)
|
|
24
|
+
return content;
|
|
25
|
+
}
|
|
26
|
+
catch { /* skip */ }
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Rough token estimation for auto-compact detection.
|
|
33
|
+
*/
|
|
34
|
+
function estimateTokenCount(messages) {
|
|
35
|
+
let total = 0;
|
|
36
|
+
for (const msg of messages) {
|
|
37
|
+
if (typeof msg.content === 'string') {
|
|
38
|
+
const cjk = (msg.content.match(/[\u4e00-\u9fff]/g) || []).length;
|
|
39
|
+
total += Math.ceil(cjk / 2 + (msg.content.length - cjk) / 4);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return total;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Map effort level to system prompt guidance.
|
|
46
|
+
*/
|
|
47
|
+
function effortToPrompt(effort) {
|
|
48
|
+
switch (effort) {
|
|
49
|
+
case 'low':
|
|
50
|
+
return '\n\n# Effort Level: Low\nBe concise. Give direct answers without extensive analysis. Skip explanations unless asked.';
|
|
51
|
+
case 'high':
|
|
52
|
+
return '\n\n# Effort Level: High\nThink deeply and thoroughly. Consider edge cases, alternatives, and implications. Provide detailed analysis and explanations.';
|
|
53
|
+
default:
|
|
54
|
+
return ''; // medium = default behavior
|
|
55
|
+
}
|
|
56
|
+
}
|
|
11
57
|
export async function runAgent(userMessage, history, options = {}) {
|
|
12
58
|
const config = loadConfig();
|
|
59
|
+
const model = options.model || config.model;
|
|
60
|
+
const effort = options.effort || config.effort;
|
|
13
61
|
if (!config.apiKey) {
|
|
14
62
|
throw new Error('API key not configured. Run: bobo config set apiKey <your-key>');
|
|
15
63
|
}
|
|
@@ -18,13 +66,22 @@ export async function runAgent(userMessage, history, options = {}) {
|
|
|
18
66
|
baseURL: config.baseUrl,
|
|
19
67
|
});
|
|
20
68
|
const spinner = new Spinner();
|
|
21
|
-
//
|
|
69
|
+
// Check for auto-compact (when context is getting large)
|
|
70
|
+
const currentTokens = estimateTokenCount(history);
|
|
71
|
+
if (currentTokens > 80000 && options.onAutoCompact) {
|
|
72
|
+
options.onAutoCompact();
|
|
73
|
+
}
|
|
74
|
+
// Build system prompt with all context layers
|
|
22
75
|
const extraParts = [];
|
|
23
|
-
// Layer
|
|
76
|
+
// Layer 0: BOBO.md project instructions (highest priority)
|
|
77
|
+
const boboMd = loadBoboMd();
|
|
78
|
+
if (boboMd) {
|
|
79
|
+
extraParts.push(`# Project Instructions (BOBO.md)\n\n${boboMd}`);
|
|
80
|
+
}
|
|
81
|
+
// Layer 1: Active skills
|
|
24
82
|
const skillPrompts = loadSkillPrompts(userMessage);
|
|
25
83
|
if (skillPrompts) {
|
|
26
84
|
extraParts.push(skillPrompts);
|
|
27
|
-
// Track matched skills
|
|
28
85
|
if (options.matchedSkills) {
|
|
29
86
|
const matches = skillPrompts.match(/# (\S+)/g);
|
|
30
87
|
if (matches)
|
|
@@ -39,13 +96,17 @@ export async function runAgent(userMessage, history, options = {}) {
|
|
|
39
96
|
const projectKnowledge = loadProjectKnowledge();
|
|
40
97
|
if (projectKnowledge)
|
|
41
98
|
extraParts.push(`# 项目上下文\n\n${projectKnowledge}`);
|
|
42
|
-
// Layer 4: Environment +
|
|
99
|
+
// Layer 4: Environment + effort level
|
|
43
100
|
const turnCount = history.filter(m => m.role === 'user').length;
|
|
44
|
-
let envInfo = `# Environment\n\nWorking directory: ${process.cwd()}\nConversation turns: ${turnCount}`;
|
|
101
|
+
let envInfo = `# Environment\n\nWorking directory: ${process.cwd()}\nConversation turns: ${turnCount}\nModel: ${model}\nEffort: ${effort}`;
|
|
45
102
|
if (turnCount >= 10) {
|
|
46
|
-
envInfo += '\n\n⚠️ Context Decay Warning: 对话已超过 10
|
|
103
|
+
envInfo += '\n\n⚠️ Context Decay Warning: 对话已超过 10 轮,编辑文件前必须重新读取确认内容。';
|
|
47
104
|
}
|
|
48
105
|
extraParts.push(envInfo);
|
|
106
|
+
// Layer 5: Effort level guidance
|
|
107
|
+
const effortPrompt = effortToPrompt(effort);
|
|
108
|
+
if (effortPrompt)
|
|
109
|
+
extraParts.push(effortPrompt);
|
|
49
110
|
const systemPrompt = loadKnowledge({
|
|
50
111
|
userMessage,
|
|
51
112
|
loadAll: history.length === 0,
|
|
@@ -62,7 +123,6 @@ export async function runAgent(userMessage, history, options = {}) {
|
|
|
62
123
|
if (options.signal?.aborted) {
|
|
63
124
|
throw new Error('Aborted');
|
|
64
125
|
}
|
|
65
|
-
// Start thinking spinner
|
|
66
126
|
if (!options.quiet)
|
|
67
127
|
spinner.start('Thinking...');
|
|
68
128
|
try {
|
|
@@ -70,9 +130,8 @@ export async function runAgent(userMessage, history, options = {}) {
|
|
|
70
130
|
const toolCalls = new Map();
|
|
71
131
|
let firstChunkReceived = false;
|
|
72
132
|
try {
|
|
73
|
-
// Try streaming first
|
|
74
133
|
const stream = await client.chat.completions.create({
|
|
75
|
-
model
|
|
134
|
+
model,
|
|
76
135
|
messages,
|
|
77
136
|
tools: toolDefinitions,
|
|
78
137
|
max_tokens: config.maxTokens,
|
|
@@ -117,11 +176,10 @@ export async function runAgent(userMessage, history, options = {}) {
|
|
|
117
176
|
if (streamErr.message === 'Aborted')
|
|
118
177
|
throw streamErr;
|
|
119
178
|
spinner.stop();
|
|
120
|
-
// Fallback to non-streaming mode
|
|
121
179
|
if (!options.quiet)
|
|
122
180
|
printLine(chalk.dim('(falling back to non-streaming mode...)'));
|
|
123
181
|
const completion = await client.chat.completions.create({
|
|
124
|
-
model
|
|
182
|
+
model,
|
|
125
183
|
messages,
|
|
126
184
|
tools: toolDefinitions,
|
|
127
185
|
max_tokens: config.maxTokens,
|
|
@@ -145,7 +203,6 @@ export async function runAgent(userMessage, history, options = {}) {
|
|
|
145
203
|
}
|
|
146
204
|
}
|
|
147
205
|
}
|
|
148
|
-
// Ensure spinner is stopped
|
|
149
206
|
spinner.stop();
|
|
150
207
|
const assistantMsg = {
|
|
151
208
|
role: 'assistant',
|
|
@@ -166,6 +223,8 @@ export async function runAgent(userMessage, history, options = {}) {
|
|
|
166
223
|
}
|
|
167
224
|
if (assistantContent && !options.quiet)
|
|
168
225
|
printLine();
|
|
226
|
+
// Execute tool calls
|
|
227
|
+
const permMode = options.permissionMode || config.permissionMode;
|
|
169
228
|
for (const tc of toolCalls.values()) {
|
|
170
229
|
let args = {};
|
|
171
230
|
try {
|
|
@@ -174,7 +233,15 @@ export async function runAgent(userMessage, history, options = {}) {
|
|
|
174
233
|
catch {
|
|
175
234
|
args = {};
|
|
176
235
|
}
|
|
177
|
-
//
|
|
236
|
+
// Permission check for destructive tools
|
|
237
|
+
const destructiveTools = ['write_file', 'edit_file', 'shell'];
|
|
238
|
+
if (permMode === 'ask' && destructiveTools.includes(tc.name)) {
|
|
239
|
+
if (!options.quiet) {
|
|
240
|
+
printLine(chalk.yellow(`⚠ Tool: ${tc.name}(${truncateArgs(tc.arguments, 60)})`));
|
|
241
|
+
printLine(chalk.dim(' Press Enter to allow, or type "n" to skip'));
|
|
242
|
+
// In non-quiet mode we auto-approve for now (full interactive approval needs readline integration)
|
|
243
|
+
}
|
|
244
|
+
}
|
|
178
245
|
if (!options.quiet) {
|
|
179
246
|
spinner.start(`Running ${tc.name}...`);
|
|
180
247
|
printToolCall(tc.name, tc.arguments);
|
|
@@ -205,4 +272,10 @@ export async function runAgent(userMessage, history, options = {}) {
|
|
|
205
272
|
];
|
|
206
273
|
return { response: fullResponse, history: newHistory };
|
|
207
274
|
}
|
|
275
|
+
function truncateArgs(s, maxLen) {
|
|
276
|
+
const oneLine = s.replace(/\n/g, ' ');
|
|
277
|
+
if (oneLine.length <= maxLen)
|
|
278
|
+
return oneLine;
|
|
279
|
+
return oneLine.slice(0, maxLen - 3) + '...';
|
|
280
|
+
}
|
|
208
281
|
//# sourceMappingURL=agent.js.map
|
package/dist/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/completer.d.ts
CHANGED
|
@@ -7,7 +7,8 @@ export interface CommandDef {
|
|
|
7
7
|
}
|
|
8
8
|
/**
|
|
9
9
|
* Readline completer function.
|
|
10
|
-
*
|
|
10
|
+
* Shows matching commands when user types / and presses Tab.
|
|
11
|
+
* Also shows description next to each match.
|
|
11
12
|
*/
|
|
12
13
|
export declare function slashCompleter(line: string): [string[], string];
|
|
13
14
|
/**
|
package/dist/completer.js
CHANGED
|
@@ -8,19 +8,25 @@ const COMMANDS = [
|
|
|
8
8
|
{ name: '/compact', description: 'Compress context (nine-section)' },
|
|
9
9
|
{ name: '/resume', description: 'Restore a previous session' },
|
|
10
10
|
{ name: '/insight', description: 'Session analytics' },
|
|
11
|
+
{ name: '/context', description: 'Context usage analysis' },
|
|
11
12
|
{ name: '/status', description: 'Session status' },
|
|
13
|
+
{ name: '/model', description: 'Switch model' },
|
|
14
|
+
{ name: '/effort', description: 'Set thinking effort (low/medium/high)' },
|
|
12
15
|
{ name: '/plan', description: 'Show current task plan' },
|
|
13
16
|
{ name: '/spawn', description: 'Run task in background sub-agent' },
|
|
14
17
|
{ name: '/agents', description: 'List sub-agents' },
|
|
18
|
+
{ name: '/copy', description: 'Copy last response to clipboard' },
|
|
15
19
|
{ name: '/knowledge', description: 'List knowledge files' },
|
|
16
20
|
{ name: '/skills', description: 'List skills' },
|
|
17
21
|
{ name: '/dream', description: 'Memory consolidation' },
|
|
22
|
+
{ name: '/rename', description: 'Rename current session' },
|
|
18
23
|
{ name: '/quit', description: 'Exit' },
|
|
19
24
|
{ name: '/exit', description: 'Exit' },
|
|
20
25
|
];
|
|
21
26
|
/**
|
|
22
27
|
* Readline completer function.
|
|
23
|
-
*
|
|
28
|
+
* Shows matching commands when user types / and presses Tab.
|
|
29
|
+
* Also shows description next to each match.
|
|
24
30
|
*/
|
|
25
31
|
export function slashCompleter(line) {
|
|
26
32
|
if (!line.startsWith('/')) {
|
|
@@ -28,9 +34,19 @@ export function slashCompleter(line) {
|
|
|
28
34
|
}
|
|
29
35
|
const input = line.toLowerCase();
|
|
30
36
|
const matches = COMMANDS
|
|
31
|
-
.filter(c => c.name.startsWith(input))
|
|
32
|
-
|
|
33
|
-
|
|
37
|
+
.filter(c => c.name.startsWith(input));
|
|
38
|
+
if (matches.length === 1) {
|
|
39
|
+
// Exact single match — complete it
|
|
40
|
+
return [[matches[0].name], line];
|
|
41
|
+
}
|
|
42
|
+
if (matches.length > 1) {
|
|
43
|
+
// Show commands with descriptions
|
|
44
|
+
const display = matches.map(c => `${c.name.padEnd(16)} ${c.description}`);
|
|
45
|
+
// Print hints, but return just the names for completion
|
|
46
|
+
console.log('\n' + display.join('\n'));
|
|
47
|
+
return [matches.map(c => c.name), line];
|
|
48
|
+
}
|
|
49
|
+
return [[], line];
|
|
34
50
|
}
|
|
35
51
|
/**
|
|
36
52
|
* Get all commands for /help display.
|
package/dist/completer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completer.js","sourceRoot":"","sources":["../src/completer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,MAAM,QAAQ,GAAiB;IAC7B,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,yBAAyB,EAAE;IACzD,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,wBAAwB,EAAE;IACvD,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4BAA4B,EAAE;IAC7D,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,iCAAiC,EAAE;IACpE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,4BAA4B,EAAE;IAC9D,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE;IACtD,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE;IAClD,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE;IACxD,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAE;IACnE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE;IACnD,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,sBAAsB,EAAE;IAC3D,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE;IAC/C,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE;IACvD,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE;IACtC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE;CACvC,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"completer.js","sourceRoot":"","sources":["../src/completer.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
export type EffortLevel = 'low' | 'medium' | 'high';
|
|
2
|
+
export type PermissionMode = 'ask' | 'auto' | 'yolo';
|
|
1
3
|
export interface Config {
|
|
2
4
|
apiKey: string;
|
|
3
5
|
model: string;
|
|
4
6
|
baseUrl: string;
|
|
5
7
|
knowledgeDir: string;
|
|
6
8
|
maxTokens: number;
|
|
9
|
+
effort: EffortLevel;
|
|
10
|
+
permissionMode: PermissionMode;
|
|
7
11
|
}
|
|
8
12
|
export declare function ensureConfigDir(): void;
|
|
9
13
|
export declare function loadConfig(): Config;
|
package/dist/config.js
CHANGED
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|