登录态 Token
控制面 REST 端点——向常驻后端内存注入用户登录态 token(RFC-0091)。
宿主程序(小北统一产品 shell 等)把当前用户的登录态 token 注入 North Coder 常驻后端的进程内存。后端在会话 Agent 调起工具 CLI 时,把每个条目 name=value 作为环境变量注入子进程,使依赖登录态的 CLI 能带用户身份运行。
后端是纯透传管道:不验签、不解析、不管过期;token 只存进程内存,绝不落盘,重启即清空。ncoder login / token 命令就是调用这些端点;宿主程序不便用 CLI 时可直接调用。命令侧说明见 CLI — 登录态 Token。
所有端点挂在 /api 下,走共享认证中间件(loopback 127.0.0.1 / ::1 受信任,非 loopback 需 server token)。原始 token 值只出现在 PUT 请求体中——绝不进入 URL、响应或日志。
PUT /api/runtime-tokens/{name}
写入或覆盖(幂等)一个具名 token。{name} 必须是合法环境变量标识符([A-Za-z_][A-Za-z0-9_]*),它就是注入到 Agent 工具 CLI 的环境变量名。NORTH_AUTH_TOKEN 是默认名,对齐小北生态约定。
请求体:
{ "value": "<原始 token>" }200 响应(只回脱敏视图,绝不回显原值):
{
"name": "NORTH_AUTH_TOKEN",
"masked": "********abcd",
"updated_at": 1749879029.123
}updated_at 是 Unix 纪元秒(浮点)。错误:400 {"detail":{"code":"invalid_runtime_token_name", ...}}——名称非法。
# 用 jq 构造请求体,安全处理 token 中的特殊字符
jq -n --arg v "$NORTH_AUTH_TOKEN" '{value: $v}' \
| curl -X PUT http://127.0.0.1:8848/api/runtime-tokens/NORTH_AUTH_TOKEN \
-H 'Content-Type: application/json' --data-binary @-GET /api/runtime-tokens
列出所有条目,仅脱敏值(名称 + 脱敏预览 + updated_at),绝不返回原值。脱敏预览为固定 8 个 * 加末 4 位(长度 ≤ 4 的 token 全打码)。
200 响应:
[
{ "name": "NORTH_AUTH_TOKEN", "masked": "********abcd", "updated_at": 1749879029.123 }
]curl http://127.0.0.1:8848/api/runtime-tokensDELETE /api/runtime-tokens/{name}
删除具名 token。存在并删除 → 204;不存在 → 404;名称非法 → 400。
curl -X DELETE http://127.0.0.1:8848/api/runtime-tokens/NORTH_AUTH_TOKEN错误:404 {"detail":{"code":"runtime_token_not_found", ...}}。
注入语义
- 环境每次工具运行重建——
PUT在下一次 Agent 运行生效,进行中的运行不受影响;DELETE后旧 token 立即不再注入。 - 作用域仅限 Agent 工具 CLI——用户交互终端(PTY)与 MCP server 子进程不注入。
- 后端每次(重)启动后表都是空的。宿主程序须在每次(重)连接、token 刷新/过期时重新
PUT(幂等覆盖)。
完整设计见 RFC-0091;shell 对接契约见仓库内 docs/integrations/ncoder-login-token-injection.md。