oh-my-openagent 4.18.1 → 4.18.2

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 (116) hide show
  1. package/.agents/skills/codex-qa/scripts/lsp-e2e.sh +39 -16
  2. package/.agents/skills/opencode-qa/scripts/lsp-e2e.sh +111 -28
  3. package/bin/AGENTS.md +33 -0
  4. package/dist/cli/index.js +57 -18
  5. package/dist/cli-node/index.js +57 -18
  6. package/dist/hooks/anthropic-context-window-limit-recovery/empty-content-recovery-sdk.d.ts +6 -0
  7. package/dist/hooks/category-skill-reminder/hook.d.ts +9 -1
  8. package/dist/hooks/comment-checker/hook.d.ts +8 -1
  9. package/dist/hooks/todo-continuation-enforcer/types.d.ts +3 -0
  10. package/dist/index.js +560 -333
  11. package/dist/plugin/messages-transform.d.ts +1 -0
  12. package/dist/plugin-handlers/prometheus-agent-config-builder.d.ts +2 -0
  13. package/dist/tui.js +43 -4
  14. package/package.json +13 -13
  15. package/packages/git-bash-mcp/dist/cli.js +81 -19
  16. package/packages/lsp-core/src/lsp/client-diagnostics-freshness.integration.test.ts +4 -4
  17. package/packages/lsp-core/src/lsp/directory-diagnostics.test.ts +118 -1
  18. package/packages/lsp-core/src/lsp/directory-diagnostics.ts +1 -1
  19. package/packages/lsp-daemon/dist/cli.js +262 -63
  20. package/packages/lsp-daemon/dist/client.js +194 -50
  21. package/packages/lsp-daemon/dist/daemon-client.d.ts +2 -2
  22. package/packages/lsp-daemon/dist/daemon-client.js +26 -2
  23. package/packages/lsp-daemon/dist/ensure-daemon.d.ts +5 -4
  24. package/packages/lsp-daemon/dist/ensure-daemon.js +79 -18
  25. package/packages/lsp-daemon/dist/index.js +262 -63
  26. package/packages/lsp-daemon/dist/proxy.d.ts +2 -0
  27. package/packages/lsp-daemon/dist/proxy.js +79 -23
  28. package/packages/lsp-tools-mcp/dist/cli.js +82 -20
  29. package/packages/lsp-tools-mcp/dist/mcp.js +82 -20
  30. package/packages/lsp-tools-mcp/dist/tools.js +1 -1
  31. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  32. package/packages/omo-codex/plugin/.mcp.json +2 -1
  33. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  34. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  35. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +100 -28
  36. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +100 -28
  37. package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
  38. package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +21 -9
  39. package/packages/omo-codex/plugin/components/codegraph/test/mcp-bridge-fixtures.ts +35 -0
  40. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge-lifecycle.test.ts +69 -0
  41. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge.test.ts +57 -1
  42. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  43. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  44. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  45. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  46. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  47. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  48. package/packages/omo-codex/plugin/components/lsp/.mcp.json +2 -1
  49. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
  50. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +113 -31
  51. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  52. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  53. package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +1 -0
  54. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.5.md +1 -1
  55. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.6.md +5 -3
  56. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  57. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  58. package/packages/omo-codex/plugin/components/start-work-continuation/README.md +2 -2
  59. package/packages/omo-codex/plugin/components/start-work-continuation/directive.md +3 -3
  60. package/packages/omo-codex/plugin/components/start-work-continuation/dist/cli.js +2 -2
  61. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
  62. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
  63. package/packages/omo-codex/plugin/components/start-work-continuation/src/boulder-reader.ts +1 -1
  64. package/packages/omo-codex/plugin/components/start-work-continuation/src/codex-hook.ts +1 -1
  65. package/packages/omo-codex/plugin/components/start-work-continuation/test/boulder-reader.test.ts +15 -1
  66. package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +20 -0
  67. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  68. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  69. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  70. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  71. package/packages/omo-codex/plugin/components/ultrawork/directive.md +50 -33
  72. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  73. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  74. package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +50 -33
  75. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +50 -33
  76. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +3 -3
  77. package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +5 -6
  78. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  79. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  80. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +1 -1
  81. package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +5 -6
  82. package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +2 -2
  83. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  84. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  85. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  86. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  87. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  88. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  89. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  90. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  91. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  92. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  93. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  94. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  95. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  96. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  97. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  98. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  99. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
  100. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  101. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
  102. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  103. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  104. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  105. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  106. package/packages/omo-codex/plugin/package-lock.json +13 -13
  107. package/packages/omo-codex/plugin/package.json +1 -1
  108. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +10 -2
  109. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +7 -0
  110. package/packages/omo-codex/plugin/skills/start-work/SKILL.md +3 -2
  111. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +50 -33
  112. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +1 -1
  113. package/packages/omo-codex/plugin/test/mcp-research-servers.test.mjs +1 -0
  114. package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +7 -0
  115. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +35 -4
  116. package/packages/omo-codex/scripts/install-dist/install-local.mjs +1 -1
