Skip to content

网页网关 ​

zettcode gateway 为这台机器上的后台 agent 提供一个网页。它本身不是 agent:左边是聊天列表,中间是 daemon 和会话, 右边是对话。用手机也能打开——终端留在代码所在的地方,页面跟着你走。

sh
zettcode gateway                    # 在当前终端里运行,Ctrl-C 结束
zettcode gateway --port 9000        # 一样,只是换个端口

默认监听 127.0.0.1:8765。运行一次,然后打开它打印出来的地址。

在后台运行 ​

sh
zettcode gateway start              # 脱离终端运行,立刻返回
zettcode gateway stop               # 停掉正在运行的那个
zettcode gateway restart            # 先停,再按原来的设置启动

start 会打印页面地址和登录方式,把输出写进网关目录(默认 ~/.zettcode/gateway,可用 --directory 改)里的 gateway.log,等页面能访问之后才返回。不带参数的 restart 会沿用正在运行那个网关的设置——host、port、token、roots—— 所以重启不会悄悄换掉地址或让已保存的登录失效;要改就带参数(zettcode gateway restart --port 9000 --token new)。

只有被认出确实是网关的进程才会被结束:stop 先检查命令行,所以过期记录或被复用的进程号不会误杀别的东西。 没有在运行时也不算错误:stop 会直说,并以 0 退出。唯一的例外是进程还在、但命令行读不出来:这时 stop 会保留记录并以 1 退出, 而不是靠猜——那个进程可能就是网关。

登录与权限 ​

  • 不给 --token 就没有登录,网关只监听本机;页面打印的地址直接可用。
  • 给 --token(或 $ZETTCODE_GATEWAY_TOKEN)时,页面会让你输入一次,之后保留一个 cookie。
  • 监听本机之外(--host 0.0.0.0)必须有 token:没有的话,任何能连到这个端口的人都能用你的身份运行命令。 页面是明文 HTTP,离开本机时请放在 TLS 后面。
  • -r/--root 限定 daemon 可以在哪些目录里启动;默认任何目录都可以。--no-full 不允许页面以 full shell 级别(没有沙箱、不询问)启动 daemon;记录过 --no-full 之后,可以用 --full 再打开。

页面能做什么 ​

页面会列出这台机器上的 daemon 和其他会话。可以从中启动、停止 daemon,也可以像联系人一样和它们对话: 你输入的内容以网关的名义作为消息发出,对方的回复回到同一个对话里。页面发出的消息会等对方当前请求结束再处理: 页面并不实时显示那个请求,所以不会改变一个你看不到的请求(终端会问你要不要 steer,页面只是等)。 网关自己也是一个会话,像终端一样在 broker 上注册, 所以 daemon 看到的是一个人的消息,而不是另一个 agent 的。它的名字是 Web gateway。

网关需要一个已配置的模型,因为它的会话是真实会话,尽管它自己从不调用模型。没有模型是 start 唯一可能 只报错、不给页面的原因,日志里会写清楚。

以 MIT 许可证发布。