@skillcap/gdh 0.25.4 → 0.26.0

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.
Files changed (72) hide show
  1. package/INSTALL-BUNDLE.json +1 -1
  2. package/RELEASE-SPAN-UPDATE-CONTRACTS.json +147 -0
  3. package/node_modules/@gdh/adapters/dist/claude-settings-patch.d.ts.map +1 -1
  4. package/node_modules/@gdh/adapters/dist/claude-settings-patch.js +38 -15
  5. package/node_modules/@gdh/adapters/dist/claude-settings-patch.js.map +1 -1
  6. package/node_modules/@gdh/adapters/dist/index.d.ts +12 -0
  7. package/node_modules/@gdh/adapters/dist/index.d.ts.map +1 -1
  8. package/node_modules/@gdh/adapters/dist/index.js +21 -0
  9. package/node_modules/@gdh/adapters/dist/index.js.map +1 -1
  10. package/node_modules/@gdh/adapters/dist/self-update-mechanics.d.ts.map +1 -1
  11. package/node_modules/@gdh/adapters/dist/self-update-mechanics.js +49 -16
  12. package/node_modules/@gdh/adapters/dist/self-update-mechanics.js.map +1 -1
  13. package/node_modules/@gdh/adapters/dist/skill-rendering.d.ts +5 -2
  14. package/node_modules/@gdh/adapters/dist/skill-rendering.d.ts.map +1 -1
  15. package/node_modules/@gdh/adapters/dist/skill-rendering.js +39 -0
  16. package/node_modules/@gdh/adapters/dist/skill-rendering.js.map +1 -1
  17. package/node_modules/@gdh/adapters/dist/templates/authoring-hook.js.tpl +200 -15
  18. package/node_modules/@gdh/adapters/package.json +8 -8
  19. package/node_modules/@gdh/authoring/dist/diagnostics-broker-contract.d.ts +1 -0
  20. package/node_modules/@gdh/authoring/dist/diagnostics-broker-contract.d.ts.map +1 -1
  21. package/node_modules/@gdh/authoring/dist/diagnostics-broker-contract.js +1 -0
  22. package/node_modules/@gdh/authoring/dist/diagnostics-broker-contract.js.map +1 -1
  23. package/node_modules/@gdh/authoring/dist/diagnostics-broker.d.ts +2 -1
  24. package/node_modules/@gdh/authoring/dist/diagnostics-broker.d.ts.map +1 -1
  25. package/node_modules/@gdh/authoring/dist/diagnostics-broker.js +91 -13
  26. package/node_modules/@gdh/authoring/dist/diagnostics-broker.js.map +1 -1
  27. package/node_modules/@gdh/authoring/dist/index.d.ts +1 -1
  28. package/node_modules/@gdh/authoring/dist/index.d.ts.map +1 -1
  29. package/node_modules/@gdh/authoring/dist/index.js +2 -1
  30. package/node_modules/@gdh/authoring/dist/index.js.map +1 -1
  31. package/node_modules/@gdh/authoring/dist/lsp-warmup.d.ts +30 -0
  32. package/node_modules/@gdh/authoring/dist/lsp-warmup.d.ts.map +1 -0
  33. package/node_modules/@gdh/authoring/dist/lsp-warmup.js +213 -0
  34. package/node_modules/@gdh/authoring/dist/lsp-warmup.js.map +1 -0
  35. package/node_modules/@gdh/authoring/dist/lsp.d.ts +8 -1
  36. package/node_modules/@gdh/authoring/dist/lsp.d.ts.map +1 -1
  37. package/node_modules/@gdh/authoring/dist/lsp.js +256 -104
  38. package/node_modules/@gdh/authoring/dist/lsp.js.map +1 -1
  39. package/node_modules/@gdh/authoring/dist/scene-resource.d.ts.map +1 -1
  40. package/node_modules/@gdh/authoring/dist/scene-resource.js +140 -0
  41. package/node_modules/@gdh/authoring/dist/scene-resource.js.map +1 -1
  42. package/node_modules/@gdh/authoring/package.json +2 -2
  43. package/node_modules/@gdh/cli/dist/index.d.ts.map +1 -1
  44. package/node_modules/@gdh/cli/dist/index.js +75 -10
  45. package/node_modules/@gdh/cli/dist/index.js.map +1 -1
  46. package/node_modules/@gdh/cli/dist/self-update.d.ts.map +1 -1
  47. package/node_modules/@gdh/cli/dist/self-update.js +66 -10
  48. package/node_modules/@gdh/cli/dist/self-update.js.map +1 -1
  49. package/node_modules/@gdh/cli/package.json +10 -10
  50. package/node_modules/@gdh/core/dist/index.d.ts +178 -6
  51. package/node_modules/@gdh/core/dist/index.d.ts.map +1 -1
  52. package/node_modules/@gdh/core/dist/index.js +44 -4
  53. package/node_modules/@gdh/core/dist/index.js.map +1 -1
  54. package/node_modules/@gdh/core/dist/migrations/managed-surface-classes.d.ts +15 -0
  55. package/node_modules/@gdh/core/dist/migrations/managed-surface-classes.d.ts.map +1 -1
  56. package/node_modules/@gdh/core/dist/migrations/managed-surface-classes.js +18 -0
  57. package/node_modules/@gdh/core/dist/migrations/managed-surface-classes.js.map +1 -1
  58. package/node_modules/@gdh/core/dist/migrations/managed-target-surface-inventory.d.ts.map +1 -1
  59. package/node_modules/@gdh/core/dist/migrations/managed-target-surface-inventory.js +2 -0
  60. package/node_modules/@gdh/core/dist/migrations/managed-target-surface-inventory.js.map +1 -1
  61. package/node_modules/@gdh/core/package.json +1 -1
  62. package/node_modules/@gdh/docs/dist/templates/guidance/authoring-and-validation.md.tpl +4 -5
  63. package/node_modules/@gdh/docs/package.json +2 -2
  64. package/node_modules/@gdh/mcp/dist/index.d.ts.map +1 -1
  65. package/node_modules/@gdh/mcp/dist/index.js +30 -1
  66. package/node_modules/@gdh/mcp/dist/index.js.map +1 -1
  67. package/node_modules/@gdh/mcp/package.json +8 -8
  68. package/node_modules/@gdh/observability/package.json +2 -2
  69. package/node_modules/@gdh/runtime/package.json +2 -2
  70. package/node_modules/@gdh/scan/package.json +3 -3
  71. package/node_modules/@gdh/verify/package.json +7 -7
  72. package/package.json +11 -11
