oh-my-opencode 5.0.0-beta.52 → 5.0.0-beta.53

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 (66) hide show
  1. package/README.ja.md +11 -18
  2. package/README.ko.md +10 -17
  3. package/README.md +11 -18
  4. package/README.ru.md +11 -18
  5. package/README.zh-cn.md +11 -18
  6. package/dist/cli/index.js +109 -42
  7. package/dist/cli-node/index.js +109 -42
  8. package/dist/index.js +1267 -1197
  9. package/dist/skills/refactor/SKILL.md +3 -3
  10. package/dist/skills/review-work/SKILL.md +1 -1
  11. package/dist/skills/ulw-execute/SKILL.md +5 -5
  12. package/dist/tui.js +73 -6
  13. package/package.json +14 -14
  14. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  15. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  16. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  17. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  18. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  19. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  20. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  21. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  22. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  23. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  24. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  25. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  26. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  27. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  28. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  29. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  30. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  31. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  32. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  33. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  34. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  35. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  36. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  37. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  38. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  39. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  40. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  41. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  42. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  43. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  44. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  45. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  46. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  47. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  48. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  49. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  50. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  51. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  52. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  53. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  54. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  55. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  56. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  57. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  58. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  59. package/packages/omo-codex/plugin/package-lock.json +12 -12
  60. package/packages/omo-codex/plugin/package.json +1 -1
  61. package/packages/omo-codex/plugin/skills/refactor/SKILL.md +3 -3
  62. package/packages/omo-codex/plugin/skills/ulw-execute/SKILL.md +5 -5
  63. package/packages/omo-codex/scripts/install-dist/install-local.mjs +2 -2
  64. package/packages/shared-skills/skills/refactor/SKILL.md +3 -3
  65. package/packages/shared-skills/skills/review-work/SKILL.md +1 -1
  66. package/packages/shared-skills/skills/ulw-execute/SKILL.md +5 -5
@@ -684,7 +684,7 @@ Record the chosen path in the TodoWrite list.
684
684
 
685
685
  Rationale for this composition:
686
686
  - **4 workers = team mode's parallel cap.** 5+ just queues.
687
- - **No verifier team member.** Verification needs \`deep\` reasoning (or \`unspecified-high\` fallback). In-team category routing downcasts to sisyphus-junior, which is weaker than required — the verifier runs OUTSIDE the team as a \`task(category="deep")\`.
687
+ - **No verifier team member.** Verification needs \`deep\` reasoning (or \`unspecified-high\` fallback). In-team category routing downcasts to the category worker, which is weaker than required — the verifier runs OUTSIDE the team as a \`task(category="deep")\`.
688
688
  - **quick × 2** for mechanical edits, **unspecified-low × 2** for reasoning edits — mirrors the plan's split.
689
689
 
690
690
  **Team lifecycle** (one team, reused until Phase 6 cleanup):
@@ -713,7 +713,7 @@ Rationale for this composition:
713
713
  While any team task is \`pending | claimed | in_progress\`:
714
714
 
715
715
  - Wait for \`<system-reminder>\` or member messages. Avoid tight polling; a single \`team_status\` check is acceptable if no notification arrives within roughly 10 seconds of expected completion.
716
- - On a worker completion report, immediately dispatch an **external verifier** — verification runs OUTSIDE the team because team-member category routing downcasts to sisyphus-junior:
716
+ - On a worker completion report, immediately dispatch an **external verifier** — verification runs OUTSIDE the team because team-member category routing downcasts to the category worker:
717
717
  \`\`\`
718
718
  task(
719
719
  category="deep",
@@ -750,5 +750,5 @@ Append to the 6.6 summary a "Dispatch path" line and, when team path was used, t
750
750
  - Do not inline the Intent Card or verify-spec into task descriptions — rely on the broadcasts.
751
751
  - Do not recreate the team mid-session.
752
752
  - Do not run tests from Lead — the external verifier owns that lane.
753
- - Do not put \`oracle\` / \`librarian\` / \`deep\` into the team spec — oracle/librarian are team-ineligible, and \`deep\` under category routing downcasts to sisyphus-junior. Use them via \`task()\` outside the team when needed.
753
+ - Do not put \`oracle\` / \`librarian\` / \`deep\` into the team spec — curated read-only agents are team-ineligible, and \`deep\` under category routing downcasts to the category worker. Use them via \`task()\` outside the team when needed.
754
754
  `
