lazycodex-ai 4.16.0 → 4.16.1

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 (112) hide show
  1. package/dist/cli/codex-ulw-loop.d.ts +8 -0
  2. package/dist/cli/get-local-version/types.d.ts +1 -1
  3. package/dist/cli/index.js +260 -207
  4. package/dist/cli-node/index.js +260 -207
  5. package/docs/reference/web-terminal-visual-qa.md +39 -45
  6. package/package.json +3 -2
  7. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  8. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  9. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  10. package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
  11. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  12. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  13. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  14. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  15. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  16. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  17. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  18. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  19. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  20. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  21. package/packages/omo-codex/plugin/components/start-work-continuation/directive.md +2 -2
  22. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
  23. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
  24. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  25. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  26. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  27. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  28. package/packages/omo-codex/plugin/components/ultrawork/directive.md +18 -10
  29. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  30. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  31. package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +18 -10
  32. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +11 -0
  33. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +22 -1
  34. package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +4 -0
  35. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +18 -10
  36. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-commands.js +15 -2
  37. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-steering.js +2 -1
  38. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +89 -27
  39. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.d.ts +6 -0
  40. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +55 -9
  41. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-snapshot.d.ts +15 -0
  42. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-snapshot.js +33 -0
  43. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-types.d.ts +10 -3
  44. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.js +15 -11
  45. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +2 -2
  46. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  47. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +1 -1
  48. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +7 -7
  49. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-commands.ts +17 -2
  50. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-steering.ts +2 -1
  51. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +59 -11
  52. package/packages/omo-codex/plugin/components/ulw-loop/src/steering-snapshot.ts +38 -0
  53. package/packages/omo-codex/plugin/components/ulw-loop/src/steering-types.ts +11 -3
  54. package/packages/omo-codex/plugin/components/ulw-loop/src/steering.ts +15 -7
  55. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-create-goals.test.ts +16 -0
  56. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io.test.ts +260 -2
  57. package/packages/omo-codex/plugin/components/ulw-loop/test/steering-snapshot.test.ts +124 -0
  58. package/packages/omo-codex/plugin/components/ulw-loop/test/steering.test.ts +101 -2
  59. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  60. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  61. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  62. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  63. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  64. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  65. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  66. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  67. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  68. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  69. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  70. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  71. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  72. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  73. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  74. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
  75. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
  76. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  77. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  78. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  79. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  80. package/packages/omo-codex/plugin/package-lock.json +13 -13
  81. package/packages/omo-codex/plugin/package.json +1 -1
  82. package/packages/omo-codex/plugin/scripts/hook-status-message.mjs +10 -6
  83. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +9 -9
  84. package/packages/omo-codex/plugin/skills/frontend/references/design/README.md +7 -3
  85. package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +1 -1
  86. package/packages/omo-codex/plugin/skills/frontend/references/design/design-system-architecture.md +24 -2
  87. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/README.md +2 -2
  88. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-b-execution.md +1 -1
  89. package/packages/omo-codex/plugin/skills/start-work/SKILL.md +2 -2
  90. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +18 -10
  91. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +1 -1
  92. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +7 -7
  93. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +11 -0
  94. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +13 -17
  95. package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +4 -4
  96. package/packages/omo-codex/plugin/test/bootstrap-hooks.test.mjs +1 -1
  97. package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +22 -9
  98. package/packages/omo-codex/plugin/test/sync-hook-status-messages.test.mjs +6 -6
  99. package/packages/omo-codex/plugin/test/ulw-plan-skill-contract.test.mjs +52 -0
  100. package/packages/omo-codex/scripts/install-dist/install-local.mjs +65 -39
  101. package/packages/shared-skills/skills/frontend/SKILL.md +9 -9
  102. package/packages/shared-skills/skills/frontend/references/design/README.md +7 -3
  103. package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +1 -1
  104. package/packages/shared-skills/skills/frontend/references/design/design-system-architecture.md +24 -2
  105. package/packages/shared-skills/skills/frontend/references/designpowers/README.md +2 -2
  106. package/packages/shared-skills/skills/frontend/references/designpowers/lane-b-execution.md +1 -1
  107. package/packages/shared-skills/skills/start-work/SKILL.md +2 -2
  108. package/packages/shared-skills/skills/visual-qa/SKILL.md +13 -17
  109. package/script/qa/strip-ansi.mjs +10 -0
  110. package/script/qa/web-terminal-visual-qa.mjs +112 -195
  111. package/script/qa/xterm-live-terminal.mjs +180 -0
  112. package/script/qa/web-terminal-renderer.mjs +0 -218
@@ -1,81 +1,75 @@
1
1
  # Web Terminal Visual QA
2
2
 
