oh-my-opencode 4.6.0 → 4.7.0

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 (75) hide show
  1. package/bin/version-mismatch.js +47 -0
  2. package/bin/version-mismatch.test.ts +120 -0
  3. package/dist/cli/codex-ulw-loop.d.ts +12 -0
  4. package/dist/cli/doctor/checks/tui-plugin-config.d.ts +2 -0
  5. package/dist/cli/index.js +577 -304
  6. package/dist/cli/install-codex/codex-config-reasoning.d.ts +2 -1
  7. package/dist/cli/install-codex/codex-model-catalog.d.ts +13 -0
  8. package/dist/features/background-agent/concurrency.d.ts +1 -0
  9. package/dist/features/background-agent/process-cleanup.d.ts +6 -0
  10. package/dist/features/claude-code-session-state/state.d.ts +1 -0
  11. package/dist/features/opencode-skill-loader/index.d.ts +1 -0
  12. package/dist/features/opencode-skill-loader/opencode-config-skills-reader.d.ts +5 -0
  13. package/dist/features/tmux-subagent/attachable-session-status.d.ts +1 -1
  14. package/dist/features/tmux-subagent/session-status-parser.d.ts +1 -0
  15. package/dist/hooks/comment-checker/cli.d.ts +1 -0
  16. package/dist/hooks/tasks-todowrite-disabler/constants.d.ts +1 -1
  17. package/dist/index.js +811 -450
  18. package/dist/shared/command-executor/execute-hook-command.d.ts +2 -0
  19. package/dist/tools/skill/description-formatter.d.ts +5 -1
  20. package/dist/tools/skill/types.d.ts +1 -0
  21. package/package.json +12 -13
  22. package/packages/ast-grep-mcp/dist/cli.js +53 -9
  23. package/packages/lsp-tools-mcp/dist/lsp/process.js +1 -1
  24. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus.md +6 -4
  25. package/packages/omo-codex/plugin/components/rules/src/post-compact-budget.ts +0 -2
  26. package/packages/omo-codex/plugin/components/start-work-continuation/directive.md +1 -1
  27. package/packages/omo-codex/plugin/components/ultrawork/CHANGELOG.md +1 -1
  28. package/packages/omo-codex/plugin/components/ultrawork/README.md +1 -1
  29. package/packages/omo-codex/plugin/components/ultrawork/agents/codex-ultrawork-reviewer.toml +3 -1
  30. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +7 -7
  31. package/packages/omo-codex/plugin/components/ultrawork/directive.md +1 -1
  32. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +5 -4
  33. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +4 -3
  34. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +12 -1
  35. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint.test.ts +19 -1
  36. package/packages/omo-codex/plugin/hooks/hooks.json +11 -0
  37. package/packages/omo-codex/plugin/model-catalog.json +49 -0
  38. package/packages/omo-codex/plugin/scripts/auto-update.mjs +159 -0
  39. package/packages/omo-codex/plugin/scripts/migrate-codex-config.mjs +269 -0
  40. package/packages/omo-codex/plugin/scripts/sync-hook-status-messages.mjs +3 -1
  41. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +6 -6
  42. package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +6 -6
  43. package/packages/omo-codex/plugin/skills/lcx-report-bug/SKILL.md +127 -0
  44. package/packages/omo-codex/plugin/skills/lcx-report-bug/agents/openai.yaml +9 -0
  45. package/packages/omo-codex/plugin/skills/refactor/SKILL.md +6 -6
  46. package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +6 -6
  47. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +7 -7
  48. package/packages/omo-codex/plugin/skills/start-work/SKILL.md +6 -6
  49. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +5 -4
  50. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +4 -3
  51. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +17 -17
  52. package/packages/omo-codex/plugin/test/aggregate.test.mjs +172 -19
  53. package/packages/omo-codex/plugin/test/auto-update.test.mjs +129 -0
  54. package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +2 -0
  55. package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +146 -0
  56. package/packages/omo-codex/plugin/test/sync-hook-status-messages.test.mjs +1 -0
  57. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +22 -0
  58. package/packages/omo-codex/scripts/install/cli-args.mjs +1 -1
  59. package/packages/omo-codex/scripts/install/config.mjs +2 -15
  60. package/packages/omo-codex/scripts/install/delegated-command.mjs +1 -1
  61. package/packages/omo-codex/scripts/install/legacy-bins.mjs +1 -0
  62. package/packages/omo-codex/scripts/install/model-catalog.mjs +66 -0
  63. package/packages/omo-codex/scripts/install/reasoning-config.mjs +65 -7
  64. package/packages/omo-codex/scripts/install-bin-links.test.mjs +23 -0
  65. package/packages/omo-codex/scripts/install-config-reasoning.test.mjs +82 -3
  66. package/packages/omo-codex/scripts/install-config.test.mjs +5 -6
  67. package/packages/omo-codex/scripts/install-local-entrypoint.test.mjs +30 -2
  68. package/packages/omo-codex/scripts/install-local.mjs +1 -1
  69. package/packages/shared-skills/skills/lcx-report-bug/SKILL.md +127 -0
  70. package/packages/shared-skills/skills/lcx-report-bug/agents/openai.yaml +9 -0
  71. package/packages/shared-skills/skills/review-work/SKILL.md +7 -7
  72. package/packages/shared-skills/skills/start-work/SKILL.md +6 -6
  73. package/packages/shared-skills/skills/ulw-plan/SKILL.md +11 -11
  74. package/postinstall.mjs +36 -3
  75. package/dist/cli/install-codex/codex-config-mcp.d.ts +0 -1
