oh-my-opencode 5.1.46 → 5.1.48

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 (124) hide show
  1. package/.agents/command/publish.md +3 -4
  2. package/.agents/skills/publish/SKILL.md +3 -4
  3. package/.opencode/command/publish.md +3 -4
  4. package/dist/agents/atlas/agent.d.ts +3 -2
  5. package/dist/agents/sisyphus/index.d.ts +1 -0
  6. package/dist/agents/sisyphus/kimi-k3-1.d.ts +9 -0
  7. package/dist/agents/sisyphus-agent-factory.d.ts +1 -1
  8. package/dist/agents/sisyphus-junior/agent.d.ts +1 -1
  9. package/dist/agents/sisyphus-junior/index.d.ts +1 -0
  10. package/dist/agents/sisyphus-junior/kimi-k3-1.d.ts +6 -0
  11. package/dist/agents/types.d.ts +2 -2
  12. package/dist/cli/index.js +30 -22
  13. package/dist/cli/service-auth/keystore.d.ts +8 -3
  14. package/dist/cli-node/index.js +30 -22
  15. package/dist/index.js +635 -18
  16. package/dist/skills/browser/runtime/omowright/manifest.json +1 -1
  17. package/dist/skills/ulw-research/SKILL.md +59 -2
  18. package/dist/skills/ulw-research/references/deliverable-phase.md +57 -8
  19. package/dist/skills/ulw-research/references/report-gates.md +2 -1
  20. package/dist/skills/ulw-research/scripts/contracts.mjs +3 -11
  21. package/dist/skills/ulw-research/scripts/contracts.test.ts +1 -0
  22. package/dist/skills/ulw-research/scripts/copy-returns-fidelity-policy.test.ts +156 -0
  23. package/dist/skills/ulw-research/scripts/copy-returns-polish.test.ts +209 -0
  24. package/dist/skills/ulw-research/scripts/fact-commands-fill.mjs +86 -0
  25. package/dist/skills/ulw-research/scripts/fact-commands-meaning.mjs +21 -44
  26. package/dist/skills/ulw-research/scripts/fact-commands-polish.mjs +132 -0
  27. package/dist/skills/ulw-research/scripts/fact-commands-verify.mjs +37 -4
  28. package/dist/skills/ulw-research/scripts/fact-commands.mjs +8 -47
  29. package/dist/skills/ulw-research/scripts/fact-fill.mjs +3 -2
  30. package/dist/skills/ulw-research/scripts/fact-pairs.mjs +7 -9
  31. package/dist/skills/ulw-research/scripts/fact-pairs.test.ts +7 -23
  32. package/dist/skills/ulw-research/scripts/fidelity-policy.mjs +183 -0
  33. package/dist/skills/ulw-research/scripts/references-fences.test.ts +25 -0
  34. package/dist/skills/ulw-research/scripts/report-tools.test.ts +329 -1
  35. package/dist/skills/ulw-research/scripts/source-commands.mjs +8 -3
  36. package/dist/skills/ulw-research/scripts/tests/fixtures/fidelity/polish-edits.json +12 -0
  37. package/dist/tui.js +14 -14
  38. package/package.json +14 -14
  39. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  40. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +1 -2
  41. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  42. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  43. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  44. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  45. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  46. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  47. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  48. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  49. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  50. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  51. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  52. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  53. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  54. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  55. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  56. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  57. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  58. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  59. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  60. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  61. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  62. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  63. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  64. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  65. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  66. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  67. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  68. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  69. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  70. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  71. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  72. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  73. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  74. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  75. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  76. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  77. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  78. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  79. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  80. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  81. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  82. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  83. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  84. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  85. package/packages/omo-codex/plugin/package-lock.json +12 -12
  86. package/packages/omo-codex/plugin/package.json +1 -1
  87. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +1 -1
  88. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +1 -1
  89. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +58 -1
  90. package/packages/omo-codex/plugin/skills/ulw-research/references/deliverable-phase.md +57 -8
  91. package/packages/omo-codex/plugin/skills/ulw-research/references/report-gates.md +2 -1
  92. package/packages/omo-codex/plugin/skills/ulw-research/scripts/contracts.mjs +3 -11
  93. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-commands-fill.mjs +86 -0
  94. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-commands-meaning.mjs +21 -44
  95. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-commands-polish.mjs +132 -0
  96. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-commands-verify.mjs +37 -4
  97. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-commands.mjs +8 -47
  98. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-fill.mjs +3 -2
  99. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-pairs.mjs +7 -9
  100. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-policy.mjs +183 -0
  101. package/packages/omo-codex/plugin/skills/ulw-research/scripts/source-commands.mjs +8 -3
  102. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +1 -1
  103. package/packages/omo-codex/scripts/install-dist/install-local.mjs +4 -5
  104. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
  105. package/packages/shared-skills/skills/ulw-research/SKILL.md +59 -2
  106. package/packages/shared-skills/skills/ulw-research/references/deliverable-phase.md +57 -8
  107. package/packages/shared-skills/skills/ulw-research/references/report-gates.md +2 -1
  108. package/packages/shared-skills/skills/ulw-research/scripts/contracts.mjs +3 -11
  109. package/packages/shared-skills/skills/ulw-research/scripts/contracts.test.ts +1 -0
  110. package/packages/shared-skills/skills/ulw-research/scripts/copy-returns-fidelity-policy.test.ts +156 -0
  111. package/packages/shared-skills/skills/ulw-research/scripts/copy-returns-polish.test.ts +209 -0
  112. package/packages/shared-skills/skills/ulw-research/scripts/fact-commands-fill.mjs +86 -0
  113. package/packages/shared-skills/skills/ulw-research/scripts/fact-commands-meaning.mjs +21 -44
  114. package/packages/shared-skills/skills/ulw-research/scripts/fact-commands-polish.mjs +132 -0
  115. package/packages/shared-skills/skills/ulw-research/scripts/fact-commands-verify.mjs +37 -4
  116. package/packages/shared-skills/skills/ulw-research/scripts/fact-commands.mjs +8 -47
  117. package/packages/shared-skills/skills/ulw-research/scripts/fact-fill.mjs +3 -2
  118. package/packages/shared-skills/skills/ulw-research/scripts/fact-pairs.mjs +7 -9
  119. package/packages/shared-skills/skills/ulw-research/scripts/fact-pairs.test.ts +7 -23
  120. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-policy.mjs +183 -0
  121. package/packages/shared-skills/skills/ulw-research/scripts/references-fences.test.ts +25 -0
  122. package/packages/shared-skills/skills/ulw-research/scripts/report-tools.test.ts +329 -1
  123. package/packages/shared-skills/skills/ulw-research/scripts/source-commands.mjs +8 -3
  124. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/polish-edits.json +12 -0
