Wander

Polar Sponsor
爱发电 赞助
.NET 9.0

关闭远程长时间工作的闭环:为各平台(CI、EAS、部署、发布)选取合适的完成信号,后台运行监控并发送通知。

Wander — 远程合成完成( meta) + GitHub 动作适配器

功能概述

Wander — 远程合成完成( meta) + GitHub 动作适配器是一项面向实际任务的技能,主要用于Wander.;Philosophy: 在您触发远程和慢速的东西后, 完成应该找到您—— 并且代理必须 St。

核心要点

  • 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
  • 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
  • 该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。

使用与执行

从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;

结果检查与注意事项

若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。

Wander — 远程异步完成(元协议)+ GitHub Actions 适配器

不要手动刷新,让 Wander 来守候。 设计哲学:当你触发一个远程且耗时的操作后,完成通知应主动找到你——而 Agent 仍必须验证最终结果,而非假设其成功。

元协议 vs 具体实现:本能力定义了一套适用于任意长期运行远程任务的可移植最佳实践。Wander(watch-workflow-*.sh)是当事实来源为GitHub Actions时的参考适配器。它并非唯一有效的监控方式。

心智模型(第一性原理)

每个远程异步任务都具有相同结构:

触发 → 在别处执行 → 终态(+ 产物)
(Agent)     (无法加速)     (用户与 Agent 均需此信息)

Agent 应当:

  1. 触发后立即继续——勿在聊天界面中反复手动刷新 UI 消耗对话轮次。
  2. 附加监控器——一种无需用户盯守浏览器标签页即可主动呈现完成状态及成功/失败结果的机制。
  3. 闭环认知流程——当监控器触发时,Agent 读取真实结果并采取行动(推进下一步,或诊断问题)。

仅当 Agent 明确知晓终态时,该闭环才算完成(对于失败情形,还需具备足够日志/上下文以支持修复)。

  1. 读取监控输出(终态日志、JSON 汇总、仪表盘链接 + 状态抓取——取决于后端所提供内容)。
  2. 基于结果执行动作——在终态被确认前,不得视任务为“已完成”:
    • ✅ 成功 → 推进后续操作(例如合并 PR、部署、打标签)
    • ❌ 失败 / 已取消 → 向用户呈现失败信息、拉取日志、提出修复建议
  3. 绝不假设成功——“监控已启动” ≠ “任务已成功”。

元协议 —— 在选择监控器前对任务进行分类

步骤 A —— 识别权威数据源(即真实状态所在系统?)

类别 示例 典型权威数据源
代码仓库 CI PR 中的 lint、测试、构建 GitHub Actions、GitLab CI、Buildkite、CircleCI 等
移动云构建 EAS / Xcode Cloud / … 厂商构建详情页、CLI 状态、Webhook,或封装该厂商的 CI 任务
部署 / PaaS Fly、Railway、Vercel、k8s rollout 平台 CLI/API、部署仪表盘,或 CI 中的部署任务
发布 npm、应用商店、制品仓库 商店/CI 流水线状态,而非“上传已开始”

步骤 B —— 选择完成通知通道(在保障可审计性的前提下选择最低摩擦路径)

  1. 以 CI 为门面——若团队已将质量门禁设于某 CI 运行之上,则即便繁重工作由 EAS/Railway 等执行,监控该 CI 运行通常仍是最佳选择(通过包装任务或 workflow_dispatch 触发)。
  2. 厂商原生 CLI/API——例如,在无 CI 包装且厂商自身为权威数据源时,轮询构建 ID 直至返回 finished / errored 状态。
  3. 仪表盘 + 显式交接——当自动化不可行时可接受;但仍需用户提供一个明确的状态名称,或单个经确认的 URL——而非凭主观感受判断。

步骤 C —— 后台运行监控器,除非用户明确要求阻塞当前会话。

步骤 D —— 完成后,从同一权威数据源获取失败详情(失败步骤日志、EAS 错误页、部署日志等)。

在步骤 A 中切勿默认采用 GitHub Actions。应默认采用:实际掌控该触发任务终态的平台。

参考适配器:通过 Wander 使用 GitHub Actions

当权威运行任务本身即为 GitHub Actions 工作流(如 push、workflow_run、workflow_dispatch 等),请使用 Wander 脚本作为监控器:

# Wander 后台进程退出后,检查结果:
gh run view  --json conclusion -q .conclusion
# → "success" | "failure" | "cancelled" | "timed_out"

# 若失败,获取日志供 Agent 诊断:
gh run view  --log-failed

