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.
- package/.agents/command/publish.md +3 -4
- package/.agents/skills/publish/SKILL.md +3 -4
- package/.opencode/command/publish.md +3 -4
- package/dist/agents/atlas/agent.d.ts +3 -2
- package/dist/agents/sisyphus/index.d.ts +1 -0
- package/dist/agents/sisyphus/kimi-k3-1.d.ts +9 -0
- package/dist/agents/sisyphus-agent-factory.d.ts +1 -1
- package/dist/agents/sisyphus-junior/agent.d.ts +1 -1
- package/dist/agents/sisyphus-junior/index.d.ts +1 -0
- package/dist/agents/sisyphus-junior/kimi-k3-1.d.ts +6 -0
- package/dist/agents/types.d.ts +2 -2
- package/dist/cli/index.js +30 -22
- package/dist/cli/service-auth/keystore.d.ts +8 -3
- package/dist/cli-node/index.js +30 -22
- package/dist/index.js +635 -18
- package/dist/skills/browser/runtime/omowright/manifest.json +1 -1
- package/dist/skills/ulw-research/SKILL.md +59 -2
- package/dist/skills/ulw-research/references/deliverable-phase.md +57 -8
- package/dist/skills/ulw-research/references/report-gates.md +2 -1
- package/dist/skills/ulw-research/scripts/contracts.mjs +3 -11
- package/dist/skills/ulw-research/scripts/contracts.test.ts +1 -0
- package/dist/skills/ulw-research/scripts/copy-returns-fidelity-policy.test.ts +156 -0
- package/dist/skills/ulw-research/scripts/copy-returns-polish.test.ts +209 -0
- package/dist/skills/ulw-research/scripts/fact-commands-fill.mjs +86 -0
- package/dist/skills/ulw-research/scripts/fact-commands-meaning.mjs +21 -44
- package/dist/skills/ulw-research/scripts/fact-commands-polish.mjs +132 -0
- package/dist/skills/ulw-research/scripts/fact-commands-verify.mjs +37 -4
- package/dist/skills/ulw-research/scripts/fact-commands.mjs +8 -47
- package/dist/skills/ulw-research/scripts/fact-fill.mjs +3 -2
- package/dist/skills/ulw-research/scripts/fact-pairs.mjs +7 -9
- package/dist/skills/ulw-research/scripts/fact-pairs.test.ts +7 -23
- package/dist/skills/ulw-research/scripts/fidelity-policy.mjs +183 -0
- package/dist/skills/ulw-research/scripts/references-fences.test.ts +25 -0
- package/dist/skills/ulw-research/scripts/report-tools.test.ts +329 -1
- package/dist/skills/ulw-research/scripts/source-commands.mjs +8 -3
- package/dist/skills/ulw-research/scripts/tests/fixtures/fidelity/polish-edits.json +12 -0
- package/dist/tui.js +14 -14
- package/package.json +14 -14
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +1 -2
- package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
- package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
- package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
- package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/rules/package.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/package-lock.json +12 -12
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/scripts/sync-skills.mjs +1 -1
- package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +1 -1
- package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +58 -1
- package/packages/omo-codex/plugin/skills/ulw-research/references/deliverable-phase.md +57 -8
- package/packages/omo-codex/plugin/skills/ulw-research/references/report-gates.md +2 -1
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/contracts.mjs +3 -11
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-commands-fill.mjs +86 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-commands-meaning.mjs +21 -44
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-commands-polish.mjs +132 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-commands-verify.mjs +37 -4
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-commands.mjs +8 -47
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-fill.mjs +3 -2
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-pairs.mjs +7 -9
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-policy.mjs +183 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/source-commands.mjs +8 -3
- package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +1 -1
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +4 -5
- package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
- package/packages/shared-skills/skills/ulw-research/SKILL.md +59 -2
- package/packages/shared-skills/skills/ulw-research/references/deliverable-phase.md +57 -8
- package/packages/shared-skills/skills/ulw-research/references/report-gates.md +2 -1
- package/packages/shared-skills/skills/ulw-research/scripts/contracts.mjs +3 -11
- package/packages/shared-skills/skills/ulw-research/scripts/contracts.test.ts +1 -0
- package/packages/shared-skills/skills/ulw-research/scripts/copy-returns-fidelity-policy.test.ts +156 -0
- package/packages/shared-skills/skills/ulw-research/scripts/copy-returns-polish.test.ts +209 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fact-commands-fill.mjs +86 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fact-commands-meaning.mjs +21 -44
- package/packages/shared-skills/skills/ulw-research/scripts/fact-commands-polish.mjs +132 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fact-commands-verify.mjs +37 -4
- package/packages/shared-skills/skills/ulw-research/scripts/fact-commands.mjs +8 -47
- package/packages/shared-skills/skills/ulw-research/scripts/fact-fill.mjs +3 -2
- package/packages/shared-skills/skills/ulw-research/scripts/fact-pairs.mjs +7 -9
- package/packages/shared-skills/skills/ulw-research/scripts/fact-pairs.test.ts +7 -23
- package/packages/shared-skills/skills/ulw-research/scripts/fidelity-policy.mjs +183 -0
- package/packages/shared-skills/skills/ulw-research/scripts/references-fences.test.ts +25 -0
- package/packages/shared-skills/skills/ulw-research/scripts/report-tools.test.ts +329 -1
- package/packages/shared-skills/skills/ulw-research/scripts/source-commands.mjs +8 -3
- 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.
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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;
|
package/dist/agents/types.d.ts
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
2382
|
-
"oh-my-opencode-darwin-x64": "5.1.
|
|
2383
|
-
"oh-my-opencode-darwin-x64-baseline": "5.1.
|
|
2384
|
-
"oh-my-opencode-linux-arm64": "5.1.
|
|
2385
|
-
"oh-my-opencode-linux-arm64-musl": "5.1.
|
|
2386
|
-
"oh-my-opencode-linux-x64": "5.1.
|
|
2387
|
-
"oh-my-opencode-linux-x64-baseline": "5.1.
|
|
2388
|
-
"oh-my-opencode-linux-x64-musl": "5.1.
|
|
2389
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.1.
|
|
2390
|
-
"oh-my-opencode-windows-arm64": "5.1.
|
|
2391
|
-
"oh-my-opencode-windows-x64": "5.1.
|
|
2392
|
-
"oh-my-opencode-windows-x64-baseline": "5.1.
|
|
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.
|
|
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
|
-
'
|
|
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:
|
|
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
|
|
112127
|
+
return schema.parse(JSON.parse(value));
|
|
112120
112128
|
} catch {
|
|
112121
|
-
throw new
|
|
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(
|
|
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
|
|
15
|
-
readonly read: () => Promise<
|
|
16
|
-
readonly write: (value:
|
|
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 {};
|
package/dist/cli-node/index.js
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
2383
|
-
"oh-my-opencode-darwin-x64": "5.1.
|
|
2384
|
-
"oh-my-opencode-darwin-x64-baseline": "5.1.
|
|
2385
|
-
"oh-my-opencode-linux-arm64": "5.1.
|
|
2386
|
-
"oh-my-opencode-linux-arm64-musl": "5.1.
|
|
2387
|
-
"oh-my-opencode-linux-x64": "5.1.
|
|
2388
|
-
"oh-my-opencode-linux-x64-baseline": "5.1.
|
|
2389
|
-
"oh-my-opencode-linux-x64-musl": "5.1.
|
|
2390
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.1.
|
|
2391
|
-
"oh-my-opencode-windows-arm64": "5.1.
|
|
2392
|
-
"oh-my-opencode-windows-x64": "5.1.
|
|
2393
|
-
"oh-my-opencode-windows-x64-baseline": "5.1.
|
|
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.
|
|
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
|
-
'
|
|
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:
|
|
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
|
|
112206
|
+
return schema.parse(JSON.parse(value));
|
|
112199
112207
|
} catch {
|
|
112200
|
-
throw new
|
|
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(
|
|
112214
|
+
await secrets.set({ ...key, value: JSON.stringify(schema.parse(value)) });
|
|
112207
112215
|
} catch (error) {
|
|
112208
112216
|
throw unavailable(error);
|
|
112209
112217
|
}
|