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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// ../lsp-core/src/lsp/client-wrapper.ts
|
|
2
|
-
import { existsSync as
|
|
3
|
-
import { dirname as
|
|
2
|
+
import { existsSync as existsSync10, realpathSync as realpathSync5, statSync as statSync3 } from "node:fs";
|
|
3
|
+
import { basename as basename3, dirname as dirname7, join as join5, resolve as resolve7 } from "node:path";
|
|
4
4
|
|
|
5
5
|
// ../lsp-core/src/request-context.ts
|
|
6
6
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
@@ -9,18 +9,17 @@ import { homedir } from "node:os";
|
|
|
9
9
|
import { basename, delimiter, dirname, isAbsolute, join, relative, resolve } from "node:path";
|
|
10
10
|
|
|
11
11
|
class LspRequestContextParseError extends Error {
|
|
12
|
-
code;
|
|
13
|
-
name = "LspRequestContextParseError";
|
|
14
12
|
constructor(code, message) {
|
|
15
13
|
super(message);
|
|
16
14
|
this.code = code;
|
|
15
|
+
this.name = "LspRequestContextParseError";
|
|
17
16
|
}
|
|
18
17
|
}
|
|
19
18
|
|
|
20
19
|
class LspRequestContextUnavailableError extends Error {
|
|
21
|
-
name = "LspRequestContextUnavailableError";
|
|
22
20
|
constructor() {
|
|
23
21
|
super("LSP request context is required. Standalone MCP startup must install one with runWithRequestContext(createStandaloneMcpRequestContext()).");
|
|
22
|
+
this.name = "LspRequestContextUnavailableError";
|
|
24
23
|
}
|
|
25
24
|
}
|
|
26
25
|
var storage = new AsyncLocalStorage;
|
|
@@ -193,22 +192,15 @@ function effectiveExtension(filePath) {
|
|
|
193
192
|
|
|
194
193
|
// ../lsp-core/src/lsp/errors.ts
|
|
195
194
|
class LspConnectionClosedError extends Error {
|
|
196
|
-
serverId;
|
|
197
|
-
root;
|
|
198
|
-
name = "LspConnectionClosedError";
|
|
199
195
|
constructor(serverId, root, message) {
|
|
200
196
|
super(message ?? `LSP connection closed for ${serverId} at ${root}`);
|
|
201
197
|
this.serverId = serverId;
|
|
202
198
|
this.root = root;
|
|
199
|
+
this.name = "LspConnectionClosedError";
|
|
203
200
|
}
|
|
204
201
|
}
|
|
205
202
|
|
|
206
203
|
class LspProcessExitedError extends Error {
|
|
207
|
-
serverId;
|
|
208
|
-
root;
|
|
209
|
-
exitCode;
|
|
210
|
-
stderrTail;
|
|
211
|
-
name = "LspProcessExitedError";
|
|
212
204
|
constructor(serverId, root, exitCode, stderrTail) {
|
|
213
205
|
const stderrSuffix = stderrTail ? `
|
|
214
206
|
stderr tail: ${stderrTail}` : "";
|
|
@@ -217,46 +209,49 @@ stderr tail: ${stderrTail}` : "";
|
|
|
217
209
|
this.root = root;
|
|
218
210
|
this.exitCode = exitCode;
|
|
219
211
|
this.stderrTail = stderrTail;
|
|
212
|
+
this.name = "LspProcessExitedError";
|
|
220
213
|
}
|
|
221
214
|
}
|
|
222
215
|
|
|
223
216
|
class LspRequestTimeoutError extends Error {
|
|
224
|
-
method;
|
|
225
|
-
stderrTail;
|
|
226
|
-
name = "LspRequestTimeoutError";
|
|
227
217
|
constructor(method, stderrTail) {
|
|
228
218
|
const stderrSuffix = stderrTail ? `
|
|
229
219
|
recent stderr: ${stderrTail}` : "";
|
|
230
220
|
super(`LSP request timeout (method: ${method})${stderrSuffix}`);
|
|
231
221
|
this.method = method;
|
|
232
222
|
this.stderrTail = stderrTail;
|
|
223
|
+
this.name = "LspRequestTimeoutError";
|
|
233
224
|
}
|
|
234
225
|
}
|
|
235
226
|
|
|
236
227
|
class LspInvalidPathError extends Error {
|
|
237
|
-
|
|
228
|
+
constructor() {
|
|
229
|
+
super(...arguments);
|
|
230
|
+
this.name = "LspInvalidPathError";
|
|
231
|
+
}
|
|
238
232
|
}
|
|
239
233
|
|
|
240
234
|
class LspServerLookupError extends Error {
|
|
241
|
-
lookup;
|
|
242
|
-
name = "LspServerLookupError";
|
|
243
235
|
constructor(message, lookup) {
|
|
244
236
|
super(message);
|
|
245
237
|
this.lookup = lookup;
|
|
238
|
+
this.name = "LspServerLookupError";
|
|
246
239
|
}
|
|
247
240
|
}
|
|
248
241
|
|
|
249
242
|
class LspServerInitializingError extends Error {
|
|
250
|
-
originalError;
|
|
251
|
-
name = "LspServerInitializingError";
|
|
252
243
|
constructor(originalError) {
|
|
253
244
|
super(`LSP server is still initializing. Please retry in a few seconds. Original error: ${originalError.message}`);
|
|
254
245
|
this.originalError = originalError;
|
|
246
|
+
this.name = "LspServerInitializingError";
|
|
255
247
|
}
|
|
256
248
|
}
|
|
257
249
|
|
|
258
250
|
class LspProcessSpawnError extends Error {
|
|
259
|
-
|
|
251
|
+
constructor() {
|
|
252
|
+
super(...arguments);
|
|
253
|
+
this.name = "LspProcessSpawnError";
|
|
254
|
+
}
|
|
260
255
|
}
|
|
261
256
|
function isLspDeadConnectionError(err) {
|
|
262
257
|
return err instanceof LspConnectionClosedError || err instanceof LspProcessExitedError;
|
|
@@ -301,20 +296,31 @@ var METHOD_NOT_FOUND = -32601;
|
|
|
301
296
|
var INTERNAL_ERROR = -32603;
|
|
302
297
|
|
|
303
298
|
class JsonRpcConnection {
|
|
304
|
-
reader;
|
|
305
|
-
writer;
|
|
306
|
-
pendingRequests = new Map;
|
|
307
|
-
notificationHandlers = new Map;
|
|
308
|
-
requestHandlers = new Map;
|
|
309
|
-
closeHandlers = [];
|
|
310
|
-
errorHandlers = [];
|
|
311
|
-
inputBuffer = Buffer.alloc(0);
|
|
312
|
-
nextRequestId = 1;
|
|
313
|
-
listening = false;
|
|
314
|
-
disposed = false;
|
|
315
299
|
constructor(reader, writer) {
|
|
316
300
|
this.reader = reader;
|
|
317
301
|
this.writer = writer;
|
|
302
|
+
this.pendingRequests = new Map;
|
|
303
|
+
this.notificationHandlers = new Map;
|
|
304
|
+
this.requestHandlers = new Map;
|
|
305
|
+
this.closeHandlers = [];
|
|
306
|
+
this.errorHandlers = [];
|
|
307
|
+
this.inputBuffer = Buffer.alloc(0);
|
|
308
|
+
this.nextRequestId = 1;
|
|
309
|
+
this.listening = false;
|
|
310
|
+
this.disposed = false;
|
|
311
|
+
this.handleData = (chunk) => {
|
|
312
|
+
const chunkBuffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, "utf8");
|
|
313
|
+
this.inputBuffer = Buffer.concat([this.inputBuffer, chunkBuffer]);
|
|
314
|
+
this.drainInputBuffer();
|
|
315
|
+
};
|
|
316
|
+
this.handleClose = () => {
|
|
317
|
+
for (const handler of this.closeHandlers) {
|
|
318
|
+
handler();
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
this.handleStreamError = (error) => {
|
|
322
|
+
this.emitError(error);
|
|
323
|
+
};
|
|
318
324
|
}
|
|
319
325
|
listen() {
|
|
320
326
|
if (this.listening)
|
|
@@ -435,19 +441,6 @@ class JsonRpcConnection {
|
|
|
435
441
|
this.notificationHandlers.clear();
|
|
436
442
|
this.requestHandlers.clear();
|
|
437
443
|
}
|
|
438
|
-
handleData = (chunk) => {
|
|
439
|
-
const chunkBuffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, "utf8");
|
|
440
|
-
this.inputBuffer = Buffer.concat([this.inputBuffer, chunkBuffer]);
|
|
441
|
-
this.drainInputBuffer();
|
|
442
|
-
};
|
|
443
|
-
handleClose = () => {
|
|
444
|
-
for (const handler of this.closeHandlers) {
|
|
445
|
-
handler();
|
|
446
|
-
}
|
|
447
|
-
};
|
|
448
|
-
handleStreamError = (error) => {
|
|
449
|
-
this.emitError(error);
|
|
450
|
-
};
|
|
451
444
|
drainInputBuffer() {
|
|
452
445
|
while (true) {
|
|
453
446
|
const headerEnd = this.inputBuffer.indexOf(HEADER_SEPARATOR);
|
|
@@ -795,31 +788,25 @@ function isPosition(value) {
|
|
|
795
788
|
|
|
796
789
|
// ../lsp-core/src/lsp/transport.ts
|
|
797
790
|
class LspClientNotStartedError extends Error {
|
|
798
|
-
serverId;
|
|
799
|
-
root;
|
|
800
|
-
name = "LspClientNotStartedError";
|
|
801
791
|
constructor(serverId, root) {
|
|
802
792
|
super("LSP client not started");
|
|
803
793
|
this.serverId = serverId;
|
|
804
794
|
this.root = root;
|
|
795
|
+
this.name = "LspClientNotStartedError";
|
|
805
796
|
}
|
|
806
797
|
}
|
|
807
798
|
|
|
808
799
|
class LspClientTransport {
|
|
809
|
-
root;
|
|
810
|
-
server;
|
|
811
|
-
proc = null;
|
|
812
|
-
connection = null;
|
|
813
|
-
stderrBuffer = [];
|
|
814
|
-
processExited = false;
|
|
815
|
-
diagnosticsStore = new Map;
|
|
816
|
-
requestTimeoutMs;
|
|
817
|
-
initializeTimeoutMs;
|
|
818
|
-
workspaceApplyEditHandler = null;
|
|
819
|
-
diagnosticPullSupported = false;
|
|
820
800
|
constructor(root, server, timeouts = {}) {
|
|
821
801
|
this.root = root;
|
|
822
802
|
this.server = server;
|
|
803
|
+
this.proc = null;
|
|
804
|
+
this.connection = null;
|
|
805
|
+
this.stderrBuffer = [];
|
|
806
|
+
this.processExited = false;
|
|
807
|
+
this.diagnosticsStore = new Map;
|
|
808
|
+
this.workspaceApplyEditHandler = null;
|
|
809
|
+
this.diagnosticPullSupported = false;
|
|
823
810
|
this.requestTimeoutMs = timeouts.requestTimeoutMs ?? REQUEST_TIMEOUT_MS;
|
|
824
811
|
this.initializeTimeoutMs = timeouts.initializeTimeoutMs ?? INIT_TIMEOUT_MS;
|
|
825
812
|
}
|
|
@@ -1316,16 +1303,12 @@ function movedPath(candidate, oldPath, newPath) {
|
|
|
1316
1303
|
}
|
|
1317
1304
|
|
|
1318
1305
|
class WorkspaceDocumentState {
|
|
1319
|
-
sendNotification;
|
|
1320
|
-
clearDiagnostics;
|
|
1321
|
-
openDocuments = new Map;
|
|
1322
|
-
openByUri = new Map;
|
|
1323
|
-
openPromises = new Map;
|
|
1324
|
-
now;
|
|
1325
|
-
versionlessPublishQuiescenceMs;
|
|
1326
1306
|
constructor(sendNotification, clearDiagnostics, options = {}) {
|
|
1327
1307
|
this.sendNotification = sendNotification;
|
|
1328
1308
|
this.clearDiagnostics = clearDiagnostics;
|
|
1309
|
+
this.openDocuments = new Map;
|
|
1310
|
+
this.openByUri = new Map;
|
|
1311
|
+
this.openPromises = new Map;
|
|
1329
1312
|
this.now = options.now ?? (() => Date.now());
|
|
1330
1313
|
this.versionlessPublishQuiescenceMs = options.versionlessPublishQuiescenceMs ?? DEFAULT_VERSIONLESS_PUBLISH_QUIESCENCE_MS;
|
|
1331
1314
|
}
|
|
@@ -1589,13 +1572,11 @@ import { dirname as dirname2, isAbsolute as isAbsolute2, relative as relative3,
|
|
|
1589
1572
|
import { fileURLToPath } from "node:url";
|
|
1590
1573
|
|
|
1591
1574
|
class WorkspaceEditPathError extends Error {
|
|
1592
|
-
path;
|
|
1593
|
-
detail;
|
|
1594
|
-
name = "WorkspaceEditPathError";
|
|
1595
1575
|
constructor(path, detail) {
|
|
1596
1576
|
super(`${detail}: ${path}`);
|
|
1597
1577
|
this.path = path;
|
|
1598
1578
|
this.detail = detail;
|
|
1579
|
+
this.name = "WorkspaceEditPathError";
|
|
1599
1580
|
}
|
|
1600
1581
|
}
|
|
1601
1582
|
function isPathInsideWorkspace(filePath, workspaceRoot) {
|
|
@@ -1887,13 +1868,11 @@ function canonicalFingerprint(operations) {
|
|
|
1887
1868
|
|
|
1888
1869
|
// ../lsp-core/src/lsp/workspace-edit-types.ts
|
|
1889
1870
|
class WorkspaceEditValidationError extends Error {
|
|
1890
|
-
changeIndex;
|
|
1891
|
-
detail;
|
|
1892
|
-
name = "WorkspaceEditValidationError";
|
|
1893
1871
|
constructor(changeIndex, detail) {
|
|
1894
1872
|
super(`change ${changeIndex}: ${detail}`);
|
|
1895
1873
|
this.changeIndex = changeIndex;
|
|
1896
1874
|
this.detail = detail;
|
|
1875
|
+
this.name = "WorkspaceEditValidationError";
|
|
1897
1876
|
}
|
|
1898
1877
|
}
|
|
1899
1878
|
|
|
@@ -2391,10 +2370,9 @@ function simulateDelete(operation, virtual) {
|
|
|
2391
2370
|
import { existsSync as existsSync5, lstatSync as lstatSync3, readdirSync as readdirSync2 } from "node:fs";
|
|
2392
2371
|
import { dirname as dirname4, resolve as resolve5 } from "node:path";
|
|
2393
2372
|
class WorkspaceSnapshotBuilder {
|
|
2394
|
-
workspaceRoot;
|
|
2395
|
-
snapshots = new Map;
|
|
2396
2373
|
constructor(workspaceRoot) {
|
|
2397
2374
|
this.workspaceRoot = workspaceRoot;
|
|
2375
|
+
this.snapshots = new Map;
|
|
2398
2376
|
}
|
|
2399
2377
|
build(operations) {
|
|
2400
2378
|
this.add(this.workspaceRoot, false);
|
|
@@ -2438,8 +2416,10 @@ function snapshotOperations(operations, workspaceRoot) {
|
|
|
2438
2416
|
|
|
2439
2417
|
// ../lsp-core/src/lsp/workspace-edit-plan.ts
|
|
2440
2418
|
class PlanPathIndex {
|
|
2441
|
-
|
|
2442
|
-
|
|
2419
|
+
constructor() {
|
|
2420
|
+
this.firstChangeByPath = new Map;
|
|
2421
|
+
this.reportedPathByCanonical = new Map;
|
|
2422
|
+
}
|
|
2443
2423
|
build(operations) {
|
|
2444
2424
|
for (const operation of operations) {
|
|
2445
2425
|
switch (operation.kind) {
|
|
@@ -2528,14 +2508,11 @@ function isRecord4(value) {
|
|
|
2528
2508
|
}
|
|
2529
2509
|
|
|
2530
2510
|
class WorkspaceMutationController {
|
|
2531
|
-
workspaceRoot;
|
|
2532
|
-
documents;
|
|
2533
|
-
activeLease = null;
|
|
2534
|
-
nextLeaseId = 1;
|
|
2535
|
-
io;
|
|
2536
2511
|
constructor(workspaceRoot, documents) {
|
|
2537
2512
|
this.workspaceRoot = workspaceRoot;
|
|
2538
2513
|
this.documents = documents;
|
|
2514
|
+
this.activeLease = null;
|
|
2515
|
+
this.nextLeaseId = 1;
|
|
2539
2516
|
}
|
|
2540
2517
|
setIo(io) {
|
|
2541
2518
|
this.io = io;
|
|
@@ -2648,12 +2625,9 @@ var DIAGNOSTICS_FRESHNESS_TIMEOUT_MS = 3000;
|
|
|
2648
2625
|
var VERSIONLESS_PUBLISH_QUIESCENCE_MS = 250;
|
|
2649
2626
|
|
|
2650
2627
|
class LspClient extends LspClientConnection {
|
|
2651
|
-
diagnosticPullErrors = [];
|
|
2652
|
-
documents;
|
|
2653
|
-
workspaceMutations;
|
|
2654
|
-
diagnosticsFreshnessTimeoutMs;
|
|
2655
2628
|
constructor(root, server, options = {}) {
|
|
2656
2629
|
super(root, server, options);
|
|
2630
|
+
this.diagnosticPullErrors = [];
|
|
2657
2631
|
this.diagnosticsFreshnessTimeoutMs = options.diagnosticsFreshnessTimeoutMs ?? DIAGNOSTICS_FRESHNESS_TIMEOUT_MS;
|
|
2658
2632
|
this.documents = new WorkspaceDocumentState((method, params) => this.sendNotification(method, params), (uri) => this.diagnosticsStore.delete(uri), {
|
|
2659
2633
|
versionlessPublishQuiescenceMs: options.versionlessPublishQuiescenceMs ?? VERSIONLESS_PUBLISH_QUIESCENCE_MS
|
|
@@ -2953,16 +2927,11 @@ function awaitWithSignal(promise, signal) {
|
|
|
2953
2927
|
}
|
|
2954
2928
|
|
|
2955
2929
|
class LspManager {
|
|
2956
|
-
clients = new Map;
|
|
2957
|
-
reaperHandle = null;
|
|
2958
|
-
signalDisposer = null;
|
|
2959
|
-
disposed = false;
|
|
2960
|
-
idleTimeoutMs;
|
|
2961
|
-
initTimeoutMs;
|
|
2962
|
-
reaperIntervalMs;
|
|
2963
|
-
clientFactory;
|
|
2964
|
-
now;
|
|
2965
2930
|
constructor(options = {}) {
|
|
2931
|
+
this.clients = new Map;
|
|
2932
|
+
this.reaperHandle = null;
|
|
2933
|
+
this.signalDisposer = null;
|
|
2934
|
+
this.disposed = false;
|
|
2966
2935
|
this.idleTimeoutMs = options.idleTimeoutMs ?? IDLE_TIMEOUT_MS;
|
|
2967
2936
|
this.initTimeoutMs = options.initTimeoutMs ?? INIT_TIMEOUT_MS;
|
|
2968
2937
|
this.reaperIntervalMs = options.reaperIntervalMs ?? REAPER_INTERVAL_MS;
|
|
@@ -3194,15 +3163,52 @@ async function disposeDefaultLspManager() {
|
|
|
3194
3163
|
}
|
|
3195
3164
|
}
|
|
3196
3165
|
|
|
3166
|
+
// ../lsp-core/src/lsp/outside-context-workspace.ts
|
|
3167
|
+
import { existsSync as existsSync6, realpathSync as realpathSync4 } from "node:fs";
|
|
3168
|
+
import { dirname as dirname5, join as join3 } from "node:path";
|
|
3169
|
+
|
|
3170
|
+
// ../lsp-core/src/lsp/workspace-markers.ts
|
|
3171
|
+
var WORKSPACE_MARKERS = [".git", "package.json", "pyproject.toml", "Cargo.toml", "go.mod", "pom.xml", "build.gradle"];
|
|
3172
|
+
|
|
3173
|
+
// ../lsp-core/src/lsp/outside-context-workspace.ts
|
|
3174
|
+
function findWorkspaceRootOutsideContext(directory) {
|
|
3175
|
+
const marked = nearestMarkedAncestor(directory);
|
|
3176
|
+
if (marked !== undefined)
|
|
3177
|
+
return marked;
|
|
3178
|
+
return realpathSync4(nearestExistingAncestor(directory));
|
|
3179
|
+
}
|
|
3180
|
+
function nearestMarkedAncestor(directory) {
|
|
3181
|
+
let current = directory;
|
|
3182
|
+
for (;; ) {
|
|
3183
|
+
if (existsSync6(current) && WORKSPACE_MARKERS.some((marker) => existsSync6(join3(current, marker)))) {
|
|
3184
|
+
return realpathSync4(current);
|
|
3185
|
+
}
|
|
3186
|
+
const parent = dirname5(current);
|
|
3187
|
+
if (parent === current)
|
|
3188
|
+
return;
|
|
3189
|
+
current = parent;
|
|
3190
|
+
}
|
|
3191
|
+
}
|
|
3192
|
+
function nearestExistingAncestor(directory) {
|
|
3193
|
+
let current = directory;
|
|
3194
|
+
while (!existsSync6(current)) {
|
|
3195
|
+
const parent = dirname5(current);
|
|
3196
|
+
if (parent === current)
|
|
3197
|
+
return current;
|
|
3198
|
+
current = parent;
|
|
3199
|
+
}
|
|
3200
|
+
return current;
|
|
3201
|
+
}
|
|
3202
|
+
|
|
3197
3203
|
// ../lsp-core/src/lsp/server-install-state.ts
|
|
3198
|
-
import { existsSync as
|
|
3199
|
-
import { dirname as
|
|
3204
|
+
import { existsSync as existsSync7, mkdirSync, readFileSync as readFileSync3, renameSync as renameSync2, writeFileSync as writeFileSync2 } from "node:fs";
|
|
3205
|
+
import { dirname as dirname6 } from "node:path";
|
|
3200
3206
|
function getInstallDecisionsPath() {
|
|
3201
3207
|
return lspRequestContext().installDecisionsPath;
|
|
3202
3208
|
}
|
|
3203
3209
|
function loadInstallDecisions() {
|
|
3204
3210
|
const path = getInstallDecisionsPath();
|
|
3205
|
-
if (!
|
|
3211
|
+
if (!existsSync7(path))
|
|
3206
3212
|
return {};
|
|
3207
3213
|
try {
|
|
3208
3214
|
const parsed = JSON.parse(readFileSync3(path, "utf8"));
|
|
@@ -3224,7 +3230,7 @@ function isInstallDecision(value) {
|
|
|
3224
3230
|
}
|
|
3225
3231
|
function writeInstallDecisions(decisions) {
|
|
3226
3232
|
const path = getInstallDecisionsPath();
|
|
3227
|
-
mkdirSync(
|
|
3233
|
+
mkdirSync(dirname6(path), { recursive: true });
|
|
3228
3234
|
const tmpPath = `${path}.tmp`;
|
|
3229
3235
|
writeFileSync2(tmpPath, `${JSON.stringify(decisions, null, 2)}
|
|
3230
3236
|
`, "utf8");
|
|
@@ -3243,7 +3249,7 @@ function isRecord5(value) {
|
|
|
3243
3249
|
}
|
|
3244
3250
|
|
|
3245
3251
|
// ../lsp-core/src/lsp/config-loader.ts
|
|
3246
|
-
import { existsSync as
|
|
3252
|
+
import { existsSync as existsSync8, readFileSync as readFileSync4 } from "node:fs";
|
|
3247
3253
|
|
|
3248
3254
|
// ../lsp-core/src/lsp/server-definitions.ts
|
|
3249
3255
|
var LSP_INSTALL_HINTS = {
|
|
@@ -3400,7 +3406,7 @@ function getUserConfigPath() {
|
|
|
3400
3406
|
return lspRequestContext().userConfigPath;
|
|
3401
3407
|
}
|
|
3402
3408
|
function loadJsonFile(path) {
|
|
3403
|
-
if (!
|
|
3409
|
+
if (!existsSync8(path))
|
|
3404
3410
|
return null;
|
|
3405
3411
|
try {
|
|
3406
3412
|
const parsed = JSON.parse(readFileSync4(path, "utf-8"));
|
|
@@ -3588,8 +3594,8 @@ function getDisabledServerIds() {
|
|
|
3588
3594
|
}
|
|
3589
3595
|
|
|
3590
3596
|
// ../lsp-core/src/lsp/server-installation.ts
|
|
3591
|
-
import { existsSync as
|
|
3592
|
-
import { delimiter as delimiter3, join as
|
|
3597
|
+
import { existsSync as existsSync9 } from "node:fs";
|
|
3598
|
+
import { delimiter as delimiter3, join as join4 } from "node:path";
|
|
3593
3599
|
function isServerInstalled(command, _workingDirectory) {
|
|
3594
3600
|
if (command.length === 0)
|
|
3595
3601
|
return false;
|
|
@@ -3597,7 +3603,7 @@ function isServerInstalled(command, _workingDirectory) {
|
|
|
3597
3603
|
if (!cmd)
|
|
3598
3604
|
return false;
|
|
3599
3605
|
if (cmd.includes("/") || cmd.includes("\\")) {
|
|
3600
|
-
if (
|
|
3606
|
+
if (existsSync9(cmd))
|
|
3601
3607
|
return true;
|
|
3602
3608
|
}
|
|
3603
3609
|
const isWindows = process.platform === "win32";
|
|
@@ -3618,7 +3624,7 @@ function isServerInstalled(command, _workingDirectory) {
|
|
|
3618
3624
|
const paths = pathEnv.split(delimiter3);
|
|
3619
3625
|
for (const p of paths) {
|
|
3620
3626
|
for (const suffix of exts) {
|
|
3621
|
-
if (
|
|
3627
|
+
if (existsSync9(join4(p, cmd + suffix))) {
|
|
3622
3628
|
return true;
|
|
3623
3629
|
}
|
|
3624
3630
|
}
|
|
@@ -3714,7 +3720,6 @@ function getAllServers() {
|
|
|
3714
3720
|
}
|
|
3715
3721
|
|
|
3716
3722
|
// ../lsp-core/src/lsp/client-wrapper.ts
|
|
3717
|
-
var WORKSPACE_MARKERS = [".git", "package.json", "pyproject.toml", "Cargo.toml", "go.mod", "pom.xml", "build.gradle"];
|
|
3718
3723
|
function isDirectoryPath(filePath) {
|
|
3719
3724
|
try {
|
|
3720
3725
|
return statSync3(filePath).isDirectory();
|
|
@@ -3723,32 +3728,85 @@ function isDirectoryPath(filePath) {
|
|
|
3723
3728
|
}
|
|
3724
3729
|
}
|
|
3725
3730
|
function findWorkspaceRoot(filePath) {
|
|
3726
|
-
const
|
|
3731
|
+
const cwd = contextCwd();
|
|
3732
|
+
const abs = resolveReadablePathInsideContext(filePath);
|
|
3727
3733
|
let dir = abs;
|
|
3728
3734
|
if (!isDirectoryPath(dir)) {
|
|
3729
|
-
dir =
|
|
3730
|
-
}
|
|
3731
|
-
|
|
3732
|
-
|
|
3733
|
-
|
|
3734
|
-
|
|
3735
|
-
|
|
3735
|
+
dir = dirname7(dir);
|
|
3736
|
+
}
|
|
3737
|
+
if (!isPathInside(cwd, abs))
|
|
3738
|
+
return findWorkspaceRootOutsideContext(dir);
|
|
3739
|
+
const fallbackRoot = nearestExistingDirectoryInsideContext(dir, cwd) ?? cwd;
|
|
3740
|
+
while (isPathInside(cwd, dir)) {
|
|
3741
|
+
const canonicalDir = existingDirectoryInsideContext(dir, cwd);
|
|
3742
|
+
if (canonicalDir !== undefined) {
|
|
3743
|
+
for (const marker of WORKSPACE_MARKERS) {
|
|
3744
|
+
if (existsSync10(join5(dir, marker))) {
|
|
3745
|
+
return canonicalDir;
|
|
3746
|
+
}
|
|
3736
3747
|
}
|
|
3737
3748
|
}
|
|
3738
|
-
|
|
3739
|
-
|
|
3749
|
+
if (dir === cwd)
|
|
3750
|
+
break;
|
|
3751
|
+
dir = dirname7(dir);
|
|
3740
3752
|
}
|
|
3741
|
-
return
|
|
3753
|
+
return fallbackRoot;
|
|
3742
3754
|
}
|
|
3743
|
-
function
|
|
3755
|
+
function resolveReadablePathInsideContext(filePath) {
|
|
3744
3756
|
const cwd = contextCwd();
|
|
3745
3757
|
const abs = resolve7(cwd, filePath);
|
|
3758
|
+
if (isPathInside(cwd, abs))
|
|
3759
|
+
return abs;
|
|
3760
|
+
const rebased = rebaseThroughCanonicalAncestor(abs, cwd);
|
|
3761
|
+
if (rebased !== undefined)
|
|
3762
|
+
return rebased;
|
|
3763
|
+
return canonicalizeExistingOrNearestAncestor(abs);
|
|
3764
|
+
}
|
|
3765
|
+
function resolvePathInsideContext(filePath) {
|
|
3766
|
+
const cwd = contextCwd();
|
|
3767
|
+
const abs = resolveReadablePathInsideContext(filePath);
|
|
3746
3768
|
const canonical = canonicalizeExistingOrNearestAncestor(abs);
|
|
3747
3769
|
if (!isPathInside(cwd, canonical)) {
|
|
3748
3770
|
throw new LspInvalidPathError(`LSP file path must be inside request cwd: ${filePath}`);
|
|
3749
3771
|
}
|
|
3750
3772
|
return canonical;
|
|
3751
3773
|
}
|
|
3774
|
+
function rebaseThroughCanonicalAncestor(path, cwd) {
|
|
3775
|
+
let current = path;
|
|
3776
|
+
const suffix = [];
|
|
3777
|
+
while (true) {
|
|
3778
|
+
if (existsSync10(current)) {
|
|
3779
|
+
const canonical = realpathSync5(current);
|
|
3780
|
+
if (isPathInside(cwd, canonical))
|
|
3781
|
+
return suffix.length === 0 ? canonical : join5(canonical, ...suffix);
|
|
3782
|
+
}
|
|
3783
|
+
const parent = dirname7(current);
|
|
3784
|
+
if (parent === current)
|
|
3785
|
+
return;
|
|
3786
|
+
suffix.unshift(basename3(current));
|
|
3787
|
+
current = parent;
|
|
3788
|
+
}
|
|
3789
|
+
}
|
|
3790
|
+
function existingDirectoryInsideContext(directory, cwd) {
|
|
3791
|
+
if (!existsSync10(directory))
|
|
3792
|
+
return;
|
|
3793
|
+
const canonical = realpathSync5(directory);
|
|
3794
|
+
if (!statSync3(canonical).isDirectory())
|
|
3795
|
+
return;
|
|
3796
|
+
return isPathInside(cwd, canonical) ? canonical : undefined;
|
|
3797
|
+
}
|
|
3798
|
+
function nearestExistingDirectoryInsideContext(directory, cwd) {
|
|
3799
|
+
let current = directory;
|
|
3800
|
+
while (isPathInside(cwd, current)) {
|
|
3801
|
+
const canonical = existingDirectoryInsideContext(current, cwd);
|
|
3802
|
+
if (canonical !== undefined)
|
|
3803
|
+
return canonical;
|
|
3804
|
+
if (current === cwd)
|
|
3805
|
+
return;
|
|
3806
|
+
current = dirname7(current);
|
|
3807
|
+
}
|
|
3808
|
+
return;
|
|
3809
|
+
}
|
|
3752
3810
|
function formatServerLookupError(result) {
|
|
3753
3811
|
if (result.status === "not_installed") {
|
|
3754
3812
|
return formatNotInstalled(result);
|
|
@@ -3819,7 +3877,7 @@ function formatNotInstalled(result) {
|
|
|
3819
3877
|
].join(`
|
|
3820
3878
|
`);
|
|
3821
3879
|
}
|
|
3822
|
-
var
|
|
3880
|
+
var READ_ONLY_TOOLS = new Set([
|
|
3823
3881
|
"diagnostics",
|
|
3824
3882
|
"definition",
|
|
3825
3883
|
"references",
|
|
@@ -3828,7 +3886,7 @@ var READ_ONLY_RETRY_TOOLS = new Set([
|
|
|
3828
3886
|
"prepareRename"
|
|
3829
3887
|
]);
|
|
3830
3888
|
async function withLspClient(filePath, fn, toolName, options = {}) {
|
|
3831
|
-
const absPath = resolvePathInsideContext(filePath);
|
|
3889
|
+
const absPath = READ_ONLY_TOOLS.has(toolName) ? resolveReadablePathInsideContext(filePath) : resolvePathInsideContext(filePath);
|
|
3832
3890
|
if (isDirectoryPath(absPath)) {
|
|
3833
3891
|
throw new LspInvalidPathError("Directory paths are not supported by this LSP tool. " + "Use lsp.diagnostics with a directory path for directory diagnostics.");
|
|
3834
3892
|
}
|
|
@@ -3843,9 +3901,9 @@ async function withLspClient(filePath, fn, toolName, options = {}) {
|
|
|
3843
3901
|
const acquireAndCall = async (allowRetry) => {
|
|
3844
3902
|
const client = await manager.getClient(root, server, options.signal);
|
|
3845
3903
|
try {
|
|
3846
|
-
return await fn(client, root);
|
|
3904
|
+
return await fn(client, root, absPath);
|
|
3847
3905
|
} catch (err) {
|
|
3848
|
-
if (allowRetry &&
|
|
3906
|
+
if (allowRetry && READ_ONLY_TOOLS.has(toolName) && isLspDeadConnectionError(err)) {
|
|
3849
3907
|
manager.invalidateClient(root, server.id, client);
|
|
3850
3908
|
return acquireAndCall(false);
|
|
3851
3909
|
}
|
|
@@ -3863,8 +3921,8 @@ async function withLspClient(filePath, fn, toolName, options = {}) {
|
|
|
3863
3921
|
}
|
|
3864
3922
|
|
|
3865
3923
|
// ../lsp-core/src/lsp/directory-diagnostics.ts
|
|
3866
|
-
import { existsSync as
|
|
3867
|
-
import { join as
|
|
3924
|
+
import { existsSync as existsSync11, lstatSync as lstatSync4, readdirSync as readdirSync3 } from "node:fs";
|
|
3925
|
+
import { join as join6, resolve as resolve8 } from "node:path";
|
|
3868
3926
|
|
|
3869
3927
|
// ../lsp-core/src/lsp/formatters.ts
|
|
3870
3928
|
import { fileURLToPath as fileURLToPath2 } from "node:url";
|
|
@@ -3994,7 +4052,7 @@ function collectFilesWithExtension(dir, extension, maxFiles) {
|
|
|
3994
4052
|
for (const entry of entries) {
|
|
3995
4053
|
if (files.length >= maxFiles)
|
|
3996
4054
|
return;
|
|
3997
|
-
const fullPath =
|
|
4055
|
+
const fullPath = join6(currentDir, entry);
|
|
3998
4056
|
let stat;
|
|
3999
4057
|
try {
|
|
4000
4058
|
stat = lstatSync4(fullPath);
|
|
@@ -4020,7 +4078,7 @@ async function aggregateDiagnosticsForDirectory(directory, extension, severity,
|
|
|
4020
4078
|
throw new LspInvalidPathError(`Extension must start with a dot (e.g., ".ts", not "${extension}"). Use ".${extension}" instead.`);
|
|
4021
4079
|
}
|
|
4022
4080
|
const absDir = resolve8(options.workspaceRoot ?? contextCwd(), directory);
|
|
4023
|
-
if (!
|
|
4081
|
+
if (!existsSync11(absDir)) {
|
|
4024
4082
|
throw new LspInvalidPathError(`Directory does not exist: ${absDir}`);
|
|
4025
4083
|
}
|
|
4026
4084
|
const serverResult = options.server === undefined ? findServerForExtension(extension) : { status: "found", server: options.server };
|
|
@@ -4107,7 +4165,7 @@ async function aggregateDiagnosticsForDirectory(directory, extension, severity,
|
|
|
4107
4165
|
|
|
4108
4166
|
// ../lsp-core/src/lsp/infer-extension.ts
|
|
4109
4167
|
import { lstatSync as lstatSync5, readdirSync as readdirSync4 } from "node:fs";
|
|
4110
|
-
import { join as
|
|
4168
|
+
import { join as join7 } from "node:path";
|
|
4111
4169
|
var SKIP_DIRECTORIES2 = new Set(["node_modules", ".git", "dist", "build", ".next", "out"]);
|
|
4112
4170
|
var MAX_SCAN_ENTRIES = 500;
|
|
4113
4171
|
function inferExtensionFromDirectory(directory) {
|
|
@@ -4125,7 +4183,7 @@ function inferExtensionFromDirectory(directory) {
|
|
|
4125
4183
|
for (const entry of entries) {
|
|
4126
4184
|
if (scanned >= MAX_SCAN_ENTRIES)
|
|
4127
4185
|
return;
|
|
4128
|
-
const fullPath =
|
|
4186
|
+
const fullPath = join7(dir, entry);
|
|
4129
4187
|
let stat;
|
|
4130
4188
|
try {
|
|
4131
4189
|
stat = lstatSync5(fullPath);
|
|
@@ -4300,7 +4358,7 @@ async function executeLspDiagnostics(params, signal) {
|
|
|
4300
4358
|
const filePath = requireString(params, "filePath");
|
|
4301
4359
|
const severity = severityFilter(params);
|
|
4302
4360
|
try {
|
|
4303
|
-
const absPath =
|
|
4361
|
+
const absPath = resolveReadablePathInsideContext(filePath);
|
|
4304
4362
|
if (isDirectoryPath(absPath)) {
|
|
4305
4363
|
const extension = inferExtensionFromDirectory(absPath);
|
|
4306
4364
|
if (!extension) {
|
|
@@ -4329,7 +4387,7 @@ async function executeLspDiagnostics(params, signal) {
|
|
|
4329
4387
|
};
|
|
4330
4388
|
return text(output2.output, details2);
|
|
4331
4389
|
}
|
|
4332
|
-
const result = await withLspClient(filePath, async (client) => client.diagnostics(
|
|
4390
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.diagnostics(resolvedFilePath, signal), "diagnostics", clientOptions(signal));
|
|
4333
4391
|
if (result.transientError) {
|
|
4334
4392
|
const message = result.transientError.message;
|
|
4335
4393
|
const details2 = {
|
|
@@ -4404,7 +4462,7 @@ async function executeLspGotoDefinition(params, signal) {
|
|
|
4404
4462
|
const line = requireNumber(params, "line");
|
|
4405
4463
|
const character = requireNumber(params, "character");
|
|
4406
4464
|
try {
|
|
4407
|
-
const result = await withLspClient(filePath, async (client) => client.definition(
|
|
4465
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.definition(resolvedFilePath, line, character, signal), "definition", clientOptions(signal));
|
|
4408
4466
|
const locations = !result ? [] : Array.isArray(result) ? result : [result];
|
|
4409
4467
|
const details = { filePath, line, character, locations };
|
|
4410
4468
|
if (locations.length === 0)
|
|
@@ -4429,7 +4487,7 @@ async function executeLspFindReferences(params, signal) {
|
|
|
4429
4487
|
const character = requireNumber(params, "character");
|
|
4430
4488
|
const includeDeclaration = optionalBoolean(params, "includeDeclaration") ?? true;
|
|
4431
4489
|
try {
|
|
4432
|
-
const result = await withLspClient(filePath, async (client) => client.references(
|
|
4490
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.references(resolvedFilePath, line, character, includeDeclaration, signal), "references", clientOptions(signal));
|
|
4433
4491
|
const references = Array.isArray(result) ? result : [];
|
|
4434
4492
|
const total = references.length;
|
|
4435
4493
|
const truncated = total > DEFAULT_MAX_REFERENCES;
|
|
@@ -4471,7 +4529,7 @@ async function executeLspPrepareRename(params, signal) {
|
|
|
4471
4529
|
const line = requireNumber(params, "line");
|
|
4472
4530
|
const character = requireNumber(params, "character");
|
|
4473
4531
|
try {
|
|
4474
|
-
const result = await withLspClient(filePath, async (client) => client.prepareRename(
|
|
4532
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.prepareRename(resolvedFilePath, line, character, signal), "prepareRename", clientOptions(signal));
|
|
4475
4533
|
const details = { filePath, line, character, result };
|
|
4476
4534
|
return text(formatPrepareRenameResult(result), details);
|
|
4477
4535
|
} catch (error) {
|
|
@@ -4492,7 +4550,7 @@ async function executeLspRename(params, signal) {
|
|
|
4492
4550
|
const character = requireNumber(params, "character");
|
|
4493
4551
|
const newName = requireString(params, "newName");
|
|
4494
4552
|
try {
|
|
4495
|
-
const result = await withLspClient(filePath, async (client) => client.rename(
|
|
4553
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.rename(resolvedFilePath, line, character, newName, signal), "rename", clientOptions(signal));
|
|
4496
4554
|
const details = { filePath, line, character, newName, apply: result.apply, edit: result.edit };
|
|
4497
4555
|
return text(formatApplyResult(result.apply), details, !result.apply.success);
|
|
4498
4556
|
} catch (error) {
|
|
@@ -4572,7 +4630,7 @@ async function executeLspSymbols(params, signal) {
|
|
|
4572
4630
|
const symbols2 = await withLspClient(filePath, async (client) => client.workspaceSymbols(query, signal), "workspaceSymbols", clientOptions(signal));
|
|
4573
4631
|
return formatSymbolsResult(filePath, scope, symbols2, limit, query);
|
|
4574
4632
|
}
|
|
4575
|
-
const symbols = await withLspClient(filePath, async (client) => client.documentSymbols(
|
|
4633
|
+
const symbols = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.documentSymbols(resolvedFilePath, signal), "documentSymbols", clientOptions(signal));
|
|
4576
4634
|
return formatSymbolsResult(filePath, scope, symbols, limit);
|
|
4577
4635
|
} catch (error) {
|
|
4578
4636
|
const query = optionalString(params, "query");
|
|
@@ -4741,16 +4799,16 @@ function coerceToolArguments(value) {
|
|
|
4741
4799
|
return isRecord7(value) ? value : {};
|
|
4742
4800
|
}
|
|
4743
4801
|
export {
|
|
4744
|
-
|
|
4745
|
-
executeLspTool,
|
|
4746
|
-
executeLspSymbols,
|
|
4747
|
-
executeLspStatus,
|
|
4748
|
-
executeLspRename,
|
|
4749
|
-
executeLspPrepareRename,
|
|
4750
|
-
executeLspInstallDecision,
|
|
4751
|
-
executeLspGotoDefinition,
|
|
4752
|
-
executeLspFindReferences,
|
|
4753
|
-
executeLspDiagnostics,
|
|
4802
|
+
LSP_MCP_TOOLS,
|
|
4754
4803
|
coerceToolArguments,
|
|
4755
|
-
|
|
4804
|
+
executeLspDiagnostics,
|
|
4805
|
+
executeLspFindReferences,
|
|
4806
|
+
executeLspGotoDefinition,
|
|
4807
|
+
executeLspInstallDecision,
|
|
4808
|
+
executeLspPrepareRename,
|
|
4809
|
+
executeLspRename,
|
|
4810
|
+
executeLspStatus,
|
|
4811
|
+
executeLspSymbols,
|
|
4812
|
+
executeLspTool,
|
|
4813
|
+
isRecord7 as isRecord
|
|
4756
4814
|
};
|