深达克CLI
深渊 使客户的商业系统能够到达 一个API。 一个小的Deepdock客户端在客户的电脑上运行在他们的系统旁边;您的代码调用 Deepdock的REST API,而Deepdock在设备上运行动作. 顾客什么也没有 网络向互联网开放 每一个动作都由Deepdock构建和验证 是给你的.
此寄存器持有合作伙伴 CLI, 发布为 @deepdockai/cli
带有命令 deepdock,以及它为编码代理安装的技能.
npx @deepdockai/cli auth login
CLI 管理: 组织、 设备配对和 API 密钥, 它列出 设备提供的系统和动作。 它从不运行动作,从不保存或使用API 键。 动作从您自己的代码中运行,其中键为 CLI 写入您的 env 文件 .
节点22.13或更新. 在全球安装npm install -g @deepdockai/cli命令为
deepdock;以下示例使用该表.
在你开始之前
您需要一个 Deepdock 伙伴组织以及其中的一个成员账户; Deepdock 设置
与您一起组织(联系 深渊.ai) (中文(简体) ). 试试看
您需要一个演示设备: 由您自己运行的 Windows 机器与您的客户运行相同的系统,
并安装了 Deepdock 客户端 https://api.deepdock.ai/public/client/download 财务报告和审定财务报表
仅持有被发明,标记的数据. 客户端在未发作时会在其屏幕上显示一对编码.
快开始
签字 CLI 打印链接并在您的浏览器中打开( 不是在 CI 中, 没有显示, 用
--no-browser 或者说 DEEPDOCK_NO_BROWSER=1) (中文(简体) ). 请检查date=中的日期值 (帮助) 页面名称为您的计算机和CLI版本,
并单击批准。 没有输入终端密码 .
$ deepdock auth login
Opening the approval page in your browser (it expires in 10 minutes):
https://dash.deepdock.ai/cli?request=rq_...
The page shows this computer's name and the CLI version: check them before you approve.
Opened in your browser.
Waiting for approval in the browser.
Signed in as [email protected].
选择工作组织,然后四处看看:
deepdock orgs select muster-it # the default for every later command
deepdock devices list # paired devices, their status and systems
deepdock systems list # the systems and actions assigned to you
deepdock systems openapi example-erp > example-erp.openapi.json
用屏幕上的代码对齐您的演示设备 :
deepdock devices pair K7Q-4MX --label "Demo PC"
创建您的代码运行动作的 API 密钥 。 您需要组织中的管理角色; a
人类批准浏览器中的密钥, CLI 直接将其写入env文件, 保存
没有复制并显示值给任何人。 文件必须被 git 忽略, 以及 CLI 的
临时文件: a .gitignore 线条 .env* 两者都涵盖在内,如果Git能分辨出,则CLI拒绝另作选择.
deepdock keys create "myapp dev" --expires 30d --write-env .env.local
从这里你的代码读 DEEPDOCK_API_KEY 从 .env.local,以
Authorization: Bearer 每次请求 https://api.deepdock.ai/v1 并打电话给
openAPI 文档中描述的动作。 API本身(付费、写作)
Idempotency-Key,每个错误代码、暂停和事件)由每个系统描述
deepdock systems openapi <system> 并显示在仪表板上;以下技能带有相同的
知识进入你的编码代理.
图标
deepdock auth login | status | logout
deepdock org list | select [slug]
deepdock systems list | openapi <system>
deepdock devices list | pair <code> | rename <deviceId> <label> | release <deviceId> | systems <deviceId>
deepdock actions list <deviceId> <system>
deepdock keys list | create <name> | revoke <id>
deepdock incidents list
deepdock skill
| 命令 | 它会做什么 |
|---|---|
auth login | 在浏览器中签名和批准; 登录持续90天 |
auth status | 由谁签名, 组织, 以及创建的 CLI 密钥( id, name, prefix, external, 文件; 从不包含值); 未签名时退出 5, 如 gh auth status |
auth logout [--keep-keys] | 取消登录和创建的每个 CLI 密钥(--keep-keys:只有登录) |
orgs list, (中文(简体) ), orgs select [slug] | 您的组织; 设置默认的组织 |
systems list | 分配给贵组织的系统与行动 |
systems openapi <system> | 系统在 stdout 上的 OpenAPI 文档, 重定向时赤裸; 保存到文件 |
devices list | 配对设备,包括id、标签、状态、系统以及上次看到的设备 |
devices pair <code> [--label <text>] | 按屏幕上的代码对一设备 |
devices rename <deviceId> <label>, (中文(简体) ), devices release <deviceId> | 重命名设备; 从组织中解开它( admin) |
devices systems <deviceId> | 设备的活系统与动作状态, 包括暂停的原因 |
actions list <deviceId> <system> | 设备提供的每一个动作, 及其操作和领域 |
keys list, (中文(简体) ), keys create <name>, (中文(简体) ), keys revoke <id> | 该组织的 API 密钥( 创建并撤销: 管理员) |
incidents list | 公开事件和过去30天内结案事件 |
skill [--agent claude|codex|cursor|all] | 将代理技能安装到当前目录 |
全球旗帜 : --org <slug> 财务报告和审定财务报表 --json 每个命令, --yes 以确认 devices release
财务报告和审定财务报表 keys revoke 没有问题, -h, --help 无处不在 -v, --version 在根头.
deepdock <command> --help 有细节, deepdock help exit-codes 出口密码.
二事从来猜. 设备总是以其全名命名: 无默认设备, 无
通过标签搜索。 这个组织来自 --org,则 DEEPDOCK_ORG默认值
选择方式 deepdock orgs select完全由一个组织使用,无需询问(和
以 stderr 命名 ; 没有选择命令停止并列出它们.
批准流程
auth login 财务报告和审定财务报表 keys create 从不要求密码或密钥。 他们打印了一个链接,一个人类
在Deepdock仪表板中打开并点击批准,CLI收集结果. 页面
显示请求的计算机名称和 CLI 版本,这样您就可以告诉请求属于您.
批准不会给批准人任何好处:只有启动申请的CLI才能收取
结果。 请求停留10分钟.
没有终端(一个编码代理的外壳,一个脚本),两个命令都会打印请求并退出; 人类批准, 请求将在后面完成:
deepdock auth login --no-wait --json # data.pending.request and data.pending.url
deepdock auth login --wait <request>
deepdock keys create "myapp dev" --expires 30d --write-env .env.local --no-wait --json
deepdock keys create --wait <request>
Ctrl-C在等待期间将请求搁置; --wait <request> 还原它.
代理和脚本的 JSON 模式
在终端上,你得到的桌子和普通句子。 当Stdout不是终点站时,或者与
--json,每个命令都会在 stdout 上打印出一个文档:
{
"data": { "...": "the API's data, unchanged" },
"meta": { "org": { "slug": "muster-it", "name": "Muster IT" }, "requestId": "..." }
}
systems openapi 是终端上唯一的例外: 它会打印 OpenAPI 文档本身, 所以
deepdock systems openapi <system> > openapi.json 保存生成器可以读取的文档(--json
给信封。 列表和显示命令 data aPI的答案没有改变 所以CLI显示的是
您的代码会收到; auth, (中文(简体) ), orgs select 财务报告和审定财务报表 keys create 从命名的地上建起 。 A 类
失败是 stderr 上的一份文件, { "error": { "code", "message" }, "meta": { "hint" } }, (中文(简体) ),
,而API的错误对象不变。 打开 code 或者在退出代码上,永远不要 message。 。 。 .
| 退出 | 含义 |
|---|---|
| 0 个 | 已执行 |
| 1个 | 命令行中要修正的( )invalid_usage, (中文(简体) ), org_required(中文(简体) ) |
| 2个 | aPI拒绝了请求;不重复不变(invalid_request, (中文(简体) ), not_found, (中文(简体) ), forbidden, (中文(简体) ), rate_limited 和其他拒绝) |
| 3个 | 稍后重试( r)device_offline, (中文(简体) ), device_timeout, (中文(简体) ), device_syncing, (中文(简体) ), device_outdated, (中文(简体) ), action_paused, (中文(简体) ), access_outdated, (中文(简体) ), access_missing, (中文(简体) ), credentials_rejected, (中文(简体) ), certificate_changed, (中文(简体) ), system_unavailable, (中文(简体) ), target_busy, (中文(简体) ), temporarily_unavailable, (中文(简体) ), internal_error, (中文(简体) ), outcome_unknown, (中文(简体) ), connection_lost(中文(简体) ) |
| 页:1 | cLI对API来说太老了(cli_outdated: 运行 npx @deepdockai/cli@latest |
| 页:1 | 需要登录( e)sign_in_needed, (中文(简体) ), approval_denied, (中文(简体) ), approval_expired(三); auth status 当没有人签名时 |
CLI从不自行复试:出道口3表示复试,由你决定何时复试. deepdock commands --json
打印整个命令树.
编码代理人的技能
skill/ 是克洛德密码 密码和克塞尔的技巧 它教一个特工
Deepdock 模型(组织、 API 密钥、 设备、 系统、 动作), 食谱从登录到 a
测试集成, 如何读取 OpenAPI 文档而不是猜测字段名称, 写
与 Idempotency-Key,每一个错误代码,是否要重试, 和规则它永远不会
请求、读取或打印 API 密钥值。 它在TypeScript和
彼菩萨. 通话速度最快于一次再利用的HTTP连接(keep-alive),因为一新连接可以打出一个冷开.
deepdock skill # all three agents
deepdock skill --agent claude # .claude/skills/deepdock/
deepdock skill --agent codex # a marked section in AGENTS.md
deepdock skill --agent cursor # .cursor/rules/deepdock.mdc
Codex 和 Cursor 共享下面的参考文件 .deepdock/references/做它写的,
所以每个克隆人和特工都看到了同样的技能 更新 CLI; 后再次运行命令
重写它安装的文件 .
该技能坚持用发明的,有标记的数据对演示设备进行测试: 您的代码设置了一个
TEST-DEEPDOCK-<6 random characters> 在它创建的每一个记录中标记,没有真正的客户数据到达固定,日志或提示.
窗口
macOS和Linux不需要什么特别的。 在视窗上 :
npx @deepdockai/cli需要节点22.13或更新.- 用于 Windows 的 Git 必须安装用于忽略检查
--write-env没有它,关键是 仍然写着,在stderr上警告说CLI无法用git检查. - 文件设置在
%APPDATA%\deepdock\config.json和嵌入文件,无论您在哪里 点--write-env。Windows没有 POSIX 文件模式:两个文件都保留其权限 文件夹。 下C:\Users\<you>只有您可以读取它们; 在其它文件夹中, PC 的其他用户 也许可以。 因此,每一次写Env文件的运行都会印出一行这样写的字. 这个 设置文件保存您的签名和生活%APPDATA%,只有您可以读取 默认. - 在"PowerShell"中,引用一条带有空格的路径,并对整个论据使用相同的引用:
deepdock keys create "myapp dev" --expires 30d --write-env ".\my app\.env.local"后鞭打 和前锋鞭打两个工作.
警卫
- 没有显示任何密钥 . CLI 既不打印 CLI 签名,也不打印 API 密钥值
任何旗帜,任何溪流.
auth status财务报告和审定财务报表keys list显示标识、前缀和过期。 报告 键值达到 stdout, stderr, 设置文件或日志是安全报告. - 钥匙直接写到你的文件.
keys create写入DEEPDOCK_API_KEY=<key>输入 文件名称--write-env并且没有副本。 在 git 仓库内必须忽略文件 ;拒绝象征性链接。 在寄存器之外, 密钥被写入 警告; 如果 git 无法回答( 未安装, 权限或所有权错误, 其他任何错误 ) 失败)键仍然被写入,并在stderr上发出警告,命名文件和原因,以及 你一定要保证它不是 承诺。 现有DEEPDOCK_API_KEY=替换行并设置文件为模式 600. 键被写入时,它坐落在目标旁边的600模式临时文件(用于.env.local, (中文(简体) ),.env.local.deepdock-tmp-<random>页:1.gitignore线条.env*或者说*.deepdock-tmp*覆盖它;当 git 答案和名称不被忽略时, CLI 拒绝在任何事情之前 创建. - 批准链接不是证书. 它命名请求;结果以 一个CLI生成并保存的秘密.
- 密钥已过期, 可以被撤销 . 钥匙到达组织的所有设备直到它
过期(最长为90天,离《民事责任法》)或被撤销.
deepdock keys revoke <id>撤销它 删除 CLI 所写的行;deepdock auth logout取消登录和每个密钥 创建 CLI, 除非你通过--keep-keys。在一个终端上,它列出密钥并先问 (默认:保留);与--json或者没有终点站,它就会取消他们,除非--keep-keys通过。 单位--json, (中文(简体) ),data.removed说到底发生了什么null用于此密钥 CLI从来不写,不然{ file, name, removal }与removaldone, (中文(简体) ),absent(行 )或failed(带有reason) (中文(简体) ). 如果文件被打开 通过另一个程序(一个Dev服务器在Windows上观看),密钥仍然被吊销,并且 命令退出 0,同时警告该行仍在文件中,必须手取删除.keys revoke然后保持它的分类账条目, 所以运行keys revoke <id>文件再次出现 免费删除行( API 的“ 未找到” , 用于键本身的组织计数 ) 撤销,和data.alreadyRevoked说吧.auth logout报告失败apiKeysRevoked[].removed内meta.hint,并清除其本地记录 无论是哪种方式. - 当地州 住在这里
$XDG_CONFIG_HOME/deepdock/config.json,则~/.config/deepdock/config.json(单位:千美元)%APPDATA%\deepdock\config.json在窗口上,或者在$DEEPDOCK_CONFIG_DIR/config.json当设定绝对路径时; 模式 600, 在目录中 CLI在不存在时创建了模式700. 它持有登录、默认组织、 密钥的代号 创建了CLI(绝不是其价值),并提出了等待批准的申请. 其它用户可以读取的文件 与chmod运行. - 环境:
DEEPDOCK_ORG, (中文(简体) ),DEEPDOCK_BASE_URL(仅供本地主机使用),DEEPDOCK_CONFIG_DIR, (中文(简体) ),NO_COLOR, (中文(简体) ),FORCE_COLOR(在不是终端的流上显示颜色;);NO_COLOR) (中文(简体). 签名或待决请求从不会发送到与其不同的基址 被提出反对.
以电子邮件报告易被 托尔本@deepdock.ai,而不是公开问题: 警卫。 。 。 .
发展
bun install
bun run build # dist/deepdock.js, one ESM file with no runtime dependencies
bun run test # builds, then runs vitest under Bun
bun run test:node # the same tests under Node (needs dist/ from the build)
bun run format && bun run lint && bun run typecheck && bun run check:public
尝试本地更改
bun run dev 从源头运行 CLI 。 每个 API 在下方获得自己的设置目录
<config dir>/deepdock-dev/<api host>/因此,一个对一个API的签注 从来没有坐在旁边
; 只有 CLI 自己的设置移动(DEEPDOCK_CONFIG_DIR),机器上没有其它内容:
bun run dev -- auth status # the production API
DEEPDOCK_BASE_URL=http://localhost:3000 bun run dev -- auth login --no-wait
脚本不依赖于当前目录: 从其它地方, 按其路径称呼它
(单位:千美元)bun /path/to/devkit/scripts/dev.ts ...),或放进 DEEPDOCK_BASE_URL=... bun .../dev.ts 线条
每个API的外壳别名。 要运行精确的柏油球 npm 会发布,从任何目录:
bun run pack:try -- auth status # builds, packs, prints the one-line command to run it
它印着 DEEPDOCK_BASE_URL=... DEEPDOCK_CONFIG_DIR=... npx -y --package=/path/to/deepdockai-cli-<version>.tgz deepdock auth status, (中文(简体) ),
用于相同的 API 和设置目录 bun run dev 将使用(npx <tarball> 一个人会尝试
以执行归档). tests/fakeApi.ts 本地站点,可按
一次:
bun scripts/fakeServer.ts & # prints its URL
DEEPDOCK_BASE_URL=http://127.0.0.1:<port> bun run dev -- auth login
许可证
麻省理工学院。 。 。 .
释放
更改合并后自动发布; 没有人运行 npm publish来运送一个变化,起伏 version 内 package.json 并添加匹配
## <version> 条目为 CHANGELOG.md 在你的拉动请求。 检查拉动请求需要
当已发布文件更改时, 凸起值。 当拉动请求合并到 main,释放
工作流程测试代码,扫描准确的柏油球,发布到 npm 与出处,然后标记
v<version> 并创建一个 GitHub 发布,以更改日志条目作为注释.