3
- Use `script/qa/web-terminal-visual-qa.mjs` whenever QA needs TUI visual evidence. It turns a terminal or tmux transcript into browser-rendered evidence so PRs can carry the same artifacts as web UI visual QA.
3
+ Use `script/qa/web-terminal-visual-qa.mjs` whenever QA needs TUI visual evidence. It runs the command in a real pty (node-pty), renders it through a **real xterm.js terminal in headless Chrome**, drives scripted interaction through that browser terminal, and screenshots it. The color path is xterm.js, so truecolor, 256-color, box-drawing, and CJK width are faithful. **NEVER use `tmux capture-pane` for color/visual/layout/CJK TUI evidence** - it degrades truecolor and misaligns wide glyphs. tmux stays useful only for boot smoke ("did it render, did it accept a key"), never for the pixel evidence a reviewer trusts.
4
4
 
5
5
  ## Evidence Contract
6
6
 
7
7
  Each run writes these files under the chosen evidence directory:
8
8
 
9
- - `terminal.txt`: redacted plain terminal text for review and assertions.
10
- - `terminal-ansi.txt`: redacted ANSI capture when available.
11
- - `terminal.html`: browser-renderable terminal frame that preserves ANSI colors and SGR styles.
12
- - `terminal.png`: Chrome/Chromium screenshot with the same ANSI styling, unless `--no-browser` is used.
13
- - `metadata.json`: connector, source, output paths, and cleanup receipt.
9
+ - `terminal.png`: the xterm.js screenshot (true color). The primary artifact - cite and attach this.
10
+ - `terminal.txt`: redacted rendered screen text (from the xterm.js buffer) for review and assertions.
11
+ - `terminal-ansi.txt`: the redacted raw pty byte stream, for debugging.
12
+ - `metadata.json`: connector, color path, source, interaction, output paths, and cleanup receipt.
14
13
 
15
- The PR should cite `metadata.json` and attach or link `terminal.png` for OpenCode/Codex TUI proof. For PR-body image hosting, use GitHub user attachments as documented in [docs/reference/github-attachment-upload.md](github-attachment-upload.md); do not commit temporary PNGs, use releases, or use external image hosts.
14
+ The PR should cite `metadata.json` and attach `terminal.png` for OpenCode/Codex TUI proof. For PR-body image hosting, use GitHub user attachments as documented in [docs/reference/github-attachment-upload.md](github-attachment-upload.md); do not commit temporary PNGs, use releases, or use external image hosts.
16
15
 
17
- ## Redaction Contract
18
-
19
- The helper redacts terminal content before writing `terminal.txt`, `terminal-ansi.txt`, `terminal.html`, or `terminal.png`. Built-in rules cover common authorization headers, token/password/key assignments, GitHub tokens, and OpenAI-style `sk-...` tokens.
20
-
21
- Add exact local values with `--redact <literal>` and project-specific patterns with `--redact-regex <expr>`:
16
+ ## Live Capture (default)
22
17
 
23
18
  ```bash
24
19
  node script/qa/web-terminal-visual-qa.mjs \
25
20
  --title "Codex TUI QA" \
26
- --from-file .omo/evidence/run/capture.txt \
27
- --evidence-dir .omo/evidence/run/codex-web-terminal \
28
- --redact "$LOCAL_TOKEN" \
29
- --redact-regex 'session_[A-Za-z0-9]+'
21
+ --command "codex --help" \
22
+ --source-label "codex help smoke" \
23
+ --cwd "$PWD" \
24
+ --evidence-dir .omo/evidence/run/codex-web-terminal
30
25
  ```
31
26
 
32
- Custom `--redact-regex` rules replace the full regex match, even when the expression contains capture groups. Prefix-preserving redaction is reserved for the built-in authorization and key-assignment rules.
27
+ Drive an interactive TUI by scripting keystrokes with repeatable `--input`, applied in order through the browser terminal. Literal text is typed; `{Enter}`, `{Tab}`, `{Escape}`, `{ArrowDown}`, `{Ctrl+C}` and similar tokens are pressed as keys:
28
+
29
+ ```bash
30
+ node script/qa/web-terminal-visual-qa.mjs --title "menu nav" --command "my-tui" \
31
+ --input "{ArrowDown}" --input "{ArrowDown}" --input "{Enter}" \
32
+ --dwell-ms 2000 --evidence-dir .omo/evidence/run/menu
33
+ ```
33
34
 
34
- Do not rely on screenshots to hide secrets. If a capture might include cookies, auth headers, raw env dumps, launchd environments, provider keys, or browser storage, redact first or summarize the run instead of storing the transcript.
35
+ ## Redaction Contract
35
36
 
36
- ## Replay An Existing Capture
37
+ The helper redacts terminal content before writing `terminal.txt`, `terminal-ansi.txt`, and - when a rule matches - re-renders the masked stream so `terminal.png` never shows the secret. Built-in rules cover common authorization headers, token/password/key assignments, GitHub tokens, and OpenAI-style `sk-...` tokens.
37
38
 
38
- Use this path for maximum OS compatibility, including Windows hosts without tmux:
39
+ Add exact local values with `--redact <literal>` and project-specific patterns with `--redact-regex <expr>`:
39
40
 
