oh-my-openagent 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
@@ -0,0 +1,47 @@
1
+ // bin/version-mismatch.js
2
+ // Detects platform binary version mismatch against the main package.
3
+ // Background: issue #3918 - `oh-my-opencode-windows-x64@3.9.0` could stay installed
4
+ // alongside `oh-my-opencode@4.0.0`, leaving the startup banner pinned to 3.9.0.
5
+
6
+ /**
7
+ * Strips an optional leading "v" so callers can pass either "4.5.1" or "v4.5.1".
8
+ * Pre-release suffixes (e.g. "-beta.1") are preserved because the release
9
+ * workflow publishes prereleases as standalone versions on the `next` dist-tag,
10
+ * and `oh-my-opencode@4.5.1-beta.1` paired with `oh-my-opencode-x64@4.5.1`
11
+ * IS a real mismatch the wrapper would silently honour.
12
+ *
13
+ * @param {string} version
14
+ * @returns {string} Full version with leading "v" stripped.
15
+ */
16
+ function normalizeVersion(version) {
17
+ return version.replace(/^v/, "");
18
+ }
19
+
20
+ /**
21
+ * Detect a main / platform-binary version mismatch.
22
+ *
23
+ * Both versions must be known to report a mismatch; if either is null/undefined,
24
+ * the check is skipped (returns null) rather than producing a false alarm.
25
+ *
26
+ * Comparison is exact on the full semver string (after stripping a leading "v"),
27
+ * including any pre-release suffix. This means `4.5.1-beta.1` and `4.5.1` are
28
+ * treated as DIFFERENT versions, matching the publish workflow that ships
29
+ * prerelease builds to the `next` dist-tag alongside stable releases.
30
+ *
31
+ * @param {object} input
32
+ * @param {string | null | undefined} input.mainVersion
33
+ * @param {string | null | undefined} input.platformVersion
34
+ * @param {string} input.platformPackage
35
+ * @returns {{ mainVersion: string, platformVersion: string, platformPackage: string } | null}
36
+ */
37
+ export function detectPlatformBinaryMismatch({ mainVersion, platformVersion, platformPackage }) {
38
+ if (!mainVersion || !platformVersion) {
39
+ return null;
40
+ }
41
+
42
+ if (normalizeVersion(mainVersion) === normalizeVersion(platformVersion)) {
43
+ return null;
44
+ }
45
+
46
+ return { mainVersion, platformVersion, platformPackage };
47
+ }
@@ -0,0 +1,120 @@
1
+ // bin/version-mismatch.test.ts
2
+ import { describe, expect, test } from "bun:test";
3
+ import { detectPlatformBinaryMismatch } from "./version-mismatch.js";
4
+
5
+ describe("detectPlatformBinaryMismatch", () => {
6
+ test("returns null when main and platform versions match", () => {
7
+ // #given identical main and platform binary versions
8
+ const input = { mainVersion: "4.5.1", platformVersion: "4.5.1", platformPackage: "oh-my-opencode-windows-x64" };
9
+
10
+ // #when detecting mismatch
11
+ const result = detectPlatformBinaryMismatch(input);
12
+
13
+ // #then no mismatch is reported
14
+ expect(result).toBeNull();
15
+ });
16
+
17
+ test("reports mismatch when platform version is older than main", () => {
18
+ // #given main package newer than installed platform binary (issue #3918 case)
19
+ const input = { mainVersion: "4.5.1", platformVersion: "3.9.0", platformPackage: "oh-my-opencode-windows-x64" };
20
+
21
+ // #when detecting mismatch
22
+ const result = detectPlatformBinaryMismatch(input);
23
+
24
+ // #then mismatch object is returned with both versions
25
+ expect(result).toEqual({
26
+ mainVersion: "4.5.1",
27
+ platformVersion: "3.9.0",
28
+ platformPackage: "oh-my-opencode-windows-x64",
29
+ });
30
+ });
31
+
32
+ test("reports mismatch when platform version is newer than main", () => {
33
+ // #given platform binary newer than main wrapper
34
+ const input = { mainVersion: "4.0.0", platformVersion: "4.5.1", platformPackage: "oh-my-opencode-linux-x64" };
35
+
36
+ // #when detecting mismatch
37
+ const result = detectPlatformBinaryMismatch(input);
38
+
39
+ // #then mismatch is still reported (any difference is a mismatch)
40
+ expect(result).not.toBeNull();
41
+ expect(result?.platformVersion).toBe("4.5.1");
42
+ });
43
+
44
+ test("returns null when main version is unknown", () => {
45
+ // #given main version could not be read
46
+ const input = { mainVersion: null, platformVersion: "4.5.1", platformPackage: "oh-my-opencode-windows-x64" };
47
+
48
+ // #when detecting mismatch
49
+ const result = detectPlatformBinaryMismatch(input);
50
+
51
+ // #then no mismatch is reported - cannot compare without main version
52
+ expect(result).toBeNull();
53
+ });
54
+
55
+ test("returns null when platform version is unknown", () => {
56
+ // #given platform package.json could not be read
57
+ const input = { mainVersion: "4.5.1", platformVersion: null, platformPackage: "oh-my-opencode-windows-x64" };
58
+
59
+ // #when detecting mismatch
60
+ const result = detectPlatformBinaryMismatch(input);
61
+
62
+ // #then no mismatch is reported - silently skip rather than alarm
63
+ expect(result).toBeNull();
64
+ });
65
+
66
+ test("reports mismatch when main is a prerelease and platform is the matching stable", () => {
67
+ // #given prerelease main against stable platform binary - the publish workflow
68
+ // ships prereleases under the `next` dist-tag, so this combo is a real
69
+ // mismatch the wrapper would silently honour
70
+ const input = { mainVersion: "4.5.1-beta.1", platformVersion: "4.5.1", platformPackage: "oh-my-opencode-darwin-arm64" };
71
+
72
+ // #when detecting mismatch
73
+ const result = detectPlatformBinaryMismatch(input);
74
+
75
+ // #then mismatch is reported with the full prerelease string preserved
76
+ expect(result).toEqual({
77
+ mainVersion: "4.5.1-beta.1",
78
+ platformVersion: "4.5.1",
79
+ platformPackage: "oh-my-opencode-darwin-arm64",
80
+ });
81
+ });
82
+
83
+ test("reports mismatch between two different prerelease iterations", () => {
84
+ // #given two different prerelease iterations - publish.yml allows multiple
85
+ // beta builds on the `next` dist-tag, so beta.1 vs beta.2 IS a mismatch
86
+ const input = { mainVersion: "4.5.1-beta.2", platformVersion: "4.5.1-beta.1", platformPackage: "oh-my-opencode-linux-x64" };
87
+
88
+ // #when detecting mismatch
89
+ const result = detectPlatformBinaryMismatch(input);
90
+
91
+ // #then mismatch is reported with both prerelease tags preserved
92
+ expect(result).toEqual({
93
+ mainVersion: "4.5.1-beta.2",
94
+ platformVersion: "4.5.1-beta.1",
95
+ platformPackage: "oh-my-opencode-linux-x64",
96
+ });
97
+ });
98
+
99
+ test("returns null when both versions are the exact same prerelease", () => {
100
+ // #given matched prereleases on both sides
101
+ const input = { mainVersion: "4.5.1-beta.1", platformVersion: "4.5.1-beta.1", platformPackage: "oh-my-opencode-windows-x64" };
102
+
103
+ // #when detecting mismatch
104
+ const result = detectPlatformBinaryMismatch(input);
105
+
106
+ // #then no mismatch is reported
107
+ expect(result).toBeNull();
108
+ });
109
+
110
+ test("normalizes leading 'v' so 'v4.5.1' matches '4.5.1'", () => {
111
+ // #given the same version with and without a leading "v"
112
+ const input = { mainVersion: "v4.5.1", platformVersion: "4.5.1", platformPackage: "oh-my-opencode-windows-x64" };
113
+
114
+ // #when detecting mismatch
115
+ const result = detectPlatformBinaryMismatch(input);
116
+
117
+ // #then leading "v" is treated as cosmetic, no mismatch reported
118
+ expect(result).toBeNull();
119
+ });
120
+ });
@@ -0,0 +1,12 @@
1
+ export type CodexUlwLoopCommand = {
2
+ readonly executable: string;
3
+ readonly argsPrefix: readonly string[];
4
+ };
5
+ type ResolveCodexUlwLoopCommandInput = {
6
+ readonly env?: NodeJS.ProcessEnv;
7
+ readonly homeDir?: string;
8
+ readonly currentExecutablePaths?: readonly string[];
9
+ };
10
+ export declare function resolveCodexUlwLoopCommand(input?: ResolveCodexUlwLoopCommandInput): CodexUlwLoopCommand | null;
11
+ export declare function codexUlwLoop(args: readonly string[]): Promise<number>;
12
+ export {};
@@ -2,11 +2,13 @@ import type { CheckResult } from "../types";
2
2
  interface ServerPluginInfo {
3
3
  registered: boolean;
4
4
  configPath: string | null;
5
+ packageExportsTui: boolean | null;
5
6
  }
6
7
  interface TuiPluginInfo {
7
8
  registered: boolean;
8
9
  configPath: string | null;
9
10
  exists: boolean;
11
+ hasNamedTuiEntry: boolean;
10
12
  }
11
13
  export declare function detectServerPluginRegistration(): ServerPluginInfo;
12
14
  export declare function detectTuiPluginRegistration(): TuiPluginInfo;