@@ -0,0 +1,213 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ //
3
+ // Phase 82 / LSP-02 / LSP-07 — managed-LSP warmup implementation.
4
+ //
5
+ // This module hosts the implementation of `warmupManagedLsp`. The wrapper
6
+ // in `lsp.ts` defers to this module via a dynamic `await import("./lsp-warmup.js")`
7
+ // at call time. The deferral ensures that `lsp-warmup.ts` is NOT a static
8
+ // dependency of `lsp.ts`; under unit test, this lets vitest's
9
+ // `vi.mock("./lsp.js", ...)` factory register BEFORE this module is loaded,
10
+ // so the static `import { getManagedLspStatus } from "./lsp.js"` below
11
+ // resolves through the mocked module instead of capturing the real
12
+ // (original) function from a partially-evaluated module record.
13
+ //
14
+ // The warmup lock lives at `<targetPath>/.gdh-state/lsp.lock` — distinct
15
+ // from the lifecycle lock at `<targetPath>/.gdh-state/authoring/lsp.lock`
16
+ // used by `getManagedLspStatus`/`acquireManagedLspStateLock`. Warmup needs
17
+ // its own non-blocking lock so a busy lifecycle command does not stall
18
+ // post-edit hook spawns, and so the warmup-specific "warming" state is
19
+ // observable without taking the lifecycle lock. The schema is identical
20
+ // (lockId/owner/pid/acquiredAt/staleAfterMs/acquireTimeoutMs/schemaVersion=1)
21
+ // so existing inspection tooling reads either lock with the same parser.
22
+ import { randomUUID } from "node:crypto";
23
+ import fs from "node:fs/promises";
24
+ import path from "node:path";
25
+ import { getManagedLspStatus } from "./lsp.js";
26
+ // ─── Lock metadata schema ────────────────────────────────────────────────────
27
+ // Matches the lifecycle-lock schema in lsp.ts so a single inspector can read
28
+ // either lock without branching on placement.
29
+ const WARMUP_LOCK_SCHEMA_VERSION = 1;
30
+ const WARMUP_LOCK_STALE_AFTER_MS = 30_000;
31
+ const WARMUP_LOCK_ACQUIRE_TIMEOUT_MS = 5_000;
32
+ function isPidAliveLocal(pid) {
33
+ try {
34
+ process.kill(pid, 0);
35
+ return true;
36
+ }
37
+ catch (error) {
38
+ const code = error.code;
39
+ // EPERM means the PID exists but is owned by another user — treat as alive.
40
+ return code === "EPERM";
41
+ }
42
+ }
43
+ async function detectStaleReason(metadataPath) {
44
+ const content = await fs.readFile(metadataPath, "utf8").catch(() => null);
45
+ if (content === null) {
46
+ const lockStats = await fs.stat(path.dirname(metadataPath)).catch(() => null);
47
+ if (lockStats !== null && Date.now() - lockStats.mtimeMs >= WARMUP_LOCK_STALE_AFTER_MS) {
48
+ return "lsp_state_lock_metadata_invalid";
49
+ }
50
+ return null;
51
+ }
52
+ let metadata;
53
+ try {
54
+ metadata = JSON.parse(content);
55
+ }
56
+ catch {
57
+ return "lsp_state_lock_metadata_invalid";
58
+ }
59
+ if (metadata.schemaVersion !== WARMUP_LOCK_SCHEMA_VERSION ||
60
+ typeof metadata.pid !== "number" ||
61
+ typeof metadata.acquiredAt !== "string") {
62
+ return "lsp_state_lock_metadata_invalid";
63
+ }
64
+ if (!isPidAliveLocal(metadata.pid)) {
65
+ return "lsp_state_lock_recovered_dead_pid";
66
+ }
67
+ const staleAfterMs = typeof metadata.staleAfterMs === "number"
68
+ ? metadata.staleAfterMs
69
+ : WARMUP_LOCK_STALE_AFTER_MS;
70
+ if (Date.now() - Date.parse(metadata.acquiredAt) >= staleAfterMs) {
71
+ return "lsp_state_lock_recovered_expired";
72
+ }
73
+ return null;
74
+ }
75
+ /**
76
+ * Phase 82 / LSP-02. Single-attempt acquire of `<stateRoot>/lsp.lock`.
77
+ *
78
+ * Returns the acquired lock on success, or `null` immediately when the lock
79
+ * is already held by a live owner. Performs at most ONE stale-recovery
80
+ * attempt (mirroring the lifecycle acquire loop's recover-and-continue
81
+ * branch) so a stale lock left by a crashed warmup does not permanently
82
+ * wedge the surface.
83
+ *
84
+ * Critically, this helper does NOT spin on a retry delay — a second
85
+ * concurrent post-edit hook never blocks; it returns null and the caller
86
+ * maps that to {@link GdhAuthoringLspWarmupResult} `status: "warming"`.
87
+ */
88
+ async function tryAcquireManagedLspStateLockOnce(stateRootPath, owner) {
89
+ await fs.mkdir(stateRootPath, { recursive: true });
90
+ const lockPath = path.join(stateRootPath, "lsp.lock");
91
+ const metadataPath = path.join(lockPath, "metadata.json");
92
+ for (let attempt = 0; attempt < 2; attempt++) {
93
+ const record = {
94
+ schemaVersion: WARMUP_LOCK_SCHEMA_VERSION,
95
+ lockId: randomUUID(),
96
+ owner,
97
+ pid: process.pid,
98
+ acquiredAt: new Date().toISOString(),
99
+ staleAfterMs: WARMUP_LOCK_STALE_AFTER_MS,
100
+ acquireTimeoutMs: WARMUP_LOCK_ACQUIRE_TIMEOUT_MS,
101
+ };
102
+ try {
103
+ await fs.mkdir(lockPath);
104
+ await fs.writeFile(metadataPath, JSON.stringify(record, null, 2), "utf8");
105
+ return { lockId: record.lockId, stateRootPath };
106
+ }
107
+ catch (error) {
108
+ const code = error.code;
109
+ if (code !== "EEXIST") {
110
+ throw error;
111
+ }
112
+ const staleReason = await detectStaleReason(metadataPath);
113
+ if (staleReason !== null && attempt === 0) {
114
+ // Stale lock — clear it and retry once.
115
+ await fs.rm(lockPath, { recursive: true, force: true });
116
+ continue;
117
+ }
118
+ // Either the lock is held by a live owner OR stale-recovery was
119
+ // already attempted on the first iteration — return null so the
120
+ // caller surfaces "warming" without blocking.
121
+ return null;
122
+ }
123
+ }
124
+ return null;
125
+ }
126
+ async function releaseWarmupLock(lock) {
127
+ const lockPath = path.join(lock.stateRootPath, "lsp.lock");
128
+ const metadataPath = path.join(lockPath, "metadata.json");
129
+ // Only release the lock if we still own it (lockId matches). This guards
130
+ // against double-release across stale-recovery race conditions.
131
+ const content = await fs.readFile(metadataPath, "utf8").catch(() => null);
132
+ if (content === null) {
133
+ return;
134
+ }
135
+ let metadata;
136
+ try {
137
+ metadata = JSON.parse(content);
138
+ }
139
+ catch {
140
+ return;
141
+ }
142
+ if (metadata.lockId !== lock.lockId) {
143
+ return;
144
+ }
145
+ await fs.rm(lockPath, { recursive: true, force: true });
146
+ }
147
+ /**
148
+ * Phase 82 / LSP-02 / LSP-07. Idempotently warm up the managed Godot LSP for
149
+ * the given target so subsequent post-edit authoring checks return fast
150
+ * diagnostics from a healthy LSP instance.
151
+ *
152
+ * Flow:
153
+ * 1. Cheap probe via `getManagedLspStatus({ launchPolicy: "reuse_existing" })`
154
+ * — never spawns Godot, never takes the lifecycle lock. If the probe says
155
+ * `availability: "available"`, return `already_warm` without taking any
156
+ * lock.
157
+ * 2. Phase 81 D-17 propagation: if the probe surfaces a `versionFloorAdvisory`
158
+ * (Godot 4.5.0/4.5.1), return `blocked` with the advisory verbatim. No
159
+ * launch attempt; no lock acquisition.
160
+ * 3. Single-attempt acquire of `<targetPath>/.gdh-state/lsp.lock`. If another
161
+ * live owner holds it, return `warming`. Otherwise call `getManagedLspStatus`
162
+ * with `launchPolicy: "launch_if_needed"`, release the lock in `finally`,
163
+ * and return `started`.
164
+ *
165
+ * Idempotent under concurrent callers: at most one launch happens; the
166
+ * second caller sees `warming` and the agent renders the in-flight warmup as
167
+ * `additionalContext: "warming_up"` (Phase 82 / LSP-03).
168
+ */
169
+ export async function warmupManagedLsp(input) {
170
+ const { targetPath, status, projectConfig, owner } = input;
171
+ // Step 1: cheap probe — never spawns Godot, never takes the warmup lock.
172
+ const probe = await getManagedLspStatus({
173
+ targetPath,
174
+ status,
175
+ projectConfig,
176
+ owner: `${owner} probe`,
177
+ launchPolicy: "reuse_existing",
178
+ });
179
+ if (probe.availability === "available") {
180
+ return { status: "already_warm", targetPath };
181
+ }
182
+ // Phase 81 / LSP-08 / D-17 propagation: refuse-to-launch on 4.5.0/4.5.1.
183
+ // The advisory comes from getManagedLspStatus; warmup never re-implements
184
+ // the version probe.
185
+ if (probe.versionFloorAdvisory != null) {
186
+ return {
187
+ status: "blocked",
188
+ targetPath,
189
+ versionFloorAdvisory: probe.versionFloorAdvisory,
190
+ };
191
+ }
192
+ // Step 2: try to take the warmup lock without blocking.
193
+ const stateRootPath = path.join(path.resolve(targetPath), ".gdh-state");
194
+ const lock = await tryAcquireManagedLspStateLockOnce(stateRootPath, owner);
195
+ if (lock === null) {
196
+ return { status: "warming", targetPath };
197
+ }
198
+ // Step 3: launch (release the warmup lock in finally regardless of outcome).
199
+ try {
200
+ await getManagedLspStatus({
201
+ targetPath,
202
+ status,
203
+ projectConfig,
204
+ owner: `${owner} launch`,
205
+ launchPolicy: "launch_if_needed",
206
+ });
207
+ return { status: "started", targetPath };
208
+ }
209
+ finally {
210
+ await releaseWarmupLock(lock);
211
+ }
212
+ }
213
+ //# sourceMappingURL=lsp-warmup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsp-warmup.js","sourceRoot":"","sources":["../src/lsp-warmup.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { GdhAuthoringCheckResult, GdhAuthoringSeverityPolicy, GdhAuthoringStatusResult, GdhLspLauncherKind, GdhManagedLspStatusResult, GdhProjectConfig, GdhWorktreeIdentity } from "@gdh/core";
1
+ import type { GdhAuthoringCheckResult, GdhAuthoringLspWarmupResult, GdhAuthoringSeverityPolicy, GdhAuthoringStatusResult, GdhLspLauncherKind, GdhManagedLspStatusResult, GdhProjectConfig, GdhWorktreeIdentity } from "@gdh/core";
2
2
  type GdhManagedLspLifecycleCommand = "check" | "stop" | "restart" | "prune" | "doctor";
