跳转至

刷新、运行与验收

区分三个边界:本地生成候选、在已有 runtime 发布经校验的快照、启动或重启实际 Glance 服务。前两项不能证明外部网址已更新。

手动读取与明确计划

chatglance refresh projects --no-restart
chatglance refresh sites --no-restart
chatglance refresh --json-output --no-restart

refresh 只对已有 Glance 配置中的受管页面采集并发布快照,按页返回成功/部分失败。候选先用指定 Glance binary 的 config:validate 校验,再备份并替换;失败页保留旧文件,运行中使用共享非阻塞锁。--no-restart 保留运行进程不变。上例只是示意:缺 runtime、凭据或校验程序时命令会失败,绝不自动构建环境。

每次原生、计划或浏览器刷新都有同一个 run_id,安全流水位于 runtime 的 private/refresh-history。用 chatglance runtime history list / show RUN_ID 只读检查;history prune 默认预览,只有 --apply 才删除确认归属 且未受保护的记录。typed 默认是 30 天和 256 MiB,流水不包含异常原文、 Token/Cookie、配置或整份账号快照。

服务器当前状态与最后成功观测分离:离线仍标离线;server_id 可显式 指定,缺省时从 alias 与受审 target/user/port 派生,身份完全一致时原卡片保留并标记历史 CPU/内存/GPU/ 磁盘/系统字段,同时显示最后成功和本次尝试;新机或身份变化明确显示无 历史。last-good 与可见快照参加同一校验/发布事务,用户备注仅在渲染时覆盖。

无 --scheduled 的手动调用不兑换重置卡;订阅页面只是展示当前快照。定时刷新应仍在既有调度链中显式使用 --scheduled 和逐账号策略,不能通过阅读按钮状态代替授权。刷新项目若识别到同址可选登录模式,访客列会重新从 Public allowlist 生成,认证列保留全量视图;不匹配布局会拒绝而非覆写私有行。

实例的固定页面与只读边界

runtime instance init 将显式命名 ChatGlance profile、页面 allowlist 和已启用订阅标签写入私有 private/instance.json。所属操作者可用 runtime instance configure --page ... --account ... --apply 修改定义,在同一 profile 内停用或重新启用页面和账号。refresh --runtime-home <实例目录> 从该 profile 读取原生 collector 设置,只调用已保存的选定模块,并由自身快照重建 Go YAML;执行时的 pages / --profiles 不能增加清单外内容。account-limits 的 JSON、资源和页面只含选定标签;跟踪表变为空或标签停用时直接失败,不复活旧缓存账号。runtime serve 再次核对 YAML 页面、原生服务器与登录定义。

若启用项目页,必须在命名 profile 设置项目 owner,或显式传入 --projects-owner;GitHub Token 也必须来自该命名 profile,缺失时在调用 ChatGH 前失败,不借用主站 active、进程或本地 Git 凭据。服务器/网站清单须属于实例目录,不能引用主站清单。

实例即使接收 refresh --scheduled 也不执行自动/强制用卡或写策略台账。卡片保留原有用量和日历呈现,但不渲染控制入口;runtime controls、旧 account-limits control-serve 和 runtime maintain 均拒绝该实例。Go 原生登录从唯一命名 profile 读取敏感真实密码与独立 64 字节会话密钥,密码通过私有子进程环境中的 YAML 标量引用传递并由 Go 内部生成 bcrypt hash;旧的仅 hash 模板仍兼容,缺少所选模板要求的字段即失败,不读取 active/主站/进程登录值。主站没有实例清单时仍按旧规则运行。

多账号跟踪订阅

跟踪与凭据分开管理:ChatEnv 的 CRS 命名 profile 保存 CRS Base URL 和专用管理 Key;ChatGlance 的 CHATGLANCE_ACCOUNT_LIMITS_SUBSCRIPTIONS 只保存明确的账号引用。例如:

{"work":{"crs_profile":"reader-work","account_id":"account-01","enabled":true},"personal":{"crs_profile":"reader-personal","account_id":"account-02","enabled":true}}

不同记录可指向不同的 CRS profile 或服务。没有账号数为二的限制,也不会自动遍历所有 Env/远程账号。管理 Key 的读取范围必须覆盖对应账号;新监控账号应仅授读取权限,上游 OAuth 始终留在 CRS。注册跟踪不签发或修改 Key。

chatglance account-limits subscriptions list --json-output
chatglance account-limits subscriptions add work --crs-profile reader-work --account-id account-01 --execute
chatglance account-limits subscriptions disable work --execute
chatglance account-limits subscriptions enable work --execute
chatglance account-limits subscriptions remove work --execute
chatglance refresh account-limits --json-output

省略 --execute 只预览配置变更。subscriptions --env-profile dashboard-a 只编辑该命名 ChatGlance profile,不激活它;--home 选择明确的 ChatArch home。跟踪启用与自动用卡是两个概念:新账号政策默认关闭,启用跟踪不会开启用卡;已有政策不变。移除停止跟踪和旧小窗访问,但保留策略、台账及身份墓碑,不撤销可能共享的凭据。list --all 可查看移除引用;同名不得换绑另一账号。

