oh-my-openagent 5.1.5 → 5.1.7

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 (93) hide show
  1. package/dist/cli/index.js +41 -17
  2. package/dist/cli/run/runnable-agent-resolver.d.ts +3 -0
  3. package/dist/cli-node/index.js +41 -17
  4. package/dist/hooks/goal/validation.d.ts +1 -0
  5. package/dist/hooks/no-hephaestus-non-gpt/hook.d.ts +4 -0
  6. package/dist/index.js +78 -36
  7. package/dist/plugin/chat-message/loop-commands.d.ts +1 -0
  8. package/dist/skills/browser/runtime/omowright/manifest.json +1 -1
  9. package/dist/skills/ulw-execute/SKILL.md +1 -1
  10. package/dist/tui.js +14 -14
  11. package/package.json +14 -14
  12. package/packages/lsp-core/src/post-edit/file-location.ts +7 -2
  13. package/packages/lsp-core/src/post-edit/not-installed.test.ts +25 -0
  14. package/packages/lsp-core/src/tool-surface.test.ts +11 -11
  15. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  16. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +7 -0
  17. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  18. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  19. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  20. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  21. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  22. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  23. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  24. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  25. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  26. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  27. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  28. package/packages/omo-codex/plugin/components/rules/README.md +0 -1
  29. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.5.md +1 -1
  30. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.6.md +1 -1
  31. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-6.md +1 -1
  32. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  33. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  34. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  35. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  36. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  37. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  38. package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +25 -18
  39. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  40. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  41. package/packages/omo-codex/plugin/components/ultrawork/src/directive-content.ts +1 -1
  42. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  43. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  44. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +25 -18
  45. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  46. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  47. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-role-matrix.test.ts +16 -0
  48. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  49. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  50. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  51. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  52. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  53. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  54. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  55. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  56. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  57. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  58. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  59. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  60. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  61. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  62. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  63. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  64. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  65. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  66. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  67. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  68. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  69. package/packages/omo-codex/plugin/package-lock.json +12 -12
  70. package/packages/omo-codex/plugin/package.json +1 -1
  71. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +1 -1
  72. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +25 -18
  73. package/packages/omo-codex/plugin/skills/ulw-execute/SKILL.md +1 -1
  74. package/packages/omo-codex/scripts/install-config-autonomous-features.test.mjs +24 -4
  75. package/packages/omo-codex/scripts/install-dist/install-local.mjs +9 -2
  76. package/packages/prompts-core/prompts/ultrawork/codex.md +25 -18
  77. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
  78. package/packages/shared-skills/skills/ulw-execute/SKILL.md +1 -1
  79. package/dist/features/team-mode/team-layout-tmux/close-team-member-pane.d.ts +0 -1
  80. package/dist/features/team-mode/team-tasklist/claim.d.ts +0 -1
  81. package/dist/features/team-mode/team-tasklist/dependencies.d.ts +0 -1
  82. package/dist/features/team-mode/team-tasklist/get.d.ts +0 -1
  83. package/dist/features/team-mode/team-tasklist/store.d.ts +0 -1
  84. package/dist/features/team-mode/team-tasklist/update.d.ts +0 -1
  85. package/dist/hooks/hashline-edit-diff-enhancer/hook.d.ts +0 -29
  86. package/dist/hooks/hashline-edit-diff-enhancer/pending-captures.d.ts +0 -13
  87. package/dist/openclaw/config.d.ts +0 -1
  88. package/dist/openclaw/dispatcher.d.ts +0 -1
  89. package/dist/openclaw/gateway-url-validation.d.ts +0 -1
  90. package/dist/openclaw/reply-listener-injection.d.ts +0 -1
  91. package/dist/openclaw/reply-listener-start.d.ts +0 -1
  92. package/dist/openclaw/session-registry.d.ts +0 -1
  93. package/dist/openclaw/tmux.d.ts +0 -1