@@ -16,7 +16,7 @@ This skill may include examples copied from the OpenCode harness. In Codex, do n
16
16
  | `background_output(task_id="...")` | `multi_agent_v1.wait_agent(...)` for mailbox signals |
17
17
  | `team_*(...)` | Use Codex native subagents via `multi_agent_v1.spawn_agent` and `multi_agent_v1.wait_agent`; use `multi_agent_v1.send_input` and `multi_agent_v1.close_agent` only when exposed in the active tools list |
18
18
 
19
- Role-specific behavior must be described in a self-contained `message`. Use `fork_context: false` to start the child with only the initial prompt (no parent history); use `fork_context: true` only when full parent history is truly required. Include any required conversation context, files, diffs, constraints, and requested skill names directly in the spawned agent's `message`. OMO installs these selectable agent roles into `~/.codex/agents/`: `explorer`, `librarian`, `plan`, `momus`, `metis`, `lazycodex-code-reviewer`, `lazycodex-qa-executor`, and `lazycodex-gate-reviewer` — pass the matching name as `agent_type` so the child gets that role's model and instructions. If the spawn tool exposes no `agent_type` parameter, omit it and describe the role inside `message`. If a code block below conflicts with this section, this section wins.
19
+ Role-specific behavior must be described in a self-contained `message`. Use `fork_context: false` to start the child with only the initial prompt (no parent history); use `fork_context: true` only when full parent history is truly required. Include any required conversation context, files, diffs, constraints, and requested skill names directly in the spawned agent's `message`. OMO installs these selectable agent roles into `~/.codex/agents/`: `explorer`, `librarian`, `plan`, `momus`, `metis`, `lazycodex-code-reviewer`, `lazycodex-qa-executor`, and `lazycodex-gate-reviewer` — pass the matching name as `agent_type` so the child gets that role's model and instructions. If the spawn tool exposes no `agent_type` parameter, omit it and describe the role inside `message`. If a code block below conflicts with this section, this section wins. <!-- retired-name-allowed -->
20
20
 
21
21
  Codex exposes ONE of two subagent tool surfaces per session; check your own tool list and route accordingly. If `multi_agent_v1.*` tools exist, use the table above as written. If instead a flat `spawn_agent` with a required `task_name` exists (`multi_agent_v2`), rewrite every `multi_agent_v1.*` example: `multi_agent_v1.spawn_agent({...,"fork_context":false})` becomes `spawn_agent({"task_name":"<lowercase_digits_underscores>","message":...,"agent_type":...,"fork_turns":"none"})` (`"all"` only when full parent history is truly required); `send_input` becomes `send_message`; do not call `close_agent`/`resume_agent` (finished agents end on their own; `followup_task` re-tasks one, `interrupt_agent` stops one); `wait_agent` takes only `timeout_ms` and returns on any child mailbox activity. `agent_type` works the same on both surfaces. If a code block below conflicts with this section, this section wins.
22
22
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ulw-execute
3
- description: "Executes a written Prometheus work plan with Boulder state, evidence ledger, worktree discipline, and parallel subagents. Use when the user says ulw-execute or asks to run a .omo/plans plan."
3
+ description: "Executes a written ulw-plan work plan with Boulder state, evidence ledger, worktree discipline, and parallel subagents. Use when the user says ulw-execute or asks to run a .omo/plans plan."
4
4
  ---
5
5
 
6
6
  ## ABSOLUTE RULE: YOU ARE AN ORCHESTRATOR — NEVER THE IMPLEMENTER
@@ -33,7 +33,7 @@ Plan and reviewer agents may run for a long time: spawn them in the background a
33
33
 
34
34
  # ulw-execute
35
35
 
36
- Execute a Prometheus work plan until every top-level checkbox is complete. This skill pairs with the harness's ulw-execute continuation hook, which re-injects the next turn while `.omo/boulder.json` says this `codex:<session_id>` still has unchecked plan work.
36
+ Execute a work plan until every top-level checkbox is complete. This skill pairs with the harness's ulw-execute continuation hook, which re-injects the next turn while `.omo/boulder.json` says this `codex:<session_id>` still has unchecked plan work.
37
37
 
