@seandong/seno 0.1.7 → 0.2.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.
- package/dist/agent/conversation.d.ts +19 -3
- package/dist/agent/conversation.js +40 -9
- package/dist/agent/conversation.js.map +1 -1
- package/dist/agent/loop.d.ts +3 -0
- package/dist/agent/loop.js +27 -15
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/session.js +1 -7
- package/dist/agent/session.js.map +1 -1
- package/dist/cli/commands.d.ts +2 -0
- package/dist/cli/commands.js +33 -353
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/logger.d.ts +55 -7
- package/dist/cli/logger.js +152 -16
- package/dist/cli/logger.js.map +1 -1
- package/dist/cli/output.d.ts +1 -5
- package/dist/cli/output.js +29 -59
- package/dist/cli/output.js.map +1 -1
- package/dist/cli/prompt.js +7 -5
- package/dist/cli/prompt.js.map +1 -1
- package/dist/cli/readline-wrapper.d.ts +44 -0
- package/dist/cli/readline-wrapper.js +80 -0
- package/dist/cli/readline-wrapper.js.map +1 -0
- package/dist/cli/repl.js +23 -47
- package/dist/cli/repl.js.map +1 -1
- package/dist/commands/init.js +8 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/model.js +8 -2
- package/dist/commands/model.js.map +1 -1
- package/dist/commands/plugin-init.d.ts +24 -0
- package/dist/commands/plugin-init.js +313 -0
- package/dist/commands/plugin-init.js.map +1 -0
- package/dist/commands/server.d.ts +39 -0
- package/dist/commands/server.js +102 -0
- package/dist/commands/server.js.map +1 -0
- package/dist/config/manager.d.ts +14 -0
- package/dist/config/manager.js +151 -13
- package/dist/config/manager.js.map +1 -1
- package/dist/config/types.d.ts +15 -0
- package/dist/errors.d.ts +20 -3
- package/dist/errors.js +20 -5
- package/dist/errors.js.map +1 -1
- package/dist/i18n/strings.d.ts +44 -0
- package/dist/i18n/strings.js +46 -0
- package/dist/i18n/strings.js.map +1 -0
- package/dist/index.js +52 -18
- package/dist/index.js.map +1 -1
- package/dist/llm/anthropic.d.ts +0 -9
- package/dist/llm/anthropic.js +9 -62
- package/dist/llm/anthropic.js.map +1 -1
- package/dist/llm/error-handler.d.ts +28 -0
- package/dist/llm/error-handler.js +93 -0
- package/dist/llm/error-handler.js.map +1 -0
- package/dist/llm/openai-codex.js +15 -61
- package/dist/llm/openai-codex.js.map +1 -1
- package/dist/llm/openai.js +10 -57
- package/dist/llm/openai.js.map +1 -1
- package/dist/mcp/bridge.js.map +1 -1
- package/dist/mcp/manager.d.ts +4 -2
- package/dist/mcp/manager.js +36 -12
- package/dist/mcp/manager.js.map +1 -1
- package/dist/prompts/system.js +2 -1
- package/dist/prompts/system.js.map +1 -1
- package/dist/skills/registry.js.map +1 -1
- package/dist/skills/sync.js +3 -1
- package/dist/skills/sync.js.map +1 -1
- package/dist/tools/plugin-init.d.ts +6 -0
- package/dist/tools/plugin-init.js +46 -0
- package/dist/tools/plugin-init.js.map +1 -0
- package/dist/tools/registry.js +11 -2
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/server.d.ts +13 -0
- package/dist/tools/server.js +151 -0
- package/dist/tools/server.js.map +1 -0
- package/dist/tools/shell.js +1 -3
- package/dist/tools/shell.js.map +1 -1
- package/dist/tools/skills-sync.d.ts +6 -0
- package/dist/tools/skills-sync.js +39 -0
- package/dist/tools/skills-sync.js.map +1 -0
- package/dist/tools/ssh.js.map +1 -1
- package/dist/utils/retry.js.map +1 -1
- package/dist/utils/text.d.ts +45 -0
- package/dist/utils/text.js +95 -0
- package/dist/utils/text.js.map +1 -0
- package/package.json +23 -5
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 公共文本工具函数
|
|
3
|
+
*
|
|
4
|
+
* ANSI 转义序列处理、CJK 字符宽度计算、表格格式化等,
|
|
5
|
+
* 供 CLI 各模块共享使用,消除重复实现。
|
|
6
|
+
*/
|
|
7
|
+
// eslint-disable-next-line no-control-regex
|
|
8
|
+
const ANSI_RE = /\x1b\[[0-9;]*m/g;
|
|
9
|
+
/**
|
|
10
|
+
* 去除 ANSI 颜色/样式转义序列,返回可见文本
|
|
11
|
+
*/
|
|
12
|
+
export function stripAnsi(s) {
|
|
13
|
+
return s.replace(ANSI_RE, '');
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* 判断 Unicode 码位是否为全角(East Asian Width = Wide/Fullwidth)
|
|
17
|
+
* CJK 汉字、全角标点、韩文等占 2 个终端列宽
|
|
18
|
+
*/
|
|
19
|
+
export function isFullWidth(code) {
|
|
20
|
+
return ((code >= 0x1100 && code <= 0x115f) || // Hangul Jamo
|
|
21
|
+
(code >= 0x2e80 && code <= 0x303f) || // CJK Radicals, Kangxi, Ideographic, CJK Symbols
|
|
22
|
+
(code >= 0x3040 && code <= 0x33ff) || // Hiragana, Katakana, Bopomofo, etc.
|
|
23
|
+
(code >= 0x3400 && code <= 0x4dbf) || // CJK Ext A
|
|
24
|
+
(code >= 0x4e00 && code <= 0x9fff) || // CJK Unified Ideographs
|
|
25
|
+
(code >= 0xa000 && code <= 0xa4cf) || // Yi Syllables / Radicals
|
|
26
|
+
(code >= 0xac00 && code <= 0xd7af) || // Hangul Syllables
|
|
27
|
+
(code >= 0xf900 && code <= 0xfaff) || // CJK Compatibility Ideographs
|
|
28
|
+
(code >= 0xfe30 && code <= 0xfe4f) || // CJK Compatibility Forms
|
|
29
|
+
(code >= 0xff01 && code <= 0xff60) || // Fullwidth Forms
|
|
30
|
+
(code >= 0xffe0 && code <= 0xffe6) || // Fullwidth Signs
|
|
31
|
+
(code >= 0x20000 && code <= 0x2ffff) || // CJK Ext B-F
|
|
32
|
+
(code >= 0x30000 && code <= 0x3ffff) // CJK Ext G
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 计算字符串在终端中的显示宽度(列数)
|
|
37
|
+
* 全角字符(CJK 等)占 2 列,其余占 1 列
|
|
38
|
+
*/
|
|
39
|
+
export function getDisplayWidth(str) {
|
|
40
|
+
let width = 0;
|
|
41
|
+
for (const char of str) {
|
|
42
|
+
const code = char.codePointAt(0);
|
|
43
|
+
width += isFullWidth(code) ? 2 : 1;
|
|
44
|
+
}
|
|
45
|
+
return width;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 感知 CJK 全角字符的 padEnd
|
|
49
|
+
* 在终端中对齐文本时,需考虑全角字符占 2 列宽
|
|
50
|
+
*/
|
|
51
|
+
export function padEndDisplay(str, targetWidth) {
|
|
52
|
+
const currentWidth = getDisplayWidth(str);
|
|
53
|
+
const padding = targetWidth - currentWidth;
|
|
54
|
+
return padding > 0 ? str + ' '.repeat(padding) : str;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* 格式化简单文本表格
|
|
58
|
+
* 自动计算列宽(考虑 CJK 字符),返回格式化后的行数组
|
|
59
|
+
*
|
|
60
|
+
* @param columns 列定义
|
|
61
|
+
* @param rows 数据行,每行是字符串数组
|
|
62
|
+
* @returns 格式化后的字符串数组(每行一个元素)
|
|
63
|
+
*/
|
|
64
|
+
export function formatTable(columns, rows) {
|
|
65
|
+
// 计算每列的实际宽度
|
|
66
|
+
const colWidths = columns.map((col, i) => {
|
|
67
|
+
const headerWidth = getDisplayWidth(col.header);
|
|
68
|
+
const maxDataWidth = rows.reduce((max, row) => Math.max(max, getDisplayWidth(row[i] || '')), 0);
|
|
69
|
+
return Math.max(col.minWidth || 0, headerWidth, maxDataWidth);
|
|
70
|
+
});
|
|
71
|
+
const output = [];
|
|
72
|
+
// 表头
|
|
73
|
+
const headerLine = columns
|
|
74
|
+
.map((col, i) => {
|
|
75
|
+
const gap = col.gap ?? 2;
|
|
76
|
+
return padEndDisplay(col.header, colWidths[i] + gap);
|
|
77
|
+
})
|
|
78
|
+
.join('');
|
|
79
|
+
output.push(headerLine);
|
|
80
|
+
// 分隔线
|
|
81
|
+
const totalWidth = colWidths.reduce((sum, w, i) => sum + w + (columns[i].gap ?? 2), 0);
|
|
82
|
+
output.push('─'.repeat(totalWidth));
|
|
83
|
+
// 数据行
|
|
84
|
+
for (const row of rows) {
|
|
85
|
+
const line = columns
|
|
86
|
+
.map((col, i) => {
|
|
87
|
+
const gap = col.gap ?? 2;
|
|
88
|
+
return padEndDisplay(row[i] || '', colWidths[i] + gap);
|
|
89
|
+
})
|
|
90
|
+
.join('');
|
|
91
|
+
output.push(line);
|
|
92
|
+
}
|
|
93
|
+
return output;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/utils/text.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seandong/seno",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "ONES AI Agent CLI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -12,15 +12,28 @@
|
|
|
12
12
|
"README.md"
|
|
13
13
|
],
|
|
14
14
|
"engines": {
|
|
15
|
-
"node": ">=
|
|
15
|
+
"node": ">=20.0.0"
|
|
16
16
|
},
|
|
17
17
|
"scripts": {
|
|
18
18
|
"build": "tsc",
|
|
19
19
|
"prebuild": "rm -rf dist",
|
|
20
|
-
"
|
|
20
|
+
"preversion": "bun run typecheck && bun run lint && bun run test",
|
|
21
|
+
"prepublishOnly": "bun run build",
|
|
22
|
+
"postversion": "git push && git push --tags",
|
|
23
|
+
"release": "npm version patch",
|
|
24
|
+
"release:minor": "npm version minor",
|
|
25
|
+
"release:major": "npm version major",
|
|
21
26
|
"start": "node dist/index.js",
|
|
22
27
|
"dev": "bun --watch src/index.ts",
|
|
23
|
-
"typecheck": "tsc --noEmit"
|
|
28
|
+
"typecheck": "tsc --noEmit",
|
|
29
|
+
"lint": "eslint src/",
|
|
30
|
+
"lint:fix": "eslint src/ --fix",
|
|
31
|
+
"format": "prettier --write src/",
|
|
32
|
+
"format:check": "prettier --check src/",
|
|
33
|
+
"test": "tsc && node --test tests/config.test.ts tests/conversation.test.ts tests/errors.test.ts",
|
|
34
|
+
"test:watch": "node --experimental-transform-types --test --watch tests/conversation.test.ts tests/errors.test.ts",
|
|
35
|
+
"check": "bun run typecheck && bun run lint && bun run format:check && bun run test && bun run build",
|
|
36
|
+
"fix": "bun run lint:fix && bun run format"
|
|
24
37
|
},
|
|
25
38
|
"repository": {
|
|
26
39
|
"type": "git",
|
|
@@ -52,6 +65,11 @@
|
|
|
52
65
|
"@types/marked-terminal": "^6.1.1",
|
|
53
66
|
"@types/node": "^22.13.0",
|
|
54
67
|
"@types/ssh2": "^1.15.5",
|
|
55
|
-
"
|
|
68
|
+
"@evilmartians/lefthook": "^1.11.0",
|
|
69
|
+
"eslint": "^9.0.0",
|
|
70
|
+
"eslint-config-prettier": "^10.0.0",
|
|
71
|
+
"prettier": "^3.0.0",
|
|
72
|
+
"typescript": "^5.7.3",
|
|
73
|
+
"typescript-eslint": "^8.0.0"
|
|
56
74
|
}
|
|
57
75
|
}
|