oh-my-opencode 5.0.0-beta.3 → 5.0.0-beta.4

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 (62) hide show
  1. package/dist/cli/index.js +17 -15
  2. package/dist/cli-node/index.js +17 -15
  3. package/dist/index.js +16 -14
  4. package/dist/skills/ultimate-browsing/engine/AGENTS.md +69 -0
  5. package/dist/tui.js +2 -0
  6. package/package.json +14 -14
  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/dist/cli.js +2 -0
  11. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +2 -0
  12. package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
  13. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  14. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  15. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  16. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  17. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  18. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  19. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  20. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  21. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  22. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  23. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  24. package/packages/omo-codex/plugin/components/start-work-continuation/AGENTS.md +3 -2
  25. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
  26. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
  27. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  28. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  29. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  30. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  31. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  32. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  33. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  34. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  35. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  36. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  37. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  38. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  39. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  40. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  41. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  42. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  43. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  44. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  45. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  46. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  47. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  48. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  49. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  50. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  51. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
  52. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  53. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
  54. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  55. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  56. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  57. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  58. package/packages/omo-codex/plugin/package-lock.json +13 -13
  59. package/packages/omo-codex/plugin/package.json +1 -1
  60. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +69 -0
  61. package/packages/omo-codex/scripts/install-dist/install-local.mjs +2 -2
  62. package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +69 -0
