oh-my-opencode 5.0.0-beta.19 → 5.0.0-beta.20
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/README.ja.md +3 -3
- package/README.ko.md +3 -3
- package/README.md +3 -3
- package/README.ru.md +3 -3
- package/README.zh-cn.md +3 -3
- package/dist/cli/fallback-lane-policy.d.ts +1 -0
- package/dist/cli/index.js +72 -195
- package/dist/cli/install-codex/install-codex-test-fixtures.d.ts +1 -1
- package/dist/cli-node/index.js +72 -195
- package/dist/config/schema/commands.d.ts +1 -1
- package/dist/config/schema/hooks.d.ts +1 -1
- package/dist/config/schema/oh-my-opencode-config.d.ts +4 -1
- package/dist/config/schema/ulw-execute.d.ts +5 -0
- package/dist/config/validate.d.ts +2 -0
- package/dist/create-hooks.d.ts +2 -1
- package/dist/features/builtin-commands/templates/ulw-execute.d.ts +1 -0
- package/dist/features/builtin-commands/types.d.ts +1 -1
- package/dist/hooks/atlas/atlas-hook.d.ts +1 -0
- package/dist/hooks/atlas/atlas-lifecycle-store.d.ts +50 -0
- package/dist/hooks/atlas/event-handler.d.ts +1 -0
- package/dist/hooks/atlas/tool-execute-before.d.ts +3 -0
- package/dist/hooks/atlas/types.d.ts +1 -0
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/prometheus-md-only/agent-resolution.d.ts +2 -2
- package/dist/hooks/sisyphus-junior-notepad/constants.d.ts +1 -1
- package/dist/hooks/{start-work → ulw-execute}/context-info-builder.d.ts +1 -1
- package/dist/hooks/{start-work → ulw-execute}/index.d.ts +1 -1
- package/dist/hooks/ulw-execute/ulw-execute-hook.d.ts +23 -0
- package/dist/index.js +322 -258
- package/dist/oh-my-opencode.schema.json +14 -1
- package/dist/plugin/chat-message/types.d.ts +3 -3
- package/dist/plugin/chat-message/ulw-execute-message.d.ts +5 -0
- package/dist/plugin/hooks/create-core-hooks.d.ts +1 -1
- package/dist/plugin/hooks/create-session-hooks.d.ts +2 -2
- package/dist/skills/frontend/SKILL.md +1 -1
- package/dist/skills/frontend/references/designpowers/README.md +1 -1
- package/dist/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
- package/dist/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
- package/dist/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
- package/dist/skills/frontend/references/designpowers/orchestration.md +1 -1
- package/dist/skills/frontend/references/designpowers/routing.md +5 -5
- package/dist/skills/{start-work → ulw-execute}/SKILL.md +7 -7
- package/dist/skills/ulw-plan/SKILL.md +4 -4
- package/dist/skills/ulw-plan/references/full-workflow.md +4 -4
- package/dist/skills/ulw-plan/references/intent-unclear.md +2 -2
- package/dist/tui.js +34 -9
- package/package.json +15 -15
- package/packages/omo-codex/THIRD-PARTY-NOTICES.md +4 -4
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +4 -4
- package/packages/omo-codex/plugin/README.md +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +2 -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/codegraph/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/ultrawork/skills/ulw-plan/SKILL.md +4 -4
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +4 -4
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +2 -2
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/AGENTS.md +2 -2
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/NOTICE +1 -1
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/README.md +5 -5
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/directive.md +6 -6
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/dist/cli.js +12 -12
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +28 -0
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/package.json +8 -8
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/boulder-reader.ts +1 -1
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/cli.ts +1 -1
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/codex-hook.ts +3 -3
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/directive.ts +1 -1
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/index.ts +1 -1
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/boulder-reader.test.ts +3 -3
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/cli.test.ts +1 -1
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/codex-hook.test.ts +6 -6
- package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +3 -3
- 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/src/stop-resume-hook.ts +3 -3
- package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +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-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 +1 -1
- 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 +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 +17 -0
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-checking-ulw-execute-continuation.json +17 -0
- 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 +34 -34
- package/packages/omo-codex/plugin/package.json +2 -2
- package/packages/omo-codex/plugin/scripts/auto-update-plan.mjs +1 -1
- package/packages/omo-codex/plugin/scripts/sync-skills.mjs +11 -11
- package/packages/omo-codex/plugin/skills/frontend/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/README.md +1 -1
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/orchestration.md +1 -1
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/routing.md +5 -5
- package/packages/omo-codex/plugin/skills/review-work/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/{start-work → ulw-execute}/SKILL.md +10 -10
- package/packages/omo-codex/plugin/skills/ulw-execute/agents/openai.yaml +2 -0
- package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +4 -4
- package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +4 -4
- package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +2 -2
- package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +4 -4
- package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +1 -1
- package/packages/omo-codex/plugin/test/component-bin-names.test.mjs +2 -2
- package/packages/omo-codex/plugin/test/component-bundled-cli.test.mjs +1 -1
- package/packages/omo-codex/plugin/test/component-hook-contract-cases.mjs +2 -2
- package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +4 -4
- package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +12 -12
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +4 -4
- package/packages/shared-skills/skills/frontend/SKILL.md +1 -1
- package/packages/shared-skills/skills/frontend/references/designpowers/README.md +1 -1
- package/packages/shared-skills/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
- package/packages/shared-skills/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
- package/packages/shared-skills/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
- package/packages/shared-skills/skills/frontend/references/designpowers/orchestration.md +1 -1
- package/packages/shared-skills/skills/frontend/references/designpowers/routing.md +5 -5
- package/packages/shared-skills/skills/{start-work → ulw-execute}/SKILL.md +7 -7
- package/packages/shared-skills/skills/ulw-plan/SKILL.md +4 -4
- package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +4 -4
- package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +2 -2
- package/dist/config/schema/start-work.d.ts +0 -5
- package/dist/features/builtin-commands/templates/start-work.d.ts +0 -1
- package/dist/hooks/start-work/start-work-hook.d.ts +0 -23
- package/dist/plugin/chat-message/start-work-message.d.ts +0 -5
- package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +0 -28
- package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +0 -17
- package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +0 -17
- package/packages/omo-codex/plugin/skills/start-work/agents/openai.yaml +0 -2
- /package/dist/hooks/{start-work → ulw-execute}/context-info-formatters.d.ts +0 -0
- /package/dist/hooks/{start-work → ulw-execute}/explicit-plan-context.d.ts +0 -0
- /package/dist/hooks/{start-work → ulw-execute}/notepad-scaffold.d.ts +0 -0
- /package/dist/hooks/{start-work → ulw-execute}/parse-user-request.d.ts +0 -0
- /package/dist/hooks/{start-work → ulw-execute}/plan-discovery-context.d.ts +0 -0
- /package/dist/hooks/{start-work → ulw-execute}/plan-selection.d.ts +0 -0
- /package/dist/hooks/{start-work → ulw-execute}/session-plan-affinity.d.ts +0 -0
- /package/dist/hooks/{start-work → ulw-execute}/work-initializer.d.ts +0 -0
- /package/dist/hooks/{start-work → ulw-execute}/worktree-block.d.ts +0 -0
- /package/dist/hooks/{start-work → ulw-execute}/worktree-detector.d.ts +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/.gitattributes +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/CHANGELOG.md +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/LICENSE +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/biome.json +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/plan-checklist.ts +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/types.ts +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-completed.json +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-mixed-platforms.json +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-single-codex-work.json +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-all-done.md +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-scaffold.md +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-nested-checkboxes.md +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-unchecked.md +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.build.json +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.json +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/vitest.config.ts +0 -0
package/dist/cli-node/index.js
CHANGED
|
@@ -55,7 +55,7 @@ var package_default;
|
|
|
55
55
|
var init_package = __esm(() => {
|
|
56
56
|
package_default = {
|
|
57
57
|
name: "oh-my-opencode",
|
|
58
|
-
version: "5.0.0-beta.
|
|
58
|
+
version: "5.0.0-beta.20",
|
|
59
59
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
60
60
|
main: "./dist/index.js",
|
|
61
61
|
types: "dist/index.d.ts",
|
|
@@ -140,7 +140,7 @@ var init_package = __esm(() => {
|
|
|
140
140
|
"packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/cli.js",
|
|
141
141
|
"packages/omo-codex/plugin/components/lsp/dist/cli.js",
|
|
142
142
|
"packages/omo-codex/plugin/components/rules/dist/cli.js",
|
|
143
|
-
"packages/omo-codex/plugin/components/
|
|
143
|
+
"packages/omo-codex/plugin/components/ulw-execute-continuation/dist/cli.js",
|
|
144
144
|
"packages/omo-codex/plugin/components/teammode/dist/cli.js",
|
|
145
145
|
"packages/omo-codex/plugin/components/telemetry/dist/cli.js",
|
|
146
146
|
"packages/omo-codex/plugin/components/ultrawork/dist/cli.js",
|
|
@@ -236,7 +236,7 @@ var init_package = __esm(() => {
|
|
|
236
236
|
zod: "^4.4.3"
|
|
237
237
|
},
|
|
238
238
|
devDependencies: {
|
|
239
|
-
"@code-yeongyu/senpi": "2026.8.
|
|
239
|
+
"@code-yeongyu/senpi": "2026.8.25",
|
|
240
240
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
241
241
|
"@oh-my-opencode/ast-grep-mcp": "workspace:*",
|
|
242
242
|
"@oh-my-opencode/boulder-state": "workspace:*",
|
|
@@ -277,18 +277,18 @@ var init_package = __esm(() => {
|
|
|
277
277
|
typescript: "^7.0.2"
|
|
278
278
|
},
|
|
279
279
|
optionalDependencies: {
|
|
280
|
-
"oh-my-opencode-darwin-arm64": "5.0.0-beta.
|
|
281
|
-
"oh-my-opencode-darwin-x64": "5.0.0-beta.
|
|
282
|
-
"oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.
|
|
283
|
-
"oh-my-opencode-linux-arm64": "5.0.0-beta.
|
|
284
|
-
"oh-my-opencode-linux-arm64-musl": "5.0.0-beta.
|
|
285
|
-
"oh-my-opencode-linux-x64": "5.0.0-beta.
|
|
286
|
-
"oh-my-opencode-linux-x64-baseline": "5.0.0-beta.
|
|
287
|
-
"oh-my-opencode-linux-x64-musl": "5.0.0-beta.
|
|
288
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.
|
|
289
|
-
"oh-my-opencode-windows-arm64": "5.0.0-beta.
|
|
290
|
-
"oh-my-opencode-windows-x64": "5.0.0-beta.
|
|
291
|
-
"oh-my-opencode-windows-x64-baseline": "5.0.0-beta.
|
|
280
|
+
"oh-my-opencode-darwin-arm64": "5.0.0-beta.20",
|
|
281
|
+
"oh-my-opencode-darwin-x64": "5.0.0-beta.20",
|
|
282
|
+
"oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.20",
|
|
283
|
+
"oh-my-opencode-linux-arm64": "5.0.0-beta.20",
|
|
284
|
+
"oh-my-opencode-linux-arm64-musl": "5.0.0-beta.20",
|
|
285
|
+
"oh-my-opencode-linux-x64": "5.0.0-beta.20",
|
|
286
|
+
"oh-my-opencode-linux-x64-baseline": "5.0.0-beta.20",
|
|
287
|
+
"oh-my-opencode-linux-x64-musl": "5.0.0-beta.20",
|
|
288
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.20",
|
|
289
|
+
"oh-my-opencode-windows-arm64": "5.0.0-beta.20",
|
|
290
|
+
"oh-my-opencode-windows-x64": "5.0.0-beta.20",
|
|
291
|
+
"oh-my-opencode-windows-x64-baseline": "5.0.0-beta.20"
|
|
292
292
|
},
|
|
293
293
|
overrides: {
|
|
294
294
|
"@earendil-works/pi-agent-core": "0.84.2",
|
|
@@ -22769,124 +22769,6 @@ var init_internal_initiator_marker = __esm(() => {
|
|
|
22769
22769
|
INTERNAL_NOREPLY_MARKER_DETECT_PATTERN = /<!--\s*OMO_INTERNAL_NOREPLY\s*-->/;
|
|
22770
22770
|
});
|
|
22771
22771
|
|
|
22772
|
-
// packages/utils/src/migration/agent-names.ts
|
|
22773
|
-
function migrateAgentNames(agents) {
|
|
22774
|
-
const migrated = {};
|
|
22775
|
-
let changed = false;
|
|
22776
|
-
for (const [key, value] of Object.entries(agents)) {
|
|
22777
|
-
const newKey = AGENT_NAME_MAP[key.toLowerCase()] ?? AGENT_NAME_MAP[key] ?? key;
|
|
22778
|
-
if (newKey !== key) {
|
|
22779
|
-
changed = true;
|
|
22780
|
-
}
|
|
22781
|
-
migrated[newKey] = value;
|
|
22782
|
-
}
|
|
22783
|
-
return { migrated, changed };
|
|
22784
|
-
}
|
|
22785
|
-
var AGENT_NAME_MAP, BUILTIN_AGENT_NAMES;
|
|
22786
|
-
var init_agent_names = __esm(() => {
|
|
22787
|
-
AGENT_NAME_MAP = {
|
|
22788
|
-
omo: "sisyphus",
|
|
22789
|
-
OmO: "sisyphus",
|
|
22790
|
-
Sisyphus: "sisyphus",
|
|
22791
|
-
"Sisyphus (Ultraworker)": "sisyphus",
|
|
22792
|
-
sisyphus: "sisyphus",
|
|
22793
|
-
"Hephaestus (Deep Agent)": "hephaestus",
|
|
22794
|
-
"OmO-Plan": "prometheus",
|
|
22795
|
-
"omo-plan": "prometheus",
|
|
22796
|
-
"Planner-Sisyphus": "prometheus",
|
|
22797
|
-
"planner-sisyphus": "prometheus",
|
|
22798
|
-
"Prometheus - Plan Builder": "prometheus",
|
|
22799
|
-
"Prometheus (Plan Builder)": "prometheus",
|
|
22800
|
-
prometheus: "prometheus",
|
|
22801
|
-
"orchestrator-sisyphus": "atlas",
|
|
22802
|
-
Atlas: "atlas",
|
|
22803
|
-
"Atlas (Plan Executor)": "atlas",
|
|
22804
|
-
atlas: "atlas",
|
|
22805
|
-
"plan-consultant": "metis",
|
|
22806
|
-
"Metis - Plan Consultant": "metis",
|
|
22807
|
-
"Metis (Plan Consultant)": "metis",
|
|
22808
|
-
metis: "metis",
|
|
22809
|
-
"Momus - Plan Critic": "momus",
|
|
22810
|
-
"Momus (Plan Critic)": "momus",
|
|
22811
|
-
momus: "momus",
|
|
22812
|
-
"Sisyphus-Junior": "sisyphus-junior",
|
|
22813
|
-
"sisyphus-junior": "sisyphus-junior",
|
|
22814
|
-
build: "build",
|
|
22815
|
-
oracle: "oracle",
|
|
22816
|
-
librarian: "librarian",
|
|
22817
|
-
explore: "explore",
|
|
22818
|
-
"multimodal-looker": "multimodal-looker"
|
|
22819
|
-
};
|
|
22820
|
-
BUILTIN_AGENT_NAMES = new Set([
|
|
22821
|
-
"sisyphus",
|
|
22822
|
-
"oracle",
|
|
22823
|
-
"librarian",
|
|
22824
|
-
"explore",
|
|
22825
|
-
"multimodal-looker",
|
|
22826
|
-
"metis",
|
|
22827
|
-
"momus",
|
|
22828
|
-
"prometheus",
|
|
22829
|
-
"atlas",
|
|
22830
|
-
"build"
|
|
22831
|
-
]);
|
|
22832
|
-
});
|
|
22833
|
-
|
|
22834
|
-
// packages/utils/src/migration/hook-names.ts
|
|
22835
|
-
var HOOK_NAME_MAP;
|
|
22836
|
-
var init_hook_names = __esm(() => {
|
|
22837
|
-
HOOK_NAME_MAP = {
|
|
22838
|
-
"anthropic-auto-compact": "anthropic-context-window-limit-recovery",
|
|
22839
|
-
"sisyphus-orchestrator": "atlas",
|
|
22840
|
-
"sisyphus-gpt-hephaestus-reminder": "no-sisyphus-gpt",
|
|
22841
|
-
"empty-message-sanitizer": null,
|
|
22842
|
-
"delegate-task-english-directive": null,
|
|
22843
|
-
"gpt-permission-continuation": null,
|
|
22844
|
-
"thinking-block-validator": null,
|
|
22845
|
-
"session-recovery": null
|
|
22846
|
-
};
|
|
22847
|
-
});
|
|
22848
|
-
|
|
22849
|
-
// packages/utils/src/migration/model-versions.ts
|
|
22850
|
-
function migrationKey(oldModel, newModel) {
|
|
22851
|
-
return `model-version:${oldModel}->${newModel}`;
|
|
22852
|
-
}
|
|
22853
|
-
function migrateModelVersions(configs, appliedMigrations) {
|
|
22854
|
-
const migrated = {};
|
|
22855
|
-
let changed = false;
|
|
22856
|
-
const newMigrations = [];
|
|
22857
|
-
for (const [key, value] of Object.entries(configs)) {
|
|
22858
|
-
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
22859
|
-
const config3 = value;
|
|
22860
|
-
if (typeof config3.model === "string" && !CURRENT_USER_SELECTABLE_MODELS.has(config3.model) && MODEL_VERSION_MAP[config3.model]) {
|
|
22861
|
-
const oldModel = config3.model;
|
|
22862
|
-
const newModel = MODEL_VERSION_MAP[oldModel];
|
|
22863
|
-
const mKey = migrationKey(oldModel, newModel);
|
|
22864
|
-
if (appliedMigrations?.has(mKey)) {
|
|
22865
|
-
migrated[key] = value;
|
|
22866
|
-
continue;
|
|
22867
|
-
}
|
|
22868
|
-
migrated[key] = { ...config3, model: newModel };
|
|
22869
|
-
changed = true;
|
|
22870
|
-
newMigrations.push(mKey);
|
|
22871
|
-
continue;
|
|
22872
|
-
}
|
|
22873
|
-
}
|
|
22874
|
-
migrated[key] = value;
|
|
22875
|
-
}
|
|
22876
|
-
return { migrated, changed, newMigrations };
|
|
22877
|
-
}
|
|
22878
|
-
var MODEL_VERSION_MAP, CURRENT_USER_SELECTABLE_MODELS;
|
|
22879
|
-
var init_model_versions = __esm(() => {
|
|
22880
|
-
MODEL_VERSION_MAP = {
|
|
22881
|
-
"anthropic/claude-opus-4-4": "anthropic/claude-opus-4-8"
|
|
22882
|
-
};
|
|
22883
|
-
CURRENT_USER_SELECTABLE_MODELS = new Set([
|
|
22884
|
-
"anthropic/claude-opus-4-5",
|
|
22885
|
-
"anthropic/claude-opus-4-6",
|
|
22886
|
-
"anthropic/claude-sonnet-4-5"
|
|
22887
|
-
]);
|
|
22888
|
-
});
|
|
22889
|
-
|
|
22890
22772
|
// packages/utils/src/migration/agent-category.ts
|
|
22891
22773
|
function configureMigrationCategoryDefaults(defaults) {
|
|
22892
22774
|
categoryDefaults = defaults ?? {};
|
|
@@ -85050,6 +84932,18 @@ var init_fallback_chain_resolution = __esm(() => {
|
|
|
85050
84932
|
init_provider_model_id_transform2();
|
|
85051
84933
|
});
|
|
85052
84934
|
|
|
84935
|
+
// packages/omo-opencode/src/cli/fallback-lane-policy.ts
|
|
84936
|
+
function isExcludedFallbackLaneModel(model) {
|
|
84937
|
+
const slashIndex = model.indexOf("/");
|
|
84938
|
+
if (slashIndex <= 0)
|
|
84939
|
+
return false;
|
|
84940
|
+
return EXCLUDED_FALLBACK_PROVIDERS.has(model.slice(0, slashIndex).toLowerCase());
|
|
84941
|
+
}
|
|
84942
|
+
var EXCLUDED_FALLBACK_PROVIDERS;
|
|
84943
|
+
var init_fallback_lane_policy = __esm(() => {
|
|
84944
|
+
EXCLUDED_FALLBACK_PROVIDERS = new Set(["openrouter", "opencode", "vercel"]);
|
|
84945
|
+
});
|
|
84946
|
+
|
|
85053
84947
|
// packages/omo-opencode/src/cli/model-fallback.ts
|
|
85054
84948
|
function resolveCompatibleFallbackSettings(providerID, modelID, desired) {
|
|
85055
84949
|
const compatibility = resolveCompatibleModelSettings({
|
|
@@ -85109,7 +85003,7 @@ function attachFallbackModels(config3, fallbackChain, availability) {
|
|
|
85109
85003
|
if (primaryIndex === -1) {
|
|
85110
85004
|
return config3;
|
|
85111
85005
|
}
|
|
85112
|
-
const fallbackModels = uniqueFallbacks.slice(primaryIndex + 1);
|
|
85006
|
+
const fallbackModels = uniqueFallbacks.slice(primaryIndex + 1).filter((entry) => !isExcludedFallbackLaneModel(entry.model));
|
|
85113
85007
|
if (fallbackModels.length === 0) {
|
|
85114
85008
|
return config3;
|
|
85115
85009
|
}
|
|
@@ -85120,7 +85014,7 @@ function attachFallbackModels(config3, fallbackChain, availability) {
|
|
|
85120
85014
|
}
|
|
85121
85015
|
function attachAllFallbackModels(config3, fallbackChain, availability) {
|
|
85122
85016
|
const uniqueFallbacks = collectAvailableFallbacks(fallbackChain, availability);
|
|
85123
|
-
const fallbackModels = uniqueFallbacks.filter((entry) => entry.model !== config3.model);
|
|
85017
|
+
const fallbackModels = uniqueFallbacks.filter((entry) => entry.model !== config3.model).filter((entry) => !isExcludedFallbackLaneModel(entry.model));
|
|
85124
85018
|
if (fallbackModels.length === 0) {
|
|
85125
85019
|
return config3;
|
|
85126
85020
|
}
|
|
@@ -85234,6 +85128,7 @@ var init_model_fallback = __esm(() => {
|
|
|
85234
85128
|
init_provider_availability();
|
|
85235
85129
|
init_fallback_chain_resolution();
|
|
85236
85130
|
init_provider_model_id_transform2();
|
|
85131
|
+
init_fallback_lane_policy();
|
|
85237
85132
|
});
|
|
85238
85133
|
|
|
85239
85134
|
// packages/omo-opencode/src/cli/config-manager/generate-omo-config.ts
|
|
@@ -85646,58 +85541,18 @@ var init_deep_diff = __esm(() => {
|
|
|
85646
85541
|
});
|
|
85647
85542
|
|
|
85648
85543
|
// packages/omo-opencode/src/config-migration/transform-opencode.ts
|
|
85649
|
-
function
|
|
85650
|
-
if (!Array.isArray(value))
|
|
85651
|
-
return value;
|
|
85652
|
-
return value.map((entry) => {
|
|
85653
|
-
if (typeof entry !== "string")
|
|
85654
|
-
return entry;
|
|
85655
|
-
return AGENT_NAME_MAP[entry.toLowerCase()] ?? AGENT_NAME_MAP[entry] ?? entry;
|
|
85656
|
-
});
|
|
85657
|
-
}
|
|
85658
|
-
function replaceDisabledHooks(value) {
|
|
85659
|
-
if (!Array.isArray(value))
|
|
85660
|
-
return value;
|
|
85661
|
-
return value.flatMap((entry) => {
|
|
85662
|
-
if (typeof entry !== "string")
|
|
85663
|
-
return [entry];
|
|
85664
|
-
const replacement = HOOK_NAME_MAP[entry];
|
|
85665
|
-
return replacement === null ? [] : [replacement ?? entry];
|
|
85666
|
-
});
|
|
85667
|
-
}
|
|
85668
|
-
function transformLegacyKeys(value, history) {
|
|
85544
|
+
function transformLegacyKeys(value) {
|
|
85669
85545
|
const config3 = withoutLegacyMetadata(value);
|
|
85670
|
-
|
|
85671
|
-
|
|
85672
|
-
if (isPlainRecord3(agents)) {
|
|
85673
|
-
const namedAgents = migrateAgentNames(agents).migrated;
|
|
85674
|
-
config3.agents = migrateModelVersions(namedAgents, appliedMigrations).migrated;
|
|
85675
|
-
}
|
|
85676
|
-
const categories = config3.categories;
|
|
85677
|
-
if (isPlainRecord3(categories)) {
|
|
85678
|
-
config3.categories = migrateModelVersions(categories, appliedMigrations).migrated;
|
|
85679
|
-
}
|
|
85546
|
+
delete config3.agents;
|
|
85547
|
+
delete config3.categories;
|
|
85680
85548
|
if (config3.omo_agent !== undefined) {
|
|
85681
85549
|
config3.sisyphus_agent = config3.omo_agent;
|
|
85682
85550
|
delete config3.omo_agent;
|
|
85683
85551
|
}
|
|
85684
|
-
|
|
85685
|
-
if (isPlainRecord3(config3.experimental) && Object.hasOwn(config3.experimental, "hashline_edit")) {
|
|
85686
|
-
if (config3.hashline_edit === undefined)
|
|
85687
|
-
config3.hashline_edit = config3.experimental.hashline_edit;
|
|
85688
|
-
delete config3.experimental.hashline_edit;
|
|
85689
|
-
if (Object.keys(config3.experimental).length === 0)
|
|
85690
|
-
delete config3.experimental;
|
|
85691
|
-
}
|
|
85692
|
-
if (config3.disabled_agents !== undefined)
|
|
85693
|
-
config3.disabled_agents = replaceDisabledAgents(config3.disabled_agents);
|
|
85694
|
-
if (config3.disabled_hooks !== undefined)
|
|
85695
|
-
config3.disabled_hooks = replaceDisabledHooks(config3.disabled_hooks);
|
|
85696
|
-
return config3;
|
|
85552
|
+
return Object.fromEntries(Object.entries(config3).filter(([key]) => MIGRATED_OPENCODE_FIELDS.has(key)));
|
|
85697
85553
|
}
|
|
85698
85554
|
function loadedConfigs(discovered, sources) {
|
|
85699
85555
|
const metadataByPath = new Map(discovered.map((source) => [source.path, source]));
|
|
85700
|
-
const historyByConfigPath = legacyMigrationHistory(discovered, sources);
|
|
85701
85556
|
const configs = [];
|
|
85702
85557
|
for (const source of sources) {
|
|
85703
85558
|
const metadata = metadataByPath.get(source.path);
|
|
@@ -85705,7 +85560,7 @@ function loadedConfigs(discovered, sources) {
|
|
|
85705
85560
|
continue;
|
|
85706
85561
|
configs.push({
|
|
85707
85562
|
metadata,
|
|
85708
|
-
value: transformLegacyKeys(source.value
|
|
85563
|
+
value: transformLegacyKeys(source.value)
|
|
85709
85564
|
});
|
|
85710
85565
|
}
|
|
85711
85566
|
return configs;
|
|
@@ -85757,13 +85612,17 @@ function transformProjectSources(input, projectRoot) {
|
|
|
85757
85612
|
function transformOpenCodeSources(input) {
|
|
85758
85613
|
return input.scope.kind === "user" ? transformUserSources(input.discovered, input.sources) : transformProjectSources(input, input.scope.projectRoot);
|
|
85759
85614
|
}
|
|
85615
|
+
var MIGRATED_OPENCODE_FIELDS;
|
|
85760
85616
|
var init_transform_opencode = __esm(() => {
|
|
85761
|
-
init_agent_names();
|
|
85762
|
-
init_hook_names();
|
|
85763
|
-
init_model_versions();
|
|
85764
85617
|
init_deep_diff();
|
|
85765
85618
|
init_legacy_history();
|
|
85766
85619
|
init_record_values();
|
|
85620
|
+
MIGRATED_OPENCODE_FIELDS = new Set([
|
|
85621
|
+
"disabled_providers",
|
|
85622
|
+
"model_fallback",
|
|
85623
|
+
"models",
|
|
85624
|
+
"sisyphus_agent"
|
|
85625
|
+
]);
|
|
85767
85626
|
});
|
|
85768
85627
|
|
|
85769
85628
|
// packages/omo-opencode/src/config-migration/reasoning-unification.ts
|
|
@@ -94515,7 +94374,7 @@ var package_default2;
|
|
|
94515
94374
|
var init_package2 = __esm(() => {
|
|
94516
94375
|
package_default2 = {
|
|
94517
94376
|
name: "@oh-my-opencode/omo-codex",
|
|
94518
|
-
version: "5.0.0-beta.
|
|
94377
|
+
version: "5.0.0-beta.20",
|
|
94519
94378
|
type: "module",
|
|
94520
94379
|
private: true,
|
|
94521
94380
|
description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
|
|
@@ -98443,9 +98302,9 @@ var LEGACY_CODEX_COMPONENT_BINS = [
|
|
|
98443
98302
|
{ name: "codex-comment-checker", component: "comment-checker" },
|
|
98444
98303
|
{ name: "codex-lsp", component: "lsp" },
|
|
98445
98304
|
{ name: "codex-rules", component: "rules" },
|
|
98446
|
-
{ name: "codex-start-work-continuation", component: "start-work-continuation" },
|
|
98447
98305
|
{ name: "codex-telemetry", component: "telemetry" },
|
|
98448
|
-
{ name: "codex-ultrawork", component: "ultrawork" }
|
|
98306
|
+
{ name: "codex-ultrawork", component: "ultrawork" },
|
|
98307
|
+
{ name: "codex-ulw-execute-continuation", component: "ulw-execute-continuation" }
|
|
98449
98308
|
];
|
|
98450
98309
|
var LEGACY_CODEX_COMPONENT_BIN_NAMES = LEGACY_CODEX_COMPONENT_BINS.map((entry) => entry.name);
|
|
98451
98310
|
function isLegacyCodexBinTarget(binName, target) {
|
|
@@ -103003,9 +102862,9 @@ var MANAGED_CODEX_BIN_NAMES = new Set([
|
|
|
103003
102862
|
"omo-git-bash-hook",
|
|
103004
102863
|
"omo-lsp",
|
|
103005
102864
|
"omo-rules",
|
|
103006
|
-
"omo-start-work-continuation",
|
|
103007
102865
|
"omo-telemetry",
|
|
103008
102866
|
"omo-ultrawork",
|
|
102867
|
+
"omo-ulw-execute-continuation",
|
|
103009
102868
|
"omo-ulw-loop",
|
|
103010
102869
|
"lazycodex-executor-verify",
|
|
103011
102870
|
"ulw",
|
|
@@ -103488,6 +103347,7 @@ function localLauncherCmdPath(homeDir = homedir10()) {
|
|
|
103488
103347
|
function renderLocalLauncher(options) {
|
|
103489
103348
|
const brand = {
|
|
103490
103349
|
name: "OmO",
|
|
103350
|
+
command: "omo",
|
|
103491
103351
|
displayVersion: options.version ?? "local",
|
|
103492
103352
|
configDir: ".omo",
|
|
103493
103353
|
flatLayout: false,
|
|
@@ -103689,9 +103549,9 @@ var REQUIRED_PLUGIN_ARTIFACTS = [
|
|
|
103689
103549
|
join62("skills", "refactor", "SKILL.md"),
|
|
103690
103550
|
join62("skills", "remove-ai-slops", "SKILL.md"),
|
|
103691
103551
|
join62("skills", "review-work", "SKILL.md"),
|
|
103692
|
-
join62("skills", "start-work", "SKILL.md"),
|
|
103693
103552
|
join62("skills", "ultimate-browsing", "SKILL.md"),
|
|
103694
103553
|
join62("skills", "ultrawork", "SKILL.md"),
|
|
103554
|
+
join62("skills", "ulw-execute", "SKILL.md"),
|
|
103695
103555
|
join62("skills", "ulw-loop", "SKILL.md"),
|
|
103696
103556
|
join62("skills", "ulw-plan", "SKILL.md"),
|
|
103697
103557
|
join62("skills", "ulw-research", "SKILL.md"),
|
|
@@ -107271,7 +107131,7 @@ init_zod();
|
|
|
107271
107131
|
var BuiltinCommandNameSchema = exports_external.enum([
|
|
107272
107132
|
"goal",
|
|
107273
107133
|
"refactor",
|
|
107274
|
-
"
|
|
107134
|
+
"ulw-execute",
|
|
107275
107135
|
"stop-continuation",
|
|
107276
107136
|
"remove-ai-slops",
|
|
107277
107137
|
"hyperplan"
|
|
@@ -107397,7 +107257,7 @@ var HookNameSchema = exports_external.enum([
|
|
|
107397
107257
|
"no-sisyphus-gpt",
|
|
107398
107258
|
"no-hephaestus-non-gpt",
|
|
107399
107259
|
"hephaestus-agents-md-injector",
|
|
107400
|
-
"
|
|
107260
|
+
"ulw-execute",
|
|
107401
107261
|
"atlas",
|
|
107402
107262
|
"unstable-agent-babysitter",
|
|
107403
107263
|
"task-resume-info",
|
|
@@ -107608,9 +107468,9 @@ var TuiConfigSchema = exports_external.object({
|
|
|
107608
107468
|
sidebar: TuiSidebarConfigSchema.default({ enabled: true })
|
|
107609
107469
|
});
|
|
107610
107470
|
|
|
107611
|
-
// packages/omo-opencode/src/config/schema/
|
|
107471
|
+
// packages/omo-opencode/src/config/schema/ulw-execute.ts
|
|
107612
107472
|
init_zod();
|
|
107613
|
-
var
|
|
107473
|
+
var UlwExecuteConfigSchema = exports_external.object({
|
|
107614
107474
|
auto_commit: exports_external.boolean().default(true)
|
|
107615
107475
|
});
|
|
107616
107476
|
|
|
@@ -107670,7 +107530,8 @@ var OhMyOpenCodeConfigSchema = exports_external.object({
|
|
|
107670
107530
|
tmux: TmuxConfigSchema.optional(),
|
|
107671
107531
|
tui: TuiConfigSchema.default({ sidebar: { enabled: true } }).optional(),
|
|
107672
107532
|
sisyphus: SisyphusConfigSchema.optional(),
|
|
107673
|
-
|
|
107533
|
+
ulw_execute: UlwExecuteConfigSchema.optional(),
|
|
107534
|
+
start_work: UlwExecuteConfigSchema.optional(),
|
|
107674
107535
|
default_mode: DefaultModeConfigSchema.optional(),
|
|
107675
107536
|
_migrations: exports_external.array(exports_external.string()).optional()
|
|
107676
107537
|
});
|
|
@@ -107761,6 +107622,21 @@ function materializeAgentModelChains(config4) {
|
|
|
107761
107622
|
}));
|
|
107762
107623
|
return changed ? { ...config4, agents } : config4;
|
|
107763
107624
|
}
|
|
107625
|
+
var START_WORK_DEPRECATION_MESSAGE = 'config key "start_work" is deprecated, rename to "ulw_execute" - will be removed next release';
|
|
107626
|
+
var deprecationWarningSink = log2;
|
|
107627
|
+
function warnLegacyUlwExecuteKey(views) {
|
|
107628
|
+
for (const view of views) {
|
|
107629
|
+
if (!Object.hasOwn(view.config, "start_work"))
|
|
107630
|
+
continue;
|
|
107631
|
+
deprecationWarningSink(`[config] ${shortPath(view.path)}: ${START_WORK_DEPRECATION_MESSAGE}`);
|
|
107632
|
+
}
|
|
107633
|
+
}
|
|
107634
|
+
function migrateLegacyUlwExecuteKey(config4) {
|
|
107635
|
+
const legacy = config4.start_work;
|
|
107636
|
+
if (legacy === undefined || config4.ulw_execute !== undefined)
|
|
107637
|
+
return config4;
|
|
107638
|
+
return { ...config4, ulw_execute: legacy };
|
|
107639
|
+
}
|
|
107764
107640
|
function migrateRalphLoopConfig(config4) {
|
|
107765
107641
|
const legacy = config4.ralph_loop;
|
|
107766
107642
|
if (legacy === undefined)
|
|
@@ -107789,11 +107665,12 @@ function validatePluginConfig(directory, environment2 = process.env) {
|
|
|
107789
107665
|
const firstView = views[0];
|
|
107790
107666
|
const userConfig = parseConfig(chain.protectedUserView);
|
|
107791
107667
|
const config4 = applyDisabledProviders(materializeAgentModelChains(protectUserFields(mergeViews(views), userConfig)));
|
|
107668
|
+
warnLegacyUlwExecuteKey(chain.views);
|
|
107792
107669
|
return {
|
|
107793
107670
|
valid: messages.length === 0,
|
|
107794
107671
|
messages,
|
|
107795
107672
|
path: chainMessages.length > 0 ? chain.diagnostics[0]?.path ?? null : firstFailingView?.path ?? firstView?.path ?? null,
|
|
107796
|
-
config: migrateRalphLoopConfig(config4)
|
|
107673
|
+
config: migrateRalphLoopConfig(migrateLegacyUlwExecuteKey(config4))
|
|
107797
107674
|
};
|
|
107798
107675
|
}
|
|
107799
107676
|
|
|
@@ -111890,7 +111767,7 @@ var CODEX_BIN_NAMES = [
|
|
|
111890
111767
|
"omo-lsp",
|
|
111891
111768
|
"omo-comment-checker",
|
|
111892
111769
|
"omo-ultrawork",
|
|
111893
|
-
"omo-
|
|
111770
|
+
"omo-ulw-execute-continuation",
|
|
111894
111771
|
"omo-telemetry",
|
|
111895
111772
|
"omo-git-bash-hook"
|
|
111896
111773
|
];
|
|
@@ -4,7 +4,7 @@ export declare const BuiltinCommandNameSchema: z.ZodEnum<{
|
|
|
4
4
|
hyperplan: "hyperplan";
|
|
5
5
|
refactor: "refactor";
|
|
6
6
|
"remove-ai-slops": "remove-ai-slops";
|
|
7
|
-
"start-work": "start-work";
|
|
8
7
|
"stop-continuation": "stop-continuation";
|
|
8
|
+
"ulw-execute": "ulw-execute";
|
|
9
9
|
}>;
|
|
10
10
|
export type BuiltinCommandName = z.infer<typeof BuiltinCommandNameSchema>;
|
|
@@ -42,7 +42,6 @@ export declare const HookNameSchema: z.ZodEnum<{
|
|
|
42
42
|
"runtime-fallback": "runtime-fallback";
|
|
43
43
|
"session-notification": "session-notification";
|
|
44
44
|
"sisyphus-junior-notepad": "sisyphus-junior-notepad";
|
|
45
|
-
"start-work": "start-work";
|
|
46
45
|
"startup-toast": "startup-toast";
|
|
47
46
|
"stop-continuation-guard": "stop-continuation-guard";
|
|
48
47
|
"task-resume-info": "task-resume-info";
|
|
@@ -53,6 +52,7 @@ export declare const HookNameSchema: z.ZodEnum<{
|
|
|
53
52
|
"todo-description-override": "todo-description-override";
|
|
54
53
|
"tool-output-truncator": "tool-output-truncator";
|
|
55
54
|
"tool-pair-validator": "tool-pair-validator";
|
|
55
|
+
"ulw-execute": "ulw-execute";
|
|
56
56
|
"unstable-agent-babysitter": "unstable-agent-babysitter";
|
|
57
57
|
"webfetch-redirect-guard": "webfetch-redirect-guard";
|
|
58
58
|
"write-existing-file-guard": "write-existing-file-guard";
|
|
@@ -14,8 +14,8 @@ export declare const OhMyOpenCodeConfigSchema: z.ZodObject<{
|
|
|
14
14
|
hyperplan: "hyperplan";
|
|
15
15
|
refactor: "refactor";
|
|
16
16
|
"remove-ai-slops": "remove-ai-slops";
|
|
17
|
-
"start-work": "start-work";
|
|
18
17
|
"stop-continuation": "stop-continuation";
|
|
18
|
+
"ulw-execute": "ulw-execute";
|
|
19
19
|
}>>>;
|
|
20
20
|
disabled_tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
21
21
|
disabled_providers: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -3716,6 +3716,9 @@ export declare const OhMyOpenCodeConfigSchema: z.ZodObject<{
|
|
|
3716
3716
|
claude_code_compat: z.ZodDefault<z.ZodBoolean>;
|
|
3717
3717
|
}, z.core.$strip>>;
|
|
3718
3718
|
}, z.core.$strip>>;
|
|
3719
|
+
ulw_execute: z.ZodOptional<z.ZodObject<{
|
|
3720
|
+
auto_commit: z.ZodDefault<z.ZodBoolean>;
|
|
3721
|
+
}, z.core.$strip>>;
|
|
3719
3722
|
start_work: z.ZodOptional<z.ZodObject<{
|
|
3720
3723
|
auto_commit: z.ZodDefault<z.ZodBoolean>;
|
|
3721
3724
|
}, z.core.$strip>>;
|
|
@@ -6,4 +6,6 @@ export type PluginConfigValidation = {
|
|
|
6
6
|
readonly path: string | null;
|
|
7
7
|
readonly config: OhMyOpenCodeConfig;
|
|
8
8
|
};
|
|
9
|
+
export declare function _setDeprecationWarningSinkForTesting(sink: (message: string) => void): void;
|
|
10
|
+
export declare function _resetDeprecationWarningSinkForTesting(): void;
|
|
9
11
|
export declare function validatePluginConfig(directory: string, environment?: OmoConfigEnv): PluginConfigValidation;
|
package/dist/create-hooks.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export type DisposableCreatedHooks = {
|
|
|
14
14
|
claudeCodeHooks?: DisposableHook;
|
|
15
15
|
commentChecker?: DisposableHook;
|
|
16
16
|
runtimeFallback?: DisposableHook;
|
|
17
|
+
atlasHook?: DisposableHook;
|
|
17
18
|
todoContinuationEnforcer?: DisposableHook;
|
|
18
19
|
autoSlashCommand?: DisposableHook;
|
|
19
20
|
anthropicContextWindowLimitRecovery?: DisposableHook;
|
|
@@ -45,7 +46,7 @@ export declare function createHooks(args: {
|
|
|
45
46
|
goal: ReturnType<typeof import("./hooks").createGoalHook> | null;
|
|
46
47
|
editErrorRecovery: ReturnType<typeof import("./hooks").createEditErrorRecoveryHook> | null;
|
|
47
48
|
delegateTaskRetry: ReturnType<typeof import("./hooks").createDelegateTaskRetryHook> | null;
|
|
48
|
-
|
|
49
|
+
ulwExecute: ReturnType<typeof import("./hooks").createUlwExecuteHook> | null;
|
|
49
50
|
prometheusMdOnly: ReturnType<typeof import("./hooks").createPrometheusMdOnlyHook> | null;
|
|
50
51
|
sisyphusJuniorNotepad: ReturnType<typeof import("./hooks").createSisyphusJuniorNotepadHook> | null;
|
|
51
52
|
noSisyphusGpt: ReturnType<typeof import("./hooks").createNoSisyphusGptHook> | null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const ULW_EXECUTE_TEMPLATE = "You are starting an Atlas work session.\n\n## ARGUMENTS\n\n- `/ulw-execute [plan-name] [--worktree <path>] [--make-pr] [--ship]`\n - `plan-name` (optional): name or partial match of the plan to start\n - `--worktree <path>` (optional): absolute path to an existing git worktree to work in\n - If specified and valid: hook pre-sets worktree_path in boulder.json\n - If specified but invalid: you must run `git worktree add <path> <branch>` first\n - If omitted: work directly in the current project directory (no worktree)\n - `--make-pr` (optional): deliver the work as a pull request. IMPLIES worktree mode - when `--worktree` is omitted, create a task-owned worktree before implementation. On completion push the branch, open a reviewer-readable PR, and hand off with the PR URL (merge only on explicit user ask)\n - `--ship` (optional): full delivery lifecycle; implies `--make-pr`. After the PR opens, keep working until it is MERGED (CI + review gates, feedback addressed), then clean up the worktree and sync `.omo/` state back\n\n## WHAT TO DO\n\n1. **Find available plans**: Search for Prometheus-generated plan files at `.omo/plans/`\n\n2. **Check for active boulder state**: Read `.omo/boulder.json` if it exists\n\n3. **Decision logic**:\n - If multiple active works are listed in your context:\n - This means boulder.json has more than one work with status: `active` or `paused`\n - Use the Question tool to ask the user which plan to resume\n - Resume by running `/ulw-execute {plan-name}` for the selected plan\n - If the user says \"start a new plan\", continue with cold-start auto-selection logic\n - If exactly one active work is listed and the user did not name a plan:\n - Auto-resume that single active work\n - If no active plan OR plan is complete:\n - List available plan files\n - If ONE plan: auto-select it\n - If MULTIPLE plans: show list with timestamps, ask user to select\n\n4. **Worktree Setup** (ONLY when `--worktree` was explicitly specified and `worktree_path` not already set in boulder.json):\n 1. `git worktree list --porcelain` - see available worktrees\n 2. Create: `git worktree add <absolute-path> <branch-or-HEAD>`\n 3. Update boulder.json to add `\"worktree_path\": \"<absolute-path>\"`\n 4. All work happens inside that worktree directory\n\n5. **Create/Update boulder.json**:\n ```json\n {\n \"active_plan\": \"/absolute/path/to/plan.md\",\n \"started_at\": \"ISO_TIMESTAMP\",\n \"session_ids\": [\"session_id_1\", \"session_id_2\"],\n \"plan_name\": \"plan-name\",\n \"worktree_path\": \"/absolute/path/to/git/worktree\"\n }\n ```\n\n6. **Read the plan file** and start executing tasks according to atlas workflow\n\n## OUTPUT FORMAT\n\nWhen listing plans for selection:\n```\nAvailable Work Plans\n\nCurrent Time: {ISO timestamp}\nSession ID: {current session id}\n\n1. [plan-name-1.md] - Modified: {date} - Progress: 3/10 tasks\n2. [plan-name-2.md] - Modified: {date} - Progress: 0/5 tasks\n\nWhich plan would you like to work on? (Enter number or plan name)\n```\n\nWhen resuming existing work:\n```\nResuming Work Session\n\nActive Plan: {plan-name}\nProgress: {completed}/{total} tasks\nSessions: {count} (appending current session)\nWorktree: {worktree_path}\n\nReading plan and continuing from last incomplete task...\n```\n\nWhen auto-selecting single plan:\n```\nStarting Work Session\n\nPlan: {plan-name}\nSession ID: {session_id}\nStarted: {timestamp}\nWorktree: {worktree_path}\n\nReading plan and beginning execution...\n```\n\n## CRITICAL\n\n- The session_id is injected by the hook - use it directly\n- Always update boulder.json BEFORE starting work\n- If worktree_path is set in boulder.json, all work happens inside that worktree directory\n- Read the FULL plan file before delegating any tasks\n- Follow atlas delegation protocols (7-section format)\n\n## GOAL + TASK BREAKDOWN (MANDATORY)\n\nDo BOTH of these immediately after reading the plan file, BEFORE starting any work. Skipping either is a defect.\n\n**1. Set the goal, in detail.** When a goal tool is available (`create_goal`), call it with a DETAILED objective: the plan name and path, the concrete end state, the phase/task counts, the delivery mode (direct, `--make-pr`, or `--ship`), and how completion will be verified. One work session = one goal. No goal tool -> record the same objective as the first `.omo/ulw-execute/ledger.jsonl` entry.\n\n**2. Register every phase and task as todos.** Decompose every plan task into granular, implementation-level sub-steps and register ALL of them as task/todo items, grouped phase by phase (one phase per plan wave), BEFORE starting any work. Keep them current at every moment: mark in_progress when work dispatches and done immediately after its verification passes - never batch-complete at the end, never execute work that is not a registered todo. Discovered work is appended as a todo before it runs.\n\n**How to break down**:\n- Each plan checkbox item (e.g., `- [ ] Add user authentication`) must be split into concrete, actionable sub-tasks\n- Sub-tasks should be specific enough that each one touches a clear set of files/functions\n- Include: file to modify, what to change, expected behavior, and how to verify\n- Do NOT leave any task vague - \"implement feature X\" is NOT acceptable; \"add validateToken() to src/auth/middleware.ts that checks JWT expiry and returns 401\" IS acceptable\n\n**Example breakdown**:\nPlan task: `- [ ] Add rate limiting to API`\n\u2192 Todo items:\n 1. Create `src/middleware/rate-limiter.ts` with sliding window algorithm (max 100 req/min per IP)\n 2. Add RateLimiter middleware to `src/app.ts` router chain, before auth middleware\n 3. Add rate limit headers (X-RateLimit-Limit, X-RateLimit-Remaining) to response in `rate-limiter.ts`\n 4. Add test: verify 429 response after exceeding limit in `src/middleware/rate-limiter.test.ts`\n 5. Add test: verify headers are present on normal responses\n\nRegister these as task/todo items so progress is tracked and visible throughout the session.\n\n## WORKTREE COMPLETION\n\nWhen working in a worktree (`worktree_path` is set in boulder.json) and ALL plan tasks are complete:\n1. Commit all remaining changes in the worktree\n2. **Sync .omo state back**: Copy `.omo/` from the worktree to the main repo before removal.\n This is CRITICAL when `.omo/` is gitignored - state written during worktree execution would otherwise be lost.\n ```bash\n cp -r <worktree-path>/.omo/* <main-repo>/.omo/ 2>/dev/null || true\n ```\n3. Switch to the main working directory (the original repo, NOT the worktree)\n4. Merge the worktree branch into the current branch: `git merge <worktree-branch>`\n5. If merge succeeds, clean up: `git worktree remove <worktree-path>`\n6. Remove the boulder.json state\n\nThis is the DEFAULT behavior when `--worktree` was used alone. When `--make-pr` or `--ship` is active, skip the local merge and follow the PR Delivery Mode instructions in the session context instead: push the branch and open a PR (`--make-pr` hands off with the PR URL; `--ship` keeps working until the PR is merged), then clean up. Otherwise skip merge only if the user explicitly instructs otherwise (e.g., asks to create a PR instead).";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { CommandDefinition } from "../claude-code-command-loader";
|
|
2
|
-
export type BuiltinCommandName = "goal" | "refactor" | "
|
|
2
|
+
export type BuiltinCommandName = "goal" | "refactor" | "ulw-execute" | "stop-continuation" | "handoff" | "remove-ai-slops" | "hyperplan";
|
|
3
3
|
export interface BuiltinCommandConfig {
|
|
4
4
|
disabled_commands?: BuiltinCommandName[];
|
|
5
5
|
}
|
|
@@ -16,4 +16,5 @@ export declare function createAtlasHook(ctx: PluginInput, options?: AtlasHookOpt
|
|
|
16
16
|
message?: string;
|
|
17
17
|
}) => Promise<void>;
|
|
18
18
|
"tool.execute.after": (toolInput: import("./types").ToolExecuteAfterInput, toolOutput: import("./types").ToolExecuteAfterOutput | undefined) => Promise<void>;
|
|
19
|
+
dispose: () => void;
|
|
19
20
|
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { PendingTaskRef, SessionState } from "./types";
|
|
2
|
+
export declare const ATLAS_SESSION_STATE_TTL_MS: number;
|
|
3
|
+
export declare const ATLAS_SESSION_PRUNE_INTERVAL_MS: number;
|
|
4
|
+
type PendingAtlasCall = {
|
|
5
|
+
readonly kind: "file";
|
|
6
|
+
readonly sessionID?: string;
|
|
7
|
+
readonly filePath: string;
|
|
8
|
+
readonly planSnapshot?: string;
|
|
9
|
+
} | {
|
|
10
|
+
readonly kind: "task";
|
|
11
|
+
readonly sessionID?: string;
|
|
12
|
+
readonly task: PendingTaskRef;
|
|
13
|
+
};
|
|
14
|
+
export declare class AtlasLifecycleStore {
|
|
15
|
+
readonly sessions: Map<string, SessionState>;
|
|
16
|
+
readonly pendingFilePaths: Map<string, string>;
|
|
17
|
+
readonly pendingTaskRefs: Map<string, PendingTaskRef>;
|
|
18
|
+
readonly pendingPlanSnapshots: Map<string, string>;
|
|
19
|
+
readonly pendingCalls: Map<string, PendingAtlasCall>;
|
|
20
|
+
readonly sessionCallIDs: Map<string, Set<string>>;
|
|
21
|
+
private readonly lastAccessedAt;
|
|
22
|
+
private pruneInterval;
|
|
23
|
+
private disposed;
|
|
24
|
+
private readonly disposedState;
|
|
25
|
+
getExistingState(sessionID: string): SessionState | undefined;
|
|
26
|
+
getOrCreateState(sessionID: string): SessionState;
|
|
27
|
+
trackFileCall(callID: string, sessionID: string | undefined, filePath: string): void;
|
|
28
|
+
trackTaskCall(callID: string, sessionID: string | undefined, task: PendingTaskRef): void;
|
|
29
|
+
trackPlanSnapshot(callID: string, snapshot: string): void;
|
|
30
|
+
consumeFileCall(callID: string | undefined): Extract<PendingAtlasCall, {
|
|
31
|
+
kind: "file";
|
|
32
|
+
}> | undefined;
|
|
33
|
+
consumeTaskCall(callID: string | undefined): Extract<PendingAtlasCall, {
|
|
34
|
+
kind: "task";
|
|
35
|
+
}> | undefined;
|
|
36
|
+
clearPendingCall(callID: string | undefined): void;
|
|
37
|
+
cleanupSession(sessionID: string): void;
|
|
38
|
+
dispose(): void;
|
|
39
|
+
get sizes(): {
|
|
40
|
+
readonly sessions: number;
|
|
41
|
+
readonly pendingCalls: number;
|
|
42
|
+
readonly sessionIndexes: number;
|
|
43
|
+
readonly hasPruneInterval: boolean;
|
|
44
|
+
};
|
|
45
|
+
private replaceCall;
|
|
46
|
+
private removeSessionCallID;
|
|
47
|
+
private ensurePruneInterval;
|
|
48
|
+
private prune;
|
|
49
|
+
}
|
|
50
|
+
export {};
|
|
@@ -5,6 +5,9 @@ export declare function createToolExecuteBeforeHandler(input: {
|
|
|
5
5
|
pendingFilePaths: Map<string, string>;
|
|
6
6
|
pendingTaskRefs: Map<string, PendingTaskRef>;
|
|
7
7
|
pendingPlanSnapshots?: Map<string, string>;
|
|
8
|
+
trackFileCall?: (callID: string, sessionID: string | undefined, filePath: string) => void;
|
|
9
|
+
trackTaskCall?: (callID: string, sessionID: string | undefined, task: PendingTaskRef) => void;
|
|
10
|
+
trackPlanSnapshot?: (callID: string, snapshot: string) => void;
|
|
8
11
|
isCallerOrchestrator?: (sessionID: string | undefined) => Promise<boolean>;
|
|
9
12
|
}): (toolInput: {
|
|
10
13
|
tool: string;
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -36,7 +36,7 @@ export { createEditErrorRecoveryHook } from "./edit-error-recovery";
|
|
|
36
36
|
export { createPrometheusMdOnlyHook } from "./prometheus-md-only";
|
|
37
37
|
export { createSisyphusJuniorNotepadHook } from "./sisyphus-junior-notepad";
|
|
38
38
|
export { createTaskResumeInfoHook } from "./task-resume-info";
|
|
39
|
-
export {
|
|
39
|
+
export { createUlwExecuteHook } from "./ulw-execute";
|
|
40
40
|
export { createAtlasHook } from "./atlas";
|
|
41
41
|
export { createTeamToolGating } from "./team-tool-gating";
|
|
42
42
|
export { createDelegateTaskRetryHook } from "./delegate-task-retry";
|