oh-my-opencode 5.0.0-beta.2 → 5.0.0-beta.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/command/publish.md +44 -16
- package/.agents/skills/publish/SKILL.md +44 -16
- package/.agents/skills/senpi-qa/SKILL.md +80 -0
- package/.agents/skills/senpi-qa/scripts/resolve-evidence-dir.mjs +65 -0
- package/.agents/skills/senpi-qa/scripts/resolve-evidence-dir.test.mjs +171 -0
- package/.agents/skills/work-with-pr/SKILL.md +37 -23
- package/.opencode/command/publish.md +44 -16
- package/.opencode/skills/work-with-pr/SKILL.md +37 -23
- package/README.ja.md +25 -21
- package/README.ko.md +25 -21
- package/README.md +38 -23
- package/README.ru.md +24 -20
- package/README.zh-cn.md +25 -21
- package/dist/agents/atlas/agent.d.ts +0 -1
- package/dist/agents/sisyphus/grok-4.d.ts +20 -0
- package/dist/agents/sisyphus/index.d.ts +2 -0
- package/dist/agents/sisyphus-agent-config.d.ts +6 -0
- package/dist/agents/sisyphus-agent-factory.d.ts +1 -1
- package/dist/agents/sisyphus-runtime-prompt-reconciler.d.ts +15 -4
- package/dist/agents/types.d.ts +2 -2
- package/dist/cli/fallback-lane-policy.d.ts +1 -0
- package/dist/cli/index.js +23057 -20893
- package/dist/cli/install-codex/install-codex-test-fixtures.d.ts +1 -1
- package/dist/cli/run/on-complete-hook.d.ts +2 -0
- package/dist/cli/runtime-commands.d.ts +1 -1
- package/dist/cli/worktree-sweep/classify.d.ts +16 -0
- package/dist/cli/worktree-sweep/format.d.ts +8 -0
- package/dist/cli/worktree-sweep/git.d.ts +19 -0
- package/dist/cli/worktree-sweep/index.d.ts +7 -0
- package/dist/cli/worktree-sweep/options.d.ts +2 -0
- package/dist/cli/worktree-sweep/parse-worktree-list.d.ts +8 -0
- package/dist/cli/worktree-sweep/sweep.d.ts +2 -0
- package/dist/cli/worktree-sweep/types.d.ts +65 -0
- package/dist/cli/worktree-sweep/worktree-sweep.d.ts +2 -0
- package/dist/cli-node/index.js +23093 -20929
- package/dist/config/schema/commands.d.ts +1 -1
- package/dist/config/schema/hooks.d.ts +1 -1
- package/dist/config/schema/oh-my-opencode-config.d.ts +4 -1
- package/dist/config/schema/ulw-execute.d.ts +5 -0
- package/dist/config/validate.d.ts +2 -0
- package/dist/create-hooks.d.ts +3 -1
- package/dist/features/btw-side/btw-command-draft.d.ts +7 -0
- package/dist/features/btw-side/context-injector.d.ts +15 -0
- package/dist/features/btw-side/index.d.ts +8 -0
- package/dist/features/btw-side/metadata.d.ts +15 -0
- package/dist/features/btw-side/parent-context-budget.d.ts +9 -0
- package/dist/features/btw-side/server-session-registry.d.ts +8 -0
- package/dist/features/btw-side/tui-adoption-cache.d.ts +13 -0
- package/dist/features/btw-side/tui-adoption-guard.d.ts +5 -0
- package/dist/features/btw-side/tui-controller-types.d.ts +68 -0
- package/dist/features/btw-side/tui-controller.d.ts +19 -0
- package/dist/features/btw-side/tui-escape-return.d.ts +12 -0
- package/dist/features/btw-side/tui-keymap.d.ts +17 -0
- package/dist/features/btw-side/tui-parent-validator.d.ts +6 -0
- package/dist/features/btw-side/tui-picker-options.d.ts +20 -0
- package/dist/features/btw-side/tui-picker.d.ts +9 -0
- package/dist/features/btw-side/tui-prompt-queue.d.ts +8 -0
- package/dist/features/btw-side/tui-session-bridge.d.ts +11 -0
- package/dist/features/btw-side/tui-session-catalog.d.ts +35 -0
- package/dist/features/btw-side/tui-side-removal.d.ts +11 -0
- package/dist/features/btw-side/tui-side-start.d.ts +9 -0
- package/dist/features/btw-side/tui-wiring.d.ts +8 -0
- package/dist/features/builtin-commands/templates/ulw-execute.d.ts +1 -0
- package/dist/features/builtin-commands/types.d.ts +1 -1
- package/dist/features/opengateway-provider/index.d.ts +13 -0
- package/dist/hooks/atlas/atlas-hook.d.ts +1 -0
- package/dist/hooks/atlas/atlas-lifecycle-store.d.ts +50 -0
- package/dist/hooks/atlas/event-handler.d.ts +1 -0
- package/dist/hooks/atlas/final-wave-approval-gate.test-support.d.ts +50 -0
- package/dist/hooks/atlas/system-reminder-templates.d.ts +0 -1
- package/dist/hooks/atlas/tool-execute-before.d.ts +3 -0
- package/dist/hooks/atlas/types.d.ts +1 -0
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/prometheus-md-only/agent-resolution.d.ts +2 -2
- package/dist/hooks/runtime-fallback/chat-message-handler.d.ts +2 -0
- package/dist/hooks/runtime-fallback/retry-model-payload.d.ts +1 -0
- package/dist/hooks/runtime-fallback/runtime-model-settings.d.ts +6 -0
- package/dist/hooks/runtime-fallback/session-status-handler.d.ts +1 -1
- package/dist/hooks/runtime-fallback/types.d.ts +3 -1
- package/dist/hooks/sisyphus-junior-notepad/constants.d.ts +1 -1
- package/dist/hooks/{start-work → ulw-execute}/context-info-builder.d.ts +1 -1
- package/dist/hooks/{start-work → ulw-execute}/index.d.ts +1 -1
- package/dist/hooks/ulw-execute/ulw-execute-hook.d.ts +23 -0
- package/dist/index.js +11724 -6355
- package/dist/oh-my-opencode.schema.json +15 -2
- package/dist/plugin/chat-message/types.d.ts +3 -3
- package/dist/plugin/chat-message/ulw-execute-message.d.ts +5 -0
- package/dist/plugin/event-session-lifecycle.d.ts +1 -0
- package/dist/plugin/hooks/create-core-hooks.d.ts +2 -1
- package/dist/plugin/hooks/create-session-hooks.d.ts +2 -2
- package/dist/plugin/hooks/create-transform-hooks.d.ts +2 -0
- package/dist/plugin/messages-transform.d.ts +1 -0
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/normalize-sdk-response.d.ts +1 -0
- package/dist/shared/runtime-fallback-retry-marker.d.ts +16 -0
- package/dist/shared/shell-env.d.ts +1 -1
- package/dist/skills/ast-grep/AGENTS.md +51 -0
- package/dist/skills/coding-agent-sessions/AGENTS.md +62 -0
- package/dist/skills/coding-agent-sessions/SKILL.md +3 -2
- package/dist/skills/coding-agent-sessions/references/all-platforms.md +1 -1
- package/dist/skills/coding-agent-sessions/references/senpi.md +4 -4
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +1 -1
- package/dist/skills/frontend/SKILL.md +11 -7
- package/dist/skills/frontend/references/design/_INDEX.md +1 -0
- package/dist/skills/frontend/references/design/print-paged-media.md +76 -0
- package/dist/skills/frontend/references/design/stylegallery.md +80 -0
- package/dist/skills/frontend/references/designpowers/README.md +1 -1
- package/dist/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
- package/dist/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
- package/dist/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
- package/dist/skills/frontend/references/designpowers/orchestration.md +1 -1
- package/dist/skills/frontend/references/designpowers/routing.md +5 -5
- package/dist/skills/review-work/SKILL.md +3 -3
- package/dist/skills/ultimate-browsing/ATTRIBUTION.md +37 -10
- package/dist/skills/ultimate-browsing/SKILL.md +2 -0
- package/dist/skills/ultimate-browsing/engine/AGENTS.md +179 -0
- package/dist/skills/ultimate-browsing/engine/templates/package.json +1 -1
- package/dist/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
- package/dist/skills/{start-work → ulw-execute}/SKILL.md +9 -8
- package/dist/skills/ulw-plan/SKILL.md +6 -6
- package/dist/skills/ulw-plan/references/full-workflow.md +31 -7
- package/dist/skills/ulw-plan/references/intent-clear.md +2 -1
- package/dist/skills/ulw-plan/references/intent-unclear.md +5 -5
- package/dist/skills/ulw-research/SKILL.md +1 -1
- package/dist/skills/visual-qa/AGENTS.md +58 -0
- package/dist/skills/visual-qa/SKILL.md +3 -2
- package/dist/tools/delegate-task/builtin-categories.d.ts +1 -0
- package/dist/tools/delegate-task/builtin-category-definition.d.ts +1 -0
- package/dist/tools/delegate-task/tool-description.d.ts +3 -1
- package/dist/tui.js +8824 -8906
- package/package.json +38 -35
- package/packages/git-bash-mcp/dist/cli.js +5 -1
- package/packages/git-bash-mcp/package.json +1 -1
- package/packages/lsp-core/src/lsp/client-diagnostics-concurrency.integration.test.ts +44 -0
- package/packages/lsp-core/src/lsp/client-diagnostics-freshness.integration.test.ts +0 -28
- package/packages/lsp-core/src/lsp/client-wrapper-outside-cwd.test.ts +78 -0
- package/packages/lsp-core/src/lsp/client-wrapper.test.ts +66 -13
- package/packages/lsp-core/src/lsp/client-wrapper.ts +70 -18
- package/packages/lsp-core/src/lsp/outside-context-workspace.ts +33 -0
- package/packages/lsp-core/src/lsp/workspace-edit-adversarial.test.ts +20 -1
- package/packages/lsp-core/src/lsp/workspace-markers.ts +1 -0
- package/packages/lsp-core/src/tools/diagnostics.ts +3 -3
- package/packages/lsp-core/src/tools/navigation.ts +4 -2
- package/packages/lsp-core/src/tools/rename.ts +4 -2
- package/packages/lsp-core/src/tools/symbols.ts +1 -1
- package/packages/lsp-daemon/dist/cli.js +246 -185
- package/packages/lsp-daemon/dist/client.js +222 -164
- package/packages/lsp-daemon/dist/ensure-daemon.js +1 -0
- package/packages/lsp-daemon/dist/index.js +236 -177
- package/packages/lsp-daemon/dist/version-reap.js +1 -1
- package/packages/lsp-tools-mcp/dist/cli.js +198 -136
- package/packages/lsp-tools-mcp/dist/lsp/manager.js +62 -92
- package/packages/lsp-tools-mcp/dist/mcp.js +200 -138
- package/packages/lsp-tools-mcp/dist/request-context.js +11 -12
- package/packages/lsp-tools-mcp/dist/tools.js +204 -146
- package/packages/omo-codex/THIRD-PARTY-NOTICES.md +4 -4
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +4 -4
- package/packages/omo-codex/plugin/AGENTS.md +47 -0
- package/packages/omo-codex/plugin/README.md +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +32 -31
- package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/src/hook.ts +1 -0
- package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +224 -81
- package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +224 -82
- package/packages/omo-codex/plugin/components/codegraph/package.json +4 -4
- package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +1 -0
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-hook-runtime.ts +1 -0
- package/packages/omo-codex/plugin/components/comment-checker/AGENTS.md +9 -0
- package/packages/omo-codex/plugin/components/comment-checker/biome.json +2 -2
- package/packages/omo-codex/plugin/components/comment-checker/dist/cli.js +2 -1
- package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/package.json +5 -5
- package/packages/omo-codex/plugin/components/comment-checker/src/apply-patch.ts +2 -8
- package/packages/omo-codex/plugin/components/comment-checker/src/core.ts +1 -2
- package/packages/omo-codex/plugin/components/comment-checker/src/request-extractor.ts +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/src/runner.ts +1 -0
- package/packages/omo-codex/plugin/components/git-bash/AGENTS.md +1 -1
- package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/git-bash/package.json +3 -4
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/biome.json +2 -2
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/cli.js +1 -5
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/codex-hook.js +1 -5
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +5 -5
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/codex-hook.ts +1 -5
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/codex-hook.test.ts +4 -21
- package/packages/omo-codex/plugin/components/lsp/AGENTS.md +30 -15
- package/packages/omo-codex/plugin/components/lsp/biome.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +4 -4
- package/packages/omo-codex/plugin/components/lsp/dist/cli.js +217 -171
- package/packages/omo-codex/plugin/components/lsp/dist/daemon-cli-path.js +1 -1
- package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/package.json +5 -5
- package/packages/omo-codex/plugin/components/lsp/src/cli.ts +1 -1
- package/packages/omo-codex/plugin/components/lsp/src/codex-hook.ts +1 -1
- package/packages/omo-codex/plugin/components/lsp/src/daemon-cli-path.ts +1 -5
- package/packages/omo-codex/plugin/components/lsp/test/codex-hook-unavailable.test.ts +6 -7
- package/packages/omo-codex/plugin/components/lsp/test/codex-hook.test.ts +1 -2
- package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +11 -1
- package/packages/omo-codex/plugin/components/rules/AGENTS.md +12 -0
- package/packages/omo-codex/plugin/components/rules/biome.json +2 -2
- package/packages/omo-codex/plugin/components/rules/dist/cli.js +57 -42
- package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/rules/package.json +7 -7
- package/packages/omo-codex/plugin/components/rules/src/config.ts +1 -2
- package/packages/omo-codex/plugin/components/rules/src/persistent-cache.ts +1 -2
- package/packages/omo-codex/plugin/components/rules/src/post-compact-budget.ts +6 -2
- package/packages/omo-codex/plugin/components/rules/src/rules-engine-factory.ts +1 -4
- package/packages/omo-codex/plugin/components/rules/src/static-injection.ts +4 -9
- package/packages/omo-codex/plugin/components/rules/test/bundled-rules-priority.test.ts +11 -16
- package/packages/omo-codex/plugin/components/rules/test/bundled-rules.test.ts +17 -25
- package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-budget.test.ts +9 -7
- package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-context.test.ts +0 -6
- package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-dedup.test.ts +6 -4
- package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-directive.test.ts +12 -9
- package/packages/omo-codex/plugin/components/rules/test/codex-hook.test.ts +28 -37
- package/packages/omo-codex/plugin/components/rules/test/dynamic-target-fingerprints.test.ts +1 -2
- package/packages/omo-codex/plugin/components/rules/test/engine.test.ts +7 -4
- package/packages/omo-codex/plugin/components/rules/test/finder.test.ts +2 -3
- package/packages/omo-codex/plugin/components/rules/test/formatter.test.ts +39 -72
- package/packages/omo-codex/plugin/components/rules/test/hephaestus-model-variant.test.ts +1 -2
- package/packages/omo-codex/plugin/components/rules/test/hook-output.test.ts +2 -3
- package/packages/omo-codex/plugin/components/rules/test/matcher.test.ts +2 -3
- package/packages/omo-codex/plugin/components/rules/test/package-smoke.test.ts +1 -1
- package/packages/omo-codex/plugin/components/rules/test/parser.test.ts +1 -2
- package/packages/omo-codex/plugin/components/rules/test/post-compact-budget.test.ts +1 -2
- package/packages/omo-codex/plugin/components/rules/test/rules-engine-consumption.test.ts +3 -6
- package/packages/omo-codex/plugin/components/rules/test/scanner.test.ts +1 -2
- package/packages/omo-codex/plugin/components/rules/test/sources.test.ts +2 -5
- package/packages/omo-codex/plugin/components/rules/test/windows-git-bash-bundled-rule.test.ts +2 -17
- package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/package.json +5 -5
- package/packages/omo-codex/plugin/components/teammode/test/thread-title-hook.test.ts +3 -9
- package/packages/omo-codex/plugin/components/telemetry/AGENTS.md +8 -0
- package/packages/omo-codex/plugin/components/telemetry/biome.json +2 -2
- package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +2433 -422
- package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +2437 -426
- package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/package.json +5 -5
- package/packages/omo-codex/plugin/components/telemetry/src/codex-hook.ts +1 -4
- package/packages/omo-codex/plugin/components/telemetry/src/posthog.ts +4 -14
- package/packages/omo-codex/plugin/components/telemetry/src/product-identity.ts +1 -1
- package/packages/omo-codex/plugin/components/telemetry/test/diagnostics.test.ts +2 -5
- package/packages/omo-codex/plugin/components/ultrawork/AGENTS.md +5 -0
- package/packages/omo-codex/plugin/components/ultrawork/biome.json +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/directive.md +13 -1
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +5 -5
- package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +13 -1
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +6 -6
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +31 -7
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-clear.md +2 -1
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +5 -5
- package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook-trigger-policy.test.ts +9 -1
- package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +0 -136
- package/packages/omo-codex/plugin/components/ultrawork/test/skill-pointer.test.ts +0 -2
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/AGENTS.md +5 -4
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/NOTICE +1 -1
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/README.md +5 -5
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/biome.json +2 -2
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/directive.md +6 -6
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/dist/cli.js +12 -12
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +28 -0
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/package.json +12 -12
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/boulder-reader.ts +1 -1
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/cli.ts +1 -1
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/codex-hook.ts +3 -3
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/directive.ts +1 -1
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/index.ts +1 -1
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/boulder-reader.test.ts +3 -3
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/cli.test.ts +1 -4
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/codex-hook.test.ts +8 -22
- package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +16 -0
- package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/biome.json +2 -2
- package/packages/omo-codex/plugin/components/ulw-loop/directive.md +13 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +2 -4
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.js +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +3 -3
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +5 -5
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +3 -2
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/define-goal.md +108 -0
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-snapshot.ts +3 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +3 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +3 -3
- package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-continuation.test.ts +0 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-create-goals.test.ts +25 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +2 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-snapshot.test.ts +18 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/codex-hook.test.ts +0 -3
- package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +5 -37
- package/packages/omo-codex/plugin/components/ulw-loop/test/paths.test.ts +9 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/steering.test.ts +8 -5
- package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +4 -5
- package/packages/omo-codex/plugin/components/ulw-loop/vitest.config.ts +1 -0
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +17 -0
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-checking-ulw-execute-continuation.json +17 -0
- package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/package-lock.json +681 -395
- package/packages/omo-codex/plugin/package.json +2 -2
- package/packages/omo-codex/plugin/scripts/AGENTS.md +40 -0
- package/packages/omo-codex/plugin/scripts/auto-update-plan.mjs +1 -1
- package/packages/omo-codex/plugin/scripts/sync-skills.mjs +11 -11
- package/packages/omo-codex/plugin/shared/package.json +3 -4
- package/packages/omo-codex/plugin/skills/ast-grep/AGENTS.md +51 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/AGENTS.md +62 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +3 -2
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/all-platforms.md +1 -1
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/senpi.md +4 -4
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +1 -1
- package/packages/omo-codex/plugin/skills/frontend/SKILL.md +11 -7
- package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +1 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/print-paged-media.md +76 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/stylegallery.md +80 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/README.md +1 -1
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/orchestration.md +1 -1
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/routing.md +5 -5
- package/packages/omo-codex/plugin/skills/review-work/SKILL.md +4 -4
- package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +37 -10
- package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +2 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +179 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/package.json +1 -1
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
- package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +13 -1
- package/packages/omo-codex/plugin/skills/{start-work → ulw-execute}/SKILL.md +12 -11
- package/packages/omo-codex/plugin/skills/ulw-execute/agents/openai.yaml +2 -0
- package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +3 -2
- package/packages/omo-codex/plugin/skills/ulw-loop/references/define-goal.md +108 -0
- package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +1 -0
- package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +6 -6
- package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +31 -7
- package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-clear.md +2 -1
- package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +5 -5
- package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/visual-qa/AGENTS.md +58 -0
- package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +3 -2
- package/packages/omo-codex/plugin/test/AGENTS.md +47 -0
- package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +19 -173
- package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +8 -28
- package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +1 -1
- package/packages/omo-codex/plugin/test/aggregate-plugin-fixture.mjs +175 -13
- package/packages/omo-codex/plugin/test/aggregate.test.mjs +78 -2
- package/packages/omo-codex/plugin/test/auto-update-release-notes.test.mjs +19 -33
- package/packages/omo-codex/plugin/test/component-bin-names.test.mjs +2 -2
- package/packages/omo-codex/plugin/test/component-bundled-cli.test.mjs +1 -1
- package/packages/omo-codex/plugin/test/component-hook-contract-cases.mjs +2 -2
- package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +4 -4
- package/packages/omo-codex/plugin/test/lcx-contribute-bug-fix-template.test.mjs +21 -27
- package/packages/omo-codex/plugin/test/scaffold-plan.test.mjs +0 -36
- package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +101 -0
- package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +12 -12
- package/packages/omo-codex/plugin/test/sync-skills.test.mjs +1 -119
- package/packages/omo-codex/plugin/test/teammode-archive-ambiguity.test.mjs +0 -40
- package/packages/omo-codex/plugin/test/teammode-communication.test.mjs +6 -62
- package/packages/omo-codex/plugin/test/teammode-thread-links.test.mjs +3 -36
- package/packages/omo-codex/plugin/test/teammode-transport.test.mjs +0 -44
- package/packages/omo-codex/plugin/test/teammode-worktree.test.mjs +2 -6
- package/packages/omo-codex/plugin/test/ultrawork-skill-pointer.test.mjs +0 -3
- package/packages/omo-codex/plugin/test/ulw-plan-review-state-contract.test.mjs +0 -3
- package/packages/omo-codex/scripts/AGENTS.md +36 -0
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +2601 -528
- package/packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs +7 -2
- package/packages/shared-skills/skills/ast-grep/AGENTS.md +51 -0
- package/packages/shared-skills/skills/coding-agent-sessions/AGENTS.md +62 -0
- package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +3 -2
- package/packages/shared-skills/skills/coding-agent-sessions/references/all-platforms.md +1 -1
- package/packages/shared-skills/skills/coding-agent-sessions/references/senpi.md +4 -4
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +1 -1
- package/packages/shared-skills/skills/frontend/SKILL.md +11 -7
- package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +1 -0
- package/packages/shared-skills/skills/frontend/references/design/print-paged-media.md +76 -0
- package/packages/shared-skills/skills/frontend/references/design/stylegallery.md +80 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/README.md +1 -1
- package/packages/shared-skills/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
- package/packages/shared-skills/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
- package/packages/shared-skills/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
- package/packages/shared-skills/skills/frontend/references/designpowers/orchestration.md +1 -1
- package/packages/shared-skills/skills/frontend/references/designpowers/routing.md +5 -5
- package/packages/shared-skills/skills/review-work/SKILL.md +3 -3
- package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +37 -10
- package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +2 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +179 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/templates/package.json +1 -1
- package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
- package/packages/shared-skills/skills/{start-work → ulw-execute}/SKILL.md +9 -8
- package/packages/shared-skills/skills/ulw-plan/SKILL.md +6 -6
- package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +31 -7
- package/packages/shared-skills/skills/ulw-plan/references/intent-clear.md +2 -1
- package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +5 -5
- package/packages/shared-skills/skills/ulw-research/SKILL.md +1 -1
- package/packages/shared-skills/skills/visual-qa/AGENTS.md +58 -0
- package/packages/shared-skills/skills/visual-qa/SKILL.md +3 -2
- package/script/qa/web-terminal-visual-qa.mjs +2 -0
- package/script/qa/xterm-live-terminal.mjs +18 -2
- package/dist/config/schema/start-work.d.ts +0 -5
- package/dist/features/builtin-commands/templates/start-work.d.ts +0 -1
- package/dist/hooks/start-work/start-work-hook.d.ts +0 -23
- package/dist/plugin/chat-message/start-work-message.d.ts +0 -5
- package/dist/tools/call-omo-agent/background-agent-executor.d.ts +0 -5
- package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +0 -28
- package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +0 -17
- package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +0 -17
- package/packages/omo-codex/plugin/skills/start-work/agents/openai.yaml +0 -2
- package/packages/omo-codex/plugin/test/aggregate-skills.test.mjs +0 -92
- package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +0 -314
- package/packages/omo-codex/plugin/test/ulw-plan-scope-contract.test.mjs +0 -24
- /package/dist/hooks/{start-work → ulw-execute}/context-info-formatters.d.ts +0 -0
- /package/dist/hooks/{start-work → ulw-execute}/explicit-plan-context.d.ts +0 -0
- /package/dist/hooks/{start-work → ulw-execute}/notepad-scaffold.d.ts +0 -0
- /package/dist/hooks/{start-work → ulw-execute}/parse-user-request.d.ts +0 -0
- /package/dist/hooks/{start-work → ulw-execute}/plan-discovery-context.d.ts +0 -0
- /package/dist/hooks/{start-work → ulw-execute}/plan-selection.d.ts +0 -0
- /package/dist/hooks/{start-work → ulw-execute}/session-plan-affinity.d.ts +0 -0
- /package/dist/hooks/{start-work → ulw-execute}/work-initializer.d.ts +0 -0
- /package/dist/hooks/{start-work → ulw-execute}/worktree-block.d.ts +0 -0
- /package/dist/hooks/{start-work → ulw-execute}/worktree-detector.d.ts +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/.gitattributes +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/CHANGELOG.md +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/LICENSE +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/plan-checklist.ts +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/types.ts +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-completed.json +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-mixed-platforms.json +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-single-codex-work.json +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-all-done.md +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-scaffold.md +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-nested-checkboxes.md +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-unchecked.md +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.build.json +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.json +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/vitest.config.ts +0 -0
|
@@ -8,9 +8,9 @@ import { argv, execPath as execPath2, stderr } from "node:process";
|
|
|
8
8
|
import { stdin as processStdin } from "node:process";
|
|
9
9
|
|
|
10
10
|
// src/codex-hook.ts
|
|
11
|
-
import { readFileSync as readFileSync9, realpathSync as
|
|
11
|
+
import { readFileSync as readFileSync9, realpathSync as realpathSync8 } from "node:fs";
|
|
12
12
|
import { homedir as homedir3 } from "node:os";
|
|
13
|
-
import { join as
|
|
13
|
+
import { join as join12, resolve as resolve11 } from "node:path";
|
|
14
14
|
|
|
15
15
|
// ../../../../lsp-daemon/dist/client.js
|
|
16
16
|
import { connect } from "node:net";
|
|
@@ -42,8 +42,8 @@ import * as path from "node:path";
|
|
|
42
42
|
import { fileURLToPath } from "node:url";
|
|
43
43
|
import { statSync as statSync2 } from "node:fs";
|
|
44
44
|
import { isAbsolute as isAbsolute2 } from "node:path";
|
|
45
|
-
import { existsSync as
|
|
46
|
-
import { dirname as
|
|
45
|
+
import { existsSync as existsSync11, realpathSync as realpathSync5, statSync as statSync4 } from "node:fs";
|
|
46
|
+
import { basename as basename3, dirname as dirname9, join as join5, resolve as resolve7 } from "node:path";
|
|
47
47
|
import { basename as basename2, extname } from "node:path";
|
|
48
48
|
import { resolve as resolve6 } from "node:path";
|
|
49
49
|
import { pathToFileURL as pathToFileURL3 } from "node:url";
|
|
@@ -62,32 +62,33 @@ import { createHash as createHash2 } from "node:crypto";
|
|
|
62
62
|
import { dirname as dirname5, relative as relative4, resolve as resolve4 } from "node:path";
|
|
63
63
|
import { existsSync as existsSync6, lstatSync as lstatSync4, readdirSync as readdirSync2 } from "node:fs";
|
|
64
64
|
import { dirname as dirname6, resolve as resolve5 } from "node:path";
|
|
65
|
-
import { existsSync as existsSync7,
|
|
66
|
-
import { dirname as dirname7 } from "node:path";
|
|
67
|
-
import { existsSync as existsSync8, readFileSync as
|
|
68
|
-
import {
|
|
69
|
-
import {
|
|
70
|
-
import { existsSync as
|
|
71
|
-
import {
|
|
65
|
+
import { existsSync as existsSync7, realpathSync as realpathSync4 } from "node:fs";
|
|
66
|
+
import { dirname as dirname7, join as join3 } from "node:path";
|
|
67
|
+
import { existsSync as existsSync8, mkdirSync as mkdirSync3, readFileSync as readFileSync4, renameSync as renameSync2, writeFileSync as writeFileSync2 } from "node:fs";
|
|
68
|
+
import { dirname as dirname8 } from "node:path";
|
|
69
|
+
import { existsSync as existsSync9, readFileSync as readFileSync5 } from "node:fs";
|
|
70
|
+
import { existsSync as existsSync10 } from "node:fs";
|
|
71
|
+
import { delimiter as delimiter3, join as join4 } from "node:path";
|
|
72
|
+
import { existsSync as existsSync12, lstatSync as lstatSync5, readdirSync as readdirSync3 } from "node:fs";
|
|
73
|
+
import { join as join6, resolve as resolve8 } from "node:path";
|
|
72
74
|
import { fileURLToPath as fileURLToPath3 } from "node:url";
|
|
73
75
|
import { lstatSync as lstatSync6, readdirSync as readdirSync4 } from "node:fs";
|
|
74
|
-
import { join as
|
|
76
|
+
import { join as join7 } from "node:path";
|
|
75
77
|
import { statSync as statSync5 } from "node:fs";
|
|
76
78
|
import { isAbsolute as isAbsolute5 } from "node:path";
|
|
77
79
|
|
|
78
80
|
class LspRequestContextParseError extends Error {
|
|
79
|
-
code;
|
|
80
|
-
name = "LspRequestContextParseError";
|
|
81
81
|
constructor(code, message) {
|
|
82
82
|
super(message);
|
|
83
83
|
this.code = code;
|
|
84
|
+
this.name = "LspRequestContextParseError";
|
|
84
85
|
}
|
|
85
86
|
}
|
|
86
87
|
|
|
87
88
|
class LspRequestContextUnavailableError extends Error {
|
|
88
|
-
name = "LspRequestContextUnavailableError";
|
|
89
89
|
constructor() {
|
|
90
90
|
super("LSP request context is required. Standalone MCP startup must install one with runWithRequestContext(createStandaloneMcpRequestContext()).");
|
|
91
|
+
this.name = "LspRequestContextUnavailableError";
|
|
91
92
|
}
|
|
92
93
|
}
|
|
93
94
|
var storage = new AsyncLocalStorage;
|
|
@@ -214,7 +215,6 @@ function isPlainRecord(value) {
|
|
|
214
215
|
}
|
|
215
216
|
|
|
216
217
|
class DaemonRequestError extends Error {
|
|
217
|
-
requestWritten;
|
|
218
218
|
constructor(message, requestWritten) {
|
|
219
219
|
super(message);
|
|
220
220
|
this.name = "DaemonRequestError";
|
|
@@ -237,7 +237,6 @@ class DaemonRequestCancelledError extends DaemonRequestError {
|
|
|
237
237
|
}
|
|
238
238
|
|
|
239
239
|
class DaemonRequestTimedOutError extends DaemonRequestError {
|
|
240
|
-
timeoutMs;
|
|
241
240
|
constructor(requestWritten, timeoutMs) {
|
|
242
241
|
super("daemon request timed out", requestWritten);
|
|
243
242
|
this.name = "DaemonRequestTimedOutError";
|
|
@@ -314,20 +313,18 @@ var OMO_LSP_DAEMON_VERSION = "OMO_LSP_DAEMON_VERSION";
|
|
|
314
313
|
var DAEMON_VERSION_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._+-]{0,127}$/;
|
|
315
314
|
|
|
316
315
|
class InvalidRuntimeOverrideError extends Error {
|
|
317
|
-
code = "invalid_runtime_override";
|
|
318
|
-
reason;
|
|
319
316
|
constructor(reason, message) {
|
|
320
317
|
super(message);
|
|
318
|
+
this.code = "invalid_runtime_override";
|
|
321
319
|
this.name = "InvalidRuntimeOverrideError";
|
|
322
320
|
this.reason = reason;
|
|
323
321
|
}
|
|
324
322
|
}
|
|
325
323
|
|
|
326
324
|
class InvalidDaemonVersionError extends Error {
|
|
327
|
-
code = "invalid_daemon_version";
|
|
328
|
-
version;
|
|
329
325
|
constructor(version) {
|
|
330
326
|
super("LSP daemon version must match [A-Za-z0-9][A-Za-z0-9._+-]{0,127}");
|
|
327
|
+
this.code = "invalid_daemon_version";
|
|
331
328
|
this.name = "InvalidDaemonVersionError";
|
|
332
329
|
this.version = version;
|
|
333
330
|
}
|
|
@@ -371,10 +368,9 @@ var requireFromHere = createRequire(import.meta.url);
|
|
|
371
368
|
var MAX_SOCKET_PATH_LENGTH = 100;
|
|
372
369
|
|
|
373
370
|
class InvalidDaemonDirectoryError extends Error {
|
|
374
|
-
code = "invalid_daemon_directory";
|
|
375
|
-
directory;
|
|
376
371
|
constructor(directory) {
|
|
377
372
|
super(`${OMO_LSP_DAEMON_DIR} must be an absolute path`);
|
|
373
|
+
this.code = "invalid_daemon_directory";
|
|
378
374
|
this.name = "InvalidDaemonDirectoryError";
|
|
379
375
|
this.directory = directory;
|
|
380
376
|
}
|
|
@@ -565,7 +561,8 @@ function spawnDaemonProcess(paths) {
|
|
|
565
561
|
try {
|
|
566
562
|
const child = spawn(resolveDaemonNodeExecutable(), [paths.cliPath, "daemon"], {
|
|
567
563
|
detached: true,
|
|
568
|
-
stdio: ["ignore", logFd, logFd]
|
|
564
|
+
stdio: ["ignore", logFd, logFd],
|
|
565
|
+
windowsHide: true
|
|
569
566
|
});
|
|
570
567
|
child.once("spawn", () => closeSync2(logFd));
|
|
571
568
|
child.once("error", (error) => {
|
|
@@ -686,22 +683,15 @@ function effectiveExtension(filePath) {
|
|
|
686
683
|
}
|
|
687
684
|
|
|
688
685
|
class LspConnectionClosedError extends Error {
|
|
689
|
-
serverId;
|
|
690
|
-
root;
|
|
691
|
-
name = "LspConnectionClosedError";
|
|
692
686
|
constructor(serverId, root, message) {
|
|
693
687
|
super(message ?? `LSP connection closed for ${serverId} at ${root}`);
|
|
694
688
|
this.serverId = serverId;
|
|
695
689
|
this.root = root;
|
|
690
|
+
this.name = "LspConnectionClosedError";
|
|
696
691
|
}
|
|
697
692
|
}
|
|
698
693
|
|
|
699
694
|
class LspProcessExitedError extends Error {
|
|
700
|
-
serverId;
|
|
701
|
-
root;
|
|
702
|
-
exitCode;
|
|
703
|
-
stderrTail;
|
|
704
|
-
name = "LspProcessExitedError";
|
|
705
695
|
constructor(serverId, root, exitCode, stderrTail) {
|
|
706
696
|
const stderrSuffix = stderrTail ? `
|
|
707
697
|
stderr tail: ${stderrTail}` : "";
|
|
@@ -710,46 +700,49 @@ stderr tail: ${stderrTail}` : "";
|
|
|
710
700
|
this.root = root;
|
|
711
701
|
this.exitCode = exitCode;
|
|
712
702
|
this.stderrTail = stderrTail;
|
|
703
|
+
this.name = "LspProcessExitedError";
|
|
713
704
|
}
|
|
714
705
|
}
|
|
715
706
|
|
|
716
707
|
class LspRequestTimeoutError extends Error {
|
|
717
|
-
method;
|
|
718
|
-
stderrTail;
|
|
719
|
-
name = "LspRequestTimeoutError";
|
|
720
708
|
constructor(method, stderrTail) {
|
|
721
709
|
const stderrSuffix = stderrTail ? `
|
|
722
710
|
recent stderr: ${stderrTail}` : "";
|
|
723
711
|
super(`LSP request timeout (method: ${method})${stderrSuffix}`);
|
|
724
712
|
this.method = method;
|
|
725
713
|
this.stderrTail = stderrTail;
|
|
714
|
+
this.name = "LspRequestTimeoutError";
|
|
726
715
|
}
|
|
727
716
|
}
|
|
728
717
|
|
|
729
718
|
class LspInvalidPathError extends Error {
|
|
730
|
-
|
|
719
|
+
constructor() {
|
|
720
|
+
super(...arguments);
|
|
721
|
+
this.name = "LspInvalidPathError";
|
|
722
|
+
}
|
|
731
723
|
}
|
|
732
724
|
|
|
733
725
|
class LspServerLookupError extends Error {
|
|
734
|
-
lookup;
|
|
735
|
-
name = "LspServerLookupError";
|
|
736
726
|
constructor(message, lookup) {
|
|
737
727
|
super(message);
|
|
738
728
|
this.lookup = lookup;
|
|
729
|
+
this.name = "LspServerLookupError";
|
|
739
730
|
}
|
|
740
731
|
}
|
|
741
732
|
|
|
742
733
|
class LspServerInitializingError extends Error {
|
|
743
|
-
originalError;
|
|
744
|
-
name = "LspServerInitializingError";
|
|
745
734
|
constructor(originalError) {
|
|
746
735
|
super(`LSP server is still initializing. Please retry in a few seconds. Original error: ${originalError.message}`);
|
|
747
736
|
this.originalError = originalError;
|
|
737
|
+
this.name = "LspServerInitializingError";
|
|
748
738
|
}
|
|
749
739
|
}
|
|
750
740
|
|
|
751
741
|
class LspProcessSpawnError extends Error {
|
|
752
|
-
|
|
742
|
+
constructor() {
|
|
743
|
+
super(...arguments);
|
|
744
|
+
this.name = "LspProcessSpawnError";
|
|
745
|
+
}
|
|
753
746
|
}
|
|
754
747
|
function isLspDeadConnectionError(err) {
|
|
755
748
|
return err instanceof LspConnectionClosedError || err instanceof LspProcessExitedError;
|
|
@@ -781,20 +774,31 @@ var METHOD_NOT_FOUND = -32601;
|
|
|
781
774
|
var INTERNAL_ERROR = -32603;
|
|
782
775
|
|
|
783
776
|
class JsonRpcConnection {
|
|
784
|
-
reader;
|
|
785
|
-
writer;
|
|
786
|
-
pendingRequests = new Map;
|
|
787
|
-
notificationHandlers = new Map;
|
|
788
|
-
requestHandlers = new Map;
|
|
789
|
-
closeHandlers = [];
|
|
790
|
-
errorHandlers = [];
|
|
791
|
-
inputBuffer = Buffer.alloc(0);
|
|
792
|
-
nextRequestId = 1;
|
|
793
|
-
listening = false;
|
|
794
|
-
disposed = false;
|
|
795
777
|
constructor(reader, writer) {
|
|
796
778
|
this.reader = reader;
|
|
797
779
|
this.writer = writer;
|
|
780
|
+
this.pendingRequests = new Map;
|
|
781
|
+
this.notificationHandlers = new Map;
|
|
782
|
+
this.requestHandlers = new Map;
|
|
783
|
+
this.closeHandlers = [];
|
|
784
|
+
this.errorHandlers = [];
|
|
785
|
+
this.inputBuffer = Buffer.alloc(0);
|
|
786
|
+
this.nextRequestId = 1;
|
|
787
|
+
this.listening = false;
|
|
788
|
+
this.disposed = false;
|
|
789
|
+
this.handleData = (chunk) => {
|
|
790
|
+
const chunkBuffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, "utf8");
|
|
791
|
+
this.inputBuffer = Buffer.concat([this.inputBuffer, chunkBuffer]);
|
|
792
|
+
this.drainInputBuffer();
|
|
793
|
+
};
|
|
794
|
+
this.handleClose = () => {
|
|
795
|
+
for (const handler of this.closeHandlers) {
|
|
796
|
+
handler();
|
|
797
|
+
}
|
|
798
|
+
};
|
|
799
|
+
this.handleStreamError = (error) => {
|
|
800
|
+
this.emitError(error);
|
|
801
|
+
};
|
|
798
802
|
}
|
|
799
803
|
listen() {
|
|
800
804
|
if (this.listening)
|
|
@@ -915,19 +919,6 @@ class JsonRpcConnection {
|
|
|
915
919
|
this.notificationHandlers.clear();
|
|
916
920
|
this.requestHandlers.clear();
|
|
917
921
|
}
|
|
918
|
-
handleData = (chunk) => {
|
|
919
|
-
const chunkBuffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, "utf8");
|
|
920
|
-
this.inputBuffer = Buffer.concat([this.inputBuffer, chunkBuffer]);
|
|
921
|
-
this.drainInputBuffer();
|
|
922
|
-
};
|
|
923
|
-
handleClose = () => {
|
|
924
|
-
for (const handler of this.closeHandlers) {
|
|
925
|
-
handler();
|
|
926
|
-
}
|
|
927
|
-
};
|
|
928
|
-
handleStreamError = (error) => {
|
|
929
|
-
this.emitError(error);
|
|
930
|
-
};
|
|
931
922
|
drainInputBuffer() {
|
|
932
923
|
while (true) {
|
|
933
924
|
const headerEnd = this.inputBuffer.indexOf(HEADER_SEPARATOR2);
|
|
@@ -1267,31 +1258,25 @@ function isPosition(value) {
|
|
|
1267
1258
|
}
|
|
1268
1259
|
|
|
1269
1260
|
class LspClientNotStartedError extends Error {
|
|
1270
|
-
serverId;
|
|
1271
|
-
root;
|
|
1272
|
-
name = "LspClientNotStartedError";
|
|
1273
1261
|
constructor(serverId, root) {
|
|
1274
1262
|
super("LSP client not started");
|
|
1275
1263
|
this.serverId = serverId;
|
|
1276
1264
|
this.root = root;
|
|
1265
|
+
this.name = "LspClientNotStartedError";
|
|
1277
1266
|
}
|
|
1278
1267
|
}
|
|
1279
1268
|
|
|
1280
1269
|
class LspClientTransport {
|
|
1281
|
-
root;
|
|
1282
|
-
server;
|
|
1283
|
-
proc = null;
|
|
1284
|
-
connection = null;
|
|
1285
|
-
stderrBuffer = [];
|
|
1286
|
-
processExited = false;
|
|
1287
|
-
diagnosticsStore = new Map;
|
|
1288
|
-
requestTimeoutMs;
|
|
1289
|
-
initializeTimeoutMs;
|
|
1290
|
-
workspaceApplyEditHandler = null;
|
|
1291
|
-
diagnosticPullSupported = false;
|
|
1292
1270
|
constructor(root, server2, timeouts = {}) {
|
|
1293
1271
|
this.root = root;
|
|
1294
1272
|
this.server = server2;
|
|
1273
|
+
this.proc = null;
|
|
1274
|
+
this.connection = null;
|
|
1275
|
+
this.stderrBuffer = [];
|
|
1276
|
+
this.processExited = false;
|
|
1277
|
+
this.diagnosticsStore = new Map;
|
|
1278
|
+
this.workspaceApplyEditHandler = null;
|
|
1279
|
+
this.diagnosticPullSupported = false;
|
|
1295
1280
|
this.requestTimeoutMs = timeouts.requestTimeoutMs ?? REQUEST_TIMEOUT_MS;
|
|
1296
1281
|
this.initializeTimeoutMs = timeouts.initializeTimeoutMs ?? INIT_TIMEOUT_MS;
|
|
1297
1282
|
}
|
|
@@ -1777,16 +1762,12 @@ function movedPath(candidate, oldPath, newPath) {
|
|
|
1777
1762
|
}
|
|
1778
1763
|
|
|
1779
1764
|
class WorkspaceDocumentState {
|
|
1780
|
-
sendNotification;
|
|
1781
|
-
clearDiagnostics;
|
|
1782
|
-
openDocuments = new Map;
|
|
1783
|
-
openByUri = new Map;
|
|
1784
|
-
openPromises = new Map;
|
|
1785
|
-
now;
|
|
1786
|
-
versionlessPublishQuiescenceMs;
|
|
1787
1765
|
constructor(sendNotification, clearDiagnostics, options = {}) {
|
|
1788
1766
|
this.sendNotification = sendNotification;
|
|
1789
1767
|
this.clearDiagnostics = clearDiagnostics;
|
|
1768
|
+
this.openDocuments = new Map;
|
|
1769
|
+
this.openByUri = new Map;
|
|
1770
|
+
this.openPromises = new Map;
|
|
1790
1771
|
this.now = options.now ?? (() => Date.now());
|
|
1791
1772
|
this.versionlessPublishQuiescenceMs = options.versionlessPublishQuiescenceMs ?? DEFAULT_VERSIONLESS_PUBLISH_QUIESCENCE_MS;
|
|
1792
1773
|
}
|
|
@@ -2040,13 +2021,11 @@ function workspaceApplyEditConcurrentFailureReason(phase) {
|
|
|
2040
2021
|
}
|
|
2041
2022
|
|
|
2042
2023
|
class WorkspaceEditPathError extends Error {
|
|
2043
|
-
path;
|
|
2044
|
-
detail;
|
|
2045
|
-
name = "WorkspaceEditPathError";
|
|
2046
2024
|
constructor(path2, detail) {
|
|
2047
2025
|
super(`${detail}: ${path2}`);
|
|
2048
2026
|
this.path = path2;
|
|
2049
2027
|
this.detail = detail;
|
|
2028
|
+
this.name = "WorkspaceEditPathError";
|
|
2050
2029
|
}
|
|
2051
2030
|
}
|
|
2052
2031
|
function isPathInsideWorkspace(filePath, workspaceRoot) {
|
|
@@ -2332,13 +2311,11 @@ function canonicalFingerprint(operations) {
|
|
|
2332
2311
|
}
|
|
2333
2312
|
|
|
2334
2313
|
class WorkspaceEditValidationError extends Error {
|
|
2335
|
-
changeIndex;
|
|
2336
|
-
detail;
|
|
2337
|
-
name = "WorkspaceEditValidationError";
|
|
2338
2314
|
constructor(changeIndex, detail) {
|
|
2339
2315
|
super(`change ${changeIndex}: ${detail}`);
|
|
2340
2316
|
this.changeIndex = changeIndex;
|
|
2341
2317
|
this.detail = detail;
|
|
2318
|
+
this.name = "WorkspaceEditValidationError";
|
|
2342
2319
|
}
|
|
2343
2320
|
}
|
|
2344
2321
|
function isRecord3(value) {
|
|
@@ -2820,10 +2797,9 @@ function simulateDelete(operation, virtual) {
|
|
|
2820
2797
|
}
|
|
2821
2798
|
|
|
2822
2799
|
class WorkspaceSnapshotBuilder {
|
|
2823
|
-
workspaceRoot;
|
|
2824
|
-
snapshots = new Map;
|
|
2825
2800
|
constructor(workspaceRoot) {
|
|
2826
2801
|
this.workspaceRoot = workspaceRoot;
|
|
2802
|
+
this.snapshots = new Map;
|
|
2827
2803
|
}
|
|
2828
2804
|
build(operations) {
|
|
2829
2805
|
this.add(this.workspaceRoot, false);
|
|
@@ -2866,8 +2842,10 @@ function snapshotOperations(operations, workspaceRoot) {
|
|
|
2866
2842
|
}
|
|
2867
2843
|
|
|
2868
2844
|
class PlanPathIndex {
|
|
2869
|
-
|
|
2870
|
-
|
|
2845
|
+
constructor() {
|
|
2846
|
+
this.firstChangeByPath = new Map;
|
|
2847
|
+
this.reportedPathByCanonical = new Map;
|
|
2848
|
+
}
|
|
2871
2849
|
build(operations) {
|
|
2872
2850
|
for (const operation of operations) {
|
|
2873
2851
|
switch (operation.kind) {
|
|
@@ -2954,14 +2932,11 @@ function isRecord4(value) {
|
|
|
2954
2932
|
}
|
|
2955
2933
|
|
|
2956
2934
|
class WorkspaceMutationController {
|
|
2957
|
-
workspaceRoot;
|
|
2958
|
-
documents;
|
|
2959
|
-
activeLease = null;
|
|
2960
|
-
nextLeaseId = 1;
|
|
2961
|
-
io;
|
|
2962
2935
|
constructor(workspaceRoot, documents) {
|
|
2963
2936
|
this.workspaceRoot = workspaceRoot;
|
|
2964
2937
|
this.documents = documents;
|
|
2938
|
+
this.activeLease = null;
|
|
2939
|
+
this.nextLeaseId = 1;
|
|
2965
2940
|
}
|
|
2966
2941
|
setIo(io) {
|
|
2967
2942
|
this.io = io;
|
|
@@ -3072,12 +3047,9 @@ var DIAGNOSTICS_FRESHNESS_TIMEOUT_MS = 3000;
|
|
|
3072
3047
|
var VERSIONLESS_PUBLISH_QUIESCENCE_MS = 250;
|
|
3073
3048
|
|
|
3074
3049
|
class LspClient extends LspClientConnection {
|
|
3075
|
-
diagnosticPullErrors = [];
|
|
3076
|
-
documents;
|
|
3077
|
-
workspaceMutations;
|
|
3078
|
-
diagnosticsFreshnessTimeoutMs;
|
|
3079
3050
|
constructor(root, server2, options = {}) {
|
|
3080
3051
|
super(root, server2, options);
|
|
3052
|
+
this.diagnosticPullErrors = [];
|
|
3081
3053
|
this.diagnosticsFreshnessTimeoutMs = options.diagnosticsFreshnessTimeoutMs ?? DIAGNOSTICS_FRESHNESS_TIMEOUT_MS;
|
|
3082
3054
|
this.documents = new WorkspaceDocumentState((method, params) => this.sendNotification(method, params), (uri) => this.diagnosticsStore.delete(uri), {
|
|
3083
3055
|
versionlessPublishQuiescenceMs: options.versionlessPublishQuiescenceMs ?? VERSIONLESS_PUBLISH_QUIESCENCE_MS
|
|
@@ -3373,16 +3345,11 @@ function awaitWithSignal2(promise, signal) {
|
|
|
3373
3345
|
}
|
|
3374
3346
|
|
|
3375
3347
|
class LspManager {
|
|
3376
|
-
clients = new Map;
|
|
3377
|
-
reaperHandle = null;
|
|
3378
|
-
signalDisposer = null;
|
|
3379
|
-
disposed = false;
|
|
3380
|
-
idleTimeoutMs;
|
|
3381
|
-
initTimeoutMs;
|
|
3382
|
-
reaperIntervalMs;
|
|
3383
|
-
clientFactory;
|
|
3384
|
-
now;
|
|
3385
3348
|
constructor(options = {}) {
|
|
3349
|
+
this.clients = new Map;
|
|
3350
|
+
this.reaperHandle = null;
|
|
3351
|
+
this.signalDisposer = null;
|
|
3352
|
+
this.disposed = false;
|
|
3386
3353
|
this.idleTimeoutMs = options.idleTimeoutMs ?? IDLE_TIMEOUT_MS;
|
|
3387
3354
|
this.initTimeoutMs = options.initTimeoutMs ?? INIT_TIMEOUT_MS;
|
|
3388
3355
|
this.reaperIntervalMs = options.reaperIntervalMs ?? REAPER_INTERVAL_MS;
|
|
@@ -3606,12 +3573,41 @@ function getLspManager() {
|
|
|
3606
3573
|
}
|
|
3607
3574
|
return _defaultInstance;
|
|
3608
3575
|
}
|
|
3576
|
+
var WORKSPACE_MARKERS = [".git", "package.json", "pyproject.toml", "Cargo.toml", "go.mod", "pom.xml", "build.gradle"];
|
|
3577
|
+
function findWorkspaceRootOutsideContext(directory) {
|
|
3578
|
+
const marked = nearestMarkedAncestor(directory);
|
|
3579
|
+
if (marked !== undefined)
|
|
3580
|
+
return marked;
|
|
3581
|
+
return realpathSync4(nearestExistingAncestor(directory));
|
|
3582
|
+
}
|
|
3583
|
+
function nearestMarkedAncestor(directory) {
|
|
3584
|
+
let current = directory;
|
|
3585
|
+
for (;; ) {
|
|
3586
|
+
if (existsSync7(current) && WORKSPACE_MARKERS.some((marker) => existsSync7(join3(current, marker)))) {
|
|
3587
|
+
return realpathSync4(current);
|
|
3588
|
+
}
|
|
3589
|
+
const parent = dirname7(current);
|
|
3590
|
+
if (parent === current)
|
|
3591
|
+
return;
|
|
3592
|
+
current = parent;
|
|
3593
|
+
}
|
|
3594
|
+
}
|
|
3595
|
+
function nearestExistingAncestor(directory) {
|
|
3596
|
+
let current = directory;
|
|
3597
|
+
while (!existsSync7(current)) {
|
|
3598
|
+
const parent = dirname7(current);
|
|
3599
|
+
if (parent === current)
|
|
3600
|
+
return current;
|
|
3601
|
+
current = parent;
|
|
3602
|
+
}
|
|
3603
|
+
return current;
|
|
3604
|
+
}
|
|
3609
3605
|
function getInstallDecisionsPath() {
|
|
3610
3606
|
return lspRequestContext().installDecisionsPath;
|
|
3611
3607
|
}
|
|
3612
3608
|
function loadInstallDecisions() {
|
|
3613
3609
|
const path2 = getInstallDecisionsPath();
|
|
3614
|
-
if (!
|
|
3610
|
+
if (!existsSync8(path2))
|
|
3615
3611
|
return {};
|
|
3616
3612
|
try {
|
|
3617
3613
|
const parsed = JSON.parse(readFileSync4(path2, "utf8"));
|
|
@@ -3633,7 +3629,7 @@ function isInstallDecision(value) {
|
|
|
3633
3629
|
}
|
|
3634
3630
|
function writeInstallDecisions(decisions) {
|
|
3635
3631
|
const path2 = getInstallDecisionsPath();
|
|
3636
|
-
mkdirSync3(
|
|
3632
|
+
mkdirSync3(dirname8(path2), { recursive: true });
|
|
3637
3633
|
const tmpPath = `${path2}.tmp`;
|
|
3638
3634
|
writeFileSync2(tmpPath, `${JSON.stringify(decisions, null, 2)}
|
|
3639
3635
|
`, "utf8");
|
|
@@ -3802,7 +3798,7 @@ function getUserConfigPath() {
|
|
|
3802
3798
|
return lspRequestContext().userConfigPath;
|
|
3803
3799
|
}
|
|
3804
3800
|
function loadJsonFile(path2) {
|
|
3805
|
-
if (!
|
|
3801
|
+
if (!existsSync9(path2))
|
|
3806
3802
|
return null;
|
|
3807
3803
|
try {
|
|
3808
3804
|
const parsed = JSON.parse(readFileSync5(path2, "utf-8"));
|
|
@@ -3995,7 +3991,7 @@ function isServerInstalled(command, _workingDirectory) {
|
|
|
3995
3991
|
if (!cmd)
|
|
3996
3992
|
return false;
|
|
3997
3993
|
if (cmd.includes("/") || cmd.includes("\\")) {
|
|
3998
|
-
if (
|
|
3994
|
+
if (existsSync10(cmd))
|
|
3999
3995
|
return true;
|
|
4000
3996
|
}
|
|
4001
3997
|
const isWindows = process.platform === "win32";
|
|
@@ -4016,7 +4012,7 @@ function isServerInstalled(command, _workingDirectory) {
|
|
|
4016
4012
|
const paths = pathEnv.split(delimiter3);
|
|
4017
4013
|
for (const p of paths) {
|
|
4018
4014
|
for (const suffix of exts) {
|
|
4019
|
-
if (
|
|
4015
|
+
if (existsSync10(join4(p, cmd + suffix))) {
|
|
4020
4016
|
return true;
|
|
4021
4017
|
}
|
|
4022
4018
|
}
|
|
@@ -4108,7 +4104,6 @@ function getAllServers() {
|
|
|
4108
4104
|
}
|
|
4109
4105
|
return result;
|
|
4110
4106
|
}
|
|
4111
|
-
var WORKSPACE_MARKERS = [".git", "package.json", "pyproject.toml", "Cargo.toml", "go.mod", "pom.xml", "build.gradle"];
|
|
4112
4107
|
function isDirectoryPath(filePath) {
|
|
4113
4108
|
try {
|
|
4114
4109
|
return statSync4(filePath).isDirectory();
|
|
@@ -4117,32 +4112,85 @@ function isDirectoryPath(filePath) {
|
|
|
4117
4112
|
}
|
|
4118
4113
|
}
|
|
4119
4114
|
function findWorkspaceRoot(filePath) {
|
|
4120
|
-
const
|
|
4115
|
+
const cwd = contextCwd();
|
|
4116
|
+
const abs = resolveReadablePathInsideContext(filePath);
|
|
4121
4117
|
let dir = abs;
|
|
4122
4118
|
if (!isDirectoryPath(dir)) {
|
|
4123
|
-
dir =
|
|
4124
|
-
}
|
|
4125
|
-
|
|
4126
|
-
|
|
4127
|
-
|
|
4128
|
-
|
|
4129
|
-
|
|
4119
|
+
dir = dirname9(dir);
|
|
4120
|
+
}
|
|
4121
|
+
if (!isPathInside(cwd, abs))
|
|
4122
|
+
return findWorkspaceRootOutsideContext(dir);
|
|
4123
|
+
const fallbackRoot = nearestExistingDirectoryInsideContext(dir, cwd) ?? cwd;
|
|
4124
|
+
while (isPathInside(cwd, dir)) {
|
|
4125
|
+
const canonicalDir = existingDirectoryInsideContext(dir, cwd);
|
|
4126
|
+
if (canonicalDir !== undefined) {
|
|
4127
|
+
for (const marker of WORKSPACE_MARKERS) {
|
|
4128
|
+
if (existsSync11(join5(dir, marker))) {
|
|
4129
|
+
return canonicalDir;
|
|
4130
|
+
}
|
|
4130
4131
|
}
|
|
4131
4132
|
}
|
|
4132
|
-
|
|
4133
|
-
|
|
4133
|
+
if (dir === cwd)
|
|
4134
|
+
break;
|
|
4135
|
+
dir = dirname9(dir);
|
|
4134
4136
|
}
|
|
4135
|
-
return
|
|
4137
|
+
return fallbackRoot;
|
|
4136
4138
|
}
|
|
4137
|
-
function
|
|
4139
|
+
function resolveReadablePathInsideContext(filePath) {
|
|
4138
4140
|
const cwd = contextCwd();
|
|
4139
4141
|
const abs = resolve7(cwd, filePath);
|
|
4142
|
+
if (isPathInside(cwd, abs))
|
|
4143
|
+
return abs;
|
|
4144
|
+
const rebased = rebaseThroughCanonicalAncestor(abs, cwd);
|
|
4145
|
+
if (rebased !== undefined)
|
|
4146
|
+
return rebased;
|
|
4147
|
+
return canonicalizeExistingOrNearestAncestor(abs);
|
|
4148
|
+
}
|
|
4149
|
+
function resolvePathInsideContext(filePath) {
|
|
4150
|
+
const cwd = contextCwd();
|
|
4151
|
+
const abs = resolveReadablePathInsideContext(filePath);
|
|
4140
4152
|
const canonical = canonicalizeExistingOrNearestAncestor(abs);
|
|
4141
4153
|
if (!isPathInside(cwd, canonical)) {
|
|
4142
4154
|
throw new LspInvalidPathError(`LSP file path must be inside request cwd: ${filePath}`);
|
|
4143
4155
|
}
|
|
4144
4156
|
return canonical;
|
|
4145
4157
|
}
|
|
4158
|
+
function rebaseThroughCanonicalAncestor(path2, cwd) {
|
|
4159
|
+
let current = path2;
|
|
4160
|
+
const suffix = [];
|
|
4161
|
+
while (true) {
|
|
4162
|
+
if (existsSync11(current)) {
|
|
4163
|
+
const canonical = realpathSync5(current);
|
|
4164
|
+
if (isPathInside(cwd, canonical))
|
|
4165
|
+
return suffix.length === 0 ? canonical : join5(canonical, ...suffix);
|
|
4166
|
+
}
|
|
4167
|
+
const parent = dirname9(current);
|
|
4168
|
+
if (parent === current)
|
|
4169
|
+
return;
|
|
4170
|
+
suffix.unshift(basename3(current));
|
|
4171
|
+
current = parent;
|
|
4172
|
+
}
|
|
4173
|
+
}
|
|
4174
|
+
function existingDirectoryInsideContext(directory, cwd) {
|
|
4175
|
+
if (!existsSync11(directory))
|
|
4176
|
+
return;
|
|
4177
|
+
const canonical = realpathSync5(directory);
|
|
4178
|
+
if (!statSync4(canonical).isDirectory())
|
|
4179
|
+
return;
|
|
4180
|
+
return isPathInside(cwd, canonical) ? canonical : undefined;
|
|
4181
|
+
}
|
|
4182
|
+
function nearestExistingDirectoryInsideContext(directory, cwd) {
|
|
4183
|
+
let current = directory;
|
|
4184
|
+
while (isPathInside(cwd, current)) {
|
|
4185
|
+
const canonical = existingDirectoryInsideContext(current, cwd);
|
|
4186
|
+
if (canonical !== undefined)
|
|
4187
|
+
return canonical;
|
|
4188
|
+
if (current === cwd)
|
|
4189
|
+
return;
|
|
4190
|
+
current = dirname9(current);
|
|
4191
|
+
}
|
|
4192
|
+
return;
|
|
4193
|
+
}
|
|
4146
4194
|
function formatServerLookupError(result) {
|
|
4147
4195
|
if (result.status === "not_installed") {
|
|
4148
4196
|
return formatNotInstalled(result);
|
|
@@ -4213,7 +4261,7 @@ function formatNotInstalled(result) {
|
|
|
4213
4261
|
].join(`
|
|
4214
4262
|
`);
|
|
4215
4263
|
}
|
|
4216
|
-
var
|
|
4264
|
+
var READ_ONLY_TOOLS = new Set([
|
|
4217
4265
|
"diagnostics",
|
|
4218
4266
|
"definition",
|
|
4219
4267
|
"references",
|
|
@@ -4222,7 +4270,7 @@ var READ_ONLY_RETRY_TOOLS = new Set([
|
|
|
4222
4270
|
"prepareRename"
|
|
4223
4271
|
]);
|
|
4224
4272
|
async function withLspClient(filePath, fn, toolName, options = {}) {
|
|
4225
|
-
const absPath = resolvePathInsideContext(filePath);
|
|
4273
|
+
const absPath = READ_ONLY_TOOLS.has(toolName) ? resolveReadablePathInsideContext(filePath) : resolvePathInsideContext(filePath);
|
|
4226
4274
|
if (isDirectoryPath(absPath)) {
|
|
4227
4275
|
throw new LspInvalidPathError("Directory paths are not supported by this LSP tool. " + "Use lsp.diagnostics with a directory path for directory diagnostics.");
|
|
4228
4276
|
}
|
|
@@ -4237,9 +4285,9 @@ async function withLspClient(filePath, fn, toolName, options = {}) {
|
|
|
4237
4285
|
const acquireAndCall = async (allowRetry) => {
|
|
4238
4286
|
const client = await manager.getClient(root, server2, options.signal);
|
|
4239
4287
|
try {
|
|
4240
|
-
return await fn(client, root);
|
|
4288
|
+
return await fn(client, root, absPath);
|
|
4241
4289
|
} catch (err) {
|
|
4242
|
-
if (allowRetry &&
|
|
4290
|
+
if (allowRetry && READ_ONLY_TOOLS.has(toolName) && isLspDeadConnectionError(err)) {
|
|
4243
4291
|
manager.invalidateClient(root, server2.id, client);
|
|
4244
4292
|
return acquireAndCall(false);
|
|
4245
4293
|
}
|
|
@@ -4379,7 +4427,7 @@ function collectFilesWithExtension(dir, extension, maxFiles) {
|
|
|
4379
4427
|
for (const entry of entries) {
|
|
4380
4428
|
if (files.length >= maxFiles)
|
|
4381
4429
|
return;
|
|
4382
|
-
const fullPath =
|
|
4430
|
+
const fullPath = join6(currentDir, entry);
|
|
4383
4431
|
let stat;
|
|
4384
4432
|
try {
|
|
4385
4433
|
stat = lstatSync5(fullPath);
|
|
@@ -4405,7 +4453,7 @@ async function aggregateDiagnosticsForDirectory(directory, extension, severity,
|
|
|
4405
4453
|
throw new LspInvalidPathError(`Extension must start with a dot (e.g., ".ts", not "${extension}"). Use ".${extension}" instead.`);
|
|
4406
4454
|
}
|
|
4407
4455
|
const absDir = resolve8(options.workspaceRoot ?? contextCwd(), directory);
|
|
4408
|
-
if (!
|
|
4456
|
+
if (!existsSync12(absDir)) {
|
|
4409
4457
|
throw new LspInvalidPathError(`Directory does not exist: ${absDir}`);
|
|
4410
4458
|
}
|
|
4411
4459
|
const serverResult = options.server === undefined ? findServerForExtension(extension) : { status: "found", server: options.server };
|
|
@@ -4506,7 +4554,7 @@ function inferExtensionFromDirectory(directory) {
|
|
|
4506
4554
|
for (const entry of entries) {
|
|
4507
4555
|
if (scanned >= MAX_SCAN_ENTRIES)
|
|
4508
4556
|
return;
|
|
4509
|
-
const fullPath =
|
|
4557
|
+
const fullPath = join7(dir, entry);
|
|
4510
4558
|
let stat;
|
|
4511
4559
|
try {
|
|
4512
4560
|
stat = lstatSync6(fullPath);
|
|
@@ -4669,7 +4717,7 @@ async function executeLspDiagnostics(params, signal) {
|
|
|
4669
4717
|
const filePath = requireString(params, "filePath");
|
|
4670
4718
|
const severity = severityFilter(params);
|
|
4671
4719
|
try {
|
|
4672
|
-
const absPath =
|
|
4720
|
+
const absPath = resolveReadablePathInsideContext(filePath);
|
|
4673
4721
|
if (isDirectoryPath(absPath)) {
|
|
4674
4722
|
const extension = inferExtensionFromDirectory(absPath);
|
|
4675
4723
|
if (!extension) {
|
|
@@ -4698,7 +4746,7 @@ async function executeLspDiagnostics(params, signal) {
|
|
|
4698
4746
|
};
|
|
4699
4747
|
return text(output2.output, details2);
|
|
4700
4748
|
}
|
|
4701
|
-
const result = await withLspClient(filePath, async (client) => client.diagnostics(
|
|
4749
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.diagnostics(resolvedFilePath, signal), "diagnostics", clientOptions(signal));
|
|
4702
4750
|
if (result.transientError) {
|
|
4703
4751
|
const message = result.transientError.message;
|
|
4704
4752
|
const details2 = {
|
|
@@ -4770,7 +4818,7 @@ async function executeLspGotoDefinition(params, signal) {
|
|
|
4770
4818
|
const line = requireNumber(params, "line");
|
|
4771
4819
|
const character = requireNumber(params, "character");
|
|
4772
4820
|
try {
|
|
4773
|
-
const result = await withLspClient(filePath, async (client) => client.definition(
|
|
4821
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.definition(resolvedFilePath, line, character, signal), "definition", clientOptions(signal));
|
|
4774
4822
|
const locations = !result ? [] : Array.isArray(result) ? result : [result];
|
|
4775
4823
|
const details = { filePath, line, character, locations };
|
|
4776
4824
|
if (locations.length === 0)
|
|
@@ -4795,7 +4843,7 @@ async function executeLspFindReferences(params, signal) {
|
|
|
4795
4843
|
const character = requireNumber(params, "character");
|
|
4796
4844
|
const includeDeclaration = optionalBoolean(params, "includeDeclaration") ?? true;
|
|
4797
4845
|
try {
|
|
4798
|
-
const result = await withLspClient(filePath, async (client) => client.references(
|
|
4846
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.references(resolvedFilePath, line, character, includeDeclaration, signal), "references", clientOptions(signal));
|
|
4799
4847
|
const references = Array.isArray(result) ? result : [];
|
|
4800
4848
|
const total = references.length;
|
|
4801
4849
|
const truncated = total > DEFAULT_MAX_REFERENCES;
|
|
@@ -4835,7 +4883,7 @@ async function executeLspPrepareRename(params, signal) {
|
|
|
4835
4883
|
const line = requireNumber(params, "line");
|
|
4836
4884
|
const character = requireNumber(params, "character");
|
|
4837
4885
|
try {
|
|
4838
|
-
const result = await withLspClient(filePath, async (client) => client.prepareRename(
|
|
4886
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.prepareRename(resolvedFilePath, line, character, signal), "prepareRename", clientOptions(signal));
|
|
4839
4887
|
const details = { filePath, line, character, result };
|
|
4840
4888
|
return text(formatPrepareRenameResult(result), details);
|
|
4841
4889
|
} catch (error) {
|
|
@@ -4856,7 +4904,7 @@ async function executeLspRename(params, signal) {
|
|
|
4856
4904
|
const character = requireNumber(params, "character");
|
|
4857
4905
|
const newName = requireString(params, "newName");
|
|
4858
4906
|
try {
|
|
4859
|
-
const result = await withLspClient(filePath, async (client) => client.rename(
|
|
4907
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.rename(resolvedFilePath, line, character, newName, signal), "rename", clientOptions(signal));
|
|
4860
4908
|
const details = { filePath, line, character, newName, apply: result.apply, edit: result.edit };
|
|
4861
4909
|
return text(formatApplyResult(result.apply), details, !result.apply.success);
|
|
4862
4910
|
} catch (error) {
|
|
@@ -4930,7 +4978,7 @@ async function executeLspSymbols(params, signal) {
|
|
|
4930
4978
|
const symbols2 = await withLspClient(filePath, async (client) => client.workspaceSymbols(query, signal), "workspaceSymbols", clientOptions(signal));
|
|
4931
4979
|
return formatSymbolsResult(filePath, scope, symbols2, limit, query);
|
|
4932
4980
|
}
|
|
4933
|
-
const symbols = await withLspClient(filePath, async (client) => client.documentSymbols(
|
|
4981
|
+
const symbols = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.documentSymbols(resolvedFilePath, signal), "documentSymbols", clientOptions(signal));
|
|
4934
4982
|
return formatSymbolsResult(filePath, scope, symbols, limit);
|
|
4935
4983
|
} catch (error) {
|
|
4936
4984
|
const query = optionalString(params, "query");
|
|
@@ -5251,10 +5299,9 @@ var OMO_LSP_DAEMON_VERSION2 = "OMO_LSP_DAEMON_VERSION";
|
|
|
5251
5299
|
var DAEMON_VERSION_PATTERN2 = /^[A-Za-z0-9][A-Za-z0-9._+-]{0,127}$/;
|
|
5252
5300
|
|
|
5253
5301
|
class InvalidRuntimeOverrideError2 extends Error {
|
|
5254
|
-
code = "invalid_runtime_override";
|
|
5255
|
-
reason;
|
|
5256
5302
|
constructor(reason, message) {
|
|
5257
5303
|
super(message);
|
|
5304
|
+
this.code = "invalid_runtime_override";
|
|
5258
5305
|
this.name = "InvalidRuntimeOverrideError";
|
|
5259
5306
|
this.reason = reason;
|
|
5260
5307
|
}
|
|
@@ -5400,15 +5447,14 @@ function extensionKey(filePath) {
|
|
|
5400
5447
|
}
|
|
5401
5448
|
// ../../../../lsp-core/src/request-context.ts
|
|
5402
5449
|
import { AsyncLocalStorage as AsyncLocalStorage2 } from "node:async_hooks";
|
|
5403
|
-
import { existsSync as
|
|
5404
|
-
import { basename as
|
|
5450
|
+
import { existsSync as existsSync13, realpathSync as realpathSync6, statSync as statSync6 } from "node:fs";
|
|
5451
|
+
import { basename as basename4, delimiter as delimiter4, dirname as dirname2, isAbsolute as isAbsolute6, join as join8, relative as relative5, resolve as resolve9 } from "node:path";
|
|
5405
5452
|
|
|
5406
5453
|
class LspRequestContextParseError2 extends Error {
|
|
5407
|
-
code;
|
|
5408
|
-
name = "LspRequestContextParseError";
|
|
5409
5454
|
constructor(code, message) {
|
|
5410
5455
|
super(message);
|
|
5411
5456
|
this.code = code;
|
|
5457
|
+
this.name = "LspRequestContextParseError";
|
|
5412
5458
|
}
|
|
5413
5459
|
}
|
|
5414
5460
|
var storage2 = new AsyncLocalStorage2;
|
|
@@ -5444,25 +5490,25 @@ function parseLspRequestContext2(value) {
|
|
|
5444
5490
|
}
|
|
5445
5491
|
function canonicalCwd2(cwd) {
|
|
5446
5492
|
const resolved = resolve9(cwd);
|
|
5447
|
-
if (!
|
|
5493
|
+
if (!existsSync13(resolved) || !statSync6(resolved).isDirectory()) {
|
|
5448
5494
|
throw new LspRequestContextParseError2("invalid_cwd", `LSP request cwd must be an existing directory: ${cwd}`);
|
|
5449
5495
|
}
|
|
5450
|
-
return
|
|
5496
|
+
return realpathSync6(resolved);
|
|
5451
5497
|
}
|
|
5452
5498
|
function canonicalizeExistingOrNearestAncestor2(path2) {
|
|
5453
5499
|
let current = resolve9(path2);
|
|
5454
5500
|
const suffix = [];
|
|
5455
5501
|
while (true) {
|
|
5456
5502
|
try {
|
|
5457
|
-
const existing =
|
|
5458
|
-
return suffix.length === 0 ? existing :
|
|
5503
|
+
const existing = realpathSync6(current);
|
|
5504
|
+
return suffix.length === 0 ? existing : join8(existing, ...suffix);
|
|
5459
5505
|
} catch (error) {
|
|
5460
5506
|
if (!isMissingPathError2(error))
|
|
5461
5507
|
throw error;
|
|
5462
5508
|
const parent = dirname2(current);
|
|
5463
5509
|
if (parent === current)
|
|
5464
5510
|
throw error;
|
|
5465
|
-
suffix.unshift(
|
|
5511
|
+
suffix.unshift(basename4(current));
|
|
5466
5512
|
current = parent;
|
|
5467
5513
|
}
|
|
5468
5514
|
}
|
|
@@ -5523,9 +5569,9 @@ function errorCode2(error) {
|
|
|
5523
5569
|
}
|
|
5524
5570
|
|
|
5525
5571
|
// src/daemon-cli-path.ts
|
|
5526
|
-
import { existsSync as
|
|
5572
|
+
import { existsSync as existsSync15, readFileSync as readFileSync6 } from "node:fs";
|
|
5527
5573
|
import { createRequire as createRequire2 } from "node:module";
|
|
5528
|
-
import { dirname as
|
|
5574
|
+
import { dirname as dirname10, join as join10 } from "node:path";
|
|
5529
5575
|
import { fileURLToPath as fileURLToPath4 } from "node:url";
|
|
5530
5576
|
var requireFromHere2 = createRequire2(import.meta.url);
|
|
5531
5577
|
var PACKAGE_LSP_DAEMON_CLI = "@code-yeongyu/lsp-daemon/cli";
|
|
@@ -5547,7 +5593,7 @@ function resolveLspDaemonCli() {
|
|
|
5547
5593
|
if (packageCli !== null)
|
|
5548
5594
|
return resolveConfiguredLspDaemonCli(packageCli);
|
|
5549
5595
|
const bundledCli = fileURLToPath4(new URL("../../lsp-daemon/dist/cli.js", import.meta.url));
|
|
5550
|
-
if (
|
|
5596
|
+
if (existsSync15(bundledCli))
|
|
5551
5597
|
return resolveConfiguredLspDaemonCli(bundledCli);
|
|
5552
5598
|
return resolveConfiguredLspDaemonCli(bundledCli);
|
|
5553
5599
|
}
|
|
@@ -5572,7 +5618,7 @@ function resolveConfiguredLspDaemonCli(cliPath) {
|
|
|
5572
5618
|
}
|
|
5573
5619
|
function readDaemonPackageVersion(cliPath) {
|
|
5574
5620
|
try {
|
|
5575
|
-
const parsed = JSON.parse(readFileSync6(
|
|
5621
|
+
const parsed = JSON.parse(readFileSync6(join10(dirname10(cliPath), "package.json"), "utf8"));
|
|
5576
5622
|
if (isRecord9(parsed) && typeof parsed["version"] === "string" && parsed["version"].length > 0) {
|
|
5577
5623
|
return parsed["version"];
|
|
5578
5624
|
}
|
|
@@ -5589,7 +5635,7 @@ function isRecord9(value) {
|
|
|
5589
5635
|
// src/lsp-session-state.ts
|
|
5590
5636
|
import { mkdirSync as mkdirSync4, readFileSync as readFileSync8, writeFileSync as writeFileSync3 } from "node:fs";
|
|
5591
5637
|
import { homedir } from "node:os";
|
|
5592
|
-
import { dirname as
|
|
5638
|
+
import { dirname as dirname12, join as join11 } from "node:path";
|
|
5593
5639
|
function sessionIdFrom(input) {
|
|
5594
5640
|
return typeof input.session_id === "string" && input.session_id.length > 0 ? input.session_id : undefined;
|
|
5595
5641
|
}
|
|
@@ -5615,8 +5661,8 @@ function isLspDaemonUnreachableDiagnostics(diagnostics) {
|
|
|
5615
5661
|
return diagnostics.includes("LSP daemon unreachable");
|
|
5616
5662
|
}
|
|
5617
5663
|
function sessionStatePath(sessionId) {
|
|
5618
|
-
const root = process.env["PLUGIN_DATA"] ??
|
|
5619
|
-
return
|
|
5664
|
+
const root = process.env["PLUGIN_DATA"] ?? join11(homedir(), ".codex", "codex-lsp");
|
|
5665
|
+
return join11(root, "sessions", `${safePathSegment(sessionId)}.json`);
|
|
5620
5666
|
}
|
|
5621
5667
|
function readSessionState(path2) {
|
|
5622
5668
|
try {
|
|
@@ -5631,7 +5677,7 @@ function readSessionState(path2) {
|
|
|
5631
5677
|
}
|
|
5632
5678
|
}
|
|
5633
5679
|
function writeSessionState(path2, state) {
|
|
5634
|
-
mkdirSync4(
|
|
5680
|
+
mkdirSync4(dirname12(path2), { recursive: true });
|
|
5635
5681
|
writeFileSync3(path2, `${JSON.stringify(state)}
|
|
5636
5682
|
`);
|
|
5637
5683
|
}
|
|
@@ -5775,13 +5821,13 @@ function notConfiguredAvailability(details) {
|
|
|
5775
5821
|
return typeof extension === "string" && extension.length > 0 ? { extension } : undefined;
|
|
5776
5822
|
}
|
|
5777
5823
|
function codexLspRequestContext(env = process.env, cwd = process.cwd()) {
|
|
5778
|
-
const canonicalCwd3 =
|
|
5779
|
-
const codexHome = resolve11(env["CODEX_HOME"]?.trim() ||
|
|
5824
|
+
const canonicalCwd3 = realpathSync8(resolve11(cwd));
|
|
5825
|
+
const codexHome = resolve11(env["CODEX_HOME"]?.trim() || join12(homedir3(), ".codex"));
|
|
5780
5826
|
return parseLspRequestContext2({
|
|
5781
5827
|
cwd: canonicalCwd3,
|
|
5782
|
-
projectConfigPaths: [
|
|
5783
|
-
userConfigPath:
|
|
5784
|
-
installDecisionsPath:
|
|
5828
|
+
projectConfigPaths: [join12(canonicalCwd3, ".codex", "lsp-client.json")],
|
|
5829
|
+
userConfigPath: join12(codexHome, "lsp-client.json"),
|
|
5830
|
+
installDecisionsPath: join12(codexHome, "lsp-install-decisions.json"),
|
|
5785
5831
|
capabilities: { installDecisionTool: true }
|
|
5786
5832
|
});
|
|
5787
5833
|
}
|
|
@@ -5957,7 +6003,7 @@ main().catch((error) => {
|
|
|
5957
6003
|
});
|
|
5958
6004
|
async function runPackageLspMcpCli() {
|
|
5959
6005
|
const cliPath = resolveLspDaemonCliPath();
|
|
5960
|
-
const child = spawn3(execPath2, [cliPath, "mcp"], { stdio: "inherit" });
|
|
6006
|
+
const child = spawn3(execPath2, [cliPath, "mcp"], { stdio: "inherit", windowsHide: true });
|
|
5961
6007
|
await new Promise((resolve10, reject) => {
|
|
5962
6008
|
child.once("error", reject);
|
|
5963
6009
|
child.once("exit", (code, signal) => {
|