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/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 NingyanZhu
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# atomix
|
|
2
|
+
|
|
3
|
+
绑定当前工作目录的终端 AI 编码助手。在项目目录里启动,它就以这个项目为上下文:读写代码、执行命令、编排子代理,会话历史与配置按项目天然隔离。
|
|
4
|
+
|
|
5
|
+
- **终端 TUI**:Markdown 流式渲染、工具执行与权限确认卡片、todos 与上下文用量状态栏
|
|
6
|
+
- **多模型服务商**:Anthropic / OpenAI / DeepSeek / Kimi / GLM / Qwen / MiniMax / OpenRouter 及自定义接口,首次运行向导配置
|
|
7
|
+
- **可扩展**:skills、子代理、MCP 服务器、hooks、自定义斜杠命令,支持用户级与项目级两层配置
|
|
8
|
+
- **并行子代理**:AgentTeam 以任务 DAG 一次编排多个子代理,无依赖任务并行执行
|
|
9
|
+
|
|
10
|
+
## 安装
|
|
11
|
+
|
|
12
|
+
需要 Node.js ≥ 20。
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm install -g atomix-cli
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
从源码构建见[开发文档](docs/development.md)。
|
|
19
|
+
|
|
20
|
+
## 快速开始
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
atomix # 在当前目录启动交互会话(TTY 下为 TUI,否则回退基础 REPL)
|
|
24
|
+
atomix -C /path/to/project # 指定工作目录
|
|
25
|
+
atomix -p "prompt" # 一次性执行,stdout 只输出最终回复(适合脚本/管道)
|
|
26
|
+
atomix -r # 恢复历史会话(列表选择,或 -r <sessionId>)
|
|
27
|
+
atomix model # 模型配置管理:list | add | use <名称> | quick <名称> | del <名称>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
首次运行会进入模型配置向导,配置保存在 `~/.atomix/model.conf`。
|
|
31
|
+
|
|
32
|
+
## 会话内使用
|
|
33
|
+
|
|
34
|
+
输入 `/help` 查看全部命令。常用交互:
|
|
35
|
+
|
|
36
|
+
| 输入 | 作用 |
|
|
37
|
+
|---|---|
|
|
38
|
+
| `@文件路径` | 引用文件(自动路径补全;图片扩展名自动作为多模态发送) |
|
|
39
|
+
| `!命令` | 直接执行 shell 命令(输出仅本地显示,不进模型上下文) |
|
|
40
|
+
| `/resume` `/clear` `/compact` | 切换会话 / 清空上下文 / 压缩上下文 |
|
|
41
|
+
| `/skills` `/agents` `/mcp` `/marketplace` | 组件启停、列表与插件市场 |
|
|
42
|
+
| `/theme` `/glyphs` `/thinking` | 主题 / 字形风格 / 思考开关 |
|
|
43
|
+
| Ctrl+V | 粘贴剪贴板图片或文本 |
|
|
44
|
+
| Esc / ↑↓ | 中断当前轮 / 输入历史 |
|
|
45
|
+
|
|
46
|
+
自定义命令放在 `~/.atomix/commands/`(用户级)或 `<项目>/.atomix/commands/`(项目级),支持 `$ARGUMENTS` 替换。
|
|
47
|
+
|
|
48
|
+
## 数据与配置
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
~/.atomix/ # 用户级(环境变量 ATOMIX_ROOT 可覆盖)
|
|
52
|
+
├── model.conf # 模型配置
|
|
53
|
+
├── history/<项目>/ # 会话历史,按项目隔离
|
|
54
|
+
├── skills/ agents/ commands/ mcp.json hooks.json
|
|
55
|
+
└── AGENT.md # 全局规则
|
|
56
|
+
|
|
57
|
+
<项目目录>/
|
|
58
|
+
├── AGENT.md | CLAUDE.md # 项目规则(即本项目的"人设")
|
|
59
|
+
└── .atomix/ # 项目级 skills / agents / commands / mcp.json / hooks.json
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## 文档
|
|
63
|
+
|
|
64
|
+
- [开发文档](docs/development.md):从源码构建、架构、贡献指南
|
|
65
|
+
- [设计方案](docs/dev-plan-v0.md)
|
|
66
|
+
|
|
67
|
+
## License
|
|
68
|
+
|
|
69
|
+
MIT
|
|
@@ -0,0 +1,52 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
/**
|
|
37
|
+
* 进程级隔离引导 —— 必须在任何 sema-core 模块加载前 import(cli.ts 首行)。
|
|
38
|
+
*
|
|
39
|
+
* sema-core 的所有持久化路径都懒读取 SEMA_ROOT(savePath.ts getSemaRootDir),
|
|
40
|
+
* 把它指到 atomix 根目录即可整体隔离:模型配置、会话历史、项目权限白名单、
|
|
41
|
+
* 用户级 skills/agents/commands、全局 mcp.json。
|
|
42
|
+
* LLM 调用日志默认落 ~/.semaclaw(getLLMLogsDir),用 SEMA_LLM_LOG_ROOT 一并收进来。
|
|
43
|
+
*/
|
|
44
|
+
const fs = __importStar(require("fs"));
|
|
45
|
+
const paths_1 = require("./paths");
|
|
46
|
+
const root = (0, paths_1.getAtomixRoot)();
|
|
47
|
+
fs.mkdirSync(root, { recursive: true });
|
|
48
|
+
process.env.SEMA_ROOT = root;
|
|
49
|
+
if (!process.env.SEMA_LLM_LOG_ROOT) {
|
|
50
|
+
process.env.SEMA_LLM_LOG_ROOT = root;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;GAOG;AACH,uCAAyB;AACzB,mCAAwC;AAExC,MAAM,IAAI,GAAG,IAAA,qBAAa,GAAE,CAAC;AAC7B,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACxC,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;AAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,IAAI,CAAC;AACvC,CAAC"}
|