40
41
  ```bash
41
42
  node script/qa/web-terminal-visual-qa.mjs \
42
- --title "Codex TUI QA" \
43
- --from-file .omo/evidence/run/capture.txt \
44
- --evidence-dir .omo/evidence/run/codex-web-terminal
43
+ --title "Codex TUI QA" --command "codex --help" \
44
+ --evidence-dir .omo/evidence/run/codex-web-terminal \
45
+ --redact "$LOCAL_TOKEN" \
46
+ --redact-regex 'session_[A-Za-z0-9]+'
45
47
  ```
46
48
 
47
- Long terminal lines wrap by default for readable PR evidence. Pass `--no-wrap` only when horizontal scrolling is part of the behavior under test.
49
+ The raw --command string is process data and may contain inline secrets, so it is never persisted to metadata; use `--source-label` for a reviewer-safe description. Do not rely on screenshots to hide secrets: if a capture might include cookies, auth headers, raw env dumps, or provider keys, redact first or summarize the run instead of storing the transcript.
48
50
 
49
- ## Run Through The PTY Connector
51
+ ## Replay And Chrome-less Fallback
50
52
 
51
- Use this when `tmux` is available on macOS/Linux or a Windows environment that provides tmux, such as Git Bash/MSYS2:
53
+ Render an existing raw terminal byte stream through xterm.js:
52
54
 
53
55
  ```bash
54
- node script/qa/web-terminal-visual-qa.mjs \
55
- --title "OpenCode TUI QA" \
56
- --command "opencode --help" \
57
- --source-label "opencode help smoke" \
58
- --cwd "$PWD" \
59
- --evidence-dir .omo/evidence/run/opencode-web-terminal
56
+ node script/qa/web-terminal-visual-qa.mjs --title "Replay" \
57
+ --from-file .omo/evidence/run/capture.ansi --evidence-dir .omo/evidence/run/replay
60
58
  ```
61
59
 
62
- `--command` starts a short-lived tmux-backed PTY connector, captures the pane, renders the web evidence, then records a `tmux kill-session` cleanup receipt in `metadata.json`. The raw --command string is process data and may contain inline secrets, so it is never persisted to metadata; use `--source-label` for a reviewer-safe description.
60
+ `--no-browser` skips xterm.js/Chrome and writes only the text and raw-stream artifacts (no PNG). Use it on hosts without Chrome; it is text-only evidence, not color/visual proof.
63
61
 
64
62
  ## OS Notes
65
63
 
66
- - macOS/Linux: prefer `--command` when `tmux` is installed; otherwise replay a saved pane with `--from-file`.
67
- - Windows: prefer `--from-file` for native shells. Git Bash/MSYS2 environments with tmux may use `--command`.
68
- - Windows-native ConPTY live capture should plug into this same artifact and metadata contract before becoming required.
64
+ - The harness needs `node-pty` (real pty) plus a system Chrome/Chromium (`--chrome-bin` or `CHROME_BIN` to override). `node-pty` ships prebuilds for macOS and Windows; Linux builds from source on install.
65
+ - Windows: node-pty uses ConPTY, so live capture works natively - no tmux, no Git Bash PTY shim required.
69
66
 
70
67
  ## QA Guidance
71
68
 
72
- For OpenCode/Codex QA, pair the harness-specific smoke with this helper:
73
-
74
- 1. Drive the TUI through the normal QA skill or script.
75
- 2. Capture the pane or use the helper's `--command` mode.
76
- 3. Store the output under `.omo/evidence/<YYYYMMDD>-<slug>/`.
77
- 4. Review `terminal.txt`, `terminal-ansi.txt`, and `metadata.json` for accidental secrets before citing them.
78
- 5. Include `terminal.png`, `terminal.txt`, and `metadata.json` in the evidence summary.
79
- 6. Verify cleanup receipts: no leftover tmux sessions, PIDs, ports, or temp state.
69
+ 1. Drive the TUI with `--command` (plus `--input` for interactive flows), or replay a saved stream with `--from-file`.
70
+ 2. Store the output under `.omo/evidence/<YYYYMMDD>-<slug>/`.
71
+ 3. Review `terminal.txt` and `terminal-ansi.txt` for accidental secrets before citing them.
72
+ 4. Include `terminal.png`, `terminal.txt`, and `metadata.json` in the evidence summary.
73
+ 5. Verify the cleanup receipt in `metadata.json`: no leftover pty, Chrome, PIDs, ports, or temp state.
80
74
 
81
- Tests alone are not TUI visual QA. The passing artifact is the rendered terminal evidence plus a binary observation, such as expected text present, no overflow, and no obvious border misalignment.
75
+ Tests alone are not TUI visual QA. The passing artifact is the xterm.js-rendered `terminal.png` plus a binary observation - expected text present, colors correct, no overflow, no border or CJK-width misalignment.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lazycodex-ai",
3
- "version": "4.16.0",
3
+ "version": "4.16.1",
4
4
  "description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
