oh-my-openagent 5.1.6 → 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 (85) hide show
  1. package/dist/cli/index.js +40 -16
  2. package/dist/cli/run/runnable-agent-resolver.d.ts +3 -0
  3. package/dist/cli-node/index.js +40 -16
  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 +76 -34
  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/tui.js +13 -13
  10. package/package.json +13 -13
  11. package/packages/lsp-core/src/post-edit/file-location.ts +7 -2
  12. package/packages/lsp-core/src/post-edit/not-installed.test.ts +25 -0
  13. package/packages/lsp-core/src/tool-surface.test.ts +11 -11
  14. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  15. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +7 -0
  16. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  17. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  18. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  19. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  20. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  21. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  22. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  23. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  24. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  25. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  26. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  27. package/packages/omo-codex/plugin/components/rules/README.md +0 -1
  28. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.5.md +1 -1
  29. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.6.md +1 -1
  30. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-6.md +1 -1
  31. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  32. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  33. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  34. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  35. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  36. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  37. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  38. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  39. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  40. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  41. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  42. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  43. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-role-matrix.test.ts +16 -0
  44. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  45. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  46. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  47. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  48. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  49. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  50. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  51. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  52. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  53. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  54. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  55. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  56. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  57. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  58. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  59. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  60. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  61. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  62. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  63. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  64. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  65. package/packages/omo-codex/plugin/package-lock.json +12 -12
  66. package/packages/omo-codex/plugin/package.json +1 -1
  67. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +1 -1
  68. package/packages/omo-codex/scripts/install-config-autonomous-features.test.mjs +24 -4
  69. package/packages/omo-codex/scripts/install-dist/install-local.mjs +9 -2
  70. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
  71. package/dist/features/team-mode/team-layout-tmux/close-team-member-pane.d.ts +0 -1
  72. package/dist/features/team-mode/team-tasklist/claim.d.ts +0 -1
  73. package/dist/features/team-mode/team-tasklist/dependencies.d.ts +0 -1
  74. package/dist/features/team-mode/team-tasklist/get.d.ts +0 -1
  75. package/dist/features/team-mode/team-tasklist/store.d.ts +0 -1
  76. package/dist/features/team-mode/team-tasklist/update.d.ts +0 -1
  77. package/dist/hooks/hashline-edit-diff-enhancer/hook.d.ts +0 -29
  78. package/dist/hooks/hashline-edit-diff-enhancer/pending-captures.d.ts +0 -13
  79. package/dist/openclaw/config.d.ts +0 -1
  80. package/dist/openclaw/dispatcher.d.ts +0 -1
  81. package/dist/openclaw/gateway-url-validation.d.ts +0 -1
  82. package/dist/openclaw/reply-listener-injection.d.ts +0 -1
  83. package/dist/openclaw/reply-listener-start.d.ts +0 -1
  84. package/dist/openclaw/session-registry.d.ts +0 -1
  85. 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.6",
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",
@@ -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.6",
303
- "oh-my-opencode-darwin-x64": "5.1.6",
304
- "oh-my-opencode-darwin-x64-baseline": "5.1.6",
305
- "oh-my-opencode-linux-arm64": "5.1.6",
306
- "oh-my-opencode-linux-arm64-musl": "5.1.6",
307
- "oh-my-opencode-linux-x64": "5.1.6",
308
- "oh-my-opencode-linux-x64-baseline": "5.1.6",
309
- "oh-my-opencode-linux-x64-musl": "5.1.6",
310
- "oh-my-opencode-linux-x64-musl-baseline": "5.1.6",
311
- "oh-my-opencode-windows-arm64": "5.1.6",
312
- "oh-my-opencode-windows-x64": "5.1.6",
313
- "oh-my-opencode-windows-x64-baseline": "5.1.6"
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.6",
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.6",
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",
@@ -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.6",
304
- "oh-my-opencode-darwin-x64": "5.1.6",
305
- "oh-my-opencode-darwin-x64-baseline": "5.1.6",
306
- "oh-my-opencode-linux-arm64": "5.1.6",
307
- "oh-my-opencode-linux-arm64-musl": "5.1.6",
308
- "oh-my-opencode-linux-x64": "5.1.6",
309
- "oh-my-opencode-linux-x64-baseline": "5.1.6",
310
- "oh-my-opencode-linux-x64-musl": "5.1.6",
311
- "oh-my-opencode-linux-x64-musl-baseline": "5.1.6",
312
- "oh-my-opencode-windows-arm64": "5.1.6",
313
- "oh-my-opencode-windows-x64": "5.1.6",
314
- "oh-my-opencode-windows-x64-baseline": "5.1.6"
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.6",
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.6",
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",
@@ -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.6",
98828
- "oh-my-opencode-darwin-x64": "5.1.6",
98829
- "oh-my-opencode-darwin-x64-baseline": "5.1.6",
98830
- "oh-my-opencode-linux-arm64": "5.1.6",
98831
- "oh-my-opencode-linux-arm64-musl": "5.1.6",
98832
- "oh-my-opencode-linux-x64": "5.1.6",
98833
- "oh-my-opencode-linux-x64-baseline": "5.1.6",
98834
- "oh-my-opencode-linux-x64-musl": "5.1.6",
98835
- "oh-my-opencode-linux-x64-musl-baseline": "5.1.6",
98836
- "oh-my-opencode-windows-arm64": "5.1.6",
98837
- "oh-my-opencode-windows-x64": "5.1.6",
98838
- "oh-my-opencode-windows-x64-baseline": "5.1.6"
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",
@@ -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-30T18:48:09.721Z"
8
+ "stagedAtUtc": "2026-09-30T23:56:16.088Z"
9
9
  }
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.6",
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",
@@ -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.6",
74856
- "oh-my-opencode-darwin-x64": "5.1.6",
74857
- "oh-my-opencode-darwin-x64-baseline": "5.1.6",
74858
- "oh-my-opencode-linux-arm64": "5.1.6",
74859
- "oh-my-opencode-linux-arm64-musl": "5.1.6",
74860
- "oh-my-opencode-linux-x64": "5.1.6",
74861
- "oh-my-opencode-linux-x64-baseline": "5.1.6",
74862
- "oh-my-opencode-linux-x64-musl": "5.1.6",
74863
- "oh-my-opencode-linux-x64-musl-baseline": "5.1.6",
74864
- "oh-my-opencode-windows-arm64": "5.1.6",
74865
- "oh-my-opencode-windows-x64": "5.1.6",
74866
- "oh-my-opencode-windows-x64-baseline": "5.1.6"
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.6",
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",
@@ -235,18 +235,18 @@
235
235
  "typescript": "^7.0.2"
