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
|
@@ -271,7 +271,11 @@ function createParentWatchdog(config, onDeadParent) {
|
|
|
271
271
|
const probeAlive = config.probeAlive ?? isProcessAlive;
|
|
272
272
|
let fired = false;
|
|
273
273
|
const timer = setInterval(() => {
|
|
274
|
-
if (fired
|
|
274
|
+
if (fired)
|
|
275
|
+
return;
|
|
276
|
+
const alive = probeAlive(parentPid);
|
|
277
|
+
config.onPoll?.(alive);
|
|
278
|
+
if (alive)
|
|
275
279
|
return;
|
|
276
280
|
fired = true;
|
|
277
281
|
onDeadParent(parentPid, pollIntervalMs);
|
|
@@ -306,8 +310,8 @@ function createIdleTimer(idleTimeoutMs, log, onTimeout) {
|
|
|
306
310
|
};
|
|
307
311
|
}
|
|
308
312
|
// ../lsp-core/src/lsp/client-wrapper.ts
|
|
309
|
-
import { existsSync as
|
|
310
|
-
import { dirname as
|
|
313
|
+
import { existsSync as existsSync10, realpathSync as realpathSync5, statSync as statSync3 } from "node:fs";
|
|
314
|
+
import { basename as basename3, dirname as dirname7, join as join5, resolve as resolve7 } from "node:path";
|
|
311
315
|
|
|
312
316
|
// ../lsp-core/src/request-context.ts
|
|
313
317
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
@@ -316,18 +320,17 @@ import { homedir } from "node:os";
|
|
|
316
320
|
import { basename, delimiter, dirname, isAbsolute, join, relative, resolve } from "node:path";
|
|
317
321
|
|
|
318
322
|
class LspRequestContextParseError extends Error {
|
|
319
|
-
code;
|
|
320
|
-
name = "LspRequestContextParseError";
|
|
321
323
|
constructor(code, message) {
|
|
322
324
|
super(message);
|
|
323
325
|
this.code = code;
|
|
326
|
+
this.name = "LspRequestContextParseError";
|
|
324
327
|
}
|
|
325
328
|
}
|
|
326
329
|
|
|
327
330
|
class LspRequestContextUnavailableError extends Error {
|
|
328
|
-
name = "LspRequestContextUnavailableError";
|
|
329
331
|
constructor() {
|
|
330
332
|
super("LSP request context is required. Standalone MCP startup must install one with runWithRequestContext(createStandaloneMcpRequestContext()).");
|
|
333
|
+
this.name = "LspRequestContextUnavailableError";
|
|
331
334
|
}
|
|
332
335
|
}
|
|
333
336
|
var storage = new AsyncLocalStorage;
|
|
@@ -500,22 +503,15 @@ function effectiveExtension(filePath) {
|
|
|
500
503
|
|
|
501
504
|
// ../lsp-core/src/lsp/errors.ts
|
|
502
505
|
class LspConnectionClosedError extends Error {
|
|
503
|
-
serverId;
|
|
504
|
-
root;
|
|
505
|
-
name = "LspConnectionClosedError";
|
|
506
506
|
constructor(serverId, root, message) {
|
|
507
507
|
super(message ?? `LSP connection closed for ${serverId} at ${root}`);
|
|
508
508
|
this.serverId = serverId;
|
|
509
509
|
this.root = root;
|
|
510
|
+
this.name = "LspConnectionClosedError";
|
|
510
511
|
}
|
|
511
512
|
}
|
|
512
513
|
|
|
513
514
|
class LspProcessExitedError extends Error {
|
|
514
|
-
serverId;
|
|
515
|
-
root;
|
|
516
|
-
exitCode;
|
|
517
|
-
stderrTail;
|
|
518
|
-
name = "LspProcessExitedError";
|
|
519
515
|
constructor(serverId, root, exitCode, stderrTail) {
|
|
520
516
|
const stderrSuffix = stderrTail ? `
|
|
521
517
|
stderr tail: ${stderrTail}` : "";
|
|
@@ -524,46 +520,49 @@ stderr tail: ${stderrTail}` : "";
|
|
|
524
520
|
this.root = root;
|
|
525
521
|
this.exitCode = exitCode;
|
|
526
522
|
this.stderrTail = stderrTail;
|
|
523
|
+
this.name = "LspProcessExitedError";
|
|
527
524
|
}
|
|
528
525
|
}
|
|
529
526
|
|
|
530
527
|
class LspRequestTimeoutError extends Error {
|
|
531
|
-
method;
|
|
532
|
-
stderrTail;
|
|
533
|
-
name = "LspRequestTimeoutError";
|
|
534
528
|
constructor(method, stderrTail) {
|
|
535
529
|
const stderrSuffix = stderrTail ? `
|
|
536
530
|
recent stderr: ${stderrTail}` : "";
|
|
537
531
|
super(`LSP request timeout (method: ${method})${stderrSuffix}`);
|
|
538
532
|
this.method = method;
|
|
539
533
|
this.stderrTail = stderrTail;
|
|
534
|
+
this.name = "LspRequestTimeoutError";
|
|
540
535
|
}
|
|
541
536
|
}
|
|
542
537
|
|
|
543
538
|
class LspInvalidPathError extends Error {
|
|
544
|
-
|
|
539
|
+
constructor() {
|
|
540
|
+
super(...arguments);
|
|
541
|
+
this.name = "LspInvalidPathError";
|
|
542
|
+
}
|
|
545
543
|
}
|
|
546
544
|
|
|
547
545
|
class LspServerLookupError extends Error {
|
|
548
|
-
lookup;
|
|
549
|
-
name = "LspServerLookupError";
|
|
550
546
|
constructor(message, lookup) {
|
|
551
547
|
super(message);
|
|
552
548
|
this.lookup = lookup;
|
|
549
|
+
this.name = "LspServerLookupError";
|
|
553
550
|
}
|
|
554
551
|
}
|
|
555
552
|
|
|
556
553
|
class LspServerInitializingError extends Error {
|
|
557
|
-
originalError;
|
|
558
|
-
name = "LspServerInitializingError";
|
|
559
554
|
constructor(originalError) {
|
|
560
555
|
super(`LSP server is still initializing. Please retry in a few seconds. Original error: ${originalError.message}`);
|
|
561
556
|
this.originalError = originalError;
|
|
557
|
+
this.name = "LspServerInitializingError";
|
|
562
558
|
}
|
|
563
559
|
}
|
|
564
560
|
|
|
565
561
|
class LspProcessSpawnError extends Error {
|
|
566
|
-
|
|
562
|
+
constructor() {
|
|
563
|
+
super(...arguments);
|
|
564
|
+
this.name = "LspProcessSpawnError";
|
|
565
|
+
}
|
|
567
566
|
}
|
|
568
567
|
function isLspDeadConnectionError(err) {
|
|
569
568
|
return err instanceof LspConnectionClosedError || err instanceof LspProcessExitedError;
|
|
@@ -608,20 +607,31 @@ var METHOD_NOT_FOUND = -32601;
|
|
|
608
607
|
var INTERNAL_ERROR = -32603;
|
|
609
608
|
|
|
610
609
|
class JsonRpcConnection {
|
|
611
|
-
reader;
|
|
612
|
-
writer;
|
|
613
|
-
pendingRequests = new Map;
|
|
614
|
-
notificationHandlers = new Map;
|
|
615
|
-
requestHandlers = new Map;
|
|
616
|
-
closeHandlers = [];
|
|
617
|
-
errorHandlers = [];
|
|
618
|
-
inputBuffer = Buffer.alloc(0);
|
|
619
|
-
nextRequestId = 1;
|
|
620
|
-
listening = false;
|
|
621
|
-
disposed = false;
|
|
622
610
|
constructor(reader, writer) {
|
|
623
611
|
this.reader = reader;
|
|
624
612
|
this.writer = writer;
|
|
613
|
+
this.pendingRequests = new Map;
|
|
614
|
+
this.notificationHandlers = new Map;
|
|
615
|
+
this.requestHandlers = new Map;
|
|
616
|
+
this.closeHandlers = [];
|
|
617
|
+
this.errorHandlers = [];
|
|
618
|
+
this.inputBuffer = Buffer.alloc(0);
|
|
619
|
+
this.nextRequestId = 1;
|
|
620
|
+
this.listening = false;
|
|
621
|
+
this.disposed = false;
|
|
622
|
+
this.handleData = (chunk) => {
|
|
623
|
+
const chunkBuffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, "utf8");
|
|
624
|
+
this.inputBuffer = Buffer.concat([this.inputBuffer, chunkBuffer]);
|
|
625
|
+
this.drainInputBuffer();
|
|
626
|
+
};
|
|
627
|
+
this.handleClose = () => {
|
|
628
|
+
for (const handler of this.closeHandlers) {
|
|
629
|
+
handler();
|
|
630
|
+
}
|
|
631
|
+
};
|
|
632
|
+
this.handleStreamError = (error) => {
|
|
633
|
+
this.emitError(error);
|
|
634
|
+
};
|
|
625
635
|
}
|
|
626
636
|
listen() {
|
|
627
637
|
if (this.listening)
|
|
@@ -742,19 +752,6 @@ class JsonRpcConnection {
|
|
|
742
752
|
this.notificationHandlers.clear();
|
|
743
753
|
this.requestHandlers.clear();
|
|
744
754
|
}
|
|
745
|
-
handleData = (chunk) => {
|
|
746
|
-
const chunkBuffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, "utf8");
|
|
747
|
-
this.inputBuffer = Buffer.concat([this.inputBuffer, chunkBuffer]);
|
|
748
|
-
this.drainInputBuffer();
|
|
749
|
-
};
|
|
750
|
-
handleClose = () => {
|
|
751
|
-
for (const handler of this.closeHandlers) {
|
|
752
|
-
handler();
|
|
753
|
-
}
|
|
754
|
-
};
|
|
755
|
-
handleStreamError = (error) => {
|
|
756
|
-
this.emitError(error);
|
|
757
|
-
};
|
|
758
755
|
drainInputBuffer() {
|
|
759
756
|
while (true) {
|
|
760
757
|
const headerEnd = this.inputBuffer.indexOf(HEADER_SEPARATOR2);
|
|
@@ -1102,31 +1099,25 @@ function isPosition(value) {
|
|
|
1102
1099
|
|
|
1103
1100
|
// ../lsp-core/src/lsp/transport.ts
|
|
1104
1101
|
class LspClientNotStartedError extends Error {
|
|
1105
|
-
serverId;
|
|
1106
|
-
root;
|
|
1107
|
-
name = "LspClientNotStartedError";
|
|
1108
1102
|
constructor(serverId, root) {
|
|
1109
1103
|
super("LSP client not started");
|
|
1110
1104
|
this.serverId = serverId;
|
|
1111
1105
|
this.root = root;
|
|
1106
|
+
this.name = "LspClientNotStartedError";
|
|
1112
1107
|
}
|
|
1113
1108
|
}
|
|
1114
1109
|
|
|
1115
1110
|
class LspClientTransport {
|
|
1116
|
-
root;
|
|
1117
|
-
server;
|
|
1118
|
-
proc = null;
|
|
1119
|
-
connection = null;
|
|
1120
|
-
stderrBuffer = [];
|
|
1121
|
-
processExited = false;
|
|
1122
|
-
diagnosticsStore = new Map;
|
|
1123
|
-
requestTimeoutMs;
|
|
1124
|
-
initializeTimeoutMs;
|
|
1125
|
-
workspaceApplyEditHandler = null;
|
|
1126
|
-
diagnosticPullSupported = false;
|
|
1127
1111
|
constructor(root, server2, timeouts = {}) {
|
|
1128
1112
|
this.root = root;
|
|
1129
1113
|
this.server = server2;
|
|
1114
|
+
this.proc = null;
|
|
1115
|
+
this.connection = null;
|
|
1116
|
+
this.stderrBuffer = [];
|
|
1117
|
+
this.processExited = false;
|
|
1118
|
+
this.diagnosticsStore = new Map;
|
|
1119
|
+
this.workspaceApplyEditHandler = null;
|
|
1120
|
+
this.diagnosticPullSupported = false;
|
|
1130
1121
|
this.requestTimeoutMs = timeouts.requestTimeoutMs ?? REQUEST_TIMEOUT_MS;
|
|
1131
1122
|
this.initializeTimeoutMs = timeouts.initializeTimeoutMs ?? INIT_TIMEOUT_MS;
|
|
1132
1123
|
}
|
|
@@ -1623,16 +1614,12 @@ function movedPath(candidate, oldPath, newPath) {
|
|
|
1623
1614
|
}
|
|
1624
1615
|
|
|
1625
1616
|
class WorkspaceDocumentState {
|
|
1626
|
-
sendNotification;
|
|
1627
|
-
clearDiagnostics;
|
|
1628
|
-
openDocuments = new Map;
|
|
1629
|
-
openByUri = new Map;
|
|
1630
|
-
openPromises = new Map;
|
|
1631
|
-
now;
|
|
1632
|
-
versionlessPublishQuiescenceMs;
|
|
1633
1617
|
constructor(sendNotification, clearDiagnostics, options = {}) {
|
|
1634
1618
|
this.sendNotification = sendNotification;
|
|
1635
1619
|
this.clearDiagnostics = clearDiagnostics;
|
|
1620
|
+
this.openDocuments = new Map;
|
|
1621
|
+
this.openByUri = new Map;
|
|
1622
|
+
this.openPromises = new Map;
|
|
1636
1623
|
this.now = options.now ?? (() => Date.now());
|
|
1637
1624
|
this.versionlessPublishQuiescenceMs = options.versionlessPublishQuiescenceMs ?? DEFAULT_VERSIONLESS_PUBLISH_QUIESCENCE_MS;
|
|
1638
1625
|
}
|
|
@@ -1896,13 +1883,11 @@ import { dirname as dirname2, isAbsolute as isAbsolute2, relative as relative3,
|
|
|
1896
1883
|
import { fileURLToPath } from "node:url";
|
|
1897
1884
|
|
|
1898
1885
|
class WorkspaceEditPathError extends Error {
|
|
1899
|
-
path;
|
|
1900
|
-
detail;
|
|
1901
|
-
name = "WorkspaceEditPathError";
|
|
1902
1886
|
constructor(path, detail) {
|
|
1903
1887
|
super(`${detail}: ${path}`);
|
|
1904
1888
|
this.path = path;
|
|
1905
1889
|
this.detail = detail;
|
|
1890
|
+
this.name = "WorkspaceEditPathError";
|
|
1906
1891
|
}
|
|
1907
1892
|
}
|
|
1908
1893
|
function isPathInsideWorkspace(filePath, workspaceRoot) {
|
|
@@ -2194,13 +2179,11 @@ function canonicalFingerprint(operations) {
|
|
|
2194
2179
|
|
|
2195
2180
|
// ../lsp-core/src/lsp/workspace-edit-types.ts
|
|
2196
2181
|
class WorkspaceEditValidationError extends Error {
|
|
2197
|
-
changeIndex;
|
|
2198
|
-
detail;
|
|
2199
|
-
name = "WorkspaceEditValidationError";
|
|
2200
2182
|
constructor(changeIndex, detail) {
|
|
2201
2183
|
super(`change ${changeIndex}: ${detail}`);
|
|
2202
2184
|
this.changeIndex = changeIndex;
|
|
2203
2185
|
this.detail = detail;
|
|
2186
|
+
this.name = "WorkspaceEditValidationError";
|
|
2204
2187
|
}
|
|
2205
2188
|
}
|
|
2206
2189
|
|
|
@@ -2698,10 +2681,9 @@ function simulateDelete(operation, virtual) {
|
|
|
2698
2681
|
import { existsSync as existsSync5, lstatSync as lstatSync3, readdirSync as readdirSync2 } from "node:fs";
|
|
2699
2682
|
import { dirname as dirname4, resolve as resolve5 } from "node:path";
|
|
2700
2683
|
class WorkspaceSnapshotBuilder {
|
|
2701
|
-
workspaceRoot;
|
|
2702
|
-
snapshots = new Map;
|
|
2703
2684
|
constructor(workspaceRoot) {
|
|
2704
2685
|
this.workspaceRoot = workspaceRoot;
|
|
2686
|
+
this.snapshots = new Map;
|
|
2705
2687
|
}
|
|
2706
2688
|
build(operations) {
|
|
2707
2689
|
this.add(this.workspaceRoot, false);
|
|
@@ -2745,8 +2727,10 @@ function snapshotOperations(operations, workspaceRoot) {
|
|
|
2745
2727
|
|
|
2746
2728
|
// ../lsp-core/src/lsp/workspace-edit-plan.ts
|
|
2747
2729
|
class PlanPathIndex {
|
|
2748
|
-
|
|
2749
|
-
|
|
2730
|
+
constructor() {
|
|
2731
|
+
this.firstChangeByPath = new Map;
|
|
2732
|
+
this.reportedPathByCanonical = new Map;
|
|
2733
|
+
}
|
|
2750
2734
|
build(operations) {
|
|
2751
2735
|
for (const operation of operations) {
|
|
2752
2736
|
switch (operation.kind) {
|
|
@@ -2835,14 +2819,11 @@ function isRecord4(value) {
|
|
|
2835
2819
|
}
|
|
2836
2820
|
|
|
2837
2821
|
class WorkspaceMutationController {
|
|
2838
|
-
workspaceRoot;
|
|
2839
|
-
documents;
|
|
2840
|
-
activeLease = null;
|
|
2841
|
-
nextLeaseId = 1;
|
|
2842
|
-
io;
|
|
2843
2822
|
constructor(workspaceRoot, documents) {
|
|
2844
2823
|
this.workspaceRoot = workspaceRoot;
|
|
2845
2824
|
this.documents = documents;
|
|
2825
|
+
this.activeLease = null;
|
|
2826
|
+
this.nextLeaseId = 1;
|
|
2846
2827
|
}
|
|
2847
2828
|
setIo(io) {
|
|
2848
2829
|
this.io = io;
|
|
@@ -2955,12 +2936,9 @@ var DIAGNOSTICS_FRESHNESS_TIMEOUT_MS = 3000;
|
|
|
2955
2936
|
var VERSIONLESS_PUBLISH_QUIESCENCE_MS = 250;
|
|
2956
2937
|
|
|
2957
2938
|
class LspClient extends LspClientConnection {
|
|
2958
|
-
diagnosticPullErrors = [];
|
|
2959
|
-
documents;
|
|
2960
|
-
workspaceMutations;
|
|
2961
|
-
diagnosticsFreshnessTimeoutMs;
|
|
2962
2939
|
constructor(root, server2, options = {}) {
|
|
2963
2940
|
super(root, server2, options);
|
|
2941
|
+
this.diagnosticPullErrors = [];
|
|
2964
2942
|
this.diagnosticsFreshnessTimeoutMs = options.diagnosticsFreshnessTimeoutMs ?? DIAGNOSTICS_FRESHNESS_TIMEOUT_MS;
|
|
2965
2943
|
this.documents = new WorkspaceDocumentState((method, params) => this.sendNotification(method, params), (uri) => this.diagnosticsStore.delete(uri), {
|
|
2966
2944
|
versionlessPublishQuiescenceMs: options.versionlessPublishQuiescenceMs ?? VERSIONLESS_PUBLISH_QUIESCENCE_MS
|
|
@@ -3260,16 +3238,11 @@ function awaitWithSignal(promise, signal) {
|
|
|
3260
3238
|
}
|
|
3261
3239
|
|
|
3262
3240
|
class LspManager {
|
|
3263
|
-
clients = new Map;
|
|
3264
|
-
reaperHandle = null;
|
|
3265
|
-
signalDisposer = null;
|
|
3266
|
-
disposed = false;
|
|
3267
|
-
idleTimeoutMs;
|
|
3268
|
-
initTimeoutMs;
|
|
3269
|
-
reaperIntervalMs;
|
|
3270
|
-
clientFactory;
|
|
3271
|
-
now;
|
|
3272
3241
|
constructor(options = {}) {
|
|
3242
|
+
this.clients = new Map;
|
|
3243
|
+
this.reaperHandle = null;
|
|
3244
|
+
this.signalDisposer = null;
|
|
3245
|
+
this.disposed = false;
|
|
3273
3246
|
this.idleTimeoutMs = options.idleTimeoutMs ?? IDLE_TIMEOUT_MS;
|
|
3274
3247
|
this.initTimeoutMs = options.initTimeoutMs ?? INIT_TIMEOUT_MS;
|
|
3275
3248
|
this.reaperIntervalMs = options.reaperIntervalMs ?? REAPER_INTERVAL_MS;
|
|
@@ -3501,15 +3474,52 @@ async function disposeDefaultLspManager() {
|
|
|
3501
3474
|
}
|
|
3502
3475
|
}
|
|
3503
3476
|
|
|
3477
|
+
// ../lsp-core/src/lsp/outside-context-workspace.ts
|
|
3478
|
+
import { existsSync as existsSync6, realpathSync as realpathSync4 } from "node:fs";
|
|
3479
|
+
import { dirname as dirname5, join as join3 } from "node:path";
|
|
3480
|
+
|
|
3481
|
+
// ../lsp-core/src/lsp/workspace-markers.ts
|
|
3482
|
+
var WORKSPACE_MARKERS = [".git", "package.json", "pyproject.toml", "Cargo.toml", "go.mod", "pom.xml", "build.gradle"];
|
|
3483
|
+
|
|
3484
|
+
// ../lsp-core/src/lsp/outside-context-workspace.ts
|
|
3485
|
+
function findWorkspaceRootOutsideContext(directory) {
|
|
3486
|
+
const marked = nearestMarkedAncestor(directory);
|
|
3487
|
+
if (marked !== undefined)
|
|
3488
|
+
return marked;
|
|
3489
|
+
return realpathSync4(nearestExistingAncestor(directory));
|
|
3490
|
+
}
|
|
3491
|
+
function nearestMarkedAncestor(directory) {
|
|
3492
|
+
let current = directory;
|
|
3493
|
+
for (;; ) {
|
|
3494
|
+
if (existsSync6(current) && WORKSPACE_MARKERS.some((marker) => existsSync6(join3(current, marker)))) {
|
|
3495
|
+
return realpathSync4(current);
|
|
3496
|
+
}
|
|
3497
|
+
const parent = dirname5(current);
|
|
3498
|
+
if (parent === current)
|
|
3499
|
+
return;
|
|
3500
|
+
current = parent;
|
|
3501
|
+
}
|
|
3502
|
+
}
|
|
3503
|
+
function nearestExistingAncestor(directory) {
|
|
3504
|
+
let current = directory;
|
|
3505
|
+
while (!existsSync6(current)) {
|
|
3506
|
+
const parent = dirname5(current);
|
|
3507
|
+
if (parent === current)
|
|
3508
|
+
return current;
|
|
3509
|
+
current = parent;
|
|
3510
|
+
}
|
|
3511
|
+
return current;
|
|
3512
|
+
}
|
|
3513
|
+
|
|
3504
3514
|
// ../lsp-core/src/lsp/server-install-state.ts
|
|
3505
|
-
import { existsSync as
|
|
3506
|
-
import { dirname as
|
|
3515
|
+
import { existsSync as existsSync7, mkdirSync, readFileSync as readFileSync3, renameSync as renameSync2, writeFileSync as writeFileSync2 } from "node:fs";
|
|
3516
|
+
import { dirname as dirname6 } from "node:path";
|
|
3507
3517
|
function getInstallDecisionsPath() {
|
|
3508
3518
|
return lspRequestContext().installDecisionsPath;
|
|
3509
3519
|
}
|
|
3510
3520
|
function loadInstallDecisions() {
|
|
3511
3521
|
const path = getInstallDecisionsPath();
|
|
3512
|
-
if (!
|
|
3522
|
+
if (!existsSync7(path))
|
|
3513
3523
|
return {};
|
|
3514
3524
|
try {
|
|
3515
3525
|
const parsed = JSON.parse(readFileSync3(path, "utf8"));
|
|
@@ -3531,7 +3541,7 @@ function isInstallDecision(value) {
|
|
|
3531
3541
|
}
|
|
3532
3542
|
function writeInstallDecisions(decisions) {
|
|
3533
3543
|
const path = getInstallDecisionsPath();
|
|
3534
|
-
mkdirSync(
|
|
3544
|
+
mkdirSync(dirname6(path), { recursive: true });
|
|
3535
3545
|
const tmpPath = `${path}.tmp`;
|
|
3536
3546
|
writeFileSync2(tmpPath, `${JSON.stringify(decisions, null, 2)}
|
|
3537
3547
|
`, "utf8");
|
|
@@ -3550,7 +3560,7 @@ function isRecord5(value) {
|
|
|
3550
3560
|
}
|
|
3551
3561
|
|
|
3552
3562
|
// ../lsp-core/src/lsp/config-loader.ts
|
|
3553
|
-
import { existsSync as
|
|
3563
|
+
import { existsSync as existsSync8, readFileSync as readFileSync4 } from "node:fs";
|
|
3554
3564
|
|
|
3555
3565
|
// ../lsp-core/src/lsp/server-definitions.ts
|
|
3556
3566
|
var LSP_INSTALL_HINTS = {
|
|
@@ -3707,7 +3717,7 @@ function getUserConfigPath() {
|
|
|
3707
3717
|
return lspRequestContext().userConfigPath;
|
|
3708
3718
|
}
|
|
3709
3719
|
function loadJsonFile(path) {
|
|
3710
|
-
if (!
|
|
3720
|
+
if (!existsSync8(path))
|
|
3711
3721
|
return null;
|
|
3712
3722
|
try {
|
|
3713
3723
|
const parsed = JSON.parse(readFileSync4(path, "utf-8"));
|
|
@@ -3895,8 +3905,8 @@ function getDisabledServerIds() {
|
|
|
3895
3905
|
}
|
|
3896
3906
|
|
|
3897
3907
|
// ../lsp-core/src/lsp/server-installation.ts
|
|
3898
|
-
import { existsSync as
|
|
3899
|
-
import { delimiter as delimiter3, join as
|
|
3908
|
+
import { existsSync as existsSync9 } from "node:fs";
|
|
3909
|
+
import { delimiter as delimiter3, join as join4 } from "node:path";
|
|
3900
3910
|
function isServerInstalled(command, _workingDirectory) {
|
|
3901
3911
|
if (command.length === 0)
|
|
3902
3912
|
return false;
|
|
@@ -3904,7 +3914,7 @@ function isServerInstalled(command, _workingDirectory) {
|
|
|
3904
3914
|
if (!cmd)
|
|
3905
3915
|
return false;
|
|
3906
3916
|
if (cmd.includes("/") || cmd.includes("\\")) {
|
|
3907
|
-
if (
|
|
3917
|
+
if (existsSync9(cmd))
|
|
3908
3918
|
return true;
|
|
3909
3919
|
}
|
|
3910
3920
|
const isWindows = process.platform === "win32";
|
|
@@ -3925,7 +3935,7 @@ function isServerInstalled(command, _workingDirectory) {
|
|
|
3925
3935
|
const paths = pathEnv.split(delimiter3);
|
|
3926
3936
|
for (const p of paths) {
|
|
3927
3937
|
for (const suffix of exts) {
|
|
3928
|
-
if (
|
|
3938
|
+
if (existsSync9(join4(p, cmd + suffix))) {
|
|
3929
3939
|
return true;
|
|
3930
3940
|
}
|
|
3931
3941
|
}
|
|
@@ -4021,7 +4031,6 @@ function getAllServers() {
|
|
|
4021
4031
|
}
|
|
4022
4032
|
|
|
4023
4033
|
// ../lsp-core/src/lsp/client-wrapper.ts
|
|
4024
|
-
var WORKSPACE_MARKERS = [".git", "package.json", "pyproject.toml", "Cargo.toml", "go.mod", "pom.xml", "build.gradle"];
|
|
4025
4034
|
function isDirectoryPath(filePath) {
|
|
4026
4035
|
try {
|
|
4027
4036
|
return statSync3(filePath).isDirectory();
|
|
@@ -4030,32 +4039,85 @@ function isDirectoryPath(filePath) {
|
|
|
4030
4039
|
}
|
|
4031
4040
|
}
|
|
4032
4041
|
function findWorkspaceRoot(filePath) {
|
|
4033
|
-
const
|
|
4042
|
+
const cwd = contextCwd();
|
|
4043
|
+
const abs = resolveReadablePathInsideContext(filePath);
|
|
4034
4044
|
let dir = abs;
|
|
4035
4045
|
if (!isDirectoryPath(dir)) {
|
|
4036
|
-
dir =
|
|
4037
|
-
}
|
|
4038
|
-
|
|
4039
|
-
|
|
4040
|
-
|
|
4041
|
-
|
|
4042
|
-
|
|
4046
|
+
dir = dirname7(dir);
|
|
4047
|
+
}
|
|
4048
|
+
if (!isPathInside(cwd, abs))
|
|
4049
|
+
return findWorkspaceRootOutsideContext(dir);
|
|
4050
|
+
const fallbackRoot = nearestExistingDirectoryInsideContext(dir, cwd) ?? cwd;
|
|
4051
|
+
while (isPathInside(cwd, dir)) {
|
|
4052
|
+
const canonicalDir = existingDirectoryInsideContext(dir, cwd);
|
|
4053
|
+
if (canonicalDir !== undefined) {
|
|
4054
|
+
for (const marker of WORKSPACE_MARKERS) {
|
|
4055
|
+
if (existsSync10(join5(dir, marker))) {
|
|
4056
|
+
return canonicalDir;
|
|
4057
|
+
}
|
|
4043
4058
|
}
|
|
4044
4059
|
}
|
|
4045
|
-
|
|
4046
|
-
|
|
4060
|
+
if (dir === cwd)
|
|
4061
|
+
break;
|
|
4062
|
+
dir = dirname7(dir);
|
|
4047
4063
|
}
|
|
4048
|
-
return
|
|
4064
|
+
return fallbackRoot;
|
|
4049
4065
|
}
|
|
4050
|
-
function
|
|
4066
|
+
function resolveReadablePathInsideContext(filePath) {
|
|
4051
4067
|
const cwd = contextCwd();
|
|
4052
4068
|
const abs = resolve7(cwd, filePath);
|
|
4069
|
+
if (isPathInside(cwd, abs))
|
|
4070
|
+
return abs;
|
|
4071
|
+
const rebased = rebaseThroughCanonicalAncestor(abs, cwd);
|
|
4072
|
+
if (rebased !== undefined)
|
|
4073
|
+
return rebased;
|
|
4074
|
+
return canonicalizeExistingOrNearestAncestor(abs);
|
|
4075
|
+
}
|
|
4076
|
+
function resolvePathInsideContext(filePath) {
|
|
4077
|
+
const cwd = contextCwd();
|
|
4078
|
+
const abs = resolveReadablePathInsideContext(filePath);
|
|
4053
4079
|
const canonical = canonicalizeExistingOrNearestAncestor(abs);
|
|
4054
4080
|
if (!isPathInside(cwd, canonical)) {
|
|
4055
4081
|
throw new LspInvalidPathError(`LSP file path must be inside request cwd: ${filePath}`);
|
|
4056
4082
|
}
|
|
4057
4083
|
return canonical;
|
|
4058
4084
|
}
|
|
4085
|
+
function rebaseThroughCanonicalAncestor(path, cwd) {
|
|
4086
|
+
let current = path;
|
|
4087
|
+
const suffix = [];
|
|
4088
|
+
while (true) {
|
|
4089
|
+
if (existsSync10(current)) {
|
|
4090
|
+
const canonical = realpathSync5(current);
|
|
4091
|
+
if (isPathInside(cwd, canonical))
|
|
4092
|
+
return suffix.length === 0 ? canonical : join5(canonical, ...suffix);
|
|
4093
|
+
}
|
|
4094
|
+
const parent = dirname7(current);
|
|
4095
|
+
if (parent === current)
|
|
4096
|
+
return;
|
|
4097
|
+
suffix.unshift(basename3(current));
|
|
4098
|
+
current = parent;
|
|
4099
|
+
}
|
|
4100
|
+
}
|
|
4101
|
+
function existingDirectoryInsideContext(directory, cwd) {
|
|
4102
|
+
if (!existsSync10(directory))
|
|
4103
|
+
return;
|
|
4104
|
+
const canonical = realpathSync5(directory);
|
|
4105
|
+
if (!statSync3(canonical).isDirectory())
|
|
4106
|
+
return;
|
|
4107
|
+
return isPathInside(cwd, canonical) ? canonical : undefined;
|
|
4108
|
+
}
|
|
4109
|
+
function nearestExistingDirectoryInsideContext(directory, cwd) {
|
|
4110
|
+
let current = directory;
|
|
4111
|
+
while (isPathInside(cwd, current)) {
|
|
4112
|
+
const canonical = existingDirectoryInsideContext(current, cwd);
|
|
4113
|
+
if (canonical !== undefined)
|
|
4114
|
+
return canonical;
|
|
4115
|
+
if (current === cwd)
|
|
4116
|
+
return;
|
|
4117
|
+
current = dirname7(current);
|
|
4118
|
+
}
|
|
4119
|
+
return;
|
|
4120
|
+
}
|
|
4059
4121
|
function formatServerLookupError(result) {
|
|
4060
4122
|
if (result.status === "not_installed") {
|
|
4061
4123
|
return formatNotInstalled(result);
|
|
@@ -4126,7 +4188,7 @@ function formatNotInstalled(result) {
|
|
|
4126
4188
|
].join(`
|
|
4127
4189
|
`);
|
|
4128
4190
|
}
|
|
4129
|
-
var
|
|
4191
|
+
var READ_ONLY_TOOLS = new Set([
|
|
4130
4192
|
"diagnostics",
|
|
4131
4193
|
"definition",
|
|
4132
4194
|
"references",
|
|
@@ -4135,7 +4197,7 @@ var READ_ONLY_RETRY_TOOLS = new Set([
|
|
|
4135
4197
|
"prepareRename"
|
|
4136
4198
|
]);
|
|
4137
4199
|
async function withLspClient(filePath, fn, toolName, options = {}) {
|
|
4138
|
-
const absPath = resolvePathInsideContext(filePath);
|
|
4200
|
+
const absPath = READ_ONLY_TOOLS.has(toolName) ? resolveReadablePathInsideContext(filePath) : resolvePathInsideContext(filePath);
|
|
4139
4201
|
if (isDirectoryPath(absPath)) {
|
|
4140
4202
|
throw new LspInvalidPathError("Directory paths are not supported by this LSP tool. " + "Use lsp.diagnostics with a directory path for directory diagnostics.");
|
|
4141
4203
|
}
|
|
@@ -4150,9 +4212,9 @@ async function withLspClient(filePath, fn, toolName, options = {}) {
|
|
|
4150
4212
|
const acquireAndCall = async (allowRetry) => {
|
|
4151
4213
|
const client = await manager.getClient(root, server2, options.signal);
|
|
4152
4214
|
try {
|
|
4153
|
-
return await fn(client, root);
|
|
4215
|
+
return await fn(client, root, absPath);
|
|
4154
4216
|
} catch (err) {
|
|
4155
|
-
if (allowRetry &&
|
|
4217
|
+
if (allowRetry && READ_ONLY_TOOLS.has(toolName) && isLspDeadConnectionError(err)) {
|
|
4156
4218
|
manager.invalidateClient(root, server2.id, client);
|
|
4157
4219
|
return acquireAndCall(false);
|
|
4158
4220
|
}
|
|
@@ -4170,8 +4232,8 @@ async function withLspClient(filePath, fn, toolName, options = {}) {
|
|
|
4170
4232
|
}
|
|
4171
4233
|
|
|
4172
4234
|
// ../lsp-core/src/lsp/directory-diagnostics.ts
|
|
4173
|
-
import { existsSync as
|
|
4174
|
-
import { join as
|
|
4235
|
+
import { existsSync as existsSync11, lstatSync as lstatSync4, readdirSync as readdirSync3 } from "node:fs";
|
|
4236
|
+
import { join as join6, resolve as resolve8 } from "node:path";
|
|
4175
4237
|
|
|
4176
4238
|
// ../lsp-core/src/lsp/formatters.ts
|
|
4177
4239
|
import { fileURLToPath as fileURLToPath2 } from "node:url";
|
|
@@ -4301,7 +4363,7 @@ function collectFilesWithExtension(dir, extension, maxFiles) {
|
|
|
4301
4363
|
for (const entry of entries) {
|
|
4302
4364
|
if (files.length >= maxFiles)
|
|
4303
4365
|
return;
|
|
4304
|
-
const fullPath =
|
|
4366
|
+
const fullPath = join6(currentDir, entry);
|
|
4305
4367
|
let stat;
|
|
4306
4368
|
try {
|
|
4307
4369
|
stat = lstatSync4(fullPath);
|
|
@@ -4327,7 +4389,7 @@ async function aggregateDiagnosticsForDirectory(directory, extension, severity,
|
|
|
4327
4389
|
throw new LspInvalidPathError(`Extension must start with a dot (e.g., ".ts", not "${extension}"). Use ".${extension}" instead.`);
|
|
4328
4390
|
}
|
|
4329
4391
|
const absDir = resolve8(options.workspaceRoot ?? contextCwd(), directory);
|
|
4330
|
-
if (!
|
|
4392
|
+
if (!existsSync11(absDir)) {
|
|
4331
4393
|
throw new LspInvalidPathError(`Directory does not exist: ${absDir}`);
|
|
4332
4394
|
}
|
|
4333
4395
|
const serverResult = options.server === undefined ? findServerForExtension(extension) : { status: "found", server: options.server };
|
|
@@ -4414,7 +4476,7 @@ async function aggregateDiagnosticsForDirectory(directory, extension, severity,
|
|
|
4414
4476
|
|
|
4415
4477
|
// ../lsp-core/src/lsp/infer-extension.ts
|
|
4416
4478
|
import { lstatSync as lstatSync5, readdirSync as readdirSync4 } from "node:fs";
|
|
4417
|
-
import { join as
|
|
4479
|
+
import { join as join7 } from "node:path";
|
|
4418
4480
|
var SKIP_DIRECTORIES2 = new Set(["node_modules", ".git", "dist", "build", ".next", "out"]);
|
|
4419
4481
|
var MAX_SCAN_ENTRIES = 500;
|
|
4420
4482
|
function inferExtensionFromDirectory(directory) {
|
|
@@ -4432,7 +4494,7 @@ function inferExtensionFromDirectory(directory) {
|
|
|
4432
4494
|
for (const entry of entries) {
|
|
4433
4495
|
if (scanned >= MAX_SCAN_ENTRIES)
|
|
4434
4496
|
return;
|
|
4435
|
-
const fullPath =
|
|
4497
|
+
const fullPath = join7(dir, entry);
|
|
4436
4498
|
let stat;
|
|
4437
4499
|
try {
|
|
4438
4500
|
stat = lstatSync5(fullPath);
|
|
@@ -4607,7 +4669,7 @@ async function executeLspDiagnostics(params, signal) {
|
|
|
4607
4669
|
const filePath = requireString(params, "filePath");
|
|
4608
4670
|
const severity = severityFilter(params);
|
|
4609
4671
|
try {
|
|
4610
|
-
const absPath =
|
|
4672
|
+
const absPath = resolveReadablePathInsideContext(filePath);
|
|
4611
4673
|
if (isDirectoryPath(absPath)) {
|
|
4612
4674
|
const extension = inferExtensionFromDirectory(absPath);
|
|
4613
4675
|
if (!extension) {
|
|
@@ -4636,7 +4698,7 @@ async function executeLspDiagnostics(params, signal) {
|
|
|
4636
4698
|
};
|
|
4637
4699
|
return text(output2.output, details2);
|
|
4638
4700
|
}
|
|
4639
|
-
const result = await withLspClient(filePath, async (client) => client.diagnostics(
|
|
4701
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.diagnostics(resolvedFilePath, signal), "diagnostics", clientOptions(signal));
|
|
4640
4702
|
if (result.transientError) {
|
|
4641
4703
|
const message = result.transientError.message;
|
|
4642
4704
|
const details2 = {
|
|
@@ -4711,7 +4773,7 @@ async function executeLspGotoDefinition(params, signal) {
|
|
|
4711
4773
|
const line = requireNumber(params, "line");
|
|
4712
4774
|
const character = requireNumber(params, "character");
|
|
4713
4775
|
try {
|
|
4714
|
-
const result = await withLspClient(filePath, async (client) => client.definition(
|
|
4776
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.definition(resolvedFilePath, line, character, signal), "definition", clientOptions(signal));
|
|
4715
4777
|
const locations = !result ? [] : Array.isArray(result) ? result : [result];
|
|
4716
4778
|
const details = { filePath, line, character, locations };
|
|
4717
4779
|
if (locations.length === 0)
|
|
@@ -4736,7 +4798,7 @@ async function executeLspFindReferences(params, signal) {
|
|
|
4736
4798
|
const character = requireNumber(params, "character");
|
|
4737
4799
|
const includeDeclaration = optionalBoolean(params, "includeDeclaration") ?? true;
|
|
4738
4800
|
try {
|
|
4739
|
-
const result = await withLspClient(filePath, async (client) => client.references(
|
|
4801
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.references(resolvedFilePath, line, character, includeDeclaration, signal), "references", clientOptions(signal));
|
|
4740
4802
|
const references = Array.isArray(result) ? result : [];
|
|
4741
4803
|
const total = references.length;
|
|
4742
4804
|
const truncated = total > DEFAULT_MAX_REFERENCES;
|
|
@@ -4778,7 +4840,7 @@ async function executeLspPrepareRename(params, signal) {
|
|
|
4778
4840
|
const line = requireNumber(params, "line");
|
|
4779
4841
|
const character = requireNumber(params, "character");
|
|
4780
4842
|
try {
|
|
4781
|
-
const result = await withLspClient(filePath, async (client) => client.prepareRename(
|
|
4843
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.prepareRename(resolvedFilePath, line, character, signal), "prepareRename", clientOptions(signal));
|
|
4782
4844
|
const details = { filePath, line, character, result };
|
|
4783
4845
|
return text(formatPrepareRenameResult(result), details);
|
|
4784
4846
|
} catch (error) {
|
|
@@ -4799,7 +4861,7 @@ async function executeLspRename(params, signal) {
|
|
|
4799
4861
|
const character = requireNumber(params, "character");
|
|
4800
4862
|
const newName = requireString(params, "newName");
|
|
4801
4863
|
try {
|
|
4802
|
-
const result = await withLspClient(filePath, async (client) => client.rename(
|
|
4864
|
+
const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.rename(resolvedFilePath, line, character, newName, signal), "rename", clientOptions(signal));
|
|
4803
4865
|
const details = { filePath, line, character, newName, apply: result.apply, edit: result.edit };
|
|
4804
4866
|
return text(formatApplyResult(result.apply), details, !result.apply.success);
|
|
4805
4867
|
} catch (error) {
|
|
@@ -4879,7 +4941,7 @@ async function executeLspSymbols(params, signal) {
|
|
|
4879
4941
|
const symbols2 = await withLspClient(filePath, async (client) => client.workspaceSymbols(query, signal), "workspaceSymbols", clientOptions(signal));
|
|
4880
4942
|
return formatSymbolsResult(filePath, scope, symbols2, limit, query);
|
|
4881
4943
|
}
|
|
4882
|
-
const symbols = await withLspClient(filePath, async (client) => client.documentSymbols(
|
|
4944
|
+
const symbols = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.documentSymbols(resolvedFilePath, signal), "documentSymbols", clientOptions(signal));
|
|
4883
4945
|
return formatSymbolsResult(filePath, scope, symbols, limit);
|
|
4884
4946
|
} catch (error) {
|
|
4885
4947
|
const query = optionalString(params, "query");
|
|
@@ -5122,6 +5184,6 @@ function requestedProtocolVersion(params) {
|
|
|
5122
5184
|
return params["protocolVersion"];
|
|
5123
5185
|
}
|
|
5124
5186
|
export {
|
|
5125
|
-
|
|
5126
|
-
|
|
5187
|
+
handleLspMcpRequest,
|
|
5188
|
+
runMcpStdioServer
|
|
5127
5189
|
};
|