5
5
  "main": "./dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -41,10 +41,11 @@
41
41
  "files": [
42
42
  "dist/cli",
43
43
  "dist/cli-node",
44
+ "script/qa/strip-ansi.mjs",
44
45
  "script/qa/web-terminal-redaction.d.mts",
45
46
  "script/qa/web-terminal-redaction.mjs",
46
- "script/qa/web-terminal-renderer.mjs",
47
47
  "script/qa/web-terminal-visual-qa.mjs",
48
+ "script/qa/xterm-live-terminal.mjs",
48
49
  "docs/reference/github-attachment-upload.md",
49
50
  "docs/reference/web-terminal-visual-qa.md",
50
51
  "packages/omo-codex/scripts/install-local.mjs",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omo",
3
- "version": "4.16.0",
3
+ "version": "4.16.1",
4
4
  "description": "One Codex plugin namespace for Yeongyu's local Codex components.",
5
5
  "author": {
6
6
  "name": "Yeongyu Kim",
@@ -8,7 +8,7 @@
8
8
  "command": "node \"${PLUGIN_ROOT}/components/bootstrap/dist/cli.js\" hook session-start",
9
9
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\bootstrap.ps1\"",
10
10
  "timeout": 30,
11
- "statusMessage": "(OmO) Checking Bootstrap Provisioning"
11
+ "statusMessage": "(OmO 4.16.1) Checking Bootstrap Provisioning"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-bootstrap",
3
- "version": "4.16.0",
3
+ "version": "4.16.1",
4
4
  "description": "Codex SessionStart bootstrap component that provisions LazyCodex runtime dependencies from a detached worker.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-codegraph",
3
- "version": "4.16.0",
3
+ "version": "4.16.1",
4
4
  "description": "Codex plugin MCP wrapper for CodeGraph.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 30,
11
- "statusMessage": "(OmO) Checking Comments"
11
+ "statusMessage": "(OmO 4.16.1) Checking Comments"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-comment-checker",
3
- "version": "4.16.0",
3
+ "version": "4.16.1",
4
4
  "description": "Codex plugin that runs comment-checker after edit-like PostToolUse hooks.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook pre-tool-use",
10
10
  "timeout": 5,
11
- "statusMessage": "(OmO) Recommending Git Bash MCP"
11
+ "statusMessage": "(OmO 4.16.1) Recommending Git Bash MCP"
12
12
  }
13
13
  ]
14
14
  }
@@ -20,7 +20,7 @@
20
20
  "type": "command",
21
21
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
22
22
  "timeout": 5,
23
- "statusMessage": "(OmO) Resetting Git Bash MCP Reminder"
23
+ "statusMessage": "(OmO 4.16.1) Resetting Git Bash MCP Reminder"
24
24
  }
25
25
  ]
26
26
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-git-bash-hook",
3
- "version": "4.16.0",
3
+ "version": "4.16.1",
4
4
  "description": "Codex hook component that reminds Windows sessions to prefer the OMO git_bash MCP.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/components/lazycodex-executor-verify/dist/cli.js\" hook subagent-stop",
10
10
  "timeout": 10,
11
- "statusMessage": "(OmO) Verifying LazyCodex Executor Evidence"
11
+ "statusMessage": "(OmO 4.16.1) Verifying LazyCodex Executor Evidence"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-lazycodex-executor-verify",
3
- "version": "4.16.0",
3
+ "version": "4.16.1",
4
4
  "description": "Codex SubagentStop evidence verifier for LazyCodex executor completions.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 60,
11
- "statusMessage": "(OmO) Checking LSP Diagnostics"
11
+ "statusMessage": "(OmO 4.16.1) Checking LSP Diagnostics"
12
12
  }
13
13
  ]
14
14
  }
@@ -21,7 +21,7 @@
21
21
  "type": "command",
22
22
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
23
23
  "timeout": 5,
24
- "statusMessage": "(OmO) Resetting LSP Diagnostics Cache"
24
+ "statusMessage": "(OmO 4.16.1) Resetting LSP Diagnostics Cache"
25
25
  }
26
26
  ]
27
27
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-lsp",
3
- "version": "4.16.0",
3
+ "version": "4.16.1",
4
4
  "description": "Codex plugin that exposes Language Server Protocol tools and post-edit diagnostics.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook session-start",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO) Loading Project Rules"
10
+ "statusMessage": "(OmO 4.16.1) Loading Project Rules"
11
11
  }
12
12
  ]
13
13
  }
@@ -19,7 +19,7 @@
19
19
  "type": "command",
20
20
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook user-prompt-submit",
21
21
  "timeout": 10,
22
- "statusMessage": "(OmO) Loading Project Rules"
22
+ "statusMessage": "(OmO 4.16.1) Loading Project Rules"
23
23
  }