@@ -2146,7 +2146,7 @@ var package_default;
2146
2146
  var init_package = __esm(() => {
2147
2147
  package_default = {
2148
2148
  name: "oh-my-opencode",
2149
- version: "4.18.1",
2149
+ version: "4.18.2",
2150
2150
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
2151
2151
  main: "./dist/index.js",
2152
2152
  types: "dist/index.d.ts",
@@ -2358,18 +2358,18 @@ var init_package = __esm(() => {
2358
2358
  typescript: "^6.0.3"
2359
2359
  },
2360
2360
  optionalDependencies: {
2361
- "oh-my-opencode-darwin-arm64": "4.18.1",
2362
- "oh-my-opencode-darwin-x64": "4.18.1",
2363
- "oh-my-opencode-darwin-x64-baseline": "4.18.1",
2364
- "oh-my-opencode-linux-arm64": "4.18.1",
2365
- "oh-my-opencode-linux-arm64-musl": "4.18.1",
2366
- "oh-my-opencode-linux-x64": "4.18.1",
2367
- "oh-my-opencode-linux-x64-baseline": "4.18.1",
2368
- "oh-my-opencode-linux-x64-musl": "4.18.1",
2369
- "oh-my-opencode-linux-x64-musl-baseline": "4.18.1",
2370
- "oh-my-opencode-windows-arm64": "4.18.1",
2371
- "oh-my-opencode-windows-x64": "4.18.1",
2372
- "oh-my-opencode-windows-x64-baseline": "4.18.1"
2361
+ "oh-my-opencode-darwin-arm64": "4.18.2",
2362
+ "oh-my-opencode-darwin-x64": "4.18.2",
2363
+ "oh-my-opencode-darwin-x64-baseline": "4.18.2",
2364
+ "oh-my-opencode-linux-arm64": "4.18.2",
2365
+ "oh-my-opencode-linux-arm64-musl": "4.18.2",
2366
+ "oh-my-opencode-linux-x64": "4.18.2",
2367
+ "oh-my-opencode-linux-x64-baseline": "4.18.2",
2368
+ "oh-my-opencode-linux-x64-musl": "4.18.2",
2369
+ "oh-my-opencode-linux-x64-musl-baseline": "4.18.2",
2370
+ "oh-my-opencode-windows-arm64": "4.18.2",
2371
+ "oh-my-opencode-windows-x64": "4.18.2",
2372
+ "oh-my-opencode-windows-x64-baseline": "4.18.2"
2373
2373
  },
2374
2374
  overrides: {
2375
2375
  "@earendil-works/pi-agent-core": "0.80.3",
@@ -9223,7 +9223,7 @@ var init_agent_model_requirements = __esm(() => {
9223
9223
  hephaestus: {
9224
9224
  fallbackChain: [
9225
9225
  {
9226
- providers: ["openai", "vercel"],
9226
+ providers: ["openai", "github-copilot", "vercel"],
9227
9227
  model: "gpt-5.6-sol",
9228
9228
  variant: "high"
9229
9229
  },
@@ -9334,6 +9334,11 @@ var init_agent_model_requirements = __esm(() => {
9334
9334
  model: "gpt-5.6-sol",
9335
9335
  variant: "xhigh"
9336
9336
  },
9337
+ {
9338
+ providers: ["github-copilot"],
9339
+ model: "gpt-5.6-sol",
9340
+ variant: "high"
9341
+ },
9337
9342
  {
9338
9343
  providers: ["openai", "github-copilot", "opencode", "vercel"],
9339
9344
  model: "gpt-5.5",
@@ -9412,6 +9417,11 @@ var init_category_model_requirements = __esm(() => {
9412
9417
  model: "gpt-5.6-sol",
9413
9418
  variant: "xhigh"
9414
9419
  },
9420
+ {
9421
+ providers: ["github-copilot"],
9422
+ model: "gpt-5.6-sol",
9423
+ variant: "high"
9424
+ },
9415
9425
  {
9416
9426
  providers: ["openai", "opencode", "vercel"],
9417
9427
  model: "gpt-5.5",
@@ -9438,7 +9448,12 @@ var init_category_model_requirements = __esm(() => {
9438
9448
  variant: "xhigh"
9439
9449
  },
9440
9450
  {
9441
- providers: ["openai", "vercel"],
9451
+ providers: ["github-copilot"],
9452
+ model: "gpt-5.6-terra",
9453
+ variant: "high"
9454
+ },
9455
+ {
9456
+ providers: ["openai", "github-copilot", "vercel"],
9442
9457
  model: "gpt-5.6-sol",
9443
9458
  variant: "high"
9444
9459
  },
@@ -9505,6 +9520,11 @@ var init_category_model_requirements = __esm(() => {
9505
9520
  model: "gpt-5.6-luna",
9506
9521
  variant: "xhigh"
9507
9522
  },
9523
+ {
9524
+ providers: ["github-copilot"],
9525
+ model: "gpt-5.6-luna",
9526
+ variant: "high"
9527
+ },
9508
9528
  {
9509
9529
  providers: ["anthropic", "github-copilot", "opencode", "vercel"],
9510
9530
  model: "claude-sonnet-4-6"
@@ -9594,9 +9614,12 @@ function stripProviderPrefixForAliasLookup(normalizedModelID) {
9594
9614
  }
9595
9615
  return normalizedModelID.slice(slashIndex + 1);
9596
9616
  }
9597
- function resolveModelIDAlias(modelID) {
9617
+ function resolveModelIDAlias(modelID, providerID) {
9598
9618
  const requestedModelID = normalizeLookupModelID(modelID);
9599
9619
  const aliasLookupModelID = stripProviderPrefixForAliasLookup(requestedModelID);
9620
+ const normalizedProviderID = providerID ? normalizeLookupModelID(providerID) : undefined;
9621
+ const providerPrefixEnd = requestedModelID.indexOf("/");
9622
+ const embeddedProviderID = providerPrefixEnd > 0 ? requestedModelID.slice(0, providerPrefixEnd) : undefined;
9600
9623
  const exactRule = EXACT_ALIAS_RULES_BY_MODEL.get(aliasLookupModelID);
9601
9624
  if (exactRule) {
9602
9625
  return {
@@ -9607,6 +9630,13 @@ function resolveModelIDAlias(modelID) {
9607
9630
  };
9608
9631
  }
9609
9632
  for (const rule of PATTERN_ALIAS_RULES) {
9633
+ if (rule.providerIDs) {
9634
+ const matchesProviderID = normalizedProviderID !== undefined && rule.providerIDs.includes(normalizedProviderID);
9635
+ const matchesEmbeddedProviderID = normalizedProviderID !== undefined && rule.allowedSubproviderHosts?.includes(normalizedProviderID) === true && embeddedProviderID !== undefined && rule.providerIDs.includes(embeddedProviderID);
9636
+ if (!matchesProviderID && !matchesEmbeddedProviderID) {
9637
+ continue;
9638
+ }
9639
+ }
9610
9640
  if (!rule.match(aliasLookupModelID)) {
9611
9641
  continue;
9612
9642
  }
@@ -9647,6 +9677,14 @@ var init_model_capability_aliases = __esm(() => {
9647
9677
  ];
9648
9678
  EXACT_ALIAS_RULES_BY_MODEL = new Map(EXACT_ALIAS_RULES.map((rule) => [rule.aliasModelID, rule]));
9649
9679
  PATTERN_ALIAS_RULES = [
9680
+ {
9681
+ ruleID: "openai-gpt-5.6-fast-service-tier-alias",
9682
+ description: "Normalizes OpenCode's OpenAI GPT-5.6 fast service-tier IDs to canonical snapshot IDs.",
9683
+ providerIDs: ["openai"],
9684
+ allowedSubproviderHosts: ["vercel"],
9685
+ match: (normalizedModelID) => /^gpt-5\.6-(?:sol|terra|luna)-fast$/.test(normalizedModelID),
9686
+ canonicalize: (normalizedModelID) => normalizedModelID.slice(0, -"-fast".length)
9687
+ },
9650
9688
  {
9651
9689
  ruleID: "claude-thinking-legacy-alias",
9652
9690
  description: "Normalizes the legacy claude-opus-4-7-thinking id to the canonical snapshot ID.",
@@ -10314,7 +10352,7 @@ function getProviderOverride(providerID, modelID) {
10314
10352
  return GITHUB_COPILOT_GPT5_MODEL.test(normalizeLookupModelID2(modelID)) ? GITHUB_COPILOT_GPT5_OVERRIDE : undefined;
10315
10353
  }
10316
10354
  function getModelCapabilities(input) {
10317
- const canonicalization = resolveModelIDAlias(input.modelID);
10355
+ const canonicalization = resolveModelIDAlias(input.modelID, input.providerID);
10318
10356
  const override = getOverride(input.modelID);
10319
10357
  const providerOverride = getProviderOverride(input.providerID, canonicalization.canonicalModelID);
10320
10358
  const runtimeModel = readRuntimeModel(input.runtimeModel ?? input.providerCache?.findProviderModelMetadata(input.providerID, input.modelID));
@@ -11419,6 +11457,7 @@ var init_opencode_storage_detection = __esm(() => {
11419
11457
  var opencodePluginsCache;
11420
11458
  var init_load_opencode_plugins = __esm(() => {
11421
11459
  init_jsonc_parser2();
11460
+ init_opencode_config_dir();
11422
11461
  opencodePluginsCache = new Map;
11423
11462
  });
11424
11463
 
@@ -72658,7 +72697,7 @@ var package_default2;
72658
72697
  var init_package2 = __esm(() => {
72659
72698
  package_default2 = {
72660
72699
  name: "@oh-my-opencode/omo-codex",
72661
- version: "4.18.1",
72700
+ version: "4.18.2",
72662
72701
  type: "module",
72663
72702
  private: true,
72664
72703
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -1,9 +1,15 @@
1
+ import { replaceEmptyTextPartsAsync, findMessagesWithEmptyTextPartsFromSDK } from "./storage/empty-text";
2
+ import { injectTextPartAsync } from "./storage/text-part-injector";
1
3
  import type { Client } from "./client";
2
4
  export declare function fixEmptyMessagesWithSDK(params: {
3
5
  sessionID: string;
4
6
  client: Client;
5
7
  placeholderText: string;
6
8
  messageIndex?: number;
9
+ }, storage?: {
10
+ replaceEmptyTextPartsAsync: typeof replaceEmptyTextPartsAsync;
11
+ findMessagesWithEmptyTextPartsFromSDK: typeof findMessagesWithEmptyTextPartsFromSDK;
12
+ injectTextPartAsync: typeof injectTextPartAsync;
7
13
  }): Promise<{
8
14
  fixed: boolean;
9
15
  fixedMessageIds: string[];
@@ -1,4 +1,5 @@
1
1
  import type { PluginInput } from "@opencode-ai/plugin";
2
+ import type { Message, Part } from "@opencode-ai/sdk";
2
3
  import type { AvailableSkill } from "../../agents/dynamic-agent-prompt-builder";
3
4
  interface ToolExecuteInput {
4
5
  tool: string;
@@ -11,8 +12,15 @@ interface ToolExecuteOutput {
11
12
  output: string;
12
13
  metadata: unknown;
13
14
  }
15
+ type MessageWithParts = {
16
+ info: Message;
17
+ parts: Part[];
18
+ };
14
19
  export declare function createCategorySkillReminderHook(_ctx: PluginInput, availableSkills?: AvailableSkill[]): {
15
- "tool.execute.after": (input: ToolExecuteInput, output: ToolExecuteOutput) => Promise<void>;
20
+ "tool.execute.after": (input: ToolExecuteInput, _output: ToolExecuteOutput) => Promise<void>;
21
+ "experimental.chat.messages.transform": (_input: Record<string, never>, output: {
22
+ messages: MessageWithParts[];
23
+ }) => Promise<void>;
16
24
  event: ({ event }: {
17
25
  event: {
18
26
  type: string;
@@ -1,5 +1,12 @@
1
1
  import type { CommentCheckerConfig } from "../../config/schema";
2
- export declare function createCommentCheckerHooks(config?: CommentCheckerConfig): {
2
+ import { initializeCommentCheckerCli, getCommentCheckerCliPathPromise, isCliPathUsable, processWithCli, processApplyPatchEditsWithCli } from "./cli-runner";
3
+ export declare function createCommentCheckerHooks(config?: CommentCheckerConfig, cliRunner?: {
4
+ initializeCommentCheckerCli: typeof initializeCommentCheckerCli;
5
+ getCommentCheckerCliPathPromise: typeof getCommentCheckerCliPathPromise;
6
+ isCliPathUsable: typeof isCliPathUsable;
7
+ processWithCli: typeof processWithCli;
8
+ processApplyPatchEditsWithCli: typeof processApplyPatchEditsWithCli;
9
+ }): {
3
10
  "tool.execute.before": (input: {
4
11
  tool: string;
5
12
  sessionID: string;
@@ -34,6 +34,9 @@ export interface SessionState {
34
34
  lastIncompleteCount?: number;
35
35
  lastInjectedAt?: number;
36
36
  awaitingPostInjectionProgressCheck?: boolean;
37
+ continuationResponseObserved?: boolean;
38
+ continuationBlockReason?: "directive-response" | "user-interruption";
39
+ pendingUserMessageID?: string;
37
40
  inFlight?: boolean;
38
41
  stagnationCount: number;
39
42
  consecutiveFailures: number;