@ia-ccun/code-agent-cli 0.0.51-beta.9 → 0.0.52-release
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/cli.js +4 -3
- package/config/agent/extensions/aicode-advisor.ts +707 -0
- package/config/agent/extensions/aicode-btw.ts +2273 -0
- package/config/agent/extensions/aicode-plan.ts +16 -8
- package/config/agent/extensions/custom-footer.ts +3 -4
- package/config/agent/extensions/msg-debug.ts +33 -9
- package/config/agent/help.md +23 -0
- package/config/agent/settings.json +0 -2
- package/dist/banner.d.ts +5 -1
- package/dist/banner.d.ts.map +1 -1
- package/dist/banner.js +106 -7
- package/dist/banner.js.map +1 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/package.json +2 -2
|
@@ -80,6 +80,10 @@ const EXECUTION_TRIGGER_PROMPT =
|
|
|
80
80
|
// ============== 工具函数 ==============
|
|
81
81
|
|
|
82
82
|
function isSafeReadOnlyCommand(command: string): boolean {
|
|
83
|
+
// 临时移除错误重定向 (如 2>/dev/null, 1>&2 等),避免误判
|
|
84
|
+
// 错误重定向是只读操作,不应被拦截
|
|
85
|
+
const normalizedCommand = command.replace(/\d+>[&]?\s*[^\s|;&]+/g, "").trim();
|
|
86
|
+
|
|
83
87
|
const DESTRUCTIVE_PATTERNS = [
|
|
84
88
|
/\brm\b/i,
|
|
85
89
|
/\brmdir\b/i,
|
|
@@ -113,7 +117,8 @@ function isSafeReadOnlyCommand(command: string): boolean {
|
|
|
113
117
|
/\bshutdown\b/i,
|
|
114
118
|
/\bsystemctl\s+(start|stop|restart|enable|disable)\b/i,
|
|
115
119
|
/\bservice\s+\S+\s+(start|stop|restart)\b/i,
|
|
116
|
-
|
|
120
|
+
// 编辑器命令 - 只拦截命令开头的编辑器调用,不拦截参数中的匹配
|
|
121
|
+
/^\s*(vim?|nano|emacs|code|subl)\b/i,
|
|
117
122
|
];
|
|
118
123
|
|
|
119
124
|
const SAFE_PATTERNS = [
|
|
@@ -165,9 +170,10 @@ function isSafeReadOnlyCommand(command: string): boolean {
|
|
|
165
170
|
/^\s*fd\b/,
|
|
166
171
|
];
|
|
167
172
|
|
|
168
|
-
|
|
173
|
+
// 使用标准化后的命令进行检查(已移除错误重定向)
|
|
174
|
+
const isDestructive = DESTRUCTIVE_PATTERNS.some((pattern) => pattern.test(normalizedCommand));
|
|
169
175
|
if (isDestructive) return false;
|
|
170
|
-
return SAFE_PATTERNS.some((pattern) => pattern.test(
|
|
176
|
+
return SAFE_PATTERNS.some((pattern) => pattern.test(normalizedCommand));
|
|
171
177
|
}
|
|
172
178
|
|
|
173
179
|
function normalizeArg(input: string): string {
|
|
@@ -558,7 +564,7 @@ export default function aicodePlan(pi: ExtensionAPI) {
|
|
|
558
564
|
}
|
|
559
565
|
|
|
560
566
|
const statusText = planModeEnabled
|
|
561
|
-
? ctx.ui.theme.fg("warning", "⏸ 计划") + ctx.ui.theme.fg("dim", " | plan (
|
|
567
|
+
? ctx.ui.theme.fg("warning", "⏸ 计划") + ctx.ui.theme.fg("dim", " | plan (Ctrl+Alt+P)")
|
|
562
568
|
: undefined;
|
|
563
569
|
ctx.ui.setStatus(STATUS_KEY, statusText);
|
|
564
570
|
updateTodoWidget(ctx);
|
|
@@ -583,8 +589,8 @@ export default function aicodePlan(pi: ExtensionAPI) {
|
|
|
583
589
|
executionMode = false;
|
|
584
590
|
pi.setActiveTools(planTools);
|
|
585
591
|
planModeEnabled = true;
|
|
592
|
+
pi.events.emit("aicode-plan:mode-changed", { enabled: true });
|
|
586
593
|
setStatus(ctx);
|
|
587
|
-
pi.events.emit("aicode-plan:mode-changed", { planModeEnabled: true });
|
|
588
594
|
ctx.ui.notify(`计划模式已启用(只读): ${planTools.join(", ")}`, "info");
|
|
589
595
|
};
|
|
590
596
|
|
|
@@ -606,7 +612,7 @@ export default function aicodePlan(pi: ExtensionAPI) {
|
|
|
606
612
|
}
|
|
607
613
|
|
|
608
614
|
planModeEnabled = false;
|
|
609
|
-
pi.events.emit("aicode-plan:mode-changed", {
|
|
615
|
+
pi.events.emit("aicode-plan:mode-changed", { enabled: false });
|
|
610
616
|
restoreNormalTools();
|
|
611
617
|
if (options.resetProgress) {
|
|
612
618
|
executionMode = false;
|
|
@@ -658,7 +664,7 @@ export default function aicodePlan(pi: ExtensionAPI) {
|
|
|
658
664
|
];
|
|
659
665
|
if (!planModeEnabled && !executionMode) {
|
|
660
666
|
statusLines.push("");
|
|
661
|
-
statusLines.push("快捷键:
|
|
667
|
+
statusLines.push("快捷键:Alt+Shift+P 快速切换计划模式");
|
|
662
668
|
}
|
|
663
669
|
ctx.ui.notify(statusLines.join("\n"), "info");
|
|
664
670
|
return;
|
|
@@ -693,6 +699,7 @@ export default function aicodePlan(pi: ExtensionAPI) {
|
|
|
693
699
|
pi.registerShortcut("ctrl+alt+p", {
|
|
694
700
|
description: "切换计划模式",
|
|
695
701
|
handler: async (ctx) => {
|
|
702
|
+
const wasEnabled = planModeEnabled; // 保存当前状态
|
|
696
703
|
if (planModeEnabled) {
|
|
697
704
|
exitPlanMode(ctx, "计划模式已禁用。返回直接执行模式。", {
|
|
698
705
|
resetProgress: true,
|
|
@@ -700,7 +707,8 @@ export default function aicodePlan(pi: ExtensionAPI) {
|
|
|
700
707
|
} else {
|
|
701
708
|
enterPlanMode(ctx);
|
|
702
709
|
}
|
|
703
|
-
|
|
710
|
+
// 显示切换后的状态
|
|
711
|
+
ctx.ui.notify(wasEnabled ? "计划模式已关闭 ✓" : "计划模式已开启 ✓");
|
|
704
712
|
},
|
|
705
713
|
});
|
|
706
714
|
|
|
@@ -32,7 +32,7 @@ export default function (pi: ExtensionAPI) {
|
|
|
32
32
|
|
|
33
33
|
// 监听 plan 模式变化事件(全局监听,只注册一次)
|
|
34
34
|
pi.events.on("aicode-plan:mode-changed", (data: any) => {
|
|
35
|
-
planModeEnabled = data.
|
|
35
|
+
planModeEnabled = data.enabled;
|
|
36
36
|
footerTui?.requestRender();
|
|
37
37
|
});
|
|
38
38
|
|
|
@@ -160,7 +160,6 @@ export default function (pi: ExtensionAPI) {
|
|
|
160
160
|
|
|
161
161
|
// quots
|
|
162
162
|
const quotes = [
|
|
163
|
-
"代码是有灵魂的",
|
|
164
163
|
"敬畏生产,双人复核,稳妥变更",
|
|
165
164
|
"让代码更有温度",
|
|
166
165
|
"民生所系,支付所向",
|
|
@@ -198,9 +197,9 @@ export default function (pi: ExtensionAPI) {
|
|
|
198
197
|
|
|
199
198
|
// ── Plan mode segment ────────────────────────────────────
|
|
200
199
|
if (planModeEnabled) {
|
|
201
|
-
segments.push(theme.fg("success", "⏸
|
|
200
|
+
segments.push(theme.fg("success", "⏸ 计划模式"));
|
|
202
201
|
}else{
|
|
203
|
-
segments.push(theme.fg("error", "
|
|
202
|
+
segments.push(theme.fg("error", "▶ 自动模式"));
|
|
204
203
|
}
|
|
205
204
|
|
|
206
205
|
segments.push(theme.fg("muted", quote));
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Msg Debug Extension - Log LLM request/response messages to file
|
|
4
4
|
*
|
|
5
5
|
* This extension logs all requests and responses sent to/from the LLM provider
|
|
6
|
-
* for debugging purposes. Logs are saved to
|
|
6
|
+
* for debugging purposes. Logs are saved to ~/.aicode-cli/logs/
|
|
7
7
|
*
|
|
8
8
|
* Features:
|
|
9
9
|
* - Logs before_provider_request: messages, parameters, raw payload
|
|
@@ -13,8 +13,9 @@
|
|
|
13
13
|
* - Session-based log files (one file per session)
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
-
import { appendFileSync, existsSync, mkdirSync } from "node:fs";
|
|
16
|
+
import { appendFileSync, existsSync, mkdirSync, readdirSync, unlinkSync } from "node:fs";
|
|
17
17
|
import { join } from "node:path";
|
|
18
|
+
import os from "node:os";
|
|
18
19
|
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
19
20
|
|
|
20
21
|
// 北京时间格式化函数 (UTC+8)
|
|
@@ -31,16 +32,39 @@ function formatDateStr(date: Date = new Date()): string {
|
|
|
31
32
|
return `${year}-${month}-${day}`;
|
|
32
33
|
}
|
|
33
34
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
// 日志目录配置(与 error-monitor.ts 保持一致)
|
|
36
|
+
const LOG_DIR = join(os.homedir(), ".aicode-cli", "logs");
|
|
37
|
+
const KEEP_DAYS = 2; // 保留最近2天
|
|
38
|
+
|
|
39
|
+
// 确保日志目录存在
|
|
40
|
+
function ensureLogDir(): void {
|
|
41
|
+
if (!existsSync(LOG_DIR)) {
|
|
42
|
+
mkdirSync(LOG_DIR, { recursive: true });
|
|
39
43
|
}
|
|
40
|
-
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// 清理过期日志文件
|
|
47
|
+
function cleanOldLogs(): void {
|
|
48
|
+
if (!existsSync(LOG_DIR)) return;
|
|
49
|
+
const now = new Date(new Date().toLocaleString("zh-CN", { timeZone: "Asia/Shanghai" }));
|
|
50
|
+
for (const file of readdirSync(LOG_DIR)) {
|
|
51
|
+
if (!file.startsWith("llm-requests-") || !file.endsWith(".log")) continue;
|
|
52
|
+
const match = file.match(/llm-requests-(\d{4})-(\d{2})-(\d{2})\.log/);
|
|
53
|
+
if (!match) continue;
|
|
54
|
+
const fileDate = new Date(parseInt(match[1]), parseInt(match[2]) - 1, parseInt(match[3]));
|
|
55
|
+
const diffDays = Math.floor((now.getTime() - fileDate.getTime()) / (1000 * 60 * 60 * 24));
|
|
56
|
+
if (diffDays > KEEP_DAYS) {
|
|
57
|
+
unlinkSync(join(LOG_DIR, file));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export default function (pi: ExtensionAPI) {
|
|
63
|
+
ensureLogDir();
|
|
64
|
+
cleanOldLogs();
|
|
41
65
|
// Format date as YYYY-MM-DD for daily log files
|
|
42
66
|
const dateStr = formatDateStr();
|
|
43
|
-
const logFile = join(
|
|
67
|
+
const logFile = join(LOG_DIR, `llm-requests-${dateStr}.log`);
|
|
44
68
|
|
|
45
69
|
// Filter to only log user and assistant messages
|
|
46
70
|
const ALLOWED_ROLES = ["user", "assistant"];
|
package/config/agent/help.md
CHANGED
|
@@ -4,6 +4,29 @@
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## 📖 帮助命令
|
|
8
|
+
|
|
9
|
+
查看 aicode-cli 的使用帮助:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
/help
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
快速帮助:
|
|
16
|
+
- `/help` - 查看本完整文档
|
|
17
|
+
- `/models` - 查看模型列表
|
|
18
|
+
- `/tools` - 查看可用工具
|
|
19
|
+
- `/skill:<name>` - 激活指定技能
|
|
20
|
+
- `Ctrl+Alt+P` - 切换计划模式
|
|
21
|
+
- `/goal` - 设置持续目标
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
# aicode-cli 使用指南
|
|
25
|
+
|
|
26
|
+
> 全面掌握 AI 编程助手的各项功能与配置
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
7
30
|
## 目录
|
|
8
31
|
|
|
9
32
|
1. [快速开始](#1-快速开始)
|
|
@@ -15,11 +15,9 @@
|
|
|
15
15
|
"packages":[
|
|
16
16
|
"npm:pi-subagents@0.17.1",
|
|
17
17
|
"npm:pi-rewind@0.5.0",
|
|
18
|
-
"npm:pi-btw@0.2.1",
|
|
19
18
|
"npm:pi-mcp-adapter@2.4.0",
|
|
20
19
|
"npm:@juicesharp/rpiv-todo",
|
|
21
20
|
"npm:@juicesharp/rpiv-ask-user-question",
|
|
22
|
-
"npm:@juicesharp/rpiv-advisor",
|
|
23
21
|
"npm:@samfp/pi-memory@1.1.1"
|
|
24
22
|
],
|
|
25
23
|
"memory": {
|
package/dist/banner.d.ts
CHANGED
|
@@ -2,7 +2,11 @@
|
|
|
2
2
|
* Banner 生成器 - AI Code Agent
|
|
3
3
|
*/
|
|
4
4
|
declare let defaultBanner: string;
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* 根据星期几轮转颜色主题
|
|
7
|
+
*/
|
|
8
|
+
declare function getRotatedColorTheme(): string;
|
|
9
|
+
export { defaultBanner, getRotatedColorTheme };
|
|
6
10
|
/**
|
|
7
11
|
* 生成带颜色的 Banner
|
|
8
12
|
* @param colorTheme 主题色 (hex 格式,如 #49bccf)
|
package/dist/banner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../src/banner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,QAAA,IAAI,aAAa,QAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../src/banner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,QAAA,IAAI,aAAa,QAAK,CAAC;AAoBvB;;GAEG;AACH,iBAAS,oBAAoB,IAAI,MAAM,CAGtC;AAED,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,CAAC;AAc/C;;;GAGG;AACH,wBAAgB,cAAc,CAAC,UAAU,GAAE,MAAkB,GAAG,MAAM,CA8FrE"}
|
package/dist/banner.js
CHANGED
|
@@ -16,20 +16,28 @@ catch {
|
|
|
16
16
|
// fallback
|
|
17
17
|
defaultBanner = ``;
|
|
18
18
|
}
|
|
19
|
-
|
|
19
|
+
// 预置颜色主题 — 围绕 #49bccf 的渐变色(不同明度)
|
|
20
|
+
const COLOR_THEMES = [
|
|
21
|
+
{ name: 'deep-cyan', hex: '#2e7d8c' }, // 周一 - 最深
|
|
22
|
+
{ name: 'dark-cyan', hex: '#399aad' }, // 周二 - 深
|
|
23
|
+
{ name: 'cyan', hex: '#49bccf' }, // 周三 - 基准色
|
|
24
|
+
{ name: 'light-cyan', hex: '#5ec9db' }, // 周四 - 亮
|
|
25
|
+
{ name: 'bright-cyan', hex: '#73d6e8' }, // 周五 - 最亮
|
|
26
|
+
{ name: 'pale-cyan', hex: '#8ae3f0' }, // 周六 - 极亮
|
|
27
|
+
{ name: 'faint-cyan', hex: '#a0f0f8' }, // 周日 - 最浅
|
|
28
|
+
];
|
|
20
29
|
/**
|
|
21
|
-
*
|
|
22
|
-
* @param colorTheme 主题色 (hex 格式,如 #49bccf)
|
|
30
|
+
* 根据星期几轮转颜色主题
|
|
23
31
|
*/
|
|
24
|
-
|
|
25
|
-
const
|
|
26
|
-
return
|
|
32
|
+
function getRotatedColorTheme() {
|
|
33
|
+
const dayOfWeek = new Date().getDay(); // 0=周日, 1=周一, ..., 6=周六
|
|
34
|
+
return COLOR_THEMES[dayOfWeek % COLOR_THEMES.length].hex;
|
|
27
35
|
}
|
|
36
|
+
export { defaultBanner, getRotatedColorTheme };
|
|
28
37
|
/**
|
|
29
38
|
* 将 Hex 颜色转换为 RGB 对象
|
|
30
39
|
*/
|
|
31
40
|
function hexToRgb(hex) {
|
|
32
|
-
// 去掉 # 前缀
|
|
33
41
|
hex = hex.replace('#', '');
|
|
34
42
|
return {
|
|
35
43
|
r: parseInt(hex.slice(0, 2), 16),
|
|
@@ -37,4 +45,95 @@ function hexToRgb(hex) {
|
|
|
37
45
|
b: parseInt(hex.slice(4, 6), 16)
|
|
38
46
|
};
|
|
39
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* 生成带颜色的 Banner
|
|
50
|
+
* @param colorTheme 主题色 (hex 格式,如 #49bccf)
|
|
51
|
+
*/
|
|
52
|
+
export function generateBanner(colorTheme = '#49bccf') {
|
|
53
|
+
// 如果传入 'random' 或 'rotate' 则使用按星期轮转的颜色
|
|
54
|
+
const theme = (colorTheme === 'random' || colorTheme === 'rotate') ? getRotatedColorTheme() : colorTheme;
|
|
55
|
+
const rgb = hexToRgb(theme);
|
|
56
|
+
const version = process.env.AICODE_CLI_VERSION || '';
|
|
57
|
+
const cwd = process.cwd().replace(process.env.HOME || process.env.USERPROFILE || '', '~');
|
|
58
|
+
const color = (text) => `\x1b[38;2;${rgb.r};${rgb.g};${rgb.b}m${text}\x1b[0m`;
|
|
59
|
+
const dim = (text) => `\x1b[2m${text}\x1b[0m`;
|
|
60
|
+
const bold = (text) => `\x1b[1m${text}\x1b[0m`;
|
|
61
|
+
// 去除 ANSI 转义码获取实际可见长度
|
|
62
|
+
const stripAnsi = (text) => text.replace(/\x1b\[[\d;]*m/g, '');
|
|
63
|
+
// 生成固定宽度的列(左侧用空格填充到指定宽度)
|
|
64
|
+
const padCol = (text, width) => {
|
|
65
|
+
const visible = stripAnsi(text).length;
|
|
66
|
+
return text + ' '.repeat(Math.max(0, width - visible));
|
|
67
|
+
};
|
|
68
|
+
// 列宽定义
|
|
69
|
+
const COL_WIDTH = 28; // 每列总宽度(命令 + 2空格 + 描述 + 填充)
|
|
70
|
+
// 生成一列文本(命令 + 2空格 + 描述,右侧空白补齐到固定宽度)
|
|
71
|
+
const col = (cmd, desc) => {
|
|
72
|
+
const text = `${cmd} ${desc}`;
|
|
73
|
+
return padCol(text, COL_WIDTH);
|
|
74
|
+
};
|
|
75
|
+
// 生成一行(1-3 列)
|
|
76
|
+
const row = (cmd1, desc1, cmd2, desc2, cmd3, desc3) => {
|
|
77
|
+
const c1 = col(cmd1, desc1);
|
|
78
|
+
const c2 = cmd2 && desc2 ? col(cmd2, desc2) : '';
|
|
79
|
+
const c3 = cmd3 && desc3 ? col(cmd3, desc3) : '';
|
|
80
|
+
return ` ${c1}${c2}${c3}`;
|
|
81
|
+
};
|
|
82
|
+
// 解析 banner.txt 为行数组
|
|
83
|
+
const bannerLines = defaultBanner.split('\n');
|
|
84
|
+
const maxBannerWidth = Math.max(...bannerLines.map(line => line.replace(/\x1b\[[\d;]*m/g, '').length));
|
|
85
|
+
// 右侧信息行 (参考 Claude Code 布局)
|
|
86
|
+
const infoLines = [
|
|
87
|
+
`${color(bold('AICODE CLI'))} ${dim(`v${version}`)}`,
|
|
88
|
+
`${dim('Dir:')} ${dim(cwd)}`,
|
|
89
|
+
];
|
|
90
|
+
// 将 banner 和右侧信息合并为多行
|
|
91
|
+
const maxLines = Math.max(bannerLines.length, infoLines.length);
|
|
92
|
+
const headerLines = [];
|
|
93
|
+
for (let i = 0; i < maxLines; i++) {
|
|
94
|
+
const bannerLine = bannerLines[i] || '';
|
|
95
|
+
const infoLine = infoLines[i] || '';
|
|
96
|
+
if (i === 0) {
|
|
97
|
+
headerLines.push(`${bannerLine} ${infoLine}`);
|
|
98
|
+
}
|
|
99
|
+
else if (i < infoLines.length && bannerLine.trim() === '') {
|
|
100
|
+
// banner 的空白行填充信息
|
|
101
|
+
headerLines.push(`${' '.repeat(maxBannerWidth)} ${infoLine}`);
|
|
102
|
+
}
|
|
103
|
+
else if (i < bannerLines.length) {
|
|
104
|
+
headerLines.push(bannerLine);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
headerLines.push(`${' '.repeat(maxBannerWidth)} ${infoLine}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return [
|
|
111
|
+
headerLines.join('\n'),
|
|
112
|
+
'',
|
|
113
|
+
dim('- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'),
|
|
114
|
+
dim(' 直接用自然语言描述需求即可 • 复杂任务先用 /plan 生成计划 • @文件路径 指定文件'),
|
|
115
|
+
dim('- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'),
|
|
116
|
+
'',
|
|
117
|
+
bold(' 常用命令'),
|
|
118
|
+
row(color('/model'), '切换模型', color('/settings'), 'aicode设置', color('/compact'), '压缩上下文'),
|
|
119
|
+
row(color('/new'), '新会话', color('/reload'), '重载配置', color('/resume'), '恢复会话'),
|
|
120
|
+
row(color('/bugs'), '已知bug修复', color('/goal'), '目标导向', color('/plan'), '计划模式(只读)'),
|
|
121
|
+
'',
|
|
122
|
+
bold(' 常用提示词 (Prompts)'),
|
|
123
|
+
row(color('/workflow'), '六阶段工作流', color('/feat'), '新功能开发', color('/git-commit'), 'Git提交'),
|
|
124
|
+
row(color('/code-simplifier'), '代码简化', color('/init-project'), '项目初始化'),
|
|
125
|
+
'',
|
|
126
|
+
bold(' 常用技能 (Skills)'),
|
|
127
|
+
row(color('/code-review'), '代码审查', color('/skill-creator'), '创建技能', color('/commit'), 'Git提交'),
|
|
128
|
+
row(color('/frontend-design'), '前端设计', color('/brainstorming'), '头脑风暴'),
|
|
129
|
+
'',
|
|
130
|
+
bold(' 会话管理'),
|
|
131
|
+
row(color('/export'), '导出会话', color('/tree'), '浏览对话历史'),
|
|
132
|
+
'',
|
|
133
|
+
dim(' • npm i -g @ia-ccun/code-agent-cli • @文件路径 指定文件'),
|
|
134
|
+
'',
|
|
135
|
+
dim('- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'),
|
|
136
|
+
'',
|
|
137
|
+
].join('\n');
|
|
138
|
+
}
|
|
40
139
|
//# sourceMappingURL=banner.js.map
|
package/dist/banner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../src/banner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,+BAA+B;AAC/B,IAAI,aAAa,GAAG,EAAE,CAAC;AACvB,IAAI,CAAC;IACH,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAClE,aAAa,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACpD,CAAC;AAAC,MAAM,CAAC;IACP,WAAW;IACX,aAAa,GAAG,EAAE,CAAC;AACrB,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../src/banner.ts"],"names":[],"mappings":"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"}
|
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;;;;GAIG;AAmBH,MAAM,CAAC,MAAM,aAAa,GAAc;IACtC,IAAI,EAAE,YAAY;IAClB,MAAM,EAAE,aAAa,EAAG,QAAQ;IAChC,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmBH,MAAM,CAAC,MAAM,aAAa,GAAc;IACtC,IAAI,EAAE,YAAY;IAClB,MAAM,EAAE,aAAa,EAAG,QAAQ;IAChC,UAAU,EAAE,QAAQ;IACpB,SAAS,EAAE,aAAa;CACzB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ia-ccun/code-agent-cli",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"description": "AI Coding Agent CLI - 基于OpenClaw🦞底层Agent
|
|
3
|
+
"version": "0.0.52-release",
|
|
4
|
+
"description": "AI Coding Agent CLI - 基于OpenClaw🦞底层Agent原理封装的编码智能体(供学习使用)。",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|