38
38
  ## Usage
39
39
 
@@ -57,7 +57,7 @@ Do ALL of this immediately after the plan is selected, BEFORE the first implemen
57
57
  ## Phase 1: Select the plan
58
58
 
59
59
  1. Read `.omo/boulder.json` if it exists.
60
- 2. List Prometheus plan files under `.omo/plans/`.
60
+ 2. List work plan files under `.omo/plans/`.
61
61
  3. If `plan-name` was provided, select the matching plan.
62
62
  4. If exactly one active or paused Boulder work exists for this session, resume it.
63
63
  5. If no active work exists and exactly one plan exists, select it.
@@ -69,7 +69,7 @@ Do ALL of this immediately after the plan is selected, BEFORE the first implemen
69
69
  When the user explicitly said `start work` / `$ulw-execute` and no selectable plan exists, treat that phrase as approval: bootstrap `ulw-plan` to create the approved plan before execution and implementation, instead of stalling or asking for generic approval again. A brief or notes file without waves, checkboxes, and acceptance criteria is NOT decision-complete — enter this bootstrap too.
70
70
 
71
71
  1. Invoke the `ulw-plan` skill from the current request and require its dynamic adversarial workflow: collect, verify, design, adversarial plan-review, synthesize.
72
- 2. The generated Prometheus plan must be saved under `.omo/plans/<slug>.md` before implementation or Boulder state writes that point at plan work.
72
+ 2. The generated work plan must be saved under `.omo/plans/<slug>.md` before implementation or Boulder state writes that point at plan work.
73
73
  3. Use maximum safe parallelism in the generated plan: independent files/tasks fan out; same-file writes, shared state, and named dependencies serialize.
74
74
  4. Preserve safety boundaries. Ask one focused question only when the objective is missing, destructive, or has a safety/product ambiguity that repository exploration cannot resolve.
75
75
  5. After the plan exists, continue directly to Phase 2.
@@ -181,7 +181,7 @@ For each checkbox, complete all five gates before marking it done:
181
181
 
182
182
  Append evidence to `.omo/ulw-execute/ledger.jsonl`, one JSON object per line. Include at least `event`, `plan`, `task`, `session_id`, `commands`, `artifact`, `adversarial_classes`, and `cleanup` fields. `adversarial_classes` lists each probed class with its observable result and each ruled-out class with a one-line reason.
183
183
 
184
- ### Sisyphus-style completion contract
184
+ ### Completion contract
185
185
 
186
186
  A worker done claim is never final: each implementation sub-task returns a `DoneClaim`, a different context runs `AdversarialVerify` probing or reproducing the claim, failures loop back to the executor, and only a confirmed verifier verdict becomes `FullyDone`.
187
187
 
package/dist/tui.js CHANGED
@@ -68206,6 +68206,25 @@ var init_model_catalog = __esm(() => {
68206
68206
  OmoModelCatalogLayerSchema = record(string2(), OmoModelCatalogEntryLayerSchema);
68207
68207
  });
68208
68208
 
68209
+ // packages/omo-config-core/src/schema/model-profile.ts
68210
+ function isRecord8(value) {
68211
+ return typeof value === "object" && value !== null && !Array.isArray(value);
68212
+ }
68213
+ var OmoModelProfileInputSchema, OmoModelProfileSchema, OmoModelProfilesSchema, OmoModelProfileLayerInputSchema, OmoModelProfileLayerSchema, OmoModelProfilesLayerSchema;
68214
+ var init_model_profile = __esm(() => {
68215
+ init_zod();
68216
+ init_fallback_models();
68217
+ OmoModelProfileInputSchema = object({
68218
+ display_name: string2().optional(),
68219
+ models: array(union([string2(), OmoFallbackModelObjectSchema])).optional()
68220
+ }).strict();
68221
+ OmoModelProfileSchema = preprocess((value) => isRecord8(value) ? normalizeLegacyModelFields(value) : value, OmoModelProfileInputSchema);
68222
+ OmoModelProfilesSchema = record(string2(), OmoModelProfileSchema);
68223
+ OmoModelProfileLayerInputSchema = OmoModelProfileInputSchema.partial();
68224
+ OmoModelProfileLayerSchema = preprocess((value) => isRecord8(value) ? normalizeLegacyModelFields(value) : value, OmoModelProfileLayerInputSchema);
68225
+ OmoModelProfilesLayerSchema = record(string2(), OmoModelProfileLayerSchema);
68226
+ });
68227
+
68209
68228
  // packages/omo-config-core/src/schema/task.ts
