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
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
// components/lsp/src/cli.ts
|
|
4
4
|
import { spawn as spawn3 } from "node:child_process";
|
|
5
|
-
import { createRequire as createRequire2 } from "node:module";
|
|
6
5
|
import { argv, execPath as execPath2, stderr } from "node:process";
|
|
7
6
|
|
|
8
7
|
// components/lsp/src/codex-hook-cli.ts
|
|
@@ -446,7 +445,10 @@ function wrap(proc) {
|
|
|
446
445
|
}
|
|
447
446
|
function killProcessTree(proc, signal) {
|
|
448
447
|
if (process.platform === "win32" && proc.pid) {
|
|
449
|
-
const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], {
|
|
448
|
+
const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], {
|
|
449
|
+
stdio: "ignore",
|
|
450
|
+
windowsHide: true
|
|
451
|
+
});
|
|
450
452
|
if (!result.error && result.status === 0)
|
|
451
453
|
return;
|
|
452
454
|
if (result.error)
|
|
@@ -1478,6 +1480,7 @@ function unlinkQuietly(path) {
|
|
|
1478
1480
|
var PROBE_TIMEOUT_MS = 500;
|
|
1479
1481
|
var DEFAULT_READY_TIMEOUT_MS = 5000;
|
|
1480
1482
|
var DEFAULT_POLL_INTERVAL_MS = 100;
|
|
1483
|
+
var CODEX_LSP_DAEMON_CLI_ENV = "CODEX_LSP_DAEMON_CLI";
|
|
1481
1484
|
|
|
1482
1485
|
class DaemonUnreachableError extends Error {
|
|
1483
1486
|
constructor(socketPath) {
|
|
@@ -1538,7 +1541,7 @@ function spawnDaemonProcess(paths) {
|
|
|
1538
1541
|
mkdirSync2(dirname2(paths.log), { recursive: true });
|
|
1539
1542
|
const logFd = openSync2(paths.log, "a");
|
|
1540
1543
|
try {
|
|
1541
|
-
const cliPath =
|
|
1544
|
+
const cliPath = resolveDaemonCliPath();
|
|
1542
1545
|
const child = spawn2(execPath, [cliPath, "daemon"], {
|
|
1543
1546
|
detached: true,
|
|
1544
1547
|
stdio: ["ignore", logFd, logFd]
|
|
@@ -1548,6 +1551,12 @@ function spawnDaemonProcess(paths) {
|
|
|
1548
1551
|
closeSync2(logFd);
|
|
1549
1552
|
}
|
|
1550
1553
|
}
|
|
1554
|
+
function resolveDaemonCliPath(env = process.env) {
|
|
1555
|
+
const override = env[CODEX_LSP_DAEMON_CLI_ENV]?.trim();
|
|
1556
|
+
if (override)
|
|
1557
|
+
return override;
|
|
1558
|
+
return fileURLToPath(new URL("./cli.js", import.meta.url));
|
|
1559
|
+
}
|
|
1551
1560
|
function defaultEnsureDaemonDeps() {
|
|
1552
1561
|
return {
|
|
1553
1562
|
probe: (socketPath) => probeSocket(socketPath),
|
|
@@ -1558,14 +1567,14 @@ function defaultEnsureDaemonDeps() {
|
|
|
1558
1567
|
},
|
|
1559
1568
|
spawnDaemon: (paths) => spawnDaemonProcess(paths),
|
|
1560
1569
|
sleep: (ms) => new Promise((resolve22) => {
|
|
1561
|
-
|
|
1562
|
-
timer.unref?.();
|
|
1570
|
+
setTimeout(resolve22, ms);
|
|
1563
1571
|
}),
|
|
1564
1572
|
now: () => Date.now()
|
|
1565
1573
|
};
|
|
1566
1574
|
}
|
|
1567
1575
|
var requireFromHere = createRequire(import.meta.url);
|
|
1568
1576
|
var MAX_SOCKET_PATH_LENGTH = 100;
|
|
1577
|
+
var CODEX_LSP_DAEMON_VERSION_ENV = "CODEX_LSP_DAEMON_VERSION";
|
|
1569
1578
|
function resolveDaemonVersion(requireFn = requireFromHere) {
|
|
1570
1579
|
for (const candidate of ["./package.json", "../package.json"]) {
|
|
1571
1580
|
try {
|
|
@@ -1587,7 +1596,7 @@ function daemonBaseDir(env = process.env) {
|
|
|
1587
1596
|
const home = codexHome && codexHome.length > 0 ? codexHome : join2(homedir(), ".codex");
|
|
1588
1597
|
return join2(home, "codex-lsp", "daemon");
|
|
1589
1598
|
}
|
|
1590
|
-
function daemonPaths(env = process.env, version = resolveDaemonVersion()) {
|
|
1599
|
+
function daemonPaths(env = process.env, version = resolveDaemonVersionFromEnv(env) ?? resolveDaemonVersion()) {
|
|
1591
1600
|
const dir = join2(daemonBaseDir(env), `v${version}`);
|
|
1592
1601
|
return {
|
|
1593
1602
|
version,
|
|
@@ -1598,6 +1607,10 @@ function daemonPaths(env = process.env, version = resolveDaemonVersion()) {
|
|
|
1598
1607
|
log: join2(dir, "daemon.log")
|
|
1599
1608
|
};
|
|
1600
1609
|
}
|
|
1610
|
+
function resolveDaemonVersionFromEnv(env = process.env) {
|
|
1611
|
+
const version = env[CODEX_LSP_DAEMON_VERSION_ENV]?.trim();
|
|
1612
|
+
return version && version.length > 0 ? version : null;
|
|
1613
|
+
}
|
|
1601
1614
|
function resolveSocketPath(dir, version) {
|
|
1602
1615
|
const digest = createHash("sha256").update(dir).digest("hex").slice(0, 16);
|
|
1603
1616
|
if (process.platform === "win32") {
|
|
@@ -3319,12 +3332,68 @@ function errorText(error) {
|
|
|
3319
3332
|
}
|
|
3320
3333
|
|
|
3321
3334
|
// components/lsp/src/codex-hook.ts
|
|
3322
|
-
import { readFileSync as
|
|
3335
|
+
import { readFileSync as readFileSync9 } from "node:fs";
|
|
3336
|
+
|
|
3337
|
+
// components/lsp/src/daemon-cli-path.ts
|
|
3338
|
+
import { existsSync as existsSync9, readFileSync as readFileSync6 } from "node:fs";
|
|
3339
|
+
import { createRequire as createRequire2 } from "node:module";
|
|
3340
|
+
import { dirname as dirname6, join as join9 } from "node:path";
|
|
3341
|
+
import { fileURLToPath as fileURLToPath4 } from "node:url";
|
|
3342
|
+
var requireFromHere2 = createRequire2(import.meta.url);
|
|
3343
|
+
var PACKAGE_LSP_DAEMON_CLI = "@code-yeongyu/lsp-daemon/dist/cli.js";
|
|
3344
|
+
var CODEX_LSP_DAEMON_CLI_ENV2 = "CODEX_LSP_DAEMON_CLI";
|
|
3345
|
+
var CODEX_LSP_DAEMON_VERSION_ENV2 = "CODEX_LSP_DAEMON_VERSION";
|
|
3346
|
+
function ensureLspDaemonCliEnv(env = process.env) {
|
|
3347
|
+
const configuredCli = env[CODEX_LSP_DAEMON_CLI_ENV2]?.trim();
|
|
3348
|
+
const resolution = configuredCli ? resolveConfiguredLspDaemonCli(configuredCli) : resolveLspDaemonCli();
|
|
3349
|
+
if (!configuredCli)
|
|
3350
|
+
env[CODEX_LSP_DAEMON_CLI_ENV2] = resolution.cliPath;
|
|
3351
|
+
if (!env[CODEX_LSP_DAEMON_VERSION_ENV2]?.trim() && resolution.version !== null) {
|
|
3352
|
+
env[CODEX_LSP_DAEMON_VERSION_ENV2] = resolution.version;
|
|
3353
|
+
}
|
|
3354
|
+
}
|
|
3355
|
+
function resolveLspDaemonCliPath() {
|
|
3356
|
+
return resolveLspDaemonCli().cliPath;
|
|
3357
|
+
}
|
|
3358
|
+
function resolveLspDaemonCli() {
|
|
3359
|
+
const packageCli = resolvePackageLspDaemonCliPath();
|
|
3360
|
+
if (packageCli !== null)
|
|
3361
|
+
return resolveConfiguredLspDaemonCli(packageCli);
|
|
3362
|
+
const bundledCli = fileURLToPath4(new URL("../../lsp-daemon/dist/cli.js", import.meta.url));
|
|
3363
|
+
if (existsSync9(bundledCli))
|
|
3364
|
+
return resolveConfiguredLspDaemonCli(bundledCli);
|
|
3365
|
+
return resolveConfiguredLspDaemonCli(bundledCli);
|
|
3366
|
+
}
|
|
3367
|
+
function resolvePackageLspDaemonCliPath() {
|
|
3368
|
+
try {
|
|
3369
|
+
return requireFromHere2.resolve(PACKAGE_LSP_DAEMON_CLI);
|
|
3370
|
+
} catch {
|
|
3371
|
+
return null;
|
|
3372
|
+
}
|
|
3373
|
+
}
|
|
3374
|
+
function resolveConfiguredLspDaemonCli(cliPath) {
|
|
3375
|
+
return {
|
|
3376
|
+
cliPath,
|
|
3377
|
+
version: readDaemonPackageVersion(cliPath)
|
|
3378
|
+
};
|
|
3379
|
+
}
|
|
3380
|
+
function readDaemonPackageVersion(cliPath) {
|
|
3381
|
+
try {
|
|
3382
|
+
const parsed = JSON.parse(readFileSync6(join9(dirname6(cliPath), "package.json"), "utf8"));
|
|
3383
|
+
if (isRecord4(parsed) && typeof parsed["version"] === "string" && parsed["version"].length > 0) {
|
|
3384
|
+
return parsed["version"];
|
|
3385
|
+
}
|
|
3386
|
+
} catch {}
|
|
3387
|
+
return null;
|
|
3388
|
+
}
|
|
3389
|
+
function isRecord4(value) {
|
|
3390
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
3391
|
+
}
|
|
3323
3392
|
|
|
3324
3393
|
// components/lsp/src/lsp-session-state.ts
|
|
3325
|
-
import { mkdirSync as mkdirSync4, readFileSync as
|
|
3394
|
+
import { mkdirSync as mkdirSync4, readFileSync as readFileSync8, writeFileSync as writeFileSync3 } from "node:fs";
|
|
3326
3395
|
import { homedir as homedir4 } from "node:os";
|
|
3327
|
-
import { dirname as
|
|
3396
|
+
import { dirname as dirname8, extname as extname2, join as join11 } from "node:path";
|
|
3328
3397
|
function sessionIdFrom(input) {
|
|
3329
3398
|
return typeof input.session_id === "string" && input.session_id.length > 0 ? input.session_id : undefined;
|
|
3330
3399
|
}
|
|
@@ -3371,23 +3440,23 @@ function isLspDaemonUnreachableDiagnostics(diagnostics) {
|
|
|
3371
3440
|
return diagnostics.includes("LSP daemon unreachable");
|
|
3372
3441
|
}
|
|
3373
3442
|
function sessionStatePath(sessionId) {
|
|
3374
|
-
const root = process.env["PLUGIN_DATA"] ??
|
|
3375
|
-
return
|
|
3443
|
+
const root = process.env["PLUGIN_DATA"] ?? join11(homedir4(), ".codex", "codex-lsp");
|
|
3444
|
+
return join11(root, "sessions", `${safePathSegment(sessionId)}.json`);
|
|
3376
3445
|
}
|
|
3377
3446
|
function readSessionState(path) {
|
|
3378
3447
|
try {
|
|
3379
|
-
const parsed = JSON.parse(
|
|
3448
|
+
const parsed = JSON.parse(readFileSync8(path, "utf8"));
|
|
3380
3449
|
if (isLspSessionState(parsed))
|
|
3381
3450
|
return parsed;
|
|
3382
3451
|
return emptyState();
|
|
3383
3452
|
} catch (error) {
|
|
3384
|
-
if (error instanceof SyntaxError ||
|
|
3453
|
+
if (error instanceof SyntaxError || isRecord7(error) && error["code"] === "ENOENT")
|
|
3385
3454
|
return emptyState();
|
|
3386
3455
|
throw error;
|
|
3387
3456
|
}
|
|
3388
3457
|
}
|
|
3389
3458
|
function writeSessionState(path, state) {
|
|
3390
|
-
mkdirSync4(
|
|
3459
|
+
mkdirSync4(dirname8(path), { recursive: true });
|
|
3391
3460
|
writeFileSync3(path, `${JSON.stringify(state)}
|
|
3392
3461
|
`);
|
|
3393
3462
|
}
|
|
@@ -3402,12 +3471,12 @@ function safePathSegment(value) {
|
|
|
3402
3471
|
return value.replace(/[^A-Za-z0-9._-]/g, "_").slice(0, 120) || "unknown-session";
|
|
3403
3472
|
}
|
|
3404
3473
|
function isLspSessionState(value) {
|
|
3405
|
-
if (!
|
|
3474
|
+
if (!isRecord7(value) || !Array.isArray(value["unavailableExtensions"]))
|
|
3406
3475
|
return false;
|
|
3407
3476
|
const postCompactProbePending = value["postCompactProbePending"];
|
|
3408
3477
|
return value["unavailableExtensions"].every((item) => typeof item === "string") && (postCompactProbePending === undefined || typeof postCompactProbePending === "boolean");
|
|
3409
3478
|
}
|
|
3410
|
-
function
|
|
3479
|
+
function isRecord7(value) {
|
|
3411
3480
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
3412
3481
|
}
|
|
3413
3482
|
|
|
@@ -3418,7 +3487,7 @@ function extractMutatedFilePaths(input) {
|
|
|
3418
3487
|
return [];
|
|
3419
3488
|
if (isFailedToolResponse(input.tool_response))
|
|
3420
3489
|
return [];
|
|
3421
|
-
const toolInput =
|
|
3490
|
+
const toolInput = isRecord9(input.tool_input) ? input.tool_input : {};
|
|
3422
3491
|
const paths = new Set;
|
|
3423
3492
|
addStringValue(paths, toolInput["path"]);
|
|
3424
3493
|
addStringValue(paths, toolInput["filePath"]);
|
|
@@ -3437,7 +3506,7 @@ function isMutationTool(value) {
|
|
|
3437
3506
|
return MUTATION_TOOL_NAMES.has(value.toLowerCase());
|
|
3438
3507
|
}
|
|
3439
3508
|
function isFailedToolResponse(value) {
|
|
3440
|
-
if (!
|
|
3509
|
+
if (!isRecord9(value))
|
|
3441
3510
|
return false;
|
|
3442
3511
|
return value["isError"] === true || value["is_error"] === true || value["error"] === true || value["status"] === "error";
|
|
3443
3512
|
}
|
|
@@ -3480,7 +3549,7 @@ function addPatchFiles(paths, value) {
|
|
|
3480
3549
|
if (!Array.isArray(value))
|
|
3481
3550
|
return;
|
|
3482
3551
|
for (const item of value) {
|
|
3483
|
-
if (!
|
|
3552
|
+
if (!isRecord9(item))
|
|
3484
3553
|
continue;
|
|
3485
3554
|
addStringValue(paths, item["path"]);
|
|
3486
3555
|
addStringValue(paths, item["filePath"]);
|
|
@@ -3489,7 +3558,7 @@ function addPatchFiles(paths, value) {
|
|
|
3489
3558
|
addStringValue(paths, item["move_path"]);
|
|
3490
3559
|
}
|
|
3491
3560
|
}
|
|
3492
|
-
function
|
|
3561
|
+
function isRecord9(value) {
|
|
3493
3562
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
3494
3563
|
}
|
|
3495
3564
|
|
|
@@ -3511,6 +3580,7 @@ var CONTEXT_PRESSURE_MARKERS = [
|
|
|
3511
3580
|
"long threads and multiple compactions"
|
|
3512
3581
|
];
|
|
3513
3582
|
async function runLspDiagnosticsText(filePath) {
|
|
3583
|
+
ensureLspDaemonCliEnv();
|
|
3514
3584
|
const result = await callDiagnosticsViaDaemon(filePath, { context: currentRequestContext() });
|
|
3515
3585
|
return result.content.map((block) => block.text).join(`
|
|
3516
3586
|
`);
|
|
@@ -3647,7 +3717,7 @@ function isContextPressureTranscript(transcriptPath) {
|
|
|
3647
3717
|
if (typeof transcriptPath !== "string")
|
|
3648
3718
|
return false;
|
|
3649
3719
|
try {
|
|
3650
|
-
return hasContextPressureMarker(
|
|
3720
|
+
return hasContextPressureMarker(readFileSync9(transcriptPath, "utf8"));
|
|
3651
3721
|
} catch (error) {
|
|
3652
3722
|
if (error instanceof Error)
|
|
3653
3723
|
return false;
|
|
@@ -3672,7 +3742,7 @@ function limitHookText(text2, maxChars) {
|
|
|
3672
3742
|
function isCleanDiagnostics(diagnostics) {
|
|
3673
3743
|
return diagnostics.length === 0 || diagnostics === CLEAN_DIAGNOSTICS_TEXT || diagnostics.startsWith(UNSUPPORTED_EXTENSION_TEXT);
|
|
3674
3744
|
}
|
|
3675
|
-
function
|
|
3745
|
+
function isRecord10(value) {
|
|
3676
3746
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
3677
3747
|
}
|
|
3678
3748
|
|
|
@@ -3689,7 +3759,7 @@ async function runHookCli(runHook, stdin) {
|
|
|
3689
3759
|
if (!raw.trim())
|
|
3690
3760
|
return;
|
|
3691
3761
|
const parsed = JSON.parse(raw);
|
|
3692
|
-
const input =
|
|
3762
|
+
const input = isRecord10(parsed) ? parsed : {};
|
|
3693
3763
|
const output = await runHook(input);
|
|
3694
3764
|
if (output)
|
|
3695
3765
|
process.stdout.write(output);
|
|
@@ -3711,8 +3781,6 @@ async function readStdin(stdin) {
|
|
|
3711
3781
|
}
|
|
3712
3782
|
|
|
3713
3783
|
// components/lsp/src/cli.ts
|
|
3714
|
-
var require2 = createRequire2(import.meta.url);
|
|
3715
|
-
var PACKAGE_LSP_MCP_CLI = "@code-yeongyu/lsp-daemon/dist/cli.js";
|
|
3716
3784
|
async function main() {
|
|
3717
3785
|
const [command = "mcp", subcommand = ""] = argv.slice(2);
|
|
3718
3786
|
if (command === "hook" && subcommand === "post-tool-use") {
|
|
@@ -3737,7 +3805,7 @@ main().catch((error) => {
|
|
|
3737
3805
|
process.exitCode = 1;
|
|
3738
3806
|
});
|
|
3739
3807
|
async function runPackageLspMcpCli() {
|
|
3740
|
-
const cliPath =
|
|
3808
|
+
const cliPath = resolveLspDaemonCliPath();
|
|
3741
3809
|
const child = spawn3(execPath2, [cliPath, "mcp"], { stdio: "inherit" });
|
|
3742
3810
|
await new Promise((resolve6, reject) => {
|
|
3743
3811
|
child.once("error", reject);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { readFileSync } from "node:fs";
|
|
2
2
|
import { callDiagnosticsViaDaemon, currentRequestContext } from "@code-yeongyu/lsp-daemon";
|
|
3
|
+
import { ensureLspDaemonCliEnv } from "./daemon-cli-path.js";
|
|
3
4
|
import { isLspDaemonUnreachableDiagnostics, isUnavailableLspDiagnostics, markLspSessionCompacted, recordLspDiagnosticsObservations, sessionIdFrom, shouldSkipUnavailableLspDiagnostics, } from "./lsp-session-state.js";
|
|
4
5
|
import { extractMutatedFilePaths } from "./mutated-file-paths.js";
|
|
5
6
|
export { extractMutatedFilePaths } from "./mutated-file-paths.js";
|
|
@@ -20,6 +21,7 @@ const CONTEXT_PRESSURE_MARKERS = [
|
|
|
20
21
|
"long threads and multiple compactions",
|
|
21
22
|
];
|
|
22
23
|
export async function runLspDiagnosticsText(filePath) {
|
|
24
|
+
ensureLspDaemonCliEnv();
|
|
23
25
|
const result = await callDiagnosticsViaDaemon(filePath, { context: currentRequestContext() });
|
|
24
26
|
return result.content.map((block) => block.text).join("\n");
|
|
25
27
|
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
const requireFromHere = createRequire(import.meta.url);
|
|
6
|
+
const PACKAGE_LSP_DAEMON_CLI = "@code-yeongyu/lsp-daemon/dist/cli.js";
|
|
7
|
+
const CODEX_LSP_DAEMON_CLI_ENV = "CODEX_LSP_DAEMON_CLI";
|
|
8
|
+
const CODEX_LSP_DAEMON_VERSION_ENV = "CODEX_LSP_DAEMON_VERSION";
|
|
9
|
+
export function ensureLspDaemonCliEnv(env = process.env) {
|
|
10
|
+
const configuredCli = env[CODEX_LSP_DAEMON_CLI_ENV]?.trim();
|
|
11
|
+
const resolution = configuredCli ? resolveConfiguredLspDaemonCli(configuredCli) : resolveLspDaemonCli();
|
|
12
|
+
if (!configuredCli)
|
|
13
|
+
env[CODEX_LSP_DAEMON_CLI_ENV] = resolution.cliPath;
|
|
14
|
+
if (!env[CODEX_LSP_DAEMON_VERSION_ENV]?.trim() && resolution.version !== null) {
|
|
15
|
+
env[CODEX_LSP_DAEMON_VERSION_ENV] = resolution.version;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export function resolveLspDaemonCliPath() {
|
|
19
|
+
return resolveLspDaemonCli().cliPath;
|
|
20
|
+
}
|
|
21
|
+
function resolveLspDaemonCli() {
|
|
22
|
+
const packageCli = resolvePackageLspDaemonCliPath();
|
|
23
|
+
if (packageCli !== null)
|
|
24
|
+
return resolveConfiguredLspDaemonCli(packageCli);
|
|
25
|
+
const bundledCli = fileURLToPath(new URL("../../lsp-daemon/dist/cli.js", import.meta.url));
|
|
26
|
+
if (existsSync(bundledCli))
|
|
27
|
+
return resolveConfiguredLspDaemonCli(bundledCli);
|
|
28
|
+
return resolveConfiguredLspDaemonCli(bundledCli);
|
|
29
|
+
}
|
|
30
|
+
function resolvePackageLspDaemonCliPath() {
|
|
31
|
+
try {
|
|
32
|
+
return requireFromHere.resolve(PACKAGE_LSP_DAEMON_CLI);
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function resolveConfiguredLspDaemonCli(cliPath) {
|
|
39
|
+
return {
|
|
40
|
+
cliPath,
|
|
41
|
+
version: readDaemonPackageVersion(cliPath),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function readDaemonPackageVersion(cliPath) {
|
|
45
|
+
try {
|
|
46
|
+
const parsed = JSON.parse(readFileSync(join(dirname(cliPath), "package.json"), "utf8"));
|
|
47
|
+
if (isRecord(parsed) && typeof parsed["version"] === "string" && parsed["version"].length > 0) {
|
|
48
|
+
return parsed["version"];
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch { }
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
function isRecord(value) {
|
|
55
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
56
|
+
}
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { spawn } from "node:child_process";
|
|
3
|
-
import { createRequire } from "node:module";
|
|
4
3
|
import { argv, execPath, stderr } from "node:process";
|
|
5
4
|
|
|
6
5
|
import { runPostCompactHookCli, runPostToolUseHookCli } from "./codex-hook-cli.js";
|
|
7
|
-
|
|
8
|
-
const require = createRequire(import.meta.url);
|
|
9
|
-
const PACKAGE_LSP_MCP_CLI = "@code-yeongyu/lsp-daemon/dist/cli.js";
|
|
6
|
+
import { resolveLspDaemonCliPath } from "./daemon-cli-path.js";
|
|
10
7
|
|
|
11
8
|
async function main(): Promise<void> {
|
|
12
9
|
const [command = "mcp", subcommand = ""] = argv.slice(2);
|
|
@@ -35,7 +32,7 @@ main().catch((error: unknown) => {
|
|
|
35
32
|
});
|
|
36
33
|
|
|
37
34
|
async function runPackageLspMcpCli(): Promise<void> {
|
|
38
|
-
const cliPath =
|
|
35
|
+
const cliPath = resolveLspDaemonCliPath();
|
|
39
36
|
const child = spawn(execPath, [cliPath, "mcp"], { stdio: "inherit" });
|
|
40
37
|
await new Promise<void>((resolve, reject) => {
|
|
41
38
|
child.once("error", reject);
|
|
@@ -2,6 +2,7 @@ import { readFileSync } from "node:fs";
|
|
|
2
2
|
|
|
3
3
|
import { callDiagnosticsViaDaemon, currentRequestContext } from "@code-yeongyu/lsp-daemon";
|
|
4
4
|
|
|
5
|
+
import { ensureLspDaemonCliEnv } from "./daemon-cli-path.js";
|
|
5
6
|
import {
|
|
6
7
|
isLspDaemonUnreachableDiagnostics,
|
|
7
8
|
isUnavailableLspDiagnostics,
|
|
@@ -60,6 +61,7 @@ const CONTEXT_PRESSURE_MARKERS = [
|
|
|
60
61
|
] as const;
|
|
61
62
|
|
|
62
63
|
export async function runLspDiagnosticsText(filePath: string): Promise<string> {
|
|
64
|
+
ensureLspDaemonCliEnv();
|
|
63
65
|
const result = await callDiagnosticsViaDaemon(filePath, { context: currentRequestContext() });
|
|
64
66
|
return result.content.map((block) => block.text).join("\n");
|
|
65
67
|
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
|
|
6
|
+
const requireFromHere = createRequire(import.meta.url);
|
|
7
|
+
|
|
8
|
+
const PACKAGE_LSP_DAEMON_CLI = "@code-yeongyu/lsp-daemon/dist/cli.js";
|
|
9
|
+
const CODEX_LSP_DAEMON_CLI_ENV = "CODEX_LSP_DAEMON_CLI";
|
|
10
|
+
const CODEX_LSP_DAEMON_VERSION_ENV = "CODEX_LSP_DAEMON_VERSION";
|
|
11
|
+
|
|
12
|
+
interface LspDaemonCliResolution {
|
|
13
|
+
cliPath: string;
|
|
14
|
+
version: string | null;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function ensureLspDaemonCliEnv(env: NodeJS.ProcessEnv = process.env): void {
|
|
18
|
+
const configuredCli = env[CODEX_LSP_DAEMON_CLI_ENV]?.trim();
|
|
19
|
+
const resolution = configuredCli ? resolveConfiguredLspDaemonCli(configuredCli) : resolveLspDaemonCli();
|
|
20
|
+
if (!configuredCli) env[CODEX_LSP_DAEMON_CLI_ENV] = resolution.cliPath;
|
|
21
|
+
if (!env[CODEX_LSP_DAEMON_VERSION_ENV]?.trim() && resolution.version !== null) {
|
|
22
|
+
env[CODEX_LSP_DAEMON_VERSION_ENV] = resolution.version;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function resolveLspDaemonCliPath(): string {
|
|
27
|
+
return resolveLspDaemonCli().cliPath;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function resolveLspDaemonCli(): LspDaemonCliResolution {
|
|
31
|
+
const packageCli = resolvePackageLspDaemonCliPath();
|
|
32
|
+
if (packageCli !== null) return resolveConfiguredLspDaemonCli(packageCli);
|
|
33
|
+
const bundledCli = fileURLToPath(new URL("../../lsp-daemon/dist/cli.js", import.meta.url));
|
|
34
|
+
if (existsSync(bundledCli)) return resolveConfiguredLspDaemonCli(bundledCli);
|
|
35
|
+
return resolveConfiguredLspDaemonCli(bundledCli);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function resolvePackageLspDaemonCliPath(): string | null {
|
|
39
|
+
try {
|
|
40
|
+
return requireFromHere.resolve(PACKAGE_LSP_DAEMON_CLI);
|
|
41
|
+
} catch {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function resolveConfiguredLspDaemonCli(cliPath: string): LspDaemonCliResolution {
|
|
47
|
+
return {
|
|
48
|
+
cliPath,
|
|
49
|
+
version: readDaemonPackageVersion(cliPath),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function readDaemonPackageVersion(cliPath: string): string | null {
|
|
54
|
+
try {
|
|
55
|
+
const parsed: unknown = JSON.parse(readFileSync(join(dirname(cliPath), "package.json"), "utf8"));
|
|
56
|
+
if (isRecord(parsed) && typeof parsed["version"] === "string" && parsed["version"].length > 0) {
|
|
57
|
+
return parsed["version"];
|
|
58
|
+
}
|
|
59
|
+
} catch {}
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
64
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
65
|
+
}
|
|
@@ -15,6 +15,7 @@ describe("plugin package metadata", () => {
|
|
|
15
15
|
const hooksJson = readHooksJson("hooks/hooks.json");
|
|
16
16
|
const mcpJson = readMcpJson(".mcp.json");
|
|
17
17
|
const cliSource = readTextFile("src/cli.ts");
|
|
18
|
+
const daemonCliPathSource = readTextFile("src/daemon-cli-path.ts");
|
|
18
19
|
const codexHookCliSource = readTextFile("src/codex-hook-cli.ts");
|
|
19
20
|
const codexHookSource = readTextFile("src/codex-hook.ts");
|
|
20
21
|
const sourceFiles = listDirectoryEntries("src");
|
|
@@ -43,8 +44,12 @@ describe("plugin package metadata", () => {
|
|
|
43
44
|
expect(lspServer?.command).toBe("node");
|
|
44
45
|
expect(lspServer?.args).toEqual(["../../../../lsp-daemon/dist/cli.js", "mcp"]);
|
|
45
46
|
expect(cliSource).not.toContain("./lazy-lsp-mcp.js");
|
|
46
|
-
expect(cliSource).toContain("
|
|
47
|
+
expect(cliSource).toContain("resolveLspDaemonCliPath");
|
|
48
|
+
expect(daemonCliPathSource).toContain("@code-yeongyu/lsp-daemon/dist/cli.js");
|
|
49
|
+
expect(daemonCliPathSource).toContain("../../lsp-daemon/dist/cli.js");
|
|
50
|
+
expect(daemonCliPathSource).toContain("CODEX_LSP_DAEMON_VERSION");
|
|
47
51
|
expect(cliSource).not.toContain("../../../../../lsp-daemon/dist/cli.js");
|
|
52
|
+
expect(codexHookSource).toContain("ensureLspDaemonCliEnv");
|
|
48
53
|
expect(codexHookCliSource).toContain("@code-yeongyu/lsp-daemon");
|
|
49
54
|
expect(codexHookSource).toContain("@code-yeongyu/lsp-daemon");
|
|
50
55
|
expect(codexHookCliSource).not.toContain("../../../../../lsp-daemon");
|