任务分类——示例(GHA 列 = Wander 适配器可直接适用的情形):

任务类型 示例 Wander(GHA)
CI 测试 lint、单元测试、端到端测试 ✅ 当工作流运行于 GHA 上
构建 Docker 镜像、Web 构建包 ✅ 当工作流运行于 GHA 上
移动构建 EAS iOS/Android ⚠️ 通常为间接方式:GHA 封装任务 或 厂商 CLI/仪表盘
部署 Railway、Fly、Vercel ✅/⚠️ CI 任务 或 平台原生方式
发布 / 发布上线 npm、应用商店上传 ✅/⚠️ 同上

若 EAS 仅通过 CLI 触发且未接入 GHA:Wander 脚本不适用——请依据项目文档,使用 EAS/Expo 原生状态(eas build:list、构建 URL 或项目自动化机制)。

引擎说明:当前 wander 仓库实现了针对GitHub Actions的轮询与通知功能。其他后端应作为额外适配器(未来扩展)或遵循相同元协议的项目专属脚本纳入。

范围说明:v1 版本仅覆盖 GitHub Actions。

Agent 自动触发 —— 依据任务类别决策,而非“一律使用 GHA”

在触发一个长期运行的远程任务后,应为其附加匹配该任务权威数据源的监控器——除非用户明确拒绝或该任务极短(可忽略)。

若所触发的工作流明确属于GitHub Actions(或完全封装于 Agent 刚刚启动的 GHA 工作流中):

  1. 若存在 .workflows.yml → 从中选取工作流及触发时机。
  2. 若不存在但 .github/workflows/ 存在 → 识别对应工作流(通过注册表扫描或向用户询问),随后启动监控。
  3. 使用 watch-workflow-bg.sh —— 默认后台运行,除非用户要求阻塞。
  4. 约 8 秒后,预览终端输出 / 运行 ID 并报告初始状态。
  5. 告知用户:“正在 GitHub Actions 上监控 ;完成后我会通知你——你可以继续其他工作。”
  6. 在终态明确前:持续检查监控输出或执行 gh run view --json conclusion。切勿过早宣告成功。
  7. 收到结果后:成功 → 执行下一步;失败 → 执行 gh run view --log-failed(或等效命令)并提出修复建议。

若该工作流并非 GHA(纯 EAS CLI、仅平台侧部署等):

  • 切勿强行套用 watch-workflow-bg.sh。
  • 改用厂商 CLI/API 轮询、项目定制脚本,或与用户约定仪表盘 URL —— 仍尽可能后台运行,并在事后验证终态。

若 .github/workflows/ 不存在:不得自动启动 Wander;请依据上述步骤 A–B 选择其他监控器。

何时使用本技能

  • 任何远程异步任务预计耗时> ~30 秒
  • 用户希望在“构建 / CI / 部署 / 发布”完成后收到通知
  • 用户即将手动刷新某个仪表盘——此时应提供一个结构化的监控方案替代之
  • 多步骤流程中,下一步依赖于当前步骤的成败结果

不应使用的情形

  • 任务在< ~10 秒内完成(可内联等待)
  • 纯本地命令,且能立即返回退出码
  • 用户明确要求在聊天中进行同步阻塞式输出
  • 无法抵达客观终态(触发逻辑未定义 / 平台未知)——需先澄清

前置条件(GitHub Actions 适配器路径)

  • gh CLI 已安装并完成身份认证
  • jq 已安装
  • Wander 已下载至本地:WANDER_HOME(默认为 ~/code/wander)
  • macOS 支持通知中心;Linux/无头环境:仅输出模式仍可正常工作

安装(Wander / GHA 适配器)

git clone https://github.com/ERerGB/wander.git ~/code/wander
cd ~/code/wander && chmod +x *.sh

添加至 shell 初始化文件(如 ~/.bashrc 或 ~/.zshrc):

export WANDER_HOME="${WANDER_HOME:-$HOME/code/wander}"
export PATH="$WANDER_HOME:$PATH"
alias wf='watch-workflow.sh'
alias wfbg='watch-workflow-bg.sh'
alias wfdt='watch-workflow-detached.sh'

选择合适的运行模式(GHA 适配器)

模式 脚本 适用场景
后台 watch-workflow-bg.sh 默认模式。 可继续工作;完成时接收通知。
分离 watch-workflow-detached.sh 关闭终端;日志写入 ~/.wander_logs/
前台 watch-workflow.sh 阻塞当前会话直至完成(极少使用)

经验法则:优先选用后台模式。若预计运行时间> ~5 分钟且终端可能关闭,请改用分离模式。