68210
68229
  import { availableParallelism } from "os";
68211
68230
  function resolveOmoTaskSettings(input, resolveParallelism = availableParallelism) {
@@ -68398,6 +68417,7 @@ var init_config = __esm(() => {
68398
68417
  init_git_master();
68399
68418
  init_memory();
68400
68419
  init_model_catalog();
68420
+ init_model_profile();
68401
68421
  init_task();
68402
68422
  init_team();
68403
68423
  init_telemetry();
@@ -68411,6 +68431,8 @@ var init_config = __esm(() => {
68411
68431
  task: OmoTaskSettingsLayerSchema.optional(),
68412
68432
  teams: OmoTeamsConfigLayerSchema.optional(),
68413
68433
  models: OmoModelCatalogLayerSchema.optional(),
68434
+ model_profiles: OmoModelProfilesLayerSchema.optional(),
68435
+ model_profile: string2().optional(),
68414
68436
  memory: OmoMemorySettingsLayerSchema.optional(),
68415
68437
  telemetry: OmoTelemetrySettingsLayerSchema.optional()
68416
68438
  }).strict();
@@ -68422,6 +68444,8 @@ var init_config = __esm(() => {
68422
68444
  task: OmoTaskSettingsLayerSchema.optional(),
68423
68445
  teams: OmoTeamsConfigLayerSchema.optional(),
68424
68446
  models: OmoModelCatalogLayerSchema.optional(),
68447
+ model_profiles: OmoModelProfilesLayerSchema.optional(),
68448
+ model_profile: string2().optional(),
68425
68449
  memory: OmoMemorySettingsLayerSchema.optional(),
68426
68450
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
68427
68451
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
@@ -68437,6 +68461,8 @@ var init_config = __esm(() => {
68437
68461
  task: OmoTaskSettingsSchema.optional(),
68438
68462
  teams: OmoTeamsConfigSchema.optional(),
68439
68463
  models: OmoModelCatalogSchema.optional(),
68464
+ model_profiles: OmoModelProfilesSchema.optional(),
68465
+ model_profile: string2().optional(),
68440
68466
  memory: OmoMemorySettingsSchema.optional(),
68441
68467
  telemetry: OmoTelemetrySettingsSchema.optional(),
68442
68468
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
@@ -68455,6 +68481,8 @@ var init_config = __esm(() => {
68455
68481
  task: OmoTaskSettingsLayerSchema.optional(),
68456
68482
  teams: OmoTeamsConfigLayerSchema.optional(),
68457
68483
  models: OmoModelCatalogLayerSchema.optional(),
68484
+ model_profiles: OmoModelProfilesLayerSchema.optional(),
68485
+ model_profile: string2().optional(),
68458
68486
  memory: OmoMemorySettingsLayerSchema.optional(),
68459
68487
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
68460
68488
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
@@ -68477,6 +68505,7 @@ var init_schema = __esm(() => {
68477
68505
  init_harness();
68478
68506
  init_memory();
68479
68507
  init_model_catalog();
68508
+ init_model_profile();
68480
68509
  init_model_ref();
68481
68510
  init_task();
68482
68511
  init_team();
@@ -68730,21 +68759,21 @@ function hasUnsafeUnrecognizedKey(issues) {
68730
68759
  function hasTamperedPrototype(value) {
68731
68760
  if (Array.isArray(value))
68732
68761
  return value.some((entry) => hasTamperedPrototype(entry));
68733
- if (!isRecord8(value))
68762
+ if (!isRecord9(value))
68734
68763
  return false;
68735
68764
  const prototype = Object.getPrototypeOf(value);
68736
68765
  if (prototype !== Object.prototype && prototype !== null)
68737
68766
  return true;
68738
68767
  return Object.values(value).some((entry) => hasTamperedPrototype(entry));
68739
68768
  }
68740
- function isRecord8(value) {
68769
+ function isRecord9(value) {
68741
68770
  return typeof value === "object" && value !== null && !Array.isArray(value);
68742
68771
  }
68743
68772
  function containerAt(record, path) {
68744
68773
  let container = record;
68745
68774
  for (const segment of path) {
68746
68775
  const next = container[segment];
68747
- if (!isRecord8(next))
68776
+ if (!isRecord9(next))
68748
68777
  return null;
68749
68778
  container = next;
68750
68779
  }
@@ -69006,6 +69035,38 @@ function resolveCategoryDefinition(definition, catalog, cycleNames) {
69006
69035
  ...definition.fallback_models === undefined ? {} : { fallback_models: resolveFallbackModels(definition.fallback_models, catalog, cycleNames) }
69007
69036
  };
69008
69037
  }
69038
+ function resolveModelProfile(definition, catalog, cycleNames) {
69039
+ return {
69040
+ ...definition,
69041
+ ...definition.models === undefined ? {} : { models: definition.models.map((entry) => resolveModelEntry(entry, catalog, cycleNames)) }
69042
+ };
69043
+ }
69044
+ function profileShadowDiagnostics(view) {
69045
+ if (view.model_profiles === undefined || view.models === undefined)
69046
+ return [];
69047
+ return Object.keys(view.model_profiles).flatMap((name) => view.models?.[name] === undefined ? [] : [{
69048
+ kind: "validation",
69049
+ message: `Model profile "${name}" shadows a model catalog entry of the same name`,
69050
+ path: `model_profiles.${name}`
69051
+ }]);
69052
+ }
69053
+ function profileSpliceDiagnostics(section, definitions, profileNames) {
69054
+ if (definitions === undefined || profileNames.size === 0)
69055
+ return [];
69056
+ return Object.entries(definitions).flatMap(([name, definition]) => (definition.models ?? []).flatMap((entry, index) => typeof entry !== "string" || !profileNames.has(entry) ? [] : [{
69057
+ kind: "validation",
69058
+ message: `"${entry}" is a model profile; splicing a profile into a category chain is not supported yet`,
69059
+ path: `${section}.${name}.models.${index}`
69060
+ }]));
69061
+ }
69062
+ function modelProfileDiagnostics(view) {
69063
+ const profileNames = new Set(Object.keys(view.model_profiles ?? {}));
69064
+ return [
69065
+ ...profileShadowDiagnostics(view),
69066
+ ...profileSpliceDiagnostics("categories", view.categories, profileNames),
69067
+ ...profileSpliceDiagnostics("agents", view.agents, profileNames)
69068
+ ];
69069
+ }
69009
69070
  function cycleDiagnostics(catalog) {
69010
69071
  if (catalog === undefined)
69011
69072
  return [];
@@ -69016,9 +69077,10 @@ function cycleDiagnostics(catalog) {
69016
69077
  }));
69017
69078
  }
69018
69079
  function resolveModelReferences(view) {
69019
- const diagnostics = cycleDiagnostics(view.models);
69080
+ const cycles = cycleDiagnostics(view.models);
69081
+ const diagnostics = [...cycles, ...modelProfileDiagnostics(view)];
69020
69082
  const cycleNames = new Set;
69021
- for (const diagnostic of diagnostics) {
69083
+ for (const diagnostic of cycles) {
69022
69084
  const name = diagnostic.path.split(".")[1];
69023
69085
  if (name !== undefined)
69024
69086
  cycleNames.add(name);
@@ -69031,12 +69093,17 @@ function resolveModelReferences(view) {
69031
69093
  name,
69032
69094
  resolveCategoryDefinition(definition, view.models, cycleNames)
69033
69095
  ]));
69096
+ const modelProfiles = view.model_profiles === undefined ? undefined : Object.fromEntries(Object.entries(view.model_profiles).map(([name, definition]) => [
69097
+ name,
69098
+ resolveModelProfile(definition, view.models, cycleNames)
69099
+ ]));
69034
69100
  return {
69035
69101
  diagnostics,
69036
69102
  view: {
69037
69103
  ...view,
69038
69104
  ...agents === undefined ? {} : { agents },
69039
- ...categories === undefined ? {} : { categories }
69105
+ ...categories === undefined ? {} : { categories },
69106
+ ...modelProfiles === undefined ? {} : { model_profiles: modelProfiles }
69040
69107
  }
69041
69108
  };
69042
69109
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-opencode",
3
- "version": "5.0.0-beta.52",
3
+ "version": "5.0.0-beta.53",
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",
@@ -184,7 +184,7 @@
184
184
  "zod": "^4.4.3"
185
185
  },
186
186
  "devDependencies": {
187
- "@code-yeongyu/senpi": "2026.9.10",
187
+ "@code-yeongyu/senpi": "2026.9.10-2",
188
188
  "@oh-my-opencode/agents-md-core": "workspace:*",
189
189
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
190
190
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -225,18 +225,18 @@
225
225
  "typescript": "^7.0.2"
226
226
  },
227
227
  "optionalDependencies": {
228
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.52",
229
- "oh-my-opencode-darwin-x64": "5.0.0-beta.52",
230
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.52",
231
- "oh-my-opencode-linux-arm64": "5.0.0-beta.52",
232
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.52",
233
- "oh-my-opencode-linux-x64": "5.0.0-beta.52",
234
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.52",
235
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.52",
236
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.52",
237
- "oh-my-opencode-windows-arm64": "5.0.0-beta.52",
238
- "oh-my-opencode-windows-x64": "5.0.0-beta.52",
239
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.52"
228
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.53",
229
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.53",
230
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.53",
231
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.53",
232
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.53",
233
+ "oh-my-opencode-linux-x64": "5.0.0-beta.53",
234
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.53",
235
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.53",
236
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.53",
237
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.53",
238
+ "oh-my-opencode-windows-x64": "5.0.0-beta.53",
239
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.53"
240
240
  },
241
241
  "overrides": {
242
242
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omo",
3
- "version": "5.0.0-beta.52",
3
+ "version": "5.0.0-beta.53",
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.52) Checking Bootstrap Provisioning"
11
+ "statusMessage": "(OmO 5.0.0-beta.53) 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.52",
3
+ "version": "5.0.0-beta.53",
4
4
  "description": "Codex SessionStart bootstrap component that provisions LazyCodex runtime dependencies from a detached worker.",
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.52) Checking Comments"
11
+ "statusMessage": "(OmO 5.0.0-beta.53) 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.52",
3
+ "version": "5.0.0-beta.53",
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.52) Recommending Git Bash MCP"
11
+ "statusMessage": "(OmO 5.0.0-beta.53) 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.52) Resetting Git Bash MCP Reminder"
23
+ "statusMessage": "(OmO 5.0.0-beta.53) 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.52",
3
+ "version": "5.0.0-beta.53",
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.52) Verifying LazyCodex Executor Evidence"
11
+ "statusMessage": "(OmO 5.0.0-beta.53) 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.52",
3
+ "version": "5.0.0-beta.53",
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.52",
4
- "inputDigest": "sha256:8674d4fcd17586aabee0cf663798fa9c40792359db3eca9bb5f99c88594f89df",
3
+ "version": "5.0.0-beta.53",
4
+ "inputDigest": "sha256:f202c8adb130249d2a7745db228ccd528b47f0cfeaeb5db5c99ab13d9b76af00",
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.52) Checking LSP Diagnostics"
11
+ "statusMessage": "(OmO 5.0.0-beta.53) 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.52) Resetting LSP Diagnostics Cache"
24
+ "statusMessage": "(OmO 5.0.0-beta.53) 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.52",
3
+ "version": "5.0.0-beta.53",
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.52) Loading Project Rules"
10
+ "statusMessage": "(OmO 5.0.0-beta.53) 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.52) Loading Project Rules"
22
+ "statusMessage": "(OmO 5.0.0-beta.53) 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.52) Matching Project Rules"
35
+ "statusMessage": "(OmO 5.0.0-beta.53) 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.52) Resetting Project Rule Cache"
48
+ "statusMessage": "(OmO 5.0.0-beta.53) 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.52",
3
+ "version": "5.0.0-beta.53",
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",
@@ -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.52) Checking Thread Title Hygiene"
11
+ "statusMessage": "(OmO 5.0.0-beta.53) 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.52",
3
+ "version": "5.0.0-beta.53",
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 5.0.0-beta.52) Recording Session Telemetry"
10
+ "statusMessage": "(OmO 5.0.0-beta.53) Recording Session Telemetry"
11
11
  }
12
12
  ]
13
13
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-telemetry",
3
- "version": "5.0.0-beta.52",
3
+ "version": "5.0.0-beta.53",
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",
@@ -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 5.0.0-beta.52) Checking Ultrawork Trigger"
10
+ "statusMessage": "(OmO 5.0.0-beta.53) Checking Ultrawork Trigger"
11
11
  }
