@aipper/aiws-spec 0.0.24 → 0.0.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/README.md +22 -0
  2. package/docs/aiws-bootstrap-routing-design.md +138 -0
  3. package/docs/aiws-governance-positioning.md +69 -0
  4. package/docs/cli-interface.md +91 -6
  5. package/docs/collaboration-artifacts.md +62 -0
  6. package/docs/opencode-omo-adapter.md +135 -0
  7. package/docs/opencode-omo-validation-checklist.md +90 -0
  8. package/docs/spec-contract.md +30 -22
  9. package/docs/superpowers-collaboration-adoption.md +92 -0
  10. package/docs/workflow-delegation-contracts.json +274 -0
  11. package/docs/workflow-delegation-contracts.md +248 -0
  12. package/docs/workflow-delegation-contracts.schema.json +176 -0
  13. package/docs/workflow-governance-rules.json +294 -0
  14. package/docs/workflow-governance-rules.md +63 -0
  15. package/docs/workflow-governance-rules.schema.json +182 -0
  16. package/docs/workflow-review-gates.json +72 -0
  17. package/docs/workflow-review-gates.md +36 -0
  18. package/docs/workflow-review-gates.schema.json +67 -0
  19. package/docs/workflow-router-rules.json +196 -0
  20. package/docs/workflow-router-rules.md +83 -0
  21. package/docs/workflow-router-rules.schema.json +119 -0
  22. package/docs/workflow-stage-contracts.json +148 -0
  23. package/docs/workflow-stage-contracts.md +70 -0
  24. package/docs/workflow-stage-contracts.schema.json +98 -0
  25. package/package.json +1 -1
  26. package/templates/workspace/.agents/skills/using-aiws/SKILL.md +87 -0
  27. package/templates/workspace/.agents/skills/ws-commit/SKILL.md +27 -1
  28. package/templates/workspace/.agents/skills/ws-delegate/SKILL.md +75 -0
  29. package/templates/workspace/.agents/skills/ws-deliver/SKILL.md +25 -4
  30. package/templates/workspace/.agents/skills/ws-dev/SKILL.md +35 -6
  31. package/templates/workspace/.agents/skills/ws-dev-lite/SKILL.md +58 -0
  32. package/templates/workspace/.agents/skills/ws-finish/SKILL.md +25 -12
  33. package/templates/workspace/.agents/skills/ws-frontend-design/SKILL.md +126 -0
  34. package/templates/workspace/.agents/skills/ws-handoff/SKILL.md +25 -4
  35. package/templates/workspace/.agents/skills/ws-plan/SKILL.md +25 -1
  36. package/templates/workspace/.agents/skills/ws-plan-verify/SKILL.md +20 -0
  37. package/templates/workspace/.agents/skills/ws-preflight/SKILL.md +23 -0
  38. package/templates/workspace/.agents/skills/ws-quality-review/SKILL.md +56 -0
  39. package/templates/workspace/.agents/skills/ws-review/SKILL.md +24 -0
  40. package/templates/workspace/.agents/skills/ws-spec-review/SKILL.md +57 -0
  41. package/templates/workspace/.agents/skills/ws-verify-before-complete/SKILL.md +59 -0
  42. package/templates/workspace/.aiws/manifest.json +2 -6
  43. package/templates/workspace/.claude/commands/using-aiws.md +25 -0
  44. package/templates/workspace/.claude/commands/ws-dev-lite.md +31 -0
  45. package/templates/workspace/.claude/commands/ws-finish.md +1 -1
  46. package/templates/workspace/.claude/commands/ws-handoff.md +3 -2
  47. package/templates/workspace/.claude/commands/ws-quality-review.md +24 -0
  48. package/templates/workspace/.claude/commands/ws-review.md +2 -2
  49. package/templates/workspace/.claude/commands/ws-spec-review.md +24 -0
  50. package/templates/workspace/.claude/commands/ws-verify-before-complete.md +24 -0
  51. package/templates/workspace/.claude/skills/p-aiws-change-archive/SKILL.md +24 -0
  52. package/templates/workspace/.claude/skills/p-aiws-change-finish/SKILL.md +24 -0
  53. package/templates/workspace/.claude/skills/p-aiws-change-list/SKILL.md +18 -0
  54. package/templates/workspace/.claude/skills/p-aiws-change-new/SKILL.md +26 -0
  55. package/templates/workspace/.claude/skills/p-aiws-change-next/SKILL.md +19 -0
  56. package/templates/workspace/.claude/skills/p-aiws-change-start/SKILL.md +33 -0
  57. package/templates/workspace/.claude/skills/p-aiws-change-status/SKILL.md +19 -0
  58. package/templates/workspace/.claude/skills/p-aiws-change-sync/SKILL.md +19 -0
  59. package/templates/workspace/.claude/skills/p-aiws-change-templates-init/SKILL.md +18 -0
  60. package/templates/workspace/.claude/skills/p-aiws-change-templates-which/SKILL.md +18 -0
  61. package/templates/workspace/.claude/skills/p-aiws-change-validate/SKILL.md +23 -0
  62. package/templates/workspace/.claude/skills/p-aiws-hooks-install/SKILL.md +30 -0
  63. package/templates/workspace/.claude/skills/p-aiws-hooks-status/SKILL.md +18 -0
  64. package/templates/workspace/.claude/skills/p-aiws-init/SKILL.md +27 -0
  65. package/templates/workspace/.claude/skills/p-aiws-rollback/SKILL.md +18 -0
  66. package/templates/workspace/.claude/skills/p-aiws-update/SKILL.md +26 -0
  67. package/templates/workspace/.claude/skills/p-aiws-validate/SKILL.md +22 -0
  68. package/templates/workspace/.claude/skills/p-tasks-plan/SKILL.md +37 -0
  69. package/templates/workspace/.claude/skills/using-aiws/SKILL.md +87 -0
  70. package/templates/workspace/.claude/skills/ws-analyze/SKILL.md +26 -0
  71. package/templates/workspace/.claude/skills/ws-bugfix/SKILL.md +111 -0
  72. package/templates/workspace/.claude/skills/ws-commit/SKILL.md +130 -0
  73. package/templates/workspace/.claude/skills/ws-deliver/SKILL.md +230 -0
  74. package/templates/workspace/.claude/skills/ws-dev/SKILL.md +168 -0
  75. package/templates/workspace/.claude/skills/ws-dev-lite/SKILL.md +58 -0
  76. package/templates/workspace/.claude/skills/ws-finish/SKILL.md +209 -0
  77. package/templates/workspace/.claude/skills/ws-frontend-design/SKILL.md +126 -0
  78. package/templates/workspace/.claude/skills/ws-handoff/SKILL.md +52 -0
  79. package/templates/workspace/.claude/skills/ws-migrate/SKILL.md +54 -0
  80. package/templates/workspace/.claude/skills/ws-plan/SKILL.md +138 -0
  81. package/templates/workspace/.claude/skills/ws-plan-verify/SKILL.md +61 -0
  82. package/templates/workspace/.claude/skills/ws-preflight/SKILL.md +55 -0
  83. package/templates/workspace/.claude/skills/ws-pull/SKILL.md +119 -0
  84. package/templates/workspace/.claude/skills/ws-push/SKILL.md +110 -0
  85. package/templates/workspace/.claude/skills/ws-quality-review/SKILL.md +56 -0
  86. package/templates/workspace/.claude/skills/ws-req-change/SKILL.md +41 -0
  87. package/templates/workspace/.claude/skills/ws-req-contract-sync/SKILL.md +17 -0
  88. package/templates/workspace/.claude/skills/ws-req-contract-validate/SKILL.md +12 -0
  89. package/templates/workspace/.claude/skills/ws-req-flow-sync/SKILL.md +28 -0
  90. package/templates/workspace/.claude/skills/ws-req-review/SKILL.md +32 -0
  91. package/templates/workspace/.claude/skills/ws-review/SKILL.md +50 -0
  92. package/templates/workspace/.claude/skills/ws-rule/SKILL.md +23 -0
  93. package/templates/workspace/.claude/skills/ws-spec-review/SKILL.md +57 -0
  94. package/templates/workspace/.claude/skills/ws-submodule-setup/SKILL.md +65 -0
  95. package/templates/workspace/.claude/skills/ws-verify-before-complete/SKILL.md +59 -0
  96. package/templates/workspace/.githooks/commit-msg +10 -0
  97. package/templates/workspace/.opencode/command/using-aiws.md +30 -0
  98. package/templates/workspace/.opencode/command/ws-delegate.md +33 -0
  99. package/templates/workspace/.opencode/command/ws-dev-lite.md +34 -0
  100. package/templates/workspace/.opencode/command/ws-finish.md +1 -1
  101. package/templates/workspace/.opencode/command/ws-handoff.md +4 -3
  102. package/templates/workspace/.opencode/command/ws-plan.md +3 -0
  103. package/templates/workspace/.opencode/command/ws-preflight.md +4 -0
  104. package/templates/workspace/.opencode/command/ws-quality-review.md +30 -0
  105. package/templates/workspace/.opencode/command/ws-review.md +5 -2
  106. package/templates/workspace/.opencode/command/ws-spec-review.md +30 -0
  107. package/templates/workspace/.opencode/command/ws-verify-before-complete.md +27 -0
  108. package/templates/workspace/.opencode/commands/p-aiws-change-archive.md +27 -0
  109. package/templates/workspace/.opencode/commands/p-aiws-change-finish.md +27 -0
  110. package/templates/workspace/.opencode/commands/p-aiws-change-list.md +26 -0
  111. package/templates/workspace/.opencode/commands/p-aiws-change-new.md +27 -0
  112. package/templates/workspace/.opencode/commands/p-aiws-change-next.md +27 -0
  113. package/templates/workspace/.opencode/commands/p-aiws-change-start.md +27 -0
  114. package/templates/workspace/.opencode/commands/p-aiws-change-status.md +27 -0
  115. package/templates/workspace/.opencode/commands/p-aiws-change-sync.md +27 -0
  116. package/templates/workspace/.opencode/commands/p-aiws-change-templates-init.md +26 -0
  117. package/templates/workspace/.opencode/commands/p-aiws-change-templates-which.md +26 -0
  118. package/templates/workspace/.opencode/commands/p-aiws-change-validate.md +27 -0
  119. package/templates/workspace/.opencode/commands/p-aiws-hooks-install.md +26 -0
  120. package/templates/workspace/.opencode/commands/p-aiws-hooks-status.md +26 -0
  121. package/templates/workspace/.opencode/commands/p-aiws-init.md +23 -0
  122. package/templates/workspace/.opencode/commands/p-aiws-rollback.md +16 -0
  123. package/templates/workspace/.opencode/commands/p-aiws-update.md +22 -0
  124. package/templates/workspace/.opencode/commands/p-aiws-validate.md +17 -0
  125. package/templates/workspace/.opencode/commands/using-aiws.md +30 -0
  126. package/templates/workspace/.opencode/commands/ws-analyze.md +30 -0
  127. package/templates/workspace/.opencode/commands/ws-bugfix.md +35 -0
  128. package/templates/workspace/.opencode/commands/ws-commit.md +70 -0
  129. package/templates/workspace/.opencode/commands/ws-delegate.md +33 -0
  130. package/templates/workspace/{.iflow/commands/ws-deliver.toml → .opencode/commands/ws-deliver.md} +13 -13
  131. package/templates/workspace/.opencode/commands/ws-dev-lite.md +34 -0
  132. package/templates/workspace/.opencode/commands/ws-dev.md +36 -0
  133. package/templates/workspace/{.iflow/commands/ws-finish.toml → .opencode/commands/ws-finish.md} +46 -29
  134. package/templates/workspace/.opencode/commands/ws-handoff.md +26 -0
  135. package/templates/workspace/.opencode/commands/ws-migrate.md +25 -0
  136. package/templates/workspace/.opencode/commands/ws-plan-verify.md +28 -0
  137. package/templates/workspace/.opencode/commands/ws-plan.md +27 -0
  138. package/templates/workspace/.opencode/commands/ws-preflight.md +34 -0
  139. package/templates/workspace/.opencode/commands/ws-pull.md +87 -0
  140. package/templates/workspace/.opencode/commands/ws-push.md +93 -0
  141. package/templates/workspace/.opencode/commands/ws-quality-review.md +30 -0
  142. package/templates/workspace/.opencode/commands/ws-req-change.md +45 -0
  143. package/templates/workspace/.opencode/commands/ws-req-contract-sync.md +21 -0
  144. package/templates/workspace/.opencode/commands/ws-req-contract-validate.md +16 -0
  145. package/templates/workspace/.opencode/commands/ws-req-flow-sync.md +23 -0
  146. package/templates/workspace/.opencode/commands/ws-req-review.md +36 -0
  147. package/templates/workspace/.opencode/commands/ws-review.md +33 -0
  148. package/templates/workspace/.opencode/commands/ws-rule.md +27 -0
  149. package/templates/workspace/.opencode/commands/ws-spec-review.md +30 -0
  150. package/templates/workspace/.opencode/commands/ws-submodule-setup.md +57 -0
  151. package/templates/workspace/.opencode/commands/ws-verify-before-complete.md +27 -0
  152. package/templates/workspace/.opencode/oh-my-opencode.json.example +17 -0
  153. package/templates/workspace/.opencode/skills/p-aiws-change-archive/SKILL.md +24 -0
  154. package/templates/workspace/.opencode/skills/p-aiws-change-finish/SKILL.md +24 -0
  155. package/templates/workspace/.opencode/skills/p-aiws-change-list/SKILL.md +18 -0
  156. package/templates/workspace/.opencode/skills/p-aiws-change-new/SKILL.md +26 -0
  157. package/templates/workspace/.opencode/skills/p-aiws-change-next/SKILL.md +19 -0
  158. package/templates/workspace/.opencode/skills/p-aiws-change-start/SKILL.md +33 -0
  159. package/templates/workspace/.opencode/skills/p-aiws-change-status/SKILL.md +19 -0
  160. package/templates/workspace/.opencode/skills/p-aiws-change-sync/SKILL.md +19 -0
  161. package/templates/workspace/.opencode/skills/p-aiws-change-templates-init/SKILL.md +18 -0
  162. package/templates/workspace/.opencode/skills/p-aiws-change-templates-which/SKILL.md +18 -0
  163. package/templates/workspace/.opencode/skills/p-aiws-change-validate/SKILL.md +23 -0
  164. package/templates/workspace/.opencode/skills/p-aiws-hooks-install/SKILL.md +30 -0
  165. package/templates/workspace/.opencode/skills/p-aiws-hooks-status/SKILL.md +18 -0
  166. package/templates/workspace/.opencode/skills/p-aiws-init/SKILL.md +27 -0
  167. package/templates/workspace/.opencode/skills/p-aiws-rollback/SKILL.md +18 -0
  168. package/templates/workspace/.opencode/skills/p-aiws-update/SKILL.md +26 -0
  169. package/templates/workspace/.opencode/skills/p-aiws-validate/SKILL.md +22 -0
  170. package/templates/workspace/.opencode/skills/p-tasks-plan/SKILL.md +37 -0
  171. package/templates/workspace/.opencode/skills/using-aiws/SKILL.md +91 -0
  172. package/templates/workspace/.opencode/skills/ws-analyze/SKILL.md +26 -0
  173. package/templates/workspace/.opencode/skills/ws-bugfix/SKILL.md +111 -0
  174. package/templates/workspace/.opencode/skills/ws-commit/SKILL.md +130 -0
  175. package/templates/workspace/.opencode/skills/ws-delegate/SKILL.md +63 -0
  176. package/templates/workspace/.opencode/skills/ws-deliver/SKILL.md +230 -0
  177. package/templates/workspace/.opencode/skills/ws-dev/SKILL.md +168 -0
  178. package/templates/workspace/.opencode/skills/ws-dev-lite/SKILL.md +58 -0
  179. package/templates/workspace/.opencode/skills/ws-finish/SKILL.md +209 -0
  180. package/templates/workspace/.opencode/skills/ws-frontend-design/SKILL.md +126 -0
  181. package/templates/workspace/.opencode/skills/ws-handoff/SKILL.md +52 -0
  182. package/templates/workspace/.opencode/skills/ws-migrate/SKILL.md +54 -0
  183. package/templates/workspace/.opencode/skills/ws-plan/SKILL.md +148 -0
  184. package/templates/workspace/.opencode/skills/ws-plan-verify/SKILL.md +61 -0
  185. package/templates/workspace/.opencode/skills/ws-preflight/SKILL.md +60 -0
  186. package/templates/workspace/.opencode/skills/ws-pull/SKILL.md +119 -0
  187. package/templates/workspace/.opencode/skills/ws-push/SKILL.md +110 -0
  188. package/templates/workspace/.opencode/skills/ws-quality-review/SKILL.md +63 -0
  189. package/templates/workspace/.opencode/skills/ws-req-change/SKILL.md +41 -0
  190. package/templates/workspace/.opencode/skills/ws-req-contract-sync/SKILL.md +17 -0
  191. package/templates/workspace/.opencode/skills/ws-req-contract-validate/SKILL.md +12 -0
  192. package/templates/workspace/.opencode/skills/ws-req-flow-sync/SKILL.md +28 -0
  193. package/templates/workspace/.opencode/skills/ws-req-review/SKILL.md +32 -0
  194. package/templates/workspace/.opencode/skills/ws-review/SKILL.md +57 -0
  195. package/templates/workspace/.opencode/skills/ws-rule/SKILL.md +23 -0
  196. package/templates/workspace/.opencode/skills/ws-spec-review/SKILL.md +64 -0
  197. package/templates/workspace/.opencode/skills/ws-submodule-setup/SKILL.md +65 -0
  198. package/templates/workspace/.opencode/skills/ws-verify-before-complete/SKILL.md +59 -0
  199. package/templates/workspace/AGENTS.md +74 -30
  200. package/templates/workspace/AI_PROJECT.md +1 -1
  201. package/templates/workspace/AI_WORKSPACE.md +1 -1
  202. package/templates/workspace/changes/README.md +25 -4
  203. package/templates/workspace/changes/templates/proposal.md +15 -0
  204. package/templates/workspace/changes/templates/tasks.md +9 -2
  205. package/templates/workspace/manifest.json +340 -82
  206. package/templates/workspace/memory-bank/README.md +1 -2
  207. package/templates/workspace/tools/ws_change_check.py +26 -4
  208. package/templates/workspace/.iflow/agents/feature-reviewer.md +0 -27
  209. package/templates/workspace/.iflow/agents/requirements-analyst.md +0 -24
  210. package/templates/workspace/.iflow/agents/server-commit-manager.md +0 -28
  211. package/templates/workspace/.iflow/agents/server-fix-implementer.md +0 -31
  212. package/templates/workspace/.iflow/agents/server-test-planner.md +0 -28
  213. package/templates/workspace/.iflow/agents/server-test-triager.md +0 -30
  214. package/templates/workspace/.iflow/commands/aiws-init.toml +0 -24
  215. package/templates/workspace/.iflow/commands/aiws-rollback.toml +0 -18
  216. package/templates/workspace/.iflow/commands/aiws-update.toml +0 -23
  217. package/templates/workspace/.iflow/commands/aiws-validate.toml +0 -18
  218. package/templates/workspace/.iflow/commands/server-commit.toml +0 -27
  219. package/templates/workspace/.iflow/commands/server-drain.toml +0 -99
  220. package/templates/workspace/.iflow/commands/server-fix-and-commit.toml +0 -27
  221. package/templates/workspace/.iflow/commands/server-fix.toml +0 -65
  222. package/templates/workspace/.iflow/commands/server-test-plan.toml +0 -62
  223. package/templates/workspace/.iflow/commands/server-test.toml +0 -58
  224. package/templates/workspace/.iflow/commands/server-triage.toml +0 -38
  225. package/templates/workspace/.iflow/commands/server_test-plan.toml +0 -12
  226. package/templates/workspace/.iflow/commands/server_test.toml +0 -12
  227. package/templates/workspace/.iflow/commands/ws-analyze.toml +0 -33
  228. package/templates/workspace/.iflow/commands/ws-commit.toml +0 -46
  229. package/templates/workspace/.iflow/commands/ws-contract-check.toml +0 -69
  230. package/templates/workspace/.iflow/commands/ws-dev.toml +0 -34
  231. package/templates/workspace/.iflow/commands/ws-doctor.toml +0 -141
  232. package/templates/workspace/.iflow/commands/ws-env-doctor.toml +0 -74
  233. package/templates/workspace/.iflow/commands/ws-feature-deliver.toml +0 -44
  234. package/templates/workspace/.iflow/commands/ws-feature-plan.toml +0 -47
  235. package/templates/workspace/.iflow/commands/ws-init.toml +0 -53
  236. package/templates/workspace/.iflow/commands/ws-memory-bank-init.toml +0 -100
  237. package/templates/workspace/.iflow/commands/ws-migrate.toml +0 -59
  238. package/templates/workspace/.iflow/commands/ws-preflight.toml +0 -30
  239. package/templates/workspace/.iflow/commands/ws-pull.toml +0 -47
  240. package/templates/workspace/.iflow/commands/ws-push.toml +0 -40
  241. package/templates/workspace/.iflow/commands/ws-req-change.toml +0 -64
  242. package/templates/workspace/.iflow/commands/ws-req-contract-sync.toml +0 -25
  243. package/templates/workspace/.iflow/commands/ws-req-contract-validate.toml +0 -16
  244. package/templates/workspace/.iflow/commands/ws-req-flow-sync.toml +0 -36
  245. package/templates/workspace/.iflow/commands/ws-req-review.toml +0 -56
  246. package/templates/workspace/.iflow/commands/ws-review.toml +0 -33
  247. package/templates/workspace/.iflow/commands/ws-rule.toml +0 -43
  248. package/templates/workspace/.iflow/commands/ws-submodule-setup.toml +0 -32
  249. package/templates/workspace/tools/iflow_watchdog.sh +0 -138
  250. package/templates/workspace/tools/install_iflow_watchdog_systemd_user.sh +0 -118
  251. package/templates/workspace/tools/systemd/iflow-watchdog@.service +0 -16
  252. package/templates/workspace/tools/systemd/iflow-watchdog@.timer +0 -11