package/dist/cli/index.js CHANGED
@@ -64,7 +64,7 @@ var package_default;
64
64
  var init_package = __esm(() => {
65
65
  package_default = {
66
66
  name: "oh-my-opencode",
67
- version: "5.1.5",
67
+ version: "5.1.7",
68
68
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
69
69
  main: "./dist/index.js",
70
70
  types: "dist/index.d.ts",
@@ -241,7 +241,7 @@ var init_package = __esm(() => {
241
241
  },
242
242
  devDependencies: {
243
243
  "@clack/prompts": "^1.8.1",
244
- "@code-yeongyu/senpi": "2026.9.29-5",
244
+ "@code-yeongyu/senpi": "2026.9.30",
245
245
  "@modelcontextprotocol/sdk": "^1.30.0",
246
246
  "@oh-my-opencode/agents-md-core": "workspace:*",
247
247
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
@@ -299,18 +299,18 @@ var init_package = __esm(() => {
299
299
  typescript: "^7.0.2"
300
300
  },
301
301
  optionalDependencies: {
302
- "oh-my-opencode-darwin-arm64": "5.1.5",
303
- "oh-my-opencode-darwin-x64": "5.1.5",
304
- "oh-my-opencode-darwin-x64-baseline": "5.1.5",
305
- "oh-my-opencode-linux-arm64": "5.1.5",
306
- "oh-my-opencode-linux-arm64-musl": "5.1.5",
307
- "oh-my-opencode-linux-x64": "5.1.5",
308
- "oh-my-opencode-linux-x64-baseline": "5.1.5",
309
- "oh-my-opencode-linux-x64-musl": "5.1.5",
310
- "oh-my-opencode-linux-x64-musl-baseline": "5.1.5",
311
- "oh-my-opencode-windows-arm64": "5.1.5",
312
- "oh-my-opencode-windows-x64": "5.1.5",
313
- "oh-my-opencode-windows-x64-baseline": "5.1.5"
302
+ "oh-my-opencode-darwin-arm64": "5.1.7",
303
+ "oh-my-opencode-darwin-x64": "5.1.7",
304
+ "oh-my-opencode-darwin-x64-baseline": "5.1.7",
305
+ "oh-my-opencode-linux-arm64": "5.1.7",
306
+ "oh-my-opencode-linux-arm64-musl": "5.1.7",
307
+ "oh-my-opencode-linux-x64": "5.1.7",
308
+ "oh-my-opencode-linux-x64-baseline": "5.1.7",
309
+ "oh-my-opencode-linux-x64-musl": "5.1.7",
310
+ "oh-my-opencode-linux-x64-musl-baseline": "5.1.7",
311
+ "oh-my-opencode-windows-arm64": "5.1.7",
312
+ "oh-my-opencode-windows-x64": "5.1.7",
313
+ "oh-my-opencode-windows-x64-baseline": "5.1.7"
314
314
  },
315
315
  overrides: {
316
316
  hono: "^4.13.8",
@@ -89377,7 +89377,7 @@ var package_default2;
89377
89377
  var init_package2 = __esm(() => {
89378
89378
  package_default2 = {
89379
89379
  name: "@oh-my-opencode/omo-codex",
89380
- version: "5.1.5",
89380
+ version: "5.1.7",
89381
89381
  type: "module",
89382
89382
  private: true,
89383
89383
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -95097,6 +95097,12 @@ ${featureName} = true
95097
95097
  }
95098
95098
  return replaceOrInsertSetting(config, section, featureName, "true");
95099
95099
  }
95100
+ function removeFeature(config, featureName) {
95101
+ const section = findTomlSection(config, "features");
95102
+ if (section !== null)
95103
+ return removeSetting(config, section, featureName);
95104
+ return removeRootSetting(config, `features.${featureName}`);
95105
+ }
95100
95106
 
95101
95107
  // packages/omo-codex/src/install/codex-config-marketplaces.ts
95102
95108
  var SISYPHUS_LEGACY_MARKETPLACES = ["lazycodex", "code-yeongyu-codex-plugins"];
@@ -95689,6 +95695,7 @@ async function updateCodexConfig(input) {
95689
95695
  config = ensureFeatureEnabled(config, "plugins");
95690
95696
  config = ensureFeatureEnabled(config, "plugin_hooks");
95691
95697
  config = ensureFeatureEnabled(config, "multi_agent");
95698
+ config = removeFeature(config, "child_agents_md");
95692
95699
  config = removeUnsupportedCodexMultiAgentModeConfig(config);
95693
95700
  config = ensureCodexReasoningConfig(config, applyReasoningOverride(await readCodexModelCatalog(input.repoRoot), input.reasoning));
95694
95701
  config = ensureCodexMultiAgentV2Config(config, {
@@ -105346,12 +105353,25 @@ async function resolveRunnableRunAgent(client, resolvedAgent, config = {}) {
105346
105353
  })?.name;
105347
105354
  if (configuredAgent)
105348
105355
  return configuredAgent;
105349
- return agents.find((agent) => {
105356
+ const matched = agents.find((agent) => {
105350
105357
  if (!agent.name)
105351
105358
  return false;
105352
105359
  return getAgentConfigKey(agent.name) === resolvedConfigKey;
105353
- })?.name ?? resolvedAgent;
105360
+ })?.name;
105361
+ if (matched)
105362
+ return matched;
105363
+ const registered = agents.map((agent) => agent.name).filter((name) => Boolean(name));
105364
+ const parsedCategory = BuiltinCategoryNameSchema.safeParse(resolvedConfigKey);
105365
+ if (parsedCategory.success) {
105366
+ throw new UnknownRunAgentError(`"${resolvedAgent}" is a task() category, not a CLI agent. Categories: ${BuiltinCategoryNameSchema.options.join(", ")}. Runnable agents: ${registered.join(", ") || "(none)"}.`);
105367
+ }
105368
+ if (registered.length > 0) {
105369
+ throw new UnknownRunAgentError(`Unknown agent "${resolvedAgent}". Runnable agents: ${registered.join(", ")}.`);
105370
+ }
105371
+ return resolvedAgent;
105354
105372
  } catch (error) {
105373
+ if (error instanceof UnknownRunAgentError)
105374
+ throw error;
105355
105375
  if (!(error instanceof Error)) {
105356
105376
  throw error;
105357
105377
  }
@@ -105359,6 +105379,10 @@ async function resolveRunnableRunAgent(client, resolvedAgent, config = {}) {
105359
105379
  }
105360
105380
  }
105361
105381
 
105382
+ class UnknownRunAgentError extends Error {
105383
+ name = "UnknownRunAgentError";
105384
+ }
105385
+
105362
105386
  // packages/omo-opencode/src/cli/run/runner.ts
105363
105387
  var EVENT_PROCESSOR_SHUTDOWN_TIMEOUT_MS = 2000;
105364
105388
  async function waitForEventProcessorShutdown(eventProcessor, timeoutMs = EVENT_PROCESSOR_SHUTDOWN_TIMEOUT_MS) {
@@ -9,3 +9,6 @@ export interface RunAgentDisplayNameConfig {
9
9
  } | undefined>>;
10
10
  }
11
11
  export declare function resolveRunnableRunAgent(client: RunAgentListClient, resolvedAgent: string, config?: RunAgentDisplayNameConfig): Promise<string>;
12
+ export declare class UnknownRunAgentError extends Error {
13
+ readonly name = "UnknownRunAgentError";
14
+ }
@@ -65,7 +65,7 @@ var package_default;
65
65
  var init_package = __esm(() => {
66
66
  package_default = {
67
67
  name: "oh-my-opencode",
68
- version: "5.1.5",
68
+ version: "5.1.7",
69
69
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
70
70
  main: "./dist/index.js",
71
71
  types: "dist/index.d.ts",
@@ -242,7 +242,7 @@ var init_package = __esm(() => {
242
242
  },
243
243
  devDependencies: {
244
244
  "@clack/prompts": "^1.8.1",
245
- "@code-yeongyu/senpi": "2026.9.29-5",
245
+ "@code-yeongyu/senpi": "2026.9.30",
246
246
  "@modelcontextprotocol/sdk": "^1.30.0",
247
247
  "@oh-my-opencode/agents-md-core": "workspace:*",
248
248
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
@@ -300,18 +300,18 @@ var init_package = __esm(() => {
300
300
  typescript: "^7.0.2"
301
301
  },
302
302
  optionalDependencies: {
303
- "oh-my-opencode-darwin-arm64": "5.1.5",
304
- "oh-my-opencode-darwin-x64": "5.1.5",
305
- "oh-my-opencode-darwin-x64-baseline": "5.1.5",
306
- "oh-my-opencode-linux-arm64": "5.1.5",
307
- "oh-my-opencode-linux-arm64-musl": "5.1.5",
308
- "oh-my-opencode-linux-x64": "5.1.5",
309
- "oh-my-opencode-linux-x64-baseline": "5.1.5",
310
- "oh-my-opencode-linux-x64-musl": "5.1.5",
311
- "oh-my-opencode-linux-x64-musl-baseline": "5.1.5",
312
- "oh-my-opencode-windows-arm64": "5.1.5",
313
- "oh-my-opencode-windows-x64": "5.1.5",
314
- "oh-my-opencode-windows-x64-baseline": "5.1.5"
303
+ "oh-my-opencode-darwin-arm64": "5.1.7",
304
+ "oh-my-opencode-darwin-x64": "5.1.7",
305
+ "oh-my-opencode-darwin-x64-baseline": "5.1.7",
306
+ "oh-my-opencode-linux-arm64": "5.1.7",
307
+ "oh-my-opencode-linux-arm64-musl": "5.1.7",
308
+ "oh-my-opencode-linux-x64": "5.1.7",
309
+ "oh-my-opencode-linux-x64-baseline": "5.1.7",
310
+ "oh-my-opencode-linux-x64-musl": "5.1.7",
311
+ "oh-my-opencode-linux-x64-musl-baseline": "5.1.7",
312
+ "oh-my-opencode-windows-arm64": "5.1.7",
313
+ "oh-my-opencode-windows-x64": "5.1.7",
314
+ "oh-my-opencode-windows-x64-baseline": "5.1.7"
315
315
  },
316
316
  overrides: {
317
317
  hono: "^4.13.8",
@@ -89456,7 +89456,7 @@ var package_default2;
89456
89456
  var init_package2 = __esm(() => {
89457
89457
  package_default2 = {
89458
89458
  name: "@oh-my-opencode/omo-codex",
89459
- version: "5.1.5",
89459
+ version: "5.1.7",
89460
89460
  type: "module",
89461
89461
  private: true,
89462
89462
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -95176,6 +95176,12 @@ ${featureName} = true
95176
95176
  }
95177
95177
  return replaceOrInsertSetting(config, section, featureName, "true");
95178
95178
  }
95179
+ function removeFeature(config, featureName) {
95180
+ const section = findTomlSection(config, "features");
95181
+ if (section !== null)
95182
+ return removeSetting(config, section, featureName);
95183
+ return removeRootSetting(config, `features.${featureName}`);
95184
+ }
95179
95185
 
95180
95186
  // packages/omo-codex/src/install/codex-config-marketplaces.ts
95181
95187
  var SISYPHUS_LEGACY_MARKETPLACES = ["lazycodex", "code-yeongyu-codex-plugins"];
@@ -95768,6 +95774,7 @@ async function updateCodexConfig(input) {
95768
95774
  config = ensureFeatureEnabled(config, "plugins");
95769
95775
  config = ensureFeatureEnabled(config, "plugin_hooks");
95770
95776
  config = ensureFeatureEnabled(config, "multi_agent");
95777
+ config = removeFeature(config, "child_agents_md");
95771
95778
  config = removeUnsupportedCodexMultiAgentModeConfig(config);
95772
95779
  config = ensureCodexReasoningConfig(config, applyReasoningOverride(await readCodexModelCatalog(input.repoRoot), input.reasoning));
95773
95780
  config = ensureCodexMultiAgentV2Config(config, {
@@ -105425,12 +105432,25 @@ async function resolveRunnableRunAgent(client, resolvedAgent, config = {}) {
105425
105432
  })?.name;
105426
105433
  if (configuredAgent)
105427
105434
  return configuredAgent;
105428
- return agents.find((agent) => {
105435
+ const matched = agents.find((agent) => {
105429
105436
  if (!agent.name)
105430
105437
  return false;
105431
105438
  return getAgentConfigKey(agent.name) === resolvedConfigKey;
105432
- })?.name ?? resolvedAgent;
105439
+ })?.name;
105440
+ if (matched)
105441
+ return matched;
105442
+ const registered = agents.map((agent) => agent.name).filter((name) => Boolean(name));
105443
+ const parsedCategory = BuiltinCategoryNameSchema.safeParse(resolvedConfigKey);
105444
+ if (parsedCategory.success) {
105445
+ throw new UnknownRunAgentError(`"${resolvedAgent}" is a task() category, not a CLI agent. Categories: ${BuiltinCategoryNameSchema.options.join(", ")}. Runnable agents: ${registered.join(", ") || "(none)"}.`);
105446
+ }
105447
+ if (registered.length > 0) {
105448
+ throw new UnknownRunAgentError(`Unknown agent "${resolvedAgent}". Runnable agents: ${registered.join(", ")}.`);
105449
+ }
105450
+ return resolvedAgent;
105433
105451
  } catch (error) {
105452
+ if (error instanceof UnknownRunAgentError)
105453
+ throw error;
105434
105454
  if (!(error instanceof Error)) {
105435
105455
  throw error;
105436
105456
  }
@@ -105438,6 +105458,10 @@ async function resolveRunnableRunAgent(client, resolvedAgent, config = {}) {
105438
105458
  }
105439
105459
  }
105440
105460
 
105461
+ class UnknownRunAgentError extends Error {
105462
+ name = "UnknownRunAgentError";
105463
+ }
105464
+
105441
105465
  // packages/omo-opencode/src/cli/run/runner.ts
105442
105466
  var EVENT_PROCESSOR_SHUTDOWN_TIMEOUT_MS = 2000;
105443
105467
  async function waitForEventProcessorShutdown(eventProcessor, timeoutMs = EVENT_PROCESSOR_SHUTDOWN_TIMEOUT_MS) {
@@ -1,3 +1,4 @@
1
+ export declare const MAX_OBJECTIVE_LENGTH = 2000;
1
2
  export declare class InvalidObjectiveError extends Error {
2
3
  constructor(message: string);
3
4
  }
@@ -2,6 +2,10 @@ import type { PluginInput } from "@opencode-ai/plugin";
2
2
  type NoHephaestusNonGptHookOptions = {
3
3
  allowNonGptModel?: boolean;
4
4
  };
5
+ export declare class HephaestusRequiresGptError extends Error {
6
+ readonly name = "HephaestusRequiresGptError";
7
+ constructor(modelID: string);
8
+ }
5
9
  export declare function createNoHephaestusNonGptHook(ctx: PluginInput, options?: NoHephaestusNonGptHookOptions): {
6
10
  "chat.message": (input: {
7
11
  sessionID: string;
package/dist/index.js CHANGED
@@ -7901,7 +7901,7 @@ var init_powershell_zip_entry_listing = __esm(() => {
7901
7901
 
7902
7902
  // packages/utils/src/zip-entry-listing/tar-zip-entry-listing.ts
7903
7903
  function parseTarListedZipEntry(line) {
7904
- const match = line.match(/^([^\s])\S*\s+\d+\s+\S+\s+\S+\s+\d+\s+\w+\s+\d+\s+(?:\d{2}:\d{2}|\d{4})\s+(.*)$/);
7904
+ const match = line.match(/^([^\s])\S*\s+\d+\s+\S+\s+\S+\s+\d+\s+\S+\s+\d+\s+(?:\d{2}:\d{2}|\d{4})\s+(.*)$/);
7905
7905
  if (!match) {
7906
7906
  return null;
7907
7907
  }
@@ -91935,11 +91935,6 @@ function resolveStartDir(startPath) {
91935
91935
  function hasProjectMarker(directory) {
91936
91936
  return PROJECT_MARKERS.some((marker) => existsSync41(join52(directory, marker)));
91937
91937
  }
91938
- // packages/agents-md-core/src/constants.ts
91939
- var TRUNCATION_NOTICE_PREFIX = `
91940
-
91941
- [Note: Content was truncated to save context window space. For full context, please read the file directly: `;
91942
- var TRUNCATION_NOTICE_SUFFIX = "]";
91943
91938
  // packages/agents-md-core/src/finder.ts
91944
91939
  import { realpathSync as realpathSync10 } from "fs";
91945
91940
  import { isAbsolute as isAbsolute9, relative as relative11, resolve as resolve13 } from "path";
@@ -91965,6 +91960,12 @@ function isSameOrChildPath3(childPath, parentPath) {
91965
91960
  const relativePath = relative11(parentPath, childPath);
91966
91961
  return relativePath === "" || !relativePath.startsWith("..") && !isAbsolute9(relativePath);
91967
91962
  }
91963
+ // packages/agents-md-core/src/constants.ts
91964
+ var TRUNCATION_NOTICE_PREFIX = `
91965
+
91966
+ [Note: Content was truncated to save context window space. For full context, please read the file directly: `;
91967
+ var TRUNCATION_NOTICE_SUFFIX = "]";
91968
+
91968
91969
  // packages/agents-md-core/src/formatter.ts
91969
91970
  function formatAgentsMdContextBlock(input) {
91970
91971
  const truncationNotice = input.truncated ? `${TRUNCATION_NOTICE_PREFIX}${input.agentsPath}${TRUNCATION_NOTICE_SUFFIX}` : "";
@@ -98589,7 +98590,7 @@ function getCachedVersion(options = {}) {
98589
98590
  // package.json
98590
98591
  var package_default = {
98591
98592
  name: "oh-my-opencode",
98592
- version: "5.1.5",
98593
+ version: "5.1.7",
98593
98594
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
98594
98595
  main: "./dist/index.js",
98595
98596
  types: "dist/index.d.ts",
@@ -98766,7 +98767,7 @@ var package_default = {
98766
98767
  },
98767
98768
  devDependencies: {
98768
98769
  "@clack/prompts": "^1.8.1",
98769
- "@code-yeongyu/senpi": "2026.9.29-5",
98770
+ "@code-yeongyu/senpi": "2026.9.30",
98770
98771
  "@modelcontextprotocol/sdk": "^1.30.0",
98771
98772
  "@oh-my-opencode/agents-md-core": "workspace:*",
98772
98773
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
@@ -98824,18 +98825,18 @@ var package_default = {
98824
98825
  typescript: "^7.0.2"
98825
98826
  },
98826
98827
  optionalDependencies: {
98827
- "oh-my-opencode-darwin-arm64": "5.1.5",
98828
- "oh-my-opencode-darwin-x64": "5.1.5",
98829
- "oh-my-opencode-darwin-x64-baseline": "5.1.5",
98830
- "oh-my-opencode-linux-arm64": "5.1.5",
98831
- "oh-my-opencode-linux-arm64-musl": "5.1.5",
98832
- "oh-my-opencode-linux-x64": "5.1.5",
98833
- "oh-my-opencode-linux-x64-baseline": "5.1.5",
98834
- "oh-my-opencode-linux-x64-musl": "5.1.5",
98835
- "oh-my-opencode-linux-x64-musl-baseline": "5.1.5",
98836
- "oh-my-opencode-windows-arm64": "5.1.5",
98837
- "oh-my-opencode-windows-x64": "5.1.5",
98838
- "oh-my-opencode-windows-x64-baseline": "5.1.5"
98828
+ "oh-my-opencode-darwin-arm64": "5.1.7",
98829
+ "oh-my-opencode-darwin-x64": "5.1.7",
98830
+ "oh-my-opencode-darwin-x64-baseline": "5.1.7",
98831
+ "oh-my-opencode-linux-arm64": "5.1.7",
98832
+ "oh-my-opencode-linux-arm64-musl": "5.1.7",
98833
+ "oh-my-opencode-linux-x64": "5.1.7",
98834
+ "oh-my-opencode-linux-x64-baseline": "5.1.7",
98835
+ "oh-my-opencode-linux-x64-musl": "5.1.7",
98836
+ "oh-my-opencode-linux-x64-musl-baseline": "5.1.7",
98837
+ "oh-my-opencode-windows-arm64": "5.1.7",
98838
+ "oh-my-opencode-windows-x64": "5.1.7",
98839
+ "oh-my-opencode-windows-x64-baseline": "5.1.7"
98839
98840
  },
98840
98841
  overrides: {
98841
98842
  hono: "^4.13.8",
@@ -104955,7 +104956,7 @@ Procedure (non-negotiable):
104955
104956
  1. Spawn a reviewer via \`task(category="ultrabrain", subagent_type="plan", load_skills=[...], run_in_background=false, prompt="<goal + scenarios + evidence + diff + notepad path>")\` \u2014 or any high-rigor reviewer agent available.
104956
104957
  2. Verify each reviewer concern yourself. A concern blocks only when it names a success criterion the evidence fails; record concerns that cite no criterion as notes with a one-line reason \u2014 fixed or declined at your judgment.
104957
104958
  3. Fix every criterion-cited blocker. Re-run ONLY the scenario QA affected by the fix; capture fresh evidence for the delta. Update notepad.
104958
- 4. Re-submit to the SAME reviewer at most twice, passing only the delta diff, the blockers it cited, and the already-approved criteria marked out-of-scope. An approval whose only remaining items are notes counts as approval.
104959
+ 4. Spawn a NEW reviewer for each re-review, at most twice, passing only the delta diff, the blockers the last one cited, and the already-approved criteria marked out-of-scope. An approval whose only remaining items are notes counts as approval.
104959
104960
  5. On approval, declare done. If criterion-cited blockers remain after two re-reviews, stop and surface them to the user \u2014 do not loop further.
104960
104961
 
104961
104962
  ## ZERO TOLERANCE FAILURES
@@ -108009,6 +108010,13 @@ var TOAST_MESSAGE2 = [
108009
108010
  "For Claude/Kimi/GLM models, always use Sisyphus."
108010
108011
  ].join(`
108011
108012
  `);
108013
+
108014
+ class HephaestusRequiresGptError extends Error {
108015
+ name = "HephaestusRequiresGptError";
108016
+ constructor(modelID) {
108017
+ super(`Hephaestus requires a GPT-family model (got ${modelID}). Use Sisyphus for non-GPT models.`);
108018
+ }
108019
+ }
108012
108020
  function showToast2(ctx, sessionID, variant) {
108013
108021
  ctx.client.tui.showToast({
108014
108022
  body: {
@@ -108036,11 +108044,13 @@ function createNoHephaestusNonGptHook(ctx, options) {
108036
108044
  if (allowNonGptModel) {
108037
108045
  return;
108038
108046
  }
108039
- input.agent = resolveRegisteredAgentName("sisyphus") ?? "sisyphus";
108040
- if (output?.message) {
108041
- output.message.agent = resolveRegisteredAgentName("sisyphus") ?? "sisyphus";
108042
- }
108043
- updateSessionAgent(input.sessionID, "sisyphus");
108047
+ const error = new HephaestusRequiresGptError(modelID);
108048
+ log2("[no-hephaestus-non-gpt] Refusing non-GPT Hephaestus primary", {
108049
+ sessionID: input.sessionID,
108050
+ modelID,
108051
+ error: error.message
108052
+ });
108053
+ throw error;
108044
108054
  }
108045
108055
  }
108046
108056
  };
@@ -166432,6 +166442,33 @@ function createAgentConfigCacheKey(config) {
166432
166442
  skills: config.skills
166433
166443
  });
166434
166444
  }
166445
+ function attachHiddenConfigKeyAliases(config, pluginConfig) {
166446
+ const agents = config.agent;
166447
+ if (typeof agents !== "object" || agents === null) {
166448
+ return;
166449
+ }
166450
+ const agentMap = agents;
166451
+ const overrides = pluginConfig.agents;
166452
+ const configKeys = new Set([
166453
+ ...Object.keys(AGENT_DISPLAY_NAMES),
166454
+ ...Object.keys(overrides ?? {})
166455
+ ]);
166456
+ for (const configKey of configKeys) {
166457
+ const displayName = getAgentListDisplayName(configKey, overrides);
166458
+ if (!displayName || displayName === configKey) {
166459
+ continue;
166460
+ }
166461
+ const displayEntry = agentMap[displayName];
166462
+ if (typeof displayEntry !== "object" || displayEntry === null) {
166463
+ continue;
166464
+ }
166465
+ agentMap[configKey] = {
166466
+ ...displayEntry,
166467
+ hidden: true
166468
+ };
166469
+ registerAgentName(configKey);
166470
+ }
166471
+ }
166435
166472
  function replayAgentConfigSideEffects(params) {
166436
166473
  if (params.configuredDefaultAgent && typeof params.defaultAgent === "string") {
166437
166474
  setDefaultAgentForSort(params.defaultAgent);
@@ -166486,6 +166523,7 @@ function createConfigHandler(deps) {
166486
166523
  };
166487
166524
  }
166488
166525
  applyToolConfig({ config, pluginConfig, agentResult });
166526
+ attachHiddenConfigKeyAliases(config, pluginConfig);
166489
166527
  await applyMcpConfig({ config, pluginConfig, ctx, pluginComponents });
166490
166528
  await applyCommandConfig({ config, pluginConfig, ctx, pluginComponents });
166491
166529
  if (runtimeSkillSourceUrl) {
@@ -173965,11 +174003,20 @@ function handleGoalMessage(args) {
173965
174003
  if (!hooks.goal || nativeGoalCommand) {
173966
174004
  return;
173967
174005
  }
173968
- const promptText = extractPromptText5(output.parts);
174006
+ const promptText = args.originalPromptText ?? extractPromptText5(output.parts);
173969
174007
  if (promptText.includes(AUTO_SLASH_COMMAND_TAG_OPEN)) {
173970
174008
  return;
173971
174009
  }
173972
- const parsed = parseGoalCommand(promptText);
174010
+ const goalCommand = promptText.trim().match(/^\/goal(?:\s+([\s\S]*))?$/i);
174011
+ if (!goalCommand) {
174012
+ const objective = promptText.trim();
174013
+ if (isFirstMessage && pluginConfig.default_mode?.goal && objective.length > 0 && objective.length <= MAX_OBJECTIVE_LENGTH) {
174014
+ hooks.goal.setGoal(input.sessionID, objective);
174015
+ log2("[chat-message] Default goal auto-started", { sessionID: input.sessionID, objective });
174016
+ }
174017
+ return;
174018
+ }
174019
+ const parsed = parseGoalCommand(goalCommand[1] ?? "");
173973
174020
  switch (parsed.kind) {
173974
174021
  case "setObjective":
173975
174022
  hooks.goal.setGoal(input.sessionID, parsed.objective);
@@ -173993,13 +174040,6 @@ function handleGoalMessage(args) {
173993
174040
  default:
173994
174041
  break;
173995
174042
  }
173996
- if (parsed.kind === "show" && isFirstMessage && pluginConfig.default_mode?.goal) {
173997
- const objective = promptText.trim();
173998
- if (objective.length > 0) {
173999
- hooks.goal.setGoal(input.sessionID, objective);
174000
- log2("[chat-message] Default goal auto-started", { sessionID: input.sessionID, objective });
174001
- }
174002
- }
174003
174043
  }
174004
174044
 
174005
174045
  // packages/omo-opencode/src/plugin/chat-message/model-cache-warning.ts
@@ -174224,6 +174264,7 @@ function createChatMessageHandler3(args) {
174224
174264
  if (input.agent) {
174225
174265
  updateSessionAgent(input.sessionID, input.agent);
174226
174266
  }
174267
+ const originalPromptText = extractPromptText5(output.parts);
174227
174268
  const slashCommand = detectSlashCommand(extractPromptText3(output.parts));
174228
174269
  if (slashCommand?.command === "stop-continuation") {
174229
174270
  stopContinuation({
@@ -174254,7 +174295,8 @@ function createChatMessageHandler3(args) {
174254
174295
  output,
174255
174296
  isFirstMessage,
174256
174297
  pluginConfig,
174257
- nativeGoalCommand
174298
+ nativeGoalCommand,
174299
+ originalPromptText
174258
174300
  });
174259
174301
  await applyUltraworkModelOverrideOnMessage(pluginConfig, input.agent, output, pluginContext.client.tui, input.sessionID, pluginContext.client);
174260
174302
  };
@@ -7,4 +7,5 @@ export declare function handleGoalMessage(args: {
7
7
  readonly isFirstMessage: boolean;
8
8
  readonly pluginConfig: OhMyOpenCodeConfig;
9
9
  readonly nativeGoalCommand: boolean;
10
+ readonly originalPromptText?: string;
10
11
  }): void;
@@ -5,5 +5,5 @@
5
5
  "index.js": "b6b064fab277031c6c51f5a58b84b31040f9960bf767bf646adc0540c1d25c1b",
6
6
  "page-bundle.js": "bfd51e8383cf47200d57387bbbed258bce5a3a3d00c38fc108034d2888e23f0c"
7
7
  },
8
- "stagedAtUtc": "2026-09-30T10:38:20.970Z"
8
+ "stagedAtUtc": "2026-09-30T23:56:16.088Z"
9
9
  }
@@ -53,7 +53,7 @@ Do ALL of this immediately after the plan is selected, BEFORE the first implemen
53
53
 
54
54
  1. **Set the goal, in detail.** When a goal tool is available (`create_goal`), call it with a DETAILED objective: the plan name and path, the concrete end state, the phase and task counts, the delivery mode (direct, `--make-pr`, or `--ship`), and how completion will be verified. One work session = one registered goal (the goal tool holds one active goal); each phase then carries its own concrete goal — the ledger entry Phase 2 records before the wave's first dispatch, defined from the previous phase's landed and verified evidence. No goal tool -> record the same objective as the first ledger entry.
55
55
  2. **Register every phase and task as todos.** Mirror the plan into the todo/plan tool of your harness: one phase per plan wave, one todo per column-zero checkbox (including the final verification wave). Register ALL of them up front - never keep tasks in memory only.
56
- 3. **Keep them current at every moment.** Mark a todo in_progress when its work dispatches and done immediately after its verification passes. Never batch-complete at the end, never execute work that is not a registered todo; discovered work — a pre-existing bug, failing test, stale doc, or wrong guidance — is appended to the plan as a checkbox, mirrored as a todo before it runs, and fixed to the ideal state, never deferred as a follow-up. A worker that meets a defect outside its assigned files reports it instead of fixing it; only the orchestrator appends the checkbox and dispatches it to a correctly scoped unit. The todo list, Boulder state, and plan checkboxes must always tell the same story.
56
+ 3. **Keep them current at every moment.** Mark a todo in_progress when its work dispatches and done immediately after its verification passes. Never batch-complete at the end, never execute work that is not a registered todo; discovered work inside the change's blast radius — the request not delivered, a regression this change introduces, an invalid proof, a failing test or stale doc of touched code — is appended to the plan as a checkbox, mirrored as a todo before it runs, and fixed to the ideal state; a defect outside it gets a tracked issue with reproduction and evidence and a line in the final report. A worker that meets a defect outside its assigned files reports it instead of fixing it; only the orchestrator appends the checkbox and dispatches it to a correctly scoped unit. The todo list, Boulder state, and plan checkboxes must always tell the same story.
57
57
 
58
58
  ## Phase 1: Select the plan
59
59
 
package/dist/tui.js CHANGED
@@ -74617,7 +74617,7 @@ init_shared();
74617
74617
  // package.json
74618
74618
  var package_default = {
74619
74619
  name: "oh-my-opencode",
74620
- version: "5.1.5",
74620
+ version: "5.1.7",
74621
74621
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
74622
74622
  main: "./dist/index.js",
74623
74623
  types: "dist/index.d.ts",
@@ -74794,7 +74794,7 @@ var package_default = {
74794
74794
  },
74795
74795
  devDependencies: {
74796
74796
  "@clack/prompts": "^1.8.1",
74797
- "@code-yeongyu/senpi": "2026.9.29-5",
74797
+ "@code-yeongyu/senpi": "2026.9.30",
74798
74798
  "@modelcontextprotocol/sdk": "^1.30.0",
74799
74799
  "@oh-my-opencode/agents-md-core": "workspace:*",
74800
74800
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
@@ -74852,18 +74852,18 @@ var package_default = {
74852
74852
  typescript: "^7.0.2"
74853
74853
  },
74854
74854
  optionalDependencies: {
74855
- "oh-my-opencode-darwin-arm64": "5.1.5",
74856
- "oh-my-opencode-darwin-x64": "5.1.5",
74857
- "oh-my-opencode-darwin-x64-baseline": "5.1.5",
74858
- "oh-my-opencode-linux-arm64": "5.1.5",
74859
- "oh-my-opencode-linux-arm64-musl": "5.1.5",
74860
- "oh-my-opencode-linux-x64": "5.1.5",
74861
- "oh-my-opencode-linux-x64-baseline": "5.1.5",
74862
- "oh-my-opencode-linux-x64-musl": "5.1.5",
74863
- "oh-my-opencode-linux-x64-musl-baseline": "5.1.5",
74864
- "oh-my-opencode-windows-arm64": "5.1.5",
74865
- "oh-my-opencode-windows-x64": "5.1.5",
74866
- "oh-my-opencode-windows-x64-baseline": "5.1.5"
74855
+ "oh-my-opencode-darwin-arm64": "5.1.7",
74856
+ "oh-my-opencode-darwin-x64": "5.1.7",
74857
+ "oh-my-opencode-darwin-x64-baseline": "5.1.7",
74858
+ "oh-my-opencode-linux-arm64": "5.1.7",
74859
+ "oh-my-opencode-linux-arm64-musl": "5.1.7",
74860
+ "oh-my-opencode-linux-x64": "5.1.7",
74861
+ "oh-my-opencode-linux-x64-baseline": "5.1.7",
74862
+ "oh-my-opencode-linux-x64-musl": "5.1.7",
74863
+ "oh-my-opencode-linux-x64-musl-baseline": "5.1.7",
74864
+ "oh-my-opencode-windows-arm64": "5.1.7",
74865
+ "oh-my-opencode-windows-x64": "5.1.7",
74866
+ "oh-my-opencode-windows-x64-baseline": "5.1.7"
74867
74867
  },
74868
74868
  overrides: {
74869
74869
  hono: "^4.13.8",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-openagent",
3
- "version": "5.1.5",
3
+ "version": "5.1.7",
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",
@@ -177,7 +177,7 @@
177
177
  },
178
178
  "devDependencies": {
179
179
  "@clack/prompts": "^1.8.1",
180
- "@code-yeongyu/senpi": "2026.9.29-5",
180
+ "@code-yeongyu/senpi": "2026.9.30",
181
181
  "@modelcontextprotocol/sdk": "^1.30.0",
182
182
  "@oh-my-opencode/agents-md-core": "workspace:*",
183
183
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
@@ -235,18 +235,18 @@
235
235
  "typescript": "^7.0.2"
236
236
  },
237
237
  "optionalDependencies": {
238
- "oh-my-openagent-darwin-arm64": "5.1.5",
239
- "oh-my-openagent-darwin-x64": "5.1.5",
240
- "oh-my-openagent-darwin-x64-baseline": "5.1.5",
241
- "oh-my-openagent-linux-arm64": "5.1.5",
242
- "oh-my-openagent-linux-arm64-musl": "5.1.5",
243
- "oh-my-openagent-linux-x64": "5.1.5",
244
- "oh-my-openagent-linux-x64-baseline": "5.1.5",
245
- "oh-my-openagent-linux-x64-musl": "5.1.5",
246
- "oh-my-openagent-linux-x64-musl-baseline": "5.1.5",
247
- "oh-my-openagent-windows-arm64": "5.1.5",
248
- "oh-my-openagent-windows-x64": "5.1.5",
249
- "oh-my-openagent-windows-x64-baseline": "5.1.5"
238
+ "oh-my-openagent-darwin-arm64": "5.1.7",
239
+ "oh-my-openagent-darwin-x64": "5.1.7",
240
+ "oh-my-openagent-darwin-x64-baseline": "5.1.7",
241
+ "oh-my-openagent-linux-arm64": "5.1.7",
242
+ "oh-my-openagent-linux-arm64-musl": "5.1.7",
243
+ "oh-my-openagent-linux-x64": "5.1.7",
244
+ "oh-my-openagent-linux-x64-baseline": "5.1.7",
245
+ "oh-my-openagent-linux-x64-musl": "5.1.7",
246
+ "oh-my-openagent-linux-x64-musl-baseline": "5.1.7",
247
+ "oh-my-openagent-windows-arm64": "5.1.7",
248
+ "oh-my-openagent-windows-x64": "5.1.7",
249
+ "oh-my-openagent-windows-x64-baseline": "5.1.7"
250
250
  },
251
251
  "overrides": {
252
252
  "hono": "^4.13.8",
@@ -1,4 +1,4 @@
1
- import { tmpdir } from "node:os";
1
+ import { homedir, tmpdir } from "node:os";
2
2
  import { dirname, resolve } from "node:path";
3
3
 
4
4
  import { nearestMarkedAncestor } from "../lsp/outside-context-workspace.js";
@@ -11,6 +11,8 @@ export interface PostEditFileLocationOptions {
11
11
  readonly agentDirs: readonly string[];
12
12
  /** Temp roots; defaults to the canonical OS temp dir (plus `/tmp` off Windows). */
13
13
  readonly tempDirs?: readonly string[];
14
+ /** Home dirs that never count as a project root themselves; defaults to the OS home dir. */
15
+ readonly homeDirs?: readonly string[];
14
16
  }
15
17
 
16
18
  /**
@@ -19,6 +21,8 @@ export interface PostEditFileLocationOptions {
19
21
  * A project root is the nearest ancestor carrying one of lsp-core's `WORKSPACE_MARKERS` (the marker set the
20
22
  * out-of-cwd workspace resolver uses). Inside a temp dir, only a marked root strictly below the temp root
21
23
  * counts, so a stray `package.json` left in the temp root does not turn every scratch file into a project.
24
+ * The home dir is never a project root either: a dotfiles `.git` or stray `~/package.json` there does not make
25
+ * every home-level file a project, while a marked project below home still is one.
22
26
  * Paths are canonicalized first because macOS `/tmp` and `/var` are symlinks.
23
27
  */
24
28
  export function classifyPostEditFileLocation(
@@ -38,7 +42,8 @@ export function classifyPostEditFileLocation(
38
42
  const ownProject = projectRoot !== undefined && projectRoot !== tempRoot && isPathInside(tempRoot, projectRoot);
39
43
  return ownProject ? "project" : "temp";
40
44
  }
41
- return projectRoot === undefined ? "outside_project" : "project";
45
+ if (projectRoot === undefined) return "outside_project";
46
+ return canonicalDirectories(options.homeDirs ?? [homedir()]).includes(projectRoot) ? "outside_project" : "project";
42
47
  }
43
48
 
44
49
  function defaultTempDirectories(): readonly string[] {