24
24
  ]
25
25
  }
@@ -32,7 +32,7 @@
32
32
  "type": "command",
33
33
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
34
34
  "timeout": 10,
35
- "statusMessage": "(OmO) Matching Project Rules"
35
+ "statusMessage": "(OmO 4.16.1) Matching Project Rules"
36
36
  }
37
37
  ]
38
38
  }
@@ -45,7 +45,7 @@
45
45
  "type": "command",
46
46
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
47
47
  "timeout": 10,
48
- "statusMessage": "(OmO) Resetting Project Rule Cache"
48
+ "statusMessage": "(OmO 4.16.1) Resetting Project Rule Cache"
49
49
  }
50
50
  ]
51
51
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-rules",
3
- "version": "4.16.0",
3
+ "version": "4.16.1",
4
4
  "description": "Codex plugin that injects project rule files into model context through lifecycle hooks.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -20,7 +20,7 @@ You are mid-flight on a Prometheus work plan; this turn is an automatic continua
20
20
  3. Follow the `start-work` skill in full. The skill is already loaded from your earlier turn — re-read its file at `packages/omo-codex/plugin/skills/start-work/SKILL.md` if you have lost context.
21
21
  4. Apply the checkbox's tier from its ledger entry, or classify it now per the start-work skill: LIGHT (default — a narrow change inside existing layers) needs one real-surface proof of the deliverable, with auxiliary surfaces first-class for CLI- or data-shaped work, and only trigger-mapped adversarial classes; HEAVY (new module/abstraction, auth/security, external integration, schema/migration, concurrency, cross-domain refactor, care signals) takes the full per-criterion regime. When unsure, take HEAVY; never downgrade.
22
22
  5. Decompose the checkbox into atomic sub-tasks. Dispatch them in PARALLEL via `multi_agent_v1.spawn_agent` calls in this same response unless a sub-task has a NAMED blocking dependency (input from another sub-task or shared file). Use `fork_context: false` unless full history is truly required. Put role and specialty instructions inside `message`.
23
- 6. Every sub-task message MUST be self-contained, executable, not a context handoff: start with `TASK: <imperative assignment>`, then name `DELIVERABLE`, `SCOPE`, and `VERIFY`. It must include all 7 sections and a Manual-QA channel with exact invocation (`curl`, `send-keys`, `browser:control-in-app-browser` action, `page.click`) and PASS/FAIL observable, plus ultraqa classes, artifact, and cleanup receipt. Channels: HTTP (`curl -i`); tmux (`send-keys` + `capture-pane`); browser (Codex: `browser:control-in-app-browser` first unless auth/persistent profile needed; else Chrome/agent-browser); computer use.
23
+ 6. Every sub-task message MUST be self-contained, executable, not a context handoff: start with `TASK: <imperative assignment>`, then name `DELIVERABLE`, `SCOPE`, and `VERIFY`. It must include all 7 sections and a Manual-QA channel with exact invocation (`curl`, `send-keys`, `browser:control-in-app-browser` action, `page.click`) and PASS/FAIL observable, plus ultraqa classes, artifact, and cleanup receipt. Channels: HTTP (`curl -i`); terminal/TUI (`send-keys` for boot smoke; xterm.js web terminal for color/visual evidence, never `tmux capture-pane`); browser (Codex: `browser:control-in-app-browser` first unless auth/persistent profile needed; else Chrome/agent-browser); computer use.
24
24
  7. Treat every worker DoneClaim as untrusted input. Run independent AdversarialVerify before any checkbox can become FullyDone; `confirmed` is the only pass verdict, while `false-positive`, `needs-fix`, and `needs-human-review` loop back to the executor with exact feedback.
25
25
  8. Use `multi_agent_v1.wait_agent` for mailbox signals, not proof of completion — a timeout only means no new mailbox update arrived; a running child is alive. For sub-tasks likely to exceed one wait cycle, require `WORKING: <task> - <current phase>` before long passes and `BLOCKED: <reason>` only when progress stops. Send `TASK STILL ACTIVE: return <deliverable> or BLOCKED: <reason>` only when the child is completed without the deliverable, ack-only, or no longer running. If that followup is still silent or ack-only, record inconclusive, do not count it as pass/review approval, close if safe, and respawn a smaller `fork_context: false` task with the missing deliverable.
26
26
  9. After verification of ALL sub-tasks under this checkbox: `apply_patch` the plan to change `- [ ]` → `- [x]`, re-read the plan to confirm the count decreased, append a `task-completed` line to the ledger, then continue.
@@ -30,7 +30,7 @@ You are mid-flight on a Prometheus work plan; this turn is an automatic continua
30
30
 
31
31
  - No production code before a failing-first proof exists: a unit test at a seam, otherwise the sub-task's Manual-QA scenario captured failing. A test that mirrors its implementation (mock-call assertions, pinned constants) is not evidence. When the change touches existing behavior, PIN it first: a baseline characterization test that passes on the unchanged code, with exact inputs, exact observable, and exact assertion. PIN → RED → GREEN → SURFACE.