236
236
  },
237
237
  "optionalDependencies": {
238
- "oh-my-openagent-darwin-arm64": "5.1.6",
239
- "oh-my-openagent-darwin-x64": "5.1.6",
240
- "oh-my-openagent-darwin-x64-baseline": "5.1.6",
241
- "oh-my-openagent-linux-arm64": "5.1.6",
242
- "oh-my-openagent-linux-arm64-musl": "5.1.6",
243
- "oh-my-openagent-linux-x64": "5.1.6",
244
- "oh-my-openagent-linux-x64-baseline": "5.1.6",
245
- "oh-my-openagent-linux-x64-musl": "5.1.6",
246
- "oh-my-openagent-linux-x64-musl-baseline": "5.1.6",
247
- "oh-my-openagent-windows-arm64": "5.1.6",
248
- "oh-my-openagent-windows-x64": "5.1.6",
249
- "oh-my-openagent-windows-x64-baseline": "5.1.6"
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[] {
@@ -93,6 +93,31 @@ describe("classifyPostEditFileLocation", () => {
93
93
  }
94
94
  });
95
95
 
96
+ for (const marker of ["package.json", ".git"] as const) {
97
+ it(`#given a ${marker} directly in HOME #when a home-level file is classified #then HOME is not its project`, () => {
98
+ const home = tempRoot("lsp-postedit-home-");
99
+ if (marker === ".git") mkdirSync(join(home, ".git"));
100
+ else touch(join(home, marker), "{}\n");
101
+ const topLevel = touch(join(home, "notes.ts"));
102
+ const nested = touch(join(home, "scratch", "draft.ts"));
103
+
104
+ const options = { cwd: home, agentDirs: [], tempDirs: [], homeDirs: [home] };
105
+ expect(classifyPostEditFileLocation(topLevel, options)).toBe("outside_project");
106
+ expect(classifyPostEditFileLocation(nested, options)).toBe("outside_project");
107
+ });
108
+ }
109
+
110
+ it("#given a marked HOME and a project under it #when a project file is classified #then it is still a project", () => {
111
+ const home = tempRoot("lsp-postedit-homeproject-");
112
+ mkdirSync(join(home, ".git"));
113
+ touch(join(home, "work", "app", "package.json"), "{}\n");
114
+ const file = touch(join(home, "work", "app", "src", "a.ts"));
115
+
116
+ expect(classifyPostEditFileLocation(file, { cwd: home, agentDirs: [], tempDirs: [], homeDirs: [home] })).toBe(
117
+ "project",
118
+ );
119
+ });
120
+
96
121
  it("#given a project with its own marker inside a temp dir #when classified #then it is a project", () => {
97
122
  const temp = tempRoot("lsp-postedit-tempproject-");
98
123
  const project = join(temp, "checkout");
@@ -1,7 +1,8 @@
1
1
  import { describe, expect, test } from "bun:test";
2
2
 
3
+ import { handleLspMcpRequest } from "./mcp.js";
3
4
  import { createStandaloneMcpRequestContext, runWithRequestContext } from "./request-context.js";
4
- import { coerceToolArguments, executeLspTool, LSP_MCP_TOOLS } from "./tools.js";
5
+ import { coerceToolArguments, executeLspTool } from "./tools.js";
5
6
 
6
7
  const expectedToolSurface = [
7
8
  {
@@ -140,17 +141,15 @@ const expectedToolSurface = [
140
141
  ];
141
142
 
142
143
  describe("LSP core tool surface", () => {
143
- test("#given tool descriptors #when listed #then the public nine-tool schemas are pinned", () => {
144
- // given / when
145
- const surface = LSP_MCP_TOOLS.map((tool) => ({
146
- name: tool.name,
147
- title: tool.title,
148
- description: tool.description,
149
- inputSchema: tool.inputSchema,
150
- }));
144
+ test("#given a JSON-RPC tools/list request #when descriptors are returned #then the public nine-tool schemas are pinned", async () => {
145
+ // given
146
+ const request = { jsonrpc: "2.0", id: 21, method: "tools/list" };
147
+
148
+ // when
149
+ const response = await handleLspMcpRequest(request);
151
150
 
152
151
  // then
153
- expect(surface).toEqual(expectedToolSurface);
152
+ expect(response?.result?.tools).toEqual(expectedToolSurface);
154
153
  });
155
154
 
156
155
  test("#given legacy tool aliases #when executed #then aliases are callable but not listed", async () => {
@@ -161,7 +160,8 @@ describe("LSP core tool surface", () => {
161
160
 
162
161
  // then
163
162
  expect(result.content[0]?.text).toContain("No LSP server configured for extension: .wat");
164
- expect(LSP_MCP_TOOLS.map((tool) => tool.name)).not.toContain("lsp_diagnostics");
163
+ const listResponse = await handleLspMcpRequest({ jsonrpc: "2.0", id: 23, method: "tools/list" });
164
+ expect(listResponse?.result?.tools?.map((tool: { name: string }) => tool.name)).not.toContain("lsp_diagnostics");
165
165
  });
166
166
 
167
167
  test("#given non-object tool arguments #when coerced #then they produce an empty argument record", () => {