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
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# GitHub PR Attachment Uploads
|
|
2
|
+
|
|
3
|
+
Use this reference when a PR or issue body needs screenshots or other short-lived evidence images without committing them, creating a release asset, or using an external image host.
|
|
4
|
+
|
|
5
|
+
## Contract
|
|
6
|
+
|
|
7
|
+
- Upload through GitHub's own web attachment flow and use the resulting `https://github.com/user-attachments/assets/<uuid>` URL.
|
|
8
|
+
- Keep temporary files under `/tmp` or an untracked evidence directory such as `.omo/evidence/...`.
|
|
9
|
+
- Never commit generated screenshots, terminal PNGs, upload scripts with secrets, cookies, tokens, S3 form fields, or copied request headers.
|
|
10
|
+
- Never use GitHub Releases for PR evidence images.
|
|
11
|
+
- Never use external image hosters.
|
|
12
|
+
|
|
13
|
+
## Direct Upload Flow
|
|
14
|
+
|
|
15
|
+
The flow depends on an authenticated GitHub web session, not only a `gh` API token. GitHub's same-site cookie/session requirements mean the requests must carry the browser session cookies for `github.com`, the expected same-site/referrer context, and the CSRF tokens issued for the current PR or issue page. Treat every cookie and token as a secret.
|
|
16
|
+
|
|
17
|
+
1. Open the target PR or issue page in an authenticated GitHub web session.
|
|
18
|
+
2. Read the page's file-attachment CSRF token and repository id from the same page/session context.
|
|
19
|
+
3. `POST https://github.com/upload/policies/assets` with:
|
|
20
|
+
|
|
21
|
+
```json
|
|
22
|
+
{
|
|
23
|
+
"repository_id": "REPOSITORY_ID",
|
|
24
|
+
"name": "terminal.png",
|
|
25
|
+
"size": 12345,
|
|
26
|
+
"content_type": "image/png",
|
|
27
|
+
"authenticity_token": "FILE_ATTACHMENT_CSRF_TOKEN"
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
4. Upload the file bytes to S3 using the policy response's returned upload URL and form fields exactly as returned.
|
|
32
|
+
5. `PUT https://github.com/upload/assets/:id` with the returned `asset_upload_authenticity_token`.
|
|
33
|
+
6. Use only the final `https://github.com/user-attachments/assets/<uuid>` URL in the PR body.
|
|
34
|
+
|
|
35
|
+
## Secret Handling
|
|
36
|
+
|
|
37
|
+
Do not print cookies, authenticity tokens, S3 fields, authorization headers, or raw browser storage. A helper may print only the final user-attachments URL and non-secret file metadata such as filename, byte size, and content type. If a temporary script is needed, write it under `/tmp`, inspect it for accidental logging, and delete it after updating the PR body.
|
|
38
|
+
|
|
39
|
+
For PR body editing, write the body to `/tmp/pr-body.md`, inspect it, then pass it to `gh pr edit --body-file /tmp/pr-body.md`. The body should include the final attachment URLs and local evidence paths, but never the upload transaction details.
|
|
40
|
+
|
|
41
|
+
## Evidence Pattern
|
|
42
|
+
|
|
43
|
+
```markdown
|
|
44
|
+
## Visual Evidence
|
|
45
|
+
|
|
46
|
+
- ANSI terminal rendering: https://github.com/user-attachments/assets/<uuid>
|
|
47
|
+
- Long-line wrapping: https://github.com/user-attachments/assets/<uuid>
|
|
48
|
+
- Local evidence: `.omo/evidence/20260623-web-terminal-rendering/`
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
If the authenticated browser session is unavailable, leave the PR ready with local evidence paths and state the blocker. Do not fall back to releases or external hosting.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Web Terminal Visual QA
|
|
2
|
+
|
|
3
|
+
Use `script/qa/web-terminal-visual-qa.mjs` whenever QA needs TUI visual evidence. It turns a terminal or tmux transcript into browser-rendered evidence so PRs can carry the same artifacts as web UI visual QA.
|
|
4
|
+
|
|
5
|
+
## Evidence Contract
|
|
6
|
+
|
|
7
|
+
Each run writes these files under the chosen evidence directory:
|
|
8
|
+
|
|
9
|
+
- `terminal.txt`: redacted plain terminal text for review and assertions.
|
|
10
|
+
- `terminal-ansi.txt`: redacted ANSI capture when available.
|
|
11
|
+
- `terminal.html`: browser-renderable terminal frame that preserves ANSI colors and SGR styles.
|
|
12
|
+
- `terminal.png`: Chrome/Chromium screenshot with the same ANSI styling, unless `--no-browser` is used.
|
|
13
|
+
- `metadata.json`: connector, source, output paths, and cleanup receipt.
|
|
14
|
+
|
|
15
|
+
The PR should cite `metadata.json` and attach or link `terminal.png` for OpenCode/Codex TUI proof. For PR-body image hosting, use GitHub user attachments as documented in [docs/reference/github-attachment-upload.md](github-attachment-upload.md); do not commit temporary PNGs, use releases, or use external image hosts.
|
|
16
|
+
|
|
17
|
+
## Redaction Contract
|
|
18
|
+
|
|
19
|
+
The helper redacts terminal content before writing `terminal.txt`, `terminal-ansi.txt`, `terminal.html`, or `terminal.png`. Built-in rules cover common authorization headers, token/password/key assignments, GitHub tokens, and OpenAI-style `sk-...` tokens.
|
|
20
|
+
|
|
21
|
+
Add exact local values with `--redact <literal>` and project-specific patterns with `--redact-regex <expr>`:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
node script/qa/web-terminal-visual-qa.mjs \
|
|
25
|
+
--title "Codex TUI QA" \
|
|
26
|
+
--from-file .omo/evidence/run/capture.txt \
|
|
27
|
+
--evidence-dir .omo/evidence/run/codex-web-terminal \
|
|
28
|
+
--redact "$LOCAL_TOKEN" \
|
|
29
|
+
--redact-regex 'session_[A-Za-z0-9]+'
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Custom `--redact-regex` rules replace the full regex match, even when the expression contains capture groups. Prefix-preserving redaction is reserved for the built-in authorization and key-assignment rules.
|
|
33
|
+
|
|
34
|
+
Do not rely on screenshots to hide secrets. If a capture might include cookies, auth headers, raw env dumps, launchd environments, provider keys, or browser storage, redact first or summarize the run instead of storing the transcript.
|
|
35
|
+
|
|
36
|
+
## Replay An Existing Capture
|
|
37
|
+
|
|
38
|
+
Use this path for maximum OS compatibility, including Windows hosts without tmux:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
node script/qa/web-terminal-visual-qa.mjs \
|
|
42
|
+
--title "Codex TUI QA" \
|
|
43
|
+
--from-file .omo/evidence/run/capture.txt \
|
|
44
|
+
--evidence-dir .omo/evidence/run/codex-web-terminal
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Long terminal lines wrap by default for readable PR evidence. Pass `--no-wrap` only when horizontal scrolling is part of the behavior under test.
|
|
48
|
+
|
|
49
|
+
## Run Through The PTY Connector
|
|
50
|
+
|
|
51
|
+
Use this when `tmux` is available on macOS/Linux or a Windows environment that provides tmux, such as Git Bash/MSYS2:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
node script/qa/web-terminal-visual-qa.mjs \
|
|
55
|
+
--title "OpenCode TUI QA" \
|
|
56
|
+
--command "opencode --help" \
|
|
57
|
+
--source-label "opencode help smoke" \
|
|
58
|
+
--cwd "$PWD" \
|
|
59
|
+
--evidence-dir .omo/evidence/run/opencode-web-terminal
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
`--command` starts a short-lived tmux-backed PTY connector, captures the pane, renders the web evidence, then records a `tmux kill-session` cleanup receipt in `metadata.json`. The raw --command string is process data and may contain inline secrets, so it is never persisted to metadata; use `--source-label` for a reviewer-safe description.
|
|
63
|
+
|
|
64
|
+
## OS Notes
|
|
65
|
+
|
|
66
|
+
- macOS/Linux: prefer `--command` when `tmux` is installed; otherwise replay a saved pane with `--from-file`.
|
|
67
|
+
- Windows: prefer `--from-file` for native shells. Git Bash/MSYS2 environments with tmux may use `--command`.
|
|
68
|
+
- Windows-native ConPTY live capture should plug into this same artifact and metadata contract before becoming required.
|
|
69
|
+
|
|
70
|
+
## QA Guidance
|
|
71
|
+
|
|
72
|
+
For OpenCode/Codex QA, pair the harness-specific smoke with this helper:
|
|
73
|
+
|
|
74
|
+
1. Drive the TUI through the normal QA skill or script.
|
|
75
|
+
2. Capture the pane or use the helper's `--command` mode.
|
|
76
|
+
3. Store the output under `.omo/evidence/<YYYYMMDD>-<slug>/`.
|
|
77
|
+
4. Review `terminal.txt`, `terminal-ansi.txt`, and `metadata.json` for accidental secrets before citing them.
|
|
78
|
+
5. Include `terminal.png`, `terminal.txt`, and `metadata.json` in the evidence summary.
|
|
79
|
+
6. Verify cleanup receipts: no leftover tmux sessions, PIDs, ports, or temp state.
|
|
80
|
+
|
|
81
|
+
Tests alone are not TUI visual QA. The passing artifact is the rendered terminal evidence plus a binary observation, such as expected text present, no overflow, and no obvious border misalignment.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oh-my-opencode",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.14.1",
|
|
4
4
|
"description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -41,6 +41,12 @@
|
|
|
41
41
|
"dist",
|
|
42
42
|
"bin",
|
|
43
43
|
"postinstall.mjs",
|
|
44
|
+
"script/qa/web-terminal-redaction.d.mts",
|
|
45
|
+
"script/qa/web-terminal-redaction.mjs",
|
|
46
|
+
"script/qa/web-terminal-renderer.mjs",
|
|
47
|
+
"script/qa/web-terminal-visual-qa.mjs",
|
|
48
|
+
"docs/reference/github-attachment-upload.md",
|
|
49
|
+
"docs/reference/web-terminal-visual-qa.md",
|
|
44
50
|
".opencode/command",
|
|
45
51
|
".opencode/skills",
|
|
46
52
|
".agents/command",
|
|
@@ -59,7 +65,20 @@
|
|
|
59
65
|
"packages/omo-codex/marketplace.json",
|
|
60
66
|
"packages/omo-codex/lazycodex-repository",
|
|
61
67
|
"packages/omo-codex/plugin",
|
|
68
|
+
"packages/omo-codex/plugin/components/bootstrap/dist/cli.js",
|
|
69
|
+
"packages/omo-codex/plugin/components/bootstrap/scripts/bootstrap.ps1",
|
|
70
|
+
"packages/omo-codex/plugin/components/bootstrap/scripts/node-dispatch.ps1",
|
|
71
|
+
"packages/omo-codex/plugin/components/codegraph/dist/cli.js",
|
|
72
|
+
"packages/omo-codex/plugin/components/codegraph/dist/serve.js",
|
|
73
|
+
"packages/omo-codex/plugin/components/comment-checker/dist/cli.js",
|
|
74
|
+
"packages/omo-codex/plugin/components/git-bash/dist/cli.js",
|
|
75
|
+
"packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/cli.js",
|
|
76
|
+
"packages/omo-codex/plugin/components/lsp/dist/cli.js",
|
|
77
|
+
"packages/omo-codex/plugin/components/rules/dist/cli.js",
|
|
62
78
|
"packages/omo-codex/plugin/components/start-work-continuation/dist/cli.js",
|
|
79
|
+
"packages/omo-codex/plugin/components/teammode/dist/cli.js",
|
|
80
|
+
"packages/omo-codex/plugin/components/telemetry/dist/cli.js",
|
|
81
|
+
"packages/omo-codex/plugin/components/ultrawork/dist/cli.js",
|
|
63
82
|
"packages/omo-codex/plugin/components/ulw-loop/dist/cli.js",
|
|
64
83
|
"packages/omo-codex/plugin/.codex-plugin",
|
|
65
84
|
"!packages/omo-codex/plugin/node_modules",
|
|
@@ -100,7 +119,7 @@
|
|
|
100
119
|
"typecheck:packages": "tsgo --noEmit -p packages/rules-engine/tsconfig.json && tsgo --noEmit -p packages/delegate-core/tsconfig.json && tsgo --noEmit -p packages/mcp-stdio-core/tsconfig.json && tsgo --noEmit -p packages/mcp-client-core/tsconfig.json && tsgo --noEmit -p packages/git-bash-mcp/tsconfig.json && tsgo --noEmit -p packages/lsp-core/tsconfig.json && tsgo --noEmit -p packages/utils/tsconfig.json && tsgo --noEmit -p packages/model-core/tsconfig.json && tsgo --noEmit -p packages/prompts-core/tsconfig.json && tsgo --noEmit -p packages/comment-checker-core/tsconfig.json && tsgo --noEmit -p packages/hashline-core/tsconfig.json && tsgo --noEmit -p packages/tmux-core/tsconfig.json && tsgo --noEmit -p packages/team-core/tsconfig.json && tsgo --noEmit -p packages/openclaw-core/tsconfig.json && tsgo --noEmit -p packages/boulder-state/tsconfig.json && tsgo --noEmit -p packages/telemetry-core/tsconfig.json && tsgo --noEmit -p packages/claude-code-compat-core/tsconfig.json && tsgo --noEmit -p packages/skills-loader-core/tsconfig.json && tsgo --noEmit -p packages/agents-md-core/tsconfig.json && tsgo --noEmit -p packages/omo-codex/plugin/shared/tsconfig.json && tsgo --noEmit -p packages/omo-codex/tsconfig.json && tsgo --noEmit -p packages/omo-opencode/tsconfig.json",
|
|
101
120
|
"typecheck:script": "tsgo --noEmit -p script/tsconfig.json",
|
|
102
121
|
"test": "bun test",
|
|
103
|
-
"test:codex": "bun run build:codex-install && bun run build:git-bash-mcp && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && npm --prefix packages/lsp-tools-mcp test && npm --prefix packages/omo-codex/plugin ci && bun run --cwd packages/omo-codex/plugin build && node scripts/check-third-party-notices.mjs --ship && bun test packages/omo-opencode/src/cli/cli-installer.platform.test.ts packages/omo-codex/src/install/codex-cache.test.ts packages/omo-codex/src/install/codex-cleanup.test.ts packages/omo-codex/src/install/codex-config-agent-cleanup.test.ts packages/omo-codex/src/install/codex-config-autonomous-features.test.ts packages/omo-codex/src/install/codex-config-reasoning.test.ts packages/omo-codex/src/install/codex-config-toml.test.ts packages/omo-codex/src/install/codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex.test.ts packages/omo-codex/src/install/install-codex-packaged.test.ts packages/omo-codex/src/install/link-cached-plugin-agents.test.ts packages/omo-codex/src/**/*.test.ts packages/utils/src/jsonc-parser.test.ts packages/utils/src/frontmatter.test.ts packages/hashline-core/src/hash-computation.test.ts packages/hashline-core/src/smoke-untested-modules.test.ts packages/rules-engine/src/index.test.ts packages/rules-engine/src/security-boundary.test.ts packages/agents-md-core/src/injector.test.ts packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts && node --test packages/omo-codex/plugin/test/*.test.mjs packages/omo-codex/scripts/install-cache-copy.test.mjs packages/omo-codex/scripts/install-cli-args.test.mjs packages/omo-codex/scripts/install-delegated-command.test.mjs packages/omo-codex/scripts/install-config-autonomous-features.test.mjs packages/omo-codex/scripts/install-config-autonomous.test.mjs packages/omo-codex/scripts/install-config-reasoning.test.mjs packages/omo-codex/scripts/install-config.test.mjs packages/omo-codex/scripts/install-hook-targets.test.mjs packages/omo-codex/scripts/install-project-local-cleanup.test.mjs packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs packages/omo-codex/scripts/install-local-entrypoint.test.mjs packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs packages/omo-codex/scripts/install-local.test.mjs packages/omo-codex/scripts/install-marketplace-cache.test.mjs packages/omo-codex/scripts/install-mcp-runtime.test.mjs packages/omo-codex/scripts/install-packaged-local.test.mjs packages/omo-codex/scripts/install-generated-bundle.test.mjs packages/omo-codex/scripts/install-agent-links.test.mjs packages/omo-codex/scripts/install-bin-links.test.mjs",
|
|
122
|
+
"test:codex": "bun run build:codex-install && bun run build:git-bash-mcp && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && npm --prefix packages/lsp-tools-mcp test && npm --prefix packages/omo-codex/plugin ci && bun run --cwd packages/omo-codex/plugin build && npm --prefix packages/omo-codex/plugin/components/codegraph run typecheck && npm --prefix packages/omo-codex/plugin/components/codegraph test && node scripts/check-third-party-notices.mjs --ship && bun test packages/omo-opencode/src/cli/cli-installer.platform.test.ts packages/omo-codex/src/install/codex-cache.test.ts packages/omo-codex/src/install/codex-cleanup.test.ts packages/omo-codex/src/install/codex-config-agent-cleanup.test.ts packages/omo-codex/src/install/codex-config-autonomous-features.test.ts packages/omo-codex/src/install/codex-config-reasoning.test.ts packages/omo-codex/src/install/codex-config-toml.test.ts packages/omo-codex/src/install/codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex.test.ts packages/omo-codex/src/install/install-codex-packaged.test.ts packages/omo-codex/src/install/link-cached-plugin-agents.test.ts packages/omo-codex/src/**/*.test.ts packages/utils/src/jsonc-parser.test.ts packages/utils/src/frontmatter.test.ts packages/hashline-core/src/hash-computation.test.ts packages/hashline-core/src/smoke-untested-modules.test.ts packages/rules-engine/src/index.test.ts packages/rules-engine/src/security-boundary.test.ts packages/agents-md-core/src/injector.test.ts packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts && node --test packages/omo-codex/plugin/test/*.test.mjs packages/omo-codex/scripts/install-cache-copy.test.mjs packages/omo-codex/scripts/install-cli-args.test.mjs packages/omo-codex/scripts/install-delegated-command.test.mjs packages/omo-codex/scripts/install-config-autonomous-features.test.mjs packages/omo-codex/scripts/install-config-autonomous.test.mjs packages/omo-codex/scripts/install-config-reasoning.test.mjs packages/omo-codex/scripts/install-config.test.mjs packages/omo-codex/scripts/install-hook-targets.test.mjs packages/omo-codex/scripts/install-project-local-cleanup.test.mjs packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs packages/omo-codex/scripts/install-local-entrypoint.test.mjs packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs packages/omo-codex/scripts/install-local.test.mjs packages/omo-codex/scripts/install-marketplace-cache.test.mjs packages/omo-codex/scripts/install-mcp-context7-runtime.test.mjs packages/omo-codex/scripts/install-mcp-runtime.test.mjs packages/omo-codex/scripts/install-packaged-local.test.mjs packages/omo-codex/scripts/install-generated-bundle.test.mjs packages/omo-codex/scripts/install-agent-links.test.mjs packages/omo-codex/scripts/install-bin-links.test.mjs",
|
|
104
123
|
"test:windows-codex": "bun run test:codex",
|
|
105
124
|
"build:git-bash-mcp": "bun run --cwd packages/git-bash-mcp build"
|
|
106
125
|
},
|
|
@@ -172,18 +191,18 @@
|
|
|
172
191
|
"typescript": "^6.0.3"
|
|
173
192
|
},
|
|
174
193
|
"optionalDependencies": {
|
|
175
|
-
"oh-my-opencode-darwin-arm64": "4.
|
|
176
|
-
"oh-my-opencode-darwin-x64": "4.
|
|
177
|
-
"oh-my-opencode-darwin-x64-baseline": "4.
|
|
178
|
-
"oh-my-opencode-linux-arm64": "4.
|
|
179
|
-
"oh-my-opencode-linux-arm64-musl": "4.
|
|
180
|
-
"oh-my-opencode-linux-x64": "4.
|
|
181
|
-
"oh-my-opencode-linux-x64-baseline": "4.
|
|
182
|
-
"oh-my-opencode-linux-x64-musl": "4.
|
|
183
|
-
"oh-my-opencode-linux-x64-musl-baseline": "4.
|
|
184
|
-
"oh-my-opencode-windows-arm64": "4.
|
|
185
|
-
"oh-my-opencode-windows-x64": "4.
|
|
186
|
-
"oh-my-opencode-windows-x64-baseline": "4.
|
|
194
|
+
"oh-my-opencode-darwin-arm64": "4.14.1",
|
|
195
|
+
"oh-my-opencode-darwin-x64": "4.14.1",
|
|
196
|
+
"oh-my-opencode-darwin-x64-baseline": "4.14.1",
|
|
197
|
+
"oh-my-opencode-linux-arm64": "4.14.1",
|
|
198
|
+
"oh-my-opencode-linux-arm64-musl": "4.14.1",
|
|
199
|
+
"oh-my-opencode-linux-x64": "4.14.1",
|
|
200
|
+
"oh-my-opencode-linux-x64-baseline": "4.14.1",
|
|
201
|
+
"oh-my-opencode-linux-x64-musl": "4.14.1",
|
|
202
|
+
"oh-my-opencode-linux-x64-musl-baseline": "4.14.1",
|
|
203
|
+
"oh-my-opencode-windows-arm64": "4.14.1",
|
|
204
|
+
"oh-my-opencode-windows-x64": "4.14.1",
|
|
205
|
+
"oh-my-opencode-windows-x64-baseline": "4.14.1"
|
|
187
206
|
},
|
|
188
207
|
"overrides": {
|
|
189
208
|
"hono": "^4.12.18",
|
|
@@ -381,6 +381,8 @@ async function runMcpStdioServer(input, output, options = {}) {
|
|
|
381
381
|
output,
|
|
382
382
|
handler: handleGitBashMcpRequest,
|
|
383
383
|
handlerOptions: options,
|
|
384
|
+
idleTimeoutMs: 0,
|
|
385
|
+
log: options.lifecycleLog,
|
|
384
386
|
parseErrorResponse: () => errorResponse(null, -32601, "Method not found")
|
|
385
387
|
});
|
|
386
388
|
}
|
|
@@ -88,7 +88,10 @@ function wrap(proc: ChildProcess): SpawnedProcess {
|
|
|
88
88
|
|
|
89
89
|
function killProcessTree(proc: ChildProcess, signal: NodeJS.Signals): void {
|
|
90
90
|
if (process.platform === "win32" && proc.pid) {
|
|
91
|
-
const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], {
|
|
91
|
+
const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], {
|
|
92
|
+
stdio: "ignore",
|
|
93
|
+
windowsHide: true,
|
|
94
|
+
});
|
|
92
95
|
if (!result.error && result.status === 0) return;
|
|
93
96
|
if (result.error) reportKillError("windows process tree kill", result.error);
|
|
94
97
|
}
|
|
@@ -644,7 +644,10 @@ function wrap(proc) {
|
|
|
644
644
|
}
|
|
645
645
|
function killProcessTree(proc, signal) {
|
|
646
646
|
if (process.platform === "win32" && proc.pid) {
|
|
647
|
-
const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], {
|
|
647
|
+
const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], {
|
|
648
|
+
stdio: "ignore",
|
|
649
|
+
windowsHide: true
|
|
650
|
+
});
|
|
648
651
|
if (!result.error && result.status === 0)
|
|
649
652
|
return;
|
|
650
653
|
if (result.error)
|
|
@@ -3402,6 +3405,7 @@ function unlinkQuietly(path) {
|
|
|
3402
3405
|
var PROBE_TIMEOUT_MS = 500;
|
|
3403
3406
|
var DEFAULT_READY_TIMEOUT_MS = 5000;
|
|
3404
3407
|
var DEFAULT_POLL_INTERVAL_MS = 100;
|
|
3408
|
+
var CODEX_LSP_DAEMON_CLI_ENV = "CODEX_LSP_DAEMON_CLI";
|
|
3405
3409
|
|
|
3406
3410
|
class DaemonUnreachableError extends Error {
|
|
3407
3411
|
constructor(socketPath) {
|
|
@@ -3462,7 +3466,7 @@ function spawnDaemonProcess(paths) {
|
|
|
3462
3466
|
mkdirSync3(dirname5(paths.log), { recursive: true });
|
|
3463
3467
|
const logFd = openSync2(paths.log, "a");
|
|
3464
3468
|
try {
|
|
3465
|
-
const cliPath =
|
|
3469
|
+
const cliPath = resolveDaemonCliPath();
|
|
3466
3470
|
const child = spawn2(execPath, [cliPath, "daemon"], {
|
|
3467
3471
|
detached: true,
|
|
3468
3472
|
stdio: ["ignore", logFd, logFd]
|
|
@@ -3472,6 +3476,12 @@ function spawnDaemonProcess(paths) {
|
|
|
3472
3476
|
closeSync2(logFd);
|
|
3473
3477
|
}
|
|
3474
3478
|
}
|
|
3479
|
+
function resolveDaemonCliPath(env = process.env) {
|
|
3480
|
+
const override = env[CODEX_LSP_DAEMON_CLI_ENV]?.trim();
|
|
3481
|
+
if (override)
|
|
3482
|
+
return override;
|
|
3483
|
+
return fileURLToPath3(new URL("./cli.js", import.meta.url));
|
|
3484
|
+
}
|
|
3475
3485
|
function defaultEnsureDaemonDeps() {
|
|
3476
3486
|
return {
|
|
3477
3487
|
probe: (socketPath) => probeSocket(socketPath),
|
|
@@ -3482,8 +3492,7 @@ function defaultEnsureDaemonDeps() {
|
|
|
3482
3492
|
},
|
|
3483
3493
|
spawnDaemon: (paths) => spawnDaemonProcess(paths),
|
|
3484
3494
|
sleep: (ms) => new Promise((resolve6) => {
|
|
3485
|
-
|
|
3486
|
-
timer.unref?.();
|
|
3495
|
+
setTimeout(resolve6, ms);
|
|
3487
3496
|
}),
|
|
3488
3497
|
now: () => Date.now()
|
|
3489
3498
|
};
|
|
@@ -3496,6 +3505,7 @@ import { homedir as homedir3, tmpdir } from "node:os";
|
|
|
3496
3505
|
import { join as join8 } from "node:path";
|
|
3497
3506
|
var requireFromHere = createRequire(import.meta.url);
|
|
3498
3507
|
var MAX_SOCKET_PATH_LENGTH = 100;
|
|
3508
|
+
var CODEX_LSP_DAEMON_VERSION_ENV = "CODEX_LSP_DAEMON_VERSION";
|
|
3499
3509
|
function resolveDaemonVersion(requireFn = requireFromHere) {
|
|
3500
3510
|
for (const candidate of ["./package.json", "../package.json"]) {
|
|
3501
3511
|
try {
|
|
@@ -3517,7 +3527,7 @@ function daemonBaseDir(env = process.env) {
|
|
|
3517
3527
|
const home = codexHome && codexHome.length > 0 ? codexHome : join8(homedir3(), ".codex");
|
|
3518
3528
|
return join8(home, "codex-lsp", "daemon");
|
|
3519
3529
|
}
|
|
3520
|
-
function daemonPaths(env = process.env, version = resolveDaemonVersion()) {
|
|
3530
|
+
function daemonPaths(env = process.env, version = resolveDaemonVersionFromEnv(env) ?? resolveDaemonVersion()) {
|
|
3521
3531
|
const dir = join8(daemonBaseDir(env), `v${version}`);
|
|
3522
3532
|
return {
|
|
3523
3533
|
version,
|
|
@@ -3528,6 +3538,10 @@ function daemonPaths(env = process.env, version = resolveDaemonVersion()) {
|
|
|
3528
3538
|
log: join8(dir, "daemon.log")
|
|
3529
3539
|
};
|
|
3530
3540
|
}
|
|
3541
|
+
function resolveDaemonVersionFromEnv(env = process.env) {
|
|
3542
|
+
const version = env[CODEX_LSP_DAEMON_VERSION_ENV]?.trim();
|
|
3543
|
+
return version && version.length > 0 ? version : null;
|
|
3544
|
+
}
|
|
3531
3545
|
function resolveSocketPath(dir, version) {
|
|
3532
3546
|
const digest = createHash("sha256").update(dir).digest("hex").slice(0, 16);
|
|
3533
3547
|
if (process.platform === "win32") {
|
|
@@ -3735,6 +3749,7 @@ async function runMcpStdioProxy(options = {}) {
|
|
|
3735
3749
|
await runJsonRpcStdioServer({
|
|
3736
3750
|
input,
|
|
3737
3751
|
output,
|
|
3752
|
+
idleTimeoutMs: 0,
|
|
3738
3753
|
handler: handleProxyRequest,
|
|
3739
3754
|
handlerOptions: callOptions,
|
|
3740
3755
|
onHandlerError: (error) => {
|
|
@@ -18,4 +18,5 @@ export interface EnsureDaemonOptions {
|
|
|
18
18
|
export declare function ensureDaemonRunning(paths: DaemonPaths, deps?: EnsureDaemonDeps, options?: EnsureDaemonOptions): Promise<void>;
|
|
19
19
|
export declare function probeSocket(socketPath: string, timeoutMs?: number): Promise<boolean>;
|
|
20
20
|
export declare function spawnDaemonProcess(paths: DaemonPaths): void;
|
|
21
|
+
export declare function resolveDaemonCliPath(env?: NodeJS.ProcessEnv): string;
|
|
21
22
|
export declare function defaultEnsureDaemonDeps(): EnsureDaemonDeps;
|
|
@@ -8,6 +8,7 @@ import { tryAcquireLock, unlinkQuietly } from "./lock.js";
|
|
|
8
8
|
const PROBE_TIMEOUT_MS = 500;
|
|
9
9
|
const DEFAULT_READY_TIMEOUT_MS = 5_000;
|
|
10
10
|
const DEFAULT_POLL_INTERVAL_MS = 100;
|
|
11
|
+
const CODEX_LSP_DAEMON_CLI_ENV = "CODEX_LSP_DAEMON_CLI";
|
|
11
12
|
export class DaemonUnreachableError extends Error {
|
|
12
13
|
constructor(socketPath) {
|
|
13
14
|
super(`LSP daemon did not become reachable at ${socketPath}`);
|
|
@@ -68,7 +69,7 @@ export function spawnDaemonProcess(paths) {
|
|
|
68
69
|
mkdirSync(dirname(paths.log), { recursive: true });
|
|
69
70
|
const logFd = openSync(paths.log, "a");
|
|
70
71
|
try {
|
|
71
|
-
const cliPath =
|
|
72
|
+
const cliPath = resolveDaemonCliPath();
|
|
72
73
|
const child = spawn(execPath, [cliPath, "daemon"], {
|
|
73
74
|
detached: true,
|
|
74
75
|
stdio: ["ignore", logFd, logFd],
|
|
@@ -79,6 +80,12 @@ export function spawnDaemonProcess(paths) {
|
|
|
79
80
|
closeSync(logFd);
|
|
80
81
|
}
|
|
81
82
|
}
|
|
83
|
+
export function resolveDaemonCliPath(env = process.env) {
|
|
84
|
+
const override = env[CODEX_LSP_DAEMON_CLI_ENV]?.trim();
|
|
85
|
+
if (override)
|
|
86
|
+
return override;
|
|
87
|
+
return fileURLToPath(new URL("./cli.js", import.meta.url));
|
|
88
|
+
}
|
|
82
89
|
export function defaultEnsureDaemonDeps() {
|
|
83
90
|
return {
|
|
84
91
|
probe: (socketPath) => probeSocket(socketPath),
|
|
@@ -89,8 +96,7 @@ export function defaultEnsureDaemonDeps() {
|
|
|
89
96
|
},
|
|
90
97
|
spawnDaemon: (paths) => spawnDaemonProcess(paths),
|
|
91
98
|
sleep: (ms) => new Promise((resolve) => {
|
|
92
|
-
|
|
93
|
-
timer.unref?.();
|
|
99
|
+
setTimeout(resolve, ms);
|
|
94
100
|
}),
|
|
95
101
|
now: () => Date.now(),
|
|
96
102
|
};
|
|
@@ -419,7 +419,10 @@ function wrap(proc) {
|
|
|
419
419
|
}
|
|
420
420
|
function killProcessTree(proc, signal) {
|
|
421
421
|
if (process.platform === "win32" && proc.pid) {
|
|
422
|
-
const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], {
|
|
422
|
+
const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], {
|
|
423
|
+
stdio: "ignore",
|
|
424
|
+
windowsHide: true
|
|
425
|
+
});
|
|
423
426
|
if (!result.error && result.status === 0)
|
|
424
427
|
return;
|
|
425
428
|
if (result.error)
|
|
@@ -1482,6 +1485,7 @@ function unlinkQuietly(path) {
|
|
|
1482
1485
|
var PROBE_TIMEOUT_MS = 500;
|
|
1483
1486
|
var DEFAULT_READY_TIMEOUT_MS = 5000;
|
|
1484
1487
|
var DEFAULT_POLL_INTERVAL_MS = 100;
|
|
1488
|
+
var CODEX_LSP_DAEMON_CLI_ENV = "CODEX_LSP_DAEMON_CLI";
|
|
1485
1489
|
|
|
1486
1490
|
class DaemonUnreachableError extends Error {
|
|
1487
1491
|
constructor(socketPath) {
|
|
@@ -1542,7 +1546,7 @@ function spawnDaemonProcess(paths) {
|
|
|
1542
1546
|
mkdirSync2(dirname2(paths.log), { recursive: true });
|
|
1543
1547
|
const logFd = openSync2(paths.log, "a");
|
|
1544
1548
|
try {
|
|
1545
|
-
const cliPath =
|
|
1549
|
+
const cliPath = resolveDaemonCliPath();
|
|
1546
1550
|
const child = spawn2(execPath, [cliPath, "daemon"], {
|
|
1547
1551
|
detached: true,
|
|
1548
1552
|
stdio: ["ignore", logFd, logFd]
|
|
@@ -1552,6 +1556,12 @@ function spawnDaemonProcess(paths) {
|
|
|
1552
1556
|
closeSync2(logFd);
|
|
1553
1557
|
}
|
|
1554
1558
|
}
|
|
1559
|
+
function resolveDaemonCliPath(env = process.env) {
|
|
1560
|
+
const override = env[CODEX_LSP_DAEMON_CLI_ENV]?.trim();
|
|
1561
|
+
if (override)
|
|
1562
|
+
return override;
|
|
1563
|
+
return fileURLToPath(new URL("./cli.js", import.meta.url));
|
|
1564
|
+
}
|
|
1555
1565
|
function defaultEnsureDaemonDeps() {
|
|
1556
1566
|
return {
|
|
1557
1567
|
probe: (socketPath) => probeSocket(socketPath),
|
|
@@ -1562,8 +1572,7 @@ function defaultEnsureDaemonDeps() {
|
|
|
1562
1572
|
},
|
|
1563
1573
|
spawnDaemon: (paths) => spawnDaemonProcess(paths),
|
|
1564
1574
|
sleep: (ms) => new Promise((resolve2) => {
|
|
1565
|
-
|
|
1566
|
-
timer.unref?.();
|
|
1575
|
+
setTimeout(resolve2, ms);
|
|
1567
1576
|
}),
|
|
1568
1577
|
now: () => Date.now()
|
|
1569
1578
|
};
|
|
@@ -1576,6 +1585,7 @@ import { homedir, tmpdir } from "node:os";
|
|
|
1576
1585
|
import { join as join2 } from "node:path";
|
|
1577
1586
|
var requireFromHere = createRequire(import.meta.url);
|
|
1578
1587
|
var MAX_SOCKET_PATH_LENGTH = 100;
|
|
1588
|
+
var CODEX_LSP_DAEMON_VERSION_ENV = "CODEX_LSP_DAEMON_VERSION";
|
|
1579
1589
|
function resolveDaemonVersion(requireFn = requireFromHere) {
|
|
1580
1590
|
for (const candidate of ["./package.json", "../package.json"]) {
|
|
1581
1591
|
try {
|
|
@@ -1597,7 +1607,7 @@ function daemonBaseDir(env = process.env) {
|
|
|
1597
1607
|
const home = codexHome && codexHome.length > 0 ? codexHome : join2(homedir(), ".codex");
|
|
1598
1608
|
return join2(home, "codex-lsp", "daemon");
|
|
1599
1609
|
}
|
|
1600
|
-
function daemonPaths(env = process.env, version = resolveDaemonVersion()) {
|
|
1610
|
+
function daemonPaths(env = process.env, version = resolveDaemonVersionFromEnv(env) ?? resolveDaemonVersion()) {
|
|
1601
1611
|
const dir = join2(daemonBaseDir(env), `v${version}`);
|
|
1602
1612
|
return {
|
|
1603
1613
|
version,
|
|
@@ -1608,6 +1618,10 @@ function daemonPaths(env = process.env, version = resolveDaemonVersion()) {
|
|
|
1608
1618
|
log: join2(dir, "daemon.log")
|
|
1609
1619
|
};
|
|
1610
1620
|
}
|
|
1621
|
+
function resolveDaemonVersionFromEnv(env = process.env) {
|
|
1622
|
+
const version = env[CODEX_LSP_DAEMON_VERSION_ENV]?.trim();
|
|
1623
|
+
return version && version.length > 0 ? version : null;
|
|
1624
|
+
}
|
|
1611
1625
|
function resolveSocketPath(dir, version) {
|
|
1612
1626
|
const digest = createHash("sha256").update(dir).digest("hex").slice(0, 16);
|
|
1613
1627
|
if (process.platform === "win32") {
|
|
@@ -3728,6 +3742,7 @@ async function runMcpStdioProxy(options = {}) {
|
|
|
3728
3742
|
await runJsonRpcStdioServer({
|
|
3729
3743
|
input,
|
|
3730
3744
|
output,
|
|
3745
|
+
idleTimeoutMs: 0,
|
|
3731
3746
|
handler: handleProxyRequest,
|
|
3732
3747
|
handlerOptions: callOptions,
|
|
3733
3748
|
onHandlerError: (error) => {
|
|
@@ -9,3 +9,4 @@ export interface DaemonPaths {
|
|
|
9
9
|
export declare function resolveDaemonVersion(requireFn?: (id: string) => unknown): string;
|
|
10
10
|
export declare function daemonBaseDir(env?: NodeJS.ProcessEnv): string;
|
|
11
11
|
export declare function daemonPaths(env?: NodeJS.ProcessEnv, version?: string): DaemonPaths;
|
|
12
|
+
export declare function resolveDaemonVersionFromEnv(env?: NodeJS.ProcessEnv): string | null;
|
|
@@ -4,6 +4,7 @@ import { homedir, tmpdir } from "node:os";
|
|
|
4
4
|
import { join } from "node:path";
|
|
5
5
|
const requireFromHere = createRequire(import.meta.url);
|
|
6
6
|
const MAX_SOCKET_PATH_LENGTH = 100;
|
|
7
|
+
const CODEX_LSP_DAEMON_VERSION_ENV = "CODEX_LSP_DAEMON_VERSION";
|
|
7
8
|
export function resolveDaemonVersion(requireFn = requireFromHere) {
|
|
8
9
|
for (const candidate of ["./package.json", "../package.json"]) {
|
|
9
10
|
try {
|
|
@@ -26,7 +27,7 @@ export function daemonBaseDir(env = process.env) {
|
|
|
26
27
|
const home = codexHome && codexHome.length > 0 ? codexHome : join(homedir(), ".codex");
|
|
27
28
|
return join(home, "codex-lsp", "daemon");
|
|
28
29
|
}
|
|
29
|
-
export function daemonPaths(env = process.env, version = resolveDaemonVersion()) {
|
|
30
|
+
export function daemonPaths(env = process.env, version = resolveDaemonVersionFromEnv(env) ?? resolveDaemonVersion()) {
|
|
30
31
|
const dir = join(daemonBaseDir(env), `v${version}`);
|
|
31
32
|
return {
|
|
32
33
|
version,
|
|
@@ -37,6 +38,10 @@ export function daemonPaths(env = process.env, version = resolveDaemonVersion())
|
|
|
37
38
|
log: join(dir, "daemon.log"),
|
|
38
39
|
};
|
|
39
40
|
}
|
|
41
|
+
export function resolveDaemonVersionFromEnv(env = process.env) {
|
|
42
|
+
const version = env[CODEX_LSP_DAEMON_VERSION_ENV]?.trim();
|
|
43
|
+
return version && version.length > 0 ? version : null;
|
|
44
|
+
}
|
|
40
45
|
function resolveSocketPath(dir, version) {
|
|
41
46
|
const digest = createHash("sha256").update(dir).digest("hex").slice(0, 16);
|
|
42
47
|
if (process.platform === "win32") {
|
|
@@ -421,7 +421,10 @@ function wrap(proc) {
|
|
|
421
421
|
}
|
|
422
422
|
function killProcessTree(proc, signal) {
|
|
423
423
|
if (process.platform === "win32" && proc.pid) {
|
|
424
|
-
const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], {
|
|
424
|
+
const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], {
|
|
425
|
+
stdio: "ignore",
|
|
426
|
+
windowsHide: true
|
|
427
|
+
});
|
|
425
428
|
if (!result.error && result.status === 0)
|
|
426
429
|
return;
|
|
427
430
|
if (result.error)
|
|
@@ -3297,6 +3300,7 @@ async function runMcpStdioServer(input = process.stdin, output = process.stdout)
|
|
|
3297
3300
|
await runJsonRpcStdioServer({
|
|
3298
3301
|
input,
|
|
3299
3302
|
output,
|
|
3303
|
+
idleTimeoutMs: 0,
|
|
3300
3304
|
handler: handleLspMcpRequest,
|
|
3301
3305
|
handlerOptions: undefined
|
|
3302
3306
|
});
|
|
@@ -419,7 +419,10 @@ function wrap(proc) {
|
|
|
419
419
|
}
|
|
420
420
|
function killProcessTree(proc, signal) {
|
|
421
421
|
if (process.platform === "win32" && proc.pid) {
|
|
422
|
-
const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], {
|
|
422
|
+
const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], {
|
|
423
|
+
stdio: "ignore",
|
|
424
|
+
windowsHide: true
|
|
425
|
+
});
|
|
423
426
|
if (!result.error && result.status === 0)
|
|
424
427
|
return;
|
|
425
428
|
if (result.error)
|
|
@@ -639,7 +639,10 @@ function wrap(proc) {
|
|
|
639
639
|
}
|
|
640
640
|
function killProcessTree(proc, signal) {
|
|
641
641
|
if (process.platform === "win32" && proc.pid) {
|
|
642
|
-
const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], {
|
|
642
|
+
const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], {
|
|
643
|
+
stdio: "ignore",
|
|
644
|
+
windowsHide: true
|
|
645
|
+
});
|
|
643
646
|
if (!result.error && result.status === 0)
|
|
644
647
|
return;
|
|
645
648
|
if (result.error)
|
|
@@ -3296,6 +3299,7 @@ async function runMcpStdioServer(input = process.stdin, output = process.stdout)
|
|
|
3296
3299
|
await runJsonRpcStdioServer({
|
|
3297
3300
|
input,
|
|
3298
3301
|
output,
|
|
3302
|
+
idleTimeoutMs: 0,
|
|
3299
3303
|
handler: handleLspMcpRequest,
|
|
3300
3304
|
handlerOptions: undefined
|
|
3301
3305
|
});
|
|
@@ -436,7 +436,10 @@ function wrap(proc) {
|
|
|
436
436
|
}
|
|
437
437
|
function killProcessTree(proc, signal) {
|
|
438
438
|
if (process.platform === "win32" && proc.pid) {
|
|
439
|
-
const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], {
|
|
439
|
+
const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], {
|
|
440
|
+
stdio: "ignore",
|
|
441
|
+
windowsHide: true
|
|
442
|
+
});
|
|
440
443
|
if (!result.error && result.status === 0)
|
|
441
444
|
return;
|
|
442
445
|
if (result.error)
|