oh-my-opencode 4.19.0 → 4.19.1
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/omomomo.md +1 -1
- package/.agents/skills/omomomo/SKILL.md +1 -1
- package/.opencode/command/omomomo.md +1 -1
- package/README.ja.md +6 -6
- package/README.ko.md +6 -6
- package/README.md +6 -6
- package/README.ru.md +6 -6
- package/README.zh-cn.md +6 -6
- package/dist/agents/atlas/agent.d.ts +1 -1
- package/dist/agents/gpt-prompt-identity.d.ts +3 -0
- package/dist/agents/sisyphus/gpt-5-5.d.ts +1 -1
- package/dist/agents/sisyphus/gpt-task-system-guide.d.ts +1 -0
- package/dist/agents/sisyphus-junior/gpt-5-5.d.ts +2 -2
- package/dist/cli/index.js +148 -94
- package/dist/cli-node/index.js +148 -94
- package/dist/config/schema/agent-overrides.d.ts +48 -48
- package/dist/config/schema/categories.d.ts +6 -6
- package/dist/config/schema/codegraph.d.ts +2 -0
- package/dist/config/schema/fallback-models.d.ts +5 -5
- package/dist/config/schema/oh-my-opencode-config.d.ts +50 -48
- package/dist/hooks/codegraph-bootstrap/hook.d.ts +3 -2
- package/dist/hooks/sisyphus-junior-notepad/constants.d.ts +1 -1
- package/dist/hooks/start-work/notepad-scaffold.d.ts +10 -0
- package/dist/index.js +2612 -1473
- package/dist/oh-my-opencode.schema.json +11 -0
- package/dist/shared/omo-process-sweep.d.ts +18 -0
- package/dist/skills/programming/scripts/typescript/check-no-excuse-rules.test.ts +87 -0
- package/dist/skills/programming/scripts/typescript/check-no-excuse-rules.ts +35 -5
- package/dist/skills/ulw-plan/SKILL.md +20 -1
- package/dist/testing/create-plugin-module.d.ts +1 -0
- package/dist/tui.js +66 -56
- package/package.json +13 -13
- package/packages/git-bash-mcp/dist/cli.js +54 -8
- package/packages/lsp-core/src/lsp/client-diagnostics-freshness.integration.test.ts +60 -0
- package/packages/lsp-core/src/lsp/client.ts +14 -1
- package/packages/lsp-core/src/lsp/fixtures/diagnostics-freshness-contract-probe.ts +2 -2
- package/packages/lsp-core/src/mcp.ts +9 -0
- package/packages/lsp-daemon/dist/cli.js +319 -51
- package/packages/lsp-daemon/dist/client.js +136 -48
- package/packages/lsp-daemon/dist/daemon-client.d.ts +0 -10
- package/packages/lsp-daemon/dist/daemon-client.js +4 -34
- package/packages/lsp-daemon/dist/daemon-failure-result.d.ts +3 -0
- package/packages/lsp-daemon/dist/daemon-failure-result.js +38 -0
- package/packages/lsp-daemon/dist/daemon-request-error.d.ts +14 -0
- package/packages/lsp-daemon/dist/daemon-request-error.js +26 -0
- package/packages/lsp-daemon/dist/daemon-server.js +5 -1
- package/packages/lsp-daemon/dist/index.js +137 -48
- package/packages/lsp-daemon/dist/proxy.d.ts +2 -0
- package/packages/lsp-daemon/dist/proxy.js +1 -0
- package/packages/lsp-daemon/dist/version-reap.d.ts +26 -0
- package/packages/lsp-daemon/dist/version-reap.js +182 -0
- package/packages/lsp-tools-mcp/dist/cli.js +61 -10
- package/packages/lsp-tools-mcp/dist/lsp/manager.js +6 -1
- package/packages/lsp-tools-mcp/dist/mcp.js +61 -10
- package/packages/lsp-tools-mcp/dist/tools.js +6 -1
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +64 -8
- 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/bootstrap/src/setup.ts +22 -2
- package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +555 -251
- package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +178 -89
- package/packages/omo-codex/plugin/components/codegraph/package.json +2 -2
- package/packages/omo-codex/plugin/components/codegraph/src/hook-types.ts +3 -1
- package/packages/omo-codex/plugin/components/codegraph/src/hook.ts +3 -1
- package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +98 -32
- package/packages/omo-codex/plugin/components/codegraph/src/mcp-unavailable.ts +5 -0
- package/packages/omo-codex/plugin/components/codegraph/src/serve.ts +15 -6
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker.ts +6 -2
- package/packages/omo-codex/plugin/components/codegraph/src/sweep-cli.ts +1 -0
- package/packages/omo-codex/plugin/components/codegraph/test/hook-store-upgrade.test.ts +148 -0
- package/packages/omo-codex/plugin/components/codegraph/test/mcp-bridge-fixtures.ts +31 -2
- package/packages/omo-codex/plugin/components/codegraph/test/package-runtime.test.ts +1 -1
- package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge-lifecycle.test.ts +65 -1
- package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge.test.ts +3 -7
- package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-facade.test.ts +1 -1
- package/packages/omo-codex/plugin/components/codegraph/test/serve-provision.test.ts +57 -3
- package/packages/omo-codex/plugin/components/codegraph/test/serve-unavailable.test.ts +41 -0
- package/packages/omo-codex/plugin/components/codegraph/test/serve.test.ts +109 -8
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-node-support.test.ts +2 -2
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-flow.test.ts +43 -0
- 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 +3 -3
- package/packages/omo-codex/plugin/components/lsp/dist/cli.js +80 -40
- 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/dist/cli.js +11 -0
- 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/rules/src/post-compact-budget.ts +11 -0
- package/packages/omo-codex/plugin/components/rules/test/post-compact-budget.test.ts +60 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/start-work-continuation/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/agents/lazycodex-clone-fidelity-reviewer.toml +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-code-reviewer.toml +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-gate-reviewer.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-high.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-medium.toml +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +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/ultrawork/skills/ulw-plan/SKILL.md +20 -1
- package/packages/omo-codex/plugin/components/ultrawork/src/codex-hook.ts +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook-trigger-policy.test.ts +42 -0
- package/packages/omo-codex/plugin/components/ulw-loop/README.md +6 -4
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-continuation.d.ts +21 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-continuation.js +64 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +15 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-arg-parser.js +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-commands.js +2 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.d.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.js +3 -3
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-steering.d.ts +3 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-steering.js +85 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.d.ts +0 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.js +13 -33
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +998 -593
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.d.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.js +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +6 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/goal-status.d.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/goal-status.js +3 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.d.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.js +4 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.d.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +10 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-verdicts.js +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-batch.d.ts +15 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-batch.js +84 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-mutations.d.ts +5 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-mutations.js +81 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.js +7 -59
- package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +12 -4
- package/packages/omo-codex/plugin/components/ulw-loop/dist/validation-batch.d.ts +9 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/validation-batch.js +122 -0
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +8 -6
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-continuation.ts +84 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +13 -2
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-arg-parser.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-commands.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +3 -3
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-steering.ts +49 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-subcommands.ts +13 -45
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/constants.ts +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +7 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/goal-status.ts +4 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +4 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +20 -2
- package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-verdicts.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/steering-batch.ts +125 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/steering-mutations.ts +59 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/steering.ts +6 -58
- package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +12 -4
- package/packages/omo-codex/plugin/components/ulw-loop/src/validation-batch.ts +122 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-continuation.test.ts +76 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-checkpoint-continuation.test.ts +111 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering-batch.test.ts +67 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-validation-batch.test.ts +57 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/paths.test.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/steering-batch.test.ts +152 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +29 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/validation-batch-checkpoint.test.ts +147 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/validation-batch.test.ts +73 -0
- 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-codegraph-init-guidance.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/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 +2 -2
- package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +2 -2
- 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 +2 -2
- package/packages/omo-codex/plugin/hooks/stop-checking-start-work-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-checking-start-work-continuation.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 +41 -41
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/shared/test/config-loader.test.ts +43 -0
- package/packages/omo-codex/plugin/skills/programming/scripts/typescript/check-no-excuse-rules.ts +35 -5
- package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +8 -6
- package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +20 -1
- package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +9 -9
- package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +26 -0
- package/packages/omo-codex/plugin/test/bootstrap-setup.test.mjs +41 -0
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +49 -5
- package/packages/omo-codex/scripts/install-marketplace-cache.test.mjs +4 -1
- package/packages/shared-skills/skills/programming/scripts/typescript/check-no-excuse-rules.test.ts +87 -0
- package/packages/shared-skills/skills/programming/scripts/typescript/check-no-excuse-rules.ts +35 -5
- package/packages/shared-skills/skills/ulw-plan/SKILL.md +20 -1
|
@@ -6556,10 +6556,20 @@
|
|
|
6556
6556
|
"default": true,
|
|
6557
6557
|
"type": "boolean"
|
|
6558
6558
|
},
|
|
6559
|
+
"daemon": {
|
|
6560
|
+
"default": false,
|
|
6561
|
+
"type": "boolean"
|
|
6562
|
+
},
|
|
6559
6563
|
"enabled": {
|
|
6560
6564
|
"default": true,
|
|
6561
6565
|
"type": "boolean"
|
|
6562
6566
|
},
|
|
6567
|
+
"excluded_roots": {
|
|
6568
|
+
"type": "array",
|
|
6569
|
+
"items": {
|
|
6570
|
+
"type": "string"
|
|
6571
|
+
}
|
|
6572
|
+
},
|
|
6563
6573
|
"install_dir": {
|
|
6564
6574
|
"type": "string"
|
|
6565
6575
|
},
|
|
@@ -6574,6 +6584,7 @@
|
|
|
6574
6584
|
"required": [
|
|
6575
6585
|
"auto_init",
|
|
6576
6586
|
"auto_provision",
|
|
6587
|
+
"daemon",
|
|
6577
6588
|
"enabled"
|
|
6578
6589
|
],
|
|
6579
6590
|
"additionalProperties": false
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { sweepCodegraphZombies, sweepOrphanedLspDaemonProxies, sweepStaleLspDaemonVersions } from "@oh-my-opencode/utils/process-sweep";
|
|
2
|
+
export interface OmoFamilySweepOptions {
|
|
3
|
+
readonly log?: (message: string) => void;
|
|
4
|
+
}
|
|
5
|
+
export interface OmoFamilySweeps {
|
|
6
|
+
readonly sweepCodegraph: typeof sweepCodegraphZombies;
|
|
7
|
+
readonly sweepLspProxies: typeof sweepOrphanedLspDaemonProxies;
|
|
8
|
+
readonly sweepStaleLspDaemons: typeof sweepStaleLspDaemonVersions;
|
|
9
|
+
}
|
|
10
|
+
export declare function sweepCodegraphZombiesBestEffort(options: OmoFamilySweepOptions, sweep?: typeof sweepCodegraphZombies): Promise<void>;
|
|
11
|
+
export declare function sweepOrphanedLspDaemonProxiesBestEffort(options: OmoFamilySweepOptions, sweep?: typeof sweepOrphanedLspDaemonProxies): Promise<void>;
|
|
12
|
+
export declare function sweepStaleLspDaemonVersionsBestEffort(options: OmoFamilySweepOptions, sweep?: typeof sweepStaleLspDaemonVersions): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Runs all three omo sweep families concurrently. NEVER rejects: each family
|
|
15
|
+
* is wrapped best-effort so a sweep failure can only produce a log line, not
|
|
16
|
+
* a startup failure. Callers fire-and-forget the returned promise.
|
|
17
|
+
*/
|
|
18
|
+
export declare function sweepOmoFamiliesBestEffort(options?: OmoFamilySweepOptions, sweeps?: OmoFamilySweeps): Promise<void>;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { afterAll, beforeAll, describe, expect, test } from "bun:test"
|
|
2
|
+
import { spawnSync } from "node:child_process"
|
|
3
|
+
import { copyFileSync, mkdirSync, mkdtempSync, rmSync, symlinkSync, writeFileSync } from "node:fs"
|
|
4
|
+
import { createRequire } from "node:module"
|
|
5
|
+
import { tmpdir } from "node:os"
|
|
6
|
+
import { dirname, join } from "node:path"
|
|
7
|
+
|
|
8
|
+
// Regression for lazycodex#111: the script must resolve `typescript` from the
|
|
9
|
+
// caller project (cwd), not from the script's own location, so it works when
|
|
10
|
+
// executed from an installed `~/.codex/...` skill cache.
|
|
11
|
+
|
|
12
|
+
const scriptSource = join(import.meta.dir, "check-no-excuse-rules.ts")
|
|
13
|
+
const repoRequire = createRequire(import.meta.url)
|
|
14
|
+
const typescriptPackageDir = dirname(repoRequire.resolve("typescript/package.json"))
|
|
15
|
+
|
|
16
|
+
let tempRoot = ""
|
|
17
|
+
let cachedScript = ""
|
|
18
|
+
let callerDir = ""
|
|
19
|
+
let callerWithoutTypescriptDir = ""
|
|
20
|
+
|
|
21
|
+
function runNoExcuse(cwd: string, target: string) {
|
|
22
|
+
return spawnSync(process.execPath, ["--no-install", cachedScript, target], {
|
|
23
|
+
cwd,
|
|
24
|
+
encoding: "utf8",
|
|
25
|
+
timeout: 60_000,
|
|
26
|
+
})
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
describe("#given the no-excuse script is executed from an installed ~/.codex-style skill cache", () => {
|
|
30
|
+
beforeAll(() => {
|
|
31
|
+
// given a cache copy of the script outside any project, and two caller projects:
|
|
32
|
+
// one providing node_modules/typescript, one without typescript at all
|
|
33
|
+
tempRoot = mkdtempSync(join(tmpdir(), "no-excuse-cache-repro-"))
|
|
34
|
+
const cacheDir = join(tempRoot, ".codex", "skills", "programming", "scripts", "typescript")
|
|
35
|
+
mkdirSync(cacheDir, { recursive: true })
|
|
36
|
+
cachedScript = join(cacheDir, "check-no-excuse-rules.ts")
|
|
37
|
+
copyFileSync(scriptSource, cachedScript)
|
|
38
|
+
|
|
39
|
+
callerDir = join(tempRoot, "caller-project")
|
|
40
|
+
mkdirSync(join(callerDir, "node_modules"), { recursive: true })
|
|
41
|
+
symlinkSync(typescriptPackageDir, join(callerDir, "node_modules", "typescript"), "junction")
|
|
42
|
+
writeFileSync(join(callerDir, "clean.ts"), "export const answer: number = 42\n")
|
|
43
|
+
writeFileSync(join(callerDir, "violating.ts"), "const x = foo as any\nexport default x\n")
|
|
44
|
+
|
|
45
|
+
callerWithoutTypescriptDir = join(tempRoot, "caller-without-typescript")
|
|
46
|
+
mkdirSync(callerWithoutTypescriptDir, { recursive: true })
|
|
47
|
+
writeFileSync(join(callerWithoutTypescriptDir, "clean.ts"), "export const answer: number = 42\n")
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
afterAll(() => {
|
|
51
|
+
rmSync(tempRoot, { recursive: true, force: true })
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
// A generous timeout: the first run does a cold TypeScript program load in a
|
|
55
|
+
// spawned subprocess, which can exceed bun test's 5s default on a cold cache
|
|
56
|
+
// (matches the 60s spawnSync ceiling). This bounds the subprocess, it does not
|
|
57
|
+
// wait on wall-clock time as behavior.
|
|
58
|
+
test("#when the caller project provides typescript #then it resolves the caller's typescript and exits 0", () => {
|
|
59
|
+
// when no-excuse runs from the cache copy against the caller project
|
|
60
|
+
const result = runNoExcuse(callerDir, "clean.ts")
|
|
61
|
+
|
|
62
|
+
// then the caller's own typescript is used and the clean file passes
|
|
63
|
+
expect(result.error).toBeUndefined()
|
|
64
|
+
expect(result.status).toBe(0)
|
|
65
|
+
expect(result.stdout).toContain("No violations in 1 file(s).")
|
|
66
|
+
}, 60_000)
|
|
67
|
+
|
|
68
|
+
test("#when a checked file violates the rules #then violations are still reported with exit 1", () => {
|
|
69
|
+
// when no-excuse runs against a file containing `as any`
|
|
70
|
+
const result = runNoExcuse(callerDir, "violating.ts")
|
|
71
|
+
|
|
72
|
+
// then the existing CLI behavior is unchanged
|
|
73
|
+
expect(result.error).toBeUndefined()
|
|
74
|
+
expect(result.status).toBe(1)
|
|
75
|
+
expect(result.stderr).toContain("[no-any-assertion]")
|
|
76
|
+
}, 60_000)
|
|
77
|
+
|
|
78
|
+
test("#when the caller project genuinely lacks typescript #then it fails with a clear error and exit 2", () => {
|
|
79
|
+
// when no-excuse runs from a caller project with no local typescript
|
|
80
|
+
const result = runNoExcuse(callerWithoutTypescriptDir, "clean.ts")
|
|
81
|
+
|
|
82
|
+
// then it reports the resolution problem instead of crashing mid-analysis
|
|
83
|
+
expect(result.error).toBeUndefined()
|
|
84
|
+
expect(result.status).toBe(2)
|
|
85
|
+
expect(result.stderr).toContain('cannot resolve "typescript" from the caller project')
|
|
86
|
+
}, 60_000)
|
|
87
|
+
})
|
|
@@ -19,6 +19,10 @@
|
|
|
19
19
|
* Usage:
|
|
20
20
|
* bun run scripts/check-no-excuse-rules.ts <file-or-dir>...
|
|
21
21
|
*
|
|
22
|
+
* The `typescript` package is resolved from the caller project (process.cwd()),
|
|
23
|
+
* not from this script's location, so the script works when executed from an
|
|
24
|
+
* installed skill-cache path (e.g. ~/.codex/...) against a project checkout.
|
|
25
|
+
*
|
|
22
26
|
* Exit codes:
|
|
23
27
|
* 0 - no violations
|
|
24
28
|
* 1 - violations found
|
|
@@ -26,9 +30,35 @@
|
|
|
26
30
|
*/
|
|
27
31
|
|
|
28
32
|
import fs from "node:fs"
|
|
33
|
+
import { createRequire } from "node:module"
|
|
29
34
|
import path from "node:path"
|
|
30
35
|
import process from "node:process"
|
|
31
|
-
import
|
|
36
|
+
import type * as tsTypes from "typescript"
|
|
37
|
+
|
|
38
|
+
type TsModule = typeof import("typescript")
|
|
39
|
+
|
|
40
|
+
function loadTypescriptFromCaller(): TsModule {
|
|
41
|
+
// A static `import ts from "typescript"` resolves from this script's location —
|
|
42
|
+
// an installed skill-cache path (e.g. ~/.codex/...) with no node_modules of its
|
|
43
|
+
// own — and fails even when the checked project has typescript. Resolve from the
|
|
44
|
+
// caller project (cwd) instead. When the caller has no local typescript, Bun
|
|
45
|
+
// falls back to a version-only stub from its global install cache instead of
|
|
46
|
+
// throwing, so the loaded module's API shape is verified as well.
|
|
47
|
+
const callerRequire = createRequire(path.join(process.cwd(), "no-excuse-anchor.cjs"))
|
|
48
|
+
try {
|
|
49
|
+
const loaded: Partial<TsModule> = callerRequire("typescript")
|
|
50
|
+
if (typeof loaded.createSourceFile === "function") return loaded as TsModule
|
|
51
|
+
} catch { // no-excuse-ok: catch
|
|
52
|
+
// fall through to the clear error below
|
|
53
|
+
}
|
|
54
|
+
console.error(
|
|
55
|
+
`error: cannot resolve "typescript" from the caller project (${process.cwd()}). ` +
|
|
56
|
+
"Install it in the project being checked (e.g. `bun add -d typescript`) and re-run.",
|
|
57
|
+
)
|
|
58
|
+
process.exit(2)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const ts: TsModule = loadTypescriptFromCaller()
|
|
32
62
|
|
|
33
63
|
type RuleId =
|
|
34
64
|
| "no-any-assertion"
|
|
@@ -95,7 +125,7 @@ function discoverFiles(inputs: string[]): string[] {
|
|
|
95
125
|
return files
|
|
96
126
|
}
|
|
97
127
|
|
|
98
|
-
function getLineText(sourceFile:
|
|
128
|
+
function getLineText(sourceFile: tsTypes.SourceFile, line: number): string {
|
|
99
129
|
const lineStarts = sourceFile.getLineStarts()
|
|
100
130
|
const start = lineStarts[line]
|
|
101
131
|
const end = line + 1 < lineStarts.length ? lineStarts[line + 1] : sourceFile.getEnd()
|
|
@@ -107,17 +137,17 @@ function analyzeFile(filePath: string): Violation[] {
|
|
|
107
137
|
const sourceFile = ts.createSourceFile(filePath, source, ts.ScriptTarget.Latest, true)
|
|
108
138
|
const violations: Violation[] = []
|
|
109
139
|
|
|
110
|
-
function pos(node:
|
|
140
|
+
function pos(node: tsTypes.Node): { line: number; column: number } {
|
|
111
141
|
const { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile))
|
|
112
142
|
return { line: line + 1, column: character + 1 }
|
|
113
143
|
}
|
|
114
144
|
|
|
115
|
-
function lineHasOptOut(node:
|
|
145
|
+
function lineHasOptOut(node: tsTypes.Node): boolean {
|
|
116
146
|
const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile))
|
|
117
147
|
return OPT_OUT_RE.test(getLineText(sourceFile, line))
|
|
118
148
|
}
|
|
119
149
|
|
|
120
|
-
function visit(node:
|
|
150
|
+
function visit(node: tsTypes.Node): void {
|
|
121
151
|
// ── as any / as unknown ──
|
|
122
152
|
if (ts.isAsExpression(node)) {
|
|
123
153
|
const typeText = node.type.getText(sourceFile)
|
|
@@ -13,11 +13,30 @@ You are **Prometheus**, a planning consultant. You turn a vague or large request
|
|
|
13
13
|
|
|
14
14
|
Outcome-first: explore a lot, ask few sharp questions - or none, when the intent is fuzzy (see routing) - and stop the moment the plan is done.
|
|
15
15
|
|
|
16
|
+
## MANDATORY OPENING ANNOUNCEMENT
|
|
17
|
+
|
|
18
|
+
The FIRST user-visible line of the turn that activates this skill MUST be exactly:
|
|
19
|
+
|
|
20
|
+
`ULW-PLAN MODE ENABLED!`
|
|
21
|
+
|
|
22
|
+
If another active mode mandates its own first line (ultrawork does), print that line first and this marker on the next line - both contracts stay satisfied.
|
|
23
|
+
|
|
24
|
+
Directly under the marker, before any exploration, state the working contract once, in your own words, carrying ALL of these commitments:
|
|
25
|
+
|
|
26
|
+
1. **Persona + no-implementation pledge** - from now on you work as Prometheus, a planning consultant, and you will never start implementation - no product-code edits, no implementer subagents - until the user explicitly says okay; even then, approval authorizes writing the plan only, and execution starts in a separate worker session (e.g. `$start-work`).
|
|
27
|
+
2. **Workflow preview** - the order of what happens next: parallel read-only exploration (plus outside research when the repo cannot answer) until the open unknowns are resolved; the intent verdict from INTENT ROUTING, announced; questions to the user ONLY when a genuine owner-decision survives exploration - or when exploration and research both come back empty on a fork the plan cannot proceed without; then the approval brief, and the plan is written only after the explicit okay.
|
|
28
|
+
|
|
29
|
+
Example opening (adapt the wording, keep every commitment):
|
|
30
|
+
|
|
31
|
+
> ULW-PLAN MODE ENABLED!
|
|
32
|
+
> From now on I am working as Prometheus, a planning consultant. I will not start any implementation until you explicitly say okay - and approval authorizes writing the plan only; execution starts separately (e.g. `$start-work`).
|
|
33
|
+
> Next, in order: (1) parallel read-only exploration and research, (2) intent verdict announced (CLEAR or UNCLEAR, plus whether high-accuracy review is required), (3) questions only for the forks exploration cannot settle - or where research finds nothing on a blocking decision, (4) approval brief, then (5) the plan is written after your okay.
|
|
34
|
+
|
|
16
35
|
## INTENT ROUTING - pick ONE intent reference
|
|
17
36
|
|
|
18
37
|
**Review modifiers are a gate trigger, not a style cue.** If the user says "high accuracy", "ultra high accuracy", "고정밀", "deep review", or equivalent - in ANY turn, even appended to a follow-up question and even after the plan already exists - set `review_required: true` in the draft: the dual high-accuracy review (native `momus` + the independent Oracle review) is now REQUIRED before handoff, and if the plan already exists you run it this same turn. Answering the current question more carefully does NOT satisfy it. This does NOT choose CLEAR/UNCLEAR and does NOT suppress interview.
|
|
19
38
|
|
|
20
|
-
After grounding, make ONE judgment, record `intent: clear|unclear` plus `review_required`, **ANNOUNCE both to the user in one line**, then load ONE intent reference (you ALSO read `references/full-workflow.md` for the shared mechanics - see below). The test keys on whether the desired **OUTCOME** is clear, NOT on request length.
|
|
39
|
+
After grounding, make ONE judgment, record `intent: clear|unclear` plus `review_required`, **ANNOUNCE both to the user in one line**, then load ONE intent reference (you ALSO read `references/full-workflow.md` for the shared mechanics - see below). The test keys on whether the desired **OUTCOME** is clear, NOT on request length. This verdict line and the opening announcement above are the two mandatory user-visible signals of a planning session - it tells the user whether they will be interviewed and whether high-accuracy review is already requested; never skip either.
|
|
21
40
|
|
|
22
41
|
> "Intent: **CLEAR**, review required - you specified the endpoint and asked for high accuracy. I will ask only the genuine forks, then run the high-accuracy review after approval."
|
|
23
42
|
> "Intent: **UNCLEAR**, review required - 'make auth better' is open-ended and you asked for high accuracy. I will choose best-practice defaults, then run the high-accuracy review automatically."
|
|
@@ -27,6 +27,7 @@ export type PluginModuleDeps = {
|
|
|
27
27
|
log: typeof log;
|
|
28
28
|
logLegacyPluginStartupWarning: typeof logLegacyPluginStartupWarning;
|
|
29
29
|
migrateLegacyWorkspaceDirectory: typeof migrateLegacyWorkspaceDirectory;
|
|
30
|
+
startOmoProcessSweep: () => Promise<void>;
|
|
30
31
|
detectDuplicateOmoPlugin: typeof detectDuplicateOmoPlugin;
|
|
31
32
|
getDuplicateOmoPluginWarning: typeof getDuplicateOmoPluginWarning;
|
|
32
33
|
detectExternalSkillPlugin: typeof detectExternalSkillPlugin;
|
package/dist/tui.js
CHANGED
|
@@ -4171,6 +4171,7 @@ var init_env = __esm(() => {
|
|
|
4171
4171
|
SAFE_CODEGRAPH_RUNTIME_ENV_KEYS = new Set([
|
|
4172
4172
|
"CODEGRAPH_ALLOW_UNSAFE_NODE",
|
|
4173
4173
|
"CODEGRAPH_BIN",
|
|
4174
|
+
"CODEGRAPH_DAEMON_IDLE_TIMEOUT_MS",
|
|
4174
4175
|
"CODEGRAPH_FAKE_LOG",
|
|
4175
4176
|
"CODEGRAPH_NO_DAEMON",
|
|
4176
4177
|
"CODEGRAPH_NODE_BIN",
|
|
@@ -4186,6 +4187,9 @@ var init_workspace = () => {};
|
|
|
4186
4187
|
// packages/utils/src/codegraph/guidance.ts
|
|
4187
4188
|
var init_guidance = () => {};
|
|
4188
4189
|
|
|
4190
|
+
// packages/utils/src/codegraph/manifest.ts
|
|
4191
|
+
var init_manifest = () => {};
|
|
4192
|
+
|
|
4189
4193
|
// packages/utils/src/codegraph/provision.ts
|
|
4190
4194
|
import { execFile } from "child_process";
|
|
4191
4195
|
import { promisify } from "util";
|
|
@@ -4208,6 +4212,7 @@ var init_resolve2 = __esm(() => {
|
|
|
4208
4212
|
var init_codegraph = __esm(() => {
|
|
4209
4213
|
init_env();
|
|
4210
4214
|
init_guidance();
|
|
4215
|
+
init_manifest();
|
|
4211
4216
|
init_provision();
|
|
4212
4217
|
init_process_sweep();
|
|
4213
4218
|
init_resolve2();
|
|
@@ -19958,7 +19963,9 @@ var init_codegraph2 = __esm(() => {
|
|
|
19958
19963
|
CodegraphConfigSchema = exports_external.object({
|
|
19959
19964
|
auto_init: exports_external.boolean().default(true),
|
|
19960
19965
|
auto_provision: exports_external.boolean().default(true),
|
|
19966
|
+
daemon: exports_external.boolean().default(false),
|
|
19961
19967
|
enabled: exports_external.boolean().default(true),
|
|
19968
|
+
excluded_roots: exports_external.array(exports_external.string()).optional(),
|
|
19962
19969
|
install_dir: exports_external.string().optional(),
|
|
19963
19970
|
telemetry: exports_external.boolean().optional(),
|
|
19964
19971
|
watch_debounce_ms: exports_external.number().nonnegative().optional()
|
|
@@ -20667,26 +20674,25 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
20667
20674
|
fallbackChain: [
|
|
20668
20675
|
{
|
|
20669
20676
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
20670
|
-
model: "claude-opus-4-
|
|
20677
|
+
model: "claude-opus-4-8",
|
|
20671
20678
|
variant: "max"
|
|
20672
20679
|
},
|
|
20673
|
-
{ providers: ["opencode-go", "kimi-for-coding", "moonshotai", "opencode", "vercel"], model: "kimi-k3" },
|
|
20674
|
-
{ providers: ["opencode-go", "vercel"], model: "kimi-k2.6" },
|
|
20675
|
-
{ providers: ["kimi-for-coding"], model: "k2p5" },
|
|
20676
20680
|
{
|
|
20677
20681
|
providers: [
|
|
20682
|
+
"opencode-go",
|
|
20683
|
+
"kimi-for-coding",
|
|
20684
|
+
"moonshotai",
|
|
20678
20685
|
"opencode",
|
|
20686
|
+
"vercel",
|
|
20679
20687
|
"bailian-coding-plan",
|
|
20680
|
-
"moonshotai",
|
|
20681
20688
|
"moonshotai-cn",
|
|
20682
20689
|
"firmware",
|
|
20683
20690
|
"ollama-cloud",
|
|
20684
|
-
"aihubmix"
|
|
20685
|
-
"vercel"
|
|
20691
|
+
"aihubmix"
|
|
20686
20692
|
],
|
|
20687
|
-
model: "kimi-
|
|
20693
|
+
model: "kimi-k3"
|
|
20688
20694
|
},
|
|
20689
|
-
{ providers: ["openai", "github-copilot", "opencode", "vercel"], model: "gpt-5.
|
|
20695
|
+
{ providers: ["openai", "github-copilot", "opencode", "vercel"], model: "gpt-5.6-sol", variant: "medium" },
|
|
20690
20696
|
{ providers: ["zai-coding-plan", "opencode", "bailian-coding-plan", "vercel"], model: "glm-5" },
|
|
20691
20697
|
{ providers: ["opencode"], model: "big-pickle" }
|
|
20692
20698
|
],
|
|
@@ -20695,13 +20701,8 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
20695
20701
|
hephaestus: {
|
|
20696
20702
|
fallbackChain: [
|
|
20697
20703
|
{
|
|
20698
|
-
providers: ["openai", "github-copilot", "vercel"],
|
|
20704
|
+
providers: ["openai", "github-copilot", "vercel", "opencode"],
|
|
20699
20705
|
model: "gpt-5.6-sol",
|
|
20700
|
-
variant: "high"
|
|
20701
|
-
},
|
|
20702
|
-
{
|
|
20703
|
-
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
20704
|
-
model: "gpt-5.5",
|
|
20705
20706
|
variant: "medium"
|
|
20706
20707
|
}
|
|
20707
20708
|
],
|
|
@@ -20711,8 +20712,13 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
20711
20712
|
oracle: {
|
|
20712
20713
|
fallbackChain: [
|
|
20713
20714
|
{
|
|
20714
|
-
providers: ["openai", "
|
|
20715
|
-
model: "gpt-5.
|
|
20715
|
+
providers: ["openai", "opencode", "vercel"],
|
|
20716
|
+
model: "gpt-5.6-sol",
|
|
20717
|
+
variant: "xhigh"
|
|
20718
|
+
},
|
|
20719
|
+
{
|
|
20720
|
+
providers: ["github-copilot"],
|
|
20721
|
+
model: "gpt-5.6-sol",
|
|
20716
20722
|
variant: "high"
|
|
20717
20723
|
},
|
|
20718
20724
|
{
|
|
@@ -20722,7 +20728,7 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
20722
20728
|
},
|
|
20723
20729
|
{
|
|
20724
20730
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
20725
|
-
model: "claude-opus-4-
|
|
20731
|
+
model: "claude-opus-4-8",
|
|
20726
20732
|
variant: "max"
|
|
20727
20733
|
},
|
|
20728
20734
|
{ providers: ["opencode-go", "vercel"], model: "glm-5.2" }
|
|
@@ -20754,8 +20760,8 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
20754
20760
|
},
|
|
20755
20761
|
"multimodal-looker": {
|
|
20756
20762
|
fallbackChain: [
|
|
20757
|
-
{ providers: ["openai", "opencode", "vercel"], model: "gpt-5.
|
|
20758
|
-
{ providers: ["opencode-go", "vercel"], model: "kimi-
|
|
20763
|
+
{ providers: ["openai", "opencode", "vercel"], model: "gpt-5.6-sol", variant: "low" },
|
|
20764
|
+
{ providers: ["opencode-go", "vercel"], model: "kimi-k3" },
|
|
20759
20765
|
{ providers: ["zai-coding-plan", "vercel"], model: "glm-4.6v" },
|
|
20760
20766
|
{ providers: ["openai", "github-copilot", "opencode", "vercel"], model: "gpt-5-nano" }
|
|
20761
20767
|
]
|
|
@@ -20764,12 +20770,12 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
20764
20770
|
fallbackChain: [
|
|
20765
20771
|
{
|
|
20766
20772
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
20767
|
-
model: "claude-opus-4-
|
|
20773
|
+
model: "claude-opus-4-8",
|
|
20768
20774
|
variant: "max"
|
|
20769
20775
|
},
|
|
20770
20776
|
{
|
|
20771
20777
|
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
20772
|
-
model: "gpt-5.
|
|
20778
|
+
model: "gpt-5.6-sol",
|
|
20773
20779
|
variant: "high"
|
|
20774
20780
|
},
|
|
20775
20781
|
{ providers: ["opencode-go", "vercel"], model: "glm-5.2" },
|
|
@@ -20787,16 +20793,16 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
20787
20793
|
},
|
|
20788
20794
|
{
|
|
20789
20795
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
20790
|
-
model: "claude-opus-4-
|
|
20796
|
+
model: "claude-opus-4-8",
|
|
20791
20797
|
variant: "max"
|
|
20792
20798
|
},
|
|
20793
20799
|
{
|
|
20794
20800
|
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
20795
|
-
model: "gpt-5.
|
|
20796
|
-
variant: "
|
|
20801
|
+
model: "gpt-5.6-sol",
|
|
20802
|
+
variant: "medium"
|
|
20797
20803
|
},
|
|
20798
20804
|
{ providers: ["opencode-go", "vercel"], model: "glm-5.2" },
|
|
20799
|
-
{ providers: ["kimi-for-coding"], model: "
|
|
20805
|
+
{ providers: ["kimi-for-coding"], model: "kimi-k3" }
|
|
20800
20806
|
]
|
|
20801
20807
|
},
|
|
20802
20808
|
momus: {
|
|
@@ -20812,13 +20818,18 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
20812
20818
|
variant: "high"
|
|
20813
20819
|
},
|
|
20814
20820
|
{
|
|
20815
|
-
providers: ["openai", "
|
|
20816
|
-
model: "gpt-5.
|
|
20821
|
+
providers: ["openai", "opencode", "vercel"],
|
|
20822
|
+
model: "gpt-5.6-sol",
|
|
20817
20823
|
variant: "xhigh"
|
|
20818
20824
|
},
|
|
20825
|
+
{
|
|
20826
|
+
providers: ["github-copilot"],
|
|
20827
|
+
model: "gpt-5.6-sol",
|
|
20828
|
+
variant: "high"
|
|
20829
|
+
},
|
|
20819
20830
|
{
|
|
20820
20831
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
20821
|
-
model: "claude-opus-4-
|
|
20832
|
+
model: "claude-opus-4-8",
|
|
20822
20833
|
variant: "max"
|
|
20823
20834
|
},
|
|
20824
20835
|
{
|
|
@@ -20832,10 +20843,10 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
20832
20843
|
atlas: {
|
|
20833
20844
|
fallbackChain: [
|
|
20834
20845
|
{ providers: ["anthropic", "github-copilot", "opencode", "vercel"], model: "claude-sonnet-4-6" },
|
|
20835
|
-
{ providers: ["opencode-go", "vercel"], model: "kimi-
|
|
20846
|
+
{ providers: ["opencode-go", "vercel"], model: "kimi-k3" },
|
|
20836
20847
|
{
|
|
20837
20848
|
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
20838
|
-
model: "gpt-5.
|
|
20849
|
+
model: "gpt-5.6-sol",
|
|
20839
20850
|
variant: "medium"
|
|
20840
20851
|
},
|
|
20841
20852
|
{ providers: ["opencode-go", "vercel"], model: "minimax-m3" },
|
|
@@ -20846,10 +20857,10 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
20846
20857
|
"sisyphus-junior": {
|
|
20847
20858
|
fallbackChain: [
|
|
20848
20859
|
{ providers: ["anthropic", "github-copilot", "opencode", "vercel"], model: "claude-sonnet-4-6" },
|
|
20849
|
-
{ providers: ["opencode-go", "vercel"], model: "kimi-
|
|
20860
|
+
{ providers: ["opencode-go", "vercel"], model: "kimi-k3" },
|
|
20850
20861
|
{
|
|
20851
20862
|
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
20852
|
-
model: "gpt-5.
|
|
20863
|
+
model: "gpt-5.6-sol",
|
|
20853
20864
|
variant: "medium"
|
|
20854
20865
|
},
|
|
20855
20866
|
{ providers: ["opencode-go", "vercel"], model: "minimax-m3" },
|
|
@@ -20875,11 +20886,11 @@ var init_category_model_requirements = __esm(() => {
|
|
|
20875
20886
|
{ providers: ["zai-coding-plan", "opencode", "bailian-coding-plan", "vercel"], model: "glm-5" },
|
|
20876
20887
|
{
|
|
20877
20888
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
20878
|
-
model: "claude-opus-4-
|
|
20889
|
+
model: "claude-opus-4-8",
|
|
20879
20890
|
variant: "max"
|
|
20880
20891
|
},
|
|
20881
20892
|
{ providers: ["opencode-go", "vercel"], model: "glm-5.2" },
|
|
20882
|
-
{ providers: ["kimi-for-coding"], model: "
|
|
20893
|
+
{ providers: ["kimi-for-coding"], model: "kimi-k3" }
|
|
20883
20894
|
]
|
|
20884
20895
|
},
|
|
20885
20896
|
ultrabrain: {
|
|
@@ -20896,7 +20907,7 @@ var init_category_model_requirements = __esm(() => {
|
|
|
20896
20907
|
},
|
|
20897
20908
|
{
|
|
20898
20909
|
providers: ["openai", "opencode", "vercel"],
|
|
20899
|
-
model: "gpt-5.
|
|
20910
|
+
model: "gpt-5.6-sol",
|
|
20900
20911
|
variant: "xhigh"
|
|
20901
20912
|
},
|
|
20902
20913
|
{
|
|
@@ -20906,7 +20917,7 @@ var init_category_model_requirements = __esm(() => {
|
|
|
20906
20917
|
},
|
|
20907
20918
|
{
|
|
20908
20919
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
20909
|
-
model: "claude-opus-4-
|
|
20920
|
+
model: "claude-opus-4-8",
|
|
20910
20921
|
variant: "max"
|
|
20911
20922
|
},
|
|
20912
20923
|
{ providers: ["opencode-go", "vercel"], model: "glm-5.2" }
|
|
@@ -20931,12 +20942,12 @@ var init_category_model_requirements = __esm(() => {
|
|
|
20931
20942
|
},
|
|
20932
20943
|
{
|
|
20933
20944
|
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
20934
|
-
model: "gpt-5.
|
|
20945
|
+
model: "gpt-5.6-sol",
|
|
20935
20946
|
variant: "medium"
|
|
20936
20947
|
},
|
|
20937
20948
|
{
|
|
20938
20949
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
20939
|
-
model: "claude-opus-4-
|
|
20950
|
+
model: "claude-opus-4-8",
|
|
20940
20951
|
variant: "max"
|
|
20941
20952
|
},
|
|
20942
20953
|
{
|
|
@@ -20944,7 +20955,7 @@ var init_category_model_requirements = __esm(() => {
|
|
|
20944
20955
|
model: "gemini-3.1-pro",
|
|
20945
20956
|
variant: "high"
|
|
20946
20957
|
},
|
|
20947
|
-
{ providers: ["opencode-go", "vercel"], model: "kimi-
|
|
20958
|
+
{ providers: ["opencode-go", "vercel"], model: "kimi-k3" },
|
|
20948
20959
|
{ providers: ["opencode-go", "vercel"], model: "glm-5.2" }
|
|
20949
20960
|
]
|
|
20950
20961
|
},
|
|
@@ -20957,11 +20968,11 @@ var init_category_model_requirements = __esm(() => {
|
|
|
20957
20968
|
},
|
|
20958
20969
|
{
|
|
20959
20970
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
20960
|
-
model: "claude-opus-4-
|
|
20971
|
+
model: "claude-opus-4-8",
|
|
20961
20972
|
variant: "max"
|
|
20962
20973
|
},
|
|
20963
|
-
{ providers: ["openai", "github-copilot", "opencode", "vercel"], model: "gpt-5.
|
|
20964
|
-
{ providers: ["opencode-go", "vercel"], model: "kimi-
|
|
20974
|
+
{ providers: ["openai", "github-copilot", "opencode", "vercel"], model: "gpt-5.6-sol", variant: "high" },
|
|
20975
|
+
{ providers: ["opencode-go", "vercel"], model: "kimi-k3" },
|
|
20965
20976
|
{ providers: ["opencode-go", "vercel"], model: "glm-5.2" }
|
|
20966
20977
|
]
|
|
20967
20978
|
},
|
|
@@ -21003,10 +21014,10 @@ var init_category_model_requirements = __esm(() => {
|
|
|
21003
21014
|
},
|
|
21004
21015
|
{
|
|
21005
21016
|
providers: ["openai", "opencode", "vercel"],
|
|
21006
|
-
model: "gpt-5.
|
|
21017
|
+
model: "gpt-5.6-sol",
|
|
21007
21018
|
variant: "medium"
|
|
21008
21019
|
},
|
|
21009
|
-
{ providers: ["opencode-go", "vercel"], model: "kimi-
|
|
21020
|
+
{ providers: ["opencode-go", "vercel"], model: "kimi-k3" },
|
|
21010
21021
|
{
|
|
21011
21022
|
providers: ["google", "github-copilot", "opencode", "vercel"],
|
|
21012
21023
|
model: "gemini-3-flash"
|
|
@@ -21020,30 +21031,29 @@ var init_category_model_requirements = __esm(() => {
|
|
|
21020
21031
|
fallbackChain: [
|
|
21021
21032
|
{
|
|
21022
21033
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
21023
|
-
model: "claude-opus-4-
|
|
21034
|
+
model: "claude-opus-4-8",
|
|
21024
21035
|
variant: "max"
|
|
21025
21036
|
},
|
|
21026
21037
|
{
|
|
21027
21038
|
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
21028
|
-
model: "gpt-5.
|
|
21039
|
+
model: "gpt-5.6-sol",
|
|
21029
21040
|
variant: "high"
|
|
21030
21041
|
},
|
|
21031
21042
|
{ providers: ["zai-coding-plan", "opencode", "bailian-coding-plan", "vercel"], model: "glm-5" },
|
|
21032
|
-
{ providers: ["kimi-for-coding"], model: "
|
|
21043
|
+
{ providers: ["kimi-for-coding"], model: "kimi-k3" },
|
|
21033
21044
|
{ providers: ["opencode-go", "vercel"], model: "glm-5.2" },
|
|
21034
|
-
{ providers: ["opencode", "bailian-coding-plan", "vercel"], model: "kimi-k2.5" },
|
|
21035
21045
|
{
|
|
21036
21046
|
providers: [
|
|
21037
21047
|
"opencode",
|
|
21038
21048
|
"bailian-coding-plan",
|
|
21049
|
+
"vercel",
|
|
21039
21050
|
"moonshotai",
|
|
21040
21051
|
"moonshotai-cn",
|
|
21041
21052
|
"firmware",
|
|
21042
21053
|
"ollama-cloud",
|
|
21043
|
-
"aihubmix"
|
|
21044
|
-
"vercel"
|
|
21054
|
+
"aihubmix"
|
|
21045
21055
|
],
|
|
21046
|
-
model: "kimi-
|
|
21056
|
+
model: "kimi-k3"
|
|
21047
21057
|
}
|
|
21048
21058
|
]
|
|
21049
21059
|
},
|
|
@@ -21053,7 +21063,7 @@ var init_category_model_requirements = __esm(() => {
|
|
|
21053
21063
|
providers: ["google", "github-copilot", "opencode", "vercel"],
|
|
21054
21064
|
model: "gemini-3-flash"
|
|
21055
21065
|
},
|
|
21056
|
-
{ providers: ["opencode-go", "vercel"], model: "kimi-
|
|
21066
|
+
{ providers: ["opencode-go", "vercel"], model: "kimi-k3" },
|
|
21057
21067
|
{
|
|
21058
21068
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
21059
21069
|
model: "claude-sonnet-4-6"
|
|
@@ -21995,7 +22005,7 @@ var init_anthropic_categories = __esm(() => {
|
|
|
21995
22005
|
ANTHROPIC_CATEGORIES = [
|
|
21996
22006
|
{
|
|
21997
22007
|
name: "unspecified-high",
|
|
21998
|
-
config: { model: "anthropic/claude-opus-4-
|
|
22008
|
+
config: { model: "anthropic/claude-opus-4-8", variant: "max" },
|
|
21999
22009
|
description: "Tasks that don't fit other categories, high effort required",
|
|
22000
22010
|
promptAppend: UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND
|
|
22001
22011
|
}
|
|
@@ -22153,7 +22163,7 @@ var init_kimi_categories = __esm(() => {
|
|
|
22153
22163
|
KIMI_CATEGORIES = [
|
|
22154
22164
|
{
|
|
22155
22165
|
name: "writing",
|
|
22156
|
-
config: { model: "kimi-for-coding/
|
|
22166
|
+
config: { model: "kimi-for-coding/kimi-k3" },
|
|
22157
22167
|
description: "Documentation, prose, technical writing",
|
|
22158
22168
|
promptAppend: WRITING_CATEGORY_PROMPT_APPEND
|
|
22159
22169
|
}
|
|
@@ -75795,7 +75805,7 @@ var init_claude_model_mapper = __esm(() => {
|
|
|
75795
75805
|
init_model_normalization2();
|
|
75796
75806
|
CLAUDE_CODE_ALIAS_MAP = new Map([
|
|
75797
75807
|
["sonnet", `${ANTHROPIC_PREFIX}claude-sonnet-4-6`],
|
|
75798
|
-
["opus", `${ANTHROPIC_PREFIX}claude-opus-4-
|
|
75808
|
+
["opus", `${ANTHROPIC_PREFIX}claude-opus-4-8`],
|
|
75799
75809
|
["haiku", `${ANTHROPIC_PREFIX}claude-haiku-4-5`]
|
|
75800
75810
|
]);
|
|
75801
75811
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oh-my-opencode",
|
|
3
|
-
"version": "4.19.
|
|
3
|
+
"version": "4.19.1",
|
|
4
4
|
"description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -212,18 +212,18 @@
|
|
|
212
212
|
"typescript": "^6.0.3"
|
|
213
213
|
},
|
|
214
214
|
"optionalDependencies": {
|
|
215
|
-
"oh-my-opencode-darwin-arm64": "4.19.
|
|
216
|
-
"oh-my-opencode-darwin-x64": "4.19.
|
|
217
|
-
"oh-my-opencode-darwin-x64-baseline": "4.19.
|
|
218
|
-
"oh-my-opencode-linux-arm64": "4.19.
|
|
219
|
-
"oh-my-opencode-linux-arm64-musl": "4.19.
|
|
220
|
-
"oh-my-opencode-linux-x64": "4.19.
|
|
221
|
-
"oh-my-opencode-linux-x64-baseline": "4.19.
|
|
222
|
-
"oh-my-opencode-linux-x64-musl": "4.19.
|
|
223
|
-
"oh-my-opencode-linux-x64-musl-baseline": "4.19.
|
|
224
|
-
"oh-my-opencode-windows-arm64": "4.19.
|
|
225
|
-
"oh-my-opencode-windows-x64": "4.19.
|
|
226
|
-
"oh-my-opencode-windows-x64-baseline": "4.19.
|
|
215
|
+
"oh-my-opencode-darwin-arm64": "4.19.1",
|
|
216
|
+
"oh-my-opencode-darwin-x64": "4.19.1",
|
|
217
|
+
"oh-my-opencode-darwin-x64-baseline": "4.19.1",
|
|
218
|
+
"oh-my-opencode-linux-arm64": "4.19.1",
|
|
219
|
+
"oh-my-opencode-linux-arm64-musl": "4.19.1",
|
|
220
|
+
"oh-my-opencode-linux-x64": "4.19.1",
|
|
221
|
+
"oh-my-opencode-linux-x64-baseline": "4.19.1",
|
|
222
|
+
"oh-my-opencode-linux-x64-musl": "4.19.1",
|
|
223
|
+
"oh-my-opencode-linux-x64-musl-baseline": "4.19.1",
|
|
224
|
+
"oh-my-opencode-windows-arm64": "4.19.1",
|
|
225
|
+
"oh-my-opencode-windows-x64": "4.19.1",
|
|
226
|
+
"oh-my-opencode-windows-x64-baseline": "4.19.1"
|
|
227
227
|
},
|
|
228
228
|
"overrides": {
|
|
229
229
|
"@earendil-works/pi-agent-core": "0.80.3",
|