12
12
  ]
13
13
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-ultrawork",
3
- "version": "5.0.0-beta.52",
3
+ "version": "5.0.0-beta.53",
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",
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/ulw-execute-continuation/dist/cli.js\" hook stop",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.0-beta.52) Checking Ulw-Execute Continuation"
10
+ "statusMessage": "(OmO 5.0.0-beta.53) Checking Ulw-Execute Continuation"
11
11
  }
12
12
  ]
13
13
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-ulw-execute-continuation",
3
- "version": "5.0.0-beta.52",
3
+ "version": "5.0.0-beta.53",
4
4
  "description": "Codex Stop hook continuation injector for omo-codex ulw-execute plans.",
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 user-prompt-submit --with-ultrawork",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.0-beta.52) Checking Ulw-Loop Steering"
10
+ "statusMessage": "(OmO 5.0.0-beta.53) Checking Ulw-Loop Steering"
11
11
  }
12
12
  ]
13
13
  }
@@ -20,7 +20,7 @@
20
20
  "type": "command",
21
21
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use-spawn",
22
22
  "timeout": 5,
23
- "statusMessage": "(OmO 5.0.0-beta.52) Recording Spawn Admission"
23
+ "statusMessage": "(OmO 5.0.0-beta.53) Recording Spawn Admission"
24
24
  }