@@ -1,138 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- # iFlow unattended watchdog for AI Workspace (Arch Linux/systemd friendly).
5
- #
6
- # Goal:
7
- # - Run /server-drain in a loop (low output, small batches).
8
- # - If drain reports BLOCKED (exit 3) or crashes, run /server-fix in a fresh iFlow process (bounded).
9
- # - Keep outputs in .agentdocs/tmp/server-test/ to avoid blowing up interactive sessions.
10
- #
11
- # Safety:
12
- # - Intended for test environments only.
13
- # - Requires explicit IFLOW_WATCHDOG_YOLO=1 to run with --yolo.
14
-
15
- die() { echo "error: $*" >&2; exit 2; }
16
- need_file() { [[ -f "$1" ]] || die "missing: $1"; }
17
- have() { command -v "$1" >/dev/null 2>&1; }
18
-
19
- root="${IFLOW_WATCHDOG_ROOT:-.}"
20
- cd "$root"
21
-
22
- need_file "AI_WORKSPACE.md"
23
- need_file "REQUIREMENTS.md"
24
- need_file "tools/server_test_runner.py"
25
- need_file "secrets/test-accounts.json"
26
-
27
- have iflow || die "missing: iflow"
28
- have uv || die "missing: uv (runner requires uv)"
29
-
30
- csv="issues/server-api-issues.csv"
31
- workspace_dir="$(pwd)"
32
- log_dir="${IFLOW_WATCHDOG_LOG_DIR:-$workspace_dir/.agentdocs/tmp/server-test}"
33
- mkdir -p "$log_dir"
34
-
35
- fatal_log="$log_dir/watchdog-fatal.log"
36
- timestamp() { date +"%Y-%m-%dT%H:%M:%S%z"; }
37
- say() { printf "[%s] %s\n" "$(timestamp)" "$*"; }
38
- fatal() { say "fatal: $*" | tee -a "$fatal_log" >&2; exit 2; }
39
-
40
- yolo="${IFLOW_WATCHDOG_YOLO:-0}"
41
- if [[ "$yolo" != "1" ]]; then
42
- fatal "unattended mode requires IFLOW_WATCHDOG_YOLO=1 (this will use iflow --yolo; test env only)"
43
- fi
44
-
45
- if ! iflow --version >/dev/null 2>&1; then
46
- fatal "iflow command failed (check auth/config/environment)"
47
- fi
48
-
49
- date_suffix="$(date +%Y%m%d)"
50
- drain_log="${IFLOW_WATCHDOG_DRAIN_LOG:-$log_dir/iflow-drain-$date_suffix.log}"
51
- fix_log="${IFLOW_WATCHDOG_FIX_LOG:-$log_dir/iflow-fix-$date_suffix.log}"
52
- find "$log_dir" -maxdepth 1 -type f -name "iflow-*.log" -mtime +7 -delete 2>/dev/null || true
53
-
54
- lock_dir="$log_dir/.watchdog.lock"
55
- pid_file="$lock_dir/pid"
56
- if ! mkdir "$lock_dir" 2>/dev/null; then
57
- other_pid="$(cat "$pid_file" 2>/dev/null || true)"
58
- fatal "another watchdog is running (lock: $lock_dir pid=${other_pid:-unknown})"
59
- fi
60
- printf "%s\n" "$$" >"$pid_file" 2>/dev/null || true
61
-
62
- cleanup() {
63
- say "cleanup: stopping child iflow processes (if any)" >>"$fatal_log" 2>/dev/null || true
64
- pkill -P $$ iflow 2>/dev/null || true
65
- rm -f "$pid_file" 2>/dev/null || true
66
- rmdir "$lock_dir" 2>/dev/null || true
67
- }
68
- trap cleanup EXIT INT TERM
69
-
70
- drain_timeout="${IFLOW_WATCHDOG_DRAIN_TIMEOUT:-7200}"
71
- fix_timeout="${IFLOW_WATCHDOG_FIX_TIMEOUT:-3600}"
72
- drain_max_turns="${IFLOW_WATCHDOG_DRAIN_MAX_TURNS:-6}"
73
- fix_max_turns="${IFLOW_WATCHDOG_FIX_MAX_TURNS:-12}"
74
- drain_max_tokens="${IFLOW_WATCHDOG_DRAIN_MAX_TOKENS:-15000}"
75
- fix_max_tokens="${IFLOW_WATCHDOG_FIX_MAX_TOKENS:-30000}"
76
-
77
- max_cycles="${IFLOW_WATCHDOG_MAX_CYCLES:-200}"
78
- sleep_s="${IFLOW_WATCHDOG_SLEEP_S:-10}"
79
- fix_retry_max="${IFLOW_WATCHDOG_FIX_RETRY_MAX:-3}"
80
- fix_retry_file="$log_dir/.fix-retry-count"
81
-
82
- drain_max_endpoints="${IFLOW_DRAIN_MAX_ENDPOINTS:-30}"
83
- drain_sleep_s="${IFLOW_DRAIN_SLEEP_S:-0}"
84
-
85
- csv_has_blocked() { [[ -f "$csv" ]] && grep -qE ",BLOCKED," "$csv"; }
86
-
87
- run_drain() {
88
- say "run: /server-drain (max_endpoints=$drain_max_endpoints)"
89
- IFLOW_DRAIN_MAX_ENDPOINTS="$drain_max_endpoints" \
90
- IFLOW_DRAIN_SLEEP_S="$drain_sleep_s" \
91
- iflow --yolo -p "/server-drain" --timeout "$drain_timeout" --max-turns "$drain_max_turns" --max-tokens "$drain_max_tokens" >>"$drain_log" 2>&1
92
- }
93
-
94
- run_fix() {
95
- say "run: /server-fix"
96
- retry_count="$(cat "$fix_retry_file" 2>/dev/null || echo 0)"
97
- if [[ "$retry_count" -ge "$fix_retry_max" ]]; then
98
- fatal "fix reached retry limit ($fix_retry_max); check $fix_log"
99
- fi
100
- if iflow --yolo -p "/server-fix" --timeout "$fix_timeout" --max-turns "$fix_max_turns" --max-tokens "$fix_max_tokens" >>"$fix_log" 2>&1; then
101
- rm -f "$fix_retry_file" 2>/dev/null || true
102
- else
103
- echo $((retry_count + 1)) >"$fix_retry_file" 2>/dev/null || true
104
- fi
105
- }
106
-
107
- say "watchdog: start (cycles=$max_cycles sleep_s=$sleep_s)"
108
- say "logs: drain=$drain_log fix=$fix_log"
109
-
110
- cycle=1
111
- while [[ "$cycle" -le "$max_cycles" ]]; do
112
- if csv_has_blocked; then
113
- say "state: BLOCKED detected in $csv (trigger fix)"
114
- run_fix
115
- fi
116
-
117
- set +e
118
- run_drain
119
- rc=$?
120
- set -e
121
-
122
- if [[ "$rc" == "0" ]]; then
123
- say "done: drain finished with all DONE/SKIP"
124
- exit 0
125
- fi
126
-
127
- if [[ "$rc" == "3" ]] || csv_has_blocked; then
128
- say "blocked: drain reported BLOCKED (rc=$rc), trigger fix"
129
- run_fix
130
- else
131
- say "warn: drain exited rc=$rc without BLOCKED; will retry"
132
- fi
133
-
134
- sleep "$sleep_s" || true
135
- cycle=$((cycle + 1))
136
- done
137
-
138
- fatal "reached max cycles ($max_cycles); check logs under $log_dir"
@@ -1,118 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- die() { echo "error: $*" >&2; exit 2; }
5
- have() { command -v "$1" >/dev/null 2>&1; }
6
-
7
- usage() {
8
- cat <<'EOF'
9
- Usage:
10
- bash tools/install_iflow_watchdog_systemd_user.sh
11
- bash tools/install_iflow_watchdog_systemd_user.sh --name <instance>
12
- bash tools/install_iflow_watchdog_systemd_user.sh --workspace <abs_path>
13
- bash tools/install_iflow_watchdog_systemd_user.sh --name <instance> --workspace <abs_path>
14
-
15
- What it does:
16
- - Installs systemd user instance units:
17
- ~/.config/systemd/user/iflow-watchdog@.service
18
- ~/.config/systemd/user/iflow-watchdog@.timer
19
- - Writes per-instance env file:
20
- ~/.config/iflow-watchdog/<instance>.env
21
- - Enables and starts the timer:
22
- systemctl --user enable --now iflow-watchdog@<instance>.timer
23
-
24
- Notes:
25
- - You can run multiple instances on one server (different --name and --workspace).
26
- - Unattended mode uses --yolo; only use in test environment.
27
- Defaults:
28
- - --workspace defaults to current directory (pwd)
29
- - --name defaults to basename(--workspace)
30
- EOF
31
- }
32
-
33
- name=""
34
- workspace=""
35
- while [[ $# -gt 0 ]]; do
36
- case "$1" in
37
- --name) name="${2:-}"; shift 2 ;;
38
- --workspace) workspace="${2:-}"; shift 2 ;;
39
- -h|--help) usage; exit 0 ;;
40
- *) die "unknown arg: $1" ;;
41
- esac
42
- done
43
-
44
- if [[ -z "$workspace" ]]; then
45
- workspace="$(pwd)"
46
- fi
47
-
48
- if [[ -z "$name" ]]; then
49
- name="$(basename "$workspace")"
50
- fi
51
-
52
- [[ "$workspace" == /* ]] || die "--workspace must be an absolute path"
53
- [[ -d "$workspace" ]] || die "workspace not found: $workspace"
54
-
55
- have systemctl || die "missing: systemctl"
56
-
57
- if [[ ! -f "$workspace/AI_WORKSPACE.md" ]] || [[ ! -f "$workspace/REQUIREMENTS.md" ]]; then
58
- die "workspace must contain AI_WORKSPACE.md and REQUIREMENTS.md: $workspace"
59
- fi
60
-
61
- # Best-effort check that systemd --user is available (common pitfall on servers).
62
- if [[ -z "${XDG_RUNTIME_DIR:-}" ]] || ! systemctl --user is-system-running >/dev/null 2>&1; then
63
- die "systemd --user not running (try: loginctl enable-linger $USER, then re-login)"
64
- fi
65
-
66
- unit_dir="$HOME/.config/systemd/user"
67
- env_dir="$HOME/.config/iflow-watchdog"
68
- mkdir -p "$unit_dir" "$env_dir"
69
-
70
- src_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
71
- tpl_service="$src_dir/systemd/iflow-watchdog@.service"
72
- tpl_timer="$src_dir/systemd/iflow-watchdog@.timer"
73
- [[ -f "$tpl_service" ]] || die "missing template: $tpl_service"
74
- [[ -f "$tpl_timer" ]] || die "missing template: $tpl_timer"
75
-
76
- cp -a "$tpl_service" "$unit_dir/iflow-watchdog@.service"
77
- cp -a "$tpl_timer" "$unit_dir/iflow-watchdog@.timer"
78
-
79
- env_file="$env_dir/${name}.env"
80
-
81
- # Only allow unattended --yolo if AI_WORKSPACE.md declares test environment.
82
- yo="0"
83
- if grep -Eq '^\s*-\s*environment\s*:\s*"?test"?\s*$' "$workspace/AI_WORKSPACE.md"; then
84
- yo="1"
85
- fi
86
-
87
- cat >"$env_file" <<EOF
88
- # Generated by tools/install_iflow_watchdog_systemd_user.sh
89
- WORKSPACE_DIR=${workspace}
90
- IFLOW_WATCHDOG_ROOT=.
91
- # Unattended mode (uses iflow --yolo). Only safe when environment=test.
92
- IFLOW_WATCHDOG_YOLO=${yo}
93
- # Optional: override logs dir (default: <workspace>/.agentdocs/tmp/server-test)
94
- # IFLOW_WATCHDOG_LOG_DIR=${workspace}/.agentdocs/tmp/server-test
95
- IFLOW_DRAIN_MAX_ENDPOINTS=30
96
- IFLOW_WATCHDOG_SLEEP_S=10
97
- EOF
98
-
99
- systemctl --user daemon-reload
100
-
101
- if [[ "$yo" == "1" ]]; then
102
- systemctl --user enable --now "iflow-watchdog@${name}.timer"
103
- enabled_msg="enabled"
104
- else
105
- enabled_msg="not enabled (edit IFLOW_WATCHDOG_YOLO=1 after confirming test env)"
106
- fi
107
-
108
- echo "OK: installed iflow-watchdog@${name}"
109
- echo "env: $env_file"
110
- echo "unit: $unit_dir/iflow-watchdog@.service"
111
- echo "timer: iflow-watchdog@${name}.timer ($enabled_msg)"
112
- echo "tune: edit $env_file, then run:"
113
- echo " systemctl --user daemon-reload"
114
- echo " systemctl --user restart iflow-watchdog@${name}.service"
115
- if [[ "$yo" != "1" ]]; then
116
- echo "enable:"
117
- echo " systemctl --user enable --now iflow-watchdog@${name}.timer"
118
- fi
@@ -1,16 +0,0 @@
1
- [Unit]
2
- Description=iFlow AI Workspace API Test Watchdog (%i)
3
- After=network.target
4
-
5
- [Service]
6
- Type=simple
7
- # Per-instance environment file created by tools/install_iflow_watchdog_systemd_user.sh
8
- EnvironmentFile=%h/.config/iflow-watchdog/%i.env
9
- ExecStart=/usr/bin/env bash -lc 'cd "${WORKSPACE_DIR}" && bash tools/iflow_watchdog.sh'
10
- Restart=always
11
- RestartSec=30
12
- KillMode=mixed
13
- TimeoutStopSec=30
14
-
15
- [Install]
16
- WantedBy=default.target
@@ -1,11 +0,0 @@
1
- [Unit]
2
- Description=Nightly iFlow API Test Watchdog (%i)
3
-
4
- [Timer]
5
- OnCalendar=*-*-* 02:00:00
6
- Persistent=true
7
- Unit=iflow-watchdog@%i.service
8
-
9
- [Install]
10
- WantedBy=timers.target
11
-