atomix-cli 0.1.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/LICENSE +21 -0
- package/README.md +69 -0
- package/dist/bootstrap.js +52 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/cli.js +121195 -0
- package/dist/cli.js.map +1 -0
- package/dist/modelWizard.js +143 -0
- package/dist/modelWizard.js.map +1 -0
- package/dist/oneshot.js +75 -0
- package/dist/oneshot.js.map +1 -0
- package/dist/paths.js +53 -0
- package/dist/paths.js.map +1 -0
- package/dist/quiet.js +81 -0
- package/dist/quiet.js.map +1 -0
- package/dist/repl.js +385 -0
- package/dist/repl.js.map +1 -0
- package/dist/tools.js +28 -0
- package/dist/tools.js.map +1 -0
- package/dist/tui.mjs +153024 -0
- package/dist/ui.js +83 -0
- package/dist/ui.js.map +1 -0
- package/package.json +60 -0
package/dist/ui.js
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.dim = exports.bold = exports.cyan = exports.magenta = exports.blue = exports.yellow = exports.green = exports.red = exports.gray = void 0;
|
|
4
|
+
exports.truncate = truncate;
|
|
5
|
+
exports.colorizeDiff = colorizeDiff;
|
|
6
|
+
exports.formatContent = formatContent;
|
|
7
|
+
exports.renderPermissionContent = renderPermissionContent;
|
|
8
|
+
exports.usageIndicator = usageIndicator;
|
|
9
|
+
const wrap = (code) => (s) => `\x1b[${code}m${s}\x1b[0m`;
|
|
10
|
+
exports.gray = wrap('90');
|
|
11
|
+
exports.red = wrap('31');
|
|
12
|
+
exports.green = wrap('32');
|
|
13
|
+
exports.yellow = wrap('33');
|
|
14
|
+
exports.blue = wrap('34');
|
|
15
|
+
exports.magenta = wrap('35');
|
|
16
|
+
exports.cyan = wrap('36');
|
|
17
|
+
exports.bold = wrap('1');
|
|
18
|
+
exports.dim = wrap('2');
|
|
19
|
+
function truncate(s, n) {
|
|
20
|
+
if (s.length <= n)
|
|
21
|
+
return s;
|
|
22
|
+
return s.slice(0, n) + (0, exports.gray)(` …(+${s.length - n} chars)`);
|
|
23
|
+
}
|
|
24
|
+
/** 对 diff 风格文本按行着色(+ 绿 / - 红),并统一缩进 */
|
|
25
|
+
function colorizeDiff(text, indent = ' ') {
|
|
26
|
+
return text
|
|
27
|
+
.split('\n')
|
|
28
|
+
.map((line) => {
|
|
29
|
+
if (line.startsWith('+'))
|
|
30
|
+
return indent + (0, exports.green)(line);
|
|
31
|
+
if (line.startsWith('-'))
|
|
32
|
+
return indent + (0, exports.red)(line);
|
|
33
|
+
return indent + (0, exports.gray)(line);
|
|
34
|
+
})
|
|
35
|
+
.join('\n');
|
|
36
|
+
}
|
|
37
|
+
/** 权限/工具内容通用格式化:对象转 JSON,超长截断 */
|
|
38
|
+
function formatContent(content, maxLen = 3000) {
|
|
39
|
+
const text = typeof content === 'string' ? content : JSON.stringify(content, null, 2);
|
|
40
|
+
return truncate(text, maxLen);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 权限卡内容渲染:
|
|
44
|
+
* - Edit/Write 的 content 是 { type, patch: [{lines}], diffText } 结构 → 按 diff 着色渲染
|
|
45
|
+
* - 其他字符串(如 Bash 命令说明,可能含 diff 行)→ 整体 diff 着色
|
|
46
|
+
* - 兜底:JSON 展示
|
|
47
|
+
*/
|
|
48
|
+
function renderPermissionContent(content, maxLen = 4000) {
|
|
49
|
+
if (typeof content === 'string')
|
|
50
|
+
return colorizeDiff(truncate(content, maxLen));
|
|
51
|
+
const patch = content.patch;
|
|
52
|
+
if (Array.isArray(patch) && patch.length) {
|
|
53
|
+
const rendered = patch
|
|
54
|
+
.map((hunk) => {
|
|
55
|
+
const header = (0, exports.gray)(` @@ ${hunk.oldStart ?? ''} → ${hunk.newStart ?? ''} @@`);
|
|
56
|
+
const body = colorizeDiff((hunk.lines ?? []).filter((l) => !l.startsWith('\\')).join('\n'), ' ');
|
|
57
|
+
return `${header}\n${body}`;
|
|
58
|
+
})
|
|
59
|
+
.join('\n');
|
|
60
|
+
return truncate(rendered, maxLen);
|
|
61
|
+
}
|
|
62
|
+
const diffText = content.diffText;
|
|
63
|
+
if (typeof diffText === 'string' && diffText.trim())
|
|
64
|
+
return colorizeDiff(truncate(diffText, maxLen));
|
|
65
|
+
return (0, exports.gray)(' ' + formatContent(content, maxLen).split('\n').join('\n '));
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* context 用量指示:百分比 + 颜色分档。
|
|
69
|
+
* sema-core 自动压缩阈值为 contextLength 的 75%(compact.ts),
|
|
70
|
+
* >=70% 红色预警(接近触发压缩),>=45% 黄色,其余灰色。
|
|
71
|
+
*/
|
|
72
|
+
function usageIndicator(usage) {
|
|
73
|
+
if (!usage || !usage.maxTokens)
|
|
74
|
+
return '';
|
|
75
|
+
const pct = Math.min(100, Math.round((usage.useTokens / usage.maxTokens) * 100));
|
|
76
|
+
const text = `ctx ${pct}%`;
|
|
77
|
+
if (pct >= 70)
|
|
78
|
+
return (0, exports.red)(text);
|
|
79
|
+
if (pct >= 45)
|
|
80
|
+
return (0, exports.yellow)(text);
|
|
81
|
+
return (0, exports.gray)(text);
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=ui.js.map
|
package/dist/ui.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "atomix-cli",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Working-directory-bound agent CLI built on atomix-core, sharing the semaclaw ecosystem",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "NingyanZhu <104004333@qq.com>",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/NingyanZhu/atomix-cli.git"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/NingyanZhu/atomix-cli#readme",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/NingyanZhu/atomix-cli/issues"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"cli",
|
|
17
|
+
"ai",
|
|
18
|
+
"agent",
|
|
19
|
+
"coding-assistant",
|
|
20
|
+
"tui",
|
|
21
|
+
"llm",
|
|
22
|
+
"terminal",
|
|
23
|
+
"mcp"
|
|
24
|
+
],
|
|
25
|
+
"main": "dist/cli.js",
|
|
26
|
+
"bin": {
|
|
27
|
+
"atomix": "./dist/cli.js"
|
|
28
|
+
},
|
|
29
|
+
"files": [
|
|
30
|
+
"dist",
|
|
31
|
+
"README.md"
|
|
32
|
+
],
|
|
33
|
+
"engines": {
|
|
34
|
+
"node": ">=20"
|
|
35
|
+
},
|
|
36
|
+
"scripts": {
|
|
37
|
+
"build": "tsc && npm run build:cli && npm run build:tui && chmod +x dist/cli.js",
|
|
38
|
+
"build:cli": "esbuild src/cli.ts --bundle --outfile=dist/cli.js --platform=node --format=cjs --external:@vscode/ripgrep --log-level=warning",
|
|
39
|
+
"build:tui": "esbuild src/tui/index.tsx --bundle --outfile=dist/tui.mjs --platform=node --format=esm --external:@vscode/ripgrep --alias:react-devtools-core=./src/tui/devtools-stub.ts --banner:js=\"import { createRequire as __atomixCreateRequire } from 'node:module'; const require = __atomixCreateRequire(import.meta.url);\" --log-level=warning",
|
|
40
|
+
"typecheck": "tsc",
|
|
41
|
+
"test": "tsx --test test/*.test.ts",
|
|
42
|
+
"dev": "tsx src/cli.ts",
|
|
43
|
+
"start": "node dist/cli.js",
|
|
44
|
+
"prepublishOnly": "npm run typecheck && npm test && npm run build"
|
|
45
|
+
},
|
|
46
|
+
"optionalDependencies": {
|
|
47
|
+
"@vscode/ripgrep": "^1.18.0"
|
|
48
|
+
},
|
|
49
|
+
"devDependencies": {
|
|
50
|
+
"@types/node": "^22.10.0",
|
|
51
|
+
"@types/react": "^18.3.31",
|
|
52
|
+
"atomix-core": "file:../atomix-core",
|
|
53
|
+
"commander": "^12.1.0",
|
|
54
|
+
"esbuild": "^0.28.1",
|
|
55
|
+
"ink": "^5.2.1",
|
|
56
|
+
"react": "^18.3.1",
|
|
57
|
+
"tsx": "^4.19.0",
|
|
58
|
+
"typescript": "^5.6.0"
|
|
59
|
+
}
|
|
60
|
+
}
|