工作流注册表(.workflows.yml,GHA)

各工作流执行时长不同。该注册表用于告知 GHA 适配器预期行为:

workflows:
  - name: "ci.yml"
    description: "Lint + 单元测试"
    check_window: 180      # 若监控启动前工作流已结束,允许向前追溯的时间窗口(秒)
    expected_duration: 45  # 典型运行时长(秒)
    category: "smoke"

  - name: "build.yml"
    description: "Docker 构建 + 推送"
    check_window: 600
    expected_duration: 180
    category: "build"

  - name: "deploy.yml"
    description: "Railway 部署"
    check_window: 900
    expected_duration: 300
    category: "deploy"

check_window = 若工作流在监控启动前已完成,该参数定义了我们仍将其视为“本次触发”的最大回溯时间。通常约为 6× expected_duration。

为仓库自动生成注册表:

cd /path/to/repo
"$WANDER_HOME/scripts-registry.sh" scan-workflows --auto-scope

未配置时的默认 check_window 值为 300 秒。

标准使用模式(GHA)

Git push 后(CI 运行于 GitHub Actions)

git push origin main && "$WANDER_HOME/watch-workflow-bg.sh" ci.yml

项目级封装(推荐团队采用)

# scripts/watch-ci.sh
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
WANDER_DIR="${WANDER_HOME:-$(dirname "$REPO_ROOT")/wander}"
exec "$WANDER_DIR/watch-workflow-bg.sh" ci.yml "$@"

随后执行:git push && ./scripts/watch-ci.sh

EAS 且受 GHA 门禁控制

若 EAS 由 GHA 工作流触发(例如 eas-build.yml):

git push origin feat/my-branch && "$WANDER_HOME/watch-workflow-bg.sh" eas-build.yml

若 EAS 仅通过 CLI 触发:请使用 EAS/Expo 原生信号进行监控;团队可选模式仍是添加一层轻量 GHA workflow_dispatch 封装,以实现统一监控。

手动触发工作流

gh workflow run deploy.yml --ref main
"$WANDER_HOME/watch-workflow-bg.sh" deploy.yml main

边界情况(GHA 适配器)

场景 行为
工作流在监控启动前已完成 可能被 check_window 捕获;快速发出通知
约 30 秒后仍未出现运行记录 Wander 持续等待,随后退出并提供指引
工作流设置了错误的分支过滤器 未发现匹配运行;上报并停止
极短工作流 常通过 check_window 立即捕获
极长工作流 推荐使用分离模式;日志可在终端关闭后保留

任务失败时的处理(GHA)

gh run view  --log-failed
gh run rerun  --failed

对于非 GHA 类型任务,请遵守相同元规则:拉取对应平台的首要失败信息源(构建日志、部署日志等)。

WANDER_HOME 解析顺序

  1. $WANDER_HOME 环境变量
  2. 当前仓库同级目录:$(dirname "$REPO_ROOT")/wander
  3. 默认值:~/code/wander

演进方向:超越 GitHub Actions 的适配器

元协议保持稳定。适配器可替换:

  • 当前:Wander = GHA 轮询 + 桌面通知。
  • 未来:EAS CLI 监控器、部署 Webhook → 通知桥接器等。

在专用适配器尚未就绪前,优先采用以 CI 为门面或厂商原生轮询——切勿静默假设成功。

参考资料

  • Wander README
  • EDGE_CASES.md
  • COFFEE_BREAK.md

相关专题

更多
Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

0

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

0

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

0

15

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

2026.10.22

0

10

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

2026.10.22

0

25

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

2026.10.22

0

15

Golangci-lint安装与入门教程
Golangci-lint安装与入门教程

本专题讲解Golangci-lint的安装、初始化、基础命令和首次代码检查,覆盖本地环境、Docker及多平台用法,帮助Go开发者快速上手。

2026.10.22

0

15

PHP2Shell高危漏洞修复教程
PHP2Shell高危漏洞修复教程

PHP2Shell漏洞是什么,哪些PHP版本和运行环境会受到影响,服务器应该如何检测与修复?本专题提供版本自查脚本、Linux与Docker升级命令、PHP-FPM和Apache排查步骤,以及修复验证、临时缓解和应急响应方案。

2026.10.22

0

12

剧云人物设定与关系管理教程
剧云人物设定与关系管理教程

本专题介绍剧云人物设定与关系管理,讲解角色小传、性格职业、人物目标、背景资料和关系网络的创建及维护方法。

2026.10.22

0

16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.9万人学习