lazycodex-ai 5.0.0-beta.4 → 5.0.0-beta.42
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/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/cli/config-manager/parse-opencode-config-file.d.ts +2 -1
- package/dist/cli/doctor/checks/system-plugin.d.ts +4 -3
- package/dist/cli/fallback-lane-policy.d.ts +1 -0
- package/dist/cli/index.js +67006 -64814
- 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 +67283 -65068
- package/package.json +9 -9
- package/packages/git-bash-mcp/dist/cli.js +6 -1
- package/packages/lsp-daemon/dist/cli.js +804 -329
- package/packages/lsp-daemon/dist/client.d.ts +10 -0
- package/packages/lsp-daemon/dist/client.js +764 -286
- package/packages/lsp-daemon/dist/daemon-client.d.ts +1 -0
- package/packages/lsp-daemon/dist/daemon-client.js +3 -0
- package/packages/lsp-daemon/dist/ensure-daemon.js +1 -0
- package/packages/lsp-daemon/dist/index.js +768 -295
- package/packages/lsp-daemon/dist/proxy.js +3 -0
- package/packages/lsp-daemon/dist/version-reap.js +1 -1
- package/packages/lsp-daemon/package.json +1 -1
- package/packages/lsp-tools-mcp/dist/cli.js +723 -250
- package/packages/lsp-tools-mcp/dist/lsp/manager.js +259 -125
- package/packages/lsp-tools-mcp/dist/mcp.js +725 -252
- package/packages/lsp-tools-mcp/dist/request-context.js +12 -13
- package/packages/lsp-tools-mcp/dist/tools.js +729 -260
- package/packages/lsp-tools-mcp/package.json +1 -1
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +4 -6
- package/packages/omo-codex/plugin/.mcp.json +0 -6
- package/packages/omo-codex/plugin/AGENTS.md +47 -0
- package/packages/omo-codex/plugin/README.md +2 -2
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +45 -49
- 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/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/lcx/skills/lcx-doctor/SKILL.md +1 -1
- 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 +752 -300
- 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 +60 -45
- 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 +9 -5
- 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 +5 -6
- 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 +4 -10
- 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 +2463 -437
- package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +2467 -441
- 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 +10 -4
- package/packages/omo-codex/plugin/components/ultrawork/biome.json +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +489 -4
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +5 -6
- package/packages/omo-codex/plugin/components/ultrawork/scripts/sync-directive.mjs +30 -14
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +6 -7
- 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/src/directive-content.ts +4 -0
- package/packages/omo-codex/plugin/components/ultrawork/src/directive.ts +5 -2
- 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/directive-source.test.ts +14 -8
- package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +12 -1
- 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 +2 -2
- 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 +19 -0
- package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/README.md +12 -1
- package/packages/omo-codex/plugin/components/ulw-loop/biome.json +2 -2
- package/packages/omo-codex/plugin/components/ulw-loop/directive.md +15 -3
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.d.ts +12 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.js +45 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-continuation.js +9 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.d.ts +15 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.js +15 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.d.ts +8 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.js +120 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +40 -39
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-commands.js +7 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.d.ts +2 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.js +12 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.js +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +958 -342
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.d.ts +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +27 -6
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.d.ts +13 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.js +15 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +17 -9
- package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +17 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.d.ts +13 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.js +19 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.d.ts +7 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.js +9 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.d.ts +12 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.js +104 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.d.ts +13 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.js +65 -9
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-verdicts.js +5 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.d.ts +4 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.js +69 -111
- package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.js +4 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +185 -14
- package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.d.ts +6 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.js +33 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +3 -3
- package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.d.ts +18 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.js +65 -0
- 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 +4 -3
- 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 +22 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-codex-validation.ts +81 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-continuation.ts +7 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-reconciliation.ts +31 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-template.ts +134 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +38 -71
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-commands.ts +7 -2
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +14 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-subcommands.ts +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +3 -5
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +34 -5
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-snapshot.ts +26 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +3 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +19 -9
- package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +18 -3
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-missing-recovery.ts +27 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-aggregate.ts +11 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-artifacts.ts +123 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-fields.ts +68 -15
- package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-verdicts.ts +6 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate.ts +82 -131
- package/packages/omo-codex/plugin/components/ulw-loop/src/review-blockers.ts +4 -2
- package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +187 -12
- package/packages/omo-codex/plugin/components/ulw-loop/src/status-next-actions.ts +36 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +3 -3
- package/packages/omo-codex/plugin/components/ulw-loop/src/surface.ts +95 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-continuation.test.ts +0 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-final.test.ts +133 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-template.test.ts +137 -0
- 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/cli-entrypoint.test.ts +26 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-status-next-actions.test.ts +183 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +37 -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/fixtures/quality-gate-builder.ts +7 -3
- package/packages/omo-codex/plugin/components/ulw-loop/test/guided-recovery.test.ts +105 -0
- 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/quality-gate-aggregate-basics.test.ts +258 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-cap-and-dedupe.test.ts +22 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-poisoning-cascades.test.ts +97 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-roles.test.ts +46 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-senpi-surface.test.ts +131 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-single-report.test.ts +241 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate.test.ts +48 -3
- package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +318 -1
- 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/surface.test.ts +74 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +13 -8
- 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-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-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/model-catalog.json +3 -3
- package/packages/omo-codex/plugin/package-lock.json +676 -524
- package/packages/omo-codex/plugin/package.json +2 -3
- package/packages/omo-codex/plugin/scripts/AGENTS.md +39 -0
- package/packages/omo-codex/plugin/scripts/auto-update-plan.mjs +1 -2
- package/packages/omo-codex/plugin/scripts/auto-update.mjs +0 -9
- package/packages/omo-codex/plugin/scripts/canonical-ultrawork-directive.mjs +17 -0
- package/packages/omo-codex/plugin/scripts/hook-status-message.mjs +0 -1
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/catalog.mjs +3 -3
- package/packages/omo-codex/plugin/scripts/sync-skills.mjs +42 -31
- package/packages/omo-codex/plugin/shared/package.json +3 -4
- package/packages/omo-codex/plugin/shared/src/config-loader.ts +2 -102
- package/packages/omo-codex/plugin/shared/src/config-migration.ts +0 -1
- package/packages/omo-codex/plugin/shared/test/config-loader.test.ts +41 -130
- package/packages/omo-codex/plugin/skills/ast-grep/AGENTS.md +51 -0
- package/packages/omo-codex/plugin/skills/ast-grep/SKILL.md +1 -1
- 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/data-scientist/SKILL.md +99 -239
- package/packages/omo-codex/plugin/skills/data-scientist/references/execution-surfaces.md +91 -0
- package/packages/omo-codex/plugin/skills/data-scientist/references/placement.md +74 -0
- package/packages/omo-codex/plugin/skills/data-scientist/references/polars-lane.md +95 -0
- package/packages/omo-codex/plugin/skills/data-scientist/references/uv-setup.md +1 -1
- package/packages/omo-codex/plugin/skills/data-scientist/references/visualization.md +64 -0
- package/packages/omo-codex/plugin/skills/data-scientist/scripts/ensure-js-deps.sh +28 -0
- package/packages/omo-codex/plugin/skills/data-scientist/scripts/ensure-py-deps.sh +37 -0
- package/packages/omo-codex/plugin/skills/debugging/SKILL.md +3 -1
- package/packages/omo-codex/plugin/skills/debugging/references/methodology/00-setup.md +12 -0
- package/packages/omo-codex/plugin/skills/debugging/references/methodology/02-investigate.md +21 -0
- package/packages/omo-codex/plugin/skills/debugging/references/runtimes/go.md +15 -1
- package/packages/omo-codex/plugin/skills/debugging/references/runtimes/native-binary.md +38 -0
- package/packages/omo-codex/plugin/skills/debugging/references/runtimes/node.md +25 -0
- package/packages/omo-codex/plugin/skills/debugging/references/runtimes/python.md +13 -0
- package/packages/omo-codex/plugin/skills/debugging/references/runtimes/rust.md +41 -0
- package/packages/omo-codex/plugin/skills/debugging/references/scripts/dap.mjs +267 -0
- package/packages/omo-codex/plugin/skills/debugging/references/scripts/fixture-adapter.mjs +59 -0
- package/packages/omo-codex/plugin/skills/debugging/references/tools/dap.md +103 -0
- package/packages/omo-codex/plugin/skills/debugging/references/tools/frida.md +193 -0
- package/packages/omo-codex/plugin/skills/frontend/SKILL.md +12 -8
- 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/git-master/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +14 -14
- package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/lsp-setup/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/programming/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/refactor/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/review-work/SKILL.md +101 -419
- package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +38 -11
- package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +26 -9
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +110 -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 +23 -18
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +9 -2
- package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +15 -3
- package/packages/omo-codex/plugin/skills/{start-work → ulw-execute}/SKILL.md +19 -26
- package/packages/omo-codex/plugin/skills/ulw-execute/agents/openai.yaml +2 -0
- package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +4 -3
- 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 +22 -1
- package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +6 -7
- 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 +8 -3
- package/packages/omo-codex/plugin/skills/visual-qa/AGENTS.md +58 -0
- package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +4 -3
- 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 +9 -48
- package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +2 -3
- package/packages/omo-codex/plugin/test/aggregate-mcp.test.mjs +2 -7
- package/packages/omo-codex/plugin/test/aggregate-model-catalog.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/auto-update.test.mjs +2 -27
- package/packages/omo-codex/plugin/test/bootstrap-setup.test.mjs +0 -31
- package/packages/omo-codex/plugin/test/canonical-ultrawork-directive.test.mjs +53 -0
- 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 -51
- 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 -5
- package/packages/omo-codex/plugin/test/lcx-contribute-bug-fix-template.test.mjs +21 -27
- package/packages/omo-codex/plugin/test/mcp-research-servers.test.mjs +1 -3
- package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +8 -8
- 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 +24 -14
- package/packages/omo-codex/plugin/test/sync-skills.test.mjs +14 -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 +5 -5
- package/packages/omo-codex/plugin/test/ulw-plan-review-state-contract.test.mjs +0 -3
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +2818 -913
- package/packages/{omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md → prompts-core/prompts/ultrawork/codex.md} +15 -10
- package/packages/shared-skills/package.json +7 -1
- package/packages/shared-skills/skills/ast-grep/AGENTS.md +51 -0
- package/packages/shared-skills/skills/ast-grep/SKILL.md +1 -1
- 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/data-scientist/SKILL.md +99 -239
- package/packages/shared-skills/skills/data-scientist/references/execution-surfaces.md +91 -0
- package/packages/shared-skills/skills/data-scientist/references/placement.md +74 -0
- package/packages/shared-skills/skills/data-scientist/references/polars-lane.md +95 -0
- package/packages/shared-skills/skills/data-scientist/references/uv-setup.md +1 -1
- package/packages/shared-skills/skills/data-scientist/references/visualization.md +64 -0
- package/packages/shared-skills/skills/data-scientist/scripts/ensure-js-deps.sh +28 -0
- package/packages/shared-skills/skills/data-scientist/scripts/ensure-py-deps.sh +37 -0
- package/packages/shared-skills/skills/debugging/SKILL.md +3 -1
- package/packages/shared-skills/skills/debugging/references/methodology/00-setup.md +12 -0
- package/packages/shared-skills/skills/debugging/references/methodology/02-investigate.md +21 -0
- package/packages/shared-skills/skills/debugging/references/runtimes/go.md +15 -1
- package/packages/shared-skills/skills/debugging/references/runtimes/native-binary.md +38 -0
- package/packages/shared-skills/skills/debugging/references/runtimes/node.md +25 -0
- package/packages/shared-skills/skills/debugging/references/runtimes/python.md +13 -0
- package/packages/shared-skills/skills/debugging/references/runtimes/rust.md +41 -0
- package/packages/shared-skills/skills/debugging/references/scripts/dap.mjs +267 -0
- package/packages/shared-skills/skills/debugging/references/scripts/dap.test.ts +86 -0
- package/packages/shared-skills/skills/debugging/references/scripts/fixture-adapter.mjs +59 -0
- package/packages/shared-skills/skills/debugging/references/tools/dap.md +103 -0
- package/packages/shared-skills/skills/debugging/references/tools/frida.md +193 -0
- package/packages/shared-skills/skills/frontend/SKILL.md +12 -8
- 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/git-master/SKILL.md +1 -1
- package/packages/shared-skills/skills/init-deep/SKILL.md +14 -14
- package/packages/shared-skills/skills/lsp-setup/SKILL.md +1 -1
- package/packages/shared-skills/skills/programming/SKILL.md +1 -1
- package/packages/shared-skills/skills/refactor/SKILL.md +1 -1
- package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +1 -1
- package/packages/shared-skills/skills/review-work/SKILL.md +100 -418
- package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +38 -11
- package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +26 -9
- package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +110 -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 +23 -18
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +9 -2
- package/packages/shared-skills/skills/{start-work → ulw-execute}/SKILL.md +17 -16
- package/packages/shared-skills/skills/ulw-plan/SKILL.md +7 -8
- 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 +8 -3
- package/packages/shared-skills/skills/visual-qa/AGENTS.md +58 -0
- package/packages/shared-skills/skills/visual-qa/SKILL.md +4 -3
- package/script/qa/web-terminal-visual-qa.mjs +2 -0
- package/script/qa/xterm-live-terminal.mjs +18 -2
- package/packages/lsp-tools-mcp/dist/lsp/cleanup-errors.d.ts +0 -1
- package/packages/lsp-tools-mcp/dist/lsp/constants.d.ts +0 -1
- package/packages/lsp-tools-mcp/dist/lsp/language-mappings.d.ts +0 -1
- package/packages/lsp-tools-mcp/dist/lsp/process-signal-cleanup.d.ts +0 -1
- package/packages/lsp-tools-mcp/dist/missing-dependency-result.d.ts +0 -1
- package/packages/omo-codex/plugin/components/codegraph/AGENTS.md +0 -58
- package/packages/omo-codex/plugin/components/codegraph/NODE-RUNTIME-LICENSES.md +0 -2951
- package/packages/omo-codex/plugin/components/codegraph/NOTICE +0 -16
- package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +0 -12136
- package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +0 -9734
- package/packages/omo-codex/plugin/components/codegraph/package.json +0 -33
- package/packages/omo-codex/plugin/components/codegraph/src/cache-gc.ts +0 -29
- package/packages/omo-codex/plugin/components/codegraph/src/cli.ts +0 -79
- package/packages/omo-codex/plugin/components/codegraph/src/hook-input.ts +0 -33
- package/packages/omo-codex/plugin/components/codegraph/src/hook-sweep.ts +0 -25
- package/packages/omo-codex/plugin/components/codegraph/src/hook-types.ts +0 -131
- package/packages/omo-codex/plugin/components/codegraph/src/hook.ts +0 -258
- package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +0 -309
- package/packages/omo-codex/plugin/components/codegraph/src/mcp-unavailable.ts +0 -80
- package/packages/omo-codex/plugin/components/codegraph/src/post-tool-use-hook.ts +0 -34
- package/packages/omo-codex/plugin/components/codegraph/src/serve-invocation.ts +0 -29
- package/packages/omo-codex/plugin/components/codegraph/src/serve.ts +0 -263
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-command.ts +0 -106
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-cooldown.ts +0 -145
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-hook-runtime.ts +0 -21
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-lock.ts +0 -139
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-outcome.ts +0 -15
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-paths.ts +0 -32
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-project.ts +0 -109
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker-result.ts +0 -148
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker.ts +0 -175
- package/packages/omo-codex/plugin/components/codegraph/src/sweep-cli.ts +0 -81
- package/packages/omo-codex/plugin/components/codegraph/test/cache-gc.test.ts +0 -34
- package/packages/omo-codex/plugin/components/codegraph/test/hook-exclusion.test.ts +0 -112
- package/packages/omo-codex/plugin/components/codegraph/test/hook-registration.test.ts +0 -26
- package/packages/omo-codex/plugin/components/codegraph/test/hook-session-start-guard.test.ts +0 -160
- package/packages/omo-codex/plugin/components/codegraph/test/hook-store-upgrade.test.ts +0 -50
- package/packages/omo-codex/plugin/components/codegraph/test/hook-sweep.test.ts +0 -29
- package/packages/omo-codex/plugin/components/codegraph/test/hook.test.ts +0 -320
- package/packages/omo-codex/plugin/components/codegraph/test/mcp-bridge-fixtures.ts +0 -172
- package/packages/omo-codex/plugin/components/codegraph/test/package-runtime.test.ts +0 -91
- package/packages/omo-codex/plugin/components/codegraph/test/provisioned-node-guard.test.ts +0 -100
- package/packages/omo-codex/plugin/components/codegraph/test/serve-built-wrapper.test.ts +0 -76
- package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge-lifecycle.test.ts +0 -133
- package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge.test.ts +0 -245
- package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-facade.test.ts +0 -69
- package/packages/omo-codex/plugin/components/codegraph/test/serve-node-support.test.ts +0 -43
- package/packages/omo-codex/plugin/components/codegraph/test/serve-provision.test.ts +0 -147
- package/packages/omo-codex/plugin/components/codegraph/test/serve-unavailable.test.ts +0 -175
- package/packages/omo-codex/plugin/components/codegraph/test/serve.test.ts +0 -385
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-node-support.test.ts +0 -206
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-project.test.ts +0 -58
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-state.test.ts +0 -104
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-trust-boundary.test.ts +0 -65
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-availability.test.ts +0 -106
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-cooldown.test.ts +0 -116
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-flow.test.ts +0 -258
- package/packages/omo-codex/plugin/components/codegraph/test/sweep-cli.test.ts +0 -56
- package/packages/omo-codex/plugin/components/codegraph/tsconfig.build.json +0 -13
- package/packages/omo-codex/plugin/components/codegraph/tsconfig.json +0 -25
- package/packages/omo-codex/plugin/components/start-work-continuation/LICENSE +0 -21
- package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +0 -28
- package/packages/omo-codex/plugin/components/ultrawork/directive.md +0 -471
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +0 -18
- package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +0 -17
- 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/scripts/migrate-omo-sot/editor.mjs +0 -125
- package/packages/omo-codex/plugin/scripts/migrate-omo-sot/jsonc.mjs +0 -43
- package/packages/omo-codex/plugin/scripts/migrate-omo-sot/scaffold.mjs +0 -29
- package/packages/omo-codex/plugin/scripts/migrate-omo-sot.mjs +0 -121
- package/packages/omo-codex/plugin/skills/data-scientist/references/common-scenarios.md +0 -176
- package/packages/omo-codex/plugin/skills/data-scientist/references/execution-templates.md +0 -197
- package/packages/omo-codex/plugin/skills/data-scientist/references/integration-patterns.md +0 -153
- package/packages/omo-codex/plugin/skills/data-scientist/references/performance-benchmarks.md +0 -37
- 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/component-codegraph-mcp-smoke.test.mjs +0 -76
- package/packages/omo-codex/plugin/test/migrate-omo-sot.test.mjs +0 -179
- 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/packages/shared-skills/skills/data-scientist/references/common-scenarios.md +0 -176
- package/packages/shared-skills/skills/data-scientist/references/execution-templates.md +0 -197
- package/packages/shared-skills/skills/data-scientist/references/integration-patterns.md +0 -153
- package/packages/shared-skills/skills/data-scientist/references/performance-benchmarks.md +0 -37
- /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/{codegraph → 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
|
@@ -15,6 +15,13 @@ import { pathToFileURL as pathToFileURL3 } from "node:url";
|
|
|
15
15
|
// ../lsp-core/src/lsp/connection.ts
|
|
16
16
|
import { pathToFileURL } from "node:url";
|
|
17
17
|
|
|
18
|
+
// ../lsp-core/src/lsp/timer-provider.ts
|
|
19
|
+
var realTimerProvider = {
|
|
20
|
+
now: () => Date.now(),
|
|
21
|
+
setTimeout: (callback, delayMs) => setTimeout(callback, delayMs),
|
|
22
|
+
clearTimeout: (handle) => clearTimeout(handle)
|
|
23
|
+
};
|
|
24
|
+
|
|
18
25
|
// ../lsp-core/src/lsp/constants.ts
|
|
19
26
|
var DEFAULT_MAX_REFERENCES = 200;
|
|
20
27
|
var DEFAULT_MAX_SYMBOLS = 200;
|
|
@@ -23,28 +30,24 @@ var DEFAULT_MAX_DIRECTORY_FILES = 50;
|
|
|
23
30
|
var REQUEST_TIMEOUT_MS = 15000;
|
|
24
31
|
var INIT_TIMEOUT_MS = 60000;
|
|
25
32
|
var IDLE_TIMEOUT_MS = 5 * 60000;
|
|
33
|
+
var MAX_RESIDENT_CLIENTS = 6;
|
|
26
34
|
var REAPER_INTERVAL_MS = 60000;
|
|
27
35
|
var STOP_HARD_KILL_TIMEOUT_MS = 5000;
|
|
28
36
|
var STOP_SIGKILL_GRACE_MS = 1000;
|
|
37
|
+
var CLIENT_RESPAWN_RETRY_LIMIT = 2;
|
|
38
|
+
var CLIENT_RESPAWN_COOLDOWN_MS = 60000;
|
|
29
39
|
|
|
30
40
|
// ../lsp-core/src/lsp/errors.ts
|
|
31
41
|
class LspConnectionClosedError extends Error {
|
|
32
|
-
serverId;
|
|
33
|
-
root;
|
|
34
|
-
name = "LspConnectionClosedError";
|
|
35
42
|
constructor(serverId, root, message) {
|
|
36
43
|
super(message ?? `LSP connection closed for ${serverId} at ${root}`);
|
|
37
44
|
this.serverId = serverId;
|
|
38
45
|
this.root = root;
|
|
46
|
+
this.name = "LspConnectionClosedError";
|
|
39
47
|
}
|
|
40
48
|
}
|
|
41
49
|
|
|
42
50
|
class LspProcessExitedError extends Error {
|
|
43
|
-
serverId;
|
|
44
|
-
root;
|
|
45
|
-
exitCode;
|
|
46
|
-
stderrTail;
|
|
47
|
-
name = "LspProcessExitedError";
|
|
48
51
|
constructor(serverId, root, exitCode, stderrTail) {
|
|
49
52
|
const stderrSuffix = stderrTail ? `
|
|
50
53
|
stderr tail: ${stderrTail}` : "";
|
|
@@ -53,46 +56,59 @@ stderr tail: ${stderrTail}` : "";
|
|
|
53
56
|
this.root = root;
|
|
54
57
|
this.exitCode = exitCode;
|
|
55
58
|
this.stderrTail = stderrTail;
|
|
59
|
+
this.name = "LspProcessExitedError";
|
|
56
60
|
}
|
|
57
61
|
}
|
|
58
62
|
|
|
59
63
|
class LspRequestTimeoutError extends Error {
|
|
60
|
-
method;
|
|
61
|
-
stderrTail;
|
|
62
|
-
name = "LspRequestTimeoutError";
|
|
63
64
|
constructor(method, stderrTail) {
|
|
64
65
|
const stderrSuffix = stderrTail ? `
|
|
65
66
|
recent stderr: ${stderrTail}` : "";
|
|
66
67
|
super(`LSP request timeout (method: ${method})${stderrSuffix}`);
|
|
67
68
|
this.method = method;
|
|
68
69
|
this.stderrTail = stderrTail;
|
|
70
|
+
this.name = "LspRequestTimeoutError";
|
|
69
71
|
}
|
|
70
72
|
}
|
|
71
73
|
|
|
72
74
|
class LspInvalidPathError extends Error {
|
|
73
|
-
|
|
75
|
+
constructor() {
|
|
76
|
+
super(...arguments);
|
|
77
|
+
this.name = "LspInvalidPathError";
|
|
78
|
+
}
|
|
74
79
|
}
|
|
75
80
|
|
|
76
81
|
class LspServerLookupError extends Error {
|
|
77
|
-
lookup;
|
|
78
|
-
name = "LspServerLookupError";
|
|
79
82
|
constructor(message, lookup) {
|
|
80
83
|
super(message);
|
|
81
84
|
this.lookup = lookup;
|
|
85
|
+
this.name = "LspServerLookupError";
|
|
82
86
|
}
|
|
83
87
|
}
|
|
84
88
|
|
|
85
89
|
class LspServerInitializingError extends Error {
|
|
86
|
-
originalError;
|
|
87
|
-
name = "LspServerInitializingError";
|
|
88
90
|
constructor(originalError) {
|
|
89
91
|
super(`LSP server is still initializing. Please retry in a few seconds. Original error: ${originalError.message}`);
|
|
90
92
|
this.originalError = originalError;
|
|
93
|
+
this.name = "LspServerInitializingError";
|
|
91
94
|
}
|
|
92
95
|
}
|
|
93
96
|
|
|
94
97
|
class LspProcessSpawnError extends Error {
|
|
95
|
-
|
|
98
|
+
constructor() {
|
|
99
|
+
super(...arguments);
|
|
100
|
+
this.name = "LspProcessSpawnError";
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
class LspClientRespawnBudgetExceededError extends Error {
|
|
105
|
+
constructor(serverId, root, retryLimit) {
|
|
106
|
+
super(`LSP server ${serverId} at ${root} failed to stay alive; respawn budget exhausted ` + `(${retryLimit} consecutive dead generations). Retrying after the cooldown may succeed.`);
|
|
107
|
+
this.serverId = serverId;
|
|
108
|
+
this.root = root;
|
|
109
|
+
this.retryLimit = retryLimit;
|
|
110
|
+
this.name = "LspClientRespawnBudgetExceededError";
|
|
111
|
+
}
|
|
96
112
|
}
|
|
97
113
|
function isLspDeadConnectionError(err) {
|
|
98
114
|
return err instanceof LspConnectionClosedError || err instanceof LspProcessExitedError;
|
|
@@ -108,20 +124,31 @@ var METHOD_NOT_FOUND = -32601;
|
|
|
108
124
|
var INTERNAL_ERROR = -32603;
|
|
109
125
|
|
|
110
126
|
class JsonRpcConnection {
|
|
111
|
-
reader;
|
|
112
|
-
writer;
|
|
113
|
-
pendingRequests = new Map;
|
|
114
|
-
notificationHandlers = new Map;
|
|
115
|
-
requestHandlers = new Map;
|
|
116
|
-
closeHandlers = [];
|
|
117
|
-
errorHandlers = [];
|
|
118
|
-
inputBuffer = Buffer.alloc(0);
|
|
119
|
-
nextRequestId = 1;
|
|
120
|
-
listening = false;
|
|
121
|
-
disposed = false;
|
|
122
127
|
constructor(reader, writer) {
|
|
123
128
|
this.reader = reader;
|
|
124
129
|
this.writer = writer;
|
|
130
|
+
this.pendingRequests = new Map;
|
|
131
|
+
this.notificationHandlers = new Map;
|
|
132
|
+
this.requestHandlers = new Map;
|
|
133
|
+
this.closeHandlers = [];
|
|
134
|
+
this.errorHandlers = [];
|
|
135
|
+
this.inputBuffer = Buffer.alloc(0);
|
|
136
|
+
this.nextRequestId = 1;
|
|
137
|
+
this.listening = false;
|
|
138
|
+
this.disposed = false;
|
|
139
|
+
this.handleData = (chunk) => {
|
|
140
|
+
const chunkBuffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, "utf8");
|
|
141
|
+
this.inputBuffer = Buffer.concat([this.inputBuffer, chunkBuffer]);
|
|
142
|
+
this.drainInputBuffer();
|
|
143
|
+
};
|
|
144
|
+
this.handleClose = () => {
|
|
145
|
+
for (const handler of this.closeHandlers) {
|
|
146
|
+
handler();
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
this.handleStreamError = (error) => {
|
|
150
|
+
this.emitError(error);
|
|
151
|
+
};
|
|
125
152
|
}
|
|
126
153
|
listen() {
|
|
127
154
|
if (this.listening)
|
|
@@ -156,6 +183,7 @@ class JsonRpcConnection {
|
|
|
156
183
|
let cancelAfterWrite = false;
|
|
157
184
|
let settled = false;
|
|
158
185
|
const writeCancel = () => this.writeMessage({ jsonrpc: "2.0", method: "$/cancelRequest", params: { id } });
|
|
186
|
+
let rejectAfterCancelWrite;
|
|
159
187
|
const responsePromise = new Promise((resolve, reject) => {
|
|
160
188
|
const cleanup = () => {
|
|
161
189
|
options.signal?.removeEventListener("abort", onAbort);
|
|
@@ -167,15 +195,19 @@ class JsonRpcConnection {
|
|
|
167
195
|
this.pendingRequests.delete(key);
|
|
168
196
|
cleanup();
|
|
169
197
|
const rejectCancelled = () => reject(abortError(options.signal));
|
|
198
|
+
rejectAfterCancelWrite = async () => {
|
|
199
|
+
try {
|
|
200
|
+
await writeCancel();
|
|
201
|
+
} catch (error) {
|
|
202
|
+
this.emitError(toError(error));
|
|
203
|
+
}
|
|
204
|
+
rejectCancelled();
|
|
205
|
+
};
|
|
170
206
|
if (!requestWritten) {
|
|
171
207
|
cancelAfterWrite = true;
|
|
172
|
-
rejectCancelled();
|
|
173
208
|
return;
|
|
174
209
|
}
|
|
175
|
-
|
|
176
|
-
this.emitError(toError(error));
|
|
177
|
-
rejectCancelled();
|
|
178
|
-
});
|
|
210
|
+
rejectAfterCancelWrite();
|
|
179
211
|
};
|
|
180
212
|
const onAbort = () => settleCancel();
|
|
181
213
|
this.pendingRequests.set(key, {
|
|
@@ -203,7 +235,7 @@ class JsonRpcConnection {
|
|
|
203
235
|
await this.writeMessage(message);
|
|
204
236
|
requestWritten = true;
|
|
205
237
|
if (cancelAfterWrite)
|
|
206
|
-
await
|
|
238
|
+
await rejectAfterCancelWrite?.();
|
|
207
239
|
} catch (error) {
|
|
208
240
|
if (settled)
|
|
209
241
|
return responsePromise;
|
|
@@ -242,19 +274,6 @@ class JsonRpcConnection {
|
|
|
242
274
|
this.notificationHandlers.clear();
|
|
243
275
|
this.requestHandlers.clear();
|
|
244
276
|
}
|
|
245
|
-
handleData = (chunk) => {
|
|
246
|
-
const chunkBuffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, "utf8");
|
|
247
|
-
this.inputBuffer = Buffer.concat([this.inputBuffer, chunkBuffer]);
|
|
248
|
-
this.drainInputBuffer();
|
|
249
|
-
};
|
|
250
|
-
handleClose = () => {
|
|
251
|
-
for (const handler of this.closeHandlers) {
|
|
252
|
-
handler();
|
|
253
|
-
}
|
|
254
|
-
};
|
|
255
|
-
handleStreamError = (error) => {
|
|
256
|
-
this.emitError(error);
|
|
257
|
-
};
|
|
258
277
|
drainInputBuffer() {
|
|
259
278
|
while (true) {
|
|
260
279
|
const headerEnd = this.inputBuffer.indexOf(HEADER_SEPARATOR);
|
|
@@ -602,33 +621,29 @@ function isPosition(value) {
|
|
|
602
621
|
|
|
603
622
|
// ../lsp-core/src/lsp/transport.ts
|
|
604
623
|
class LspClientNotStartedError extends Error {
|
|
605
|
-
serverId;
|
|
606
|
-
root;
|
|
607
|
-
name = "LspClientNotStartedError";
|
|
608
624
|
constructor(serverId, root) {
|
|
609
625
|
super("LSP client not started");
|
|
610
626
|
this.serverId = serverId;
|
|
611
627
|
this.root = root;
|
|
628
|
+
this.name = "LspClientNotStartedError";
|
|
612
629
|
}
|
|
613
630
|
}
|
|
614
631
|
|
|
615
632
|
class LspClientTransport {
|
|
616
|
-
root;
|
|
617
|
-
server;
|
|
618
|
-
proc = null;
|
|
619
|
-
connection = null;
|
|
620
|
-
stderrBuffer = [];
|
|
621
|
-
processExited = false;
|
|
622
|
-
diagnosticsStore = new Map;
|
|
623
|
-
requestTimeoutMs;
|
|
624
|
-
initializeTimeoutMs;
|
|
625
|
-
workspaceApplyEditHandler = null;
|
|
626
|
-
diagnosticPullSupported = false;
|
|
627
633
|
constructor(root, server, timeouts = {}) {
|
|
628
634
|
this.root = root;
|
|
629
635
|
this.server = server;
|
|
636
|
+
this.proc = null;
|
|
637
|
+
this.connection = null;
|
|
638
|
+
this.stderrBuffer = [];
|
|
639
|
+
this.processExited = false;
|
|
640
|
+
this.diagnosticsStore = new Map;
|
|
641
|
+
this.workspaceApplyEditHandler = null;
|
|
642
|
+
this.diagnosticPullSupported = false;
|
|
643
|
+
this.documentFormattingSupported = false;
|
|
630
644
|
this.requestTimeoutMs = timeouts.requestTimeoutMs ?? REQUEST_TIMEOUT_MS;
|
|
631
645
|
this.initializeTimeoutMs = timeouts.initializeTimeoutMs ?? INIT_TIMEOUT_MS;
|
|
646
|
+
this.timerProvider = timeouts.timerProvider ?? realTimerProvider;
|
|
632
647
|
}
|
|
633
648
|
pid() {
|
|
634
649
|
return this.proc?.pid;
|
|
@@ -648,6 +663,12 @@ class LspClientTransport {
|
|
|
648
663
|
isDiagnosticPullSupported() {
|
|
649
664
|
return this.diagnosticPullSupported;
|
|
650
665
|
}
|
|
666
|
+
setDocumentFormattingSupported(supported) {
|
|
667
|
+
this.documentFormattingSupported = supported;
|
|
668
|
+
}
|
|
669
|
+
isDocumentFormattingSupported() {
|
|
670
|
+
return this.documentFormattingSupported;
|
|
671
|
+
}
|
|
651
672
|
handlePublishDiagnostics(params) {
|
|
652
673
|
this.diagnosticsStore.set(params.uri, [...params.diagnostics]);
|
|
653
674
|
}
|
|
@@ -723,7 +744,7 @@ class LspClientTransport {
|
|
|
723
744
|
const options = args[1];
|
|
724
745
|
const timeoutMs = options?.timeoutMs ?? this.requestTimeoutMs;
|
|
725
746
|
const timeoutController = new AbortController;
|
|
726
|
-
const timeoutHandle = setTimeout(() => {
|
|
747
|
+
const timeoutHandle = this.timerProvider.setTimeout(() => {
|
|
727
748
|
const stderrTail = this.stderrBuffer.slice(-5).join(`
|
|
728
749
|
`);
|
|
729
750
|
timeoutController.abort(new LspRequestTimeoutError(method, stderrTail || undefined));
|
|
@@ -742,7 +763,7 @@ class LspClientTransport {
|
|
|
742
763
|
}
|
|
743
764
|
throw error;
|
|
744
765
|
} finally {
|
|
745
|
-
clearTimeout(timeoutHandle);
|
|
766
|
+
this.timerProvider.clearTimeout(timeoutHandle);
|
|
746
767
|
combinedSignal.dispose();
|
|
747
768
|
}
|
|
748
769
|
}
|
|
@@ -861,6 +882,14 @@ function supportsDiagnosticPull(capabilities) {
|
|
|
861
882
|
return false;
|
|
862
883
|
return Object.hasOwn(capabilities, "diagnosticProvider");
|
|
863
884
|
}
|
|
885
|
+
function supportsDocumentFormatting(capabilities) {
|
|
886
|
+
if (capabilities === undefined)
|
|
887
|
+
return false;
|
|
888
|
+
const provider = capabilities.documentFormattingProvider;
|
|
889
|
+
if (provider === undefined || provider === null || provider === false)
|
|
890
|
+
return false;
|
|
891
|
+
return provider === true || typeof provider === "object";
|
|
892
|
+
}
|
|
864
893
|
|
|
865
894
|
class LspClientConnection extends LspClientTransport {
|
|
866
895
|
async initialize() {
|
|
@@ -877,6 +906,7 @@ class LspClientConnection extends LspClientTransport {
|
|
|
877
906
|
references: {},
|
|
878
907
|
documentSymbol: { hierarchicalDocumentSymbolSupport: true },
|
|
879
908
|
publishDiagnostics: {},
|
|
909
|
+
formatting: { dynamicRegistration: false },
|
|
880
910
|
rename: {
|
|
881
911
|
prepareSupport: true,
|
|
882
912
|
prepareSupportDefaultBehavior: 1
|
|
@@ -918,6 +948,7 @@ class LspClientConnection extends LspClientTransport {
|
|
|
918
948
|
initializationOptions: this.server.initialization
|
|
919
949
|
}, { timeoutMs: this.initializeTimeoutMs });
|
|
920
950
|
this.setDiagnosticPullSupported(supportsDiagnosticPull(result?.capabilities));
|
|
951
|
+
this.setDocumentFormattingSupported(supportsDocumentFormatting(result?.capabilities));
|
|
921
952
|
await this.sendNotification("initialized", {});
|
|
922
953
|
await this.sendNotification("workspace/didChangeConfiguration", {
|
|
923
954
|
settings: { json: { validate: { enable: true } } }
|
|
@@ -1123,6 +1154,17 @@ function canonicalPath(filePath) {
|
|
|
1123
1154
|
return absolute;
|
|
1124
1155
|
}
|
|
1125
1156
|
}
|
|
1157
|
+
function normalizeDocumentUri(uri) {
|
|
1158
|
+
let decoded = uri;
|
|
1159
|
+
try {
|
|
1160
|
+
decoded = decodeURIComponent(uri);
|
|
1161
|
+
} catch {
|
|
1162
|
+
decoded = uri;
|
|
1163
|
+
}
|
|
1164
|
+
if (process.platform !== "win32")
|
|
1165
|
+
return decoded;
|
|
1166
|
+
return decoded.replace(/^(file:\/\/\/)([a-z]):/, (_match, prefix, drive) => `${prefix}${drive.toUpperCase()}:`);
|
|
1167
|
+
}
|
|
1126
1168
|
function isSameOrDescendant(candidate, parent) {
|
|
1127
1169
|
const suffix = relative(parent, candidate);
|
|
1128
1170
|
return suffix === "" || !suffix.startsWith("..") && suffix !== "..";
|
|
@@ -1133,17 +1175,18 @@ function movedPath(candidate, oldPath, newPath) {
|
|
|
1133
1175
|
}
|
|
1134
1176
|
|
|
1135
1177
|
class WorkspaceDocumentState {
|
|
1136
|
-
sendNotification;
|
|
1137
|
-
clearDiagnostics;
|
|
1138
|
-
openDocuments = new Map;
|
|
1139
|
-
openByUri = new Map;
|
|
1140
|
-
openPromises = new Map;
|
|
1141
|
-
now;
|
|
1142
|
-
versionlessPublishQuiescenceMs;
|
|
1143
1178
|
constructor(sendNotification, clearDiagnostics, options = {}) {
|
|
1144
1179
|
this.sendNotification = sendNotification;
|
|
1145
1180
|
this.clearDiagnostics = clearDiagnostics;
|
|
1146
|
-
this.
|
|
1181
|
+
this.openDocuments = new Map;
|
|
1182
|
+
this.openByUri = new Map;
|
|
1183
|
+
this.openPromises = new Map;
|
|
1184
|
+
this.timerProvider = options.timerProvider ?? {
|
|
1185
|
+
now: options.now ?? (() => Date.now()),
|
|
1186
|
+
setTimeout: (callback, delayMs) => setTimeout(callback, delayMs),
|
|
1187
|
+
clearTimeout: (handle) => clearTimeout(handle)
|
|
1188
|
+
};
|
|
1189
|
+
this.now = () => this.timerProvider.now();
|
|
1147
1190
|
this.versionlessPublishQuiescenceMs = options.versionlessPublishQuiescenceMs ?? DEFAULT_VERSIONLESS_PUBLISH_QUIESCENCE_MS;
|
|
1148
1191
|
}
|
|
1149
1192
|
async openFile(filePath) {
|
|
@@ -1165,7 +1208,7 @@ class WorkspaceDocumentState {
|
|
|
1165
1208
|
return this.openDocuments.get(canonicalPath(filePath))?.version;
|
|
1166
1209
|
}
|
|
1167
1210
|
getStoredDiagnostics(uri) {
|
|
1168
|
-
const state = this.openByUri.get(uri);
|
|
1211
|
+
const state = this.openByUri.get(normalizeDocumentUri(uri));
|
|
1169
1212
|
if (!state)
|
|
1170
1213
|
return [];
|
|
1171
1214
|
return state.lastPublish?.diagnostics ?? state.pullCache?.diagnostics ?? [];
|
|
@@ -1187,13 +1230,13 @@ class WorkspaceDocumentState {
|
|
|
1187
1230
|
return state !== undefined && state.uri === snapshot.uri && state.version === snapshot.version && state.generation === snapshot.documentGeneration;
|
|
1188
1231
|
}
|
|
1189
1232
|
getPullCache(snapshot) {
|
|
1190
|
-
const state = this.openByUri.get(snapshot.uri);
|
|
1233
|
+
const state = this.openByUri.get(normalizeDocumentUri(snapshot.uri));
|
|
1191
1234
|
if (!state?.pullCache || state.pullCache.documentVersion !== snapshot.version)
|
|
1192
1235
|
return null;
|
|
1193
1236
|
return state.pullCache;
|
|
1194
1237
|
}
|
|
1195
1238
|
recordPullDiagnostics(snapshot, report) {
|
|
1196
|
-
const state = this.openByUri.get(snapshot.uri);
|
|
1239
|
+
const state = this.openByUri.get(normalizeDocumentUri(snapshot.uri));
|
|
1197
1240
|
if (!state)
|
|
1198
1241
|
return;
|
|
1199
1242
|
state.pullCache = {
|
|
@@ -1203,7 +1246,7 @@ class WorkspaceDocumentState {
|
|
|
1203
1246
|
};
|
|
1204
1247
|
}
|
|
1205
1248
|
recordPublishedDiagnostics(params) {
|
|
1206
|
-
const state = this.openByUri.get(params.uri);
|
|
1249
|
+
const state = this.openByUri.get(normalizeDocumentUri(params.uri));
|
|
1207
1250
|
if (!state)
|
|
1208
1251
|
return;
|
|
1209
1252
|
state.publishGeneration += 1;
|
|
@@ -1217,7 +1260,7 @@ class WorkspaceDocumentState {
|
|
|
1217
1260
|
this.notifyWaiters(state);
|
|
1218
1261
|
}
|
|
1219
1262
|
resolvePushDiagnostics(snapshot) {
|
|
1220
|
-
const state = this.openByUri.get(snapshot.uri);
|
|
1263
|
+
const state = this.openByUri.get(normalizeDocumentUri(snapshot.uri));
|
|
1221
1264
|
if (!state?.lastPublish)
|
|
1222
1265
|
return { status: "missing" };
|
|
1223
1266
|
const publish = state.lastPublish;
|
|
@@ -1231,7 +1274,7 @@ class WorkspaceDocumentState {
|
|
|
1231
1274
|
return waitMs === 0 ? { status: "ready", diagnostics: publish.diagnostics } : { status: "wait", waitMs };
|
|
1232
1275
|
}
|
|
1233
1276
|
waitForDiagnosticsActivity(snapshot, timeoutMs) {
|
|
1234
|
-
const state = this.openByUri.get(snapshot.uri);
|
|
1277
|
+
const state = this.openByUri.get(normalizeDocumentUri(snapshot.uri));
|
|
1235
1278
|
if (!state || timeoutMs <= 0)
|
|
1236
1279
|
return Promise.resolve();
|
|
1237
1280
|
return new Promise((resolveActivity) => {
|
|
@@ -1240,11 +1283,11 @@ class WorkspaceDocumentState {
|
|
|
1240
1283
|
if (settled)
|
|
1241
1284
|
return;
|
|
1242
1285
|
settled = true;
|
|
1243
|
-
clearTimeout(timer);
|
|
1286
|
+
this.timerProvider.clearTimeout(timer);
|
|
1244
1287
|
state.waiters.delete(finish);
|
|
1245
1288
|
resolveActivity();
|
|
1246
1289
|
};
|
|
1247
|
-
const timer = setTimeout(finish, timeoutMs);
|
|
1290
|
+
const timer = this.timerProvider.setTimeout(finish, timeoutMs);
|
|
1248
1291
|
if (typeof timer.unref === "function")
|
|
1249
1292
|
timer.unref();
|
|
1250
1293
|
state.waiters.add(finish);
|
|
@@ -1352,7 +1395,7 @@ class WorkspaceDocumentState {
|
|
|
1352
1395
|
waiters: new Set
|
|
1353
1396
|
};
|
|
1354
1397
|
this.openDocuments.set(path, state);
|
|
1355
|
-
this.openByUri.set(state.uri, state);
|
|
1398
|
+
this.openByUri.set(normalizeDocumentUri(state.uri), state);
|
|
1356
1399
|
this.notifyWaiters(state);
|
|
1357
1400
|
await this.sendNotification("textDocument/didOpen", {
|
|
1358
1401
|
textDocument: { uri: state.uri, languageId: state.languageId, version: state.version, text }
|
|
@@ -1377,7 +1420,7 @@ class WorkspaceDocumentState {
|
|
|
1377
1420
|
}
|
|
1378
1421
|
async closeDocument(state) {
|
|
1379
1422
|
this.openDocuments.delete(state.path);
|
|
1380
|
-
this.openByUri.delete(state.uri);
|
|
1423
|
+
this.openByUri.delete(normalizeDocumentUri(state.uri));
|
|
1381
1424
|
this.clearDiagnostics(state.uri);
|
|
1382
1425
|
this.notifyWaiters(state);
|
|
1383
1426
|
await this.sendNotification("textDocument/didClose", { textDocument: { uri: state.uri } });
|
|
@@ -1406,13 +1449,11 @@ import { dirname, isAbsolute, relative as relative2, resolve as resolve2 } from
|
|
|
1406
1449
|
import { fileURLToPath } from "node:url";
|
|
1407
1450
|
|
|
1408
1451
|
class WorkspaceEditPathError extends Error {
|
|
1409
|
-
path;
|
|
1410
|
-
detail;
|
|
1411
|
-
name = "WorkspaceEditPathError";
|
|
1412
1452
|
constructor(path, detail) {
|
|
1413
1453
|
super(`${detail}: ${path}`);
|
|
1414
1454
|
this.path = path;
|
|
1415
1455
|
this.detail = detail;
|
|
1456
|
+
this.name = "WorkspaceEditPathError";
|
|
1416
1457
|
}
|
|
1417
1458
|
}
|
|
1418
1459
|
function isPathInsideWorkspace(filePath, workspaceRoot) {
|
|
@@ -1704,13 +1745,11 @@ function canonicalFingerprint(operations) {
|
|
|
1704
1745
|
|
|
1705
1746
|
// ../lsp-core/src/lsp/workspace-edit-types.ts
|
|
1706
1747
|
class WorkspaceEditValidationError extends Error {
|
|
1707
|
-
changeIndex;
|
|
1708
|
-
detail;
|
|
1709
|
-
name = "WorkspaceEditValidationError";
|
|
1710
1748
|
constructor(changeIndex, detail) {
|
|
1711
1749
|
super(`change ${changeIndex}: ${detail}`);
|
|
1712
1750
|
this.changeIndex = changeIndex;
|
|
1713
1751
|
this.detail = detail;
|
|
1752
|
+
this.name = "WorkspaceEditValidationError";
|
|
1714
1753
|
}
|
|
1715
1754
|
}
|
|
1716
1755
|
|
|
@@ -2208,10 +2247,9 @@ function simulateDelete(operation, virtual) {
|
|
|
2208
2247
|
import { existsSync as existsSync4, lstatSync as lstatSync3, readdirSync as readdirSync2 } from "node:fs";
|
|
2209
2248
|
import { dirname as dirname3, resolve as resolve4 } from "node:path";
|
|
2210
2249
|
class WorkspaceSnapshotBuilder {
|
|
2211
|
-
workspaceRoot;
|
|
2212
|
-
snapshots = new Map;
|
|
2213
2250
|
constructor(workspaceRoot) {
|
|
2214
2251
|
this.workspaceRoot = workspaceRoot;
|
|
2252
|
+
this.snapshots = new Map;
|
|
2215
2253
|
}
|
|
2216
2254
|
build(operations) {
|
|
2217
2255
|
this.add(this.workspaceRoot, false);
|
|
@@ -2255,8 +2293,10 @@ function snapshotOperations(operations, workspaceRoot) {
|
|
|
2255
2293
|
|
|
2256
2294
|
// ../lsp-core/src/lsp/workspace-edit-plan.ts
|
|
2257
2295
|
class PlanPathIndex {
|
|
2258
|
-
|
|
2259
|
-
|
|
2296
|
+
constructor() {
|
|
2297
|
+
this.firstChangeByPath = new Map;
|
|
2298
|
+
this.reportedPathByCanonical = new Map;
|
|
2299
|
+
}
|
|
2260
2300
|
build(operations) {
|
|
2261
2301
|
for (const operation of operations) {
|
|
2262
2302
|
switch (operation.kind) {
|
|
@@ -2345,14 +2385,11 @@ function isRecord3(value) {
|
|
|
2345
2385
|
}
|
|
2346
2386
|
|
|
2347
2387
|
class WorkspaceMutationController {
|
|
2348
|
-
workspaceRoot;
|
|
2349
|
-
documents;
|
|
2350
|
-
activeLease = null;
|
|
2351
|
-
nextLeaseId = 1;
|
|
2352
|
-
io;
|
|
2353
2388
|
constructor(workspaceRoot, documents) {
|
|
2354
2389
|
this.workspaceRoot = workspaceRoot;
|
|
2355
2390
|
this.documents = documents;
|
|
2391
|
+
this.activeLease = null;
|
|
2392
|
+
this.nextLeaseId = 1;
|
|
2356
2393
|
}
|
|
2357
2394
|
setIo(io) {
|
|
2358
2395
|
this.io = io;
|
|
@@ -2465,14 +2502,12 @@ var DIAGNOSTICS_FRESHNESS_TIMEOUT_MS = 3000;
|
|
|
2465
2502
|
var VERSIONLESS_PUBLISH_QUIESCENCE_MS = 250;
|
|
2466
2503
|
|
|
2467
2504
|
class LspClient extends LspClientConnection {
|
|
2468
|
-
diagnosticPullErrors = [];
|
|
2469
|
-
documents;
|
|
2470
|
-
workspaceMutations;
|
|
2471
|
-
diagnosticsFreshnessTimeoutMs;
|
|
2472
2505
|
constructor(root, server, options = {}) {
|
|
2473
2506
|
super(root, server, options);
|
|
2507
|
+
this.diagnosticPullErrors = [];
|
|
2474
2508
|
this.diagnosticsFreshnessTimeoutMs = options.diagnosticsFreshnessTimeoutMs ?? DIAGNOSTICS_FRESHNESS_TIMEOUT_MS;
|
|
2475
2509
|
this.documents = new WorkspaceDocumentState((method, params) => this.sendNotification(method, params), (uri) => this.diagnosticsStore.delete(uri), {
|
|
2510
|
+
timerProvider: this.timerProvider,
|
|
2476
2511
|
versionlessPublishQuiescenceMs: options.versionlessPublishQuiescenceMs ?? VERSIONLESS_PUBLISH_QUIESCENCE_MS
|
|
2477
2512
|
});
|
|
2478
2513
|
this.workspaceMutations = new WorkspaceMutationController(root, this.documents);
|
|
@@ -2525,6 +2560,18 @@ class LspClient extends LspClientConnection {
|
|
|
2525
2560
|
textDocument: { uri: pathToFileURL3(absPath).href }
|
|
2526
2561
|
}, options);
|
|
2527
2562
|
}
|
|
2563
|
+
async formatDocument(filePath, options, signal) {
|
|
2564
|
+
if (!this.isDocumentFormattingSupported())
|
|
2565
|
+
return null;
|
|
2566
|
+
const absPath = this.resolveWorkspacePath(filePath);
|
|
2567
|
+
await this.openFile(absPath);
|
|
2568
|
+
const requestOptions = signal === undefined ? {} : { signal };
|
|
2569
|
+
const edits = await this.sendRequest("textDocument/formatting", {
|
|
2570
|
+
textDocument: { uri: pathToFileURL3(absPath).href },
|
|
2571
|
+
options
|
|
2572
|
+
}, requestOptions);
|
|
2573
|
+
return edits ?? [];
|
|
2574
|
+
}
|
|
2528
2575
|
async workspaceSymbols(query, signal) {
|
|
2529
2576
|
const options = signal === undefined ? {} : { signal };
|
|
2530
2577
|
return this.sendRequest("workspace/symbol", { query }, options);
|
|
@@ -2564,7 +2611,7 @@ class LspClient extends LspClientConnection {
|
|
|
2564
2611
|
const absPath = this.resolveWorkspacePath(filePath);
|
|
2565
2612
|
const uri = pathToFileURL3(absPath).href;
|
|
2566
2613
|
await this.openFile(absPath);
|
|
2567
|
-
const deadlineAt =
|
|
2614
|
+
const deadlineAt = this.timerProvider.now() + this.diagnosticsFreshnessTimeoutMs;
|
|
2568
2615
|
for (;; ) {
|
|
2569
2616
|
signal?.throwIfAborted();
|
|
2570
2617
|
const snapshot = this.documents.captureDiagnosticSnapshot(absPath);
|
|
@@ -2577,7 +2624,7 @@ class LspClient extends LspClientConnection {
|
|
|
2577
2624
|
if (!pushFallbackOnly) {
|
|
2578
2625
|
const cached = this.documents.getPullCache(snapshot);
|
|
2579
2626
|
try {
|
|
2580
|
-
const remainingMs2 = deadlineAt -
|
|
2627
|
+
const remainingMs2 = deadlineAt - this.timerProvider.now();
|
|
2581
2628
|
if (remainingMs2 <= 0)
|
|
2582
2629
|
return this.freshnessTimeout(absPath);
|
|
2583
2630
|
const result = await this.sendRequest("textDocument/diagnostic", {
|
|
@@ -2612,7 +2659,7 @@ class LspClient extends LspClientConnection {
|
|
|
2612
2659
|
}
|
|
2613
2660
|
if (!pushFallbackOnly)
|
|
2614
2661
|
continue;
|
|
2615
|
-
const remainingMs = deadlineAt -
|
|
2662
|
+
const remainingMs = deadlineAt - this.timerProvider.now();
|
|
2616
2663
|
if (remainingMs <= 0) {
|
|
2617
2664
|
if (!this.isDiagnosticPullSupported() && snapshot.publishGeneration === 0) {
|
|
2618
2665
|
const cached = this.documents.getPullCache(snapshot);
|
|
@@ -2770,18 +2817,16 @@ function awaitWithSignal(promise, signal) {
|
|
|
2770
2817
|
}
|
|
2771
2818
|
|
|
2772
2819
|
class LspManager {
|
|
2773
|
-
clients = new Map;
|
|
2774
|
-
reaperHandle = null;
|
|
2775
|
-
signalDisposer = null;
|
|
2776
|
-
disposed = false;
|
|
2777
|
-
idleTimeoutMs;
|
|
2778
|
-
initTimeoutMs;
|
|
2779
|
-
reaperIntervalMs;
|
|
2780
|
-
clientFactory;
|
|
2781
|
-
now;
|
|
2782
2820
|
constructor(options = {}) {
|
|
2821
|
+
this.clients = new Map;
|
|
2822
|
+
this.pendingStops = new Map;
|
|
2823
|
+
this.respawnBudgets = new Map;
|
|
2824
|
+
this.reaperHandle = null;
|
|
2825
|
+
this.signalDisposer = null;
|
|
2826
|
+
this.disposed = false;
|
|
2783
2827
|
this.idleTimeoutMs = options.idleTimeoutMs ?? IDLE_TIMEOUT_MS;
|
|
2784
2828
|
this.initTimeoutMs = options.initTimeoutMs ?? INIT_TIMEOUT_MS;
|
|
2829
|
+
this.maxResidentClients = options.maxResidentClients ?? MAX_RESIDENT_CLIENTS;
|
|
2785
2830
|
this.reaperIntervalMs = options.reaperIntervalMs ?? REAPER_INTERVAL_MS;
|
|
2786
2831
|
this.clientFactory = options.clientFactory ?? ((root, server) => new LspClient(root, server));
|
|
2787
2832
|
this.now = options.now ?? (() => Date.now());
|
|
@@ -2801,24 +2846,79 @@ class LspManager {
|
|
|
2801
2846
|
getKey(root, serverId) {
|
|
2802
2847
|
return `${root}::${serverId}`;
|
|
2803
2848
|
}
|
|
2849
|
+
tombstoneStop(key, client) {
|
|
2850
|
+
const stop = stopClientBestEffort(client);
|
|
2851
|
+
this.pendingStops.set(key, stop);
|
|
2852
|
+
stop.finally(() => {
|
|
2853
|
+
if (this.pendingStops.get(key) === stop) {
|
|
2854
|
+
this.pendingStops.delete(key);
|
|
2855
|
+
}
|
|
2856
|
+
});
|
|
2857
|
+
return stop;
|
|
2858
|
+
}
|
|
2859
|
+
recordDeadGeneration(key) {
|
|
2860
|
+
let budget = this.respawnBudgets.get(key);
|
|
2861
|
+
if (budget === undefined) {
|
|
2862
|
+
budget = { deadGenerations: 0, exhaustedAt: null };
|
|
2863
|
+
this.respawnBudgets.set(key, budget);
|
|
2864
|
+
}
|
|
2865
|
+
budget.deadGenerations += 1;
|
|
2866
|
+
}
|
|
2867
|
+
markHealthyGeneration(key) {
|
|
2868
|
+
this.respawnBudgets.delete(key);
|
|
2869
|
+
}
|
|
2870
|
+
ensureRespawnAllowed(key, root, serverId) {
|
|
2871
|
+
const budget = this.respawnBudgets.get(key);
|
|
2872
|
+
if (budget === undefined || budget.deadGenerations < CLIENT_RESPAWN_RETRY_LIMIT)
|
|
2873
|
+
return;
|
|
2874
|
+
if (budget.exhaustedAt === null) {
|
|
2875
|
+
budget.exhaustedAt = this.now();
|
|
2876
|
+
throw new LspClientRespawnBudgetExceededError(serverId, root, CLIENT_RESPAWN_RETRY_LIMIT);
|
|
2877
|
+
}
|
|
2878
|
+
if (this.now() - budget.exhaustedAt < CLIENT_RESPAWN_COOLDOWN_MS) {
|
|
2879
|
+
throw new LspClientRespawnBudgetExceededError(serverId, root, CLIENT_RESPAWN_RETRY_LIMIT);
|
|
2880
|
+
}
|
|
2881
|
+
budget.deadGenerations = 0;
|
|
2882
|
+
budget.exhaustedAt = null;
|
|
2883
|
+
}
|
|
2804
2884
|
reapStale() {
|
|
2805
2885
|
const t = this.now();
|
|
2806
2886
|
for (const [key, managed] of this.clients) {
|
|
2807
2887
|
if (managed.isInitializing && managed.initializingSince !== null && t - managed.initializingSince > this.initTimeoutMs) {
|
|
2808
|
-
stopClientBestEffort(managed.client);
|
|
2809
2888
|
this.clients.delete(key);
|
|
2889
|
+
this.tombstoneStop(key, managed.client);
|
|
2810
2890
|
continue;
|
|
2811
2891
|
}
|
|
2812
2892
|
if (!managed.isInitializing && managed.refCount === 0 && managed.pendingWaiters === 0 && t - managed.lastUsedAt > this.idleTimeoutMs) {
|
|
2813
|
-
stopClientBestEffort(managed.client);
|
|
2814
2893
|
this.clients.delete(key);
|
|
2894
|
+
this.tombstoneStop(key, managed.client);
|
|
2815
2895
|
}
|
|
2816
2896
|
}
|
|
2817
2897
|
}
|
|
2898
|
+
evictForAdmission() {
|
|
2899
|
+
while (this.clients.size >= this.maxResidentClients) {
|
|
2900
|
+
const victim = this.leastRecentlyUsedIdleClient();
|
|
2901
|
+
if (!victim)
|
|
2902
|
+
return;
|
|
2903
|
+
this.clients.delete(victim.key);
|
|
2904
|
+
this.tombstoneStop(victim.key, victim.managed.client);
|
|
2905
|
+
}
|
|
2906
|
+
}
|
|
2907
|
+
leastRecentlyUsedIdleClient() {
|
|
2908
|
+
let candidate = null;
|
|
2909
|
+
for (const [key, managed] of this.clients) {
|
|
2910
|
+
if (managed.refCount > 0 || managed.pendingWaiters > 0 || managed.isInitializing)
|
|
2911
|
+
continue;
|
|
2912
|
+
if (candidate === null || managed.lastUsedAt < candidate.managed.lastUsedAt) {
|
|
2913
|
+
candidate = { key, managed };
|
|
2914
|
+
}
|
|
2915
|
+
}
|
|
2916
|
+
return candidate;
|
|
2917
|
+
}
|
|
2818
2918
|
async tryDeleteIfOrphaned(key, managed) {
|
|
2819
2919
|
if (managed.refCount === 0 && managed.pendingWaiters === 0 && !managed.isInitializing && this.clients.get(key) === managed) {
|
|
2820
2920
|
this.clients.delete(key);
|
|
2821
|
-
await
|
|
2921
|
+
await this.tombstoneStop(key, managed.client);
|
|
2822
2922
|
}
|
|
2823
2923
|
}
|
|
2824
2924
|
async getClient(root, server, signal) {
|
|
@@ -2827,12 +2927,22 @@ class LspManager {
|
|
|
2827
2927
|
}
|
|
2828
2928
|
signal?.throwIfAborted();
|
|
2829
2929
|
const key = this.getKey(root, server.id);
|
|
2930
|
+
for (;; ) {
|
|
2931
|
+
const pendingStop = this.pendingStops.get(key);
|
|
2932
|
+
if (pendingStop === undefined)
|
|
2933
|
+
break;
|
|
2934
|
+
await awaitWithSignal(pendingStop, signal);
|
|
2935
|
+
signal?.throwIfAborted();
|
|
2936
|
+
}
|
|
2937
|
+
if (this.disposed) {
|
|
2938
|
+
throw new Error("LspManager has been disposed");
|
|
2939
|
+
}
|
|
2830
2940
|
let managed = this.clients.get(key);
|
|
2831
2941
|
if (managed) {
|
|
2832
2942
|
const t = this.now();
|
|
2833
2943
|
if (managed.isInitializing && managed.initializingSince !== null && t - managed.initializingSince > this.initTimeoutMs) {
|
|
2834
|
-
await stopClientBestEffort(managed.client);
|
|
2835
2944
|
this.clients.delete(key);
|
|
2945
|
+
await this.tombstoneStop(key, managed.client);
|
|
2836
2946
|
managed = undefined;
|
|
2837
2947
|
}
|
|
2838
2948
|
}
|
|
@@ -2853,14 +2963,20 @@ class LspManager {
|
|
|
2853
2963
|
signal.throwIfAborted();
|
|
2854
2964
|
}
|
|
2855
2965
|
if (!managed.client.isAlive()) {
|
|
2856
|
-
|
|
2857
|
-
this.clients.
|
|
2966
|
+
this.recordDeadGeneration(key);
|
|
2967
|
+
if (this.clients.get(key) === managed) {
|
|
2968
|
+
this.clients.delete(key);
|
|
2969
|
+
}
|
|
2970
|
+
await this.tombstoneStop(key, managed.client);
|
|
2858
2971
|
return this.getClient(root, server, signal);
|
|
2859
2972
|
}
|
|
2973
|
+
this.markHealthyGeneration(key);
|
|
2860
2974
|
managed.refCount++;
|
|
2861
2975
|
managed.lastUsedAt = this.now();
|
|
2862
2976
|
return managed.client;
|
|
2863
2977
|
}
|
|
2978
|
+
this.evictForAdmission();
|
|
2979
|
+
this.ensureRespawnAllowed(key, root, server.id);
|
|
2864
2980
|
const client = this.clientFactory(root, server);
|
|
2865
2981
|
const initStartedAt = this.now();
|
|
2866
2982
|
const initPromise = (async () => {
|
|
@@ -2884,7 +3000,7 @@ class LspManager {
|
|
|
2884
3000
|
if (this.clients.get(key) === newManaged) {
|
|
2885
3001
|
this.clients.delete(key);
|
|
2886
3002
|
}
|
|
2887
|
-
await
|
|
3003
|
+
await this.tombstoneStop(key, client);
|
|
2888
3004
|
throw err;
|
|
2889
3005
|
}
|
|
2890
3006
|
newManaged.pendingWaiters--;
|
|
@@ -2895,6 +3011,15 @@ class LspManager {
|
|
|
2895
3011
|
await this.tryDeleteIfOrphaned(key, newManaged);
|
|
2896
3012
|
signal.throwIfAborted();
|
|
2897
3013
|
}
|
|
3014
|
+
if (!client.isAlive()) {
|
|
3015
|
+
this.recordDeadGeneration(key);
|
|
3016
|
+
if (this.clients.get(key) === newManaged) {
|
|
3017
|
+
this.clients.delete(key);
|
|
3018
|
+
}
|
|
3019
|
+
await this.tombstoneStop(key, client);
|
|
3020
|
+
return this.getClient(root, server, signal);
|
|
3021
|
+
}
|
|
3022
|
+
this.markHealthyGeneration(key);
|
|
2898
3023
|
newManaged.refCount++;
|
|
2899
3024
|
newManaged.lastUsedAt = this.now();
|
|
2900
3025
|
return client;
|
|
@@ -2915,14 +3040,20 @@ class LspManager {
|
|
|
2915
3040
|
if (client && managed.client !== client)
|
|
2916
3041
|
return;
|
|
2917
3042
|
this.clients.delete(key);
|
|
2918
|
-
|
|
3043
|
+
this.tombstoneStop(key, managed.client);
|
|
2919
3044
|
}
|
|
2920
3045
|
warmupClient(root, server) {
|
|
2921
3046
|
if (this.disposed)
|
|
2922
3047
|
return;
|
|
2923
3048
|
const key = this.getKey(root, server.id);
|
|
2924
|
-
if (this.clients.has(key))
|
|
3049
|
+
if (this.clients.has(key) || this.pendingStops.has(key))
|
|
3050
|
+
return;
|
|
3051
|
+
this.evictForAdmission();
|
|
3052
|
+
try {
|
|
3053
|
+
this.ensureRespawnAllowed(key, root, server.id);
|
|
3054
|
+
} catch {
|
|
2925
3055
|
return;
|
|
3056
|
+
}
|
|
2926
3057
|
const client = this.clientFactory(root, server);
|
|
2927
3058
|
const initStartedAt = this.now();
|
|
2928
3059
|
const initPromise = (async () => {
|
|
@@ -2948,7 +3079,7 @@ class LspManager {
|
|
|
2948
3079
|
if (this.clients.get(key) === managed) {
|
|
2949
3080
|
this.clients.delete(key);
|
|
2950
3081
|
}
|
|
2951
|
-
|
|
3082
|
+
this.tombstoneStop(key, client);
|
|
2952
3083
|
});
|
|
2953
3084
|
}
|
|
2954
3085
|
isServerInitializing(root, serverId) {
|
|
@@ -2992,8 +3123,11 @@ class LspManager {
|
|
|
2992
3123
|
for (const managed of this.clients.values()) {
|
|
2993
3124
|
stopPromises.push(stopClientBestEffort(managed.client));
|
|
2994
3125
|
}
|
|
3126
|
+
const tombstonedStops = [...this.pendingStops.values()];
|
|
2995
3127
|
this.clients.clear();
|
|
2996
|
-
|
|
3128
|
+
this.respawnBudgets.clear();
|
|
3129
|
+
await Promise.allSettled([...stopPromises, ...tombstonedStops]);
|
|
3130
|
+
this.pendingStops.clear();
|
|
2997
3131
|
}
|
|
2998
3132
|
}
|
|
2999
3133
|
var _defaultInstance = null;
|
|
@@ -3011,7 +3145,7 @@ async function disposeDefaultLspManager() {
|
|
|
3011
3145
|
}
|
|
3012
3146
|
}
|
|
3013
3147
|
export {
|
|
3014
|
-
|
|
3148
|
+
LspManager,
|
|
3015
3149
|
disposeDefaultLspManager,
|
|
3016
|
-
|
|
3150
|
+
getLspManager
|
|
3017
3151
|
};
|