oh-my-opencode 4.7.4 → 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 +4492 -2265
- 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 +16 -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 +52 -0
- 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 +26 -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 +173 -61
- 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 +204 -26
- 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
|
@@ -23,7 +23,7 @@ export async function updateCodexConfig({
|
|
|
23
23
|
configPath,
|
|
24
24
|
repoRoot,
|
|
25
25
|
marketplaceName,
|
|
26
|
-
marketplaceSource = defaultMarketplaceSource(
|
|
26
|
+
marketplaceSource = defaultMarketplaceSource(repoRoot),
|
|
27
27
|
pluginNames,
|
|
28
28
|
platform = process.platform,
|
|
29
29
|
trustedHookStates = [],
|
|
@@ -53,7 +53,7 @@ export async function updateCodexConfig({
|
|
|
53
53
|
for (const pluginName of pluginNames) {
|
|
54
54
|
config = ensurePluginEnabled(config, `${pluginName}@${marketplaceName}`);
|
|
55
55
|
}
|
|
56
|
-
config =
|
|
56
|
+
config = ensureOmoBuiltinMcpPolicies(config, { marketplaceName, pluginNames, platform });
|
|
57
57
|
for (const state of trustedHookStates) {
|
|
58
58
|
config = ensureHookTrusted(config, state.key, state.trustedHash);
|
|
59
59
|
}
|
|
@@ -72,7 +72,7 @@ function removeMarketplaceBlock(config, marketplaceName) {
|
|
|
72
72
|
return removeTomlSections(config, (header) => header === `marketplaces.${marketplaceName}`);
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
-
function defaultMarketplaceSource(
|
|
75
|
+
function defaultMarketplaceSource(repoRoot) {
|
|
76
76
|
return {
|
|
77
77
|
sourceType: "local",
|
|
78
78
|
source: repoRoot,
|
|
@@ -154,9 +154,11 @@ function ensurePluginMcpEnabled(config, pluginKey, serverName, enabled) {
|
|
|
154
154
|
return replaceOrInsertSetting(config, section, "enabled", enabledValue);
|
|
155
155
|
}
|
|
156
156
|
|
|
157
|
-
function
|
|
157
|
+
function ensureOmoBuiltinMcpPolicies(config, { marketplaceName, pluginNames, platform }) {
|
|
158
158
|
if (marketplaceName !== "sisyphuslabs" || !pluginNames.includes("omo")) return config;
|
|
159
|
-
|
|
159
|
+
let nextConfig = ensurePluginMcpEnabled(config, "omo@sisyphuslabs", "context7", true);
|
|
160
|
+
nextConfig = ensurePluginMcpEnabled(nextConfig, "omo@sisyphuslabs", "git_bash", platform === "win32");
|
|
161
|
+
return nextConfig;
|
|
160
162
|
}
|
|
161
163
|
|
|
162
164
|
function ensureHookTrusted(config, key, trustedHash) {
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { readdir, readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
|
|
4
|
+
export async function readDistributionManifest(repoRoot) {
|
|
5
|
+
try {
|
|
6
|
+
const parsed = JSON.parse(await readFile(join(repoRoot, "package.json"), "utf8"));
|
|
7
|
+
if (typeof parsed.version !== "string" || parsed.version.trim().length === 0) return undefined;
|
|
8
|
+
return {
|
|
9
|
+
name: typeof parsed.name === "string" && parsed.name.trim().length > 0 ? parsed.name.trim() : "lazycodex-ai",
|
|
10
|
+
version: parsed.version.trim(),
|
|
11
|
+
};
|
|
12
|
+
} catch (error) {
|
|
13
|
+
if (error instanceof Error) return undefined;
|
|
14
|
+
throw error;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function resolveLazyCodexPluginVersion({ manifestVersion, marketplaceName, pluginName, distributionManifest }) {
|
|
19
|
+
if (marketplaceName === "sisyphuslabs" && pluginName === "omo" && distributionManifest !== undefined) {
|
|
20
|
+
return distributionManifest.version;
|
|
21
|
+
}
|
|
22
|
+
return manifestVersion ?? "local";
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export async function stampLazyCodexPluginVersion({ pluginRoot, version }) {
|
|
26
|
+
await stampJsonVersion(join(pluginRoot, ".codex-plugin", "plugin.json"), version);
|
|
27
|
+
await stampJsonVersion(join(pluginRoot, "package.json"), version);
|
|
28
|
+
await stampHookStatusMessages(join(pluginRoot, "hooks", "hooks.json"), version);
|
|
29
|
+
await stampComponentVersions({ pluginRoot, version });
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export async function writeLazyCodexInstallSnapshot({ pluginRoot, distributionManifest }) {
|
|
33
|
+
if (distributionManifest === undefined) return;
|
|
34
|
+
await writeFile(
|
|
35
|
+
join(pluginRoot, "lazycodex-install.json"),
|
|
36
|
+
`${JSON.stringify(
|
|
37
|
+
{
|
|
38
|
+
packageName: distributionManifest.name,
|
|
39
|
+
version: distributionManifest.version,
|
|
40
|
+
},
|
|
41
|
+
null,
|
|
42
|
+
"\t",
|
|
43
|
+
)}\n`,
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
async function stampJsonVersion(path, version) {
|
|
48
|
+
try {
|
|
49
|
+
const parsed = JSON.parse(await readFile(path, "utf8"));
|
|
50
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) return;
|
|
51
|
+
parsed.version = version;
|
|
52
|
+
await writeFile(path, `${JSON.stringify(parsed, null, "\t")}\n`);
|
|
53
|
+
} catch (error) {
|
|
54
|
+
if (error instanceof Error) return;
|
|
55
|
+
throw error;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
async function stampHookStatusMessages(path, version) {
|
|
60
|
+
try {
|
|
61
|
+
const parsed = JSON.parse(await readFile(path, "utf8"));
|
|
62
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) return;
|
|
63
|
+
stampHookGroups(parsed.hooks, version);
|
|
64
|
+
await writeFile(path, `${JSON.stringify(parsed, null, "\t")}\n`);
|
|
65
|
+
} catch (error) {
|
|
66
|
+
if (error instanceof Error) return;
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
async function stampComponentVersions({ pluginRoot, version }) {
|
|
72
|
+
let entries;
|
|
73
|
+
try {
|
|
74
|
+
entries = await readdir(join(pluginRoot, "components"));
|
|
75
|
+
} catch (error) {
|
|
76
|
+
if (error instanceof Error) return;
|
|
77
|
+
throw error;
|
|
78
|
+
}
|
|
79
|
+
for (const entry of entries) {
|
|
80
|
+
const componentRoot = join(pluginRoot, "components", entry);
|
|
81
|
+
await stampJsonVersion(join(componentRoot, "package.json"), version);
|
|
82
|
+
await stampHookStatusMessages(join(componentRoot, "hooks", "hooks.json"), version);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function stampHookGroups(hooks, version) {
|
|
87
|
+
if (typeof hooks !== "object" || hooks === null || Array.isArray(hooks)) return;
|
|
88
|
+
for (const groups of Object.values(hooks)) {
|
|
89
|
+
if (!Array.isArray(groups)) continue;
|
|
90
|
+
for (const group of groups) {
|
|
91
|
+
if (typeof group !== "object" || group === null || !Array.isArray(group.hooks)) continue;
|
|
92
|
+
for (const hook of group.hooks) {
|
|
93
|
+
stampHookStatusMessage(hook, version);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function stampHookStatusMessage(hook, version) {
|
|
100
|
+
if (typeof hook !== "object" || hook === null || typeof hook.statusMessage !== "string") return;
|
|
101
|
+
hook.statusMessage = hook.statusMessage.replace(/^LazyCodex\([^)]+\):/, `LazyCodex(${version}):`);
|
|
102
|
+
}
|
|
@@ -4,6 +4,7 @@ import { join } from "node:path";
|
|
|
4
4
|
import { COMMAND_SHIM_MARKER } from "./command-shim.mjs";
|
|
5
5
|
|
|
6
6
|
const LEGACY_CODEX_COMPONENT_BINS = [
|
|
7
|
+
{ name: "omo", component: "ulw-loop" },
|
|
7
8
|
{ name: "codex-comment-checker", component: "comment-checker" },
|
|
8
9
|
{ name: "codex-lsp", component: "lsp" },
|
|
9
10
|
{ name: "codex-rules", component: "rules" },
|
|
@@ -46,7 +47,7 @@ function isManagedLegacyComponentTarget(target, component) {
|
|
|
46
47
|
suffix[1] === component &&
|
|
47
48
|
suffix[2] === "dist" &&
|
|
48
49
|
suffix[3] === "cli.js" &&
|
|
49
|
-
hasPluginCachePrefix(parts, suffixStart)
|
|
50
|
+
(hasPluginCachePrefix(parts, suffixStart) || hasOmoCodexPluginPrefix(parts, suffixStart))
|
|
50
51
|
);
|
|
51
52
|
}
|
|
52
53
|
|
|
@@ -56,3 +57,10 @@ function hasPluginCachePrefix(parts, endExclusive) {
|
|
|
56
57
|
}
|
|
57
58
|
return false;
|
|
58
59
|
}
|
|
60
|
+
|
|
61
|
+
function hasOmoCodexPluginPrefix(parts, endExclusive) {
|
|
62
|
+
for (let index = 0; index <= endExclusive - 3; index += 1) {
|
|
63
|
+
if (parts[index] === "packages" && parts[index + 1] === "omo-codex" && parts[index + 2] === "plugin") return true;
|
|
64
|
+
}
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
@@ -8,7 +8,15 @@ const FALLBACK_CODEX_MODEL_CATALOG = {
|
|
|
8
8
|
modelReasoningEffort: "high",
|
|
9
9
|
planModeReasoningEffort: "xhigh",
|
|
10
10
|
},
|
|
11
|
-
managedProfiles: [
|
|
11
|
+
managedProfiles: [
|
|
12
|
+
{
|
|
13
|
+
model: "gpt-5.5",
|
|
14
|
+
modelContextWindow: 1_000_000,
|
|
15
|
+
modelReasoningEffort: "high",
|
|
16
|
+
planModeReasoningEffort: "xhigh",
|
|
17
|
+
},
|
|
18
|
+
{ model: "gpt-5.5", modelContextWindow: 272_000 },
|
|
19
|
+
],
|
|
12
20
|
};
|
|
13
21
|
|
|
14
22
|
export async function readCodexModelCatalog(codexPackageRoot) {
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
|
+
import { resolveSpawnInvocation } from "../../plugin/scripts/spawn-command.mjs";
|
|
2
3
|
|
|
3
4
|
export async function defaultRunCommand(command, args, options) {
|
|
4
5
|
await new Promise((resolvePromise, reject) => {
|
|
5
|
-
const
|
|
6
|
+
const invocation = resolveSpawnInvocation(command, args);
|
|
7
|
+
const child = spawn(invocation.command, invocation.args, {
|
|
6
8
|
cwd: options.cwd,
|
|
7
9
|
stdio: "inherit",
|
|
8
10
|
});
|
|
@@ -49,6 +49,5 @@ function shouldCopyMarketplaceSourcePath(path, root) {
|
|
|
49
49
|
const relative = path === root ? "" : path.slice(root.length + sep.length);
|
|
50
50
|
if (relative === "") return true;
|
|
51
51
|
const parts = relative.split(sep);
|
|
52
|
-
if (parts[parts.length - 1] === "package-lock.json") return false;
|
|
53
52
|
return !parts.some((part) => part === ".git" || part === "node_modules");
|
|
54
53
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import assert from "node:assert/strict";
|
|
2
|
-
import { lstat, mkdir, readFile,
|
|
2
|
+
import { lstat, mkdir, readFile, rm, symlink, writeFile } from "node:fs/promises";
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import test from "node:test";
|
|
5
5
|
|
|
@@ -9,8 +9,8 @@ import { makeTempDir, writeJson, writePluginAt } from "./install-test-fixtures.m
|
|
|
9
9
|
const legacyCodexPluginMarketplace = ["code", "yeongyu", "codex", "plugins"].join("-");
|
|
10
10
|
|
|
11
11
|
test(
|
|
12
|
-
"#given bundled agent roles and stale legacy links #when installing locally #then
|
|
13
|
-
{ skip: process.platform === "win32" ? "
|
|
12
|
+
"#given bundled agent roles and stale legacy links #when installing locally #then installs durable Codex agent files",
|
|
13
|
+
{ skip: process.platform === "win32" ? "test sets up a Unix legacy symlink fixture" : false },
|
|
14
14
|
async () => {
|
|
15
15
|
const repoRoot = await makeTempDir();
|
|
16
16
|
const codexHome = await makeTempDir();
|
|
@@ -45,8 +45,9 @@ test(
|
|
|
45
45
|
const snapshotPluginPath = join(codexHome, ".tmp", "marketplaces", "sisyphuslabs", "plugins", "omo");
|
|
46
46
|
for (const agentName of ["explorer", "librarian", "plan"]) {
|
|
47
47
|
const agentPath = join(codexHome, "agents", `${agentName}.toml`);
|
|
48
|
-
|
|
49
|
-
assert.equal(
|
|
48
|
+
const agentStat = await lstat(agentPath);
|
|
49
|
+
assert.equal(agentStat.isSymbolicLink(), false);
|
|
50
|
+
assert.equal(agentStat.isFile(), true);
|
|
50
51
|
assert.equal(await readFile(agentPath, "utf8"), `name = "${agentName}"\n`);
|
|
51
52
|
}
|
|
52
53
|
|
|
@@ -60,8 +61,7 @@ test(
|
|
|
60
61
|
);
|
|
61
62
|
|
|
62
63
|
test(
|
|
63
|
-
"#given local sisyphuslabs install #when plugin cache is pruned #then agent
|
|
64
|
-
{ skip: process.platform === "win32" ? "Windows copies agent files instead of symlinking them" : false },
|
|
64
|
+
"#given local sisyphuslabs install #when plugin cache is pruned #then agent files still resolve from Codex home",
|
|
65
65
|
async () => {
|
|
66
66
|
const repoRoot = await makeTempDir();
|
|
67
67
|
const codexHome = await makeTempDir();
|
|
@@ -93,12 +93,206 @@ test(
|
|
|
93
93
|
await rm(pluginPath, { recursive: true, force: true });
|
|
94
94
|
|
|
95
95
|
const agentPath = join(codexHome, "agents", "explorer.toml");
|
|
96
|
-
assert.equal(
|
|
97
|
-
await readlink(agentPath),
|
|
98
|
-
join(codexHome, ".tmp", "marketplaces", "sisyphuslabs", "plugins", "omo", "components", "ultrawork", "agents", "explorer.toml"),
|
|
99
|
-
);
|
|
96
|
+
assert.equal((await lstat(agentPath)).isFile(), true);
|
|
100
97
|
assert.equal(await readFile(agentPath, "utf8"), 'name = "explorer"\n');
|
|
101
98
|
assert.equal(await readFile(join(snapshotRoot, ".git", "config"), "utf8"), "[remote \"origin\"]\n");
|
|
102
99
|
assert.equal(await readFile(join(snapshotRoot, ".codex-marketplace-install.json"), "utf8"), '{"source_type":"git"}\n');
|
|
103
100
|
},
|
|
104
101
|
);
|
|
102
|
+
|
|
103
|
+
test("#given local sisyphuslabs install #when temporary marketplace snapshot is removed #then agent files still resolve from Codex home", async () => {
|
|
104
|
+
const repoRoot = await makeTempDir();
|
|
105
|
+
const codexHome = await makeTempDir();
|
|
106
|
+
const codexPackageRoot = join(repoRoot, "packages", "omo-codex");
|
|
107
|
+
const pluginRoot = join(codexPackageRoot, "plugin");
|
|
108
|
+
const agentsRoot = join(pluginRoot, "components", "ultrawork", "agents");
|
|
109
|
+
|
|
110
|
+
await writeJson(join(codexPackageRoot, "marketplace.json"), {
|
|
111
|
+
name: "sisyphuslabs",
|
|
112
|
+
plugins: [{ name: "omo", source: "./plugins/omo" }],
|
|
113
|
+
});
|
|
114
|
+
await writePluginAt(pluginRoot, "omo", "0.1.0");
|
|
115
|
+
await mkdir(agentsRoot, { recursive: true });
|
|
116
|
+
await writeFile(join(agentsRoot, "explorer.toml"), 'name = "explorer"\n');
|
|
117
|
+
await writeFile(join(agentsRoot, "plan.toml"), 'name = "plan"\n');
|
|
118
|
+
|
|
119
|
+
await installMarketplaceLocally({
|
|
120
|
+
repoRoot,
|
|
121
|
+
codexHome,
|
|
122
|
+
platform: "linux",
|
|
123
|
+
runCommand: async () => {},
|
|
124
|
+
log: () => {},
|
|
125
|
+
});
|
|
126
|
+
await rm(join(codexHome, ".tmp", "marketplaces", "sisyphuslabs"), { recursive: true, force: true });
|
|
127
|
+
await rm(join(codexHome, "plugins", "cache", "sisyphuslabs"), { recursive: true, force: true });
|
|
128
|
+
|
|
129
|
+
assert.equal(await readFile(join(codexHome, "agents", "explorer.toml"), "utf8"), 'name = "explorer"\n');
|
|
130
|
+
assert.equal(await readFile(join(codexHome, "agents", "plan.toml"), "utf8"), 'name = "plan"\n');
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
test(
|
|
134
|
+
"#given bundled ultrawork plan #when installing locally #then fresh installs write bundled default xhigh",
|
|
135
|
+
async () => {
|
|
136
|
+
const repoRoot = await makeTempDir();
|
|
137
|
+
const codexHome = await makeTempDir();
|
|
138
|
+
const codexPackageRoot = join(repoRoot, "packages", "omo-codex");
|
|
139
|
+
const pluginRoot = join(codexPackageRoot, "plugin");
|
|
140
|
+
const agentsRoot = join(pluginRoot, "components", "ultrawork", "agents");
|
|
141
|
+
|
|
142
|
+
await writeJson(join(codexPackageRoot, "marketplace.json"), {
|
|
143
|
+
name: "sisyphuslabs",
|
|
144
|
+
plugins: [{ name: "omo", source: "./plugins/omo" }],
|
|
145
|
+
});
|
|
146
|
+
await writePluginAt(pluginRoot, "omo", "0.1.0");
|
|
147
|
+
await mkdir(agentsRoot, { recursive: true });
|
|
148
|
+
await writeFile(
|
|
149
|
+
join(agentsRoot, "plan.toml"),
|
|
150
|
+
'name = "plan"\nmodel = "gpt-5.5"\nmodel_reasoning_effort = "xhigh"\n',
|
|
151
|
+
);
|
|
152
|
+
|
|
153
|
+
await installMarketplaceLocally({
|
|
154
|
+
repoRoot,
|
|
155
|
+
codexHome,
|
|
156
|
+
platform: "linux",
|
|
157
|
+
runCommand: async () => {},
|
|
158
|
+
log: () => {},
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
assert.equal(
|
|
162
|
+
await readFile(join(codexHome, "agents", "plan.toml"), "utf8"),
|
|
163
|
+
'name = "plan"\nmodel = "gpt-5.5"\nmodel_reasoning_effort = "xhigh"\n',
|
|
164
|
+
);
|
|
165
|
+
},
|
|
166
|
+
);
|
|
167
|
+
|
|
168
|
+
test(
|
|
169
|
+
"#given bundled ultrawork plan #when reinstalling without edits #then bundled xhigh stays intact",
|
|
170
|
+
async () => {
|
|
171
|
+
const repoRoot = await makeTempDir();
|
|
172
|
+
const codexHome = await makeTempDir();
|
|
173
|
+
const codexPackageRoot = join(repoRoot, "packages", "omo-codex");
|
|
174
|
+
const pluginRoot = join(codexPackageRoot, "plugin");
|
|
175
|
+
const agentsRoot = join(pluginRoot, "components", "ultrawork", "agents");
|
|
176
|
+
|
|
177
|
+
await writeJson(join(codexPackageRoot, "marketplace.json"), {
|
|
178
|
+
name: "sisyphuslabs",
|
|
179
|
+
plugins: [{ name: "omo", source: "./plugins/omo" }],
|
|
180
|
+
});
|
|
181
|
+
await writePluginAt(pluginRoot, "omo", "0.1.0");
|
|
182
|
+
await mkdir(agentsRoot, { recursive: true });
|
|
183
|
+
await writeFile(
|
|
184
|
+
join(agentsRoot, "plan.toml"),
|
|
185
|
+
'name = "plan"\nmodel = "gpt-5.5"\nmodel_reasoning_effort = "xhigh"\n',
|
|
186
|
+
);
|
|
187
|
+
|
|
188
|
+
await installMarketplaceLocally({
|
|
189
|
+
repoRoot,
|
|
190
|
+
codexHome,
|
|
191
|
+
platform: "linux",
|
|
192
|
+
runCommand: async () => {},
|
|
193
|
+
log: () => {},
|
|
194
|
+
});
|
|
195
|
+
await installMarketplaceLocally({
|
|
196
|
+
repoRoot,
|
|
197
|
+
codexHome,
|
|
198
|
+
platform: "linux",
|
|
199
|
+
runCommand: async () => {},
|
|
200
|
+
log: () => {},
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
assert.equal(
|
|
204
|
+
await readFile(join(codexHome, "agents", "plan.toml"), "utf8"),
|
|
205
|
+
'name = "plan"\nmodel = "gpt-5.5"\nmodel_reasoning_effort = "xhigh"\n',
|
|
206
|
+
);
|
|
207
|
+
},
|
|
208
|
+
);
|
|
209
|
+
|
|
210
|
+
test(
|
|
211
|
+
"#given user edited installed ultrawork plan #when reinstalling after snapshot refresh #then high survives",
|
|
212
|
+
async () => {
|
|
213
|
+
const repoRoot = await makeTempDir();
|
|
214
|
+
const codexHome = await makeTempDir();
|
|
215
|
+
const codexPackageRoot = join(repoRoot, "packages", "omo-codex");
|
|
216
|
+
const pluginRoot = join(codexPackageRoot, "plugin");
|
|
217
|
+
const agentsRoot = join(pluginRoot, "components", "ultrawork", "agents");
|
|
218
|
+
|
|
219
|
+
await writeJson(join(codexPackageRoot, "marketplace.json"), {
|
|
220
|
+
name: "sisyphuslabs",
|
|
221
|
+
plugins: [{ name: "omo", source: "./plugins/omo" }],
|
|
222
|
+
});
|
|
223
|
+
await writePluginAt(pluginRoot, "omo", "0.1.0");
|
|
224
|
+
await mkdir(agentsRoot, { recursive: true });
|
|
225
|
+
await writeFile(
|
|
226
|
+
join(agentsRoot, "plan.toml"),
|
|
227
|
+
'name = "plan"\nmodel = "gpt-5.5"\nmodel_reasoning_effort = "xhigh"\n',
|
|
228
|
+
);
|
|
229
|
+
|
|
230
|
+
await installMarketplaceLocally({
|
|
231
|
+
repoRoot,
|
|
232
|
+
codexHome,
|
|
233
|
+
platform: "linux",
|
|
234
|
+
runCommand: async () => {},
|
|
235
|
+
log: () => {},
|
|
236
|
+
});
|
|
237
|
+
await writeFile(join(codexHome, "agents", "plan.toml"), 'name = "plan"\nmodel = "gpt-5.5"\nmodel_reasoning_effort = "high"\n');
|
|
238
|
+
await installMarketplaceLocally({
|
|
239
|
+
repoRoot,
|
|
240
|
+
codexHome,
|
|
241
|
+
platform: "linux",
|
|
242
|
+
runCommand: async () => {},
|
|
243
|
+
log: () => {},
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
const installedPlan = await readFile(join(codexHome, "agents", "plan.toml"), "utf8");
|
|
247
|
+
assert.ok(installedPlan.includes('model_reasoning_effort = "high"'));
|
|
248
|
+
assert.equal(installedPlan.includes('model_reasoning_effort = "xhigh"'), false);
|
|
249
|
+
const installedStat = await lstat(join(codexHome, "agents", "plan.toml"));
|
|
250
|
+
assert.equal(installedStat.isFile(), true);
|
|
251
|
+
assert.equal(installedStat.isSymbolicLink(), false);
|
|
252
|
+
},
|
|
253
|
+
);
|
|
254
|
+
|
|
255
|
+
test(
|
|
256
|
+
"#given user edited installed ultrawork plan #when reinstalling after snapshot refresh #then bundled snapshot target retains xhigh",
|
|
257
|
+
async () => {
|
|
258
|
+
const repoRoot = await makeTempDir();
|
|
259
|
+
const codexHome = await makeTempDir();
|
|
260
|
+
const codexPackageRoot = join(repoRoot, "packages", "omo-codex");
|
|
261
|
+
const pluginRoot = join(codexPackageRoot, "plugin");
|
|
262
|
+
const agentsRoot = join(pluginRoot, "components", "ultrawork", "agents");
|
|
263
|
+
|
|
264
|
+
await writeJson(join(codexPackageRoot, "marketplace.json"), {
|
|
265
|
+
name: "sisyphuslabs",
|
|
266
|
+
plugins: [{ name: "omo", source: "./plugins/omo" }],
|
|
267
|
+
});
|
|
268
|
+
await writePluginAt(pluginRoot, "omo", "0.1.0");
|
|
269
|
+
await mkdir(agentsRoot, { recursive: true });
|
|
270
|
+
await writeFile(
|
|
271
|
+
join(agentsRoot, "plan.toml"),
|
|
272
|
+
'name = "plan"\nmodel = "gpt-5.5"\nmodel_reasoning_effort = "xhigh"\n',
|
|
273
|
+
);
|
|
274
|
+
|
|
275
|
+
await installMarketplaceLocally({
|
|
276
|
+
repoRoot,
|
|
277
|
+
codexHome,
|
|
278
|
+
platform: "linux",
|
|
279
|
+
runCommand: async () => {},
|
|
280
|
+
log: () => {},
|
|
281
|
+
});
|
|
282
|
+
await writeFile(join(codexHome, "agents", "plan.toml"), 'name = "plan"\nmodel = "gpt-5.5"\nmodel_reasoning_effort = "high"\n');
|
|
283
|
+
await installMarketplaceLocally({
|
|
284
|
+
repoRoot,
|
|
285
|
+
codexHome,
|
|
286
|
+
platform: "linux",
|
|
287
|
+
runCommand: async () => {},
|
|
288
|
+
log: () => {},
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
const snapshotPlan = await readFile(
|
|
292
|
+
join(codexHome, ".tmp", "marketplaces", "sisyphuslabs", "plugins", "omo", "components", "ultrawork", "agents", "plan.toml"),
|
|
293
|
+
"utf8",
|
|
294
|
+
);
|
|
295
|
+
assert.ok(snapshotPlan.includes('model_reasoning_effort = "xhigh"'));
|
|
296
|
+
assert.equal(snapshotPlan.includes('model_reasoning_effort = "high"'), false);
|
|
297
|
+
},
|
|
298
|
+
);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import assert from "node:assert/strict";
|
|
2
|
-
import { mkdir, readFile, readlink, symlink, writeFile } from "node:fs/promises";
|
|
2
|
+
import { lstat, mkdir, readFile, readlink, symlink, writeFile } from "node:fs/promises";
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import test from "node:test";
|
|
5
5
|
|
|
@@ -99,6 +99,88 @@ test("#given managed legacy Codex LSP symlink #when linking bins #then removes s
|
|
|
99
99
|
assert.equal(await readlink(join(binDir, "omo")), join(pluginRoot, "dist", "cli.js"));
|
|
100
100
|
});
|
|
101
101
|
|
|
102
|
+
test("#given nested component declares reserved omo bin #when linking bins #then skips the nested top-level command", async () => {
|
|
103
|
+
const root = await makeTempDir();
|
|
104
|
+
const pluginRoot = join(root, "plugin");
|
|
105
|
+
const componentRoot = join(pluginRoot, "components", "ulw-loop");
|
|
106
|
+
const binDir = join(root, "bin");
|
|
107
|
+
|
|
108
|
+
await mkdir(join(componentRoot, "dist"), { recursive: true });
|
|
109
|
+
await writeJson(join(pluginRoot, "package.json"), {
|
|
110
|
+
name: "@example/omo",
|
|
111
|
+
});
|
|
112
|
+
await writeJson(join(componentRoot, "package.json"), {
|
|
113
|
+
name: "@example/ulw-loop",
|
|
114
|
+
bin: {
|
|
115
|
+
omo: "./dist/cli.js",
|
|
116
|
+
"omo-ulw-loop": "./dist/cli.js",
|
|
117
|
+
},
|
|
118
|
+
});
|
|
119
|
+
await writeFile(join(componentRoot, "dist", "cli.js"), "#!/usr/bin/env node\n");
|
|
120
|
+
|
|
121
|
+
const linked = await linkCachedPluginBins({ binDir, pluginRoot, platform: "linux" });
|
|
122
|
+
|
|
123
|
+
assert.deepEqual(linked, [
|
|
124
|
+
{ name: "omo-ulw-loop", path: join(binDir, "omo-ulw-loop"), target: join(componentRoot, "dist", "cli.js") },
|
|
125
|
+
]);
|
|
126
|
+
await assert.rejects(readlink(join(binDir, "omo")));
|
|
127
|
+
assert.equal(await readlink(join(binDir, "omo-ulw-loop")), join(componentRoot, "dist", "cli.js"));
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
test("#given stale managed ulw-loop omo symlink #when linking bins #then removes it without touching user-owned omo", async () => {
|
|
131
|
+
const root = await makeTempDir();
|
|
132
|
+
const pluginRoot = join(root, "plugin");
|
|
133
|
+
const componentRoot = join(pluginRoot, "components", "rules");
|
|
134
|
+
const binDir = join(root, "bin");
|
|
135
|
+
const oldTarget = join(root, "codex-home", "plugins", "cache", "sisyphuslabs", "omo", "0.1.0", "components", "ulw-loop", "dist", "cli.js");
|
|
136
|
+
|
|
137
|
+
await mkdir(join(componentRoot, "dist"), { recursive: true });
|
|
138
|
+
await mkdir(join(root, "codex-home", "plugins", "cache", "sisyphuslabs", "omo", "0.1.0", "components", "ulw-loop", "dist"), { recursive: true });
|
|
139
|
+
await mkdir(binDir, { recursive: true });
|
|
140
|
+
await writeJson(join(pluginRoot, "package.json"), {
|
|
141
|
+
name: "@example/omo",
|
|
142
|
+
});
|
|
143
|
+
await writeJson(join(componentRoot, "package.json"), {
|
|
144
|
+
name: "@example/rules",
|
|
145
|
+
bin: { "omo-rules": "./dist/cli.js" },
|
|
146
|
+
});
|
|
147
|
+
await writeFile(join(componentRoot, "dist", "cli.js"), "#!/usr/bin/env node\n");
|
|
148
|
+
await writeFile(oldTarget, "#!/usr/bin/env node\n");
|
|
149
|
+
await symlink(oldTarget, join(binDir, "omo"));
|
|
150
|
+
|
|
151
|
+
await linkCachedPluginBins({ binDir, pluginRoot, platform: "linux" });
|
|
152
|
+
|
|
153
|
+
await assert.rejects(readlink(join(binDir, "omo")));
|
|
154
|
+
assert.equal(await readlink(join(binDir, "omo-rules")), join(componentRoot, "dist", "cli.js"));
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
test("#given stale local-source ulw-loop omo symlink #when linking bins #then removes it", async () => {
|
|
158
|
+
const root = await makeTempDir();
|
|
159
|
+
const pluginRoot = join(root, "plugin");
|
|
160
|
+
const componentRoot = join(pluginRoot, "components", "rules");
|
|
161
|
+
const binDir = join(root, "bin");
|
|
162
|
+
const oldTarget = join(root, "repo", "packages", "omo-codex", "plugin", "components", "ulw-loop", "dist", "cli.js");
|
|
163
|
+
|
|
164
|
+
await mkdir(join(componentRoot, "dist"), { recursive: true });
|
|
165
|
+
await mkdir(join(root, "repo", "packages", "omo-codex", "plugin", "components", "ulw-loop", "dist"), { recursive: true });
|
|
166
|
+
await mkdir(binDir, { recursive: true });
|
|
167
|
+
await writeJson(join(pluginRoot, "package.json"), {
|
|
168
|
+
name: "@example/omo",
|
|
169
|
+
});
|
|
170
|
+
await writeJson(join(componentRoot, "package.json"), {
|
|
171
|
+
name: "@example/rules",
|
|
172
|
+
bin: { "omo-rules": "./dist/cli.js" },
|
|
173
|
+
});
|
|
174
|
+
await writeFile(join(componentRoot, "dist", "cli.js"), "#!/usr/bin/env node\n");
|
|
175
|
+
await writeFile(oldTarget, "#!/usr/bin/env node\n");
|
|
176
|
+
await symlink(oldTarget, join(binDir, "omo"));
|
|
177
|
+
|
|
178
|
+
await linkCachedPluginBins({ binDir, pluginRoot, platform: "linux" });
|
|
179
|
+
|
|
180
|
+
await assert.rejects(readlink(join(binDir, "omo")));
|
|
181
|
+
assert.equal(await readlink(join(binDir, "omo-rules")), join(componentRoot, "dist", "cli.js"));
|
|
182
|
+
});
|
|
183
|
+
|
|
102
184
|
test("#given user-owned legacy Codex symlink #when linking bins #then preserves the user symlink", async () => {
|
|
103
185
|
const root = await makeTempDir();
|
|
104
186
|
const pluginRoot = join(root, "plugin");
|
|
@@ -144,3 +226,43 @@ test("#given user-owned legacy Codex symlink with component-like target #when li
|
|
|
144
226
|
assert.equal(await readlink(join(binDir, "codex-rules")), userTarget);
|
|
145
227
|
assert.equal(await readlink(join(binDir, "omo-rules")), join(pluginRoot, "dist", "cli.js"));
|
|
146
228
|
});
|
|
229
|
+
|
|
230
|
+
test("#given package bin name escapes bin directory #when linking bins #then rejects without writing outside link", async () => {
|
|
231
|
+
const root = await makeTempDir();
|
|
232
|
+
const pluginRoot = join(root, "plugin");
|
|
233
|
+
const binDir = join(root, "bin");
|
|
234
|
+
const escapedLink = join(root, "escaped");
|
|
235
|
+
|
|
236
|
+
await mkdir(join(pluginRoot, "dist"), { recursive: true });
|
|
237
|
+
await writeJson(join(pluginRoot, "package.json"), {
|
|
238
|
+
name: "@example/omo",
|
|
239
|
+
bin: { "../escaped": "./dist/cli.js" },
|
|
240
|
+
});
|
|
241
|
+
await writeFile(join(pluginRoot, "dist", "cli.js"), "#!/usr/bin/env node\n");
|
|
242
|
+
|
|
243
|
+
await assert.rejects(
|
|
244
|
+
linkCachedPluginBins({ binDir, pluginRoot, platform: "linux" }),
|
|
245
|
+
/invalid package bin name/,
|
|
246
|
+
);
|
|
247
|
+
await assert.rejects(lstat(escapedLink));
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
test("#given package bin target escapes plugin root #when linking bins #then rejects without linking outside target", async () => {
|
|
251
|
+
const root = await makeTempDir();
|
|
252
|
+
const pluginRoot = join(root, "plugin");
|
|
253
|
+
const binDir = join(root, "bin");
|
|
254
|
+
const outsideTarget = join(root, "outside.js");
|
|
255
|
+
|
|
256
|
+
await mkdir(pluginRoot, { recursive: true });
|
|
257
|
+
await writeJson(join(pluginRoot, "package.json"), {
|
|
258
|
+
name: "@example/omo",
|
|
259
|
+
bin: { omo: "../outside.js" },
|
|
260
|
+
});
|
|
261
|
+
await writeFile(outsideTarget, "#!/usr/bin/env node\n");
|
|
262
|
+
|
|
263
|
+
await assert.rejects(
|
|
264
|
+
linkCachedPluginBins({ binDir, pluginRoot, platform: "linux" }),
|
|
265
|
+
/escapes package root/,
|
|
266
|
+
);
|
|
267
|
+
await assert.rejects(readlink(join(binDir, "omo")));
|
|
268
|
+
});
|