oh-my-opencode 4.7.5 → 4.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/command/get-unpublished-changes.md +35 -6
- package/.agents/command/omomomo.md +1 -1
- package/.agents/command/publish.md +13 -0
- package/.agents/command/security-research.md +0 -1
- package/.agents/skills/get-unpublished-changes/SKILL.md +21 -5
- package/.agents/skills/omomomo/SKILL.md +1 -2
- package/.agents/skills/opencode-qa/scripts/export-roundtrip.sh +57 -19
- package/.agents/skills/opencode-qa/scripts/lib/common.sh +19 -7
- package/.agents/skills/opencode-qa/scripts/sse-hook-probe.sh +3 -0
- package/.agents/skills/opencode-qa/scripts/tui-smoke.sh +1 -1
- package/.agents/skills/pre-publish-review/SKILL.md +24 -4
- package/.agents/skills/publish/SKILL.md +13 -0
- package/.agents/skills/remove-deadcode/SKILL.md +0 -1
- package/.agents/skills/security-research/SKILL.md +0 -1
- package/.agents/skills/work-with-pr-workspace/iteration-1/eval-3/with_skill/outputs/code-changes.md +1 -1
- package/.agents/skills/work-with-pr-workspace/iteration-1/eval-3/without_skill/outputs/code-changes.md +2 -2
- package/.agents/skills/work-with-pr-workspace/iteration-1/review.html +1 -1
- package/.opencode/command/get-unpublished-changes.md +35 -6
- package/.opencode/command/omomomo.md +1 -1
- package/.opencode/command/publish.md +13 -0
- package/.opencode/command/security-research.md +0 -1
- package/.opencode/skills/pre-publish-review/SKILL.md +24 -4
- package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-3/with_skill/outputs/code-changes.md +1 -1
- package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-3/without_skill/outputs/code-changes.md +2 -2
- package/.opencode/skills/work-with-pr-workspace/iteration-1/review.html +1 -1
- package/README.ja.md +7 -7
- package/README.ko.md +9 -7
- package/README.md +14 -8
- package/README.ru.md +5 -5
- package/README.zh-cn.md +7 -7
- package/bin/oh-my-opencode.js +24 -1
- package/bin/oh-my-opencode.test.ts +79 -20
- package/dist/agents/hephaestus/agent.d.ts +1 -1
- package/dist/agents/kimi-tool-loop-guard.d.ts +1 -0
- package/dist/agents/momus.d.ts +1 -1
- package/dist/agents/sisyphus-agent-config.d.ts +4 -0
- package/dist/agents/sisyphus-agent-factory.d.ts +6 -0
- package/dist/agents/sisyphus-dynamic-prompt-builder.d.ts +2 -0
- package/dist/agents/sisyphus-dynamic-prompt-execution.d.ts +2 -0
- package/dist/agents/sisyphus-dynamic-prompt-exploration.d.ts +2 -0
- package/dist/agents/sisyphus-dynamic-prompt-role.d.ts +2 -0
- package/dist/agents/sisyphus-dynamic-prompt-sections.d.ts +18 -0
- package/dist/agents/sisyphus-dynamic-prompt-style.d.ts +2 -0
- package/dist/agents/sisyphus-dynamic-prompt.d.ts +3 -0
- package/dist/agents/sisyphus-gemini-fallback-overrides.d.ts +1 -0
- package/dist/agents/sisyphus-junior/agent.d.ts +1 -1
- package/dist/agents/sisyphus-junior/index.d.ts +0 -1
- package/dist/agents/sisyphus.d.ts +1 -6
- package/dist/agents/types.d.ts +14 -3
- package/dist/cli/cli-program.d.ts +3 -0
- package/dist/cli/doctor/checks/codex.d.ts +11 -0
- package/dist/cli/doctor/checks/dependencies.d.ts +1 -0
- package/dist/cli/doctor/checks/index.d.ts +3 -0
- package/dist/cli/doctor/checks/system.d.ts +4 -0
- package/dist/cli/doctor/constants.d.ts +1 -0
- package/dist/cli/doctor/doctor-target.d.ts +2 -0
- package/dist/cli/doctor/index.d.ts +1 -0
- package/dist/cli/doctor/types.d.ts +26 -0
- package/dist/cli/index.js +4426 -2200
- package/dist/cli/install-codex/codex-cache-bins.d.ts +21 -0
- package/dist/cli/install-codex/codex-cache-fs.d.ts +3 -0
- package/dist/cli/install-codex/codex-cache-install.d.ts +13 -0
- package/dist/cli/install-codex/codex-cache-mcp-manifest.d.ts +2 -0
- package/dist/cli/install-codex/codex-cache-prune.d.ts +10 -0
- package/dist/cli/install-codex/codex-cache.d.ts +4 -32
- package/dist/cli/install-codex/codex-cached-marketplace-manifest.d.ts +6 -0
- package/dist/cli/install-codex/codex-config-agents.d.ts +3 -0
- package/dist/cli/install-codex/codex-config-features.d.ts +1 -0
- package/dist/cli/install-codex/codex-config-marketplaces.d.ts +6 -0
- package/dist/cli/install-codex/codex-config-plugins.d.ts +8 -0
- package/dist/cli/install-codex/codex-config-toml-sections.d.ts +9 -0
- package/dist/cli/install-codex/codex-process.d.ts +5 -0
- package/dist/cli/install-codex/index.d.ts +1 -1
- package/dist/cli/install-codex/lazycodex-version-stamp.d.ts +19 -0
- package/dist/cli/install-codex/link-cached-plugin-agents.d.ts +4 -0
- package/dist/cli/install-validators.d.ts +3 -0
- package/dist/cli/model-fallback-types.d.ts +3 -0
- package/dist/cli/run/event-handlers.d.ts +4 -11
- package/dist/cli/run/event-message-handlers.d.ts +5 -0
- package/dist/cli/run/event-session-handlers.d.ts +5 -0
- package/dist/cli/run/event-session-ids.d.ts +24 -0
- package/dist/cli/run/event-think-block.d.ts +3 -0
- package/dist/cli/run/event-toast-handlers.d.ts +3 -0
- package/dist/cli/run/event-tool-handlers.d.ts +4 -0
- package/dist/cli/run/event-tool-output.d.ts +2 -0
- package/dist/cli/run/on-complete-hook.d.ts +8 -1
- package/dist/cli/run/opencode-binary-resolver.d.ts +2 -1
- package/dist/cli/runtime-commands.d.ts +2 -0
- package/dist/cli/sparkshell-appserver-websocket.d.ts +4 -0
- package/dist/cli/sparkshell-appserver.d.ts +16 -0
- package/dist/cli/sparkshell-parse.d.ts +21 -0
- package/dist/cli/sparkshell.d.ts +26 -0
- package/dist/cli/types.d.ts +9 -0
- package/dist/config/schema/claude-code.d.ts +1 -0
- package/dist/config/schema/hooks.d.ts +1 -0
- package/dist/config/schema/oh-my-opencode-config.d.ts +1 -0
- package/dist/create-hooks.d.ts +1 -0
- package/dist/features/background-agent/concurrency.d.ts +6 -1
- package/dist/features/background-agent/constants.d.ts +1 -0
- package/dist/features/background-agent/empty-assistant-turn.d.ts +7 -0
- package/dist/features/background-agent/manager.d.ts +12 -0
- package/dist/features/background-agent/message-updated-parent-wake-output.d.ts +1 -0
- package/dist/features/background-agent/parent-wake-dedupe.d.ts +2 -0
- package/dist/features/background-agent/parent-wake-dispatched-tracker.d.ts +21 -0
- package/dist/features/background-agent/parent-wake-flush-runner.d.ts +24 -0
- package/dist/features/background-agent/parent-wake-history-state.d.ts +5 -0
- package/dist/features/background-agent/parent-wake-notifier-types.d.ts +50 -0
- package/dist/features/background-agent/parent-wake-notifier.d.ts +8 -50
- package/dist/features/background-agent/parent-wake-pending-queue.d.ts +22 -0
- package/dist/features/background-agent/parent-wake-prompt-dispatch.d.ts +19 -0
- package/dist/features/background-agent/parent-wake-session-history.d.ts +73 -0
- package/dist/features/background-agent/parent-wake-session-inspector.d.ts +35 -0
- package/dist/features/background-agent/parent-wake-timer-handle.d.ts +5 -0
- package/dist/features/background-agent/parent-wake-window-recovery.d.ts +13 -0
- package/dist/features/background-agent/process-cleanup.d.ts +2 -0
- package/dist/features/background-agent/process-cleanup.test-helpers.d.ts +3 -0
- package/dist/features/background-agent/session-stream-activity.d.ts +6 -0
- package/dist/features/background-agent/spawner/fallback-agent.d.ts +5 -0
- package/dist/features/background-agent/spawner/task-prompt-body.d.ts +34 -0
- package/dist/features/background-agent/spawner/task-record.d.ts +2 -0
- package/dist/features/background-agent/spawner.d.ts +2 -5
- package/dist/features/builtin-commands/templates/refactor-sections/codemap-and-tests.d.ts +1 -0
- package/dist/features/builtin-commands/templates/refactor-sections/intro-and-analysis.d.ts +1 -0
- package/dist/features/builtin-commands/templates/refactor-sections/plan-and-execution.d.ts +1 -0
- package/dist/features/builtin-commands/templates/refactor-sections/team-mode-addendum.d.ts +1 -0
- package/dist/features/builtin-commands/templates/refactor-sections/verification-and-tooling.d.ts +1 -0
- package/dist/features/builtin-commands/templates/refactor.d.ts +2 -2
- package/dist/features/builtin-skills/skills/agent-browser-skill.d.ts +2 -0
- package/dist/features/builtin-skills/skills/agent-browser-template.d.ts +2 -0
- package/dist/features/builtin-skills/skills/git-master-sections/commit-atomic-planning.d.ts +1 -0
- package/dist/features/builtin-skills/skills/git-master-sections/commit-context-analysis.d.ts +1 -0
- package/dist/features/builtin-skills/skills/git-master-sections/commit-execution-verification.d.ts +1 -0
- package/dist/features/builtin-skills/skills/git-master-sections/commit-workflow.d.ts +1 -1
- package/dist/features/builtin-skills/skills/index.d.ts +1 -0
- package/dist/features/builtin-skills/skills/playwright-mcp-skill.d.ts +2 -0
- package/dist/features/builtin-skills/skills/playwright.d.ts +2 -3
- package/dist/features/builtin-skills/skills/visual-qa.d.ts +2 -0
- package/dist/features/claude-code-agent-loader/agent-definitions-loader.d.ts +2 -2
- package/dist/features/claude-code-agent-loader/claude-model-mapper.d.ts +1 -1
- package/dist/features/claude-code-agent-loader/loader.d.ts +2 -2
- package/dist/features/claude-code-plugin-loader/agent-loader.d.ts +1 -1
- package/dist/features/claude-code-plugin-loader/discovery-core.d.ts +2 -0
- package/dist/features/claude-code-plugin-loader/discovery-paths.d.ts +3 -0
- package/dist/features/claude-code-plugin-loader/discovery.d.ts +3 -4
- package/dist/features/claude-code-plugin-loader/install-path-resolver.d.ts +1 -0
- package/dist/features/claude-code-plugin-loader/installed-plugin-database.d.ts +3 -0
- package/dist/features/claude-code-plugin-loader/loaded-plugin.d.ts +2 -0
- package/dist/features/claude-code-plugin-loader/plugin-key.d.ts +1 -0
- package/dist/features/claude-code-plugin-loader/plugin-manifest.d.ts +4 -0
- package/dist/features/claude-code-plugin-loader/plugin-settings.d.ts +3 -0
- package/dist/features/claude-code-plugin-loader/types.d.ts +1 -0
- package/dist/features/hook-message-injector/context-resolver.d.ts +6 -0
- package/dist/features/hook-message-injector/id-generation.d.ts +2 -0
- package/dist/features/hook-message-injector/index.d.ts +1 -1
- package/dist/features/hook-message-injector/injector.d.ts +7 -69
- package/dist/features/hook-message-injector/json-message-lookup.d.ts +3 -0
- package/dist/features/hook-message-injector/message-directory.d.ts +1 -0
- package/dist/features/hook-message-injector/message-injection.d.ts +2 -0
- package/dist/features/hook-message-injector/sdk-message-context.d.ts +6 -0
- package/dist/features/hook-message-injector/sdk-message-lookup.d.ts +28 -0
- package/dist/features/hook-message-injector/types.d.ts +9 -0
- package/dist/features/mcp-oauth/callback-server.d.ts +10 -2
- package/dist/features/opencode-runtime-skills/source-server.d.ts +1 -0
- package/dist/features/skill-mcp-manager/http-client.d.ts +2 -0
- package/dist/features/team-mode/deps.d.ts +8 -1
- package/dist/features/team-mode/team-layout-tmux/layout.d.ts +2 -0
- package/dist/features/team-mode/team-mailbox/send.d.ts +3 -0
- package/dist/features/team-mode/team-registry/paths.d.ts +17 -2
- package/dist/features/team-mode/team-runtime/shutdown.d.ts +1 -1
- package/dist/features/team-mode/team-runtime/unresolved-team-members.d.ts +3 -0
- package/dist/features/team-mode/team-state-store/active-resume.d.ts +5 -0
- package/dist/features/team-mode/team-state-store/creating-resume.d.ts +4 -0
- package/dist/features/team-mode/team-state-store/deleting-resume.d.ts +4 -0
- package/dist/features/team-mode/team-state-store/error-normalization.d.ts +2 -0
- package/dist/features/team-mode/team-state-store/reservation-reconciliation.d.ts +4 -0
- package/dist/features/team-mode/team-state-store/resume-report.d.ts +7 -0
- package/dist/features/team-mode/team-state-store/resume.d.ts +2 -7
- package/dist/features/team-mode/team-state-store/runtime-cleanup.d.ts +4 -0
- package/dist/features/team-mode/team-state-store/session-liveness.d.ts +9 -0
- package/dist/features/team-mode/team-state-store/worker-resume-status.d.ts +9 -0
- package/dist/features/team-mode/tools/lifecycle-create-tool.d.ts +17 -0
- package/dist/features/team-mode/tools/lifecycle-inline-spec.d.ts +19 -0
- package/dist/features/team-mode/tools/lifecycle-participant.d.ts +25 -0
- package/dist/features/team-mode/tools/lifecycle-shutdown-tools.d.ts +18 -0
- package/dist/features/team-mode/tools/lifecycle-test-fixture.d.ts +3 -3
- package/dist/features/team-mode/tools/lifecycle.d.ts +3 -37
- package/dist/features/team-mode/tools/messaging-live-delivery-client.d.ts +25 -0
- package/dist/features/team-mode/tools/messaging-live-delivery-recipient.d.ts +19 -0
- package/dist/features/team-mode/tools/messaging-live-delivery-reservation.d.ts +10 -0
- package/dist/features/team-mode/tools/messaging-live-delivery-state.d.ts +5 -0
- package/dist/features/team-mode/tools/messaging-live-delivery.d.ts +6 -0
- package/dist/features/team-mode/tools/messaging-runtime.d.ts +17 -0
- package/dist/features/team-mode/tools/messaging.d.ts +4 -29
- package/dist/features/tmux-subagent/manager.d.ts +20 -1
- package/dist/features/tmux-subagent/session-created-handler.d.ts +4 -0
- package/dist/features/tmux-subagent/types.d.ts +1 -0
- package/dist/hooks/anthropic-context-window-limit-recovery/message-builder.d.ts +1 -1
- package/dist/hooks/atlas/idle-completion-nudge.d.ts +10 -0
- package/dist/hooks/atlas/idle-constants.d.ts +4 -0
- package/dist/hooks/atlas/idle-continuation.d.ts +23 -0
- package/dist/hooks/atlas/idle-session-eligibility.d.ts +8 -0
- package/dist/hooks/atlas/tool-execute-after-direct-work.d.ts +9 -0
- package/dist/hooks/atlas/tool-execute-after-plan-tasks.d.ts +3 -0
- package/dist/hooks/atlas/tool-execute-after-subagent-completion.d.ts +14 -0
- package/dist/hooks/auto-update-checker/hook/background-update-check.d.ts +6 -0
- package/dist/hooks/auto-update-checker/hook/ignore-toast-error.d.ts +1 -0
- package/dist/hooks/hephaestus-agents-md-injector/hook.d.ts +37 -0
- package/dist/hooks/hephaestus-agents-md-injector/index.d.ts +1 -0
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/json-error-recovery/hook.d.ts +1 -1
- package/dist/hooks/ralph-loop/command-arguments.d.ts +1 -0
- package/dist/hooks/ralph-loop/event-handler-activity.d.ts +10 -0
- package/dist/hooks/ralph-loop/event-handler-completion.d.ts +9 -0
- package/dist/hooks/ralph-loop/event-handler-continuation.d.ts +16 -0
- package/dist/hooks/ralph-loop/event-handler-feedback.d.ts +16 -0
- package/dist/hooks/ralph-loop/event-handler-idle.d.ts +15 -0
- package/dist/hooks/ralph-loop/event-handler-impl.d.ts +10 -0
- package/dist/hooks/ralph-loop/event-handler-runtime-error.d.ts +4 -0
- package/dist/hooks/ralph-loop/event-handler-types.d.ts +20 -0
- package/dist/hooks/ralph-loop/loop-state-controller.d.ts +1 -0
- package/dist/hooks/ralph-loop/ralph-loop-event-handler.d.ts +4 -24
- package/dist/hooks/ralph-loop/ralph-loop-hook.d.ts +1 -0
- package/dist/hooks/read-image-resizer/png-chunks.d.ts +6 -0
- package/dist/hooks/read-image-resizer/png-constants.d.ts +1 -0
- package/dist/hooks/read-image-resizer/png-crc.d.ts +1 -0
- package/dist/hooks/read-image-resizer/png-decoder.d.ts +1 -0
- package/dist/hooks/read-image-resizer/png-encoder.d.ts +1 -0
- package/dist/hooks/read-image-resizer/png-filters.d.ts +1 -0
- package/dist/hooks/read-image-resizer/png-ihdr.d.ts +11 -0
- package/dist/hooks/read-image-resizer/png-nearest-neighbor.d.ts +1 -0
- package/dist/hooks/rules-injector/injection-output.d.ts +2 -0
- package/dist/hooks/rules-injector/injection-processor.d.ts +22 -0
- package/dist/hooks/rules-injector/injection-types.d.ts +43 -0
- package/dist/hooks/rules-injector/injector.d.ts +3 -47
- package/dist/hooks/rules-injector/match-decision-cache.d.ts +4 -0
- package/dist/hooks/rules-injector/parsed-rule-cache.d.ts +11 -0
- package/dist/hooks/rules-injector/path-resolution.d.ts +1 -0
- package/dist/hooks/rules-injector/rule-match-reason.d.ts +12 -0
- package/dist/hooks/rules-injector/transcript-hydration.d.ts +13 -2
- package/dist/hooks/runtime-fallback/auto-retry-abort.d.ts +2 -0
- package/dist/hooks/runtime-fallback/auto-retry-agent-context.d.ts +2 -0
- package/dist/hooks/runtime-fallback/auto-retry-cleanup.d.ts +2 -0
- package/dist/hooks/runtime-fallback/auto-retry-dispatch.d.ts +2 -0
- package/dist/hooks/runtime-fallback/auto-retry-metadata.d.ts +9 -0
- package/dist/hooks/runtime-fallback/auto-retry-timeout.d.ts +5 -0
- package/dist/hooks/runtime-fallback/fallback-bootstrap-model.d.ts +1 -1
- package/dist/hooks/runtime-fallback/fallback-state.d.ts +4 -1
- package/dist/hooks/runtime-fallback/normalize-model.d.ts +12 -0
- package/dist/hooks/session-notification-linux.d.ts +3 -0
- package/dist/hooks/session-notification-log.d.ts +2 -0
- package/dist/hooks/session-notification-macos.d.ts +3 -0
- package/dist/hooks/session-notification-platform.d.ts +3 -0
- package/dist/hooks/session-notification-runner.d.ts +9 -0
- package/dist/hooks/session-notification-send.d.ts +3 -0
- package/dist/hooks/session-notification-sender.d.ts +5 -6
- package/dist/hooks/session-notification-sound.d.ts +3 -0
- package/dist/hooks/session-notification-windows.d.ts +3 -0
- package/dist/hooks/session-recovery/error-recovery.d.ts +4 -0
- package/dist/hooks/session-recovery/hook-types.d.ts +22 -0
- package/dist/hooks/session-recovery/hook.d.ts +2 -19
- package/dist/hooks/session-recovery/interrupted-tool-results.d.ts +3 -0
- package/dist/hooks/session-recovery/message-state.d.ts +4 -0
- package/dist/hooks/session-recovery/storage/thinking-strip.d.ts +7 -1
- package/dist/hooks/start-work/context-info-builder.d.ts +9 -9
- package/dist/hooks/start-work/context-info-formatters.d.ts +21 -0
- package/dist/hooks/start-work/explicit-plan-context.d.ts +9 -0
- package/dist/hooks/start-work/plan-discovery-context.d.ts +25 -0
- package/dist/hooks/start-work/plan-selection.d.ts +4 -0
- package/dist/hooks/start-work/work-initializer.d.ts +17 -0
- package/dist/hooks/tool-pair-validator/hook.d.ts +1 -37
- package/dist/hooks/tool-pair-validator/message-transform.d.ts +2 -0
- package/dist/hooks/tool-pair-validator/tool-part-ids.d.ts +6 -0
- package/dist/hooks/tool-pair-validator/tool-result-repair.d.ts +4 -0
- package/dist/hooks/tool-pair-validator/types.d.ts +36 -0
- package/dist/index.js +12708 -9988
- package/dist/oh-my-opencode.schema.json +4 -0
- package/dist/openclaw/reply-listener-poll-loop.d.ts +3 -0
- package/dist/openclaw/reply-listener-signature.d.ts +2 -0
- package/dist/openclaw/reply-listener-sleep.d.ts +1 -0
- package/dist/openclaw/reply-listener-start.d.ts +9 -0
- package/dist/openclaw/reply-listener-status.d.ts +4 -0
- package/dist/openclaw/reply-listener-stop.d.ts +7 -0
- package/dist/openclaw/reply-listener.d.ts +5 -18
- package/dist/openclaw/session-registry-lock.d.ts +2 -0
- package/dist/openclaw/session-registry-paths.d.ts +9 -0
- package/dist/openclaw/session-registry-storage.d.ts +4 -0
- package/dist/openclaw/session-registry-types.d.ts +11 -0
- package/dist/openclaw/session-registry.d.ts +2 -11
- package/dist/plugin/chat-message/loop-commands.d.ts +9 -0
- package/dist/plugin/chat-message/model-cache-warning.d.ts +12 -0
- package/dist/plugin/chat-message/prompt-text.d.ts +2 -0
- package/dist/plugin/chat-message/session-model.d.ts +4 -0
- package/dist/plugin/chat-message/start-work-message.d.ts +5 -0
- package/dist/plugin/chat-message/types.d.ts +67 -0
- package/dist/plugin/chat-message.d.ts +3 -24
- package/dist/plugin/event-error-utils.d.ts +14 -0
- package/dist/plugin/event-hook-dispatcher.d.ts +5 -0
- package/dist/plugin/event-model-fallback-state.d.ts +30 -0
- package/dist/plugin/event-model-fallback.d.ts +39 -0
- package/dist/plugin/event-session-lifecycle.d.ts +49 -0
- package/dist/plugin/event-session-recovery.d.ts +9 -0
- package/dist/plugin/event-team-handlers.d.ts +13 -0
- package/dist/plugin/event-types.d.ts +78 -0
- package/dist/plugin/event.d.ts +3 -12
- package/dist/plugin/hooks/create-core-hooks.d.ts +1 -0
- package/dist/plugin/hooks/create-session-hooks.d.ts +2 -1
- package/dist/plugin/hooks/model-fallback-title-updater.d.ts +8 -0
- package/dist/plugin/session-compacting.d.ts +4 -1
- package/dist/plugin/system-transform.d.ts +1 -1
- package/dist/plugin/tool-execute-after.d.ts +2 -0
- package/dist/plugin/tool-registry-core-tools.d.ts +15 -0
- package/dist/plugin/tool-registry-factories.d.ts +36 -0
- package/dist/plugin/tool-registry-gated-tools.d.ts +16 -0
- package/dist/plugin/tool-registry-team-tools.d.ts +14 -0
- package/dist/plugin/tool-registry-trimming.d.ts +2 -0
- package/dist/plugin/tool-registry.d.ts +3 -38
- package/dist/plugin/ultrawork-db-model-override.d.ts +1 -1
- package/dist/plugin-config/agent-order-warnings.d.ts +1 -0
- package/dist/plugin-config/config-merger.d.ts +2 -0
- package/dist/plugin-config/layered-config-loader.d.ts +2 -0
- package/dist/plugin-config/single-config-loader.d.ts +4 -0
- package/dist/plugin-config.d.ts +3 -5
- package/dist/plugin-handlers/agent-config-assembly.d.ts +19 -0
- package/dist/plugin-handlers/agent-config-finalizer.d.ts +4 -0
- package/dist/plugin-handlers/agent-config-handler.d.ts +2 -11
- package/dist/plugin-handlers/agent-config-types.d.ts +30 -0
- package/dist/plugin-handlers/agent-skill-discovery.d.ts +3 -0
- package/dist/plugin-handlers/agent-source-loader.d.ts +2 -0
- package/dist/plugin-handlers/hook-config-handler.d.ts +0 -3
- package/dist/shared/context-window-usage.d.ts +7 -0
- package/dist/shared/dynamic-truncator-types.d.ts +17 -0
- package/dist/shared/dynamic-truncator.d.ts +8 -23
- package/dist/shared/migration/migrations-sidecar.d.ts +2 -2
- package/dist/shared/migration/model-versions.d.ts +7 -4
- package/dist/shared/model-availability.d.ts +1 -1
- package/dist/shared/opencode-version.d.ts +2 -2
- package/dist/shared/sparkshell-awareness.d.ts +5 -0
- package/dist/shared/spawn-with-windows-hide.d.ts +2 -0
- package/dist/shared/token-limit-truncator.d.ts +2 -0
- package/dist/testing/module-mock-lifecycle.d.ts +8 -0
- package/dist/tools/delegate-task/openai-categories.d.ts +0 -1
- package/dist/tools/delegate-task/subagent-agent-match.d.ts +3 -0
- package/dist/tools/delegate-task/subagent-model-resolution.d.ts +4 -0
- package/dist/tools/delegate-task/subagent-request-preflight.d.ts +3 -0
- package/dist/tools/delegate-task/subagent-resolution-types.d.ts +32 -0
- package/dist/tools/delegate-task/subagent-resolver.d.ts +3 -12
- package/dist/tools/delegate-task/sync-completion-message.d.ts +20 -0
- package/dist/tools/delegate-task/sync-poll-error-recovery.d.ts +1 -0
- package/dist/tools/delegate-task/sync-session-lifecycle.d.ts +12 -0
- package/dist/tools/delegate-task/sync-session-poller.d.ts +2 -0
- package/dist/tools/delegate-task/sync-spawn-reservation.d.ts +10 -0
- package/dist/tools/delegate-task/sync-task-metadata.d.ts +11 -0
- package/dist/tools/delegate-task/sync-task-runner.d.ts +30 -0
- package/dist/tools/delegate-task/sync-task.d.ts +2 -1
- package/dist/tools/hashline-edit/formatter-trigger.d.ts +2 -2
- package/package.json +15 -14
- package/packages/git-bash-mcp/dist/cli.js +29 -12
- package/packages/lsp-tools-mcp/dist/lsp/client-wrapper.d.ts +1 -1
- package/packages/lsp-tools-mcp/dist/lsp/client-wrapper.js +1 -1
- package/packages/lsp-tools-mcp/dist/lsp/config-loader.js +95 -30
- package/packages/lsp-tools-mcp/dist/lsp/server-installation.d.ts +1 -2
- package/packages/lsp-tools-mcp/dist/lsp/server-installation.js +1 -11
- package/packages/lsp-tools-mcp/dist/lsp/transport.d.ts +1 -0
- package/packages/lsp-tools-mcp/dist/lsp/transport.js +5 -10
- package/packages/lsp-tools-mcp/dist/lsp/workspace-edit.d.ts +4 -1
- package/packages/lsp-tools-mcp/dist/lsp/workspace-edit.js +84 -23
- package/packages/lsp-tools-mcp/dist/missing-dependency-result.d.ts +2 -0
- package/packages/lsp-tools-mcp/dist/missing-dependency-result.js +14 -0
- package/packages/lsp-tools-mcp/dist/tools.js +64 -80
- package/packages/lsp-tools-mcp/package.json +4 -4
- package/packages/omo-codex/lazycodex-repository/.github/workflows/pr-source-guidance.yml +36 -0
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/README.md +3 -1
- package/packages/omo-codex/plugin/components/comment-checker/src/apply-patch.ts +188 -0
- package/packages/omo-codex/plugin/components/comment-checker/src/core-values.ts +1 -0
- package/packages/omo-codex/plugin/components/comment-checker/src/core.ts +15 -361
- package/packages/omo-codex/plugin/components/comment-checker/src/hook-input.ts +19 -0
- package/packages/omo-codex/plugin/components/comment-checker/src/record.ts +11 -0
- package/packages/omo-codex/plugin/components/comment-checker/src/request-extractor.ts +102 -0
- package/packages/omo-codex/plugin/components/comment-checker/src/types.ts +51 -0
- package/packages/omo-codex/plugin/components/comment-checker/test/codex-hook.test.ts +145 -0
- package/packages/omo-codex/plugin/components/comment-checker/test/core.test.ts +200 -0
- package/packages/omo-codex/plugin/components/lsp/CHANGELOG.md +2 -2
- package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus.md +11 -5
- package/packages/omo-codex/plugin/components/rules/src/hook-output.ts +11 -1
- package/packages/omo-codex/plugin/components/rules/src/post-compact-budget.ts +0 -1
- package/packages/omo-codex/plugin/components/rules/src/rules/constants.ts +1 -4
- package/packages/omo-codex/plugin/components/rules/src/rules/engine-dynamic-cache.ts +87 -0
- package/packages/omo-codex/plugin/components/rules/src/rules/engine-dynamic-loader.ts +94 -0
- package/packages/omo-codex/plugin/components/rules/src/rules/engine-loader.ts +84 -0
- package/packages/omo-codex/plugin/components/rules/src/rules/engine-paths.ts +103 -0
- package/packages/omo-codex/plugin/components/rules/src/rules/engine-static-loader.ts +43 -0
- package/packages/omo-codex/plugin/components/rules/src/rules/engine-types.ts +45 -0
- package/packages/omo-codex/plugin/components/rules/src/rules/engine.ts +8 -419
- package/packages/omo-codex/plugin/components/rules/src/rules/formatter.ts +32 -5
- package/packages/omo-codex/plugin/components/rules/src/rules/parser-frontmatter.ts +39 -0
- package/packages/omo-codex/plugin/components/rules/src/rules/parser-yaml.ts +271 -0
- package/packages/omo-codex/plugin/components/rules/src/rules/parser.ts +3 -294
- package/packages/omo-codex/plugin/components/rules/src/sparkshell-awareness.ts +57 -0
- package/packages/omo-codex/plugin/components/rules/src/static-injection.ts +13 -2
- package/packages/omo-codex/plugin/components/rules/src/transcript-rule-filter.ts +17 -0
- package/packages/omo-codex/plugin/components/rules/test/bundled-rules-priority.test.ts +2 -1
- package/packages/omo-codex/plugin/components/rules/test/bundled-rules.test.ts +26 -11
- package/packages/omo-codex/plugin/components/rules/test/codex-hook-context-pressure.test.ts +104 -138
- package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-budget.test.ts +5 -2
- package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-context.test.ts +12 -5
- package/packages/omo-codex/plugin/components/rules/test/codex-hook.test.ts +10 -4
- package/packages/omo-codex/plugin/components/rules/test/engine.test.ts +65 -3
- package/packages/omo-codex/plugin/components/rules/test/formatter.test.ts +47 -2
- package/packages/omo-codex/plugin/components/rules/test/hook-output.test.ts +16 -0
- package/packages/omo-codex/plugin/components/rules/test/parser.test.ts +153 -0
- package/packages/omo-codex/plugin/components/rules/test/post-compact-budget.test.ts +12 -0
- package/packages/omo-codex/plugin/components/rules/test/sparkshell-awareness.test.ts +236 -0
- package/packages/omo-codex/plugin/components/rules/test/tool-paths.test.ts +28 -50
- package/packages/omo-codex/plugin/components/rules/test/windows-git-bash-bundled-rule.test.ts +6 -3
- package/packages/omo-codex/plugin/components/start-work-continuation/directive.md +13 -6
- package/packages/omo-codex/plugin/components/start-work-continuation/src/codex-hook.ts +21 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +64 -2
- package/packages/omo-codex/plugin/components/telemetry/README.md +11 -1
- package/packages/omo-codex/plugin/components/telemetry/biome.json +12 -0
- package/packages/omo-codex/plugin/components/telemetry/src/codex-hook.ts +30 -3
- package/packages/omo-codex/plugin/components/telemetry/src/diagnostics.ts +154 -0
- package/packages/omo-codex/plugin/components/telemetry/src/posthog-activity-state.ts +18 -2
- package/packages/omo-codex/plugin/components/telemetry/src/posthog.ts +36 -4
- package/packages/omo-codex/plugin/components/telemetry/test/codex-hook-diagnostics.test.ts +115 -0
- package/packages/omo-codex/plugin/components/telemetry/test/codex-hook.test.ts +16 -25
- package/packages/omo-codex/plugin/components/telemetry/test/diagnostics.test.ts +119 -0
- package/packages/omo-codex/plugin/components/ultrawork/AGENTS.md +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/README.md +5 -5
- package/packages/omo-codex/plugin/components/ultrawork/agents/codex-ultrawork-reviewer.toml +2 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/explorer.toml +1 -0
- package/packages/omo-codex/plugin/components/ultrawork/agents/metis.toml +0 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/momus.toml +0 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +1 -2
- package/packages/omo-codex/plugin/components/ultrawork/directive.md +97 -32
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +65 -0
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/agents/openai.yaml +7 -0
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +131 -0
- package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +38 -10
- package/packages/omo-codex/plugin/components/ultrawork/test/directive-contract.test.ts +18 -0
- package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +47 -0
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +12 -8
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +28 -21
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +2 -3
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +7 -7
- package/packages/omo-codex/plugin/components/ulw-loop/src/command-types.ts +36 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/constants.ts +64 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +98 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +17 -2
- package/packages/omo-codex/plugin/components/ulw-loop/src/runtime.ts +22 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/steering-types.ts +69 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/types.ts +5 -277
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-commands.test.ts +35 -13
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-complete-goals.test.ts +52 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering.test.ts +67 -111
- package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +2 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/codex-hook.test.ts +31 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +46 -9
- package/packages/omo-codex/plugin/components/ulw-loop/test/steering.test.ts +20 -29
- package/packages/omo-codex/plugin/model-catalog.json +5 -11
- package/packages/omo-codex/plugin/package-lock.json +1 -1
- package/packages/omo-codex/plugin/scripts/auto-update-state.mjs +78 -0
- package/packages/omo-codex/plugin/scripts/auto-update.mjs +166 -76
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/catalog.mjs +71 -0
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/config-paths.mjs +44 -0
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/root-settings.mjs +74 -0
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/state.mjs +29 -0
- package/packages/omo-codex/plugin/scripts/migrate-codex-config.mjs +14 -202
- package/packages/omo-codex/plugin/scripts/spawn-command.mjs +11 -0
- package/packages/omo-codex/plugin/scripts/sync-hook-status-messages.mjs +23 -9
- package/packages/omo-codex/plugin/scripts/sync-skills.mjs +131 -28
- package/packages/omo-codex/plugin/skills/debugging/references/methodology/04-oracle-triple.md +3 -3
- package/packages/omo-codex/plugin/skills/git-master/SKILL.md +100 -0
- package/packages/omo-codex/plugin/skills/git-master/agents/openai.yaml +13 -0
- package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +9 -7
- package/packages/omo-codex/plugin/skills/lcx-contribute-bug-fix/SKILL.md +176 -0
- package/packages/omo-codex/plugin/skills/lcx-contribute-bug-fix/agents/openai.yaml +12 -0
- package/packages/omo-codex/plugin/skills/lcx-contribute-bug-fix/scripts/create-pr-body.mjs +107 -0
- package/packages/omo-codex/plugin/skills/lcx-report-bug/SKILL.md +119 -14
- package/packages/omo-codex/plugin/skills/lcx-report-bug/agents/openai.yaml +4 -2
- package/packages/omo-codex/plugin/skills/programming/references/go/concurrency.md +2 -2
- package/packages/omo-codex/plugin/skills/programming/references/python/async-anyio.md +6 -6
- package/packages/omo-codex/plugin/skills/programming/references/python/pydantic-ai.md +12 -12
- package/packages/omo-codex/plugin/skills/programming/references/typescript/backend-hono.md +7 -7
- package/packages/omo-codex/plugin/skills/refactor/SKILL.md +13 -11
- package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +10 -8
- package/packages/omo-codex/plugin/skills/review-work/SKILL.md +68 -33
- package/packages/omo-codex/plugin/skills/start-work/SKILL.md +86 -22
- package/packages/omo-codex/plugin/skills/ultraresearch/SKILL.md +770 -0
- package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +12 -8
- package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +28 -21
- package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +45 -379
- package/packages/omo-codex/plugin/skills/ulw-plan/agents/openai.yaml +7 -0
- package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +131 -0
- package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +237 -0
- package/packages/omo-codex/plugin/skills/visual-qa/scripts/ansi.ts +17 -0
- package/packages/omo-codex/plugin/skills/visual-qa/scripts/cli.ts +82 -0
- package/packages/omo-codex/plugin/skills/visual-qa/scripts/east-asian-width.ts +72 -0
- package/packages/omo-codex/plugin/skills/visual-qa/scripts/image-diff.ts +109 -0
- package/packages/omo-codex/plugin/skills/visual-qa/scripts/png-crc.ts +27 -0
- package/packages/omo-codex/plugin/skills/visual-qa/scripts/png-decode.ts +206 -0
- package/packages/omo-codex/plugin/skills/visual-qa/scripts/png-synth.ts +57 -0
- package/packages/omo-codex/plugin/skills/visual-qa/scripts/tui-grid.ts +88 -0
- package/packages/omo-codex/plugin/skills/visual-qa/scripts/types.ts +54 -0
- package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +55 -0
- package/packages/omo-codex/plugin/test/aggregate-build.test.mjs +38 -0
- package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +164 -0
- package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +73 -0
- package/packages/omo-codex/plugin/test/aggregate-mcp.test.mjs +69 -0
- package/packages/omo-codex/plugin/test/aggregate-model-catalog.test.mjs +53 -0
- package/packages/omo-codex/plugin/test/aggregate-plugin-fixture.mjs +83 -0
- package/packages/omo-codex/plugin/test/aggregate-skills.test.mjs +67 -0
- package/packages/omo-codex/plugin/test/aggregate.test.mjs +2 -514
- package/packages/omo-codex/plugin/test/auto-update-state-persistence.test.mjs +36 -0
- package/packages/omo-codex/plugin/test/auto-update.test.mjs +191 -29
- package/packages/omo-codex/plugin/test/component-bin-names.test.mjs +1 -1
- package/packages/omo-codex/plugin/test/global-review-debug-gate.test.mjs +29 -0
- package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +23 -10
- package/packages/omo-codex/plugin/test/lcx-bug-skills.test.mjs +81 -0
- package/packages/omo-codex/plugin/test/lcx-contribute-bug-fix-template.test.mjs +91 -0
- package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +165 -9
- package/packages/omo-codex/plugin/test/node-install-surface.test.mjs +0 -19
- package/packages/omo-codex/plugin/test/start-work-skill.test.mjs +107 -0
- package/packages/omo-codex/plugin/test/subagent-guidance.test.mjs +82 -7
- package/packages/omo-codex/plugin/test/sync-hook-status-messages.test.mjs +58 -6
- package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +152 -0
- package/packages/omo-codex/plugin/test/sync-skills.test.mjs +158 -50
- package/packages/omo-codex/plugin/test/ulw-plan-skill.test.mjs +43 -0
- package/packages/omo-codex/scripts/install/agent-source-roots.mjs +13 -0
- package/packages/omo-codex/scripts/install/agents.mjs +84 -14
- package/packages/omo-codex/scripts/install/bin-links.mjs +239 -0
- package/packages/omo-codex/scripts/install/cache.mjs +152 -108
- package/packages/omo-codex/scripts/install/cached-marketplace-manifest.mjs +21 -0
- package/packages/omo-codex/scripts/install/cli-args.mjs +39 -2
- package/packages/omo-codex/scripts/install/config.mjs +7 -5
- package/packages/omo-codex/scripts/install/lazycodex-version-stamp.mjs +102 -0
- package/packages/omo-codex/scripts/install/legacy-bins.mjs +9 -1
- package/packages/omo-codex/scripts/install/model-catalog.mjs +9 -1
- package/packages/omo-codex/scripts/install/process.mjs +3 -1
- package/packages/omo-codex/scripts/install/project-local-cleanup.mjs +0 -1
- package/packages/omo-codex/scripts/install/snapshot.mjs +0 -1
- package/packages/omo-codex/scripts/install-agent-links.test.mjs +205 -11
- package/packages/omo-codex/scripts/install-bin-links.test.mjs +123 -1
- package/packages/omo-codex/scripts/install-cache-copy.test.mjs +129 -5
- package/packages/omo-codex/scripts/install-cli-args.test.mjs +82 -1
- package/packages/omo-codex/scripts/install-config-preservation.test.mjs +43 -0
- package/packages/omo-codex/scripts/install-config-reasoning.test.mjs +14 -1
- package/packages/omo-codex/scripts/install-config.test.mjs +49 -1
- package/packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs +84 -0
- package/packages/omo-codex/scripts/install-local-entrypoint.test.mjs +51 -0
- package/packages/omo-codex/scripts/install-local.mjs +42 -40
- package/packages/omo-codex/scripts/install-local.test.mjs +17 -241
- package/packages/omo-codex/scripts/install-marketplace-cache.test.mjs +162 -0
- package/packages/omo-codex/scripts/install-packaged-local.test.mjs +10 -6
- package/packages/omo-codex/scripts/install-project-local-cleanup.test.mjs +73 -2
- package/packages/omo-codex/scripts/sync-telemetry-component.mjs +1 -0
- package/packages/shared-skills/skills/debugging/references/methodology/04-oracle-triple.md +3 -3
- package/packages/shared-skills/skills/git-master/SKILL.md +100 -0
- package/packages/shared-skills/skills/git-master/agents/openai.yaml +13 -0
- package/packages/shared-skills/skills/lcx-contribute-bug-fix/SKILL.md +176 -0
- package/packages/shared-skills/skills/lcx-contribute-bug-fix/agents/openai.yaml +12 -0
- package/packages/shared-skills/skills/lcx-contribute-bug-fix/scripts/create-pr-body.mjs +107 -0
- package/packages/shared-skills/skills/lcx-report-bug/SKILL.md +119 -14
- package/packages/shared-skills/skills/lcx-report-bug/agents/openai.yaml +4 -2
- package/packages/shared-skills/skills/programming/references/go/concurrency.md +2 -2
- package/packages/shared-skills/skills/programming/references/python/async-anyio.md +6 -6
- package/packages/shared-skills/skills/programming/references/python/pydantic-ai.md +12 -12
- package/packages/shared-skills/skills/programming/references/typescript/backend-hono.md +7 -7
- package/packages/shared-skills/skills/refactor/SKILL.md +4 -4
- package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +1 -1
- package/packages/shared-skills/skills/review-work/SKILL.md +55 -33
- package/packages/shared-skills/skills/start-work/SKILL.md +76 -19
- package/packages/shared-skills/skills/ultraresearch/SKILL.md +770 -0
- package/packages/shared-skills/skills/visual-qa/SKILL.md +219 -0
- package/packages/shared-skills/skills/visual-qa/scripts/ansi.test.ts +45 -0
- package/packages/shared-skills/skills/visual-qa/scripts/ansi.ts +17 -0
- package/packages/shared-skills/skills/visual-qa/scripts/cli.test.ts +73 -0
- package/packages/shared-skills/skills/visual-qa/scripts/cli.ts +82 -0
- package/packages/shared-skills/skills/visual-qa/scripts/east-asian-width.test.ts +60 -0
- package/packages/shared-skills/skills/visual-qa/scripts/east-asian-width.ts +72 -0
- package/packages/shared-skills/skills/visual-qa/scripts/image-diff.test.ts +70 -0
- package/packages/shared-skills/skills/visual-qa/scripts/image-diff.ts +109 -0
- package/packages/shared-skills/skills/visual-qa/scripts/png-crc.ts +27 -0
- package/packages/shared-skills/skills/visual-qa/scripts/png-decode.test.ts +44 -0
- package/packages/shared-skills/skills/visual-qa/scripts/png-decode.ts +206 -0
- package/packages/shared-skills/skills/visual-qa/scripts/png-synth.ts +57 -0
- package/packages/shared-skills/skills/visual-qa/scripts/skill-prompt-contract.test.ts +83 -0
- package/packages/shared-skills/skills/visual-qa/scripts/tui-grid.test.ts +57 -0
- package/packages/shared-skills/skills/visual-qa/scripts/tui-grid.ts +88 -0
- package/packages/shared-skills/skills/visual-qa/scripts/types.ts +54 -0
- package/postinstall.mjs +24 -1
- package/dist/agents/custom-agent-summaries.d.ts +0 -8
- package/dist/agents/hephaestus/gpt-5-3-codex.d.ts +0 -20
- package/dist/agents/prometheus/gemini.d.ts +0 -1
- package/dist/agents/prometheus/gpt.d.ts +0 -1
- package/dist/agents/sisyphus-junior/gpt-5-3-codex.d.ts +0 -8
- package/dist/features/background-agent/session-route.d.ts +0 -12
- package/dist/features/background-agent/spawner/parent-directory-resolver.d.ts +0 -6
- package/dist/features/background-agent/state.d.ts +0 -35
- package/dist/features/claude-tasks/session-storage.d.ts +0 -9
- package/dist/features/mcp-oauth/resource-indicator.d.ts +0 -2
- package/dist/features/mcp-oauth/schema.d.ts +0 -6
- package/dist/features/opencode-skill-loader/async-loader.d.ts +0 -6
- package/dist/features/opencode-skill-loader/blocking.d.ts +0 -2
- package/dist/features/opencode-skill-loader/discover-worker.d.ts +0 -1
- package/dist/hooks/session-recovery/recover-empty-content-message-sdk.d.ts +0 -13
- package/dist/shared/bun-hash-shim.d.ts +0 -1
- package/dist/tools/delegate-task/resolve-call-id.d.ts +0 -2
- package/packages/shared-skills/skills/ulw-plan/SKILL.md +0 -383
- /package/packages/lsp-tools-mcp/dist/lsp/{utils.d.ts → startup-failure.d.ts} +0 -0
- /package/packages/lsp-tools-mcp/dist/lsp/{utils.js → startup-failure.js} +0 -0
|
@@ -1,44 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { dirname, join, resolve } from "node:path";
|
|
6
|
-
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
4
|
+
import { dirname } from "node:path";
|
|
7
5
|
import { pathToFileURL } from "node:url";
|
|
8
6
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
model_context_window: 400_000,
|
|
14
|
-
model_reasoning_effort: "high",
|
|
15
|
-
plan_mode_reasoning_effort: "xhigh",
|
|
16
|
-
},
|
|
17
|
-
roles: {
|
|
18
|
-
default: {
|
|
19
|
-
model: "gpt-5.5",
|
|
20
|
-
model_context_window: 400_000,
|
|
21
|
-
model_reasoning_effort: "high",
|
|
22
|
-
plan_mode_reasoning_effort: "xhigh",
|
|
23
|
-
},
|
|
24
|
-
verifier: { model: "gpt-5.5", model_reasoning_effort: "xhigh" },
|
|
25
|
-
worker: { model: "gpt-5.4", model_reasoning_effort: "high" },
|
|
26
|
-
},
|
|
27
|
-
managedProfiles: [
|
|
28
|
-
{ version: "legacy.gpt-5.2", match: { model: "gpt-5.2" } },
|
|
29
|
-
{
|
|
30
|
-
version: "legacy.gpt-5.4-1m",
|
|
31
|
-
match: {
|
|
32
|
-
model: "gpt-5.4",
|
|
33
|
-
model_context_window: 1_000_000,
|
|
34
|
-
model_reasoning_effort: "high",
|
|
35
|
-
plan_mode_reasoning_effort: "xhigh",
|
|
36
|
-
},
|
|
37
|
-
},
|
|
38
|
-
],
|
|
39
|
-
};
|
|
7
|
+
import { FALLBACK_CATALOG, readModelCatalog } from "./migrate-codex-config/catalog.mjs";
|
|
8
|
+
import { configPaths } from "./migrate-codex-config/config-paths.mjs";
|
|
9
|
+
import { ensureCodexReasoningConfig as applyReasoningProfile, readRootSettings } from "./migrate-codex-config/root-settings.mjs";
|
|
10
|
+
import { readState, resolveStatePath, writeState } from "./migrate-codex-config/state.mjs";
|
|
40
11
|
|
|
41
|
-
|
|
12
|
+
export { readModelCatalog } from "./migrate-codex-config/catalog.mjs";
|
|
13
|
+
|
|
14
|
+
export function ensureCodexReasoningConfig(config, profile = FALLBACK_CATALOG.current) {
|
|
15
|
+
return applyReasoningProfile(config, profile);
|
|
16
|
+
}
|
|
42
17
|
|
|
43
18
|
export async function migrateCodexConfig({ env = process.env, cwd = process.cwd() } = {}) {
|
|
44
19
|
const catalog = await readModelCatalog(env);
|
|
@@ -66,7 +41,7 @@ export async function migrateCodexConfig({ env = process.env, cwd = process.cwd(
|
|
|
66
41
|
export async function migrateConfigFile(configPath, { catalog = FALLBACK_CATALOG, previousState } = {}) {
|
|
67
42
|
const before = await readConfig(configPath);
|
|
68
43
|
const decision = shouldApplyCatalog(before, catalog, previousState);
|
|
69
|
-
if (!decision.apply) return { changed: false, written: readRootSettings(before), managed:
|
|
44
|
+
if (!decision.apply) return { changed: false, written: readRootSettings(before), managed: decision.managed };
|
|
70
45
|
const after = ensureCodexReasoningConfig(before, catalog.current);
|
|
71
46
|
if (after === before) return { changed: false, written: catalog.current, managed: true };
|
|
72
47
|
await mkdir(dirname(configPath), { recursive: true });
|
|
@@ -74,35 +49,17 @@ export async function migrateConfigFile(configPath, { catalog = FALLBACK_CATALOG
|
|
|
74
49
|
return { changed: true, written: catalog.current, managed: true };
|
|
75
50
|
}
|
|
76
51
|
|
|
77
|
-
export function ensureCodexReasoningConfig(config, profile = FALLBACK_CATALOG.current) {
|
|
78
|
-
let next = replaceOrInsertRootSetting(config, "model", JSON.stringify(profile.model));
|
|
79
|
-
next = replaceOrInsertRootSetting(next, "model_context_window", profile.model_context_window.toString());
|
|
80
|
-
next = replaceOrInsertRootSetting(next, "model_reasoning_effort", JSON.stringify(profile.model_reasoning_effort));
|
|
81
|
-
next = replaceOrInsertRootSetting(next, "plan_mode_reasoning_effort", JSON.stringify(profile.plan_mode_reasoning_effort));
|
|
82
|
-
return next;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
export async function readModelCatalog(env = process.env) {
|
|
86
|
-
const catalogPath = env.LAZYCODEX_MODEL_CATALOG_PATH?.trim() || join(dirname(fileURLToPath(import.meta.url)), "..", "model-catalog.json");
|
|
87
|
-
try {
|
|
88
|
-
return parseCatalog(JSON.parse(await readFile(catalogPath, "utf8"))) ?? FALLBACK_CATALOG;
|
|
89
|
-
} catch (error) {
|
|
90
|
-
if (error instanceof Error) return FALLBACK_CATALOG;
|
|
91
|
-
throw error;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
52
|
function shouldApplyCatalog(config, catalog, previousState) {
|
|
96
53
|
const current = readRootSettings(config);
|
|
97
54
|
if (Object.keys(current).length === 0) return { apply: true, reason: "empty" };
|
|
98
|
-
if (matchesProfile(current, catalog.current)) return { apply: false, reason: "current" };
|
|
55
|
+
if (matchesProfile(current, catalog.current)) return { apply: false, reason: "current", managed: true };
|
|
99
56
|
if (previousState?.managed === true && matchesProfile(current, previousState.written)) {
|
|
100
57
|
return { apply: true, reason: "managed-state" };
|
|
101
58
|
}
|
|
102
59
|
for (const profile of catalog.managedProfiles) {
|
|
103
60
|
if (matchesProfile(current, profile.match)) return { apply: true, reason: profile.version };
|
|
104
61
|
}
|
|
105
|
-
return { apply: false, reason: "user-modified" };
|
|
62
|
+
return { apply: false, reason: "user-modified", managed: false };
|
|
106
63
|
}
|
|
107
64
|
|
|
108
65
|
function matchesProfile(current, profile) {
|
|
@@ -113,81 +70,10 @@ function matchesProfile(current, profile) {
|
|
|
113
70
|
return true;
|
|
114
71
|
}
|
|
115
72
|
|
|
116
|
-
function readRootSettings(config) {
|
|
117
|
-
const settings = {};
|
|
118
|
-
for (const line of config.split(/\n/)) {
|
|
119
|
-
if (isSectionHeader(line)) break;
|
|
120
|
-
for (const key of MANAGED_KEYS) {
|
|
121
|
-
if (!isRootSetting(line, key)) continue;
|
|
122
|
-
const value = parseTomlScalar(line.slice(line.indexOf("=") + 1));
|
|
123
|
-
if (value !== undefined) settings[key] = value;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
return settings;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
function parseTomlScalar(value) {
|
|
130
|
-
const trimmed = value.trim();
|
|
131
|
-
if (trimmed.startsWith('"') && trimmed.endsWith('"')) {
|
|
132
|
-
try {
|
|
133
|
-
return JSON.parse(trimmed);
|
|
134
|
-
} catch (error) {
|
|
135
|
-
if (error instanceof SyntaxError) return undefined;
|
|
136
|
-
throw error;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
const numeric = Number(trimmed);
|
|
140
|
-
return Number.isFinite(numeric) ? numeric : undefined;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
function parseCatalog(value) {
|
|
144
|
-
if (!isRecord(value) || !isRecord(value.current) || !Array.isArray(value.managedProfiles)) return null;
|
|
145
|
-
if (typeof value.version !== "string" || !isReasoningProfile(value.current)) return null;
|
|
146
|
-
const managedProfiles = [];
|
|
147
|
-
for (const profile of value.managedProfiles) {
|
|
148
|
-
if (!isRecord(profile) || typeof profile.version !== "string" || !isRecord(profile.match)) return null;
|
|
149
|
-
managedProfiles.push({ version: profile.version, match: profile.match });
|
|
150
|
-
}
|
|
151
|
-
return { version: value.version, current: value.current, managedProfiles, roles: isRecord(value.roles) ? value.roles : {} };
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
function isReasoningProfile(value) {
|
|
155
|
-
return (
|
|
156
|
-
isRecord(value) &&
|
|
157
|
-
typeof value.model === "string" &&
|
|
158
|
-
typeof value.model_context_window === "number" &&
|
|
159
|
-
typeof value.model_reasoning_effort === "string" &&
|
|
160
|
-
typeof value.plan_mode_reasoning_effort === "string"
|
|
161
|
-
);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
73
|
function isRecord(value) {
|
|
165
74
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
166
75
|
}
|
|
167
76
|
|
|
168
|
-
async function configPaths({ env, cwd }) {
|
|
169
|
-
const codexHome = resolve(env.CODEX_HOME?.trim() || join(homedir(), ".codex"));
|
|
170
|
-
const paths = new Set([join(codexHome, "config.toml")]);
|
|
171
|
-
for (const projectConfig of projectConfigPaths({ cwd, stopAt: homedir() })) {
|
|
172
|
-
if (!(await isRegularFile(projectConfig))) continue;
|
|
173
|
-
if (!(await isRegularDirectory(dirname(projectConfig)))) continue;
|
|
174
|
-
paths.add(projectConfig);
|
|
175
|
-
}
|
|
176
|
-
return [...paths];
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
function projectConfigPaths({ cwd, stopAt }) {
|
|
180
|
-
const paths = [];
|
|
181
|
-
let current = resolve(cwd);
|
|
182
|
-
const stop = resolve(stopAt);
|
|
183
|
-
while (true) {
|
|
184
|
-
paths.push(join(current, ".codex", "config.toml"));
|
|
185
|
-
if (current === stop || current === dirname(current)) break;
|
|
186
|
-
current = dirname(current);
|
|
187
|
-
}
|
|
188
|
-
return paths;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
77
|
async function readConfig(configPath) {
|
|
192
78
|
try {
|
|
193
79
|
return await readFile(configPath, "utf8");
|
|
@@ -197,80 +83,6 @@ async function readConfig(configPath) {
|
|
|
197
83
|
}
|
|
198
84
|
}
|
|
199
85
|
|
|
200
|
-
function resolveStatePath(env) {
|
|
201
|
-
if (env.LAZYCODEX_MODEL_CATALOG_STATE_PATH?.trim()) return env.LAZYCODEX_MODEL_CATALOG_STATE_PATH;
|
|
202
|
-
const dataRoot = env.PLUGIN_DATA?.trim() || join(homedir(), ".local", "share", "lazycodex");
|
|
203
|
-
return join(dataRoot, "model-catalog-state.json");
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
async function readState(statePath) {
|
|
207
|
-
try {
|
|
208
|
-
const parsed = JSON.parse(await readFile(statePath, "utf8"));
|
|
209
|
-
return isRecord(parsed) ? parsed : {};
|
|
210
|
-
} catch (error) {
|
|
211
|
-
if (error instanceof Error) return {};
|
|
212
|
-
throw error;
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
async function writeState(statePath, state) {
|
|
217
|
-
await mkdir(dirname(statePath), { recursive: true });
|
|
218
|
-
await writeFile(statePath, `${JSON.stringify(state, null, 2)}\n`);
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
async function isRegularFile(path) {
|
|
222
|
-
try {
|
|
223
|
-
return (await lstat(path)).isFile();
|
|
224
|
-
} catch (error) {
|
|
225
|
-
if (error instanceof Error && "code" in error && error.code === "ENOENT") return false;
|
|
226
|
-
throw error;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
async function isRegularDirectory(path) {
|
|
231
|
-
try {
|
|
232
|
-
return (await lstat(path)).isDirectory();
|
|
233
|
-
} catch (error) {
|
|
234
|
-
if (error instanceof Error && "code" in error && error.code === "ENOENT") return false;
|
|
235
|
-
throw error;
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
function replaceOrInsertRootSetting(config, key, value) {
|
|
240
|
-
const lines = config.split(/\n/);
|
|
241
|
-
const output = [];
|
|
242
|
-
let replaced = false;
|
|
243
|
-
let inserted = false;
|
|
244
|
-
for (const line of lines) {
|
|
245
|
-
if (!inserted && isSectionHeader(line)) {
|
|
246
|
-
if (!replaced) output.push(`${key} = ${value}`);
|
|
247
|
-
inserted = true;
|
|
248
|
-
}
|
|
249
|
-
if (isRootSetting(line, key)) {
|
|
250
|
-
if (!replaced) {
|
|
251
|
-
output.push(`${key} = ${value}`);
|
|
252
|
-
replaced = true;
|
|
253
|
-
}
|
|
254
|
-
continue;
|
|
255
|
-
}
|
|
256
|
-
output.push(line);
|
|
257
|
-
}
|
|
258
|
-
if (!replaced && !inserted) output.push(`${key} = ${value}`);
|
|
259
|
-
return output.join("\n");
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
function isSectionHeader(line) {
|
|
263
|
-
const trimmed = line.trim();
|
|
264
|
-
return trimmed.startsWith("[") && trimmed.endsWith("]");
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
function isRootSetting(line, key) {
|
|
268
|
-
const trimmed = line.trimStart();
|
|
269
|
-
if (trimmed.startsWith("#") || trimmed.startsWith("[")) return false;
|
|
270
|
-
const match = trimmed.match(/^([A-Za-z_][A-Za-z0-9_]*)\s*=/);
|
|
271
|
-
return match?.[1] === key;
|
|
272
|
-
}
|
|
273
|
-
|
|
274
86
|
if (process.argv[1] !== undefined && import.meta.url === pathToFileURL(process.argv[1]).href) {
|
|
275
87
|
migrateCodexConfig().catch((error) => {
|
|
276
88
|
if (!(error instanceof Error)) throw error;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const WINDOWS_CMD_SHIM_COMMANDS = new Set(["npm", "npx"]);
|
|
2
|
+
|
|
3
|
+
export function resolveSpawnInvocation(command, args, platform = process.platform) {
|
|
4
|
+
const invocation = { command, args: Array.from(args) };
|
|
5
|
+
if (platform !== "win32") return invocation;
|
|
6
|
+
if (!WINDOWS_CMD_SHIM_COMMANDS.has(command.toLowerCase())) return invocation;
|
|
7
|
+
return {
|
|
8
|
+
command: "cmd.exe",
|
|
9
|
+
args: ["/d", "/s", "/c", `${command}.cmd`, ...invocation.args],
|
|
10
|
+
};
|
|
11
|
+
}
|
|
@@ -31,17 +31,17 @@ async function readPackageVersion(path) {
|
|
|
31
31
|
return packageJson.version;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
async function
|
|
34
|
+
async function readComponentNames(root) {
|
|
35
35
|
const componentsRoot = join(root, "components");
|
|
36
36
|
const entries = await readdir(componentsRoot, { withFileTypes: true });
|
|
37
|
-
const
|
|
37
|
+
const names = [];
|
|
38
38
|
for (const entry of entries) {
|
|
39
39
|
if (!entry.isDirectory()) continue;
|
|
40
40
|
const packageJsonPath = join(componentsRoot, entry.name, "package.json");
|
|
41
41
|
if (!(await exists(packageJsonPath))) continue;
|
|
42
|
-
|
|
42
|
+
names.push(entry.name);
|
|
43
43
|
}
|
|
44
|
-
return
|
|
44
|
+
return names;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
function syncHooksJson(hooksJson, versionForCommand) {
|
|
@@ -64,16 +64,30 @@ async function syncComponentHooks(root, componentName, version) {
|
|
|
64
64
|
await writeJson(hooksPath, hooksJson);
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
67
|
+
function normalizeReleaseVersion(version) {
|
|
68
|
+
if (typeof version !== "string") return "";
|
|
69
|
+
return version.trim();
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function readReleaseVersion(options) {
|
|
73
|
+
const releaseVersion = normalizeReleaseVersion(options.releaseVersion ?? process.env.LAZYCODEX_RELEASE_VERSION);
|
|
74
|
+
if (releaseVersion.length > 0) return releaseVersion;
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export async function syncHookStatusMessages(root = defaultRoot, options = {}) {
|
|
79
|
+
const releaseVersion = readReleaseVersion(options);
|
|
80
|
+
const aggregateVersion = releaseVersion ?? (await readPackageVersion(join(root, ".codex-plugin", "plugin.json")));
|
|
81
|
+
const componentNames = await readComponentNames(root);
|
|
70
82
|
const aggregateHooksPath = join(root, "hooks", "hooks.json");
|
|
71
83
|
const aggregateHooks = await readJson(aggregateHooksPath);
|
|
72
84
|
syncHooksJson(aggregateHooks, () => aggregateVersion);
|
|
73
85
|
await writeJson(aggregateHooksPath, aggregateHooks);
|
|
74
86
|
|
|
75
|
-
for (const
|
|
76
|
-
|
|
87
|
+
for (const componentName of componentNames) {
|
|
88
|
+
const componentVersion =
|
|
89
|
+
releaseVersion ?? (await readPackageVersion(join(root, "components", componentName, "package.json")));
|
|
90
|
+
await syncComponentHooks(root, componentName, componentVersion);
|
|
77
91
|
}
|
|
78
92
|
}
|
|
79
93
|
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { cp, mkdir, readdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
|
-
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
5
5
|
import { sharedSkillsRootPath } from "@oh-my-opencode/shared-skills";
|
|
6
6
|
|
|
7
7
|
const root = dirname(dirname(fileURLToPath(import.meta.url)));
|
|
8
8
|
const sharedSkillsRoot = sharedSkillsRootPath();
|
|
9
9
|
const skillsRoot = join(root, "skills");
|
|
10
|
+
const sourceTestFilePattern = /\.test\.ts$/;
|
|
10
11
|
const skillSources = [
|
|
11
12
|
["comment-checker", "components/comment-checker/skills/comment-checker"],
|
|
12
13
|
["lsp", "components/lsp/skills/lsp"],
|
|
13
14
|
["rules", "components/rules/skills/rules"],
|
|
14
15
|
["ulw-loop", "components/ulw-loop/skills/ulw-loop"],
|
|
16
|
+
["ulw-plan", "components/ultrawork/skills/ulw-plan"],
|
|
15
17
|
];
|
|
16
18
|
|
|
17
19
|
const opencodeOnlyOrchestrationPattern = /\b(?:call_omo_agent|background_output|team_[a-z_]+|task)\s*\(/;
|
|
@@ -22,54 +24,155 @@ This skill may include examples copied from the OpenCode harness. In Codex, do n
|
|
|
22
24
|
|
|
23
25
|
| OpenCode example | Codex tool to use |
|
|
24
26
|
| --- | --- |
|
|
25
|
-
| \`call_omo_agent(subagent_type="explore", ...)\` | \`spawn_agent(
|
|
26
|
-
| \`call_omo_agent(subagent_type="librarian", ...)\` | \`spawn_agent(
|
|
27
|
-
| \`task(subagent_type="plan", ...)\` | \`spawn_agent(
|
|
28
|
-
| \`task(subagent_type="oracle", ...)\` for final verification | \`spawn_agent(
|
|
29
|
-
| \`task(category="...", ...)\` for implementation or QA | \`spawn_agent(
|
|
30
|
-
| \`background_output(task_id="...")\` | \`wait_agent(...)\`
|
|
27
|
+
| \`call_omo_agent(subagent_type="explore", ...)\` | \`spawn_agent({"task_name":"...","message":"TASK: act as an explorer. ...","fork_turns":"none"})\` |
|
|
28
|
+
| \`call_omo_agent(subagent_type="librarian", ...)\` | \`spawn_agent({"task_name":"...","message":"TASK: act as a librarian. ...","fork_turns":"none"})\` |
|
|
29
|
+
| \`task(subagent_type="plan", ...)\` | \`spawn_agent({"task_name":"...","message":"TASK: act as a planning agent. ...","fork_turns":"none"})\` |
|
|
30
|
+
| \`task(subagent_type="oracle", ...)\` for final verification | \`spawn_agent({"task_name":"...","message":"TASK: act as a rigorous reviewer. ...","fork_turns":"none"})\` |
|
|
31
|
+
| \`task(category="...", ...)\` for implementation or QA | \`spawn_agent({"task_name":"...","message":"TASK: act as an implementation or QA worker. ...","fork_turns":"none"})\` |
|
|
32
|
+
| \`background_output(task_id="...")\` | \`wait_agent(...)\` for mailbox signals; after a timeout, run one \`list_agents\` check for the named child if reassurance is needed |
|
|
31
33
|
| \`team_*(...)\` | Use Codex native subagents plus \`send_message\`, \`followup_task\`, \`wait_agent\`, and \`close_agent\` |
|
|
32
34
|
|
|
33
|
-
Codex full-history forks inherit
|
|
35
|
+
Codex full-history forks inherit parent context, so role-specific behavior must be described in a self-contained \`message\` and usually should use a non-full-history fork mode such as \`fork_turns="none"\`. Include any required conversation context, files, diffs, constraints, and requested skill names directly in the spawned agent's \`message\`. If a code block below conflicts with this section, this section wins.
|
|
36
|
+
|
|
37
|
+
For work likely to exceed one wait cycle, require the child to send \`WORKING: <task> - <current phase>\` before long passes and \`BLOCKED: <reason>\` only when progress stops. A \`wait_agent\` timeout only means no new mailbox update arrived. Treat a running child or latest \`WORKING:\` message as alive. Do not use \`list_agents\` as a polling loop. Fallback only when the child is completed without the deliverable, ack-only after followup, explicitly \`BLOCKED:\`, or no longer running.
|
|
34
38
|
|
|
35
39
|
`;
|
|
36
40
|
|
|
37
|
-
|
|
41
|
+
const codexCompatibilityEndMarkers = [
|
|
42
|
+
"For work likely to exceed one wait cycle, require the child to send `WORKING: <task> - <current phase>` before long passes and `BLOCKED: <reason>` only when progress stops. A `wait_agent` timeout only means no new mailbox update arrived. Treat a running child or latest `WORKING:` message as alive. Do not use `list_agents` as a polling loop. Fallback only when the child is completed without the deliverable, ack-only after followup, explicitly `BLOCKED:`, or no longer running.\n\n",
|
|
43
|
+
"Codex full-history forks inherit parent context, so role-specific behavior must be described in a self-contained `message` and usually should use a non-full-history fork mode such as `fork_turns=\"none\"`. Include any required conversation context, files, diffs, constraints, and requested skill names directly in the spawned agent's `message`. If a code block below conflicts with this section, this section wins.\n\n",
|
|
44
|
+
"When translating `load_skills=[...]`, include the requested skill names in the spawned agent's `message`. If a code block below conflicts with this section, this section wins.\n\n",
|
|
45
|
+
"When translating `load_skills=[...]`, name the skills inside the spawned agent's `message`. If a code block below conflicts with this section, this section wins.\n\n",
|
|
46
|
+
];
|
|
47
|
+
|
|
48
|
+
function findCodexCompatibilitySectionEnd(content, searchStart) {
|
|
49
|
+
const structuralEndPattern = /\n(?:---|#{1,6}\s)/g;
|
|
50
|
+
structuralEndPattern.lastIndex = searchStart;
|
|
51
|
+
const structuralEnd = structuralEndPattern.exec(content);
|
|
52
|
+
if (structuralEnd) return structuralEnd.index + 1;
|
|
53
|
+
|
|
54
|
+
const knownEndMarker = codexCompatibilityEndMarkers.find((marker) => content.indexOf(marker, searchStart) !== -1);
|
|
55
|
+
if (knownEndMarker === undefined) return content.length;
|
|
56
|
+
|
|
57
|
+
return content.indexOf(knownEndMarker, searchStart) + knownEndMarker.length;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function removeCodexCompatibilityGuidance(content) {
|
|
61
|
+
const heading = "## Codex Harness Tool Compatibility";
|
|
62
|
+
let withoutGuidance = content;
|
|
63
|
+
|
|
64
|
+
while (true) {
|
|
65
|
+
const start = withoutGuidance.indexOf(heading);
|
|
66
|
+
if (start === -1) return withoutGuidance;
|
|
67
|
+
|
|
68
|
+
const end = findCodexCompatibilitySectionEnd(withoutGuidance, start + heading.length);
|
|
69
|
+
|
|
70
|
+
withoutGuidance = `${withoutGuidance.slice(0, start)}${withoutGuidance.slice(end)}`;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export function insertCodexCompatibilityGuidance(content) {
|
|
38
75
|
if (!opencodeOnlyOrchestrationPattern.test(content)) return content;
|
|
39
|
-
|
|
76
|
+
const firstExampleIndex = content.search(opencodeOnlyOrchestrationPattern);
|
|
77
|
+
const compatibilityIndex = content.indexOf("## Codex Harness Tool Compatibility");
|
|
78
|
+
if (compatibilityIndex !== -1 && compatibilityIndex < firstExampleIndex) return content;
|
|
40
79
|
|
|
41
|
-
const
|
|
80
|
+
const contentWithoutGuidance = removeCodexCompatibilityGuidance(content);
|
|
81
|
+
|
|
82
|
+
const frontmatterMatch = contentWithoutGuidance.match(/^---\n[\s\S]*?\n---\n+/);
|
|
42
83
|
if (!frontmatterMatch) {
|
|
43
|
-
return `${codexHarnessToolCompatibility}${
|
|
84
|
+
return `${codexHarnessToolCompatibility}${contentWithoutGuidance}`;
|
|
44
85
|
}
|
|
45
86
|
|
|
46
|
-
return `${frontmatterMatch[0]}${codexHarnessToolCompatibility}${
|
|
87
|
+
return `${frontmatterMatch[0]}${codexHarnessToolCompatibility}${contentWithoutGuidance.slice(frontmatterMatch[0].length)}`;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const startWorkOriginalCompletion = `When all top-level checkboxes in \`## TODOs\` and \`## Final Verification Wave\` are complete:
|
|
91
|
+
|
|
92
|
+
1. Run the plan's final verification commands.
|
|
93
|
+
2. If worktree mode was used, sync \`.omo/\` state back to the main repo, merge or hand off exactly as requested, and remove the worktree only after successful merge or explicit handoff.
|
|
94
|
+
3. Remove or mark the Boulder work as completed.
|
|
95
|
+
4. Print an \`ORCHESTRATION COMPLETE\` block with the plan path, verification commands, artifacts, and cleanup receipts.`;
|
|
96
|
+
|
|
97
|
+
const startWorkCodexCompletion = `When all top-level checkboxes in \`## TODOs\` and \`## Final Verification Wave\` are complete:
|
|
98
|
+
|
|
99
|
+
1. Run the plan's final verification commands.
|
|
100
|
+
2. Complete the **Global Review and Debugging Gate** before any completion claim, PR handoff, or branch handoff:
|
|
101
|
+
- Invoke the \`review-work\` skill with the final diff, changed files, user goal, constraints, run command, and verification evidence. All five review lanes must return PASS. A timeout, missing deliverable, ack-only child, \`BLOCKED:\`, or inconclusive lane is a gate failure, not approval.
|
|
102
|
+
- Run a debugging-oriented runtime audit even when the review passes: name at least three plausible failure hypotheses for the changed surface, run the distinguishing checks against the actual artifact, and append the ruled-out or confirmed result to \`.omo/start-work/ledger.jsonl\`.
|
|
103
|
+
- If any review lane or debugging hypothesis fails, invoke the \`debugging\` skill, confirm root cause with runtime evidence, add the minimal failing test or reproduction, fix it, rerun the affected verification, then rerun the Global Review and Debugging Gate.
|
|
104
|
+
- Evidence hygiene is mandatory: redact or mask secrets and sensitive user data before writing \`.omo/start-work/ledger.jsonl\`, a PR body, or a handoff. Never include raw tokens, credentials, auth headers, cookies, API keys, env dumps, private logs, or PII; use concise summaries, lengths, hashes, or short non-sensitive prefixes instead.
|
|
105
|
+
- If the work includes creating, updating, or handing off a PR, refresh \`git status\` and the PR/branch state after the gate, and include only redacted review/debugging evidence in the PR body or handoff.
|
|
106
|
+
3. If worktree mode was used, sync \`.omo/\` state back to the main repo, merge or hand off exactly as requested, and remove the worktree only after successful merge or explicit handoff.
|
|
107
|
+
4. Remove or mark the Boulder work as completed.
|
|
108
|
+
5. Print an \`ORCHESTRATION COMPLETE\` block with the plan path, verification commands, Global Review and Debugging Gate verdict, artifacts, and cleanup receipts.`;
|
|
109
|
+
|
|
110
|
+
const startWorkOriginalHardRule = "- No completion claim while an applicable ultraqa adversarial class was never probed. Each applicable class needs a captured observable result; each skipped class needs a one-line not-applicable reason in the ledger.\n- No unprefixed session ids in Boulder state. Codex sessions are always `codex:<session_id>`.";
|
|
111
|
+
|
|
112
|
+
const startWorkCodexHardRule = "- No completion claim while an applicable ultraqa adversarial class was never probed. Each applicable class needs a captured observable result; each skipped class needs a one-line not-applicable reason in the ledger.\n- No `ORCHESTRATION COMPLETE`, final response, PR creation, or PR handoff before the Global Review and Debugging Gate passes with recorded evidence.\n- No unprefixed session ids in Boulder state. Codex sessions are always `codex:<session_id>`.";
|
|
113
|
+
|
|
114
|
+
const reviewWorkAnchor = "Launch 5 specialized sub-agents in parallel to review completed implementation work from every angle. All 5 must pass for the review to pass. If even ONE fails, the review fails.\n";
|
|
115
|
+
|
|
116
|
+
const reviewWorkCodexGate = `
|
|
117
|
+
When \`review-work\` is used as a final implementation, PR, or \`$start-work\`
|
|
118
|
+
gate, it is blocking. A timeout, missing deliverable, ack-only response,
|
|
119
|
+
explicit \`BLOCKED:\`, or inconclusive lane is not a pass. Treat that lane as
|
|
120
|
+
failed, investigate the underlying uncertainty with the \`debugging\` skill when
|
|
121
|
+
runtime behavior may be wrong, fix with evidence, and rerun the affected lane
|
|
122
|
+
before claiming completion or handing off a PR.
|
|
123
|
+
|
|
124
|
+
Review evidence must be safe to share. Redact or mask secrets and sensitive
|
|
125
|
+
user data before including evidence in logs, PR bodies, or handoffs. Never
|
|
126
|
+
include raw tokens, credentials, auth headers, cookies, API keys, env dumps,
|
|
127
|
+
private logs, or PII; summarize with lengths, hashes, and short non-sensitive
|
|
128
|
+
prefixes when identity is needed.
|
|
129
|
+
`;
|
|
130
|
+
|
|
131
|
+
function applyCodexSkillOverlays(skillName, content) {
|
|
132
|
+
if (skillName === "start-work") {
|
|
133
|
+
return content
|
|
134
|
+
.replace(startWorkOriginalCompletion, startWorkCodexCompletion)
|
|
135
|
+
.replace(startWorkOriginalHardRule, startWorkCodexHardRule);
|
|
136
|
+
}
|
|
137
|
+
if (skillName === "review-work" && !content.includes("When `review-work` is used as a final implementation")) {
|
|
138
|
+
return content.replace(reviewWorkAnchor, `${reviewWorkAnchor}${reviewWorkCodexGate}`);
|
|
139
|
+
}
|
|
140
|
+
return content;
|
|
47
141
|
}
|
|
48
142
|
|
|
49
143
|
async function adaptSkillForCodex(skillName) {
|
|
50
144
|
const skillPath = join(skillsRoot, skillName, "SKILL.md");
|
|
51
145
|
const content = await readFile(skillPath, "utf8");
|
|
52
|
-
const adapted = insertCodexCompatibilityGuidance(content);
|
|
146
|
+
const adapted = applyCodexSkillOverlays(skillName, insertCodexCompatibilityGuidance(content));
|
|
53
147
|
if (adapted !== content) {
|
|
54
148
|
await writeFile(skillPath, adapted, "utf8");
|
|
55
149
|
}
|
|
56
150
|
}
|
|
57
151
|
|
|
58
|
-
|
|
59
|
-
await
|
|
152
|
+
async function syncSkills() {
|
|
153
|
+
await rm(skillsRoot, { recursive: true, force: true });
|
|
154
|
+
await mkdir(skillsRoot, { recursive: true });
|
|
60
155
|
|
|
61
|
-
for (const [name, source] of skillSources) {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
156
|
+
for (const [name, source] of skillSources) {
|
|
157
|
+
await cp(join(root, source), join(skillsRoot, name), { recursive: true });
|
|
158
|
+
await adaptSkillForCodex(name);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const sharedSkillEntries = await readdir(sharedSkillsRoot, { withFileTypes: true });
|
|
162
|
+
const sharedSkillNames = sharedSkillEntries
|
|
163
|
+
.filter((entry) => entry.isDirectory())
|
|
164
|
+
.map((entry) => entry.name)
|
|
165
|
+
.sort();
|
|
65
166
|
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
167
|
+
for (const skillName of sharedSkillNames) {
|
|
168
|
+
await cp(join(sharedSkillsRoot, skillName), join(skillsRoot, skillName), {
|
|
169
|
+
filter: (source) => !sourceTestFilePattern.test(source),
|
|
170
|
+
recursive: true,
|
|
171
|
+
});
|
|
172
|
+
await adaptSkillForCodex(skillName);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
71
175
|
|
|
72
|
-
|
|
73
|
-
await
|
|
74
|
-
await adaptSkillForCodex(skillName);
|
|
176
|
+
if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
|
|
177
|
+
await syncSkills();
|
|
75
178
|
}
|
package/packages/omo-codex/plugin/skills/debugging/references/methodology/04-oracle-triple.md
CHANGED
|
@@ -48,7 +48,7 @@ task(subagent_type="oracle", load_skills=[], run_in_background=true,
|
|
|
48
48
|
- attached to the wrong instance of the service
|
|
49
49
|
- test harness running different code than the app
|
|
50
50
|
- editing src/ while running dist/
|
|
51
|
-
|
|
51
|
+
|
|
52
52
|
Give me exactly three candidate causes ranked by likelihood, with one sentence each explaining why our evidence is consistent with each.")
|
|
53
53
|
|
|
54
54
|
task(subagent_type="oracle", load_skills=[], run_in_background=true,
|
|
@@ -64,7 +64,7 @@ task(subagent_type="oracle", load_skills=[], run_in_background=true,
|
|
|
64
64
|
- shared-library version mismatch (system lib vs bundled lib)
|
|
65
65
|
- ABI difference (native addons, glibc versions, musl vs glibc)
|
|
66
66
|
- wrong transport (HTTP/1.1 vs HTTP/2, TLS version negotiation)
|
|
67
|
-
|
|
67
|
+
|
|
68
68
|
Give me three candidate causes, each naming the specific boundary and the specific contract assumption that might be violated.")
|
|
69
69
|
|
|
70
70
|
task(subagent_type="oracle", load_skills=[], run_in_background=true,
|
|
@@ -75,7 +75,7 @@ task(subagent_type="oracle", load_skills=[], run_in_background=true,
|
|
|
75
75
|
Enumerate the five assumptions most load-bearing to our current hypotheses, then for each:
|
|
76
76
|
- describe the smallest runtime query that would falsify it
|
|
77
77
|
- predict what the observable would be if the invariant holds vs if it fails
|
|
78
|
-
|
|
78
|
+
|
|
79
79
|
We want at least one of these queries to be decisive.")
|
|
80
80
|
```
|
|
81
81
|
|