32
32
  - No `--dry-run` as evidence. No "should work". No "tests pass" as completion proof.
33
- - TUI visual evidence MUST use the web terminal pattern when a task drives an OpenCode/Codex/terminal UI: capture the pane or run `node script/qa/web-terminal-visual-qa.mjs --title "<surface>" --from-file <capture.txt> --evidence-dir <dir>` (or `--command` when tmux is available), then cite `terminal.png`, `terminal.txt`, and `metadata.json`.
33
+ - TUI visual evidence MUST render through the real xterm.js web terminal, never `tmux capture-pane`: run `node script/qa/web-terminal-visual-qa.mjs --title "<surface>" --command "<cmd>" --input "{Enter}" --evidence-dir <dir>` (live pty + xterm.js in Chrome; `--from-file <capture>` replays a raw stream), then cite `terminal.png`, `terminal.txt`, and `metadata.json`.
34
34
  - No `as any` / `@ts-ignore` / `@ts-expect-error`. No deleting failing tests.
35
35
  - Probe every ultraqa adversarial class whose trigger fact holds (malformed input, prompt injection, cancel/resume, stale state, dirty worktree, hung or long commands, flaky tests, misleading success output, repeated interruptions — trigger map in the start-work skill) and capture the observable for each. A clean happy-path artifact alone is NOT a PASS when an applicable class went unprobed; record skipped classes with a one-line not-applicable reason.
36
36
  - Cleanup receipt is mandatory. Register each QA teardown (scripts, tmux, browser contexts, PIDs, ports, containers, temp dirs) as a todo when it spawns, then execute it. Leftover QA state = BLOCKED, not PASS.
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/start-work-continuation/dist/cli.js\" hook stop",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO) Checking Start-Work Continuation"
10
+ "statusMessage": "(OmO 4.16.1) Checking Start-Work Continuation"
11
11
  }
12
12
  ]
13
13
  }
@@ -19,7 +19,7 @@
19
19
  "type": "command",
20
20
  "command": "node \"${PLUGIN_ROOT}/components/start-work-continuation/dist/cli.js\" hook subagent-stop",
21
21
  "timeout": 10,
22
- "statusMessage": "(OmO) Checking Start-Work Continuation"
22
+ "statusMessage": "(OmO 4.16.1) Checking Start-Work Continuation"
23
23
  }
24
24
  ]
25
25
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-start-work-continuation",
3
- "version": "4.16.0",
3
+ "version": "4.16.1",
4
4
  "description": "Codex Stop hook continuation injector for omo-codex start-work plans.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 10,
11
- "statusMessage": "(OmO) Checking Thread Title Hygiene"
11
+ "statusMessage": "(OmO 4.16.1) Checking Thread Title Hygiene"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-teammode",
3
- "version": "4.16.0",
3
+ "version": "4.16.1",
4
4
  "description": "Codex team-mode hook component that keeps background thread titles descriptive after create_thread.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook session-start",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO) Recording Session Telemetry"
10
+ "statusMessage": "(OmO 4.16.1) Recording Session Telemetry"
11
11
  }
12
12
  ]
13
13
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-telemetry",
3
- "version": "4.16.0",
3
+ "version": "4.16.1",
4
4
  "description": "Codex plugin component that emits omo-codex anonymous daily-active telemetry on SessionStart.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -49,9 +49,10 @@ exercises the surface; capture the artifact.
49
49
  1. HTTP call — hit the live endpoint with `curl -i` (or a
50
50
  Playwright APIRequestContext); capture status line + headers +
51
51
  body.
52
- 2. tmux `tmux new-session -d -s ulw-qa-<criterion>`, drive with
53
- `send-keys`, dump via `tmux capture-pane -pS -E -`; transcript
54
- is the artifact.
52
+ 2. Terminal / TUI - drive a real pty and prove it through the
53
+ xterm.js web terminal (see the TUI visual QA note below). tmux
54
+ `send-keys` is fine for a boot smoke; NEVER `tmux capture-pane`
55
+ for color / layout / CJK evidence, which degrades truecolor.
55
56
  3. Browser use — in Codex, use `browser:control-in-app-browser`
56
57
  first when available and no authenticated/persistent user browser
57
58
  profile is required. Otherwise use Chrome to drive the REAL page;
@@ -79,13 +80,13 @@ channel scenario when the behavior is user-facing. `--dry-run`,
79
80
  printing the command, "should respond", and "looks correct" never
80
81
  count.
81
82
 