@@ -205,8 +205,7 @@ gh release view "v${NEW_VERSION}" --json tagName,url --jq '{tag: .tagName, url:
205
205
 
206
206
  **Release notes are written BEFORE the release, not after.**
207
207
 
208
- The release body is extracted from the `CHANGELOG.md` section for this version. Author the user-facing
209
- notes under `## [Unreleased]` and land them before dispatching `/publish`; release-state preparation
208
+ The release body is extracted from the `CHANGELOG.md` section for this version. Add the user-facing notes as `changes/unreleased/<pr-number>.md` fragments (one per PR, named for the PR) and land them before dispatching `/publish`; release-state preparation
210
209
  stamps that heading into `## [<version>] - <UTC date>` and commits it with the release state, so the
211
210
  published commit already carries its own notes.
212
211
 
@@ -220,13 +219,13 @@ bun run script/print-release-notes.ts "${NEW_VERSION}" /tmp/contributors.md
220
219
  <agent-instruction>
221
220
  After running the preview, present the output to the user and say:
222
221
 
223
- > **This is the exact body the release will publish:** the notes you authored under `[Unreleased]`,
222
+ > **This is the exact body the release will publish:** the assembled fragments,
224
223
  > then contributor thank-yous for non-team contributors, then the install footer.
225
224
  >
226
225
  > Both steps are fail-closed: an absent, empty, or duplicated section aborts the release instead of
227
226
  > publishing blank notes, and re-stamping a version that already has a section is refused.
228
227
  >
229
- > If the `[Unreleased]` section is empty, STOP and write the notes first — the release cannot proceed.
228
+ > If `changes/unreleased/` holds no fragments, STOP and write them first — the release cannot proceed.
230
229
 
231
230
  **APPROVAL GATE (single, binary):** The user's initial publish request with a named bump type IS the only approval this workflow requires. Do NOT wait for a separate acknowledgement here. Present the preview, then IMMEDIATELY proceed to Step 6. The only exception: if the user explicitly said "let me review the changelog before you continue" (or equivalent), stop and wait. Otherwise continue without ending the turn.
232
231
  </agent-instruction>
@@ -204,8 +204,7 @@ gh release view "v${NEW_VERSION}" --json tagName,url --jq '{tag: .tagName, url:
204
204
 
205
205
  **Release notes are written BEFORE the release, not after.**
206
206
 
207
- The release body is extracted from the `CHANGELOG.md` section for this version. Author the user-facing
208
- notes under `## [Unreleased]` and land them before dispatching `/publish`; release-state preparation
207
+ The release body is extracted from the `CHANGELOG.md` section for this version. Add the user-facing notes as `changes/unreleased/<pr-number>.md` fragments (one per PR, named for the PR) and land them before dispatching `/publish`; release-state preparation
209
208
  stamps that heading into `## [<version>] - <UTC date>` and commits it with the release state, so the
210
209
  published commit already carries its own notes.
211
210
 
@@ -219,13 +218,13 @@ bun run script/print-release-notes.ts "${NEW_VERSION}" /tmp/contributors.md
219
218
  <agent-instruction>
220
219
  After running the preview, present the output to the user and say:
221
220
 
222
- > **This is the exact body the release will publish:** the notes you authored under `[Unreleased]`,
221
+ > **This is the exact body the release will publish:** the assembled fragments,
223
222
  > then contributor thank-yous for non-team contributors, then the install footer.
224
223
  >
225
224
  > Both steps are fail-closed: an absent, empty, or duplicated section aborts the release instead of
226
225
  > publishing blank notes, and re-stamping a version that already has a section is refused.
227
226
  >
228
- > If the `[Unreleased]` section is empty, STOP and write the notes first — the release cannot proceed.
227
+ > If `changes/unreleased/` holds no fragments, STOP and write them first — the release cannot proceed.
229
228
 
