{"_id":"@aipack-ai/cli","_rev":"6-8ad339dce959338fc1c4d0c7ecf8a8f7","name":"@aipack-ai/cli","dist-tags":{"latest":"0.0.2"},"versions":{"0.0.1":{"name":"@aipack-ai/cli","version":"0.0.1","keywords":["cli","ai","agent","llm","aipack"],"license":"MIT","_id":"@aipack-ai/cli@0.0.1","maintainers":[{"name":"luoguoxiong2021","email":"luoguoxiong2021@163.com"}],"bin":{"aipack":"dist/cli.js"},"dist":{"shasum":"3924d5e9f42b81352f79a4c55f46f5bb89968821","tarball":"https://registry.npmjs.org/@aipack-ai/cli/-/cli-0.0.1.tgz","fileCount":10,"integrity":"sha512-C6Tj7vx2GDp9c+yUJQJtIM5nCLCwl7sZBSIJEc3ds4H/DcHpKaYOpk8x334xWeLwjxFIGOnJ+LBBT9lEW8r1Lw==","signatures":[{"sig":"MEUCIHLhJEIbccaYzQBI5iad2MsmBsg6QYT50GRbjd7cWaRiAiEA2eC4nWoKJOlWzYFIGGmUxSC1KqY4IImIGMIWqKmBkSA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":163891},"main":"./dist/index.js","type":"module","_from":"file:aipack-ai-cli-0.0.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=18.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsx src/cli.ts","build":"tsup","prebuild":"pnpm --filter @aipack-ai/agent build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"luoguoxiong2021","email":"luoguoxiong2021@163.com"},"_resolved":"/tmp/0bef559ee5c601cea3faea8539edf948/aipack-ai-cli-0.0.1.tgz","_integrity":"sha512-C6Tj7vx2GDp9c+yUJQJtIM5nCLCwl7sZBSIJEc3ds4H/DcHpKaYOpk8x334xWeLwjxFIGOnJ+LBBT9lEW8r1Lw==","_npmVersion":"10.8.2","description":"aipack CLI - 基于 @aipack-ai/agent 的终端 AI 助手","directories":{},"_nodeVersion":"20.20.2","dependencies":{"chalk":"^5.3.0","@aipack-ai/agent":"0.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.16.0","tsup":"^8.5.1","typescript":"^5.5.0","@types/node":"^20.12.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.0.1_1786894254282_0.007659799063207906","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@aipack-ai/cli","version":"0.0.2","description":"aipack CLI - 基于 @aipack-ai/agent 的终端 AI 助手","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","bin":{"aipack":"dist/bin.js"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"keywords":["cli","ai","agent","llm","aipack"],"license":"MIT","engines":{"node":">=18.19.0"},"dependencies":{"chalk":"^5.3.0","@aipack-ai/agent":"0.0.1"},"devDependencies":{"@types/node":"^20.12.0","tsup":"^8.5.1","tsx":"^4.16.0","typescript":"^5.5.0"},"scripts":{"build":"tsup","prebuild":"pnpm --filter @aipack-ai/agent build","typecheck":"tsc --noEmit","dev":"tsx src/bin.ts"},"_id":"@aipack-ai/cli@0.0.2","_integrity":"sha512-Au3zum3EmsEJ7iTT3XvAtup8zeDdYGqOMzeSFShHQ1EZuIXDbqs/ukzblRImZkNw/IFFzfO1+FdtajKXxapE0A==","_resolved":"/tmp/8579c07f8da06b406bacc57c05c356fb/aipack-ai-cli-0.0.2.tgz","_from":"file:aipack-ai-cli-0.0.2.tgz","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-Au3zum3EmsEJ7iTT3XvAtup8zeDdYGqOMzeSFShHQ1EZuIXDbqs/ukzblRImZkNw/IFFzfO1+FdtajKXxapE0A==","shasum":"6157c0414e76f575ab54a5115be771a747d8a8c4","tarball":"https://registry.npmjs.org/@aipack-ai/cli/-/cli-0.0.2.tgz","fileCount":10,"unpackedSize":164765,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD3ggwQEUa6q99f7ulO7USciFTsAbMJ8Mbt4x7JCwxm7gIhAM1RCWORql4C1F9YTpvK1iiMijRIP0/dIg3gx9KONQbS"}]},"_npmUser":{"name":"luoguoxiong2021","email":"luoguoxiong2021@163.com"},"directories":{},"maintainers":[{"name":"luoguoxiong2021","email":"luoguoxiong2021@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cli_0.0.2_1786895270920_0.3764312119201725"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-16T15:30:54.060Z","modified":"2026-08-16T15:47:51.230Z","0.2.0":"2026-08-16T05:09:10.996Z","0.2.1":"2026-08-16T06:01:54.637Z","0.0.1":"2026-08-16T15:30:54.416Z","0.0.2":"2026-08-16T15:47:51.066Z"},"license":"MIT","keywords":["cli","ai","agent","llm","aipack"],"description":"aipack CLI - 基于 @aipack-ai/agent 的终端 AI 助手","maintainers":[{"name":"luoguoxiong2021","email":"luoguoxiong2021@163.com"}],"readme":"# @aipack-ai/cli\n\n基于 [`@aipack-ai/agent`](../agent) 的终端 AI 编程助手。支持交互 REPL、非交互管道与 JSON 事件流三种模式,内置文件读写与 shell 工具,默认权限策略对正常操作零打断、仅危险命令需确认。\n\n```bash\nnpm install -g @aipack-ai/cli\naipack \"帮我看看这个项目\"\n```\n\n## 快速开始\n\n```bash\n# 任选一个提供商设置 API Key\nexport DEEPSEEK_API_KEY=sk-xxx\n\n# 交互模式（REPL）\naipack\n\n# 非交互：单次提问（支持管道）\naipack -p \"总结 README.md\"\ncat src/index.ts | aipack -p \"这段代码有什么问题？\"\n\n# 指定模型（provider/id 组合写法）\naipack --model deepseek/deepseek-chat \"你好\"\naipack --model anthropic/claude-sonnet-4-20250514 \"重构这个函数\"\n\n# 附带文件上下文（图片自动走多模态通道）\naipack @package.json \"分析依赖\"\naipack @screenshot.png \"这个报错怎么修\"\n\n# 继续当前目录最近的会话\naipack -c \"我们刚才聊到哪里了？\"\n```\n\n## 三种运行模式\n\n| 模式 | 用法 | 说明 |\n|------|------|------|\n| 交互（默认） | `aipack` | REPL,支持斜杠命令、Ctrl+C 中断运行（双击退出） |\n| 非交互 | `aipack -p \"...\"` | 处理一次提示后退出；回复写 stdout（可管道），工具信息写 stderr |\n| JSON 事件流 | `aipack --mode json \"...\"` | 全部流式事件按 JSON 行输出，供程序消费 |\n\nJSON 模式输出示例：\n\n```json\n{\"type\":\"text\",\"content\":\"你好\",\"timestamp\":1730000000000}\n{\"type\":\"tool_start\",\"toolName\":\"bash\",\"timestamp\":1730000000100}\n{\"type\":\"tool_end\",\"isError\":false,\"timestamp\":1730000000300}\n{\"type\":\"done\",\"timestamp\":1730000000400}\n```\n\n## 命令行选项\n\n### 模型\n\n| 选项 | 说明 |\n|------|------|\n| `--provider <名称>` | 提供商：openai / deepseek / anthropic / google / groq / moonshot ... |\n| `--model <id>` | 模型 ID,支持 `provider/id` 组合写法；目录外模型自动按提供商 API 推断 |\n| `--api-key <key>` | 覆盖环境变量 |\n| `--thinking <级别>` | 思考级别：off / minimal / low / medium / high / max |\n| `--list-models [搜索]` | 列出内置模型目录（标注 API Key 配置状态） |\n\n未指定模型时自动探测第一个已配置 `*_API_KEY` 的提供商并使用其默认模型。\n\n### 会话\n\n| 选项 | 说明 |\n|------|------|\n| `-c, --continue` | 继续当前目录最近的会话 |\n| `-r, --resume` | 列出当前目录历史会话供选择 |\n| `--session <key>` | 使用指定会话 |\n| `-n, --name <名称>` | 为新会话命名 |\n| `--session-dir <目录>` | 自定义会话存储目录 |\n| `--no-session` | 临时会话，不持久化 |\n\n会话按工作目录分组存储于 `~/.aipack/cli-sessions/<cwd编码>/`。\n\n### 工具与权限\n\n| 选项 | 说明 |\n|------|------|\n| `-t, --tools <列表>` | 工具白名单（逗号分隔） |\n| `-xt, --exclude-tools <列表>` | 工具黑名单 |\n| `-nt, --no-tools` | 禁用全部工具 |\n| `--safe` | 保守模式：写文件与 shell 全部人工确认 |\n\n内置工具：\n\n| 工具 | 能力 | 说明 |\n|------|------|------|\n| `read` | `fs:read` | 读文件，支持 offset/limit,超长截断 |\n| `write` | `fs:write` | 写文件，自动建父目录 |\n| `edit` | `fs:write` | 精确替换（oldString 唯一匹配） |\n| `bash` | `shell:exec` | 执行 shell 命令，60s 超时，输出截断 |\n\n所有文件工具限制在工作区内（越界路径直接拒绝）。\n\n### 其他\n\n| 选项 | 说明 |\n|------|------|\n| `--system-prompt <文本>` | 替换默认系统提示词 |\n| `--append-system-prompt <文本>` | 追加系统提示词（可多次） |\n| `-h, --help` / `-v, --version` | 帮助 / 版本 |\n\n## 默认权限策略\n\n正常操作零打断,仅真正危险的命令需确认:\n\n| 操作 | 默认行为 |\n|------|---------|\n| 读文件 | 静默放行 |\n| 写文件 / 编辑 | 静默放行（工作区越界防护兜底） |\n| bash 普通命令 | 静默放行 |\n| bash 危险命令 | 弹出选择器,标注危险原因 |\n\n危险命令识别:`sudo` 提权、`rm -rf /` `rm -rf ~`(根/家目录递归删除)、`mkfs` / `dd of=/dev/` / `> /dev/sdX`(磁盘写入)、`curl ... \\| sh`(管道执行远程脚本)、`chmod -R 777 /`、`shutdown` / `reboot`、fork 炸弹。指定子目录的正常删除(如 `rm -rf dist`)不受影响。\n\n确认时使用**方向键选择器**(非输入式):\n\n```\n? 危险命令（提权执行）：sudo rm -rf /usr/local/foo\n  ❯ 允许\n    总是允许（本会话）\n    拒绝\n```\n\n选择\"总是允许\"后,同一能力本会话内不再重复询问。\n\n## 交互模式斜杠命令\n\n| 命令 | 说明 |\n|------|------|\n| `/model [provider/id]` | 切换模型(无参显示当前) |\n| `/thinking <级别>` | 调整思考级别 |\n| `/system <文本>` | 替换系统提示词 |\n| `/session` | 当前会话信息 |\n| `/sessions` | 列出历史会话 |\n| `/clear` | 清空当前会话(仅内存) |\n| `/approvals` | 列出未决审批单 |\n| `/approve <id>` / `/deny <id>` | 结算审批单 |\n| `/help` / `/quit` | 帮助 / 退出 |\n\n## approvals 子命令(跨进程审批)\n\n配合 `aipack.config.js` 的 `approvals.enabled: true` 使用。运行中的进程产生 pending 审批单落盘后,可在另一个终端结算:\n\n```bash\naipack approvals list          # 列出未决审批单\naipack approvals approve <id>  # 批准\naipack approvals deny <id>     # 驳回\n```\n\n## 配置文件 `aipack.config.js`\n\n放在项目根目录(可选):\n\n```js\nexport default {\n  // 异步审批（默认关闭：内联确认）\n  approvals: {\n    enabled: true,\n    // 触发审批的能力（默认 ['fs:write', 'shell:exec']）\n    capabilities: ['shell:exec'],\n  },\n  // 自定义权限规则（优先于内置规则）\n  permissionRules: [\n    { toolName: 'write', decision: 'confirm' },   // write 工具全部确认\n    { permission: 'fs:write', decision: 'allow' }, // 按能力放行\n  ],\n};\n```\n\n优先级:`approvals`(pending) > `--safe`(confirm) > 智能默认;`permissionRules` 永远最先匹配。\n\n## 环境变量\n\n| 变量 | 说明 |\n|------|------|\n| `<PROVIDER>_API_KEY` | 提供商 API Key,如 `DEEPSEEK_API_KEY`、`OPENAI_API_KEY`、`ANTHROPIC_API_KEY` |\n| `AIPACK_CONFIG_DIR` | 配置目录(默认 `~/.aipack`) |\n\n## 可编程 API\n\n```ts\nimport { parseArgs, buildRuntime, runPrintMode, BUILTIN_TOOLS, isDangerousCommand } from '@aipack-ai/cli';\n\nconst args = parseArgs(['-p', '你好']);\nconst built = await buildRuntime({ args, cwd: process.cwd() });\n// built.runtime → @aipack-ai/agent Runtime\n// built.sessionKey / built.storage / built.approvalManager\n```\n\n## 开发\n\n```bash\npnpm build:cli        # 构建（自动先构建 agent）\npnpm --filter @aipack-ai/cli typecheck\npnpm cli:dev          # tsx 直跑源码\npnpm cli              # 运行构建产物\n\n# 冒烟\npnpm cli --list-models\nprintf '/help\\n/quit\\n' | pnpm cli\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}