82
- For TUI visual QA, terminal transcripts alone are not enough when a
83
- visual surface is being evaluated. In this repo, prefer
84
- `node script/qa/web-terminal-visual-qa.mjs --title "<surface>" --from-file <capture.txt> --evidence-dir <dir>`
85
- or the helper's `--command` tmux-backed PTY connector when available.
86
- Outside this repo, capture equivalent browser/computer-use rendered
87
- terminal evidence: screenshot, plain transcript, rendered HTML or action
88
- log, and cleanup receipt.
83
+ For TUI visual QA, render the terminal through the real xterm.js web
84
+ terminal and screenshot it - never a `tmux capture-pane` dump, which
85
+ degrades color and wide-glyph width. In this repo:
86
+ `node script/qa/web-terminal-visual-qa.mjs --title "<surface>" --command "<cmd>" --input "{Enter}" --evidence-dir <dir>`
87
+ (live pty + xterm.js in Chrome; `--from-file <capture>` replays a raw
88
+ stream). Outside this repo, capture equivalent browser-rendered terminal
89
+ evidence: screenshot + plain transcript + cleanup receipt.
89
90
 
90
91
  # Bootstrap (DO ALL FOUR BEFORE ANY OTHER WORK — NO SKIPPING)
91
92
 
@@ -287,6 +288,13 @@ evidence for that step. Do not start dependent implementation until the
287
288
  audit, research, or review result is integrated or explicitly recorded
288
289
  as inconclusive. Do not generate a plan before spawned research lanes
289
290
  that feed the plan have returned or been closed as inconclusive.
291
+ Spawn every independent child for the current wave first. After the wave
292
+ is launched, run `multi_agent_v1.wait_agent` for each spawned child until
293
+ each reaches terminal status (`completed`, `failed`, `blocked`, or
294
+ explicitly recorded inconclusive) before any dependent `update_plan`
295
+ transition, `create_goal` continuation, implementation tool call, plan
296
+ drafting, approval-gate work, PR handoff, or final response. A timeout is
297
+ not terminal status.
290
298
  Do not write the final answer, PR handoff, or completion summary while
291
299
  active child agents remain open. Use short `multi_agent_v1.wait_agent` cycles.
292
300
  After two silent waits send `TASK STILL ACTIVE: return <deliverable> or
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook user-prompt-submit",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO) Checking Ultrawork Trigger"
10
+ "statusMessage": "(OmO 4.16.1) Checking Ultrawork Trigger"
11
11
  }
12
12
  ]
13
13
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-ultrawork",
3
- "version": "4.16.0",
3
+ "version": "4.16.1",
4
4
  "description": "Codex plugin that injects the ultrawork orchestration directive and ships LazyCodex planning, review, QA, and gate agent roles.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -56,9 +56,10 @@ exercises the surface; capture the artifact.
56
56
  1. HTTP call — hit the live endpoint with `curl -i` (or a
57
57
  Playwright APIRequestContext); capture status line + headers +
58
58
  body.
59
- 2. tmux `tmux new-session -d -s ulw-qa-<criterion>`, drive with
60
- `send-keys`, dump via `tmux capture-pane -pS -E -`; transcript
61
- is the artifact.
59
+ 2. Terminal / TUI - drive a real pty and prove it through the
60
+ xterm.js web terminal (see the TUI visual QA note below). tmux
61
+ `send-keys` is fine for a boot smoke; NEVER `tmux capture-pane`
62
+ for color / layout / CJK evidence, which degrades truecolor.
62
63
  3. Browser use — in Codex, use `browser:control-in-app-browser`
63
64
  first when available and no authenticated/persistent user browser
64
65
  profile is required. Otherwise use Chrome to drive the REAL page;
@@ -86,13 +87,13 @@ channel scenario when the behavior is user-facing. `--dry-run`,
86
87
  printing the command, "should respond", and "looks correct" never
87
88
  count.
88
89
 
89
- For TUI visual QA, terminal transcripts alone are not enough when a
90
- visual surface is being evaluated. In this repo, prefer
91
- `node script/qa/web-terminal-visual-qa.mjs --title "<surface>" --from-file <capture.txt> --evidence-dir <dir>`
92
- or the helper's `--command` tmux-backed PTY connector when available.
93
- Outside this repo, capture equivalent browser/computer-use rendered
94
- terminal evidence: screenshot, plain transcript, rendered HTML or action
95
- log, and cleanup receipt.
90
+ For TUI visual QA, render the terminal through the real xterm.js web
91
+ terminal and screenshot it - never a `tmux capture-pane` dump, which
92
+ degrades color and wide-glyph width. In this repo:
93
+ `node script/qa/web-terminal-visual-qa.mjs --title "<surface>" --command "<cmd>" --input "{Enter}" --evidence-dir <dir>`
94
+ (live pty + xterm.js in Chrome; `--from-file <capture>` replays a raw
95
+ stream). Outside this repo, capture equivalent browser-rendered terminal
96
+ evidence: screenshot + plain transcript + cleanup receipt.
96
97
 
97
98
  # Bootstrap (DO ALL FOUR BEFORE ANY OTHER WORK — NO SKIPPING)
98
99
 
@@ -294,6 +295,13 @@ evidence for that step. Do not start dependent implementation until the
294
295
  audit, research, or review result is integrated or explicitly recorded
295
296
  as inconclusive. Do not generate a plan before spawned research lanes
296
297
  that feed the plan have returned or been closed as inconclusive.
298
+ Spawn every independent child for the current wave first. After the wave
299
+ is launched, run `multi_agent_v1.wait_agent` for each spawned child until
300
+ each reaches terminal status (`completed`, `failed`, `blocked`, or
301
+ explicitly recorded inconclusive) before any dependent `update_plan`
302
+ transition, `create_goal` continuation, implementation tool call, plan
303
+ drafting, approval-gate work, PR handoff, or final response. A timeout is
304
+ not terminal status.
297
305
  Do not write the final answer, PR handoff, or completion summary while
298
306
  active child agents remain open. Use short `multi_agent_v1.wait_agent` cycles.
299
307
  After two silent waits send `TASK STILL ACTIVE: return <deliverable> or
