yuangs 2.11.0 → 2.12.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.
@@ -0,0 +1,138 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.StreamMarkdownRenderer = void 0;
40
+ const chalk_1 = __importDefault(require("chalk"));
41
+ const marked = __importStar(require("marked"));
42
+ const marked_terminal_1 = __importDefault(require("marked-terminal"));
43
+ // 初始化 marked 配置
44
+ marked.setOptions({
45
+ renderer: new marked_terminal_1.default({
46
+ tab: 2,
47
+ width: process.stdout.columns || 80,
48
+ showSectionPrefix: false
49
+ })
50
+ });
51
+ class StreamMarkdownRenderer {
52
+ fullResponse = '';
53
+ prefix;
54
+ isFirstOutput = true;
55
+ spinner = null;
56
+ startTime;
57
+ constructor(prefix = chalk_1.default.bold.blue('🤖 AI:'), spinner) {
58
+ this.prefix = prefix;
59
+ this.spinner = spinner || null;
60
+ this.startTime = Date.now();
61
+ }
62
+ /**
63
+ * 处理流式数据块
64
+ */
65
+ onChunk(chunk) {
66
+ if (this.spinner && this.spinner.isSpinning) {
67
+ this.spinner.stop();
68
+ }
69
+ if (this.isFirstOutput) {
70
+ process.stdout.write(this.prefix);
71
+ this.isFirstOutput = false;
72
+ }
73
+ this.fullResponse += chunk;
74
+ process.stdout.write(chunk);
75
+ }
76
+ /**
77
+ * 流结束,执行回滚并渲染 Markdown
78
+ */
79
+ finish() {
80
+ // 如果 Spinner 还在转(说明没有任何输出),先停掉
81
+ if (this.spinner && this.spinner.isSpinning) {
82
+ this.spinner.stop();
83
+ }
84
+ const formatted = marked.parse(this.fullResponse, { async: false }).trim();
85
+ if (process.stdout.isTTY && this.fullResponse.trim()) {
86
+ const screenWidth = process.stdout.columns || 80;
87
+ const totalContent = this.prefix + this.fullResponse;
88
+ // 计算原始文本占用的可视行数
89
+ const lineCount = this.getVisualLineCount(totalContent, screenWidth);
90
+ // 1. 清除当前行剩余内容
91
+ process.stdout.write('\r\x1b[K');
92
+ // 2. 向上回滚并清除之前的行
93
+ for (let i = 0; i < lineCount - 1; i++) {
94
+ process.stdout.write('\x1b[A\x1b[K');
95
+ }
96
+ // 3. 输出格式化后的 Markdown
97
+ process.stdout.write(this.prefix + formatted + '\n');
98
+ }
99
+ else {
100
+ // 非 TTY 模式或无内容,直接补充换行(如果之前输出了内容)
101
+ if (this.fullResponse.trim()) {
102
+ process.stdout.write('\n');
103
+ }
104
+ }
105
+ // 输出耗时统计
106
+ const elapsed = (Date.now() - this.startTime) / 1000;
107
+ process.stdout.write('\n' + chalk_1.default.gray(`─`.repeat(20) + ` (耗时: ${elapsed.toFixed(2)}s) ` + `─`.repeat(20) + '\n\n'));
108
+ return this.fullResponse;
109
+ }
110
+ /**
111
+ * 计算文本在终端的可视行数
112
+ */
113
+ getVisualLineCount(text, screenWidth) {
114
+ const stripAnsi = (str) => str.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, '');
115
+ const lines = text.split('\n');
116
+ let totalLines = 0;
117
+ for (const line of lines) {
118
+ // Expand tabs
119
+ const expandedLine = line.replace(/\t/g, ' ');
120
+ const cleanLine = stripAnsi(expandedLine);
121
+ let lineWidth = 0;
122
+ for (const char of cleanLine) {
123
+ const code = char.codePointAt(0) || 0;
124
+ // 大部分宽字符(如中文)占 2 格
125
+ lineWidth += code > 255 ? 2 : 1;
126
+ }
127
+ if (lineWidth === 0) {
128
+ totalLines += 1;
129
+ }
130
+ else {
131
+ totalLines += Math.ceil(lineWidth / screenWidth);
132
+ }
133
+ }
134
+ return totalLines;
135
+ }
136
+ }
137
+ exports.StreamMarkdownRenderer = StreamMarkdownRenderer;
138
+ //# sourceMappingURL=renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/utils/renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * 解析并处理特殊语法(@、#、:ls 等)
3
+ */
4
+ export declare function handleSpecialSyntax(input: string, stdinData?: string): Promise<{
5
+ processed: boolean;
6
+ result?: string;
7
+ }>;
@@ -0,0 +1,243 @@
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.handleSpecialSyntax = handleSpecialSyntax;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const child_process_1 = require("child_process");
10
+ const util_1 = require("util");
11
+ const fileReader_1 = require("../core/fileReader");
12
+ const contextBuffer_1 = require("../commands/contextBuffer");
13
+ const contextStorage_1 = require("../commands/contextStorage");
14
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
15
+ /**
16
+ * 解析并处理特殊语法(@、#、:ls 等)
17
+ */
18
+ async function handleSpecialSyntax(input, stdinData) {
19
+ const trimmed = input.trim();
20
+ // 处理 @ 文件引用语法
21
+ if (trimmed.startsWith('@')) {
22
+ // 检查是否是 @! 立即执行语法
23
+ const immediateExecMatch = trimmed.match(/^@\s*!\s*(.+?)$/);
24
+ if (immediateExecMatch) {
25
+ const filePath = immediateExecMatch[1].trim();
26
+ return await handleImmediateExec(filePath);
27
+ }
28
+ // 检查是否是带行号的语法 @file:start-end
29
+ const lineRangeMatch = trimmed.match(/^@\s*(.+?)(?::(\d+)(?:-(\d+))?)?\s*(?:\n(.*))?$/s);
30
+ if (lineRangeMatch) {
31
+ const filePath = lineRangeMatch[1];
32
+ const startLine = lineRangeMatch[2] ? parseInt(lineRangeMatch[2]) : null;
33
+ const endLine = lineRangeMatch[3] ? parseInt(lineRangeMatch[3]) : null;
34
+ const question = lineRangeMatch[4] || (stdinData ? `分析以下文件内容:\n\n${stdinData}` : '请分析这个文件');
35
+ return await handleFileReference(filePath.trim(), startLine, endLine, question);
36
+ }
37
+ }
38
+ // 处理 # 目录引用语法
39
+ if (trimmed.startsWith('#')) {
40
+ const dirMatch = trimmed.match(/^#\s*(.+?)\s*(?:\n(.*))?$/s);
41
+ if (dirMatch) {
42
+ const dirPath = dirMatch[1].trim();
43
+ const question = dirMatch[2] || (stdinData ? `分析以下目录内容:\n\n${stdinData}` : '请分析这个目录');
44
+ return await handleDirectoryReference(dirPath, question);
45
+ }
46
+ }
47
+ // 处理 :ls 命令
48
+ if (trimmed === ':ls') {
49
+ return await handleListContext();
50
+ }
51
+ // 处理 :cat [index] 命令
52
+ if (trimmed === ':cat' || trimmed.startsWith(':cat ')) {
53
+ const parts = trimmed.split(' ');
54
+ const index = parts.length > 1 ? parseInt(parts[1]) : null;
55
+ return await handleCatContext(index);
56
+ }
57
+ // 处理 :clear 命令
58
+ if (trimmed === ':clear') {
59
+ return await handleClearContext();
60
+ }
61
+ // 如果不是特殊语法,返回未处理
62
+ return { processed: false };
63
+ }
64
+ async function handleFileReference(filePath, startLine = null, endLine = null, question) {
65
+ const fullPath = path_1.default.resolve(filePath);
66
+ if (!fs_1.default.existsSync(fullPath) || !fs_1.default.statSync(fullPath).isFile()) {
67
+ return {
68
+ processed: true,
69
+ result: `错误: 文件 "${filePath}" 不存在或不是一个文件`
70
+ };
71
+ }
72
+ try {
73
+ let content = fs_1.default.readFileSync(fullPath, 'utf-8');
74
+ // 如果指定了行号范围,则提取相应行
75
+ if (startLine !== null) {
76
+ const lines = content.split('\n');
77
+ // 验证行号范围
78
+ if (startLine < 1 || startLine > lines.length) {
79
+ return {
80
+ processed: true,
81
+ result: `错误: 起始行号 ${startLine} 超出文件范围 (文件共有 ${lines.length} 行)`
82
+ };
83
+ }
84
+ const startIdx = startLine - 1; // 转换为数组索引(从0开始)
85
+ let endIdx = endLine ? Math.min(endLine, lines.length) : lines.length; // 如果未指定结束行,则到文件末尾
86
+ if (endLine && (endLine < startLine || endLine > lines.length)) {
87
+ return {
88
+ processed: true,
89
+ result: `错误: 结束行号 ${endLine} 超出有效范围 (应在 ${startLine}-${lines.length} 之间)`
90
+ };
91
+ }
92
+ // 提取指定范围的行
93
+ content = lines.slice(startIdx, endIdx).join('\n');
94
+ }
95
+ const contentMap = new Map();
96
+ contentMap.set(filePath, content);
97
+ const prompt = (0, fileReader_1.buildPromptWithFileContent)(`文件: ${filePath}${startLine !== null ? `:${startLine}${endLine ? `-${endLine}` : ''}` : ''}`, [filePath], contentMap, question || `请分析文件: ${filePath}`);
98
+ return { processed: true, result: prompt };
99
+ }
100
+ catch (error) {
101
+ return {
102
+ processed: true,
103
+ result: `读取文件失败: ${error}`
104
+ };
105
+ }
106
+ }
107
+ async function handleDirectoryReference(dirPath, question) {
108
+ const fullPath = path_1.default.resolve(dirPath);
109
+ if (!fs_1.default.existsSync(fullPath) || !fs_1.default.statSync(fullPath).isDirectory()) {
110
+ return {
111
+ processed: true,
112
+ result: `错误: 目录 "${dirPath}" 不存在或不是一个目录`
113
+ };
114
+ }
115
+ try {
116
+ const findCommand = process.platform === 'darwin' || process.platform === 'linux'
117
+ ? `find "${fullPath}" -type f`
118
+ : `dir /s /b "${fullPath}"`;
119
+ const { stdout } = await execAsync(findCommand);
120
+ const filePaths = stdout.trim().split('\n').filter(f => f);
121
+ if (filePaths.length === 0) {
122
+ return {
123
+ processed: true,
124
+ result: `目录 "${dirPath}" 下没有文件`
125
+ };
126
+ }
127
+ const contentMap = (0, fileReader_1.readFilesContent)(filePaths);
128
+ const prompt = (0, fileReader_1.buildPromptWithFileContent)(`目录: ${dirPath}\n找到 ${filePaths.length} 个文件`, filePaths.map(p => path_1.default.relative(process.cwd(), p)), contentMap, question);
129
+ return { processed: true, result: prompt };
130
+ }
131
+ catch (error) {
132
+ return {
133
+ processed: true,
134
+ result: `读取目录失败: ${error}`
135
+ };
136
+ }
137
+ }
138
+ async function handleImmediateExec(filePath) {
139
+ const fullPath = path_1.default.resolve(filePath);
140
+ if (!fs_1.default.existsSync(fullPath)) {
141
+ return {
142
+ processed: true,
143
+ result: `错误: 文件 "${filePath}" 不存在`
144
+ };
145
+ }
146
+ try {
147
+ // 读取文件内容并添加到上下文
148
+ const content = fs_1.default.readFileSync(fullPath, 'utf-8');
149
+ const contextBuffer = new contextBuffer_1.ContextBuffer();
150
+ const persisted = await (0, contextStorage_1.loadContext)();
151
+ contextBuffer.import(persisted);
152
+ contextBuffer.add({
153
+ type: 'file',
154
+ path: filePath,
155
+ content
156
+ });
157
+ await (0, contextStorage_1.saveContext)(contextBuffer.export());
158
+ // 执行文件
159
+ const { stdout, stderr } = await execAsync(`chmod +x "${fullPath}" && "${fullPath}"`, { cwd: process.cwd() });
160
+ // 将命令输出作为上下文返回
161
+ const result = `文件 "${filePath}" 已执行\n\n标准输出:\n${stdout}\n\n标准错误:\n${stderr}`;
162
+ return { processed: true, result };
163
+ }
164
+ catch (error) {
165
+ return {
166
+ processed: true,
167
+ result: `执行文件失败: ${error}`
168
+ };
169
+ }
170
+ }
171
+ async function handleListContext() {
172
+ try {
173
+ const persisted = await (0, contextStorage_1.loadContext)();
174
+ const contextBuffer = new contextBuffer_1.ContextBuffer();
175
+ contextBuffer.import(persisted);
176
+ if (contextBuffer.isEmpty()) {
177
+ return { processed: true, result: '当前没有上下文' };
178
+ }
179
+ const list = contextBuffer.list();
180
+ let result = '当前上下文列表:\n';
181
+ list.forEach((item, index) => {
182
+ result += `${index + 1}. ${item.type}: ${item.path} (${item.tokens} tokens)\n`;
183
+ });
184
+ return { processed: true, result };
185
+ }
186
+ catch (error) {
187
+ return {
188
+ processed: true,
189
+ result: `读取上下文失败: ${error}`
190
+ };
191
+ }
192
+ }
193
+ async function handleCatContext(index) {
194
+ try {
195
+ const persisted = await (0, contextStorage_1.loadContext)();
196
+ const contextBuffer = new contextBuffer_1.ContextBuffer();
197
+ contextBuffer.import(persisted);
198
+ if (contextBuffer.isEmpty()) {
199
+ return { processed: true, result: '当前没有上下文' };
200
+ }
201
+ const items = contextBuffer.export();
202
+ if (index !== null) {
203
+ // 查看指定索引
204
+ if (index < 1 || index > items.length) {
205
+ return { processed: true, result: `错误: 索引 ${index} 超出范围 (共有 ${items.length} 个项目)` };
206
+ }
207
+ const item = items[index - 1];
208
+ return {
209
+ processed: true,
210
+ result: `--- [${index}] ${item.type}: ${item.path} ---\n${item.content}\n--- End ---`
211
+ };
212
+ }
213
+ else {
214
+ // 查看全部
215
+ let result = '=== 当前完整上下文内容 ===\n\n';
216
+ items.forEach((item, i) => {
217
+ result += `--- [${i + 1}] ${item.type}: ${item.path} ---\n${item.content}\n\n`;
218
+ });
219
+ result += '==========================';
220
+ return { processed: true, result };
221
+ }
222
+ }
223
+ catch (error) {
224
+ return {
225
+ processed: true,
226
+ result: `读取上下文失败: ${error}`
227
+ };
228
+ }
229
+ }
230
+ async function handleClearContext() {
231
+ try {
232
+ // 清除持久化存储
233
+ await (0, contextStorage_1.saveContext)([]);
234
+ return { processed: true, result: '上下文已清空(含持久化)' };
235
+ }
236
+ catch (error) {
237
+ return {
238
+ processed: true,
239
+ result: `清除上下文失败: ${error}`
240
+ };
241
+ }
242
+ }
243
+ //# sourceMappingURL=syntaxHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syntaxHandler.js","sourceRoot":"","sources":["../../src/utils/syntaxHandler.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yuangs",
3
- "version": "2.11.0",
3
+ "version": "2.12.0",
4
4
  "description": "苑广山的个人应用集合 CLI(彩色版)",
5
5
  "author": "苑广山",
6
6
  "license": "ISC",
@@ -14,7 +14,7 @@
14
14
  ],
15
15
  "scripts": {
16
16
  "dev": "ts-node src/cli.ts",
17
- "build": "tsc",
17
+ "build": "tsc && chmod +x dist/cli.js",
18
18
  "prepare": "npm run build",
19
19
  "prepublishOnly": "npm run build",
20
20
  "test": "jest",