未配置新字段时兼容原 PROFILES、单个 CRS_PROFILE 和 CRS_ACCOUNTS;首次管理写入会无损迁移明确的旧映射。显式 {}、全部停用或全部移除表示零条有效跟踪,不从旧快照复活账号。批次结构错误在任何账号/公共来源请求和采集输出前拒绝;单账号上游失败如实显示 partial/error,不回退本机 OAuth,也不遮蔽其他健康账号。采集、首次迁移、跟踪修改和用卡控制共享同一 ChatArch home 下的配置锁,不依赖 runtime 放置路径;忙碌时本次操作不执行。已有孤立策略但无可证明身份的 label 不能绑定新账号,应使用新 label。

页面操作反馈

项目保留原图标;服务器保留同一原位置的可点击 刷新 控件,运行时明确显示刷新中。点击遇到一个确实包含本页的既有刷新时,按钮会附着并跟踪该次 run_id 到结束,再更新父页;不会把这种情形记成无效 busy 点击。若另一项刷新并不包含本页,才明确提示忙碌且不会伪称已开始。短时状态读取失败不会误作刷新失败或放开重复点击,同一浏览器标签页重载后继续跟踪自己启动或已附着的运行。成功后显示刷新完成及该次运行的真实完成时间;部分成功、失败和占锁如实显示。打开页面不随后台定时任务自行旋转,完成时间与数据观测时间分别保留。

订阅不额外添加顶部按钮。账号小窗原有刷新状态按钮会只读当前选中账号的最新额度、卡片与条件状态,使用受保护的同源接口,不消费、不改开关。点击后原按钮显示刷新中,成功更新最近状态刷新时间与小窗内容,并显示成功结果;失败停止并保留旧数据。上次计划检查仍显示实际计划快照时间。最新只读结果保存在 runtime 私有单账号缓存,后续更晚的计划快照优先;无需等待全站项目采集锁。

点击服务器名称编辑备注。按钮为保存、取消、清空;保存成功或取消关闭窗口,取消丢弃未保存的输入,清空先清空输入,点击保存才删除已保存备注。冲突或保存失败会保留窗口与输入。

手动检查并用卡

登录后打开订阅详情中的账号控制小窗,点击 检查并用卡。接受二次确认后,服务端重新读取该账号的当前策略、真实额度和可用卡;达到配置阈值且其余时间窗、预测、账号及幂等条件全部满足,才尝试使用至多一张明确的卡。它不必等待下一次定时扫描,也不会降低现有保护条件。

取消确认、查看页面、普通刷新和未运行 JavaScript 的原生表单都不会兑换。结果显示为成功、条件未满足或结果待确认,并标注本次检查时间;上方执行清单仍明确标识为上次计划检查的快照。结果待确认时不要重复操作,应先核实账本和额度。生产验收只查看或取消确认;消费路径用合成账号和卡片验证。

服务边界

强制使用一张卡

账号控制小窗的 强制用一张卡 不检查自动开关、用量阈值、剩余时间、预测或业务冷却。接受独立的二次确认后,服务端针对当前账号使用至多一张确切可用卡,并回读卡数和用量;设置本身不变。登录、同源CSRF和防重复保护仍执行:正在处理或当前结果未知时不能再用,超时不会自动重试。已结束旧额度窗的未知记录仅在force授权下归档,不改写为“未消费”。管理Key必须对所选账号具有消费权限。

  • projects update-config 写显式输出路径,不是直接部署;同址候选输出不能别名覆盖输入。
  • runtime maintain 会维护现有运行配置并可选择验证、备份或重启;在真实环境调用前必须确认输入、权限和备份目录。
  • runtime render-systemd 可审查模板;runtime install-systemd 和 runtime start 会更改 user-level service/timer。本站文档不会启动它们。
  • 服务器采集只读取明确列出的 SSH 别名;网站服务清单由运维审定,不自动扫描域名。server-stats 只显示有意义的磁盘挂载点。

部署后的阅读与安全验收

  1. 在目标同一网址匿名读公开首页和 /projects,检查导航、内容接口、HTML/JSON/缓存均没有 Private 标识、URL、计数或 CLI/Env;验证旧 /项目 精确重定向。
  2. 用现有 Glance 账号登录,读同一路径确认全量 Public/Private/Unknown;直访未授权页面和内容接口应受服务器保护。
  3. 注销并刷新、返回和再次读取,确认私有响应不能从缓存复现;移动/桌面导航均须手工检查。
  4. 确认实际 Glance 可执行文件具有 public、authenticated-columns 能力,并保留升级前配置与回滚方案。不要把静态文档站构建成功当作这些结果。

页面发布另有 GitHub Actions 流程;PR 预览目标 /dev/,main 根站发布。两者都需在真实 Pages 配置和外部域名读回后才能宣称上线。