25
25
  ]
26
26
  }
@@ -33,7 +33,7 @@
33
33
  "type": "command",
34
34
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook pre-tool-use",
35
35
  "timeout": 5,
36
- "statusMessage": "(OmO 5.0.0-beta.52) Enforcing Unlimited Ulw-Loop Budget"
36
+ "statusMessage": "(OmO 5.0.0-beta.53) Enforcing Unlimited Ulw-Loop Budget"
37
37
  }
38
38
  ]
39
39
  },
@@ -44,7 +44,7 @@
44
44
  "type": "command",
45
45
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook pre-tool-use-spawn",
46
46
  "timeout": 5,
47
- "statusMessage": "(OmO 5.0.0-beta.52) Guarding Ulw-Loop Spawns"
47
+ "statusMessage": "(OmO 5.0.0-beta.53) Guarding Ulw-Loop Spawns"
48
48
  }
49
49
  ]
50
50
  }
@@ -56,7 +56,7 @@
56
56
  "type": "command",
57
57
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook stop",
58
58
  "timeout": 10,
59
- "statusMessage": "(OmO 5.0.0-beta.52) Checking Ulw-Loop Resume"
59
+ "statusMessage": "(OmO 5.0.0-beta.53) Checking Ulw-Loop Resume"
60
60
  }
61
61
  ]
62
62
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-ulw-loop",
3
- "version": "5.0.0-beta.52",
3
+ "version": "5.0.0-beta.53",
4
4
  "description": "Codex plugin: durable repo-native multi-goal orchestration with embedded success criteria and observable evidence audit.",
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}/components/git-bash/dist/cli.js\" hook post-compact",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.0.0-beta.52) Resetting Git Bash MCP Reminder",
10
+ "statusMessage": "(OmO 5.0.0-beta.53) Resetting Git Bash MCP Reminder",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\git-bash\\dist\\cli.js\" hook post-compact"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/lsp/dist/cli.js\" hook post-compact",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.0.0-beta.52) Resetting LSP Diagnostics Cache",
10
+ "statusMessage": "(OmO 5.0.0-beta.53) Resetting LSP Diagnostics Cache",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\lsp\\dist\\cli.js\" hook post-compact"
12
12
  }
13
13
  ],