@cdmbase/cdecli-代理客户
类型脚本客户端 代理代理人 Go HTTP 服务器 .
与代理服务器在同一Repo的船舶(src/serve/cdecli_exec.go)所以说
电线协议和客户端一起移动——每个协议将地块改变为一个PR.
安装
yarn add @cdmbase/cdecli-agent-client
# optional: enable HTTP keep-alive on Node
yarn add undici
为什么
一个薄薄的、依赖性的光线包装器 环绕克氏剂电线协议
(单位:千美元)POST /v1/cdecli/exec) (中文(简体) ). 拥有监控解析器、认证头逻辑,以及
证书 - 键取器,所以呼叫者不 重新执行它们.
层
CdecliAgentClient ← transport (fetch + headers + JSON)
│
├─ CdecliConnectorClient ← cdecli connector run/install/list/actions
├─ CdecliAgentChatClient ← cdecli agent --skill … --mode … -m … (native session/chat protocol)
├─ CdecliAgentRunnerClient ← cdecli agent -m … run as a child cdecli via /v1/cdecli/exec
└─ CdecliSearchClient ← cdecli connector search …
使用量
import {
CdecliAgentClient,
CdecliConnectorClient,
} from '@cdmbase/cdecli-agent-client';
const transport = new CdecliAgentClient({
endpoint: process.env.CDECLI_AGENT_ENDPOINT ?? 'https://your-cdecli-agent.example.com',
});
const connectors = new CdecliConnectorClient(transport);
const result = await connectors.runAction({
userToken: userJwt, // bearer for per-user $HOME isolation
connector: 'github',
action: 'GITHUB_LIST_ISSUES',
params: { repo: 'owner/repo' },
credentialId: 'fb-cred-id', // optional vault lookup
});
if (result.successful) {
console.log(result.data);
} else {
console.error(result.error);
}
代理聊天技巧
SDK 等效于
cdecli agent --endpoint https://cdecli-agent.cdebase.dev \
--skill yantra-video-studio --no-tui --mode auto \
-m "$(cat birthday-brief.txt)" > run.log
实值 CdecliAgentChatClient它讲的是特工的原生协议 同样的
用于远程代理的CLI: POST /v1/agent/session
创建具有预激活技能的会话,然后 POST /v1/agent/chat
将转弯作为服务器发送事件流出,并附带许可模式.
没有TUI可以关闭 没有孩子 cdecli 进程.
import { readFile } from 'node:fs/promises';
import { CdecliAgentClient, CdecliAgentChatClient } from '@cdmbase/cdecli-agent-client';
const transport = new CdecliAgentClient({ endpoint: 'https://cdecli-agent.cdebase.dev' });
const agent = new CdecliAgentChatClient(transport);
const result = await agent.run({
userToken: userJwt, // --token / auth.json access token
skill: 'yantra-video-studio', // --skill
permissionMode: 'auto', // --mode auto (unattended)
message: await readFile('birthday-brief.txt', 'utf8'), // -m
onChunk: (text) => process.stdout.write(text), // the streamed reply
onStatus: (status) => console.error(`[${status}]`),
});
console.log(result.sessionId, result.text.length, result.outputs);
run()创建会话并发送一个转弯;通过sessionId改为 继续现有的会话( c)createSession, (中文(简体) ),chat, (中文(简体) ),cancel,以及closeSession用于多转弯控制.- 每个课时都启用一种技能,如同CLI授权路径一样. 这个
必须在代理人上存在技能(
GET /v1/skills); SDK 没有 以 CLI 的方式推动本地技能文件夹 . permissionMode这是--mode词汇表 :ask | edit | plan | auto | bypass(单位:千美元)yolo=:bypass) (中文(简体) ).auto工作需要的就是这个.onEvent接收每个已解码的事件( e)delta, (中文(简体) ),output, (中文(简体) ),status, (中文(简体) ),tool_call, (中文(简体) ),tool_result, (中文(简体) ),tool_input_delta, (中文(简体) ),ask_user, (中文(简体) ),error, (中文(简体) ),done) (中文(简体) ). 一个澄清的问题 代理 公园到达ask_user与已解码的有效载荷并脱去可见文本;应答 与另一个chat()同一届会议的报告.- 服务器端失败拒绝使用
CdecliAgentChatError,保留sessionId编辑partialText在错误之前流出. - 会话被固定在创建它们的主机上:客户端重放 入侵的粘糊糊的饼干每场, 所以共享的运输可以服务于许多 用户没有把他们都绑在一个舱里.
CdecliAgentRunnerClient.run() 给想要孩子的人留下的遗物
cdecli agent -m … 通过代理 /v1/cdecli/exec现在也是
接受 permissionMode (单位:千美元)--mode) (中文(简体) ).
电线合同
匹配 src/serve/cdecli_exec.go::ExecRequest 这回贷。 接受一个
args (argv)或 (中文(简体) ) shell_command (POSIX线). 反应形状是
{ stdout, stderr, exit_code, error? }。 。 。 .
流动政策: 每换一次去 ExecRequest 编号 : ExecResponse 结构
内 src/serve/cdecli_exec.go 必须更新 src/types.ts 输入 同样的 PR。 。 。 .
HTTP 保持活动状态
在节点, 默认值 fetchImpl 使用全过程 undici.Agent
(单位:千美元)connections: 128, keepAliveTimeout: 30s在所有租户中分享。 日本西北地区
和会话ids生活在每个请求头, 所以集合是安全的.
禁用为 CDECLI_AGENT_KEEPALIVE=0。 。 。 .
发展
cd packages/cdecli-agent-client
yarn install
yarn build
yarn test
这个包是独立的——不是任何工作空间的一部分. 它会自己拉起
node_modules 并独立于"去"二进制出版.