230
229
  **APPROVAL GATE (single, binary):** The user's initial publish request with a named bump type IS the only approval this workflow requires. Do NOT wait for a separate acknowledgement here. Present the preview, then IMMEDIATELY proceed to Step 6. The only exception: if the user explicitly said "let me review the changelog before you continue" (or equivalent), stop and wait. Otherwise continue without ending the turn.
231
230
  </agent-instruction>
@@ -205,8 +205,7 @@ gh release view "v${NEW_VERSION}" --json tagName,url --jq '{tag: .tagName, url:
205
205
 
206
206
  **Release notes are written BEFORE the release, not after.**
207
207
 
208
- The release body is extracted from the `CHANGELOG.md` section for this version. Author the user-facing
209
- notes under `## [Unreleased]` and land them before dispatching `/publish`; release-state preparation
208
+ The release body is extracted from the `CHANGELOG.md` section for this version. Add the user-facing notes as `changes/unreleased/<pr-number>.md` fragments (one per PR, named for the PR) and land them before dispatching `/publish`; release-state preparation
210
209
  stamps that heading into `## [<version>] - <UTC date>` and commits it with the release state, so the
211
210
  published commit already carries its own notes.
212
211
 
@@ -220,13 +219,13 @@ bun run script/print-release-notes.ts "${NEW_VERSION}" /tmp/contributors.md
220
219
  <agent-instruction>
221
220
  After running the preview, present the output to the user and say:
222
221
 
223
- > **This is the exact body the release will publish:** the notes you authored under `[Unreleased]`,
222
+ > **This is the exact body the release will publish:** the assembled fragments,
224
223
  > then contributor thank-yous for non-team contributors, then the install footer.
225
224
  >
226
225
  > Both steps are fail-closed: an absent, empty, or duplicated section aborts the release instead of
227
226
  > publishing blank notes, and re-stamping a version that already has a section is refused.
228
227
  >
229
- > If the `[Unreleased]` section is empty, STOP and write the notes first — the release cannot proceed.
228
+ > If `changes/unreleased/` holds no fragments, STOP and write them first — the release cannot proceed.
230
229
 
231
230
  **APPROVAL GATE (single, binary):** The user's initial publish request with a named bump type IS the only approval this workflow requires. Do NOT wait for a separate acknowledgement here. Present the preview, then IMMEDIATELY proceed to Step 6. The only exception: if the user explicitly said "let me review the changelog before you continue" (or equivalent), stop and wait. Otherwise continue without ending the turn.
232
231
  </agent-instruction>
@@ -7,7 +7,8 @@
7
7
  * 1. Claude Opus 4.7 → opus-4-7.md (literal-following + explicit fan-out push)
8
8
  * 2. GPT family → gpt.md (shared GPT-family calibration)
9
9
  * 3. Gemini family → gemini.md
10
- * 4. Kimi K3 → kimi-k3.md (K3-native; checked first among Kimi)
10
+ * 4. Kimi K3.1 → kimi-k3-1.md (own copy of kimi-k3.md; checked before K3)
11
+ * 4b. Kimi K3 → kimi-k3.md (K3-native; checked first among the rest of Kimi)
11
12
  * 5. Kimi K2.7 → kimi-k2-7.md (restrained, outcome-first; checked before generic kimi)
12
13
  * 6. Kimi K2.x family → kimi.md (Claude-family base + K2.6 thinking-mode calibration)
13
14
  * 7. GLM family → glm.md (GLM 5.2 calibration)
@@ -18,7 +19,7 @@ import type { AgentMode, AgentPromptMetadata } from "../types";
18
19
  import type { AvailableAgent, AvailableSkill } from "../dynamic-agent-prompt-builder";
19
20
  import type { CategoryConfig } from "../../config/schema";
20
21
  declare const MODE: AgentMode;
21
- export type AtlasPromptSource = "default" | "gpt" | "gemini" | "kimi" | "kimi-k3" | "kimi-k2-7" | "opus-4-7" | "glm";
22
+ export type AtlasPromptSource = "default" | "gpt" | "gemini" | "kimi" | "kimi-k3" | "kimi-k3-1" | "kimi-k2-7" | "opus-4-7" | "glm";
22
23
  export declare function getAtlasPromptSource(model?: string): AtlasPromptSource;