@@ -67,6 +67,17 @@ Fan out read-only research before deciding. Every spawn names DELIVERABLE / SCOP
67
67
  multi_agent_v1.spawn_agent({"message":"TASK: act as an explorer. DELIVERABLE: ... SCOPE: ... VERIFY: ...","agent_type":"explorer","fork_context":false})
68
68
  ```
69
69
 
70
+ Spawn every independent child for the current wave first. After the wave
71
+ is launched, use `multi_agent_v1.wait_agent` for each child until each
72
+ reaches terminal status. A timeout is not terminal status. Do not start dependent planning, drafting, approval-gate work, or final handoff until each child result is integrated or recorded as inconclusive.
73
+
74
+ For work likely to exceed one wait cycle, require the child to send
75
+ `WORKING: <task> - <current phase>` before long passes and
76
+ `BLOCKED: <reason>` only when progress stops. A `multi_agent_v1.wait_agent`
77
+ timeout only means no new mailbox update arrived. Treat a running child as
78
+ alive. Fallback only when the child is completed without the deliverable,
79
+ ack-only after followup, explicitly `BLOCKED:`, or no longer running.
80
+
70
81
  Roles: `explorer` (internal patterns/conventions/tests), `librarian` (external docs/contracts), `metis` (gap analysis), `momus` (high-accuracy plan review). Full spawn/wait/fallback discipline is in `references/full-workflow.md`.
71
82
 
72
83
  ## Stop rules
@@ -190,7 +190,7 @@ describe("codex ultrawork hook", () => {
190
190
  expect(parsed.hookSpecificOutput.additionalContext).toMatch(/# Manual-QA channels/);
191
191
  expect(parsed.hookSpecificOutput.additionalContext).toMatch(/TESTS ALONE NEVER PROVE DONE/);
192
192
  expect(parsed.hookSpecificOutput.additionalContext).toMatch(/1\. HTTP call/);
193
- expect(parsed.hookSpecificOutput.additionalContext).toMatch(/2\. tmux/);
193
+ expect(parsed.hookSpecificOutput.additionalContext).toMatch(/2\. Terminal \/ TUI/);
194
194
  expect(parsed.hookSpecificOutput.additionalContext).toMatch(/3\. Browser use/);
195
195
  expect(parsed.hookSpecificOutput.additionalContext).toMatch(/4\. Computer use/);
196
196
  expect(parsed.hookSpecificOutput.additionalContext).toMatch(/CLEANUP \(PAIRED/);
@@ -244,6 +244,27 @@ describe("codex ultrawork hook", () => {
244
244
  expect(directive).toMatch(/WORKING:/);
245
245
  });
246
246
 
247
+ it("#given directive #when inspected #then blocks dependent work until spawned planners finish", () => {
248
+ // given
249
+ const payload = {
250
+ hook_event_name: "UserPromptSubmit",
251
+ prompt: "ulw",
252
+ };
253
+
254
+ // when
255
+ const output = runUserPromptSubmitHook(payload, { skillFilePath: null });
256
+ const parsed = parseHookOutput(output);
257
+
258
+ // then
259
+ const directive = parsed.hookSpecificOutput.additionalContext;
260
+ expect(directive).toMatch(/Subagent-dependent transition barrier/);
261
+ expect(directive).toMatch(/Spawn every independent child for the current wave first/);
262
+ expect(directive).toMatch(/After the wave\s+is launched[\s\S]{0,240}wait_agent[\s\S]{0,240}terminal status/);
263
+ expect(directive).not.toMatch(/Immediately after any `multi_agent_v1\.spawn_agent`/);
264
+ expect(directive).toMatch(/Do not start dependent implementation/);
265
+ expect(directive).toMatch(/Do not mark an `update_plan` step `completed`/);
266
+ });
267
+
247
268
  it("#given directive #when inspected #then keeps impact-proportional sizing invariants", () => {
248
269
  // given
249
270
  const payload = {