package/dist/cli/index.js CHANGED
@@ -2145,7 +2145,7 @@ var package_default;
2145
2145
  var init_package = __esm(() => {
2146
2146
  package_default = {
2147
2147
  name: "oh-my-opencode",
2148
- version: "5.0.0-beta.3",
2148
+ version: "5.0.0-beta.4",
2149
2149
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
2150
2150
  main: "./dist/index.js",
2151
2151
  types: "dist/index.d.ts",
@@ -2325,7 +2325,7 @@ var init_package = __esm(() => {
2325
2325
  zod: "^4.4.3"
2326
2326
  },
2327
2327
  devDependencies: {
2328
- "@code-yeongyu/senpi": "2026.8.9-2",
2328
+ "@code-yeongyu/senpi": "2026.8.11",
2329
2329
  "@oh-my-opencode/agents-md-core": "workspace:*",
2330
2330
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
2331
2331
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -2365,18 +2365,18 @@ var init_package = __esm(() => {
2365
2365
  typescript: "^7.0.2"
2366
2366
  },
2367
2367
  optionalDependencies: {
2368
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.3",
2369
- "oh-my-opencode-darwin-x64": "5.0.0-beta.3",
2370
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.3",
2371
- "oh-my-opencode-linux-arm64": "5.0.0-beta.3",
2372
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.3",
2373
- "oh-my-opencode-linux-x64": "5.0.0-beta.3",
2374
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.3",
2375
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.3",
2376
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.3",
2377
- "oh-my-opencode-windows-arm64": "5.0.0-beta.3",
2378
- "oh-my-opencode-windows-x64": "5.0.0-beta.3",
2379
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.3"
2368
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.4",
2369
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.4",
2370
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.4",
2371
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.4",
2372
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.4",
2373
+ "oh-my-opencode-linux-x64": "5.0.0-beta.4",
2374
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.4",
2375
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.4",
2376
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.4",
2377
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.4",
2378
+ "oh-my-opencode-windows-x64": "5.0.0-beta.4",
2379
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.4"
2380
2380
  },
2381
2381
  overrides: {
2382
2382
  "@earendil-works/pi-agent-core": "0.80.3",
@@ -22454,6 +22454,7 @@ var init_memory = __esm(() => {
22454
22454
  OmoMemorySettingsSchema = object({
22455
22455
  enabled: boolean2().default(true),
22456
22456
  agent: string2().min(1).default("auto"),
22457
+ tool_exposure: _enum2(["direct", "search"]).default("direct"),
22457
22458
  reflection: OmoMemoryReflectionSchema.default({
22458
22459
  trigger: { step_count: 0, on_compaction: true },
22459
22460
  merge: "auto",
@@ -22469,6 +22470,7 @@ var init_memory = __esm(() => {
22469
22470
  OmoMemorySettingsLayerSchema = object({
22470
22471
  enabled: boolean2().optional(),
22471
22472
  agent: string2().min(1).optional(),
22473
+ tool_exposure: _enum2(["direct", "search"]).optional(),
22472
22474
  reflection: OmoMemoryReflectionLayerSchema.optional(),
22473
22475
  sync: OmoMemorySyncLayerSchema.optional(),
22474
22476
  search: OmoMemorySearchLayerSchema.optional(),
@@ -94439,7 +94441,7 @@ var package_default2;
94439
94441
  var init_package2 = __esm(() => {
94440
94442
  package_default2 = {
94441
94443
  name: "@oh-my-opencode/omo-codex",
94442
- version: "5.0.0-beta.3",
94444
+ version: "5.0.0-beta.4",
94443
94445
  type: "module",
94444
94446
  private: true,
94445
94447
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -2146,7 +2146,7 @@ var package_default;
2146
2146
  var init_package = __esm(() => {
2147
2147
  package_default = {
2148
2148
  name: "oh-my-opencode",
2149
- version: "5.0.0-beta.3",
2149
+ version: "5.0.0-beta.4",
2150
2150
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
2151
2151
  main: "./dist/index.js",
2152
2152
  types: "dist/index.d.ts",
@@ -2326,7 +2326,7 @@ var init_package = __esm(() => {
2326
2326
  zod: "^4.4.3"
2327
2327
  },
2328
2328
  devDependencies: {
2329
- "@code-yeongyu/senpi": "2026.8.9-2",
2329
+ "@code-yeongyu/senpi": "2026.8.11",
2330
2330
  "@oh-my-opencode/agents-md-core": "workspace:*",
2331
2331
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
2332
2332
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -2366,18 +2366,18 @@ var init_package = __esm(() => {
2366
2366
  typescript: "^7.0.2"
2367
2367
  },
2368
2368
  optionalDependencies: {
2369
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.3",
2370
- "oh-my-opencode-darwin-x64": "5.0.0-beta.3",
2371
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.3",
2372
- "oh-my-opencode-linux-arm64": "5.0.0-beta.3",
2373
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.3",
2374
- "oh-my-opencode-linux-x64": "5.0.0-beta.3",
2375
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.3",
2376
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.3",
2377
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.3",
2378
- "oh-my-opencode-windows-arm64": "5.0.0-beta.3",
2379
- "oh-my-opencode-windows-x64": "5.0.0-beta.3",
2380
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.3"
2369
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.4",
2370
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.4",
2371
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.4",
2372
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.4",
2373
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.4",
2374
+ "oh-my-opencode-linux-x64": "5.0.0-beta.4",
2375
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.4",
2376
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.4",
2377
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.4",
2378
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.4",
2379
+ "oh-my-opencode-windows-x64": "5.0.0-beta.4",
2380
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.4"
2381
2381
  },
2382
2382
  overrides: {
2383
2383
  "@earendil-works/pi-agent-core": "0.80.3",
@@ -22455,6 +22455,7 @@ var init_memory = __esm(() => {
22455
22455
  OmoMemorySettingsSchema = object({
22456
22456
  enabled: boolean2().default(true),
22457
22457
  agent: string2().min(1).default("auto"),
22458
+ tool_exposure: _enum2(["direct", "search"]).default("direct"),
22458
22459
  reflection: OmoMemoryReflectionSchema.default({
22459
22460
  trigger: { step_count: 0, on_compaction: true },
22460
22461
  merge: "auto",
@@ -22470,6 +22471,7 @@ var init_memory = __esm(() => {
22470
22471
  OmoMemorySettingsLayerSchema = object({
22471
22472
  enabled: boolean2().optional(),
22472
22473
  agent: string2().min(1).optional(),
22474
+ tool_exposure: _enum2(["direct", "search"]).optional(),
22473
22475
  reflection: OmoMemoryReflectionLayerSchema.optional(),
22474
22476
  sync: OmoMemorySyncLayerSchema.optional(),
22475
22477
  search: OmoMemorySearchLayerSchema.optional(),
@@ -94495,7 +94497,7 @@ var package_default2;
94495
94497
  var init_package2 = __esm(() => {
94496
94498
  package_default2 = {
94497
94499
  name: "@oh-my-opencode/omo-codex",
94498
- version: "5.0.0-beta.3",
94500
+ version: "5.0.0-beta.4",
94499
94501
  type: "module",
94500
94502
  private: true,
94501
94503
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
package/dist/index.js CHANGED
@@ -5586,6 +5586,7 @@ var init_memory = __esm(() => {
5586
5586
  OmoMemorySettingsSchema = z7.object({
5587
5587
  enabled: z7.boolean().default(true),
5588
5588
  agent: z7.string().min(1).default("auto"),
5589
+ tool_exposure: z7.enum(["direct", "search"]).default("direct"),
5589
5590
  reflection: OmoMemoryReflectionSchema.default({
5590
5591
  trigger: { step_count: 0, on_compaction: true },
5591
5592
  merge: "auto",
@@ -5601,6 +5602,7 @@ var init_memory = __esm(() => {
5601
5602
  OmoMemorySettingsLayerSchema = z7.object({
5602
5603
  enabled: z7.boolean().optional(),
5603
5604
  agent: z7.string().min(1).optional(),
5605
+ tool_exposure: z7.enum(["direct", "search"]).optional(),
5604
5606
  reflection: OmoMemoryReflectionLayerSchema.optional(),
5605
5607
  sync: OmoMemorySyncLayerSchema.optional(),
5606
5608
  search: OmoMemorySearchLayerSchema.optional(),
@@ -98550,7 +98552,7 @@ function getCachedVersion(options = {}) {
98550
98552
  // package.json
98551
98553
  var package_default = {
98552
98554
  name: "oh-my-opencode",
98553
- version: "5.0.0-beta.3",
98555
+ version: "5.0.0-beta.4",
98554
98556
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
98555
98557
  main: "./dist/index.js",
98556
98558
  types: "dist/index.d.ts",
@@ -98730,7 +98732,7 @@ var package_default = {
98730
98732
  zod: "^4.4.3"
98731
98733
  },
98732
98734
  devDependencies: {
98733
- "@code-yeongyu/senpi": "2026.8.9-2",
98735
+ "@code-yeongyu/senpi": "2026.8.11",
98734
98736
  "@oh-my-opencode/agents-md-core": "workspace:*",
98735
98737
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
98736
98738
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -98770,18 +98772,18 @@ var package_default = {
98770
98772
  typescript: "^7.0.2"
98771
98773
  },
98772
98774
  optionalDependencies: {
98773
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.3",
98774
- "oh-my-opencode-darwin-x64": "5.0.0-beta.3",
98775
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.3",
98776
- "oh-my-opencode-linux-arm64": "5.0.0-beta.3",
98777
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.3",
98778
- "oh-my-opencode-linux-x64": "5.0.0-beta.3",
98779
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.3",
98780
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.3",
98781
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.3",
98782
- "oh-my-opencode-windows-arm64": "5.0.0-beta.3",
98783
- "oh-my-opencode-windows-x64": "5.0.0-beta.3",
98784
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.3"
98775
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.4",
98776
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.4",
98777
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.4",
98778
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.4",
98779
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.4",
98780
+ "oh-my-opencode-linux-x64": "5.0.0-beta.4",
98781
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.4",
98782
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.4",
98783
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.4",
98784
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.4",
98785
+ "oh-my-opencode-windows-x64": "5.0.0-beta.4",
98786
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.4"
98785
98787
  },
98786
98788
  overrides: {
98787
98789
  "@earendil-works/pi-agent-core": "0.80.3",
@@ -0,0 +1,69 @@
1
+ # ultimate-browsing/engine — Generic WAF-Profile Fetch Chain (Python)
2
+
3
+ **Generated:** 2026-08-10 / 38d268995
4
+
5
+ ## OVERVIEW
6
+
7
+ A 17-module Python package embedded in the `ultimate-browsing` skill: a site-agnostic fetch chain that escalates from a cheap curl probe to a real browser, with declarative WAF and surrogate registries. Not "optional scripts" — it has its own CLI entry (`python3 -m engine URL`), two YAML config schemas, a 4-file test suite, and a standalone CI guard. Package exports (`__init__.py`): `fetch`, `FetchResult`, `Attempt`, `Verdict`, `ValidationResult`, `validate`, `CHALLENGE_MARKERS`, `detect`, `TRANSFORMS`, `apply_transform`.
8
+
9
+ ## THE NO-SITE-NAME RULE (enforced in CI)
10
+
11
+ `engine/**` must contain **zero** hard-coded site names, brands, or target domains. Site specifics belong to runtime hints or observations, never to code. `bias_check.py` is a standalone scanner enforcing this: a brand denylist, a URL regex scan, an allowlist for genuine infrastructure hosts (archive.org, r.jina.ai, google.com, httpbin.org, relay.invalid), and a `# NOTE-BIAS-OK` comment convention for legitimate exemptions such as test fixtures.
12
+
13
+ ```bash
14
+ python3 engine/bias_check.py # fails on any site-specific leak
15
+ ```
16
+
17
+ ## FETCH CHAIN PHASES
18
+
19
+ ```
20
+ fetch(url, ...) # fetch_chain.py
21
+ Phase 1 curl_probe.py — curl_cffi TLS-impersonation probe
22
+ Phase 2 grid — referer/transform/device attempt grid
23
+ Phase 2.5 surrogate.py — third-party archive/reader/proxy routes
24
+ Phase 3 executor.py — capability-matched Playwright fallback
25
+ ```
26
+
27
+ Ordering is **not** hardcoded: each `waf_profiles.yaml` profile carries a `fallback_when_challenge` list that drives the ladder. `surrogate_wayback` precedes browser executors in every profile, so archives are tried before paying for a browser spin-up.
28
+
29
+ ## PROVENANCE / TRUST CONTRACT
30
+
31
+ `result_schema.py` puts two literals on every `FetchResult`:
32
+
33
+ - `Provenance = "live" | "snapshot" | "proxy"`
34
+ - `Trust = "origin" | "archive" | "untrusted"`
35
+
36
+ A `snapshot` result carries `snapshot_timestamp` and **must** be cited with that timestamp — never presented as the live page. `surrogates.yaml` `kind` fixes these values: `archive` -> snapshot/archive, `reader` -> live, `proxy` -> proxy/untrusted.
37
+
38
+ ## SURROGATE REGISTRY (`surrogates.yaml`)
39
+
40
+ Site-agnostic infrastructure only. Every entry carries `last_verified` (ISO date); entries older than 90 days are deprioritized and flagged, because surrogate routes rot (a 2026-08 probe found 4 of 6 known routes dead or stubbed). `proxy` routes are MITM by construction: they require the explicit `--allow-proxy` flag and never receive `Cookie` or `Authorization` headers. Every surrogate response is re-validated with `target_url` set, so an interstitial or a redirect stub is rejected instead of returned as content.
41
+
42
+ ## VALIDATOR LAYERS (`validators.py`)
43
+
44
+ ```
45
+ L1 challenge markers (CHALLENGE_MARKERS)
46
+ L1.5 surrogate dead ends — interstitial titles + AMP-style redirect stubs
47
+ (is_redirect_stub(), needs target_url)
48
+ L2 size/shape fingerprints
49
+ L3+ content checks
50
+ ```
51
+
52
+ ## CLI
53
+
54
+ ```bash
55
+ python3 -m engine URL [--selector S] [--device auto|desktop|mobile]
56
+ [--timeout 25] [--max-attempts 12]
57
+ [--no-playwright] [--allow-proxy] [--json] [--trace]
58
+ ```
59
+
60
+ ## TESTS
61
+
62
+ `tests/` — `test_surrogate.py` (staleness, proxy gating, short-circuit), `test_surrogate_validators.py`, `test_fetch_chain.py`, `test_playwright_templates.py`, plus HTML/JSON fixtures under `tests/fixtures/`.
63
+
64
+ ## NOTES
65
+
66
+ - `summary.py` emits an **R7 API-first hint** after >=3 challenge verdicts against a known WAF profile: look for `/api/`, `/graphql`, or `.json` endpoints, which usually carry weaker WAF protection than the HTML surface.
67
+ - `templates/` holds the Playwright JS templates (`playwright_real_chrome.js`, `playwright_mobile_chrome.js`) the executor drives.
68
+ - `url_transforms.py` transforms stay domain-agnostic (`mobile_subdomain`, `am_prefix`, `drop_www`).
69
+ - Parent: [`packages/shared-skills/AGENTS.md`](../../../AGENTS.md).
package/dist/tui.js CHANGED
@@ -18887,6 +18887,7 @@ var init_memory = __esm(() => {
18887
18887
  OmoMemorySettingsSchema = object({
18888
18888
  enabled: boolean2().default(true),
18889
18889
  agent: string2().min(1).default("auto"),
18890
+ tool_exposure: _enum2(["direct", "search"]).default("direct"),
18890
18891
  reflection: OmoMemoryReflectionSchema.default({
18891
18892
  trigger: { step_count: 0, on_compaction: true },
18892
18893
  merge: "auto",
@@ -18902,6 +18903,7 @@ var init_memory = __esm(() => {
18902
18903
  OmoMemorySettingsLayerSchema = object({
18903
18904
  enabled: boolean2().optional(),
18904
18905
  agent: string2().min(1).optional(),
18906
+ tool_exposure: _enum2(["direct", "search"]).optional(),
18905
18907
  reflection: OmoMemoryReflectionLayerSchema.optional(),
18906
18908
  sync: OmoMemorySyncLayerSchema.optional(),
18907
18909
  search: OmoMemorySearchLayerSchema.optional(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-opencode",
3
- "version": "5.0.0-beta.3",
3
+ "version": "5.0.0-beta.4",
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",
@@ -180,7 +180,7 @@
180
180
  "zod": "^4.4.3"
181
181
  },
182
182
  "devDependencies": {
183
- "@code-yeongyu/senpi": "2026.8.9-2",
183
+ "@code-yeongyu/senpi": "2026.8.11",
184
184
  "@oh-my-opencode/agents-md-core": "workspace:*",
185
185
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
186
186
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -220,18 +220,18 @@
220
220
  "typescript": "^7.0.2"
221
221
  },
222
222
  "optionalDependencies": {
223
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.3",
224
- "oh-my-opencode-darwin-x64": "5.0.0-beta.3",
225
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.3",
226
- "oh-my-opencode-linux-arm64": "5.0.0-beta.3",
227
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.3",
228
- "oh-my-opencode-linux-x64": "5.0.0-beta.3",
229
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.3",
230
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.3",
231
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.3",
232
- "oh-my-opencode-windows-arm64": "5.0.0-beta.3",
233
- "oh-my-opencode-windows-x64": "5.0.0-beta.3",
234
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.3"
223
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.4",
224
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.4",
225
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.4",
226
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.4",
227
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.4",
228
+ "oh-my-opencode-linux-x64": "5.0.0-beta.4",
229
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.4",
230
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.4",
231
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.4",
232
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.4",
233
+ "oh-my-opencode-windows-x64": "5.0.0-beta.4",
234
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.4"
235
235
  },
236
236
  "overrides": {
237
237
  "@earendil-works/pi-agent-core": "0.80.3",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omo",
3
- "version": "5.0.0-beta.3",
3
+ "version": "5.0.0-beta.4",
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 5.0.0-beta.3) Checking Bootstrap Provisioning"
11
+ "statusMessage": "(OmO 5.0.0-beta.4) Checking Bootstrap Provisioning"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-bootstrap",
3
- "version": "5.0.0-beta.3",
3
+ "version": "5.0.0-beta.4",
4
4
  "description": "Codex SessionStart bootstrap component that provisions LazyCodex runtime dependencies from a detached worker.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -5597,6 +5597,7 @@ var OmoMemoryAgentOverridesSchema = object({
5597
5597
  var OmoMemorySettingsSchema = object({
5598
5598
  enabled: boolean2().default(true),
5599
5599
  agent: string2().min(1).default("auto"),
5600
+ tool_exposure: _enum(["direct", "search"]).default("direct"),
5600
5601
  reflection: OmoMemoryReflectionSchema.default({
5601
5602
  trigger: { step_count: 0, on_compaction: true },
5602
5603
  merge: "auto",
@@ -5612,6 +5613,7 @@ var OmoMemorySettingsSchema = object({
5612
5613
  var OmoMemorySettingsLayerSchema = object({
5613
5614
  enabled: boolean2().optional(),
5614
5615
  agent: string2().min(1).optional(),
5616
+ tool_exposure: _enum(["direct", "search"]).optional(),
5615
5617
  reflection: OmoMemoryReflectionLayerSchema.optional(),
5616
5618
  sync: OmoMemorySyncLayerSchema.optional(),
5617
5619
  search: OmoMemorySearchLayerSchema.optional(),
@@ -5863,6 +5863,7 @@ var OmoMemoryAgentOverridesSchema = object({
5863
5863
  var OmoMemorySettingsSchema = object({
5864
5864
  enabled: boolean2().default(true),
5865
5865
  agent: string2().min(1).default("auto"),
5866
+ tool_exposure: _enum(["direct", "search"]).default("direct"),
5866
5867
  reflection: OmoMemoryReflectionSchema.default({
5867
5868
  trigger: { step_count: 0, on_compaction: true },
5868
5869
  merge: "auto",
@@ -5878,6 +5879,7 @@ var OmoMemorySettingsSchema = object({
5878
5879
  var OmoMemorySettingsLayerSchema = object({
5879
5880
  enabled: boolean2().optional(),
5880
5881
  agent: string2().min(1).optional(),
5882
+ tool_exposure: _enum(["direct", "search"]).optional(),
5881
5883
  reflection: OmoMemoryReflectionLayerSchema.optional(),
5882
5884
  sync: OmoMemorySyncLayerSchema.optional(),
5883
5885
  search: OmoMemorySearchLayerSchema.optional(),
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-codegraph",
3
- "version": "5.0.0-beta.3",
3
+ "version": "5.0.0-beta.4",
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 5.0.0-beta.3) Checking Comments"
11
+ "statusMessage": "(OmO 5.0.0-beta.4) Checking Comments"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-comment-checker",
3
- "version": "5.0.0-beta.3",
3
+ "version": "5.0.0-beta.4",
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 5.0.0-beta.3) Recommending Git Bash MCP"
11
+ "statusMessage": "(OmO 5.0.0-beta.4) 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 5.0.0-beta.3) Resetting Git Bash MCP Reminder"
23
+ "statusMessage": "(OmO 5.0.0-beta.4) 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": "5.0.0-beta.3",
3
+ "version": "5.0.0-beta.4",
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 5.0.0-beta.3) Verifying LazyCodex Executor Evidence"
11
+ "statusMessage": "(OmO 5.0.0-beta.4) 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": "5.0.0-beta.3",
3
+ "version": "5.0.0-beta.4",
4
4
  "description": "Codex SubagentStop evidence verifier for LazyCodex executor completions.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "5.0.0-beta.3",
4
- "inputDigest": "sha256:7a43282ba028b5ee285a825219c8083d95133328bfee666aa2e3bddd62342ba9",
3
+ "version": "5.0.0-beta.4",
4
+ "inputDigest": "sha256:41e04f36fa735df54afa5c237d86393e1b319c48d402dadc7716a49b06f7f5a6",
5
5
  "outputs": [
6
6
  {
7
7
  "path": "cli.d.ts",
@@ -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 5.0.0-beta.3) Checking LSP Diagnostics"
11
+ "statusMessage": "(OmO 5.0.0-beta.4) 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 5.0.0-beta.3) Resetting LSP Diagnostics Cache"
24
+ "statusMessage": "(OmO 5.0.0-beta.4) 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": "5.0.0-beta.3",
3
+ "version": "5.0.0-beta.4",
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 5.0.0-beta.3) Loading Project Rules"
10
+ "statusMessage": "(OmO 5.0.0-beta.4) 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 5.0.0-beta.3) Loading Project Rules"
22
+ "statusMessage": "(OmO 5.0.0-beta.4) 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 5.0.0-beta.3) Matching Project Rules"
35
+ "statusMessage": "(OmO 5.0.0-beta.4) 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 5.0.0-beta.3) Resetting Project Rule Cache"
48
+ "statusMessage": "(OmO 5.0.0-beta.4) 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": "5.0.0-beta.3",
3
+ "version": "5.0.0-beta.4",
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",
@@ -31,9 +31,10 @@ Conventions for human contributors and AI agents working on this repository.
31
31
 
32
32
  ## Layout
33
33
 
34
- - `src/boulder-reader.ts`: reads `.omo/boulder.json`, resolves the active work for the session, re-exports `getPlanChecklist`/`PlanChecklist` from `plan-checklist.ts`. `readContinuationState` returns null only when the plan has no readable top-level checklist (`total === 0`).
34
+ - `src/boulder-reader.ts`: reads `.omo/boulder.json`, resolves the active work for the session, re-exports `getPlanChecklist`/`PlanChecklist` from `plan-checklist.ts`. `readContinuationState` returns null in four cases: `boulder.json` is missing or unparseable, no work matches the session, the work status is not continuable (only `active` and `paused` continue - `completed`/`abandoned` stop), or `checklist.total === 0`.
35
35
  - `src/plan-checklist.ts`: `PlanChecklist` (`completed`/`remaining`/`total`/`nextTaskLabel`) and `getPlanChecklist`/`parsePlanChecklist`. Counts structured `## TODOs` rows (`N. <title>`) and `## Final Verification Wave` rows (`F<number>. <title>`); falls back to simple top-level `- [ ]`/`- [x]` checkboxes. Skips fenced blocks and respects `#`/`##` section boundaries.
36
- - `src/codex-hook.ts`: Stop/SubagentStop hook; fills `REMAINING_COUNT`/`TOTAL_COUNT`/`NEXT_TASK_LABEL` from the checklist into `directive.md`.
36
+ - `src/codex-hook.ts`: Stop/SubagentStop hook; fills nine placeholders into `directive.md` - `PLAN_NAME`, `PLAN_PATH`, `BOULDER_PATH`, `REMAINING_COUNT`, `TOTAL_COUNT`, `NEXT_TASK_LABEL`, `WORKTREE_BLOCK`, `LEDGER_PATH`, `SESSION_ID`. `WORKTREE_BLOCK` renders empty when the work has no worktree. When `remaining === 0`, `nextTaskLabel` is null and renders as "none (final gate pending)".
37
+ - **Context-pressure suppression:** the hook reads `input.transcript_path` through the injected `ReadonlyFileSystem` and returns `""` (no continuation) when the transcript carries any context-pressure marker (`context compacted`, `context_length_exceeded`, `context_too_large`, `codex ran out of room in the model's context window`, and related phrasings). This is the safety valve against an infinite continuation loop once the context window is exhausted; it is pinned by a `#given context-window pressure` test.
37
38
  - `directive.md`: directive template with placeholders, applied per invocation.
38
39
 
39
40
  ## Build and Hooks
@@ -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 5.0.0-beta.3) Checking Start-Work Continuation"
10
+ "statusMessage": "(OmO 5.0.0-beta.4) 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 5.0.0-beta.3) Checking Start-Work Continuation"
22
+ "statusMessage": "(OmO 5.0.0-beta.4) 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": "5.0.0-beta.3",
3
+ "version": "5.0.0-beta.4",
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 5.0.0-beta.3) Checking Thread Title Hygiene"
11
+ "statusMessage": "(OmO 5.0.0-beta.4) Checking Thread Title Hygiene"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-teammode",
3
- "version": "5.0.0-beta.3",
3
+ "version": "5.0.0-beta.4",
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,