23
24
  export interface OrchestratorContext {
24
25
  model?: string;
@@ -28,3 +28,4 @@ export { buildGlm52SisyphusPrompt } from "./glm-5-2";
28
28
  export { buildKimiK26SisyphusPrompt } from "./kimi-k2-6";
29
29
  export { buildKimiK27SisyphusPrompt } from "./kimi-k2-7";
30
30
  export { buildKimiK3SisyphusPrompt } from "./kimi-k3";
31
+ export { buildKimiK31SisyphusPrompt } from "./kimi-k3-1";
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Kimi K3.1 Sisyphus prompt: its own copy of kimi-k3.ts (Q, 2026-10-24), so later K3 tuning never
3
+ * changes what K3.1 sees. Copied at omo dev de27f2ebfa; only the identity line and the function names
4
+ * differ. Tune it on K3.1 evidence from here on. The K3 design notes in kimi-k3.ts applied at the copy.
5
+ */
6
+ import type { AvailableAgent, AvailableTool, AvailableSkill, AvailableCategory } from "../dynamic-agent-prompt-builder";
7
+ import { categorizeTools } from "../dynamic-agent-prompt-builder";
8
+ export declare function buildKimiK31SisyphusPrompt(model: string, availableAgents: AvailableAgent[], availableTools?: AvailableTool[], availableSkills?: AvailableSkill[], availableCategories?: AvailableCategory[], useTaskSystem?: boolean): string;
9
+ export { categorizeTools };
@@ -9,7 +9,7 @@ declare const MODE: AgentMode;
9
9
  * runtime model resolves to a different family than the configured one, the baked
10
10
  * body is the wrong family and must be rebuilt (issue #5297/#5316).
11
11
  */
12
- export type SisyphusPromptFamily = "kimi-k3" | "kimi-k2-7" | "kimi-k2-6" | "gpt-5-5" | "gpt-5-4" | "claude-fable-5" | "claude-opus-5" | "claude-opus-4-8" | "claude-opus-4-7" | "glm-5-2" | "grok-4" | "fallback";
12
+ export type SisyphusPromptFamily = "kimi-k3-1" | "kimi-k3" | "kimi-k2-7" | "kimi-k2-6" | "gpt-5-5" | "gpt-5-4" | "claude-fable-5" | "claude-opus-5" | "claude-opus-4-8" | "claude-opus-4-7" | "glm-5-2" | "grok-4" | "fallback";
13
13
  export declare function resolveSisyphusPromptFamily(model: string): SisyphusPromptFamily;
14
14
  export declare function createSisyphusAgent(model: string, availableAgents?: AvailableAgent[], availableToolNames?: string[], availableSkills?: AvailableSkill[], availableCategories?: AvailableCategory[], useTaskSystem?: boolean): AgentConfig;
15
15
  export declare namespace createSisyphusAgent {
@@ -21,7 +21,7 @@ export declare const SISYPHUS_JUNIOR_DEFAULTS: {
21
21
  readonly model: "anthropic/claude-sonnet-5";
22
22
  readonly temperature: 0.1;
23
23
  };
24
- export type SisyphusJuniorPromptSource = "default" | "kimi-k2" | "kimi-k2-7" | "kimi-k3" | "gpt" | "gpt-5-5" | "gpt-5-4" | "gemini" | "glm-5-2";
24
+ export type SisyphusJuniorPromptSource = "default" | "kimi-k2" | "kimi-k2-7" | "kimi-k3" | "kimi-k3-1" | "gpt" | "gpt-5-5" | "gpt-5-4" | "gemini" | "glm-5-2";
25
25
  export declare function getSisyphusJuniorPromptSource(model?: string): SisyphusJuniorPromptSource;
26
26
  /**
27
27
  * Builds the appropriate Sisyphus-Junior prompt based on model.
@@ -2,6 +2,7 @@ export { buildDefaultSisyphusJuniorPrompt } from "./default";
2
2
  export { buildKimiK26SisyphusJuniorPrompt } from "./kimi-k2-6";
3
3
  export { buildKimiK27SisyphusJuniorPrompt } from "./kimi-k2-7";
4
4
  export { buildKimiK3SisyphusJuniorPrompt } from "./kimi-k3";
5
+ export { buildKimiK31SisyphusJuniorPrompt } from "./kimi-k3-1";
5
6
  export { buildGptSisyphusJuniorPrompt } from "./gpt";
6
7
  export { buildGpt54SisyphusJuniorPrompt } from "./gpt-5-4";
7
8
  export { buildGpt55SisyphusJuniorPrompt } from "./gpt-5-5";
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Kimi K3.1 Sisyphus-Junior prompt: its own copy of kimi-k3.ts (Q, 2026-10-24), so later K3 tuning never
3
+ * changes what K3.1 sees. Copied at omo dev de27f2ebfa; only the identity line and the function names
4
+ * differ. Tune it on K3.1 evidence from here on. The K3 design notes in kimi-k3.ts applied at the copy.
5
+ */
6
+ export declare function buildKimiK31SisyphusJuniorPrompt(useTaskSystem: boolean, promptAppend?: string): string;
@@ -1,6 +1,6 @@
1
1
  import type { AgentConfig } from "@opencode-ai/sdk";
2
- import { isClaudeFable5Model, isClaudeFableOrMythosModel, isClaudeOpus46Model, isClaudeOpus47Model, isClaudeOpus47OrLaterModel, isClaudeOpus48Model, isClaudeOpus5Model, isGeminiModel, isGlmModel, isGptModel, isGrok45Model, isGrok46Model, isKimiK2CodeModel, isKimiK2Model, isKimiK27Model, isKimiK28Model, isKimiK3Model, isMiniMaxModel } from "@oh-my-opencode/model-core";
3
- export { isClaudeFable5Model, isClaudeFableOrMythosModel, isClaudeOpus46Model, isClaudeOpus47Model, isClaudeOpus47OrLaterModel, isClaudeOpus48Model, isClaudeOpus5Model, isGeminiModel, isGlmModel, isGptModel, isGrok45Model, isGrok46Model, isKimiK2CodeModel, isKimiK2Model, isKimiK27Model, isKimiK28Model, isKimiK3Model, isMiniMaxModel, };
2
+ import { isClaudeFable5Model, isClaudeFableOrMythosModel, isClaudeOpus46Model, isClaudeOpus47Model, isClaudeOpus47OrLaterModel, isClaudeOpus48Model, isClaudeOpus5Model, isGeminiModel, isGlmModel, isGptModel, isGrok45Model, isGrok46Model, isKimiK2CodeModel, isKimiK2Model, isKimiK27Model, isKimiK28Model, isKimiK3Model, isKimiK31Model, isMiniMaxModel } from "@oh-my-opencode/model-core";
3
+ export { isClaudeFable5Model, isClaudeFableOrMythosModel, isClaudeOpus46Model, isClaudeOpus47Model, isClaudeOpus47OrLaterModel, isClaudeOpus48Model, isClaudeOpus5Model, isGeminiModel, isGlmModel, isGptModel, isGrok45Model, isGrok46Model, isKimiK2CodeModel, isKimiK2Model, isKimiK27Model, isKimiK28Model, isKimiK3Model, isKimiK31Model, isMiniMaxModel, };
4
4
  /**
5
5
  * Anthropic Opus 4.7+, Fable, and Mythos models reject thinking.type "enabled";
6
6
  * they require adaptive thinking plus an effort, which OpenCode core derives from
package/dist/cli/index.js CHANGED
@@ -2132,7 +2132,7 @@ var package_default;
2132
2132
  var init_package = __esm(() => {
2133
2133
  package_default = {
2134
2134
  name: "oh-my-opencode",
2135
- version: "5.1.46",
2135
+ version: "5.1.48",
2136
2136
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
2137
2137
  main: "./dist/index.js",
2138
2138
  types: "dist/index.d.ts",
@@ -2315,7 +2315,7 @@ var init_package = __esm(() => {
2315
2315
  },
2316
2316
  devDependencies: {
2317
2317
  "@clack/prompts": "^1.8.1",
2318
- "@code-yeongyu/senpi": "2026.10.23-1",
2318
+ "@code-yeongyu/senpi": "2026.10.25-2",
2319
2319
  "@modelcontextprotocol/sdk": "^1.30.0",
2320
2320
  "@oh-my-opencode/agents-md-core": "workspace:*",
2321
2321
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
@@ -2378,18 +2378,18 @@ var init_package = __esm(() => {
2378
2378
  typescript: "^7.0.2"
2379
2379
  },
2380
2380
  optionalDependencies: {
2381
- "oh-my-opencode-darwin-arm64": "5.1.46",
2382
- "oh-my-opencode-darwin-x64": "5.1.46",
2383
- "oh-my-opencode-darwin-x64-baseline": "5.1.46",
2384
- "oh-my-opencode-linux-arm64": "5.1.46",
2385
- "oh-my-opencode-linux-arm64-musl": "5.1.46",
2386
- "oh-my-opencode-linux-x64": "5.1.46",
2387
- "oh-my-opencode-linux-x64-baseline": "5.1.46",
2388
- "oh-my-opencode-linux-x64-musl": "5.1.46",
2389
- "oh-my-opencode-linux-x64-musl-baseline": "5.1.46",
2390
- "oh-my-opencode-windows-arm64": "5.1.46",
2391
- "oh-my-opencode-windows-x64": "5.1.46",
2392
- "oh-my-opencode-windows-x64-baseline": "5.1.46"
2381
+ "oh-my-opencode-darwin-arm64": "5.1.48",
2382
+ "oh-my-opencode-darwin-x64": "5.1.48",
2383
+ "oh-my-opencode-darwin-x64-baseline": "5.1.48",
2384
+ "oh-my-opencode-linux-arm64": "5.1.48",
2385
+ "oh-my-opencode-linux-arm64-musl": "5.1.48",
2386
+ "oh-my-opencode-linux-x64": "5.1.48",
2387
+ "oh-my-opencode-linux-x64-baseline": "5.1.48",
2388
+ "oh-my-opencode-linux-x64-musl": "5.1.48",
2389
+ "oh-my-opencode-linux-x64-musl-baseline": "5.1.48",
2390
+ "oh-my-opencode-windows-arm64": "5.1.48",
2391
+ "oh-my-opencode-windows-x64": "5.1.48",
2392
+ "oh-my-opencode-windows-x64-baseline": "5.1.48"
2393
2393
  },
2394
2394
  overrides: {
2395
2395
  hono: "^4.13.8",
@@ -7163,7 +7163,7 @@ function resolveStdio(options) {
7163
7163
  return [options.stdin ?? "ignore", options.stdout ?? "pipe", options.stderr ?? "inherit"];
7164
7164
  }
7165
7165
  function createBunSpawnOptions(options) {
7166
- return { ...options, windowsHide: true };
7166
+ return { ...options, env: options.env ?? process.env, windowsHide: true };
7167
7167
  }
7168
7168
  function createNodeSpawnOptions(options, platform = process.platform) {
7169
7169
  const nodeOptions = {
@@ -10184,6 +10184,10 @@ function transformModelForProviderUsingAnthropicBehavior(provider, model) {
10184
10184
  return "k3";
10185
10185
  if (model === "kimi-k3-256k")
10186
10186
  return "k3-256k";
10187
+ if (model === "kimi-k3.1-pro")
10188
+ return "k3.1-pro";
10189
+ if (model === "kimi-k3.1-pro-highspeed")
10190
+ return "k3.1-pro-highspeed";
10187
10191
  }
10188
10192
  return model;
10189
10193
  }
@@ -92381,7 +92385,7 @@ var package_default2;
92381
92385
  var init_package2 = __esm(() => {
92382
92386
  package_default2 = {
92383
92387
  name: "@oh-my-opencode/omo-codex",
92384
- version: "5.1.46",
92388
+ version: "5.1.48",
92385
92389
  type: "module",
92386
92390
  private: true,
92387
92391
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -93954,8 +93958,7 @@ function windowsNodeDiscoveryLines() {
93954
93958
  ' for /f "tokens=* delims= " %%N in ("!OMO_NODE_BINARY!") do set "OMO_NODE_BINARY=%%N"',
93955
93959
  ` if "!OMO_NODE_BINARY:~0,1!"=="'" set "OMO_NODE_BINARY=!OMO_NODE_BINARY:~1!"`,
93956
93960
  ` if "!OMO_NODE_BINARY:~-1!"=="'" set "OMO_NODE_BINARY=!OMO_NODE_BINARY:~0,-1!"`,
93957
- ' if "!OMO_NODE_BINARY:~0,1!"=="^"" set "OMO_NODE_BINARY=!OMO_NODE_BINARY:~1!"',
93958
- ' if "!OMO_NODE_BINARY:~-1!"=="^"" set "OMO_NODE_BINARY=!OMO_NODE_BINARY:~0,-1!"',
93961
+ ' set "OMO_NODE_BINARY=!OMO_NODE_BINARY:"=!"',
93959
93962
  ' if defined OMO_NODE_BINARY if not exist "!OMO_NODE_BINARY!" set "OMO_NODE_BINARY="',
93960
93963
  ")",
93961
93964
  'if not defined OMO_NODE_BINARY where node >nul 2>nul && set "OMO_NODE_BINARY=node"'
@@ -112065,6 +112068,8 @@ class CredentialStoreError extends SignInError {
112065
112068
 
112066
112069
  class KeychainLockedError extends CredentialStoreError {
112067
112070
  }
112071
+ class InvalidCredentialState extends SignInError {
112072
+ }
112068
112073
  var LOCKED = /-25308|errSecInteractionNotAllowed|interaction is not allowed|locked collection/i;
112069
112074
  var UNLOCKED_REUSE_MS = 30000;
112070
112075
  var fallbackNoticed = false;
@@ -112080,12 +112085,15 @@ function credentialId(api) {
112080
112085
  return createHash10("sha256").update(serviceOrigin(api)).digest("hex");
112081
112086
  }
112082
112087
  function createCredentialStore(api, secrets = typeof Bun === "undefined" ? null : Bun.secrets, platform = process.platform, lockProbe = probeSecretServiceLock, notice = stderrNoticeOncePerProcess) {
112088
+ return createSealedStore(api, "omo-cli", credentialSchema, secrets, platform, lockProbe, notice);
112089
+ }
112090
+ function createSealedStore(api, namespace, schema, secrets = typeof Bun === "undefined" ? null : Bun.secrets, platform = process.platform, lockProbe = probeSecretServiceLock, notice = stderrNoticeOncePerProcess) {
112083
112091
  if (!secrets)
112084
112092
  throw new SignInError("OmO sign-in needs Bun 1.4 or newer with OS credential storage. No file fallback is available.");
112085
112093
  const platformName = platform === "darwin" ? "macOS Keychain" : platform === "linux" ? "Linux Secret Service (libsecret and an unlocked keyring)" : platform === "win32" ? "Windows Credential Manager" : null;
112086
112094
  if (platformName === null)
112087
112095
  throw new SignInError("This platform has no supported OS credential store.");
112088
- const key = { service: "omo-cli", name: credentialId(api) };
112096
+ const key = { service: namespace, name: credentialId(api) };
112089
112097
  const unavailable = (error) => isLocked(error) ? new KeychainLockedError(`${platformName} is locked. Unlock it, then try again. Credentials are never saved to a file.`) : new CredentialStoreError(`Cannot access ${platformName}. Unlock or enable the OS credential store and try again. Credentials are never saved to a file.`);
112090
112098
  let unlockedUntil = 0;
112091
112099
  let noticed = false;
@@ -112116,15 +112124,15 @@ function createCredentialStore(api, secrets = typeof Bun === "undefined" ? null
112116
112124
  if (value === null)
112117
112125
  return null;
112118
112126
  try {
112119
- return credentialSchema.parse(JSON.parse(value));
112127
+ return schema.parse(JSON.parse(value));
112120
112128
  } catch {
112121
- throw new SignInError("Stored sign-in data is invalid. Run omo logout, then omo login.");
112129
+ throw new InvalidCredentialState("Stored sign-in data is invalid. Run omo logout, then omo login.");
112122
112130
  }
112123
112131
  },
112124
112132
  async write(value) {
112125
112133
  await assertUsable();
112126
112134
  try {
112127
- await secrets.set({ ...key, value: JSON.stringify(credentialSchema.parse(value)) });
112135
+ await secrets.set({ ...key, value: JSON.stringify(schema.parse(value)) });
112128
112136
  } catch (error) {
112129
112137
  throw unavailable(error);
112130
112138
  }
@@ -1,3 +1,4 @@
1
+ import type { z } from "zod";
1
2
  import { type Credentials, SignInError } from "./protocol";
2
3
  import { type SecretServiceLockProbe } from "./secret-service-lock";
3
4
  type SecretKey = {
@@ -11,18 +12,22 @@ export type SecretApi = {
11
12
  }) => Promise<void>;
12
13
  readonly delete: (key: SecretKey) => Promise<boolean>;
13
14
  };
14
- export type CredentialStore = {
15
- readonly read: () => Promise<Credentials | null>;
16
- readonly write: (value: Credentials) => Promise<void>;
15
+ export type SealedStore<T> = {
16
+ readonly read: () => Promise<T | null>;
17
+ readonly write: (value: T) => Promise<void>;
17
18
  readonly clear: () => Promise<void>;
18
19
  };
20
+ export type CredentialStore = SealedStore<Credentials>;
19
21
  export declare class CredentialStoreError extends SignInError {
20
22
  }
21
23
  export declare class KeychainLockedError extends CredentialStoreError {
22
24
  }
23
25
  export declare class SecretServiceUnavailableError extends CredentialStoreError {
24
26
  }
27
+ export declare class InvalidCredentialState extends SignInError {
28
+ }
25
29
  export declare const quietNotice: (_message: string) => void;
26
30
  export declare function credentialId(api: string): string;
27
31
  export declare function createCredentialStore(api: string, secrets?: SecretApi | null, platform?: NodeJS.Platform, lockProbe?: SecretServiceLockProbe, notice?: (message: string) => void): CredentialStore;
32
+ export declare function createSealedStore<T>(api: string, namespace: "omo-cli" | "omo-cli-v2" | "omo-cli-revocations-v2", schema: z.ZodType<T>, secrets?: SecretApi | null, platform?: NodeJS.Platform, lockProbe?: SecretServiceLockProbe, notice?: (message: string) => void): SealedStore<T>;
28
33
  export {};
@@ -2133,7 +2133,7 @@ var package_default;
2133
2133
  var init_package = __esm(() => {
2134
2134
  package_default = {
2135
2135
  name: "oh-my-opencode",
2136
- version: "5.1.46",
2136
+ version: "5.1.48",
2137
2137
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
2138
2138
  main: "./dist/index.js",
2139
2139
  types: "dist/index.d.ts",
@@ -2316,7 +2316,7 @@ var init_package = __esm(() => {
2316
2316
  },
2317
2317
  devDependencies: {
2318
2318
  "@clack/prompts": "^1.8.1",
2319
- "@code-yeongyu/senpi": "2026.10.23-1",
2319
+ "@code-yeongyu/senpi": "2026.10.25-2",
2320
2320
  "@modelcontextprotocol/sdk": "^1.30.0",
2321
2321
  "@oh-my-opencode/agents-md-core": "workspace:*",
2322
2322
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
@@ -2379,18 +2379,18 @@ var init_package = __esm(() => {
2379
2379
  typescript: "^7.0.2"
2380
2380
  },
2381
2381
  optionalDependencies: {
2382
- "oh-my-opencode-darwin-arm64": "5.1.46",
2383
- "oh-my-opencode-darwin-x64": "5.1.46",
2384
- "oh-my-opencode-darwin-x64-baseline": "5.1.46",
2385
- "oh-my-opencode-linux-arm64": "5.1.46",
2386
- "oh-my-opencode-linux-arm64-musl": "5.1.46",
2387
- "oh-my-opencode-linux-x64": "5.1.46",
2388
- "oh-my-opencode-linux-x64-baseline": "5.1.46",
2389
- "oh-my-opencode-linux-x64-musl": "5.1.46",
2390
- "oh-my-opencode-linux-x64-musl-baseline": "5.1.46",
2391
- "oh-my-opencode-windows-arm64": "5.1.46",
2392
- "oh-my-opencode-windows-x64": "5.1.46",
2393
- "oh-my-opencode-windows-x64-baseline": "5.1.46"
2382
+ "oh-my-opencode-darwin-arm64": "5.1.48",
2383
+ "oh-my-opencode-darwin-x64": "5.1.48",
2384
+ "oh-my-opencode-darwin-x64-baseline": "5.1.48",
2385
+ "oh-my-opencode-linux-arm64": "5.1.48",
2386
+ "oh-my-opencode-linux-arm64-musl": "5.1.48",
2387
+ "oh-my-opencode-linux-x64": "5.1.48",
2388
+ "oh-my-opencode-linux-x64-baseline": "5.1.48",
2389
+ "oh-my-opencode-linux-x64-musl": "5.1.48",
2390
+ "oh-my-opencode-linux-x64-musl-baseline": "5.1.48",
2391
+ "oh-my-opencode-windows-arm64": "5.1.48",
2392
+ "oh-my-opencode-windows-x64": "5.1.48",
2393
+ "oh-my-opencode-windows-x64-baseline": "5.1.48"
2394
2394
  },
2395
2395
  overrides: {
2396
2396
  hono: "^4.13.8",
@@ -7164,7 +7164,7 @@ function resolveStdio(options) {
7164
7164
  return [options.stdin ?? "ignore", options.stdout ?? "pipe", options.stderr ?? "inherit"];
7165
7165
  }
7166
7166
  function createBunSpawnOptions(options) {
7167
- return { ...options, windowsHide: true };
7167
+ return { ...options, env: options.env ?? process.env, windowsHide: true };
7168
7168
  }
7169
7169
  function createNodeSpawnOptions(options, platform = process.platform) {
7170
7170
  const nodeOptions = {
@@ -10185,6 +10185,10 @@ function transformModelForProviderUsingAnthropicBehavior(provider, model) {
10185
10185
  return "k3";
10186
10186
  if (model === "kimi-k3-256k")
10187
10187
  return "k3-256k";
10188
+ if (model === "kimi-k3.1-pro")
10189
+ return "k3.1-pro";
10190
+ if (model === "kimi-k3.1-pro-highspeed")
10191
+ return "k3.1-pro-highspeed";
10188
10192
  }
10189
10193
  return model;
10190
10194
  }
@@ -92460,7 +92464,7 @@ var package_default2;
92460
92464
  var init_package2 = __esm(() => {
92461
92465
  package_default2 = {
92462
92466
  name: "@oh-my-opencode/omo-codex",
92463
- version: "5.1.46",
92467
+ version: "5.1.48",
92464
92468
  type: "module",
92465
92469
  private: true,
92466
92470
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -94033,8 +94037,7 @@ function windowsNodeDiscoveryLines() {
94033
94037
  ' for /f "tokens=* delims= " %%N in ("!OMO_NODE_BINARY!") do set "OMO_NODE_BINARY=%%N"',
94034
94038
  ` if "!OMO_NODE_BINARY:~0,1!"=="'" set "OMO_NODE_BINARY=!OMO_NODE_BINARY:~1!"`,
94035
94039
  ` if "!OMO_NODE_BINARY:~-1!"=="'" set "OMO_NODE_BINARY=!OMO_NODE_BINARY:~0,-1!"`,
94036
- ' if "!OMO_NODE_BINARY:~0,1!"=="^"" set "OMO_NODE_BINARY=!OMO_NODE_BINARY:~1!"',
94037
- ' if "!OMO_NODE_BINARY:~-1!"=="^"" set "OMO_NODE_BINARY=!OMO_NODE_BINARY:~0,-1!"',
94040
+ ' set "OMO_NODE_BINARY=!OMO_NODE_BINARY:"=!"',
94038
94041
  ' if defined OMO_NODE_BINARY if not exist "!OMO_NODE_BINARY!" set "OMO_NODE_BINARY="',
94039
94042
  ")",
94040
94043
  'if not defined OMO_NODE_BINARY where node >nul 2>nul && set "OMO_NODE_BINARY=node"'
@@ -112144,6 +112147,8 @@ class CredentialStoreError extends SignInError {
112144
112147
 
112145
112148
  class KeychainLockedError extends CredentialStoreError {
112146
112149
  }
112150
+ class InvalidCredentialState extends SignInError {
112151
+ }
112147
112152
  var LOCKED = /-25308|errSecInteractionNotAllowed|interaction is not allowed|locked collection/i;
112148
112153
  var UNLOCKED_REUSE_MS = 30000;
112149
112154
  var fallbackNoticed = false;
@@ -112159,12 +112164,15 @@ function credentialId(api) {
112159
112164
  return createHash10("sha256").update(serviceOrigin(api)).digest("hex");
112160
112165
  }
112161
112166
  function createCredentialStore(api, secrets = typeof Bun === "undefined" ? null : Bun.secrets, platform = process.platform, lockProbe = probeSecretServiceLock, notice = stderrNoticeOncePerProcess) {
112167
+ return createSealedStore(api, "omo-cli", credentialSchema, secrets, platform, lockProbe, notice);
112168
+ }
112169
+ function createSealedStore(api, namespace, schema, secrets = typeof Bun === "undefined" ? null : Bun.secrets, platform = process.platform, lockProbe = probeSecretServiceLock, notice = stderrNoticeOncePerProcess) {
112162
112170
  if (!secrets)
112163
112171
  throw new SignInError("OmO sign-in needs Bun 1.4 or newer with OS credential storage. No file fallback is available.");
112164
112172
  const platformName = platform === "darwin" ? "macOS Keychain" : platform === "linux" ? "Linux Secret Service (libsecret and an unlocked keyring)" : platform === "win32" ? "Windows Credential Manager" : null;
112165
112173
  if (platformName === null)
112166
112174
  throw new SignInError("This platform has no supported OS credential store.");
112167
- const key = { service: "omo-cli", name: credentialId(api) };
112175
+ const key = { service: namespace, name: credentialId(api) };
112168
112176
  const unavailable = (error) => isLocked(error) ? new KeychainLockedError(`${platformName} is locked. Unlock it, then try again. Credentials are never saved to a file.`) : new CredentialStoreError(`Cannot access ${platformName}. Unlock or enable the OS credential store and try again. Credentials are never saved to a file.`);
112169
112177
  let unlockedUntil = 0;
112170
112178
  let noticed = false;
@@ -112195,15 +112203,15 @@ function createCredentialStore(api, secrets = typeof Bun === "undefined" ? null
112195
112203
  if (value === null)
112196
112204
  return null;
112197
112205
  try {
112198
- return credentialSchema.parse(JSON.parse(value));
112206
+ return schema.parse(JSON.parse(value));
112199
112207
  } catch {
112200
- throw new SignInError("Stored sign-in data is invalid. Run omo logout, then omo login.");
112208
+ throw new InvalidCredentialState("Stored sign-in data is invalid. Run omo logout, then omo login.");
112201
112209
  }
112202
112210
  },
112203
112211
  async write(value) {
112204
112212
  await assertUsable();
112205
112213
  try {
112206
- await secrets.set({ ...key, value: JSON.stringify(credentialSchema.parse(value)) });
112214
+ await secrets.set({ ...key, value: JSON.stringify(schema.parse(value)) });
112207
112215
  } catch (error) {
112208
112216
  throw unavailable(error);
112209
112217
  }