3
3
  type GdhManagedLspLifecycleCommandStatus = "ready" | "degraded" | "unavailable" | "stopped" | "pruned" | "not_found";
4
4
  export interface GdhManagedLspLifecycleCommandResult {
@@ -38,7 +38,14 @@ export declare function getManagedLspStatus(input: {
38
38
  readonly status: GdhAuthoringStatusResult;
39
39
  readonly projectConfig: GdhProjectConfig | null;
40
40
  readonly owner?: string;
41
+ readonly launchPolicy?: "launch_if_needed" | "reuse_existing";
41
42
  }): Promise<GdhManagedLspStatusResult>;
43
+ export declare function warmupManagedLsp(input: {
44
+ readonly targetPath: string;
45
+ readonly status: GdhAuthoringStatusResult;
46
+ readonly projectConfig: GdhProjectConfig | null;
47
+ readonly owner: string;
48
+ }): Promise<GdhAuthoringLspWarmupResult>;
42
49
  export declare function checkManagedLsp(input: {
43
50
  readonly targetPath: string;
44
51
  readonly status: GdhAuthoringStatusResult;
@@ -1 +1 @@
1
- {"version":3,"file":"lsp.d.ts","sourceRoot":"","sources":["../src/lsp.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,uBAAuB,EAEvB,0BAA0B,EAC1B,wBAAwB,EAExB,kBAAkB,EAKlB,yBAAyB,EACzB,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,WAAW,CAAC;AAqInB,KAAK,6BAA6B,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AACvF,KAAK,mCAAmC,GACpC,OAAO,GACP,UAAU,GACV,aAAa,GACb,SAAS,GACT,QAAQ,GACR,WAAW,CAAC;AAEhB,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,6BAA6B,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,mCAAmC,CAAC;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,CAAC,MAAM,EAAE,mCAAmC,CAAC;QACrD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;QAC7C,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,CAAC;IACF,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;QACrD,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;QACpC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;KAC/D,CAAC;IACF,QAAQ,CAAC,WAAW,EAAE;QACpB,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;QACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,YAAY,CAAC;QAC9E,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAC/B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;KAC7B,CAAC;IACF,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,YAAY,EAAE,yBAAyB,GAAG,IAAI,CAAC;CACzD;AA+FD,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAChD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAAC,yBAAyB,CAAC,CA0LrC;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,gBAAgB,GAAG,IAAI,CAAC;CACjD,GAAG,OAAO,CAAC,mCAAmC,CAAC,CA6G/C;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAC1C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,gBAAgB,GAAG,IAAI,CAAC;CACjD,GAAG,OAAO,CAAC,mCAAmC,CAAC,CAyD/C;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE;IAC7C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAChD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAAC,mCAAmC,CAAC,CAgC/C;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,gBAAgB,GAAG,IAAI,CAAC;CACjD,GAAG,OAAO,CAAC,mCAAmC,CAAC,CA0H/C;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE;IAC5C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,gBAAgB,GAAG,IAAI,CAAC;CACjD,GAAG,OAAO,CAAC,mCAAmC,CAAC,CAmB/C;AAED,wBAAsB,wBAAwB,CAAC,KAAK,EAAE;IACpD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAChD,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;IAC9C,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,cAAc,CAAC,EAAE,0BAA0B,CAAC;CACtD,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAwNnC;AAySD,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,SAAS,MAAM,EAAE,EACjC,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CA6B5B;AA4HD,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,CAE9D"}
1
+ {"version":3,"file":"lsp.d.ts","sourceRoot":"","sources":["../src/lsp.ts"],"names":[],"mappings":"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"}