@@ -1 +1,2 @@
1
- export declare function ensureCodexReasoningConfig(config: string): string;
1
+ import type { CodexModelCatalog } from "./codex-model-catalog";
2
+ export declare function ensureCodexReasoningConfig(config: string, catalog: CodexModelCatalog): string;
@@ -0,0 +1,13 @@
1
+ export type CodexReasoningProfile = {
2
+ readonly model: string;
3
+ readonly modelContextWindow: number;
4
+ readonly modelReasoningEffort: string;
5
+ readonly planModeReasoningEffort: string;
6
+ };
7
+ export type CodexReasoningProfileMatch = Partial<CodexReasoningProfile>;
8
+ export type CodexModelCatalog = {
9
+ readonly current: CodexReasoningProfile;
10
+ readonly managedProfiles: readonly CodexReasoningProfileMatch[];
11
+ };
12
+ export declare function readCodexModelCatalog(codexPackageRoot: string): Promise<CodexModelCatalog>;
13
+ export declare function readCodexReasoningProfile(codexPackageRoot: string): Promise<CodexReasoningProfile>;
@@ -5,6 +5,7 @@ export declare class ConcurrencyManager {
5
5
  private queues;
6
6
  constructor(config?: BackgroundTaskConfig);
7
7
  getConcurrencyLimit(model: string): number;
8
+ getConcurrencyKey(model: string): string;
8
9
  acquire(model: string): Promise<void>;
9
10
  release(model: string): void;
10
11
  /**
@@ -2,8 +2,14 @@
2
2
  export declare function __disableScheduledForcedExitForTesting(): void;
3
3
  /** @internal test-only */
4
4
  export declare function __enableScheduledForcedExitForTesting(): void;
5
+ /** @internal test-only seam */
6
+ export declare function __isShutdownInProgressForTesting(): boolean;
7
+ /** @internal test-only seam */
8
+ export declare function __setShutdownInProgressForTesting(value: boolean): void;
5
9
  /** @internal test-only seam: exposes the error normalizer used by registerErrorEvent. */
6
10
  export declare function describeProcessCleanupError(error: unknown): Record<string, unknown>;
11
+ /** @internal test-only seam: exposes the harmless-error filter used by registerErrorEvent. */
12
+ export declare function isHarmlessShutdownError(error: unknown): boolean;
7
13
  interface CleanupTarget {
8
14
  shutdown(): void | Promise<void>;
9
15
  }
@@ -3,6 +3,7 @@ export declare const syncSubagentSessions: Set<string>;
3
3
  export declare function setMainSession(id: string | undefined): void;
4
4
  export declare function getMainSessionID(): string | undefined;
5
5
  export declare function registerAgentName(name: string): void;
6
+ export declare function clearRegisteredAgentNames(): void;
6
7
  export declare function isAgentRegistered(name: string): boolean;
7
8
  export declare function resolveRegisteredAgentName(name: string | undefined): string | undefined;
8
9
  /** @internal For testing only */
@@ -13,3 +13,4 @@ export * from "./skill-resolution-options";
13
13
  export * from "./loaded-skill-template-extractor";
14
14
  export * from "./skill-template-resolver";
15
15
  export * from "./config-source-discovery";
16
+ export * from "./opencode-config-skills-reader";
@@ -0,0 +1,5 @@
1
+ export interface HostSkillConfigShape {
2
+ paths?: string[];
3
+ urls?: string[];
4
+ }
5
+ export declare function readOpencodeConfigSkills(directory: string): HostSkillConfigShape | undefined;
@@ -1,4 +1,4 @@
1
- declare const ATTACHABLE_SESSION_STATUSES: readonly ["idle", "running", "busy"];
1
+ declare const ATTACHABLE_SESSION_STATUSES: readonly ["idle", "running", "busy", "retry"];
2
2
  export type AttachableSessionStatus = (typeof ATTACHABLE_SESSION_STATUSES)[number];
3
3
  export declare function isAttachableSessionStatus(status: string | undefined): status is AttachableSessionStatus;
4
4
  export {};
@@ -1,5 +1,6 @@
1
1
  type SessionStatus = {
2
2
  type: string;
3
3
  };
4
+ export declare function parseSessionStatusResponse(response: unknown): Record<string, SessionStatus>;
4
5
  export declare function parseSessionStatusMap(data: unknown): Record<string, SessionStatus>;
5
6
  export {};
@@ -1,4 +1,5 @@
1
1
  import { type CheckResult, type HookInput } from "@oh-my-opencode/comment-checker-core";
2
+ export declare function resolveCommentCheckerPathFromPath(binaryName: string, which?: (binary: string) => string | null): string | null;
2
3
  /**
3
4
  * Asynchronously get comment-checker binary path.
4
5
  * Will trigger lazy download if binary not found.
@@ -1,3 +1,3 @@
1
1
  export declare const HOOK_NAME = "tasks-todowrite-disabler";
2
2
  export declare const BLOCKED_TOOLS: string[];
3
- export declare const REPLACEMENT_MESSAGE = "TodoRead/TodoWrite are DISABLED because experimental.task_system is enabled.\n\n**ACTION REQUIRED**: RE-REGISTER what you were about to write as Todo using Task tools NOW. Then ASSIGN yourself and START WORKING immediately.\n\n**Use these tools instead:**\n- TaskCreate: Create new task with auto-generated ID\n- TaskUpdate: Update status, assign owner, add dependencies\n- TaskList: List active tasks with dependency info\n- TaskGet: Get full task details\n\n**Workflow:**\n1. TaskCreate({ subject: \"your task description\" })\n2. TaskUpdate({ id: \"T-xxx\", status: \"in_progress\", owner: \"your-thread-id\" })\n3. DO THE WORK\n4. TaskUpdate({ id: \"T-xxx\", status: \"completed\" })\n\nCRITICAL: 1 task = 1 task. Fire independent tasks concurrently.\n\n**STOP! DO NOT START WORKING DIRECTLY - NO MATTER HOW SMALL THE TASK!**\nEven if the task seems trivial (1 line fix, simple edit, quick change), you MUST:\n1. FIRST register it with TaskCreate\n2. THEN mark it in_progress\n3. ONLY THEN do the actual work\n4. FINALLY mark it completed\n\n**WHY?** Task tracking = visibility = accountability. Skipping registration = invisible work = chaos.\n\nDO NOT retry TodoWrite. Convert to TaskCreate NOW.";
3
+ export declare const REPLACEMENT_MESSAGE = "TodoRead is DISABLED because experimental.task_system is enabled.\n\n**ACTION REQUIRED**: Use Task tools to inspect work state. TodoWrite is still allowed so the live todo panel keeps updating, but reads belong to the task system.\n\n**Use these tools instead of TodoRead:**\n- TaskList: List active tasks with dependency info\n- TaskGet: Get full task details\n- TaskCreate: Create new task with auto-generated ID\n- TaskUpdate: Update status, assign owner, add dependencies\n\n**Workflow:**\n1. TaskCreate({ subject: \"your task description\" })\n2. TaskUpdate({ id: \"T-xxx\", status: \"in_progress\", owner: \"your-thread-id\" })\n3. DO THE WORK\n4. TaskUpdate({ id: \"T-xxx\", status: \"completed\" })\n\nCRITICAL: 1 task = 1 task. Fire independent tasks concurrently.\n\n**STOP! DO NOT START WORKING DIRECTLY - NO MATTER HOW SMALL THE TASK!**\nEven if the task seems trivial (1 line fix, simple edit, quick change), you MUST:\n1. FIRST register it with TaskCreate\n2. THEN mark it in_progress\n3. ONLY THEN do the actual work\n4. FINALLY mark it completed\n\n**WHY?** Task tracking = visibility = accountability. Skipping registration = invisible work = chaos.\n\nDO NOT retry TodoRead. Use TaskList or TaskGet NOW.";