oh-my-opencode 4.13.0 → 4.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/codex-qa/SKILL.md +15 -0
- package/.agents/skills/codex-qa/references/isolation.md +1 -1
- package/.agents/skills/codex-qa/references/logging-debug.md +12 -0
- package/.agents/skills/opencode-qa/SKILL.md +17 -0
- package/.agents/skills/opencode-qa/references/tui-tmux.md +17 -0
- package/.agents/skills/work-with-pr/SKILL.md +18 -10
- package/.opencode/skills/work-with-pr/SKILL.md +18 -10
- package/README.md +3 -3
- package/dist/cli/doctor/checks/telemetry.d.ts +2 -0
- package/dist/cli/doctor/framework/constants.d.ts +1 -0
- package/dist/cli/doctor/framework/doctor-target.d.ts +1 -1
- package/dist/cli/doctor/framework/types.d.ts +2 -0
- package/dist/cli/index.js +24779 -17857
- package/dist/cli-node/index.js +24779 -17857
- package/dist/config/schema/oh-my-opencode-config.d.ts +1 -0
- package/dist/features/team-mode/test-support/async-test-helpers.d.ts +19 -0
- package/dist/hooks/atlas/final-wave-approval-gate.d.ts +1 -0
- package/dist/hooks/atlas/subagent-completion-reminder.d.ts +30 -0
- package/dist/hooks/atlas/types.d.ts +2 -0
- package/dist/hooks/atlas/verification-reminders.d.ts +3 -0
- package/dist/hooks/team-session-events/team-idle-wake-hint.d.ts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +43845 -26631
- package/dist/mcp/context7.d.ts +9 -8
- package/dist/oh-my-opencode.schema.json +4 -0
- package/dist/plugin/native-skills.d.ts +9 -0
- package/dist/plugin/system-transform.d.ts +1 -1
- package/dist/shared/posthog.d.ts +17 -10
- package/dist/shared/telemetry-product-identity.d.ts +2 -0
- package/dist/skills/coding-agent-sessions/SKILL.md +128 -0
- package/dist/skills/coding-agent-sessions/agents/openai.yaml +4 -0
- package/dist/skills/coding-agent-sessions/references/all-platforms.md +71 -0
- package/dist/skills/coding-agent-sessions/references/claude.md +32 -0
- package/dist/skills/coding-agent-sessions/references/codex.md +30 -0
- package/dist/skills/coding-agent-sessions/references/opencode.md +43 -0
- package/dist/skills/coding-agent-sessions/references/senpi.md +17 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/__init__.py +1 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/claude.py +66 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/cli.py +283 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/codex.py +105 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/file_scanners.py +275 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/jsonio.py +55 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/kiro_scanner.py +91 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/opencode.py +289 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +92 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/sqlite_optional_scanners.py +203 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/sqlite_scanners.py +177 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/timeparse.py +51 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/transcript.py +149 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/types.py +57 -0
- package/dist/skills/coding-agent-sessions/scripts/find-agent-sessions.py +19 -0
- package/dist/skills/frontend/ATTRIBUTION.md +52 -8
- package/dist/skills/frontend/SKILL.md +29 -8
- package/dist/skills/frontend/references/design/README.md +29 -12
- package/dist/skills/frontend/references/design/_INDEX.md +3 -3
- package/dist/skills/frontend/references/design/design-system-architecture.md +22 -19
- package/dist/skills/frontend/references/designpowers/EVIDENCE.md +89 -0
- package/dist/skills/frontend/references/designpowers/README.md +48 -0
- package/dist/skills/frontend/references/designpowers/UPSTREAM.md +80 -0
- package/dist/skills/frontend/references/designpowers/lane-a-direction.md +64 -0
- package/dist/skills/frontend/references/designpowers/lane-b-execution.md +65 -0
- package/dist/skills/frontend/references/designpowers/lane-c-review.md +65 -0
- package/dist/skills/frontend/references/designpowers/lane-d-memory.md +83 -0
- package/dist/skills/frontend/references/designpowers/orchestration.md +80 -0
- package/dist/skills/frontend/references/designpowers/routing.md +79 -0
- package/dist/skills/frontend/references/designpowers/vendor/LICENSE +21 -0
- package/dist/skills/frontend/references/designpowers/vendor/agents/accessibility-reviewer.md +83 -0
- package/dist/skills/frontend/references/designpowers/vendor/agents/content-writer.md +132 -0
- package/dist/skills/frontend/references/designpowers/vendor/agents/design-builder.md +109 -0
- package/dist/skills/frontend/references/designpowers/vendor/agents/design-critic.md +89 -0
- package/dist/skills/frontend/references/designpowers/vendor/agents/design-lead.md +113 -0
- package/dist/skills/frontend/references/designpowers/vendor/agents/design-scout.md +78 -0
- package/dist/skills/frontend/references/designpowers/vendor/agents/design-strategist.md +121 -0
- package/dist/skills/frontend/references/designpowers/vendor/agents/heuristic-evaluator.md +268 -0
- package/dist/skills/frontend/references/designpowers/vendor/agents/inspiration-scout.md +107 -0
- package/dist/skills/frontend/references/designpowers/vendor/agents/motion-designer.md +120 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/accessible-content/SKILL.md +101 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/adaptive-interfaces/SKILL.md +109 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/cognitive-accessibility/SKILL.md +107 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/design-debate/SKILL.md +199 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/design-debt-tracker/SKILL.md +174 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/design-handoff/SKILL.md +125 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/design-md/SKILL.md +106 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/design-retrospective/SKILL.md +266 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/design-review/SKILL.md +123 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/design-system-alignment/SKILL.md +120 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/designpowers-critique/SKILL.md +164 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/heuristic-evaluation/SKILL.md +85 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/inclusive-personas/SKILL.md +98 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/inspiration-scouting/SKILL.md +165 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/interaction-design/SKILL.md +122 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/motion-choreography/SKILL.md +81 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/research-planning/SKILL.md +96 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/responsive-patterns/SKILL.md +77 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/synthetic-user-testing/SKILL.md +192 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/taste-feedback/SKILL.md +165 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/taste-report/SKILL.md +78 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/token-architecture/SKILL.md +75 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/ui-composition/SKILL.md +117 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/usability-testing/SKILL.md +78 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/verification-before-shipping/SKILL.md +125 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/voice-and-tone/SKILL.md +79 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/writing-design-plans/SKILL.md +119 -0
- package/dist/skills/frontend/references/ui-ux-db/scripts/core.py +0 -0
- package/dist/skills/git-master/SKILL.md +4 -0
- package/dist/skills/lcx-contribute-bug-fix/SKILL.md +44 -13
- package/dist/skills/lcx-contribute-bug-fix/agents/openai.yaml +1 -1
- package/dist/skills/lcx-doctor/SKILL.md +48 -13
- package/dist/skills/lcx-doctor/agents/openai.yaml +1 -1
- package/dist/skills/lcx-report-bug/SKILL.md +44 -13
- package/dist/skills/lcx-report-bug/agents/openai.yaml +1 -1
- package/dist/skills/review-work/SKILL.md +3 -3
- package/dist/skills/start-work/SKILL.md +7 -5
- package/dist/skills/ultraresearch/SKILL.md +4 -252
- package/dist/skills/ulw-plan/SKILL.md +8 -6
- package/dist/skills/ulw-plan/references/full-workflow.md +11 -6
- package/dist/skills/ulw-plan/references/intent-clear.md +3 -3
- package/dist/skills/ulw-plan/references/intent-unclear.md +1 -1
- package/{packages/shared-skills/skills/ultraresearch → dist/skills/ulw-research}/ATTRIBUTION.md +1 -1
- package/dist/skills/ulw-research/SKILL.md +260 -0
- package/dist/skills/visual-qa/SKILL.md +109 -18
- package/dist/skills/visual-qa/references/agent-browser-setup.md +5 -4
- package/dist/skills/visual-qa/scripts/cli.test.ts +7 -2
- package/dist/skills/visual-qa/scripts/skill-prompt-contract.test.ts +130 -3
- package/dist/skills/visual-qa/scripts/visual-qa.mjs +530 -0
- package/dist/testing/create-plugin-module.d.ts +2 -0
- package/dist/tools/delegate-task/skill-resolver.d.ts +1 -0
- package/dist/tools/delegate-task/types.d.ts +2 -0
- package/dist/tools/skill/types.d.ts +1 -0
- package/dist/tui.js +23917 -16117
- package/docs/reference/github-attachment-upload.md +51 -0
- package/docs/reference/web-terminal-visual-qa.md +81 -0
- package/package.json +33 -14
- package/packages/git-bash-mcp/dist/cli.js +2 -0
- package/packages/lsp-core/src/lsp/process.ts +4 -1
- package/packages/lsp-core/src/mcp.ts +1 -0
- package/packages/lsp-daemon/dist/cli.js +20 -5
- package/packages/lsp-daemon/dist/ensure-daemon.d.ts +1 -0
- package/packages/lsp-daemon/dist/ensure-daemon.js +9 -3
- package/packages/lsp-daemon/dist/index.js +20 -5
- package/packages/lsp-daemon/dist/paths.d.ts +1 -0
- package/packages/lsp-daemon/dist/paths.js +6 -1
- package/packages/lsp-daemon/dist/proxy.js +1 -0
- package/packages/lsp-tools-mcp/dist/cli.js +5 -1
- package/packages/lsp-tools-mcp/dist/lsp/manager.js +4 -1
- package/packages/lsp-tools-mcp/dist/mcp.js +5 -1
- package/packages/lsp-tools-mcp/dist/tools.js +4 -1
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +327 -69
- package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/scripts/bootstrap.ps1 +37 -68
- package/packages/omo-codex/plugin/components/bootstrap/scripts/node-dispatch.ps1 +75 -0
- package/packages/omo-codex/plugin/components/bootstrap/src/cli.ts +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/src/setup.ts +3 -19
- package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +688 -334
- package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +317 -39
- package/packages/omo-codex/plugin/components/codegraph/package.json +2 -2
- package/packages/omo-codex/plugin/components/codegraph/src/hook-types.ts +7 -1
- package/packages/omo-codex/plugin/components/codegraph/src/hook.ts +103 -3
- package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +231 -0
- package/packages/omo-codex/plugin/components/codegraph/src/serve-invocation.ts +29 -0
- package/packages/omo-codex/plugin/components/codegraph/src/serve.ts +31 -57
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker.ts +7 -4
- package/packages/omo-codex/plugin/components/codegraph/test/hook.test.ts +43 -9
- package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge.test.ts +287 -0
- package/packages/omo-codex/plugin/components/codegraph/test/serve.test.ts +12 -7
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-flow.test.ts +71 -1
- package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
- package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
- package/packages/omo-codex/plugin/components/lsp/dist/cli.js +94 -26
- package/packages/omo-codex/plugin/components/lsp/dist/codex-hook.js +2 -0
- package/packages/omo-codex/plugin/components/lsp/dist/daemon-cli-path.d.ts +2 -0
- package/packages/omo-codex/plugin/components/lsp/dist/daemon-cli-path.js +56 -0
- package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
- package/packages/omo-codex/plugin/components/lsp/src/cli.ts +2 -5
- package/packages/omo-codex/plugin/components/lsp/src/codex-hook.ts +2 -0
- package/packages/omo-codex/plugin/components/lsp/src/daemon-cli-path.ts +65 -0
- package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +6 -1
- package/packages/omo-codex/plugin/components/rules/dist/cli.js +8 -106
- package/packages/omo-codex/plugin/components/rules/package.json +1 -1
- package/packages/omo-codex/plugin/components/rules/src/static-injection.ts +4 -17
- package/packages/omo-codex/plugin/components/start-work-continuation/directive.md +6 -6
- package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
- package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +23 -0
- package/packages/omo-codex/plugin/components/teammode/dist/cli.js +22 -4
- package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/skills/teammode/SKILL.md +57 -7
- package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team-guide.mjs +32 -5
- package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team-state.mjs +63 -1
- package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team.mjs +87 -53
- package/packages/omo-codex/plugin/components/teammode/src/codex-hook.ts +19 -4
- package/packages/omo-codex/plugin/components/teammode/test/thread-title-hook.test.ts +32 -2
- package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/README.md +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/explorer.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/directive.md +18 -10
- package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +6 -4
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +11 -6
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-clear.md +3 -3
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/src/codex-hook.ts +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook-trigger-policy.test.ts +24 -0
- package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +7 -28
- package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/README.md +25 -21
- package/packages/omo-codex/plugin/components/ulw-loop/biome.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/directive.md +373 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-steering.js +14 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +145 -14
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-hook.d.ts +6 -3
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-hook.js +16 -6
- package/packages/omo-codex/plugin/components/ulw-loop/dist/ultrawork-directive.d.ts +5 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/ultrawork-directive.js +104 -0
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +5 -2
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +22 -14
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-steering.ts +14 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +4 -2
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +28 -6
- package/packages/omo-codex/plugin/components/ulw-loop/src/ultrawork-directive.ts +113 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +33 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering-kind-guidance.test.ts +31 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/codex-hook.test.ts +13 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/sample-quality-gate.json +7 -7
- package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +39 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-doc.test.ts +2 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate.test.ts +7 -6
- package/packages/omo-codex/plugin/components/ulw-loop/test/skill-contract.test.ts +12 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +64 -0
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +2 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +2 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +2 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +2 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +2 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +2 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +2 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +2 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +2 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +2 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +2 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +2 -1
- package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +2 -1
- package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +2 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +2 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +2 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +2 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +2 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +2 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +2 -1
- package/packages/omo-codex/plugin/package-lock.json +16 -56
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/scripts/auto-update.mjs +9 -5
- package/packages/omo-codex/plugin/scripts/materialize-shared-upstreams.mjs +1 -0
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/context7-placeholder-guard.mjs +131 -0
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/multi-agent-mode-guard.mjs +60 -0
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/multi-agent-v2-guard.mjs +3 -10
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/root-settings.mjs +31 -1
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/subagent-limit-guard.mjs +73 -0
- package/packages/omo-codex/plugin/scripts/migrate-codex-config.mjs +20 -3
- package/packages/omo-codex/plugin/scripts/sync-skills.mjs +30 -8
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +128 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/agents/openai.yaml +4 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/all-platforms.md +71 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/claude.md +32 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/codex.md +30 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/opencode.md +43 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/senpi.md +17 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/__init__.py +1 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/claude.py +66 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/cli.py +283 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/codex.py +105 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/file_scanners.py +275 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/jsonio.py +55 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/kiro_scanner.py +91 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/opencode.py +289 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +92 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/sqlite_optional_scanners.py +203 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/sqlite_scanners.py +177 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/timeparse.py +51 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/transcript.py +149 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/types.py +57 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/find-agent-sessions.py +19 -0
- package/packages/omo-codex/plugin/skills/frontend/ATTRIBUTION.md +52 -8
- package/packages/omo-codex/plugin/skills/frontend/SKILL.md +29 -8
- package/packages/omo-codex/plugin/skills/frontend/references/design/README.md +29 -12
- package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +3 -3
- package/packages/omo-codex/plugin/skills/frontend/references/design/design-system-architecture.md +22 -19
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/EVIDENCE.md +89 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/README.md +48 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/UPSTREAM.md +80 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-a-direction.md +64 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-b-execution.md +65 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-c-review.md +65 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-d-memory.md +83 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/orchestration.md +80 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/routing.md +79 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/LICENSE +21 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/accessibility-reviewer.md +83 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/content-writer.md +132 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/design-builder.md +109 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/design-critic.md +89 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/design-lead.md +113 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/design-scout.md +78 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/design-strategist.md +121 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/heuristic-evaluator.md +268 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/inspiration-scout.md +107 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/motion-designer.md +120 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/accessible-content/SKILL.md +101 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/adaptive-interfaces/SKILL.md +109 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/cognitive-accessibility/SKILL.md +107 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/design-debate/SKILL.md +199 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/design-debt-tracker/SKILL.md +174 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/design-handoff/SKILL.md +125 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/design-md/SKILL.md +106 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/design-retrospective/SKILL.md +266 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/design-review/SKILL.md +123 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/design-system-alignment/SKILL.md +120 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/designpowers-critique/SKILL.md +164 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/heuristic-evaluation/SKILL.md +85 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/inclusive-personas/SKILL.md +98 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/inspiration-scouting/SKILL.md +165 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/interaction-design/SKILL.md +122 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/motion-choreography/SKILL.md +81 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/research-planning/SKILL.md +96 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/responsive-patterns/SKILL.md +77 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/synthetic-user-testing/SKILL.md +192 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/taste-feedback/SKILL.md +165 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/taste-report/SKILL.md +78 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/token-architecture/SKILL.md +75 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/ui-composition/SKILL.md +117 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/usability-testing/SKILL.md +78 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/verification-before-shipping/SKILL.md +125 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/voice-and-tone/SKILL.md +79 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/writing-design-plans/SKILL.md +119 -0
- package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/scripts/core.py +0 -0
- package/packages/omo-codex/plugin/skills/git-master/SKILL.md +4 -0
- package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +4 -0
- package/packages/omo-codex/plugin/skills/lcx-contribute-bug-fix/SKILL.md +44 -13
- package/packages/omo-codex/plugin/skills/lcx-contribute-bug-fix/agents/openai.yaml +1 -1
- package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +48 -13
- package/packages/omo-codex/plugin/skills/lcx-doctor/agents/openai.yaml +1 -1
- package/packages/omo-codex/plugin/skills/lcx-report-bug/SKILL.md +44 -13
- package/packages/omo-codex/plugin/skills/lcx-report-bug/agents/openai.yaml +1 -1
- package/packages/omo-codex/plugin/skills/refactor/SKILL.md +4 -0
- package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +4 -0
- package/packages/omo-codex/plugin/skills/review-work/SKILL.md +12 -4
- package/packages/omo-codex/plugin/skills/start-work/SKILL.md +14 -8
- package/packages/omo-codex/plugin/skills/teammode/SKILL.md +57 -7
- package/packages/omo-codex/plugin/skills/teammode/scripts/team-guide.mjs +32 -5
- package/packages/omo-codex/plugin/skills/teammode/scripts/team-state.mjs +63 -1
- package/packages/omo-codex/plugin/skills/teammode/scripts/team.mjs +87 -53
- package/packages/omo-codex/plugin/skills/ultraresearch/SKILL.md +4 -250
- package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +22 -14
- package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +6 -4
- package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +11 -6
- package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-clear.md +3 -3
- package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +1 -1
- package/{dist/skills/ultraresearch → packages/omo-codex/plugin/skills/ulw-research}/ATTRIBUTION.md +1 -1
- package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +262 -0
- package/packages/omo-codex/plugin/skills/ulw-research/agents/openai.yaml +2 -0
- package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +113 -18
- package/packages/omo-codex/plugin/skills/visual-qa/references/agent-browser-setup.md +5 -4
- package/packages/omo-codex/plugin/skills/visual-qa/scripts/visual-qa.mjs +530 -0
- package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +23 -0
- package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +1 -0
- package/packages/omo-codex/plugin/test/auto-update-release-notes.test.mjs +1 -0
- package/packages/omo-codex/plugin/test/auto-update-restart-notice.test.mjs +24 -1
- package/packages/omo-codex/plugin/test/bootstrap-binlinks.test.mjs +61 -7
- package/packages/omo-codex/plugin/test/bootstrap-hooks.test.mjs +38 -0
- package/packages/omo-codex/plugin/test/bootstrap-ps-guard.test.mjs +25 -0
- package/packages/omo-codex/plugin/test/bootstrap-setup.test.mjs +1 -7
- package/packages/omo-codex/plugin/test/component-bin-names.test.mjs +12 -11
- package/packages/omo-codex/plugin/test/component-bundled-cli.test.mjs +99 -1
- package/packages/omo-codex/plugin/test/lcx-bug-skills.test.mjs +62 -8
- package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +206 -6
- package/packages/omo-codex/plugin/test/node-install-surface.test.mjs +1 -0
- package/packages/omo-codex/plugin/test/subagent-limit-migration.test.mjs +44 -0
- package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +50 -1
- package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +10 -7
- package/packages/omo-codex/plugin/test/sync-skills.test.mjs +28 -2
- package/packages/omo-codex/plugin/test/teammode-archive-ambiguity.test.mjs +102 -0
- package/packages/omo-codex/plugin/test/teammode-communication.test.mjs +20 -0
- package/packages/omo-codex/plugin/test/teammode-safety-fixture.mjs +41 -1
- package/packages/omo-codex/plugin/test/teammode-safety.test.mjs +93 -0
- package/packages/omo-codex/plugin/test/teammode-thread-links.test.mjs +117 -0
- package/packages/omo-codex/plugin/test/teammode-worktree.test.mjs +5 -2
- package/packages/omo-codex/plugin/test/ulw-research-skill-contract.test.mjs +285 -0
- package/packages/omo-codex/scripts/install-bin-links.test.mjs +12 -1
- package/packages/omo-codex/scripts/install-cache-copy.test.mjs +79 -0
- package/packages/omo-codex/scripts/install-config-autonomous-features.test.mjs +43 -3
- package/packages/omo-codex/scripts/install-config.test.mjs +198 -17
- package/packages/omo-codex/scripts/install-delegated-command.test.mjs +93 -0
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +803 -309
- package/packages/omo-codex/scripts/install-local-entrypoint.test.mjs +21 -2
- package/packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs +24 -15
- package/packages/omo-codex/scripts/install-local.test.mjs +5 -2
- package/packages/omo-codex/scripts/install-mcp-context7-runtime.test.mjs +84 -0
- package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +128 -0
- package/packages/shared-skills/skills/coding-agent-sessions/agents/openai.yaml +4 -0
- package/packages/shared-skills/skills/coding-agent-sessions/references/all-platforms.md +71 -0
- package/packages/shared-skills/skills/coding-agent-sessions/references/claude.md +32 -0
- package/packages/shared-skills/skills/coding-agent-sessions/references/codex.md +30 -0
- package/packages/shared-skills/skills/coding-agent-sessions/references/opencode.md +43 -0
- package/packages/shared-skills/skills/coding-agent-sessions/references/senpi.md +17 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/__init__.py +1 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/claude.py +66 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/cli.py +283 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/codex.py +105 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/file_scanners.py +275 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/jsonio.py +55 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/kiro_scanner.py +91 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/opencode.py +289 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +92 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/sqlite_optional_scanners.py +203 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/sqlite_scanners.py +177 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/timeparse.py +51 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/transcript.py +149 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/types.py +57 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/find-agent-sessions.py +19 -0
- package/packages/shared-skills/skills/frontend/ATTRIBUTION.md +52 -8
- package/packages/shared-skills/skills/frontend/SKILL.md +29 -8
- package/packages/shared-skills/skills/frontend/references/design/README.md +29 -12
- package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +3 -3
- package/packages/shared-skills/skills/frontend/references/design/design-system-architecture.md +22 -19
- package/packages/shared-skills/skills/frontend/references/designpowers/EVIDENCE.md +89 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/README.md +48 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/UPSTREAM.md +80 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/lane-a-direction.md +64 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/lane-b-execution.md +65 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/lane-c-review.md +65 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/lane-d-memory.md +83 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/orchestration.md +80 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/routing.md +79 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/LICENSE +21 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/accessibility-reviewer.md +83 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/content-writer.md +132 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/design-builder.md +109 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/design-critic.md +89 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/design-lead.md +113 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/design-scout.md +78 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/design-strategist.md +121 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/heuristic-evaluator.md +268 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/inspiration-scout.md +107 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/motion-designer.md +120 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/accessible-content/SKILL.md +101 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/adaptive-interfaces/SKILL.md +109 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/cognitive-accessibility/SKILL.md +107 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/design-debate/SKILL.md +199 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/design-debt-tracker/SKILL.md +174 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/design-handoff/SKILL.md +125 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/design-md/SKILL.md +106 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/design-retrospective/SKILL.md +266 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/design-review/SKILL.md +123 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/design-system-alignment/SKILL.md +120 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/designpowers-critique/SKILL.md +164 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/heuristic-evaluation/SKILL.md +85 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/inclusive-personas/SKILL.md +98 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/inspiration-scouting/SKILL.md +165 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/interaction-design/SKILL.md +122 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/motion-choreography/SKILL.md +81 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/research-planning/SKILL.md +96 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/responsive-patterns/SKILL.md +77 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/synthetic-user-testing/SKILL.md +192 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/taste-feedback/SKILL.md +165 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/taste-report/SKILL.md +78 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/token-architecture/SKILL.md +75 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/ui-composition/SKILL.md +117 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/usability-testing/SKILL.md +78 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/verification-before-shipping/SKILL.md +125 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/voice-and-tone/SKILL.md +79 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/writing-design-plans/SKILL.md +119 -0
- package/packages/shared-skills/skills/frontend/references/ui-ux-db/scripts/core.py +0 -0
- package/packages/shared-skills/skills/git-master/SKILL.md +4 -0
- package/packages/shared-skills/skills/lcx-contribute-bug-fix/SKILL.md +44 -13
- package/packages/shared-skills/skills/lcx-contribute-bug-fix/agents/openai.yaml +1 -1
- package/packages/shared-skills/skills/lcx-doctor/SKILL.md +48 -13
- package/packages/shared-skills/skills/lcx-doctor/agents/openai.yaml +1 -1
- package/packages/shared-skills/skills/lcx-report-bug/SKILL.md +44 -13
- package/packages/shared-skills/skills/lcx-report-bug/agents/openai.yaml +1 -1
- package/packages/shared-skills/skills/review-work/SKILL.md +3 -3
- package/packages/shared-skills/skills/start-work/SKILL.md +7 -5
- package/packages/shared-skills/skills/ultraresearch/SKILL.md +4 -252
- package/packages/shared-skills/skills/ulw-plan/SKILL.md +8 -6
- package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +11 -6
- package/packages/shared-skills/skills/ulw-plan/references/intent-clear.md +3 -3
- package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +1 -1
- package/packages/{omo-codex/plugin/skills/ultraresearch → shared-skills/skills/ulw-research}/ATTRIBUTION.md +1 -1
- package/packages/shared-skills/skills/ulw-research/SKILL.md +260 -0
- package/packages/shared-skills/skills/visual-qa/SKILL.md +109 -18
- package/packages/shared-skills/skills/visual-qa/references/agent-browser-setup.md +5 -4
- package/packages/shared-skills/skills/visual-qa/scripts/cli.test.ts +7 -2
- package/packages/shared-skills/skills/visual-qa/scripts/skill-prompt-contract.test.ts +130 -3
- package/packages/shared-skills/skills/visual-qa/scripts/visual-qa.mjs +530 -0
- package/script/qa/web-terminal-redaction.d.mts +13 -0
- package/script/qa/web-terminal-redaction.mjs +43 -0
- package/script/qa/web-terminal-renderer.mjs +218 -0
- package/script/qa/web-terminal-visual-qa.mjs +264 -0
- package/dist/cli/sparkshell-appserver-websocket.d.ts +0 -4
- package/dist/cli/sparkshell-appserver.d.ts +0 -16
- package/dist/cli/sparkshell-condense.d.ts +0 -10
- package/dist/cli/sparkshell-parse.d.ts +0 -24
- package/dist/cli/sparkshell-session-context.d.ts +0 -20
- package/dist/cli/sparkshell-spark.d.ts +0 -23
- package/dist/cli/sparkshell.d.ts +0 -33
- package/dist/shared/sparkshell-awareness.d.ts +0 -5
- package/packages/omo-codex/plugin/components/rules/src/sparkshell-awareness.ts +0 -106
- package/packages/omo-codex/plugin/components/rules/test/sparkshell-awareness.test.ts +0 -346
- package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/tests/test_cookie_domain_filter.py +0 -110
- package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/tests/test_extract_cookies.py +0 -245
- package/packages/omo-codex/plugin/test/ultraresearch-skill-contract.test.mjs +0 -204
|
@@ -87,6 +87,85 @@ test("#given cached file dependency is rewritten #when lockfile exists #then pac
|
|
|
87
87
|
assert.equal(cachedPackageLock.packages["node_modules/@scope/lsp-tools"].resolved, packageLockDependencyPath);
|
|
88
88
|
});
|
|
89
89
|
|
|
90
|
+
test("#given npm creates workspace bin shims in the cache #when caching plugin #then plugin-owned shims are removed", async () => {
|
|
91
|
+
// given
|
|
92
|
+
const root = await makeTempDir();
|
|
93
|
+
const codexHome = join(root, "codex-home");
|
|
94
|
+
const sourceRoot = join(root, "plugin");
|
|
95
|
+
const componentRoot = join(sourceRoot, "components", "ulw-loop");
|
|
96
|
+
await mkdir(join(componentRoot, "dist"), { recursive: true });
|
|
97
|
+
await writeFile(
|
|
98
|
+
join(sourceRoot, "package.json"),
|
|
99
|
+
JSON.stringify({
|
|
100
|
+
name: "@scope/omo",
|
|
101
|
+
version: "0.1.0",
|
|
102
|
+
workspaces: ["components/ulw-loop"],
|
|
103
|
+
}),
|
|
104
|
+
);
|
|
105
|
+
await writeFile(
|
|
106
|
+
join(componentRoot, "package.json"),
|
|
107
|
+
JSON.stringify({
|
|
108
|
+
name: "@code-yeongyu/codex-ulw-loop",
|
|
109
|
+
version: "0.1.0",
|
|
110
|
+
bin: { "omo-ulw-loop": "dist/cli.js" },
|
|
111
|
+
}),
|
|
112
|
+
);
|
|
113
|
+
await writeFile(join(componentRoot, "dist", "cli.js"), "#!/usr/bin/env node\n");
|
|
114
|
+
|
|
115
|
+
// when
|
|
116
|
+
const installed = await installCachedPlugin({
|
|
117
|
+
codexHome,
|
|
118
|
+
marketplaceName: "debug",
|
|
119
|
+
name: "omo",
|
|
120
|
+
sourcePath: sourceRoot,
|
|
121
|
+
version: "0.1.0",
|
|
122
|
+
runCommand: async (_command, args, options) => {
|
|
123
|
+
if (args.join(" ") !== "ci --omit=dev") return;
|
|
124
|
+
const npmBinDir = join(options.cwd, "node_modules", ".bin");
|
|
125
|
+
await mkdir(npmBinDir, { recursive: true });
|
|
126
|
+
await writeFile(join(npmBinDir, "omo-ulw-loop"), "#!/bin/sh\nnode ../@code-yeongyu/codex-ulw-loop/dist/cli.js \"$@\"\n");
|
|
127
|
+
await writeFile(
|
|
128
|
+
join(npmBinDir, "omo-ulw-loop.cmd"),
|
|
129
|
+
'@echo off\r\nnode "%~dp0\\..\\@code-yeongyu\\codex-ulw-loop\\dist\\cli.js" %*\r\n',
|
|
130
|
+
);
|
|
131
|
+
await writeFile(join(npmBinDir, "other-tool.cmd"), "@echo off\r\necho preserved\r\n");
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
// then
|
|
136
|
+
await assert.rejects(stat(join(installed.path, "node_modules", ".bin", "omo-ulw-loop")));
|
|
137
|
+
await assert.rejects(stat(join(installed.path, "node_modules", ".bin", "omo-ulw-loop.cmd")));
|
|
138
|
+
assert.equal(await readFile(join(installed.path, "node_modules", ".bin", "other-tool.cmd"), "utf8"), "@echo off\r\necho preserved\r\n");
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
test("#given packaged root CLI runtimes #when caching omo plugin #then root dist is materialized into the plugin cache", async () => {
|
|
142
|
+
// given
|
|
143
|
+
const root = await makeTempDir();
|
|
144
|
+
const repoRoot = join(root, "repo");
|
|
145
|
+
const codexHome = join(root, "codex-home");
|
|
146
|
+
const sourceRoot = join(repoRoot, "packages", "omo-codex", "plugin");
|
|
147
|
+
await mkdir(sourceRoot, { recursive: true });
|
|
148
|
+
await mkdir(join(repoRoot, "dist", "cli"), { recursive: true });
|
|
149
|
+
await mkdir(join(repoRoot, "dist", "cli-node"), { recursive: true });
|
|
150
|
+
await writeFile(join(sourceRoot, "package.json"), JSON.stringify({ name: "@scope/omo", version: "0.1.0" }));
|
|
151
|
+
await writeFile(join(repoRoot, "dist", "cli", "index.js"), "console.log('omo')\n");
|
|
152
|
+
await writeFile(join(repoRoot, "dist", "cli-node", "index.js"), "console.log('omo node')\n");
|
|
153
|
+
|
|
154
|
+
// when
|
|
155
|
+
const installed = await installCachedPlugin({
|
|
156
|
+
codexHome,
|
|
157
|
+
marketplaceName: "sisyphuslabs",
|
|
158
|
+
name: "omo",
|
|
159
|
+
sourcePath: sourceRoot,
|
|
160
|
+
version: "0.1.0",
|
|
161
|
+
runCommand: async () => {},
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
// then
|
|
165
|
+
assert.equal(await readFile(join(installed.path, "dist", "cli", "index.js"), "utf8"), "console.log('omo')\n");
|
|
166
|
+
assert.equal(await readFile(join(installed.path, "dist", "cli-node", "index.js"), "utf8"), "console.log('omo node')\n");
|
|
167
|
+
});
|
|
168
|
+
|
|
90
169
|
test("#given existing cache #when npm install fails #then previous active cache is preserved", async () => {
|
|
91
170
|
// given
|
|
92
171
|
const root = await makeTempDir();
|
|
@@ -6,7 +6,7 @@ import test from "node:test";
|
|
|
6
6
|
|
|
7
7
|
import { updateCodexConfig } from "./install-dist/install-local.mjs";
|
|
8
8
|
|
|
9
|
-
const ALWAYS_ON_FEATURES = ["plugins", "plugin_hooks", "multi_agent"
|
|
9
|
+
const ALWAYS_ON_FEATURES = ["plugins", "plugin_hooks", "multi_agent"];
|
|
10
10
|
const AUTONOMOUS_PERMISSION_FEATURES = ["unified_exec", "goals"];
|
|
11
11
|
|
|
12
12
|
test("#given autonomous permissions requested #when script installer updates config #then enables Codex autonomy feature flags", async () => {
|
|
@@ -20,7 +20,6 @@ test("#given autonomous permissions requested #when script installer updates con
|
|
|
20
20
|
"",
|
|
21
21
|
"[features]",
|
|
22
22
|
"multi_agent = false",
|
|
23
|
-
"child_agents_md = false",
|
|
24
23
|
"unified_exec = false",
|
|
25
24
|
"goals = false",
|
|
26
25
|
"",
|
|
@@ -59,7 +58,6 @@ test("#given autonomous permissions disabled #when script installer updates conf
|
|
|
59
58
|
"",
|
|
60
59
|
"[features]",
|
|
61
60
|
"multi_agent = false",
|
|
62
|
-
"child_agents_md = false",
|
|
63
61
|
"unified_exec = false",
|
|
64
62
|
"goals = false",
|
|
65
63
|
"",
|
|
@@ -86,3 +84,45 @@ test("#given autonomous permissions disabled #when script installer updates conf
|
|
|
86
84
|
assert.match(content, new RegExp(`${featureName} = false`));
|
|
87
85
|
}
|
|
88
86
|
});
|
|
87
|
+
|
|
88
|
+
test("#given existing child_agents_md setting #when script installer updates config #then preserves it without stamping unsupported values", async () => {
|
|
89
|
+
// given
|
|
90
|
+
const root = await mkdtemp(join(tmpdir(), "omo-codex-script-config-child-agents-preserve-"));
|
|
91
|
+
const configPath = join(root, "config.toml");
|
|
92
|
+
await writeFile(configPath, ["[features]", "child_agents_md = false", ""].join("\n"));
|
|
93
|
+
|
|
94
|
+
// when
|
|
95
|
+
await updateCodexConfig({
|
|
96
|
+
configPath,
|
|
97
|
+
repoRoot: "/repo/packages/omo-codex",
|
|
98
|
+
marketplaceName: "debug",
|
|
99
|
+
marketplaceSource: { sourceType: "local", source: "/repo/packages/omo-codex" },
|
|
100
|
+
pluginNames: ["omo"],
|
|
101
|
+
autonomousPermissions: true,
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
// then
|
|
105
|
+
const content = await readFile(configPath, "utf8");
|
|
106
|
+
assert.match(content, /child_agents_md = false/);
|
|
107
|
+
assert.doesNotMatch(content, /child_agents_md = true/);
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
test("#given config without child_agents_md #when script installer updates config #then does not add unsupported feature key", async () => {
|
|
111
|
+
// given
|
|
112
|
+
const root = await mkdtemp(join(tmpdir(), "omo-codex-script-config-child-agents-absent-"));
|
|
113
|
+
const configPath = join(root, "config.toml");
|
|
114
|
+
|
|
115
|
+
// when
|
|
116
|
+
await updateCodexConfig({
|
|
117
|
+
configPath,
|
|
118
|
+
repoRoot: "/repo/packages/omo-codex",
|
|
119
|
+
marketplaceName: "debug",
|
|
120
|
+
marketplaceSource: { sourceType: "local", source: "/repo/packages/omo-codex" },
|
|
121
|
+
pluginNames: ["omo"],
|
|
122
|
+
autonomousPermissions: true,
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
// then
|
|
126
|
+
const content = await readFile(configPath, "utf8");
|
|
127
|
+
assert.doesNotMatch(content, /child_agents_md/);
|
|
128
|
+
});
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// allow: SIZE_OK - Node installer config tests mirror the source installer matrix with one filesystem fixture; this release adds config cases and future edits should split by installer concern.
|
|
2
|
+
|
|
1
3
|
import assert from "node:assert/strict";
|
|
2
4
|
import { lstat, mkdtemp, readFile, symlink, writeFile } from "node:fs/promises";
|
|
3
5
|
import { tmpdir } from "node:os";
|
|
@@ -6,7 +8,7 @@ import test from "node:test";
|
|
|
6
8
|
|
|
7
9
|
import { updateCodexConfig } from "./install-dist/install-local.mjs";
|
|
8
10
|
|
|
9
|
-
test("#given empty Codex config #when script installer updates config #then
|
|
11
|
+
test("#given empty Codex config #when script installer updates config #then sets subagent thread limits without forcing MultiAgentV2", async () => {
|
|
10
12
|
// given
|
|
11
13
|
const root = await mkdtemp(join(tmpdir(), "omo-codex-script-config-multi-agent-"));
|
|
12
14
|
const configPath = join(root, "config.toml");
|
|
@@ -22,9 +24,70 @@ test("#given empty Codex config #when script installer updates config #then enab
|
|
|
22
24
|
|
|
23
25
|
// then
|
|
24
26
|
const config = await readFile(configPath, "utf8");
|
|
27
|
+
assert.doesNotMatch(config, /^\s*multi_agent_mode\s*=/m);
|
|
28
|
+
assert.match(config, /\[agents\]/);
|
|
29
|
+
assert.match(config, /max_threads = 1000/);
|
|
25
30
|
assert.match(config, /\[features\.multi_agent_v2\]/);
|
|
26
|
-
|
|
27
|
-
assert.
|
|
31
|
+
const v2Section = multiAgentV2Section(config);
|
|
32
|
+
assert.doesNotMatch(v2Section, /^enabled\s*=/m);
|
|
33
|
+
assert.match(v2Section, /max_concurrent_threads_per_session = 1000/);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
test("#given queue multi-agent mode #when script installer updates config #then removes unsupported root key", async () => {
|
|
37
|
+
const root = await mkdtemp(join(tmpdir(), "omo-codex-script-config-multi-agent-mode-"));
|
|
38
|
+
const configPath = join(root, "config.toml");
|
|
39
|
+
await writeFile(
|
|
40
|
+
configPath,
|
|
41
|
+
[
|
|
42
|
+
'multi_agent_mode = "queue"',
|
|
43
|
+
"",
|
|
44
|
+
"[features]",
|
|
45
|
+
"multi_agent = true",
|
|
46
|
+
"",
|
|
47
|
+
].join("\n"),
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
await updateCodexConfig({
|
|
51
|
+
configPath,
|
|
52
|
+
repoRoot: "/repo/packages/omo-codex",
|
|
53
|
+
marketplaceName: "debug",
|
|
54
|
+
marketplaceSource: { sourceType: "local", source: "/repo/packages/omo-codex" },
|
|
55
|
+
pluginNames: ["omo"],
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
const config = await readFile(configPath, "utf8");
|
|
59
|
+
assert.doesNotMatch(config, /^\s*multi_agent_mode\s*=/m);
|
|
60
|
+
assert.doesNotMatch(config, /multi_agent_mode = "queue"/);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
test("#given indented steering mode and inline-comment features table #when script installer updates config #then removes root key and keeps one features table", async () => {
|
|
64
|
+
const root = await mkdtemp(join(tmpdir(), "omo-codex-script-config-toml-root-regression-"));
|
|
65
|
+
const configPath = join(root, "config.toml");
|
|
66
|
+
await writeFile(
|
|
67
|
+
configPath,
|
|
68
|
+
[
|
|
69
|
+
' multi_agent_mode = "steering"',
|
|
70
|
+
"",
|
|
71
|
+
"[features] # keep comment",
|
|
72
|
+
"plugins = false",
|
|
73
|
+
"",
|
|
74
|
+
].join("\n"),
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
await updateCodexConfig({
|
|
78
|
+
configPath,
|
|
79
|
+
repoRoot: "/repo/packages/omo-codex",
|
|
80
|
+
marketplaceName: "debug",
|
|
81
|
+
marketplaceSource: { sourceType: "local", source: "/repo/packages/omo-codex" },
|
|
82
|
+
pluginNames: ["omo"],
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
const config = await readFile(configPath, "utf8");
|
|
86
|
+
assert.equal(config.match(/^\s*multi_agent_mode\s*=/gm)?.length ?? 0, 0);
|
|
87
|
+
assert.equal(config.match(/^\s*\[features\](?:\s*#.*)?$/gm)?.length, 1);
|
|
88
|
+
assert.match(config, /^\[features\] # keep comment$/m);
|
|
89
|
+
assert.doesNotMatch(config, /multi_agent_mode = "queue"/);
|
|
90
|
+
assert.doesNotMatch(config, /multi_agent_mode = "steering"/);
|
|
28
91
|
});
|
|
29
92
|
|
|
30
93
|
test("#given empty Codex config #when script installer updates config #then leaves Context7 to the plugin MCP manifest", async () => {
|
|
@@ -78,7 +141,7 @@ test("#given existing Context7 MCP config #when script installer updates config
|
|
|
78
141
|
await writeFile(
|
|
79
142
|
configPath,
|
|
80
143
|
[
|
|
81
|
-
"[mcp_servers.context7]",
|
|
144
|
+
"[mcp_servers.context7] # stale npx package from old docs",
|
|
82
145
|
'command = "node"',
|
|
83
146
|
'args = ["/opt/context7/server.js"]',
|
|
84
147
|
'startup_timeout_sec = 40',
|
|
@@ -104,6 +167,70 @@ test("#given existing Context7 MCP config #when script installer updates config
|
|
|
104
167
|
assert.doesNotMatch(config, /YOUR_API_KEY/);
|
|
105
168
|
});
|
|
106
169
|
|
|
170
|
+
test("#given real Context7 API key and placeholder comment #when script installer updates config #then preserves user setup", async () => {
|
|
171
|
+
// given
|
|
172
|
+
const root = await mkdtemp(join(tmpdir(), "omo-codex-script-config-context7-real-key-"));
|
|
173
|
+
const configPath = join(root, "config.toml");
|
|
174
|
+
await writeFile(
|
|
175
|
+
configPath,
|
|
176
|
+
[
|
|
177
|
+
"[mcp_servers.context7]",
|
|
178
|
+
'command = "npx"',
|
|
179
|
+
'args = ["-y", "@upstash/context7-mcp", "--api-key", "ctx7sk_live_example"] # replace YOUR_API_KEY in docs only',
|
|
180
|
+
"startup_timeout_sec = 20",
|
|
181
|
+
"",
|
|
182
|
+
].join("\n"),
|
|
183
|
+
);
|
|
184
|
+
|
|
185
|
+
// when
|
|
186
|
+
await updateCodexConfig({
|
|
187
|
+
configPath,
|
|
188
|
+
repoRoot: "/repo/packages/omo-codex",
|
|
189
|
+
marketplaceName: "sisyphuslabs",
|
|
190
|
+
marketplaceSource: { sourceType: "local", source: "/repo/packages/omo-codex/cache/sisyphuslabs" },
|
|
191
|
+
pluginNames: ["omo"],
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
// then
|
|
195
|
+
const config = await readFile(configPath, "utf8");
|
|
196
|
+
assert.match(config, /\[mcp_servers\.context7\]/);
|
|
197
|
+
assert.match(config, /ctx7sk_live_example/);
|
|
198
|
+
assert.match(config, /replace YOUR_API_KEY in docs only/);
|
|
199
|
+
assert.match(config, /\[plugins\."omo@sisyphuslabs"\.mcp_servers\.context7\]/);
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
test("#given stale Context7 placeholder MCP config #when script installer updates config #then removes it for plugin MCP", async () => {
|
|
203
|
+
// given
|
|
204
|
+
const root = await mkdtemp(join(tmpdir(), "omo-codex-script-config-context7-placeholder-"));
|
|
205
|
+
const configPath = join(root, "config.toml");
|
|
206
|
+
await writeFile(
|
|
207
|
+
configPath,
|
|
208
|
+
[
|
|
209
|
+
"[mcp_servers.context7]",
|
|
210
|
+
'command = "npx"',
|
|
211
|
+
'args = ["-y", "@upstash/context7-mcp", "--api-key", "YOUR_API_KEY"]',
|
|
212
|
+
"startup_timeout_sec = 20",
|
|
213
|
+
"",
|
|
214
|
+
].join("\n"),
|
|
215
|
+
);
|
|
216
|
+
|
|
217
|
+
// when
|
|
218
|
+
await updateCodexConfig({
|
|
219
|
+
configPath,
|
|
220
|
+
repoRoot: "/repo/packages/omo-codex",
|
|
221
|
+
marketplaceName: "sisyphuslabs",
|
|
222
|
+
marketplaceSource: { sourceType: "local", source: "/repo/packages/omo-codex/cache/sisyphuslabs" },
|
|
223
|
+
pluginNames: ["omo"],
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
// then
|
|
227
|
+
const config = await readFile(configPath, "utf8");
|
|
228
|
+
assert.match(config, /\[plugins\."omo@sisyphuslabs"\.mcp_servers\.context7\]/);
|
|
229
|
+
assert.doesNotMatch(config, /\[mcp_servers\.context7\]/);
|
|
230
|
+
assert.doesNotMatch(config, /@upstash\/context7-mcp/);
|
|
231
|
+
assert.doesNotMatch(config, /YOUR_API_KEY/);
|
|
232
|
+
});
|
|
233
|
+
|
|
107
234
|
test("#given Codex config is a symlink #when script installer updates config #then writes through the target", async () => {
|
|
108
235
|
// given
|
|
109
236
|
const root = await mkdtemp(join(tmpdir(), "omo-codex-script-config-symlink-"));
|
|
@@ -152,7 +279,7 @@ test("#given sisyphuslabs config without explicit source #when script installer
|
|
|
152
279
|
assert.doesNotMatch(config, /ref = "main"/);
|
|
153
280
|
});
|
|
154
281
|
|
|
155
|
-
test("#given existing MultiAgentV2 table #when script installer updates config #then preserves unrelated tuning while setting
|
|
282
|
+
test("#given existing MultiAgentV2 table #when script installer updates config #then preserves unrelated tuning while setting subagent thread limits", async () => {
|
|
156
283
|
// given
|
|
157
284
|
const root = await mkdtemp(join(tmpdir(), "omo-codex-script-config-multi-agent-existing-"));
|
|
158
285
|
const configPath = join(root, "config.toml");
|
|
@@ -179,9 +306,9 @@ test("#given existing MultiAgentV2 table #when script installer updates config #
|
|
|
179
306
|
// then
|
|
180
307
|
const config = await readFile(configPath, "utf8");
|
|
181
308
|
assert.match(config, /\[features\.multi_agent_v2\]/);
|
|
182
|
-
assert.
|
|
309
|
+
assert.doesNotMatch(sectionText(config, "[features.multi_agent_v2]"), /enabled = true/);
|
|
183
310
|
assert.match(config, /usage_hint_enabled = false/);
|
|
184
|
-
assert.match(config, /max_concurrent_threads_per_session =
|
|
311
|
+
assert.match(config, /max_concurrent_threads_per_session = 1000/);
|
|
185
312
|
assert.doesNotMatch(config, /max_concurrent_threads_per_session = 4/);
|
|
186
313
|
});
|
|
187
314
|
|
|
@@ -202,7 +329,8 @@ test("#given empty Codex config #when script installer updates config #then sets
|
|
|
202
329
|
// then
|
|
203
330
|
const config = await readFile(configPath, "utf8");
|
|
204
331
|
const v2Section = config.slice(config.indexOf("[features.multi_agent_v2]"));
|
|
205
|
-
assert.match(
|
|
332
|
+
assert.match(config, /\[agents\][\s\S]*?max_threads = 1000/);
|
|
333
|
+
assert.match(v2Section, /max_concurrent_threads_per_session = 1000/);
|
|
206
334
|
assert.doesNotMatch(v2Section, /hide_spawn_agent_metadata/);
|
|
207
335
|
});
|
|
208
336
|
|
|
@@ -266,12 +394,45 @@ test("#given legacy boolean MultiAgentV2 flag and table #when script installer u
|
|
|
266
394
|
const config = await readFile(configPath, "utf8");
|
|
267
395
|
assert.doesNotMatch(config, /^multi_agent_v2\s*=/m);
|
|
268
396
|
assert.match(config, /\[features\.multi_agent_v2\]/);
|
|
269
|
-
|
|
270
|
-
assert.
|
|
271
|
-
assert.match(
|
|
397
|
+
const v2Section = multiAgentV2Section(config);
|
|
398
|
+
assert.doesNotMatch(v2Section, /^enabled\s*=/m);
|
|
399
|
+
assert.match(v2Section, /usage_hint_enabled = false/);
|
|
400
|
+
assert.match(v2Section, /max_concurrent_threads_per_session = 1000/);
|
|
272
401
|
});
|
|
273
402
|
|
|
274
|
-
test("#given legacy
|
|
403
|
+
test("#given legacy boolean MultiAgentV2 flag false #when script installer updates config #then normalizes to a disabled table config", async () => {
|
|
404
|
+
// given
|
|
405
|
+
const root = await mkdtemp(join(tmpdir(), "omo-codex-script-config-multi-agent-legacy-false-"));
|
|
406
|
+
const configPath = join(root, "config.toml");
|
|
407
|
+
await writeFile(
|
|
408
|
+
configPath,
|
|
409
|
+
[
|
|
410
|
+
"[features]",
|
|
411
|
+
"multi_agent_v2 = false",
|
|
412
|
+
"plugins = false",
|
|
413
|
+
"",
|
|
414
|
+
].join("\n"),
|
|
415
|
+
);
|
|
416
|
+
|
|
417
|
+
// when
|
|
418
|
+
await updateCodexConfig({
|
|
419
|
+
configPath,
|
|
420
|
+
repoRoot: "/repo/packages/omo-codex",
|
|
421
|
+
marketplaceName: "debug",
|
|
422
|
+
marketplaceSource: { sourceType: "local", source: "/repo/packages/omo-codex" },
|
|
423
|
+
pluginNames: ["omo"],
|
|
424
|
+
});
|
|
425
|
+
|
|
426
|
+
// then
|
|
427
|
+
const config = await readFile(configPath, "utf8");
|
|
428
|
+
assert.doesNotMatch(config, /^multi_agent_v2\s*=/m);
|
|
429
|
+
assert.match(config, /\[features\.multi_agent_v2\]/);
|
|
430
|
+
const disabledV2Section = multiAgentV2Section(config);
|
|
431
|
+
assert.match(disabledV2Section, /^enabled = false$/m);
|
|
432
|
+
assert.match(disabledV2Section, /^max_concurrent_threads_per_session = 1000$/m);
|
|
433
|
+
});
|
|
434
|
+
|
|
435
|
+
test("#given legacy agents max_threads #when script installer updates config #then raises the root subagent thread cap", async () => {
|
|
275
436
|
// given
|
|
276
437
|
const root = await mkdtemp(join(tmpdir(), "omo-codex-script-config-multi-agent-legacy-threads-"));
|
|
277
438
|
const configPath = join(root, "config.toml");
|
|
@@ -298,15 +459,17 @@ test("#given legacy agents max_threads #when script installer updates config #th
|
|
|
298
459
|
// then
|
|
299
460
|
const config = await readFile(configPath, "utf8");
|
|
300
461
|
assert.match(config, /\[features\.multi_agent_v2\]/);
|
|
301
|
-
|
|
302
|
-
assert.
|
|
462
|
+
const v2Section = multiAgentV2Section(config);
|
|
463
|
+
assert.doesNotMatch(v2Section, /^enabled\s*=/m);
|
|
464
|
+
assert.match(v2Section, /max_concurrent_threads_per_session = 1000/);
|
|
303
465
|
assert.match(config, /\[agents\]/);
|
|
304
|
-
assert.
|
|
466
|
+
assert.match(config, /max_threads = 1000/);
|
|
467
|
+
assert.doesNotMatch(config, /max_threads = 16/);
|
|
305
468
|
assert.match(config, /max_depth = 4/);
|
|
306
469
|
assert.match(config, /job_max_runtime_seconds = 3600/);
|
|
307
470
|
});
|
|
308
471
|
|
|
309
|
-
test("#given managed agent role sections #when script installer updates config #then preserves role config while
|
|
472
|
+
test("#given managed agent role sections #when script installer updates config #then preserves role config while raising only root agents max_threads", async () => {
|
|
310
473
|
// given
|
|
311
474
|
const root = await mkdtemp(join(tmpdir(), "omo-codex-script-config-multi-agent-role-section-"));
|
|
312
475
|
const configPath = join(root, "config.toml");
|
|
@@ -335,12 +498,21 @@ test("#given managed agent role sections #when script installer updates config #
|
|
|
335
498
|
|
|
336
499
|
// then
|
|
337
500
|
const config = await readFile(configPath, "utf8");
|
|
338
|
-
assert.
|
|
501
|
+
assert.match(config, /max_threads = 1000/);
|
|
502
|
+
assert.doesNotMatch(config, /max_threads = 16/);
|
|
339
503
|
assert.match(config, /\[agents\.explorer\]/);
|
|
340
504
|
assert.match(config, /description = "read-only explorer"/);
|
|
341
505
|
assert.match(config, /config_file = "\.\/agents\/explorer\.toml"/);
|
|
342
506
|
});
|
|
343
507
|
|
|
508
|
+
function sectionText(config, header) {
|
|
509
|
+
const start = config.indexOf(header);
|
|
510
|
+
if (start === -1) return "";
|
|
511
|
+
const afterStart = config.slice(start + header.length);
|
|
512
|
+
const nextSectionOffset = afterStart.search(/\n\[/);
|
|
513
|
+
return nextSectionOffset === -1 ? config.slice(start) : config.slice(start, start + header.length + nextSectionOffset);
|
|
514
|
+
}
|
|
515
|
+
|
|
344
516
|
test("#given existing trust and lsp blocks #when updating config #then existing blocks are preserved", async () => {
|
|
345
517
|
// given
|
|
346
518
|
const root = await mkdtemp(join(tmpdir(), "omo-codex-config-baseline-"));
|
|
@@ -377,3 +549,12 @@ test("#given existing trust and lsp blocks #when updating config #then existing
|
|
|
377
549
|
assert.match(content, /\[hooks\.state\."omo@sisyphuslabs:hooks\/hooks\.json:post_tool_use:0:0"\]/);
|
|
378
550
|
assert.match(content, /trusted_hash = "sha256:keep"/);
|
|
379
551
|
});
|
|
552
|
+
|
|
553
|
+
function multiAgentV2Section(config) {
|
|
554
|
+
const header = "[features.multi_agent_v2]";
|
|
555
|
+
const start = config.indexOf(header);
|
|
556
|
+
assert.notEqual(start, -1);
|
|
557
|
+
const rest = config.slice(start);
|
|
558
|
+
const nextHeader = rest.slice(1).search(/^\[/m);
|
|
559
|
+
return nextHeader === -1 ? rest : rest.slice(0, nextHeader + 1);
|
|
560
|
+
}
|
|
@@ -75,11 +75,104 @@ test("#given a dry-run doctor #when delegating #then routes to the Codex LazyCod
|
|
|
75
75
|
// then
|
|
76
76
|
assert.equal(ran, false);
|
|
77
77
|
assert.match(logged, /^codex exec /);
|
|
78
|
+
assert.match(logged, /--sandbox danger-full-access/);
|
|
79
|
+
assert.doesNotMatch(logged, /--model/);
|
|
80
|
+
assert.doesNotMatch(logged, /gpt-5\.5-codex-mini/);
|
|
81
|
+
assert.doesNotMatch(logged, /--sandbox read-only/);
|
|
78
82
|
assert.match(logged, /Use \$omo:lcx-doctor/);
|
|
83
|
+
assert.match(logged, /LAZYCODEX_SOURCE_ROOT/);
|
|
84
|
+
assert.match(logged, /\$\{TMPDIR:-\/tmp\}\/lazycodex-sources/);
|
|
79
85
|
assert.match(logged, /Requested doctor arguments: --json/);
|
|
80
86
|
assert.doesNotMatch(logged, /oh-my-openagent omo doctor/);
|
|
81
87
|
});
|
|
82
88
|
|
|
89
|
+
test("#given doctor without model override #when delegating #then uses the configured Codex default model", async () => {
|
|
90
|
+
// given
|
|
91
|
+
const parsed = { kind: "command", command: "doctor", args: ["--json"] };
|
|
92
|
+
|
|
93
|
+
// when
|
|
94
|
+
const invocation = buildDelegatedOmoInvocation(parsed);
|
|
95
|
+
|
|
96
|
+
// then
|
|
97
|
+
assert.equal(invocation.command, "codex");
|
|
98
|
+
assert.equal(invocation.args.includes("--model"), false);
|
|
99
|
+
assert.equal(invocation.args.some((arg) => arg.includes("gpt-5.5-codex-mini")), false);
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
test("#given explicit doctor model override #when delegating #then passes only that model to Codex exec", async () => {
|
|
103
|
+
// given
|
|
104
|
+
const parsed = { kind: "command", command: "doctor", args: ["--model", "gpt-5.5", "--json"] };
|
|
105
|
+
|
|
106
|
+
// when
|
|
107
|
+
const invocation = buildDelegatedOmoInvocation(parsed);
|
|
108
|
+
|
|
109
|
+
// then
|
|
110
|
+
assert.equal(invocation.command, "codex");
|
|
111
|
+
assert.deepEqual(invocation.args.slice(0, 9), [
|
|
112
|
+
"exec",
|
|
113
|
+
"--ephemeral",
|
|
114
|
+
"--sandbox",
|
|
115
|
+
"danger-full-access",
|
|
116
|
+
"--skip-git-repo-check",
|
|
117
|
+
"--cd",
|
|
118
|
+
".",
|
|
119
|
+
"--model",
|
|
120
|
+
"gpt-5.5",
|
|
121
|
+
]);
|
|
122
|
+
assert.match(invocation.args.at(-1), /Requested doctor arguments: --json/);
|
|
123
|
+
assert.doesNotMatch(invocation.args.at(-1), /--model/);
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
test("#given doctor source-root override #when delegating #then passes it to the Codex workflow environment", async () => {
|
|
127
|
+
// given
|
|
128
|
+
const parsed = { kind: "command", command: "doctor", args: ["--source-root", "/var/tmp/lcx-sources", "--json"] };
|
|
129
|
+
|
|
130
|
+
// when
|
|
131
|
+
const invocation = buildDelegatedOmoInvocation(parsed);
|
|
132
|
+
|
|
133
|
+
// then
|
|
134
|
+
assert.equal(invocation.env?.LAZYCODEX_SOURCE_ROOT, "/var/tmp/lcx-sources");
|
|
135
|
+
assert.deepEqual(invocation.args.slice(0, 7), [
|
|
136
|
+
"exec",
|
|
137
|
+
"--ephemeral",
|
|
138
|
+
"--sandbox",
|
|
139
|
+
"danger-full-access",
|
|
140
|
+
"--skip-git-repo-check",
|
|
141
|
+
"--cd",
|
|
142
|
+
".",
|
|
143
|
+
]);
|
|
144
|
+
assert.match(invocation.args.at(-1), /Requested doctor arguments: --json/);
|
|
145
|
+
assert.doesNotMatch(invocation.args.at(-1), /--source-root/);
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
test("#given dry-run install without explicit platform #when delegating #then logs one Windows-safe Codex install command", async () => {
|
|
149
|
+
// given
|
|
150
|
+
const parsed = {
|
|
151
|
+
kind: "command",
|
|
152
|
+
command: "install",
|
|
153
|
+
dryRun: true,
|
|
154
|
+
noTui: true,
|
|
155
|
+
skipAuth: false,
|
|
156
|
+
autonomousPermissions: true,
|
|
157
|
+
repoRoot: undefined,
|
|
158
|
+
args: [],
|
|
159
|
+
};
|
|
160
|
+
const logged = [];
|
|
161
|
+
|
|
162
|
+
// when
|
|
163
|
+
await runDelegatedOmoCommand(parsed, {
|
|
164
|
+
cwd: "/tmp/project",
|
|
165
|
+
log: (line) => {
|
|
166
|
+
logged.push(line);
|
|
167
|
+
},
|
|
168
|
+
runCommand: async () => {},
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
// then
|
|
172
|
+
assert.deepEqual(logged, [
|
|
173
|
+
"npx --yes oh-my-openagent@latest install --platform=codex --no-tui --codex-autonomous",
|
|
174
|
+
]);
|
|
175
|
+
});
|
|
83
176
|
test("#given doctor recursion guard is active #when lazycodex doctor delegates #then rejects before launching Codex", async () => {
|
|
84
177
|
// given
|
|
85
178
|
const parsed = { kind: "command", command: "doctor", args: [] };
|