@smthrs/std 1.0.0-rc.4 → 1.0.0-rc.6

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 (69) hide show
  1. package/README.md +3 -3
  2. package/dist/cjs/ExaWebSearch.js +1 -1
  3. package/dist/cjs/ExaWebSearch.js.map +1 -1
  4. package/dist/cjs/Fetch.d.ts +1 -1
  5. package/dist/cjs/Fetch.d.ts.map +1 -1
  6. package/dist/cjs/Fetch.js +1 -1
  7. package/dist/cjs/Fetch.js.map +2 -2
  8. package/dist/cjs/HttpPost.d.ts +1 -1
  9. package/dist/cjs/HttpPost.d.ts.map +1 -1
  10. package/dist/cjs/HttpPost.js +1 -1
  11. package/dist/cjs/HttpPost.js.map +2 -2
  12. package/dist/cjs/Lsp.d.ts +1 -1
  13. package/dist/cjs/Manifest.d.ts +8 -8
  14. package/dist/cjs/NodeLanguageServer.js +1 -1
  15. package/dist/cjs/NodeLanguageServer.js.map +1 -1
  16. package/dist/cjs/WebFetch.d.ts.map +1 -1
  17. package/dist/cjs/WebFetch.js +1 -1
  18. package/dist/cjs/WebFetch.js.map +2 -2
  19. package/dist/cjs/internal/Exec.d.ts.map +1 -1
  20. package/dist/cjs/internal/Exec.js +1 -1
  21. package/dist/cjs/internal/Exec.js.map +2 -2
  22. package/dist/cjs/internal/Http.d.ts +1 -1
  23. package/dist/cjs/internal/Http.d.ts.map +1 -1
  24. package/dist/cjs/internal/Http.js +1 -1
  25. package/dist/cjs/internal/Http.js.map +2 -2
  26. package/dist/cjs/internal/HttpNetwork.d.ts +2 -2
  27. package/dist/cjs/internal/HttpNetwork.d.ts.map +1 -1
  28. package/dist/cjs/internal/HttpNetwork.js +3 -3
  29. package/dist/cjs/internal/HttpNetwork.js.map +1 -1
  30. package/dist/esm/ExaWebSearch.js +1 -1
  31. package/dist/esm/ExaWebSearch.js.map +1 -1
  32. package/dist/esm/Fetch.d.ts +1 -1
  33. package/dist/esm/Fetch.d.ts.map +1 -1
  34. package/dist/esm/Fetch.js +1 -1
  35. package/dist/esm/Fetch.js.map +1 -1
  36. package/dist/esm/HttpPost.d.ts +1 -1
  37. package/dist/esm/HttpPost.d.ts.map +1 -1
  38. package/dist/esm/HttpPost.js +1 -1
  39. package/dist/esm/HttpPost.js.map +1 -1
  40. package/dist/esm/Lsp.d.ts +1 -1
  41. package/dist/esm/Manifest.d.ts +8 -8
  42. package/dist/esm/NodeLanguageServer.js +1 -1
  43. package/dist/esm/NodeLanguageServer.js.map +1 -1
  44. package/dist/esm/WebFetch.d.ts.map +1 -1
  45. package/dist/esm/WebFetch.js +1 -1
  46. package/dist/esm/WebFetch.js.map +1 -1
  47. package/dist/esm/internal/Exec.d.ts.map +1 -1
  48. package/dist/esm/internal/Exec.js +1 -1
  49. package/dist/esm/internal/Exec.js.map +1 -1
  50. package/dist/esm/internal/Http.d.ts +1 -1
  51. package/dist/esm/internal/Http.d.ts.map +1 -1
  52. package/dist/esm/internal/Http.js +1 -1
  53. package/dist/esm/internal/Http.js.map +1 -1
  54. package/dist/esm/internal/HttpNetwork.d.ts +2 -2
  55. package/dist/esm/internal/HttpNetwork.d.ts.map +1 -1
  56. package/dist/esm/internal/HttpNetwork.js +3 -3
  57. package/dist/esm/internal/HttpNetwork.js.map +1 -1
  58. package/docs/guides/run-a-shell-command.md +8 -0
  59. package/docs/installation.md +1 -1
  60. package/docs/troubleshooting.md +5 -0
  61. package/package.json +10 -10
  62. package/src/ExaWebSearch.ts +1 -1
  63. package/src/Fetch.ts +1 -1
  64. package/src/HttpPost.ts +1 -1
  65. package/src/NodeLanguageServer.ts +1 -1
  66. package/src/WebFetch.ts +1 -1
  67. package/src/internal/Exec.ts +1 -1
  68. package/src/internal/Http.ts +1 -1
  69. package/src/internal/HttpNetwork.ts +3 -3
@@ -669,7 +669,7 @@ export declare const handlers: Readonly<{
669
669
  readonly message: string;
670
670
  } | undefined;
671
671
  readonly mutated?: boolean | undefined;
672
- }, import("./StdError.ts").StdError, import("@smthrs/kernel/ChildProcessSpawner").ChildProcessSpawner | import("effect/Path").Path>;
672
+ }, import("./StdError.ts").StdError, import("effect/process/ChildProcessSpawner").ChildProcessSpawner | import("effect/Path").Path>;
673
673
  test: (input: {
674
674
  readonly timeoutMs?: number | undefined;
675
675
  readonly selection?: readonly string[] | undefined;
@@ -708,7 +708,7 @@ export declare const handlers: Readonly<{
708
708
  } | undefined;
709
709
  readonly introduced?: readonly string[] | undefined;
710
710
  readonly preexisting?: readonly string[] | undefined;
711
- }, import("./StdError.ts").StdError, import("@smthrs/kernel/ChildProcessSpawner").ChildProcessSpawner | import("@smthrs/model/Evaluator").Evaluator | import("./TestRunner.ts").TestRunner>;
711
+ }, import("./StdError.ts").StdError, import("effect/process/ChildProcessSpawner").ChildProcessSpawner | import("@smthrs/model/Evaluator").Evaluator | import("./TestRunner.ts").TestRunner>;
712
712
  shell_command: (input: {
713
713
  readonly command: string;
714
714
  readonly workdir?: string | undefined;
@@ -716,7 +716,7 @@ export declare const handlers: Readonly<{
716
716
  }) => import("effect/Effect").Effect<{
717
717
  readonly output: string;
718
718
  readonly exitCode: number;
719
- }, import("./StdError.ts").StdError, import("@smthrs/kernel/ChildProcessSpawner").ChildProcessSpawner>;
719
+ }, import("./StdError.ts").StdError, import("effect/process/ChildProcessSpawner").ChildProcessSpawner>;
720
720
  apply_patch: (input: {
721
721
  readonly input: string;
722
722
  }) => import("effect/Effect").Effect<{
@@ -745,7 +745,7 @@ export declare const handlers: Readonly<{
745
745
  readonly body: string;
746
746
  readonly truncated: boolean;
747
747
  readonly notice?: string | undefined;
748
- }, import("./StdError.ts").StdError, import("@smthrs/kernel/GrantStore").GrantStore | import("@smthrs/kernel/HttpClient").HttpClient>;
748
+ }, import("./StdError.ts").StdError, import("@smthrs/kernel/GrantStore").GrantStore | import("effect/http/HttpClient").HttpClient>;
749
749
  "http-post": (input: {
750
750
  readonly body: string;
751
751
  readonly url: string;
@@ -759,7 +759,7 @@ export declare const handlers: Readonly<{
759
759
  readonly body: string;
760
760
  readonly truncated: boolean;
761
761
  readonly notice?: string | undefined;
762
- }, import("./StdError.ts").StdError, import("@smthrs/kernel/GrantStore").GrantStore | import("@smthrs/kernel/HttpClient").HttpClient>;
762
+ }, import("./StdError.ts").StdError, import("@smthrs/kernel/GrantStore").GrantStore | import("effect/http/HttpClient").HttpClient>;
763
763
  webfetch: (input: {
764
764
  readonly url: string;
765
765
  readonly timeout?: number | undefined;
@@ -771,7 +771,7 @@ export declare const handlers: Readonly<{
771
771
  readonly url: string;
772
772
  readonly truncated: boolean;
773
773
  readonly notice?: string | undefined;
774
- }, import("./StdError.ts").StdError, import("@smthrs/kernel/GrantStore").GrantStore | import("@smthrs/kernel/HttpClient").HttpClient>;
774
+ }, import("./StdError.ts").StdError, import("@smthrs/kernel/GrantStore").GrantStore | import("effect/http/HttpClient").HttpClient>;
775
775
  websearch: (input: {
776
776
  readonly query: string;
777
777
  readonly numResults?: number | undefined;
@@ -785,7 +785,7 @@ export declare const handlers: Readonly<{
785
785
  }[];
786
786
  }, import("./StdError.ts").StdError, WebSearch.WebSearch>;
787
787
  lsp: (input: {
788
- readonly operation: "hover" | "definition" | "references" | "implementation" | "documentSymbols" | "workspaceSymbols" | "prepareCallHierarchy" | "callHierarchyIncoming" | "callHierarchyOutgoing" | "diagnostics";
788
+ readonly operation: "references" | "hover" | "definition" | "implementation" | "documentSymbols" | "workspaceSymbols" | "prepareCallHierarchy" | "callHierarchyIncoming" | "callHierarchyOutgoing" | "diagnostics";
789
789
  readonly path?: string | undefined;
790
790
  readonly line?: number | undefined;
791
791
  readonly character?: number | undefined;
@@ -888,7 +888,7 @@ export declare const effectsFor: Readonly<{
888
888
  readonly freshness?: "day" | "week" | "month" | "year" | undefined;
889
889
  }) => import("@smthrs/plan/Effects").Declaration;
890
890
  lsp: (_input: {
891
- readonly operation: "hover" | "definition" | "references" | "implementation" | "documentSymbols" | "workspaceSymbols" | "prepareCallHierarchy" | "callHierarchyIncoming" | "callHierarchyOutgoing" | "diagnostics";
891
+ readonly operation: "references" | "hover" | "definition" | "implementation" | "documentSymbols" | "workspaceSymbols" | "prepareCallHierarchy" | "callHierarchyIncoming" | "callHierarchyOutgoing" | "diagnostics";
892
892
  readonly path?: string | undefined;
893
893
  readonly line?: number | undefined;
894
894
  readonly character?: number | undefined;
@@ -11,7 +11,7 @@
11
11
  import * as ChildProcessEnvironment from "@smthrs/kernel/ChildProcessEnvironment";
12
12
  import * as ChildProcessSpawner from "@smthrs/kernel/ChildProcessSpawner";
13
13
  import { Clock, Deferred, Effect, Fiber, Layer, Option, Queue, Semaphore, Stream } from "effect";
14
- import * as ChildProcess from "effect/unstable/process/ChildProcess";
14
+ import * as ChildProcess from "effect/process/ChildProcess";
15
15
  import { createHash } from "node:crypto";
16
16
  import * as NodeFs from "node:fs";
17
17
  import * as NodePath from "node:path";
@@ -1 +1 @@
1
- {"version":3,"file":"NodeLanguageServer.js","sourceRoot":"","sources":["../../src/NodeLanguageServer.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Host-backed Language Server Protocol client over the permission-checked\n * process spawner.\n *\n * LSP is framed JSON-RPC over ordinary stdio pipes, so the client spawns\n * through `@smthrs/kernel`'s `ChildProcessSpawner`; a terminal is never\n * involved.\n *\n * @since 1.0.0\n */\n\nimport * as ChildProcessEnvironment from \"@smthrs/kernel/ChildProcessEnvironment\"\nimport * as ChildProcessSpawner from \"@smthrs/kernel/ChildProcessSpawner\"\nimport { Clock, Deferred, Effect, Fiber, Layer, Option, Queue, type Scope, Semaphore, Stream } from \"effect\"\nimport * as ChildProcess from \"effect/unstable/process/ChildProcess\"\nimport { createHash } from \"node:crypto\"\nimport * as NodeFs from \"node:fs\"\nimport * as NodePath from \"node:path\"\nimport { fileURLToPath, pathToFileURL } from \"node:url\"\nimport * as LanguageServer from \"./LanguageServer.ts\"\nimport * as StdError from \"./StdError.ts\"\n\n/**\n * Maximum frames buffered for a language server's standard input.\n *\n * Bounded offers apply backpressure, and each offer uses the request timeout\n * so a server that stops reading produces a typed timeout instead of an\n * unbounded queue or a new hang.\n *\n * @category constants\n * @since 1.0.0\n */\nexport const MAX_QUEUED_FRAMES = 256\n\n/**\n * Maximum concurrent JSON-RPC requests awaiting a response.\n *\n * Every entry already has a timeout, and process exit or stdout closure fails\n * all entries. This cap is the last-resort bound for a host that fans out\n * requests without limit.\n *\n * @category constants\n * @since 1.0.0\n */\nexport const MAX_PENDING_REQUESTS = 512\n\nconst DEFAULT_SETTLE_MS = 5_000\nconst DEFAULT_QUIET_MS = 300\n\n/**\n * A request every server must refuse at once: the specification has a server\n * answer an unknown `$/` request with MethodNotFound.\n */\nconst BARRIER_METHOD = \"$/smithers/barrier\"\n/** A server that has not answered the barrier in this long is not asked again. */\nconst BARRIER_TIMEOUT_MS = 1_000\n\n/**\n * One host language-server process.\n *\n * Response headers may contain at most 8 KiB, and response bodies may contain\n * at most 8 MiB.\n *\n * @category models\n * @since 1.0.0\n */\nexport interface Config {\n /**\n * The file extensions this server answers for, such as `[\".ts\", \".tsx\"]`.\n * A server without `extensions` answers every file no other server claims.\n */\n readonly extensions?: ReadonlyArray<string> | undefined\n readonly command: string\n readonly args?: ReadonlyArray<string> | undefined\n readonly cwd: string\n readonly environment?: Readonly<Record<string, string>> | undefined\n /**\n * Sent as `initializationOptions` on `initialize`. A host pins where the\n * server loads its own code from here, for example\n * `{ tsserver: { path: \"<host copy>/tsserver.js\" } }` for\n * typescript-language-server, which otherwise runs the workspace's own\n * `node_modules/typescript`.\n */\n readonly initializationOptions?: unknown\n readonly timeoutMs?: number | undefined\n /**\n * How long `diagnostics` waits for a server without pull diagnostics to\n * publish for the latest synced text, then fails with `timeout`. Defaults to\n * 5 seconds. typescript-language-server publishes nothing for a change that\n * leaves a file with no problems, so such a change always waits this long.\n */\n readonly settleMs?: number | undefined\n /**\n * After a publish, how long `diagnostics` waits for a later one before\n * answering, within `settleMs`. A server may publish syntax errors before\n * semantic ones: typescript-language-server does on the first open of a\n * file. Defaults to 300 milliseconds.\n */\n readonly quietMs?: number | undefined\n}\n\ninterface JsonRpcMessage {\n readonly id?: unknown\n readonly method?: unknown\n readonly params?: unknown\n readonly result?: unknown\n readonly error?: unknown\n}\n\n/** JSON-RPC's code for a method the server does not implement. */\nconst METHOD_NOT_FOUND = -32601\n\nconst LANGUAGE_IDS: Readonly<Record<string, string>> = {\n \".ts\": \"typescript\",\n \".mts\": \"typescript\",\n \".cts\": \"typescript\",\n \".tsx\": \"typescriptreact\",\n \".js\": \"javascript\",\n \".mjs\": \"javascript\",\n \".cjs\": \"javascript\",\n \".jsx\": \"javascriptreact\",\n \".py\": \"python\",\n \".rs\": \"rust\",\n \".go\": \"go\",\n \".rb\": \"ruby\",\n \".sh\": \"shellscript\",\n \".md\": \"markdown\",\n \".yml\": \"yaml\",\n \".cc\": \"cpp\",\n \".cpp\": \"cpp\",\n \".hpp\": \"cpp\",\n \".cs\": \"csharp\"\n}\n\nconst extensionOf = (path: string): string => NodePath.extname(path).toLowerCase()\n\nconst languageId = (path: string): string => {\n const extension = extensionOf(path)\n return LANGUAGE_IDS[extension] ?? (extension.slice(1) || \"plaintext\")\n}\n\ninterface FrameDecoder {\n readonly push: (chunk: Uint8Array) => ReadonlyArray<FrameEvent>\n}\n\ntype FrameEvent =\n | { readonly _tag: \"Message\"; readonly value: unknown }\n | { readonly _tag: \"Failure\"; readonly error: StdError.StdError; readonly id?: number | undefined }\n\nconst failure = (code: StdError.Code, message: string): StdError.StdError => new StdError.StdError({ code, message })\n\nconst maximumHeaderBytes = 8 * 1024\nconst maximumFrameBytes = 8 * 1024 * 1024\nconst headerEnd = new Uint8Array([13, 10, 13, 10])\nconst contentLengthPrefix = new TextEncoder().encode(\"Content-Length:\")\n\nconst concatenate = (left: Uint8Array, right: Uint8Array): Uint8Array => {\n const combined = new Uint8Array(left.length + right.length)\n combined.set(left)\n combined.set(right, left.length)\n return combined\n}\n\ninterface ChunkBuffer {\n readonly length: number\n readonly push: (chunk: Uint8Array) => void\n readonly indexOf: (needle: Uint8Array) => number\n // Counts come from delimiter offsets or validated Content-Length values.\n // A reader can only be acquired for an available, nonnegative prefix.\n readonly prefix: (length: number) => {\n readonly take: () => Uint8Array\n readonly discard: () => void\n } | undefined\n}\n\nconst makeChunkBuffer = (): ChunkBuffer => {\n let chunks: Array<Uint8Array> = []\n let head = 0\n let headOffset = 0\n let length = 0\n\n const compact = (): void => {\n if (head === chunks.length) {\n chunks = []\n head = 0\n headOffset = 0\n } else if (head >= 64 && head * 2 >= chunks.length) {\n chunks = chunks.slice(head)\n head = 0\n }\n }\n\n const consume = (count: number, output?: Uint8Array): void => {\n let remaining = count\n let outputOffset = 0\n for (const chunk of chunks.slice(head)) {\n if (remaining === 0) break\n const available = chunk.byteLength - headOffset\n const consumed = Math.min(available, remaining)\n if (output !== undefined) {\n output.set(chunk.subarray(headOffset, headOffset + consumed), outputOffset)\n outputOffset += consumed\n }\n headOffset += consumed\n length -= consumed\n remaining -= consumed\n if (headOffset === chunk.byteLength) {\n head++\n headOffset = 0\n }\n }\n compact()\n }\n\n return {\n get length() {\n return length\n },\n push: (chunk) => {\n if (chunk.byteLength === 0) return\n // Own the bytes so caller mutation or resizing cannot change buffered lengths.\n chunks.push(chunk.slice())\n length += chunk.byteLength\n },\n indexOf: (needle) => {\n let absolute = 0\n let matched = 0\n for (let chunkIndex = head; chunkIndex < chunks.length; chunkIndex++) {\n const chunk = chunks[chunkIndex]!\n const start = chunkIndex === head ? headOffset : 0\n for (let index = start; index < chunk.byteLength; index++) {\n const byte = chunk[index]\n if (byte === needle[matched]) matched++\n else matched = byte === needle[0] ? 1 : 0\n if (matched === needle.byteLength) return absolute - needle.byteLength + 1\n absolute++\n }\n }\n return -1\n },\n prefix: (count) => {\n if (count > length) return undefined\n return {\n take: () => {\n const output = new Uint8Array(count)\n consume(count, output)\n return output\n },\n discard: () => consume(count)\n }\n }\n }\n}\n\nconst malformedId = (body: string): number | undefined => {\n const match = /\"id\"\\s*:\\s*(\\d+)/.exec(body)\n if (match === null) return undefined\n const id = Number(match[1])\n return Number.isSafeInteger(id) ? id : undefined\n}\n\nconst makeFrameDecoder = (): FrameDecoder => {\n const pending = makeChunkBuffer()\n let bodyLength: number | undefined\n let resynchronizing = false\n return {\n push: (chunk) => {\n pending.push(chunk)\n const events: Array<FrameEvent> = []\n while (pending.length > 0 || bodyLength === 0) {\n if (resynchronizing) {\n const nextHeader = pending.indexOf(contentLengthPrefix)\n if (nextHeader < 0) {\n pending.prefix(Math.max(0, pending.length - contentLengthPrefix.byteLength + 1))!.discard()\n break\n }\n pending.prefix(nextHeader)!.discard()\n resynchronizing = false\n }\n if (bodyLength !== undefined) {\n const reader = pending.prefix(bodyLength)\n if (reader === undefined) break\n const body = new TextDecoder().decode(reader.take())\n bodyLength = undefined\n try {\n events.push({ _tag: \"Message\", value: JSON.parse(body) as unknown })\n } catch {\n events.push({\n _tag: \"Failure\",\n error: failure(\"request_failed\", \"Language server returned malformed JSON\"),\n id: malformedId(body)\n })\n }\n continue\n }\n const delimiter = pending.indexOf(headerEnd)\n if (delimiter < 0) {\n if (pending.length > maximumHeaderBytes) {\n events.push({\n _tag: \"Failure\",\n error: failure(\n \"request_failed\",\n `Language server frame header exceeded ${maximumHeaderBytes} bytes`\n )\n })\n pending.prefix(1)!.discard()\n resynchronizing = true\n continue\n }\n break\n }\n if (delimiter > maximumHeaderBytes) {\n events.push({\n _tag: \"Failure\",\n error: failure(\"request_failed\", `Language server frame header exceeded ${maximumHeaderBytes} bytes`)\n })\n pending.prefix(delimiter + headerEnd.byteLength)!.discard()\n resynchronizing = true\n continue\n }\n const header = new TextDecoder().decode(pending.prefix(delimiter)!.take())\n pending.prefix(headerEnd.byteLength)!.discard()\n const match = /(?:^|\\r\\n)Content-Length:\\s*(\\d+)(?:\\r\\n|$)/i.exec(header)\n if (match === null) {\n events.push({\n _tag: \"Failure\",\n error: failure(\"request_failed\", \"Language server frame omitted Content-Length\")\n })\n resynchronizing = true\n continue\n }\n const length = Number(match[1])\n if (!Number.isSafeInteger(length) || length < 0 || length > maximumFrameBytes) {\n events.push({\n _tag: \"Failure\",\n error: failure(\"request_failed\", `Language server frame exceeded ${maximumFrameBytes} bytes`)\n })\n resynchronizing = true\n continue\n }\n bodyLength = length\n }\n return events\n }\n }\n}\n\nconst asMessage = (value: unknown): JsonRpcMessage | undefined =>\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? value\n : undefined\n\nconst frame = (message: unknown): Uint8Array => {\n const body = new TextEncoder().encode(JSON.stringify(message))\n const header = new TextEncoder().encode(`Content-Length: ${body.byteLength}\\r\\n\\r\\n`)\n return concatenate(header, body)\n}\n\nconst firstCallHierarchyItem = (value: unknown): unknown | undefined => Array.isArray(value) ? value[0] : undefined\n\nconst isFile = (path: string): boolean => {\n try {\n return NodeFs.statSync(path, { throwIfNoEntry: false })?.isFile() === true\n } catch {\n return false\n }\n}\n\n/** Whether anything, a file or a directory, exists at `path`. */\nconst exists = (path: string): boolean => {\n try {\n return NodeFs.statSync(path, { throwIfNoEntry: false }) !== undefined\n } catch {\n return false\n }\n}\n\nconst realPath = (path: string): string => {\n try {\n return NodeFs.realpathSync(path)\n } catch {\n return NodePath.resolve(path)\n }\n}\n\nconst isWithin = (root: string, path: string): boolean => {\n const relative = NodePath.relative(root, path)\n return relative === \"\" || (relative !== \"..\" && !relative.startsWith(`..${NodePath.sep}`) &&\n !NodePath.isAbsolute(relative))\n}\n\n/**\n * Resolves the program a spawn would execute: a command containing a path\n * separator against `cwd`, a bare name through the child's `PATH`, where an\n * empty or relative entry is relative to `cwd`.\n */\nconst resolveCommand = (command: string, cwd: string, path: string | undefined): string | undefined => {\n if (command.includes(\"/\") || command.includes(NodePath.sep)) {\n const candidate = NodePath.resolve(cwd, command)\n return isFile(candidate) ? candidate : undefined\n }\n for (const entry of (path ?? \"\").split(NodePath.delimiter)) {\n const candidate = NodePath.resolve(cwd, entry, command)\n if (!isFile(candidate)) continue\n try {\n NodeFs.accessSync(candidate, NodeFs.constants.X_OK)\n return candidate\n } catch {\n continue\n }\n }\n return undefined\n}\n\n/**\n * Refuses a server whose program or any file-naming argument lies in the\n * workspace. The server runs on the host as the host user, so a program the\n * workspace supplies (its `node_modules/.bin`, a `./` script, a symlink it\n * planted) would let workspace files choose what the host executes.\n */\n/**\n * Programs whose job is to run another program named in their arguments or\n * found in the working directory: shells, `env`, and package runners. Their\n * arguments are code or package names, not files, so the workspace check below\n * cannot see what they would execute (`sh -c node_modules/.bin/x`, `npx x`).\n */\nconst LAUNCHERS = new Set([\n \"sh\",\n \"bash\",\n \"zsh\",\n \"dash\",\n \"ksh\",\n \"fish\",\n \"csh\",\n \"tcsh\",\n \"env\",\n \"npx\",\n \"pnpx\",\n \"npm\",\n \"pnpm\",\n \"yarn\",\n \"bunx\",\n \"deno\",\n \"cmd\",\n \"powershell\",\n \"pwsh\"\n])\n\n/** Interpreter flags that take code or a module to load instead of a file path. */\nconst CODE_FLAGS = new Set([\"-e\", \"--eval\", \"-p\", \"--print\", \"-r\", \"--require\", \"--import\", \"--loader\"])\n\nconst launcher = (config: Config): string | undefined => {\n const name = NodePath.basename(config.command).toLowerCase().replace(/\\.(?:exe|cmd|bat|ps1)$/, \"\")\n if (LAUNCHERS.has(name)) return name\n if (name !== \"node\" && name !== \"bun\" && name !== \"nodejs\") return undefined\n const args = config.args ?? []\n if (name === \"bun\" && [\"x\", \"run\", \"exec\"].includes(args[0] ?? \"\")) return `bun ${args[0]}`\n const flag = args.find((argument) => CODE_FLAGS.has(argument.split(\"=\")[0]!) || argument === \"--experimental-loader\")\n return flag === undefined ? undefined : `${name} ${flag.split(\"=\")[0]}`\n}\n\nconst workspaceProgram = (\n config: Config,\n path: string | undefined\n): StdError.StdError | undefined => {\n const launching = launcher(config)\n if (launching !== undefined) {\n return failure(\n \"permission_denied\",\n `Language server command runs ${launching}, which executes a program its arguments or the workspace choose; name the server's own host binary instead`\n )\n }\n const lexicalRoot = NodePath.resolve(config.cwd)\n const realRoot = realPath(lexicalRoot)\n const inWorkspace = (file: string): boolean =>\n isWithin(lexicalRoot, file) || isWithin(realRoot, file) || isWithin(realRoot, realPath(file)) ||\n isWithin(lexicalRoot, realPath(file))\n const program = resolveCommand(config.command, lexicalRoot, path)\n if (program !== undefined && inWorkspace(program)) {\n return failure(\n \"permission_denied\",\n `Language server program ${program} is inside the workspace ${lexicalRoot}; run a host copy instead`\n )\n }\n for (const argument of config.args ?? []) {\n for (const value of [argument, argument.slice(argument.indexOf(\"=\") + 1)]) {\n if (value === \"\") continue\n const candidate = NodePath.resolve(lexicalRoot, value)\n // A directory counts: `node <dir>` runs `<dir>/index.js` or its package main.\n if (exists(candidate) && inWorkspace(candidate)) {\n return failure(\n \"permission_denied\",\n `Language server argument names ${candidate}, a path inside the workspace ${lexicalRoot}`\n )\n }\n }\n }\n return undefined\n}\n\ninterface PublishedDiagnostics {\n readonly version: number | undefined\n readonly sequence: number\n readonly diagnostics: ReadonlyArray<unknown>\n}\n\ninterface OpenDocument {\n readonly version: number\n /** The publish sequence number when this version was sent. */\n readonly sentAt: number\n /** The SHA-256 of the text last sent, so `refresh` resends only changed files. */\n readonly digest: string\n}\n\nconst digestOf = (text: string): string => createHash(\"sha256\").update(text).digest(\"hex\")\n\nconst makeClient = (\n config: Config\n): Effect.Effect<\n LanguageServer.LanguageServer,\n StdError.StdError,\n ChildProcessSpawner.ChildProcessSpawner | Scope.Scope\n> =>\n Effect.gen(function*() {\n const spawner = yield* ChildProcessSpawner.ChildProcessSpawner\n const timeoutMs = config.timeoutMs ?? 30_000\n const settleMs = config.settleMs ?? DEFAULT_SETTLE_MS\n const quietMs = config.quietMs ?? DEFAULT_QUIET_MS\n const env = ChildProcessEnvironment.make(process.env, config.environment)\n const refused = yield* Effect.sync(() => workspaceProgram(config, env.PATH))\n if (refused !== undefined) return yield* Effect.fail(refused)\n // The process's stdin is fed from this queue for the client's lifetime, so\n // each request is one offered frame and the pipe never closes between them.\n const input = yield* Queue.bounded<Uint8Array>(MAX_QUEUED_FRAMES)\n const handle = yield* spawner.spawn(\n ChildProcess.make(config.command, config.args ?? [], {\n cwd: config.cwd,\n env,\n extendEnv: false,\n stdin: { stream: Stream.fromQueue(input), endOnDone: false }\n })\n ).pipe(\n Effect.mapError((error) =>\n failure(\"provider_unavailable\", `Language server process could not be started: ${error.message}`)\n )\n )\n const pending = new Map<number, Deferred.Deferred<unknown, StdError.StdError>>()\n const decoder = makeFrameDecoder()\n let nextId = 1\n let terminalError: StdError.StdError | undefined\n\n // Keep draining stderr while requests run. Copy retained bytes so a small\n // tail never holds a larger backing buffer alive.\n const maximumStderrBytes = 64 * 1024\n let stderrTail: Uint8Array = new Uint8Array(0)\n const stderrFiber = yield* handle.stderr.pipe(\n Stream.runForEach((chunk) =>\n Effect.sync(() => {\n stderrTail = chunk.byteLength >= maximumStderrBytes\n ? chunk.slice(-maximumStderrBytes)\n : concatenate(\n stderrTail.slice(Math.max(0, stderrTail.byteLength + chunk.byteLength - maximumStderrBytes)),\n chunk\n )\n })\n ),\n Effect.catch((cause) => Effect.logWarning(\"Language server stderr stream failed\", cause)),\n Effect.forkScoped({ startImmediately: true })\n )\n const stderr = (): string => {\n let start = 0\n while (start < stderrTail.byteLength && start < 3 && (stderrTail[start]! & 0b1100_0000) === 0b1000_0000) start++\n return new TextDecoder().decode(stderrTail.subarray(start))\n }\n\n const failPending = (error: StdError.StdError): Effect.Effect<void> =>\n Effect.flatMap(\n Effect.sync(() => {\n const deferreds = [...pending.values()]\n pending.clear()\n return deferreds\n }),\n (deferreds) => Effect.forEach(deferreds, (deferred) => Deferred.fail(deferred, error), { discard: true })\n )\n\n const failRequest = (id: number, error: StdError.StdError): Effect.Effect<void> => {\n const deferred = pending.get(id)\n if (deferred === undefined) return Effect.void\n pending.delete(id)\n return Deferred.fail(deferred, error).pipe(Effect.asVoid)\n }\n\n const closeWith = (error: StdError.StdError): Effect.Effect<void> =>\n Effect.gen(function*() {\n // stdout EOF and process exit can arrive before the last stderr chunk.\n // A bounded grace also handles servers that close stdout but stay alive.\n yield* Fiber.await(stderrFiber).pipe(Effect.timeoutOption(100))\n terminalError ??= error\n yield* failPending(terminalError)\n })\n\n const uriOf = (path: string): string => pathToFileURL(NodePath.resolve(config.cwd, path)).href\n const documents = new Map<string, OpenDocument>()\n // Versions keep climbing across a close and reopen, so a late publish for\n // the closed text never passes for the reopened one.\n const versions = new Map<string, number>()\n const published = new Map<string, PublishedDiagnostics>()\n const listeners = new Map<string, Set<Deferred.Deferred<void>>>()\n let publishSequence = 0\n let pullUnsupported = false\n let pullSupported = false\n let versionedPublishes = false\n let barrierAnswered = true\n\n const publish = (params: unknown): Effect.Effect<void> => {\n const notification = asMessage(params) as {\n readonly uri?: unknown\n readonly version?: unknown\n readonly diagnostics?: unknown\n } | undefined\n if (typeof notification?.uri !== \"string\" || !Array.isArray(notification.diagnostics)) return Effect.void\n const uri = notification.uri\n const version = typeof notification.version === \"number\" ? notification.version : undefined\n if (version !== undefined) versionedPublishes = true\n const previous = published.get(uri)?.version\n // A late publish for an older version never replaces a newer one.\n if (version !== undefined && previous !== undefined && version < previous) return Effect.void\n published.set(uri, {\n version,\n sequence: ++publishSequence,\n diagnostics: notification.diagnostics\n })\n const waiting = listeners.get(uri)\n if (waiting === undefined) return Effect.void\n listeners.delete(uri)\n return Effect.forEach(waiting, (listener) => Deferred.succeed(listener, undefined), { discard: true })\n }\n\n const receive = (value: unknown): Effect.Effect<void> => {\n const message = asMessage(value)\n if (message?.method === \"textDocument/publishDiagnostics\") return publish(message.params)\n if (message === undefined || typeof message.id !== \"number\") return Effect.void\n const deferred = pending.get(message.id)\n if (deferred === undefined) return Effect.void\n pending.delete(message.id)\n if (message.error === undefined) return Deferred.succeed(deferred, message.result)\n const error = asMessage(message.error) as {\n readonly code?: unknown\n readonly message?: unknown\n readonly data?: unknown\n } | undefined\n return Deferred.fail(\n deferred,\n new StdError.StdError({\n code: \"request_failed\",\n message: typeof error?.message === \"string\" ? error.message : \"Language server returned a JSON-RPC error\",\n ...(typeof error?.code === \"number\" && typeof error.message === \"string\"\n ? {\n rpcError: {\n code: error.code,\n message: error.message,\n ...(error.data === undefined ? {} : { data: error.data })\n }\n }\n : {})\n })\n )\n }\n\n const receiveFrame = (event: FrameEvent): Effect.Effect<void> =>\n event._tag === \"Message\"\n ? receive(event.value)\n // A rejected frame has no trustworthy response id. Failing every\n // waiter prevents another request from hanging behind corrupt framing.\n : event.id === undefined\n ? failPending(event.error)\n : failRequest(event.id, event.error)\n\n yield* handle.stdout.pipe(\n Stream.runForEach((chunk) => Effect.forEach(decoder.push(chunk), receiveFrame, { discard: true })),\n Effect.matchEffect({\n onFailure: () => closeWith(failure(\"request_failed\", \"Language server output stream failed\")),\n onSuccess: () => closeWith(failure(\"request_failed\", \"Language server output stream closed\"))\n }),\n Effect.forkScoped({ startImmediately: true })\n )\n\n yield* handle.exitCode.pipe(\n Effect.flatMap((exitCode) =>\n closeWith(failure(\"request_failed\", `Language server process exited with code ${exitCode}`))\n ),\n Effect.catch(() => closeWith(failure(\"request_failed\", \"Language server process exited\"))),\n Effect.forkScoped({ startImmediately: true })\n )\n\n const send = (message: unknown): Effect.Effect<void, StdError.StdError> =>\n Effect.suspend(() =>\n terminalError === undefined\n ? Queue.offer(input, frame(message)).pipe(\n Effect.asVoid,\n Effect.timeout(timeoutMs),\n Effect.mapError(() =>\n failure(\n \"timeout\",\n `Language server stdin is not being drained; frame offer exceeded ${timeoutMs}ms`\n )\n )\n )\n : Effect.fail(terminalError)\n )\n\n const request = (\n method: string,\n params: unknown\n ): Effect.Effect<unknown, StdError.StdError> =>\n Effect.gen(function*() {\n const deferred = yield* Deferred.make<unknown, StdError.StdError>()\n const registered = yield* Effect.sync((): number | StdError.StdError => {\n if (terminalError !== undefined) return terminalError\n if (pending.size >= MAX_PENDING_REQUESTS) {\n return failure(\n \"request_failed\",\n `Language server reached the ${MAX_PENDING_REQUESTS} pending-request cap`\n )\n }\n const id = nextId++\n pending.set(id, deferred)\n return id\n })\n if (registered instanceof StdError.StdError) return yield* Effect.fail(registered)\n const id = registered\n return yield* Effect.gen(function*() {\n yield* send({ jsonrpc: \"2.0\", id, method, params })\n return yield* Deferred.await(deferred).pipe(\n Effect.timeout(timeoutMs),\n Effect.mapError((cause) =>\n cause instanceof StdError.StdError\n ? cause\n : failure(\"timeout\", `Language server request timed out: ${method}`)\n )\n )\n }).pipe(\n Effect.ensuring(\n Effect.sync(() => {\n pending.delete(id)\n })\n )\n )\n }).pipe(Effect.mapError((error) =>\n new StdError.StdError({\n ...error,\n method,\n message: error.rpcError === undefined ? error.message : `${method}: ${error.message}`,\n ...(stderrTail.byteLength === 0 ? {} : { stderr: stderr() })\n })\n ))\n\n const notify = (method: string, params: unknown): Effect.Effect<void, StdError.StdError> =>\n send({ jsonrpc: \"2.0\", method, params })\n\n yield* request(\"initialize\", {\n processId: null,\n rootUri: pathToFileURL(config.cwd).href,\n capabilities: {\n textDocument: {\n synchronization: { dynamicRegistration: false },\n publishDiagnostics: { versionSupport: true },\n diagnostic: { dynamicRegistration: false }\n }\n },\n ...(config.initializationOptions === undefined ? {} : { initializationOptions: config.initializationOptions })\n })\n yield* notify(\"initialized\", {})\n\n const positionParams = (position: LanguageServer.Position) => ({\n textDocument: { uri: uriOf(position.path) },\n position: { line: position.line, character: position.character }\n })\n\n // A publish without a version is read by arrival: it counts for the text\n // sent before it. Before each sync, a request the server answers at once\n // drains what it wrote earlier, such as the empty report\n // typescript-language-server publishes when a file closes, so that report\n // never passes for the reopened text. Unneeded once the server has pulled\n // or versioned a publish, and dropped if the server does not answer it.\n const barrier: Effect.Effect<void> = Effect.suspend(() =>\n pullSupported || versionedPublishes || !barrierAnswered\n ? Effect.void\n : request(BARRIER_METHOD, null).pipe(\n Effect.timeoutOption(Math.min(BARRIER_TIMEOUT_MS, timeoutMs)),\n Effect.flatMap((answer) =>\n Effect.sync(() => {\n if (Option.isNone(answer)) barrierAnswered = false\n })\n ),\n // The answer is MethodNotFound; any answer drains what came before it.\n Effect.ignore\n )\n )\n\n // One sync at a time, so versions reach the server in the order they are numbered.\n const syncLock = yield* Semaphore.make(1)\n const sync = (path: string, text: string): Effect.Effect<void, StdError.StdError> =>\n syncLock.withPermit(Effect.andThen(barrier, () => {\n const uri = uriOf(path)\n const open = documents.get(uri)\n const version = (versions.get(uri) ?? 0) + 1\n const sentAt = publishSequence\n const message = open === undefined\n ? notify(\"textDocument/didOpen\", {\n textDocument: { uri, languageId: languageId(path), version, text }\n })\n : notify(\"textDocument/didChange\", { textDocument: { uri, version }, contentChanges: [{ text }] })\n return message.pipe(\n Effect.tap(() =>\n Effect.sync(() => {\n versions.set(uri, version)\n documents.set(uri, { version, sentAt, digest: digestOf(text) })\n })\n )\n )\n }))\n\n const closeUri = (uri: string): Effect.Effect<void, StdError.StdError> =>\n Effect.suspend(() => {\n if (!documents.has(uri)) return Effect.void\n documents.delete(uri)\n published.delete(uri)\n return notify(\"textDocument/didClose\", { textDocument: { uri } })\n })\n\n const close = (path: string): Effect.Effect<void, StdError.StdError> => syncLock.withPermit(closeUri(uriOf(path)))\n\n // Re-reads every open document: a file changed on disk is resent, and a\n // file that is gone is closed. What changed it (a shell command, say) is\n // not something the server can see.\n const refresh: Effect.Effect<void, StdError.StdError> = Effect.suspend(() =>\n Effect.forEach([...documents], ([uri, open]) => {\n const path = fileURLToPath(uri)\n let text: string | undefined\n try {\n text = NodeFs.readFileSync(path, \"utf8\")\n } catch {\n text = undefined\n }\n if (text === undefined) return syncLock.withPermit(closeUri(uri))\n return digestOf(text) === open.digest ? Effect.void : sync(path, text)\n }, { discard: true })\n )\n\n /** What the server published for the document's latest synced text, if it has. */\n const current = (uri: string): PublishedDiagnostics | undefined => {\n const entry = published.get(uri)\n const open = documents.get(uri)\n if (entry === undefined || open === undefined) return undefined\n const fresh = entry.version === undefined ? entry.sequence > open.sentAt : entry.version >= open.version\n return fresh ? entry : undefined\n }\n\n /** The first publish for the latest synced text whose sequence is past `after`. */\n const awaitPublished = (uri: string, after = 0): Effect.Effect<PublishedDiagnostics> =>\n Effect.suspend(() => {\n const entry = current(uri)\n if (entry !== undefined && entry.sequence > after) return Effect.succeed(entry)\n return Effect.flatMap(Deferred.make<void>(), (listener) => {\n const waiting = listeners.get(uri) ?? new Set()\n waiting.add(listener)\n listeners.set(uri, waiting)\n return Deferred.await(listener).pipe(\n Effect.ensuring(Effect.sync(() => {\n listeners.get(uri)?.delete(listener)\n })),\n Effect.flatMap(() => awaitPublished(uri, after))\n )\n })\n })\n\n const pushedDiagnostics = (path: string): Effect.Effect<unknown, StdError.StdError> =>\n Effect.gen(function*() {\n const uri = uriOf(path)\n if (!documents.has(uri)) {\n // A push-only server publishes only for open documents.\n const text = yield* Effect.try({\n try: () => NodeFs.readFileSync(NodePath.resolve(config.cwd, path), \"utf8\"),\n catch: () => new StdError.StdError({ code: \"not_found\", message: `File not found: ${path}`, path })\n })\n yield* sync(path, text)\n }\n const started = yield* Clock.currentTimeMillis\n const entry = yield* awaitPublished(uri).pipe(Effect.timeoutOption(settleMs))\n if (Option.isNone(entry)) {\n return yield* Effect.fail(\n new StdError.StdError({\n code: \"timeout\",\n message: `Language server published no diagnostics for ${path} within ${settleMs}ms`,\n method: \"textDocument/publishDiagnostics\",\n path\n })\n )\n }\n // A later publish within the quiet window supersedes this one.\n let latest = entry.value\n for (;;) {\n const remaining = settleMs - ((yield* Clock.currentTimeMillis) - started)\n if (remaining <= 0) break\n const next = yield* awaitPublished(uri, latest.sequence).pipe(\n Effect.timeoutOption(Math.min(quietMs, remaining))\n )\n if (Option.isNone(next)) break\n latest = next.value\n }\n return { kind: \"full\", items: latest.diagnostics }\n })\n\n const diagnostics = (path: string): Effect.Effect<unknown, StdError.StdError> =>\n pullUnsupported\n ? pushedDiagnostics(path)\n : request(\"textDocument/diagnostic\", { textDocument: { uri: uriOf(path) } }).pipe(\n Effect.tap(() =>\n Effect.sync(() => {\n pullSupported = true\n })\n ),\n Effect.catchIf(\n (error) => error.rpcError?.code === METHOD_NOT_FOUND,\n () => {\n pullUnsupported = true\n return pushedDiagnostics(path)\n }\n )\n )\n\n const prepareCallHierarchy = (position: LanguageServer.Position) =>\n request(\"textDocument/prepareCallHierarchy\", positionParams(position))\n const callHierarchy = (\n method: \"callHierarchy/incomingCalls\" | \"callHierarchy/outgoingCalls\",\n position: LanguageServer.Position\n ): Effect.Effect<unknown, StdError.StdError> =>\n prepareCallHierarchy(position).pipe(\n Effect.flatMap((prepared) => {\n const item = firstCallHierarchyItem(prepared)\n return item === undefined ? Effect.succeed([]) : request(method, { item })\n })\n )\n\n return LanguageServer.make({\n hover: (position) => request(\"textDocument/hover\", positionParams(position)),\n definition: (position) => request(\"textDocument/definition\", positionParams(position)),\n references: (position) =>\n request(\"textDocument/references\", {\n ...positionParams(position),\n context: { includeDeclaration: true }\n }),\n implementation: (position) => request(\"textDocument/implementation\", positionParams(position)),\n documentSymbols: (path) => request(\"textDocument/documentSymbol\", { textDocument: { uri: uriOf(path) } }),\n workspaceSymbols: (query) => request(\"workspace/symbol\", { query }),\n prepareCallHierarchy,\n callHierarchyIncoming: (position) => callHierarchy(\"callHierarchy/incomingCalls\", position),\n callHierarchyOutgoing: (position) => callHierarchy(\"callHierarchy/outgoingCalls\", position),\n diagnostics,\n sync,\n close,\n refresh\n })\n })\n\nconst normalizeExtension = (extension: string): string =>\n (extension.startsWith(\".\") ? extension : `.${extension}`).toLowerCase()\n\n/**\n * Routes each request to the client for its file's extension. `client`\n * starts, or returns, the client at an index; `started` is that client only\n * if it already runs, so `refresh` never starts a server.\n */\nconst routed = (\n configs: ReadonlyArray<Config>,\n client: (index: number) => Effect.Effect<LanguageServer.LanguageServer, StdError.StdError>,\n started: (index: number) => LanguageServer.LanguageServer | undefined\n): LanguageServer.LanguageServer => {\n const claims = configs.map((entry) => entry.extensions?.map(normalizeExtension))\n const fallback = claims.findIndex((claimed) => claimed === undefined)\n const indexOf = (path: string): Effect.Effect<number, StdError.StdError> => {\n const extension = extensionOf(path)\n const claimed = claims.findIndex((entry) => entry?.includes(extension) === true)\n const index = claimed >= 0 ? claimed : fallback\n return index >= 0\n ? Effect.succeed(index)\n : Effect.fail(\n new StdError.StdError({\n code: \"unsupported\",\n message: `No language server is configured for ${extension || \"extensionless\"} files`,\n path\n })\n )\n }\n const route = (path: string): Effect.Effect<LanguageServer.LanguageServer, StdError.StdError> =>\n Effect.flatMap(indexOf(path), client)\n const byPosition = (\n method:\n | \"hover\"\n | \"definition\"\n | \"references\"\n | \"implementation\"\n | \"prepareCallHierarchy\"\n | \"callHierarchyIncoming\"\n | \"callHierarchyOutgoing\"\n ) =>\n (position: LanguageServer.Position) => Effect.flatMap(route(position.path), (server) => server[method](position))\n const indices = configs.map((_, index) => index)\n return LanguageServer.make({\n hover: byPosition(\"hover\"),\n definition: byPosition(\"definition\"),\n references: byPosition(\"references\"),\n implementation: byPosition(\"implementation\"),\n prepareCallHierarchy: byPosition(\"prepareCallHierarchy\"),\n callHierarchyIncoming: byPosition(\"callHierarchyIncoming\"),\n callHierarchyOutgoing: byPosition(\"callHierarchyOutgoing\"),\n documentSymbols: (path) => Effect.flatMap(route(path), (server) => server.documentSymbols(path)),\n diagnostics: (path) => Effect.flatMap(route(path), (server) => server.diagnostics(path)),\n sync: (path, text) => Effect.flatMap(route(path), (server) => server.sync(path, text)),\n // A server that never started holds no open file.\n close: (path) => Effect.flatMap(indexOf(path), (index) => started(index)?.close(path) ?? Effect.void),\n refresh: Effect.suspend(() =>\n Effect.forEach(indices, (index) => started(index)?.refresh ?? Effect.void, { discard: true })\n ),\n workspaceSymbols: (query) =>\n configs.length === 1 ?\n Effect.flatMap(client(0), (server) => server.workspaceSymbols(query)) :\n Effect.forEach(\n indices,\n (index) => Effect.flatMap(client(index), (server) => server.workspaceSymbols(query)),\n { concurrency: \"unbounded\" }\n ).pipe(\n Effect.map((answers) =>\n answers.flatMap((answer) => Array.isArray(answer) ? answer : answer == null ? [] : [answer])\n )\n )\n })\n}\n\nconst configList = (\n config: Config | ReadonlyArray<Config>\n): Effect.Effect<ReadonlyArray<Config>, StdError.StdError> => {\n const configs: ReadonlyArray<Config> = Array.isArray(config) ? config : [config as Config]\n return configs.length === 0\n ? Effect.fail(failure(\"invalid_input\", \"At least one language server must be configured\"))\n : Effect.succeed(configs)\n}\n\n/**\n * Constructs scoped host language-server clients, one process per config, and\n * routes each file to the server whose `extensions` include its extension, or\n * else to the server that declares none. `workspaceSymbols` asks every server\n * and concatenates their answers.\n *\n * Every client opens a file on its first `sync` and sends the full text on\n * each later one. `diagnostics` pulls `textDocument/diagnostic`; a server that\n * answers `MethodNotFound` is read from its `textDocument/publishDiagnostics`\n * notifications instead, waiting up to `settleMs` for the latest synced text.\n *\n * Fails with `permission_denied`, before spawning, when the resolved program or\n * a file or directory named by an argument lies under `config.cwd`, or when the command is a\n * launcher (a shell, `env`, a package runner such as `npx` or `pnpm`, or `node`\n * and `bun` given inline code or a preload) whose arguments choose what runs.\n *\n * @category constructors\n * @since 1.0.0\n */\nexport const make = (\n config: Config | ReadonlyArray<Config>\n): Effect.Effect<\n LanguageServer.LanguageServer,\n StdError.StdError,\n ChildProcessSpawner.ChildProcessSpawner | Scope.Scope\n> =>\n Effect.gen(function*() {\n const configs = yield* configList(config)\n const clients = yield* Effect.forEach(configs, makeClient)\n return routed(configs, (index) => Effect.succeed(clients[index]!), (index) => clients[index])\n })\n\n/**\n * {@link make}, starting each server when the first request for one of its\n * files arrives rather than up front, so a host can bind servers it may never\n * need. A server starts with the services and authority of the fiber that\n * built this service, not those of the request that first needs it. A server\n * that fails to start fails that request and every later one for its files.\n * `refresh` and `close` never start a server.\n *\n * The workspace-program refusals of {@link make} still apply up front.\n *\n * @category constructors\n * @since 1.0.0\n */\nexport const makeLazy = (\n config: Config | ReadonlyArray<Config>\n): Effect.Effect<\n LanguageServer.LanguageServer,\n StdError.StdError,\n ChildProcessSpawner.ChildProcessSpawner | Scope.Scope\n> =>\n Effect.gen(function*() {\n const configs = yield* configList(config)\n for (const entry of configs) {\n const refused = workspaceProgram(entry, ChildProcessEnvironment.make(process.env, entry.environment).PATH)\n if (refused !== undefined) return yield* Effect.fail(refused)\n }\n const clients: Array<LanguageServer.LanguageServer | undefined> = configs.map(() => undefined)\n // Each server starts in a fiber forked here, so it starts with the\n // services and authority of whoever built this service, never those of\n // the request that first needs it, and lives as long as this scope.\n const starts = yield* Effect.forEach(configs, (entry, index) =>\n Effect.gen(function*() {\n const wanted = yield* Deferred.make<void>()\n const ready = yield* Deferred.make<LanguageServer.LanguageServer, StdError.StdError>()\n yield* Deferred.await(wanted).pipe(\n Effect.andThen(makeClient(entry)),\n Effect.tap((client) => Effect.sync(() => void (clients[index] = client))),\n Effect.exit,\n Effect.flatMap((exit) => Deferred.done(ready, exit)),\n Effect.forkScoped({ startImmediately: true })\n )\n return Deferred.succeed(wanted, undefined).pipe(Effect.andThen(Deferred.await(ready)))\n }))\n return routed(configs, (index) => starts[index]!, (index) => clients[index])\n })\n\n/**\n * Provides a scoped host language-server implementation.\n *\n * @category layers\n * @since 1.0.0\n */\nexport const layer = (\n config: Config | ReadonlyArray<Config>\n): Layer.Layer<LanguageServer.LanguageServer, StdError.StdError, ChildProcessSpawner.ChildProcessSpawner> =>\n Layer.effect(LanguageServer.LanguageServer, make(config))\n\n/**\n * Provides {@link makeLazy}.\n *\n * @category layers\n * @since 1.0.0\n */\nexport const layerLazy = (\n config: Config | ReadonlyArray<Config>\n): Layer.Layer<LanguageServer.LanguageServer, StdError.StdError, ChildProcessSpawner.ChildProcessSpawner> =>\n Layer.effect(LanguageServer.LanguageServer, makeLazy(config))\n"]}
1
+ {"version":3,"file":"NodeLanguageServer.js","sourceRoot":"","sources":["../../src/NodeLanguageServer.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Host-backed Language Server Protocol client over the permission-checked\n * process spawner.\n *\n * LSP is framed JSON-RPC over ordinary stdio pipes, so the client spawns\n * through `@smthrs/kernel`'s `ChildProcessSpawner`; a terminal is never\n * involved.\n *\n * @since 1.0.0\n */\n\nimport * as ChildProcessEnvironment from \"@smthrs/kernel/ChildProcessEnvironment\"\nimport * as ChildProcessSpawner from \"@smthrs/kernel/ChildProcessSpawner\"\nimport { Clock, Deferred, Effect, Fiber, Layer, Option, Queue, type Scope, Semaphore, Stream } from \"effect\"\nimport * as ChildProcess from \"effect/process/ChildProcess\"\nimport { createHash } from \"node:crypto\"\nimport * as NodeFs from \"node:fs\"\nimport * as NodePath from \"node:path\"\nimport { fileURLToPath, pathToFileURL } from \"node:url\"\nimport * as LanguageServer from \"./LanguageServer.ts\"\nimport * as StdError from \"./StdError.ts\"\n\n/**\n * Maximum frames buffered for a language server's standard input.\n *\n * Bounded offers apply backpressure, and each offer uses the request timeout\n * so a server that stops reading produces a typed timeout instead of an\n * unbounded queue or a new hang.\n *\n * @category constants\n * @since 1.0.0\n */\nexport const MAX_QUEUED_FRAMES = 256\n\n/**\n * Maximum concurrent JSON-RPC requests awaiting a response.\n *\n * Every entry already has a timeout, and process exit or stdout closure fails\n * all entries. This cap is the last-resort bound for a host that fans out\n * requests without limit.\n *\n * @category constants\n * @since 1.0.0\n */\nexport const MAX_PENDING_REQUESTS = 512\n\nconst DEFAULT_SETTLE_MS = 5_000\nconst DEFAULT_QUIET_MS = 300\n\n/**\n * A request every server must refuse at once: the specification has a server\n * answer an unknown `$/` request with MethodNotFound.\n */\nconst BARRIER_METHOD = \"$/smithers/barrier\"\n/** A server that has not answered the barrier in this long is not asked again. */\nconst BARRIER_TIMEOUT_MS = 1_000\n\n/**\n * One host language-server process.\n *\n * Response headers may contain at most 8 KiB, and response bodies may contain\n * at most 8 MiB.\n *\n * @category models\n * @since 1.0.0\n */\nexport interface Config {\n /**\n * The file extensions this server answers for, such as `[\".ts\", \".tsx\"]`.\n * A server without `extensions` answers every file no other server claims.\n */\n readonly extensions?: ReadonlyArray<string> | undefined\n readonly command: string\n readonly args?: ReadonlyArray<string> | undefined\n readonly cwd: string\n readonly environment?: Readonly<Record<string, string>> | undefined\n /**\n * Sent as `initializationOptions` on `initialize`. A host pins where the\n * server loads its own code from here, for example\n * `{ tsserver: { path: \"<host copy>/tsserver.js\" } }` for\n * typescript-language-server, which otherwise runs the workspace's own\n * `node_modules/typescript`.\n */\n readonly initializationOptions?: unknown\n readonly timeoutMs?: number | undefined\n /**\n * How long `diagnostics` waits for a server without pull diagnostics to\n * publish for the latest synced text, then fails with `timeout`. Defaults to\n * 5 seconds. typescript-language-server publishes nothing for a change that\n * leaves a file with no problems, so such a change always waits this long.\n */\n readonly settleMs?: number | undefined\n /**\n * After a publish, how long `diagnostics` waits for a later one before\n * answering, within `settleMs`. A server may publish syntax errors before\n * semantic ones: typescript-language-server does on the first open of a\n * file. Defaults to 300 milliseconds.\n */\n readonly quietMs?: number | undefined\n}\n\ninterface JsonRpcMessage {\n readonly id?: unknown\n readonly method?: unknown\n readonly params?: unknown\n readonly result?: unknown\n readonly error?: unknown\n}\n\n/** JSON-RPC's code for a method the server does not implement. */\nconst METHOD_NOT_FOUND = -32601\n\nconst LANGUAGE_IDS: Readonly<Record<string, string>> = {\n \".ts\": \"typescript\",\n \".mts\": \"typescript\",\n \".cts\": \"typescript\",\n \".tsx\": \"typescriptreact\",\n \".js\": \"javascript\",\n \".mjs\": \"javascript\",\n \".cjs\": \"javascript\",\n \".jsx\": \"javascriptreact\",\n \".py\": \"python\",\n \".rs\": \"rust\",\n \".go\": \"go\",\n \".rb\": \"ruby\",\n \".sh\": \"shellscript\",\n \".md\": \"markdown\",\n \".yml\": \"yaml\",\n \".cc\": \"cpp\",\n \".cpp\": \"cpp\",\n \".hpp\": \"cpp\",\n \".cs\": \"csharp\"\n}\n\nconst extensionOf = (path: string): string => NodePath.extname(path).toLowerCase()\n\nconst languageId = (path: string): string => {\n const extension = extensionOf(path)\n return LANGUAGE_IDS[extension] ?? (extension.slice(1) || \"plaintext\")\n}\n\ninterface FrameDecoder {\n readonly push: (chunk: Uint8Array) => ReadonlyArray<FrameEvent>\n}\n\ntype FrameEvent =\n | { readonly _tag: \"Message\"; readonly value: unknown }\n | { readonly _tag: \"Failure\"; readonly error: StdError.StdError; readonly id?: number | undefined }\n\nconst failure = (code: StdError.Code, message: string): StdError.StdError => new StdError.StdError({ code, message })\n\nconst maximumHeaderBytes = 8 * 1024\nconst maximumFrameBytes = 8 * 1024 * 1024\nconst headerEnd = new Uint8Array([13, 10, 13, 10])\nconst contentLengthPrefix = new TextEncoder().encode(\"Content-Length:\")\n\nconst concatenate = (left: Uint8Array, right: Uint8Array): Uint8Array => {\n const combined = new Uint8Array(left.length + right.length)\n combined.set(left)\n combined.set(right, left.length)\n return combined\n}\n\ninterface ChunkBuffer {\n readonly length: number\n readonly push: (chunk: Uint8Array) => void\n readonly indexOf: (needle: Uint8Array) => number\n // Counts come from delimiter offsets or validated Content-Length values.\n // A reader can only be acquired for an available, nonnegative prefix.\n readonly prefix: (length: number) => {\n readonly take: () => Uint8Array\n readonly discard: () => void\n } | undefined\n}\n\nconst makeChunkBuffer = (): ChunkBuffer => {\n let chunks: Array<Uint8Array> = []\n let head = 0\n let headOffset = 0\n let length = 0\n\n const compact = (): void => {\n if (head === chunks.length) {\n chunks = []\n head = 0\n headOffset = 0\n } else if (head >= 64 && head * 2 >= chunks.length) {\n chunks = chunks.slice(head)\n head = 0\n }\n }\n\n const consume = (count: number, output?: Uint8Array): void => {\n let remaining = count\n let outputOffset = 0\n for (const chunk of chunks.slice(head)) {\n if (remaining === 0) break\n const available = chunk.byteLength - headOffset\n const consumed = Math.min(available, remaining)\n if (output !== undefined) {\n output.set(chunk.subarray(headOffset, headOffset + consumed), outputOffset)\n outputOffset += consumed\n }\n headOffset += consumed\n length -= consumed\n remaining -= consumed\n if (headOffset === chunk.byteLength) {\n head++\n headOffset = 0\n }\n }\n compact()\n }\n\n return {\n get length() {\n return length\n },\n push: (chunk) => {\n if (chunk.byteLength === 0) return\n // Own the bytes so caller mutation or resizing cannot change buffered lengths.\n chunks.push(chunk.slice())\n length += chunk.byteLength\n },\n indexOf: (needle) => {\n let absolute = 0\n let matched = 0\n for (let chunkIndex = head; chunkIndex < chunks.length; chunkIndex++) {\n const chunk = chunks[chunkIndex]!\n const start = chunkIndex === head ? headOffset : 0\n for (let index = start; index < chunk.byteLength; index++) {\n const byte = chunk[index]\n if (byte === needle[matched]) matched++\n else matched = byte === needle[0] ? 1 : 0\n if (matched === needle.byteLength) return absolute - needle.byteLength + 1\n absolute++\n }\n }\n return -1\n },\n prefix: (count) => {\n if (count > length) return undefined\n return {\n take: () => {\n const output = new Uint8Array(count)\n consume(count, output)\n return output\n },\n discard: () => consume(count)\n }\n }\n }\n}\n\nconst malformedId = (body: string): number | undefined => {\n const match = /\"id\"\\s*:\\s*(\\d+)/.exec(body)\n if (match === null) return undefined\n const id = Number(match[1])\n return Number.isSafeInteger(id) ? id : undefined\n}\n\nconst makeFrameDecoder = (): FrameDecoder => {\n const pending = makeChunkBuffer()\n let bodyLength: number | undefined\n let resynchronizing = false\n return {\n push: (chunk) => {\n pending.push(chunk)\n const events: Array<FrameEvent> = []\n while (pending.length > 0 || bodyLength === 0) {\n if (resynchronizing) {\n const nextHeader = pending.indexOf(contentLengthPrefix)\n if (nextHeader < 0) {\n pending.prefix(Math.max(0, pending.length - contentLengthPrefix.byteLength + 1))!.discard()\n break\n }\n pending.prefix(nextHeader)!.discard()\n resynchronizing = false\n }\n if (bodyLength !== undefined) {\n const reader = pending.prefix(bodyLength)\n if (reader === undefined) break\n const body = new TextDecoder().decode(reader.take())\n bodyLength = undefined\n try {\n events.push({ _tag: \"Message\", value: JSON.parse(body) as unknown })\n } catch {\n events.push({\n _tag: \"Failure\",\n error: failure(\"request_failed\", \"Language server returned malformed JSON\"),\n id: malformedId(body)\n })\n }\n continue\n }\n const delimiter = pending.indexOf(headerEnd)\n if (delimiter < 0) {\n if (pending.length > maximumHeaderBytes) {\n events.push({\n _tag: \"Failure\",\n error: failure(\n \"request_failed\",\n `Language server frame header exceeded ${maximumHeaderBytes} bytes`\n )\n })\n pending.prefix(1)!.discard()\n resynchronizing = true\n continue\n }\n break\n }\n if (delimiter > maximumHeaderBytes) {\n events.push({\n _tag: \"Failure\",\n error: failure(\"request_failed\", `Language server frame header exceeded ${maximumHeaderBytes} bytes`)\n })\n pending.prefix(delimiter + headerEnd.byteLength)!.discard()\n resynchronizing = true\n continue\n }\n const header = new TextDecoder().decode(pending.prefix(delimiter)!.take())\n pending.prefix(headerEnd.byteLength)!.discard()\n const match = /(?:^|\\r\\n)Content-Length:\\s*(\\d+)(?:\\r\\n|$)/i.exec(header)\n if (match === null) {\n events.push({\n _tag: \"Failure\",\n error: failure(\"request_failed\", \"Language server frame omitted Content-Length\")\n })\n resynchronizing = true\n continue\n }\n const length = Number(match[1])\n if (!Number.isSafeInteger(length) || length < 0 || length > maximumFrameBytes) {\n events.push({\n _tag: \"Failure\",\n error: failure(\"request_failed\", `Language server frame exceeded ${maximumFrameBytes} bytes`)\n })\n resynchronizing = true\n continue\n }\n bodyLength = length\n }\n return events\n }\n }\n}\n\nconst asMessage = (value: unknown): JsonRpcMessage | undefined =>\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? value\n : undefined\n\nconst frame = (message: unknown): Uint8Array => {\n const body = new TextEncoder().encode(JSON.stringify(message))\n const header = new TextEncoder().encode(`Content-Length: ${body.byteLength}\\r\\n\\r\\n`)\n return concatenate(header, body)\n}\n\nconst firstCallHierarchyItem = (value: unknown): unknown | undefined => Array.isArray(value) ? value[0] : undefined\n\nconst isFile = (path: string): boolean => {\n try {\n return NodeFs.statSync(path, { throwIfNoEntry: false })?.isFile() === true\n } catch {\n return false\n }\n}\n\n/** Whether anything, a file or a directory, exists at `path`. */\nconst exists = (path: string): boolean => {\n try {\n return NodeFs.statSync(path, { throwIfNoEntry: false }) !== undefined\n } catch {\n return false\n }\n}\n\nconst realPath = (path: string): string => {\n try {\n return NodeFs.realpathSync(path)\n } catch {\n return NodePath.resolve(path)\n }\n}\n\nconst isWithin = (root: string, path: string): boolean => {\n const relative = NodePath.relative(root, path)\n return relative === \"\" || (relative !== \"..\" && !relative.startsWith(`..${NodePath.sep}`) &&\n !NodePath.isAbsolute(relative))\n}\n\n/**\n * Resolves the program a spawn would execute: a command containing a path\n * separator against `cwd`, a bare name through the child's `PATH`, where an\n * empty or relative entry is relative to `cwd`.\n */\nconst resolveCommand = (command: string, cwd: string, path: string | undefined): string | undefined => {\n if (command.includes(\"/\") || command.includes(NodePath.sep)) {\n const candidate = NodePath.resolve(cwd, command)\n return isFile(candidate) ? candidate : undefined\n }\n for (const entry of (path ?? \"\").split(NodePath.delimiter)) {\n const candidate = NodePath.resolve(cwd, entry, command)\n if (!isFile(candidate)) continue\n try {\n NodeFs.accessSync(candidate, NodeFs.constants.X_OK)\n return candidate\n } catch {\n continue\n }\n }\n return undefined\n}\n\n/**\n * Refuses a server whose program or any file-naming argument lies in the\n * workspace. The server runs on the host as the host user, so a program the\n * workspace supplies (its `node_modules/.bin`, a `./` script, a symlink it\n * planted) would let workspace files choose what the host executes.\n */\n/**\n * Programs whose job is to run another program named in their arguments or\n * found in the working directory: shells, `env`, and package runners. Their\n * arguments are code or package names, not files, so the workspace check below\n * cannot see what they would execute (`sh -c node_modules/.bin/x`, `npx x`).\n */\nconst LAUNCHERS = new Set([\n \"sh\",\n \"bash\",\n \"zsh\",\n \"dash\",\n \"ksh\",\n \"fish\",\n \"csh\",\n \"tcsh\",\n \"env\",\n \"npx\",\n \"pnpx\",\n \"npm\",\n \"pnpm\",\n \"yarn\",\n \"bunx\",\n \"deno\",\n \"cmd\",\n \"powershell\",\n \"pwsh\"\n])\n\n/** Interpreter flags that take code or a module to load instead of a file path. */\nconst CODE_FLAGS = new Set([\"-e\", \"--eval\", \"-p\", \"--print\", \"-r\", \"--require\", \"--import\", \"--loader\"])\n\nconst launcher = (config: Config): string | undefined => {\n const name = NodePath.basename(config.command).toLowerCase().replace(/\\.(?:exe|cmd|bat|ps1)$/, \"\")\n if (LAUNCHERS.has(name)) return name\n if (name !== \"node\" && name !== \"bun\" && name !== \"nodejs\") return undefined\n const args = config.args ?? []\n if (name === \"bun\" && [\"x\", \"run\", \"exec\"].includes(args[0] ?? \"\")) return `bun ${args[0]}`\n const flag = args.find((argument) => CODE_FLAGS.has(argument.split(\"=\")[0]!) || argument === \"--experimental-loader\")\n return flag === undefined ? undefined : `${name} ${flag.split(\"=\")[0]}`\n}\n\nconst workspaceProgram = (\n config: Config,\n path: string | undefined\n): StdError.StdError | undefined => {\n const launching = launcher(config)\n if (launching !== undefined) {\n return failure(\n \"permission_denied\",\n `Language server command runs ${launching}, which executes a program its arguments or the workspace choose; name the server's own host binary instead`\n )\n }\n const lexicalRoot = NodePath.resolve(config.cwd)\n const realRoot = realPath(lexicalRoot)\n const inWorkspace = (file: string): boolean =>\n isWithin(lexicalRoot, file) || isWithin(realRoot, file) || isWithin(realRoot, realPath(file)) ||\n isWithin(lexicalRoot, realPath(file))\n const program = resolveCommand(config.command, lexicalRoot, path)\n if (program !== undefined && inWorkspace(program)) {\n return failure(\n \"permission_denied\",\n `Language server program ${program} is inside the workspace ${lexicalRoot}; run a host copy instead`\n )\n }\n for (const argument of config.args ?? []) {\n for (const value of [argument, argument.slice(argument.indexOf(\"=\") + 1)]) {\n if (value === \"\") continue\n const candidate = NodePath.resolve(lexicalRoot, value)\n // A directory counts: `node <dir>` runs `<dir>/index.js` or its package main.\n if (exists(candidate) && inWorkspace(candidate)) {\n return failure(\n \"permission_denied\",\n `Language server argument names ${candidate}, a path inside the workspace ${lexicalRoot}`\n )\n }\n }\n }\n return undefined\n}\n\ninterface PublishedDiagnostics {\n readonly version: number | undefined\n readonly sequence: number\n readonly diagnostics: ReadonlyArray<unknown>\n}\n\ninterface OpenDocument {\n readonly version: number\n /** The publish sequence number when this version was sent. */\n readonly sentAt: number\n /** The SHA-256 of the text last sent, so `refresh` resends only changed files. */\n readonly digest: string\n}\n\nconst digestOf = (text: string): string => createHash(\"sha256\").update(text).digest(\"hex\")\n\nconst makeClient = (\n config: Config\n): Effect.Effect<\n LanguageServer.LanguageServer,\n StdError.StdError,\n ChildProcessSpawner.ChildProcessSpawner | Scope.Scope\n> =>\n Effect.gen(function*() {\n const spawner = yield* ChildProcessSpawner.ChildProcessSpawner\n const timeoutMs = config.timeoutMs ?? 30_000\n const settleMs = config.settleMs ?? DEFAULT_SETTLE_MS\n const quietMs = config.quietMs ?? DEFAULT_QUIET_MS\n const env = ChildProcessEnvironment.make(process.env, config.environment)\n const refused = yield* Effect.sync(() => workspaceProgram(config, env.PATH))\n if (refused !== undefined) return yield* Effect.fail(refused)\n // The process's stdin is fed from this queue for the client's lifetime, so\n // each request is one offered frame and the pipe never closes between them.\n const input = yield* Queue.bounded<Uint8Array>(MAX_QUEUED_FRAMES)\n const handle = yield* spawner.spawn(\n ChildProcess.make(config.command, config.args ?? [], {\n cwd: config.cwd,\n env,\n extendEnv: false,\n stdin: { stream: Stream.fromQueue(input), endOnDone: false }\n })\n ).pipe(\n Effect.mapError((error) =>\n failure(\"provider_unavailable\", `Language server process could not be started: ${error.message}`)\n )\n )\n const pending = new Map<number, Deferred.Deferred<unknown, StdError.StdError>>()\n const decoder = makeFrameDecoder()\n let nextId = 1\n let terminalError: StdError.StdError | undefined\n\n // Keep draining stderr while requests run. Copy retained bytes so a small\n // tail never holds a larger backing buffer alive.\n const maximumStderrBytes = 64 * 1024\n let stderrTail: Uint8Array = new Uint8Array(0)\n const stderrFiber = yield* handle.stderr.pipe(\n Stream.runForEach((chunk) =>\n Effect.sync(() => {\n stderrTail = chunk.byteLength >= maximumStderrBytes\n ? chunk.slice(-maximumStderrBytes)\n : concatenate(\n stderrTail.slice(Math.max(0, stderrTail.byteLength + chunk.byteLength - maximumStderrBytes)),\n chunk\n )\n })\n ),\n Effect.catch((cause) => Effect.logWarning(\"Language server stderr stream failed\", cause)),\n Effect.forkScoped({ startImmediately: true })\n )\n const stderr = (): string => {\n let start = 0\n while (start < stderrTail.byteLength && start < 3 && (stderrTail[start]! & 0b1100_0000) === 0b1000_0000) start++\n return new TextDecoder().decode(stderrTail.subarray(start))\n }\n\n const failPending = (error: StdError.StdError): Effect.Effect<void> =>\n Effect.flatMap(\n Effect.sync(() => {\n const deferreds = [...pending.values()]\n pending.clear()\n return deferreds\n }),\n (deferreds) => Effect.forEach(deferreds, (deferred) => Deferred.fail(deferred, error), { discard: true })\n )\n\n const failRequest = (id: number, error: StdError.StdError): Effect.Effect<void> => {\n const deferred = pending.get(id)\n if (deferred === undefined) return Effect.void\n pending.delete(id)\n return Deferred.fail(deferred, error).pipe(Effect.asVoid)\n }\n\n const closeWith = (error: StdError.StdError): Effect.Effect<void> =>\n Effect.gen(function*() {\n // stdout EOF and process exit can arrive before the last stderr chunk.\n // A bounded grace also handles servers that close stdout but stay alive.\n yield* Fiber.await(stderrFiber).pipe(Effect.timeoutOption(100))\n terminalError ??= error\n yield* failPending(terminalError)\n })\n\n const uriOf = (path: string): string => pathToFileURL(NodePath.resolve(config.cwd, path)).href\n const documents = new Map<string, OpenDocument>()\n // Versions keep climbing across a close and reopen, so a late publish for\n // the closed text never passes for the reopened one.\n const versions = new Map<string, number>()\n const published = new Map<string, PublishedDiagnostics>()\n const listeners = new Map<string, Set<Deferred.Deferred<void>>>()\n let publishSequence = 0\n let pullUnsupported = false\n let pullSupported = false\n let versionedPublishes = false\n let barrierAnswered = true\n\n const publish = (params: unknown): Effect.Effect<void> => {\n const notification = asMessage(params) as {\n readonly uri?: unknown\n readonly version?: unknown\n readonly diagnostics?: unknown\n } | undefined\n if (typeof notification?.uri !== \"string\" || !Array.isArray(notification.diagnostics)) return Effect.void\n const uri = notification.uri\n const version = typeof notification.version === \"number\" ? notification.version : undefined\n if (version !== undefined) versionedPublishes = true\n const previous = published.get(uri)?.version\n // A late publish for an older version never replaces a newer one.\n if (version !== undefined && previous !== undefined && version < previous) return Effect.void\n published.set(uri, {\n version,\n sequence: ++publishSequence,\n diagnostics: notification.diagnostics\n })\n const waiting = listeners.get(uri)\n if (waiting === undefined) return Effect.void\n listeners.delete(uri)\n return Effect.forEach(waiting, (listener) => Deferred.succeed(listener, undefined), { discard: true })\n }\n\n const receive = (value: unknown): Effect.Effect<void> => {\n const message = asMessage(value)\n if (message?.method === \"textDocument/publishDiagnostics\") return publish(message.params)\n if (message === undefined || typeof message.id !== \"number\") return Effect.void\n const deferred = pending.get(message.id)\n if (deferred === undefined) return Effect.void\n pending.delete(message.id)\n if (message.error === undefined) return Deferred.succeed(deferred, message.result)\n const error = asMessage(message.error) as {\n readonly code?: unknown\n readonly message?: unknown\n readonly data?: unknown\n } | undefined\n return Deferred.fail(\n deferred,\n new StdError.StdError({\n code: \"request_failed\",\n message: typeof error?.message === \"string\" ? error.message : \"Language server returned a JSON-RPC error\",\n ...(typeof error?.code === \"number\" && typeof error.message === \"string\"\n ? {\n rpcError: {\n code: error.code,\n message: error.message,\n ...(error.data === undefined ? {} : { data: error.data })\n }\n }\n : {})\n })\n )\n }\n\n const receiveFrame = (event: FrameEvent): Effect.Effect<void> =>\n event._tag === \"Message\"\n ? receive(event.value)\n // A rejected frame has no trustworthy response id. Failing every\n // waiter prevents another request from hanging behind corrupt framing.\n : event.id === undefined\n ? failPending(event.error)\n : failRequest(event.id, event.error)\n\n yield* handle.stdout.pipe(\n Stream.runForEach((chunk) => Effect.forEach(decoder.push(chunk), receiveFrame, { discard: true })),\n Effect.matchEffect({\n onFailure: () => closeWith(failure(\"request_failed\", \"Language server output stream failed\")),\n onSuccess: () => closeWith(failure(\"request_failed\", \"Language server output stream closed\"))\n }),\n Effect.forkScoped({ startImmediately: true })\n )\n\n yield* handle.exitCode.pipe(\n Effect.flatMap((exitCode) =>\n closeWith(failure(\"request_failed\", `Language server process exited with code ${exitCode}`))\n ),\n Effect.catch(() => closeWith(failure(\"request_failed\", \"Language server process exited\"))),\n Effect.forkScoped({ startImmediately: true })\n )\n\n const send = (message: unknown): Effect.Effect<void, StdError.StdError> =>\n Effect.suspend(() =>\n terminalError === undefined\n ? Queue.offer(input, frame(message)).pipe(\n Effect.asVoid,\n Effect.timeout(timeoutMs),\n Effect.mapError(() =>\n failure(\n \"timeout\",\n `Language server stdin is not being drained; frame offer exceeded ${timeoutMs}ms`\n )\n )\n )\n : Effect.fail(terminalError)\n )\n\n const request = (\n method: string,\n params: unknown\n ): Effect.Effect<unknown, StdError.StdError> =>\n Effect.gen(function*() {\n const deferred = yield* Deferred.make<unknown, StdError.StdError>()\n const registered = yield* Effect.sync((): number | StdError.StdError => {\n if (terminalError !== undefined) return terminalError\n if (pending.size >= MAX_PENDING_REQUESTS) {\n return failure(\n \"request_failed\",\n `Language server reached the ${MAX_PENDING_REQUESTS} pending-request cap`\n )\n }\n const id = nextId++\n pending.set(id, deferred)\n return id\n })\n if (registered instanceof StdError.StdError) return yield* Effect.fail(registered)\n const id = registered\n return yield* Effect.gen(function*() {\n yield* send({ jsonrpc: \"2.0\", id, method, params })\n return yield* Deferred.await(deferred).pipe(\n Effect.timeout(timeoutMs),\n Effect.mapError((cause) =>\n cause instanceof StdError.StdError\n ? cause\n : failure(\"timeout\", `Language server request timed out: ${method}`)\n )\n )\n }).pipe(\n Effect.ensuring(\n Effect.sync(() => {\n pending.delete(id)\n })\n )\n )\n }).pipe(Effect.mapError((error) =>\n new StdError.StdError({\n ...error,\n method,\n message: error.rpcError === undefined ? error.message : `${method}: ${error.message}`,\n ...(stderrTail.byteLength === 0 ? {} : { stderr: stderr() })\n })\n ))\n\n const notify = (method: string, params: unknown): Effect.Effect<void, StdError.StdError> =>\n send({ jsonrpc: \"2.0\", method, params })\n\n yield* request(\"initialize\", {\n processId: null,\n rootUri: pathToFileURL(config.cwd).href,\n capabilities: {\n textDocument: {\n synchronization: { dynamicRegistration: false },\n publishDiagnostics: { versionSupport: true },\n diagnostic: { dynamicRegistration: false }\n }\n },\n ...(config.initializationOptions === undefined ? {} : { initializationOptions: config.initializationOptions })\n })\n yield* notify(\"initialized\", {})\n\n const positionParams = (position: LanguageServer.Position) => ({\n textDocument: { uri: uriOf(position.path) },\n position: { line: position.line, character: position.character }\n })\n\n // A publish without a version is read by arrival: it counts for the text\n // sent before it. Before each sync, a request the server answers at once\n // drains what it wrote earlier, such as the empty report\n // typescript-language-server publishes when a file closes, so that report\n // never passes for the reopened text. Unneeded once the server has pulled\n // or versioned a publish, and dropped if the server does not answer it.\n const barrier: Effect.Effect<void> = Effect.suspend(() =>\n pullSupported || versionedPublishes || !barrierAnswered\n ? Effect.void\n : request(BARRIER_METHOD, null).pipe(\n Effect.timeoutOption(Math.min(BARRIER_TIMEOUT_MS, timeoutMs)),\n Effect.flatMap((answer) =>\n Effect.sync(() => {\n if (Option.isNone(answer)) barrierAnswered = false\n })\n ),\n // The answer is MethodNotFound; any answer drains what came before it.\n Effect.ignore\n )\n )\n\n // One sync at a time, so versions reach the server in the order they are numbered.\n const syncLock = yield* Semaphore.make(1)\n const sync = (path: string, text: string): Effect.Effect<void, StdError.StdError> =>\n syncLock.withPermit(Effect.andThen(barrier, () => {\n const uri = uriOf(path)\n const open = documents.get(uri)\n const version = (versions.get(uri) ?? 0) + 1\n const sentAt = publishSequence\n const message = open === undefined\n ? notify(\"textDocument/didOpen\", {\n textDocument: { uri, languageId: languageId(path), version, text }\n })\n : notify(\"textDocument/didChange\", { textDocument: { uri, version }, contentChanges: [{ text }] })\n return message.pipe(\n Effect.tap(() =>\n Effect.sync(() => {\n versions.set(uri, version)\n documents.set(uri, { version, sentAt, digest: digestOf(text) })\n })\n )\n )\n }))\n\n const closeUri = (uri: string): Effect.Effect<void, StdError.StdError> =>\n Effect.suspend(() => {\n if (!documents.has(uri)) return Effect.void\n documents.delete(uri)\n published.delete(uri)\n return notify(\"textDocument/didClose\", { textDocument: { uri } })\n })\n\n const close = (path: string): Effect.Effect<void, StdError.StdError> => syncLock.withPermit(closeUri(uriOf(path)))\n\n // Re-reads every open document: a file changed on disk is resent, and a\n // file that is gone is closed. What changed it (a shell command, say) is\n // not something the server can see.\n const refresh: Effect.Effect<void, StdError.StdError> = Effect.suspend(() =>\n Effect.forEach([...documents], ([uri, open]) => {\n const path = fileURLToPath(uri)\n let text: string | undefined\n try {\n text = NodeFs.readFileSync(path, \"utf8\")\n } catch {\n text = undefined\n }\n if (text === undefined) return syncLock.withPermit(closeUri(uri))\n return digestOf(text) === open.digest ? Effect.void : sync(path, text)\n }, { discard: true })\n )\n\n /** What the server published for the document's latest synced text, if it has. */\n const current = (uri: string): PublishedDiagnostics | undefined => {\n const entry = published.get(uri)\n const open = documents.get(uri)\n if (entry === undefined || open === undefined) return undefined\n const fresh = entry.version === undefined ? entry.sequence > open.sentAt : entry.version >= open.version\n return fresh ? entry : undefined\n }\n\n /** The first publish for the latest synced text whose sequence is past `after`. */\n const awaitPublished = (uri: string, after = 0): Effect.Effect<PublishedDiagnostics> =>\n Effect.suspend(() => {\n const entry = current(uri)\n if (entry !== undefined && entry.sequence > after) return Effect.succeed(entry)\n return Effect.flatMap(Deferred.make<void>(), (listener) => {\n const waiting = listeners.get(uri) ?? new Set()\n waiting.add(listener)\n listeners.set(uri, waiting)\n return Deferred.await(listener).pipe(\n Effect.ensuring(Effect.sync(() => {\n listeners.get(uri)?.delete(listener)\n })),\n Effect.flatMap(() => awaitPublished(uri, after))\n )\n })\n })\n\n const pushedDiagnostics = (path: string): Effect.Effect<unknown, StdError.StdError> =>\n Effect.gen(function*() {\n const uri = uriOf(path)\n if (!documents.has(uri)) {\n // A push-only server publishes only for open documents.\n const text = yield* Effect.try({\n try: () => NodeFs.readFileSync(NodePath.resolve(config.cwd, path), \"utf8\"),\n catch: () => new StdError.StdError({ code: \"not_found\", message: `File not found: ${path}`, path })\n })\n yield* sync(path, text)\n }\n const started = yield* Clock.currentTimeMillis\n const entry = yield* awaitPublished(uri).pipe(Effect.timeoutOption(settleMs))\n if (Option.isNone(entry)) {\n return yield* Effect.fail(\n new StdError.StdError({\n code: \"timeout\",\n message: `Language server published no diagnostics for ${path} within ${settleMs}ms`,\n method: \"textDocument/publishDiagnostics\",\n path\n })\n )\n }\n // A later publish within the quiet window supersedes this one.\n let latest = entry.value\n for (;;) {\n const remaining = settleMs - ((yield* Clock.currentTimeMillis) - started)\n if (remaining <= 0) break\n const next = yield* awaitPublished(uri, latest.sequence).pipe(\n Effect.timeoutOption(Math.min(quietMs, remaining))\n )\n if (Option.isNone(next)) break\n latest = next.value\n }\n return { kind: \"full\", items: latest.diagnostics }\n })\n\n const diagnostics = (path: string): Effect.Effect<unknown, StdError.StdError> =>\n pullUnsupported\n ? pushedDiagnostics(path)\n : request(\"textDocument/diagnostic\", { textDocument: { uri: uriOf(path) } }).pipe(\n Effect.tap(() =>\n Effect.sync(() => {\n pullSupported = true\n })\n ),\n Effect.catchIf(\n (error) => error.rpcError?.code === METHOD_NOT_FOUND,\n () => {\n pullUnsupported = true\n return pushedDiagnostics(path)\n }\n )\n )\n\n const prepareCallHierarchy = (position: LanguageServer.Position) =>\n request(\"textDocument/prepareCallHierarchy\", positionParams(position))\n const callHierarchy = (\n method: \"callHierarchy/incomingCalls\" | \"callHierarchy/outgoingCalls\",\n position: LanguageServer.Position\n ): Effect.Effect<unknown, StdError.StdError> =>\n prepareCallHierarchy(position).pipe(\n Effect.flatMap((prepared) => {\n const item = firstCallHierarchyItem(prepared)\n return item === undefined ? Effect.succeed([]) : request(method, { item })\n })\n )\n\n return LanguageServer.make({\n hover: (position) => request(\"textDocument/hover\", positionParams(position)),\n definition: (position) => request(\"textDocument/definition\", positionParams(position)),\n references: (position) =>\n request(\"textDocument/references\", {\n ...positionParams(position),\n context: { includeDeclaration: true }\n }),\n implementation: (position) => request(\"textDocument/implementation\", positionParams(position)),\n documentSymbols: (path) => request(\"textDocument/documentSymbol\", { textDocument: { uri: uriOf(path) } }),\n workspaceSymbols: (query) => request(\"workspace/symbol\", { query }),\n prepareCallHierarchy,\n callHierarchyIncoming: (position) => callHierarchy(\"callHierarchy/incomingCalls\", position),\n callHierarchyOutgoing: (position) => callHierarchy(\"callHierarchy/outgoingCalls\", position),\n diagnostics,\n sync,\n close,\n refresh\n })\n })\n\nconst normalizeExtension = (extension: string): string =>\n (extension.startsWith(\".\") ? extension : `.${extension}`).toLowerCase()\n\n/**\n * Routes each request to the client for its file's extension. `client`\n * starts, or returns, the client at an index; `started` is that client only\n * if it already runs, so `refresh` never starts a server.\n */\nconst routed = (\n configs: ReadonlyArray<Config>,\n client: (index: number) => Effect.Effect<LanguageServer.LanguageServer, StdError.StdError>,\n started: (index: number) => LanguageServer.LanguageServer | undefined\n): LanguageServer.LanguageServer => {\n const claims = configs.map((entry) => entry.extensions?.map(normalizeExtension))\n const fallback = claims.findIndex((claimed) => claimed === undefined)\n const indexOf = (path: string): Effect.Effect<number, StdError.StdError> => {\n const extension = extensionOf(path)\n const claimed = claims.findIndex((entry) => entry?.includes(extension) === true)\n const index = claimed >= 0 ? claimed : fallback\n return index >= 0\n ? Effect.succeed(index)\n : Effect.fail(\n new StdError.StdError({\n code: \"unsupported\",\n message: `No language server is configured for ${extension || \"extensionless\"} files`,\n path\n })\n )\n }\n const route = (path: string): Effect.Effect<LanguageServer.LanguageServer, StdError.StdError> =>\n Effect.flatMap(indexOf(path), client)\n const byPosition = (\n method:\n | \"hover\"\n | \"definition\"\n | \"references\"\n | \"implementation\"\n | \"prepareCallHierarchy\"\n | \"callHierarchyIncoming\"\n | \"callHierarchyOutgoing\"\n ) =>\n (position: LanguageServer.Position) => Effect.flatMap(route(position.path), (server) => server[method](position))\n const indices = configs.map((_, index) => index)\n return LanguageServer.make({\n hover: byPosition(\"hover\"),\n definition: byPosition(\"definition\"),\n references: byPosition(\"references\"),\n implementation: byPosition(\"implementation\"),\n prepareCallHierarchy: byPosition(\"prepareCallHierarchy\"),\n callHierarchyIncoming: byPosition(\"callHierarchyIncoming\"),\n callHierarchyOutgoing: byPosition(\"callHierarchyOutgoing\"),\n documentSymbols: (path) => Effect.flatMap(route(path), (server) => server.documentSymbols(path)),\n diagnostics: (path) => Effect.flatMap(route(path), (server) => server.diagnostics(path)),\n sync: (path, text) => Effect.flatMap(route(path), (server) => server.sync(path, text)),\n // A server that never started holds no open file.\n close: (path) => Effect.flatMap(indexOf(path), (index) => started(index)?.close(path) ?? Effect.void),\n refresh: Effect.suspend(() =>\n Effect.forEach(indices, (index) => started(index)?.refresh ?? Effect.void, { discard: true })\n ),\n workspaceSymbols: (query) =>\n configs.length === 1 ?\n Effect.flatMap(client(0), (server) => server.workspaceSymbols(query)) :\n Effect.forEach(\n indices,\n (index) => Effect.flatMap(client(index), (server) => server.workspaceSymbols(query)),\n { concurrency: \"unbounded\" }\n ).pipe(\n Effect.map((answers) =>\n answers.flatMap((answer) => Array.isArray(answer) ? answer : answer == null ? [] : [answer])\n )\n )\n })\n}\n\nconst configList = (\n config: Config | ReadonlyArray<Config>\n): Effect.Effect<ReadonlyArray<Config>, StdError.StdError> => {\n const configs: ReadonlyArray<Config> = Array.isArray(config) ? config : [config as Config]\n return configs.length === 0\n ? Effect.fail(failure(\"invalid_input\", \"At least one language server must be configured\"))\n : Effect.succeed(configs)\n}\n\n/**\n * Constructs scoped host language-server clients, one process per config, and\n * routes each file to the server whose `extensions` include its extension, or\n * else to the server that declares none. `workspaceSymbols` asks every server\n * and concatenates their answers.\n *\n * Every client opens a file on its first `sync` and sends the full text on\n * each later one. `diagnostics` pulls `textDocument/diagnostic`; a server that\n * answers `MethodNotFound` is read from its `textDocument/publishDiagnostics`\n * notifications instead, waiting up to `settleMs` for the latest synced text.\n *\n * Fails with `permission_denied`, before spawning, when the resolved program or\n * a file or directory named by an argument lies under `config.cwd`, or when the command is a\n * launcher (a shell, `env`, a package runner such as `npx` or `pnpm`, or `node`\n * and `bun` given inline code or a preload) whose arguments choose what runs.\n *\n * @category constructors\n * @since 1.0.0\n */\nexport const make = (\n config: Config | ReadonlyArray<Config>\n): Effect.Effect<\n LanguageServer.LanguageServer,\n StdError.StdError,\n ChildProcessSpawner.ChildProcessSpawner | Scope.Scope\n> =>\n Effect.gen(function*() {\n const configs = yield* configList(config)\n const clients = yield* Effect.forEach(configs, makeClient)\n return routed(configs, (index) => Effect.succeed(clients[index]!), (index) => clients[index])\n })\n\n/**\n * {@link make}, starting each server when the first request for one of its\n * files arrives rather than up front, so a host can bind servers it may never\n * need. A server starts with the services and authority of the fiber that\n * built this service, not those of the request that first needs it. A server\n * that fails to start fails that request and every later one for its files.\n * `refresh` and `close` never start a server.\n *\n * The workspace-program refusals of {@link make} still apply up front.\n *\n * @category constructors\n * @since 1.0.0\n */\nexport const makeLazy = (\n config: Config | ReadonlyArray<Config>\n): Effect.Effect<\n LanguageServer.LanguageServer,\n StdError.StdError,\n ChildProcessSpawner.ChildProcessSpawner | Scope.Scope\n> =>\n Effect.gen(function*() {\n const configs = yield* configList(config)\n for (const entry of configs) {\n const refused = workspaceProgram(entry, ChildProcessEnvironment.make(process.env, entry.environment).PATH)\n if (refused !== undefined) return yield* Effect.fail(refused)\n }\n const clients: Array<LanguageServer.LanguageServer | undefined> = configs.map(() => undefined)\n // Each server starts in a fiber forked here, so it starts with the\n // services and authority of whoever built this service, never those of\n // the request that first needs it, and lives as long as this scope.\n const starts = yield* Effect.forEach(configs, (entry, index) =>\n Effect.gen(function*() {\n const wanted = yield* Deferred.make<void>()\n const ready = yield* Deferred.make<LanguageServer.LanguageServer, StdError.StdError>()\n yield* Deferred.await(wanted).pipe(\n Effect.andThen(makeClient(entry)),\n Effect.tap((client) => Effect.sync(() => void (clients[index] = client))),\n Effect.exit,\n Effect.flatMap((exit) => Deferred.done(ready, exit)),\n Effect.forkScoped({ startImmediately: true })\n )\n return Deferred.succeed(wanted, undefined).pipe(Effect.andThen(Deferred.await(ready)))\n }))\n return routed(configs, (index) => starts[index]!, (index) => clients[index])\n })\n\n/**\n * Provides a scoped host language-server implementation.\n *\n * @category layers\n * @since 1.0.0\n */\nexport const layer = (\n config: Config | ReadonlyArray<Config>\n): Layer.Layer<LanguageServer.LanguageServer, StdError.StdError, ChildProcessSpawner.ChildProcessSpawner> =>\n Layer.effect(LanguageServer.LanguageServer, make(config))\n\n/**\n * Provides {@link makeLazy}.\n *\n * @category layers\n * @since 1.0.0\n */\nexport const layerLazy = (\n config: Config | ReadonlyArray<Config>\n): Layer.Layer<LanguageServer.LanguageServer, StdError.StdError, ChildProcessSpawner.ChildProcessSpawner> =>\n Layer.effect(LanguageServer.LanguageServer, makeLazy(config))\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"WebFetch.d.ts","sourceRoot":"","sources":["../../src/WebFetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,KAAK,UAAU,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAOvC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAGzC;;;;;GAKG;AACH,eAAO,MAAM,IAAI,aAAa,CAAA;AAC9B;;;;;GAKG;AACH,eAAO,MAAM,WAAW,yEAAyE,CAAA;AACjG;;;;;GAKG;AACH,eAAO,MAAM,KAAK;;;;EAQhB,CAAA;AACF;;;;;GAKG;AACH,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AACrC;;;;;GAKG;AACH,eAAO,MAAM,MAAM;;;;;;;EAOjB,CAAA;AACF;;;;;GAKG;AACH,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;AACvC;;;;;GAKG;AACH,eAAO,MAAM,OAAO,4CAAwE,CAAA;AAC5F;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,QAAQ,OAAO,KAAK,CAAC,IAAI,+CAAY,CAAA;AAChE;;;;;GAKG;AACH,eAAO,MAAM,YAAY,UAA+B,CAAA;AACxD;;;;;;GAMG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;CAAsF,CAAA;AAIvG;;;;;GAKG;AACH,eAAO,MAAM,GAAG;;;;;;;;;;;yDA0EsD,CAAA"}
1
+ {"version":3,"file":"WebFetch.d.ts","sourceRoot":"","sources":["../../src/WebFetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,KAAK,UAAU,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAMvC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAGzC;;;;;GAKG;AACH,eAAO,MAAM,IAAI,aAAa,CAAA;AAC9B;;;;;GAKG;AACH,eAAO,MAAM,WAAW,yEAAyE,CAAA;AACjG;;;;;GAKG;AACH,eAAO,MAAM,KAAK;;;;EAQhB,CAAA;AACF;;;;;GAKG;AACH,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AACrC;;;;;GAKG;AACH,eAAO,MAAM,MAAM;;;;;;;EAOjB,CAAA;AACF;;;;;GAKG;AACH,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;AACvC;;;;;GAKG;AACH,eAAO,MAAM,OAAO,4CAAwE,CAAA;AAC5F;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,QAAQ,OAAO,KAAK,CAAC,IAAI,+CAAY,CAAA;AAChE;;;;;GAKG;AACH,eAAO,MAAM,YAAY,UAA+B,CAAA;AACxD;;;;;;GAMG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;CAAsF,CAAA;AAIvG;;;;;GAKG;AACH,eAAO,MAAM,GAAG;;;;;;;;;;;yDA0EsD,CAAA"}
@@ -10,8 +10,8 @@
10
10
  */
11
11
  import * as HttpClient from "@smthrs/kernel/HttpClient";
12
12
  import * as Effect from "effect/Effect";
13
+ import * as HttpClientRequest from "effect/http/HttpClientRequest";
13
14
  import * as Schema from "effect/Schema";
14
- import * as HttpClientRequest from "effect/unstable/http/HttpClientRequest";
15
15
  import { capability, envelope } from "./internal/Declaration.js";
16
16
  import { toMarkdown, toText } from "./internal/Html.js";
17
17
  import { capOutput, header, MAX_RESPONSE_BYTES, readBounded, Timeout, withDeadline } from "./internal/Http.js";
@@ -1 +1 @@
1
- {"version":3,"file":"WebFetch.js","sourceRoot":"","sources":["../../src/WebFetch.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The `webfetch` flow: an HTTP GET rendered as text, Markdown, or HTML.\n *\n * The handler fetches through the permission-checked `HttpClient`, follows at\n * most ten redirects, refuses a body over 5 MiB, and returns the final URL,\n * status, and content type beside the rendered body. The rendered body keeps\n * its first 60,000 bytes and reports any cut with `truncated` and `notice`.\n *\n * @since 1.0.0\n */\n\nimport type { GrantStore } from \"@smthrs/kernel/GrantStore\"\nimport * as HttpClient from \"@smthrs/kernel/HttpClient\"\nimport * as Effect from \"effect/Effect\"\nimport * as Schema from \"effect/Schema\"\nimport * as HttpClientRequest from \"effect/unstable/http/HttpClientRequest\"\nimport { capability, envelope } from \"./internal/Declaration.ts\"\nimport { toMarkdown, toText } from \"./internal/Html.ts\"\nimport { capOutput, header, MAX_RESPONSE_BYTES, readBounded, Timeout, withDeadline } from \"./internal/Http.ts\"\nimport { guarded, refusal } from \"./internal/HttpNetwork.ts\"\nimport { parseHttpUrl } from \"./internal/Url.ts\"\nimport * as StdError from \"./StdError.ts\"\n\nconst maxRedirects = 10\n/**\n * The registry name of the `webfetch` flow.\n *\n * @category identifiers\n * @since 1.0.0\n */\nexport const name = \"webfetch\"\n/**\n * The one-line description the model sees for the `webfetch` flow.\n *\n * @category descriptions\n * @since 1.0.0\n */\nexport const description = \"Fetch an HTTP URL and render its content as text, Markdown, or HTML.\"\n/**\n * What the `webfetch` flow accepts.\n *\n * @category schemas\n * @since 1.0.0\n */\nexport const Input = Schema.Struct({\n url: Schema.String.annotate({ description: \"Absolute http or https URL to retrieve without user information\" }),\n format: Schema.optional(Schema.Literals([\"text\", \"markdown\", \"html\"])).annotate({\n description: \"Response rendering format; defaults to markdown\"\n }),\n timeout: Schema.optional(Timeout).annotate({\n description: \"Total timeout across requests, redirects, and response body in seconds, capped at 120\"\n })\n})\n/**\n * Decoded input accepted by the `webfetch` flow.\n *\n * @category models\n * @since 1.0.0\n */\nexport type Input = typeof Input.Type\n/**\n * What the `webfetch` flow returns.\n *\n * @category schemas\n * @since 1.0.0\n */\nexport const Output = Schema.Struct({\n url: Schema.String.annotate({ description: \"Final URL after redirects\" }),\n status: Schema.Int.annotate({ description: \"HTTP status code, including error statuses\" }),\n contentType: Schema.String.annotate({ description: \"Response Content-Type header, or an empty string when absent\" }),\n content: Schema.String.annotate({ description: \"Response body rendered in the requested format\" }),\n truncated: Schema.Boolean.annotate({ description: \"Whether the rendered body exceeded the display budget\" }),\n notice: Schema.optional(Schema.String.annotate({ description: \"Truncation disclosure\" }))\n})\n/**\n * Decoded output returned by the `webfetch` flow.\n *\n * @category models\n * @since 1.0.0\n */\nexport type Output = typeof Output.Type\n/**\n * The declared effect envelope of the `webfetch` flow, before any input is known.\n *\n * @category effects\n * @since 1.0.0\n */\nexport const effects = envelope({ tier: \"sealed\", mode: \"expected\", reads: [], writes: [] })\n/**\n * Narrows {@link effects} to what this particular input actually touches.\n *\n * @category effects\n * @since 1.0.0\n */\nexport const effectsFor = (_input: typeof Input.Type) => effects\n/**\n * The authority the `webfetch` flow requires.\n *\n * @category capabilities\n * @since 1.0.0\n */\nexport const capabilities = [capability(\"net:get\", \"*\")]\n/**\n * The `webfetch` flow declaration: schemas, capabilities, and effects, with the\n * implementation attached separately.\n *\n * @category flows\n * @since 1.0.0\n */\nexport const flow = { name, description, input: Input, output: Output, capabilities, effects } as const\n\nconst error = (code: StdError.Code, message: string, path?: string): StdError.StdError =>\n new StdError.StdError({ code, message, ...(path === undefined ? {} : { path }) })\n/**\n * Runs the `webfetch` flow: fetches one HTTP URL and renders it as text.\n *\n * @category handlers\n * @since 1.0.0\n */\nexport const run = Effect.fn(\"WebFetch.run\")(function*(\n input: typeof Input.Type\n): Effect.fn.Return<typeof Output.Type, StdError.StdError, HttpClient.HttpClient | GrantStore> {\n let url = parseHttpUrl(input.url)\n if (url === undefined) {\n return yield* Effect.fail(\n error(\"invalid_input\", \"URL must use http or https without user information\", input.url)\n )\n }\n const client = guarded(yield* HttpClient.HttpClient, false)\n let headers: Readonly<Record<string, string>> = {\n accept: input.format === \"html\" ? \"text/html, text/plain;q=0.8\" : \"text/markdown, text/plain, text/html;q=0.8\"\n }\n for (let redirect = 0; redirect <= maxRedirects; redirect++) {\n const response = yield* client.execute(\n HttpClientRequest.setHeaders(HttpClientRequest.get(url.toString()), headers)\n ).pipe(\n Effect.mapError((cause) => refusal(cause) ?? error(\"request_failed\", `Web fetch request failed: ${url}`))\n )\n const location = header(response.headers, \"location\")\n if (response.status >= 300 && response.status < 400 && location !== undefined) {\n const next = parseHttpUrl(location, url)\n if (next === undefined) {\n return yield* Effect.fail(\n error(\"invalid_input\", \"Redirect target must use http or https without user information\", location)\n )\n }\n if (next.origin !== url.origin) {\n headers = Object.fromEntries(\n Object.entries(headers).filter(([key]) =>\n key.toLowerCase() !== \"authorization\" && key.toLowerCase() !== \"cookie\"\n )\n )\n }\n url = next\n continue\n }\n const contentType = header(response.headers, \"content-type\") ?? \"\"\n const normalizedContentType = contentType.toLowerCase()\n if (\n !normalizedContentType.startsWith(\"text/\")\n && !normalizedContentType.includes(\"json\")\n && !normalizedContentType.includes(\"xml\")\n ) {\n return yield* Effect.fail(\n error(\"unsupported_content_type\", `Unsupported content type: ${contentType || \"unknown\"}`)\n )\n }\n const length = Number(header(response.headers, \"content-length\"))\n if (Number.isFinite(length) && length > MAX_RESPONSE_BYTES) {\n return yield* Effect.fail(error(\"response_too_large\", \"Response exceeds the 5 MiB limit\"))\n }\n const body = yield* readBounded(response.stream, url.toString()).pipe(\n Effect.mapError((cause) =>\n cause instanceof StdError.StdError\n ? cause\n : error(\"request_failed\", \"Web fetch response could not be read\")\n )\n )\n const raw = new TextDecoder().decode(body)\n const format = input.format ?? \"markdown\"\n const { text: content, ...disclosure } = capOutput(\n format === \"html\" || !normalizedContentType.includes(\"html\")\n ? raw\n : format === \"text\"\n ? toText(raw)\n : toMarkdown(raw)\n )\n return { url: url.toString(), status: response.status, contentType, content, ...disclosure }\n }\n return yield* Effect.fail(error(\"request_failed\", \"Web fetch exceeded the redirect limit\"))\n}, (effect, input) =>\n // Keep the shared deadline outside the redirect loop and error mapping.\n withDeadline(effect, input.url, input.timeout, (seconds) =>\n error(\"timeout\", `Web fetch timed out after ${seconds} seconds`)))\n"]}
1
+ {"version":3,"file":"WebFetch.js","sourceRoot":"","sources":["../../src/WebFetch.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The `webfetch` flow: an HTTP GET rendered as text, Markdown, or HTML.\n *\n * The handler fetches through the permission-checked `HttpClient`, follows at\n * most ten redirects, refuses a body over 5 MiB, and returns the final URL,\n * status, and content type beside the rendered body. The rendered body keeps\n * its first 60,000 bytes and reports any cut with `truncated` and `notice`.\n *\n * @since 1.0.0\n */\n\nimport type { GrantStore } from \"@smthrs/kernel/GrantStore\"\nimport * as HttpClient from \"@smthrs/kernel/HttpClient\"\nimport * as Effect from \"effect/Effect\"\nimport * as HttpClientRequest from \"effect/http/HttpClientRequest\"\nimport * as Schema from \"effect/Schema\"\nimport { capability, envelope } from \"./internal/Declaration.ts\"\nimport { toMarkdown, toText } from \"./internal/Html.ts\"\nimport { capOutput, header, MAX_RESPONSE_BYTES, readBounded, Timeout, withDeadline } from \"./internal/Http.ts\"\nimport { guarded, refusal } from \"./internal/HttpNetwork.ts\"\nimport { parseHttpUrl } from \"./internal/Url.ts\"\nimport * as StdError from \"./StdError.ts\"\n\nconst maxRedirects = 10\n/**\n * The registry name of the `webfetch` flow.\n *\n * @category identifiers\n * @since 1.0.0\n */\nexport const name = \"webfetch\"\n/**\n * The one-line description the model sees for the `webfetch` flow.\n *\n * @category descriptions\n * @since 1.0.0\n */\nexport const description = \"Fetch an HTTP URL and render its content as text, Markdown, or HTML.\"\n/**\n * What the `webfetch` flow accepts.\n *\n * @category schemas\n * @since 1.0.0\n */\nexport const Input = Schema.Struct({\n url: Schema.String.annotate({ description: \"Absolute http or https URL to retrieve without user information\" }),\n format: Schema.optional(Schema.Literals([\"text\", \"markdown\", \"html\"])).annotate({\n description: \"Response rendering format; defaults to markdown\"\n }),\n timeout: Schema.optional(Timeout).annotate({\n description: \"Total timeout across requests, redirects, and response body in seconds, capped at 120\"\n })\n})\n/**\n * Decoded input accepted by the `webfetch` flow.\n *\n * @category models\n * @since 1.0.0\n */\nexport type Input = typeof Input.Type\n/**\n * What the `webfetch` flow returns.\n *\n * @category schemas\n * @since 1.0.0\n */\nexport const Output = Schema.Struct({\n url: Schema.String.annotate({ description: \"Final URL after redirects\" }),\n status: Schema.Int.annotate({ description: \"HTTP status code, including error statuses\" }),\n contentType: Schema.String.annotate({ description: \"Response Content-Type header, or an empty string when absent\" }),\n content: Schema.String.annotate({ description: \"Response body rendered in the requested format\" }),\n truncated: Schema.Boolean.annotate({ description: \"Whether the rendered body exceeded the display budget\" }),\n notice: Schema.optional(Schema.String.annotate({ description: \"Truncation disclosure\" }))\n})\n/**\n * Decoded output returned by the `webfetch` flow.\n *\n * @category models\n * @since 1.0.0\n */\nexport type Output = typeof Output.Type\n/**\n * The declared effect envelope of the `webfetch` flow, before any input is known.\n *\n * @category effects\n * @since 1.0.0\n */\nexport const effects = envelope({ tier: \"sealed\", mode: \"expected\", reads: [], writes: [] })\n/**\n * Narrows {@link effects} to what this particular input actually touches.\n *\n * @category effects\n * @since 1.0.0\n */\nexport const effectsFor = (_input: typeof Input.Type) => effects\n/**\n * The authority the `webfetch` flow requires.\n *\n * @category capabilities\n * @since 1.0.0\n */\nexport const capabilities = [capability(\"net:get\", \"*\")]\n/**\n * The `webfetch` flow declaration: schemas, capabilities, and effects, with the\n * implementation attached separately.\n *\n * @category flows\n * @since 1.0.0\n */\nexport const flow = { name, description, input: Input, output: Output, capabilities, effects } as const\n\nconst error = (code: StdError.Code, message: string, path?: string): StdError.StdError =>\n new StdError.StdError({ code, message, ...(path === undefined ? {} : { path }) })\n/**\n * Runs the `webfetch` flow: fetches one HTTP URL and renders it as text.\n *\n * @category handlers\n * @since 1.0.0\n */\nexport const run = Effect.fn(\"WebFetch.run\")(function*(\n input: typeof Input.Type\n): Effect.fn.Return<typeof Output.Type, StdError.StdError, HttpClient.HttpClient | GrantStore> {\n let url = parseHttpUrl(input.url)\n if (url === undefined) {\n return yield* Effect.fail(\n error(\"invalid_input\", \"URL must use http or https without user information\", input.url)\n )\n }\n const client = guarded(yield* HttpClient.HttpClient, false)\n let headers: Readonly<Record<string, string>> = {\n accept: input.format === \"html\" ? \"text/html, text/plain;q=0.8\" : \"text/markdown, text/plain, text/html;q=0.8\"\n }\n for (let redirect = 0; redirect <= maxRedirects; redirect++) {\n const response = yield* client.execute(\n HttpClientRequest.setHeaders(HttpClientRequest.get(url.toString()), headers)\n ).pipe(\n Effect.mapError((cause) => refusal(cause) ?? error(\"request_failed\", `Web fetch request failed: ${url}`))\n )\n const location = header(response.headers, \"location\")\n if (response.status >= 300 && response.status < 400 && location !== undefined) {\n const next = parseHttpUrl(location, url)\n if (next === undefined) {\n return yield* Effect.fail(\n error(\"invalid_input\", \"Redirect target must use http or https without user information\", location)\n )\n }\n if (next.origin !== url.origin) {\n headers = Object.fromEntries(\n Object.entries(headers).filter(([key]) =>\n key.toLowerCase() !== \"authorization\" && key.toLowerCase() !== \"cookie\"\n )\n )\n }\n url = next\n continue\n }\n const contentType = header(response.headers, \"content-type\") ?? \"\"\n const normalizedContentType = contentType.toLowerCase()\n if (\n !normalizedContentType.startsWith(\"text/\")\n && !normalizedContentType.includes(\"json\")\n && !normalizedContentType.includes(\"xml\")\n ) {\n return yield* Effect.fail(\n error(\"unsupported_content_type\", `Unsupported content type: ${contentType || \"unknown\"}`)\n )\n }\n const length = Number(header(response.headers, \"content-length\"))\n if (Number.isFinite(length) && length > MAX_RESPONSE_BYTES) {\n return yield* Effect.fail(error(\"response_too_large\", \"Response exceeds the 5 MiB limit\"))\n }\n const body = yield* readBounded(response.stream, url.toString()).pipe(\n Effect.mapError((cause) =>\n cause instanceof StdError.StdError\n ? cause\n : error(\"request_failed\", \"Web fetch response could not be read\")\n )\n )\n const raw = new TextDecoder().decode(body)\n const format = input.format ?? \"markdown\"\n const { text: content, ...disclosure } = capOutput(\n format === \"html\" || !normalizedContentType.includes(\"html\")\n ? raw\n : format === \"text\"\n ? toText(raw)\n : toMarkdown(raw)\n )\n return { url: url.toString(), status: response.status, contentType, content, ...disclosure }\n }\n return yield* Effect.fail(error(\"request_failed\", \"Web fetch exceeded the redirect limit\"))\n}, (effect, input) =>\n // Keep the shared deadline outside the redirect loop and error mapping.\n withDeadline(effect, input.url, input.timeout, (seconds) =>\n error(\"timeout\", `Web fetch timed out after ${seconds} seconds`)))\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Exec.d.ts","sourceRoot":"","sources":["../../../src/internal/Exec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,mBAAmB,MAAM,oCAAoC,CAAA;AACzE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAE1C;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,0EAAkE,CAAA;AAE5F;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;;;;IAenD,uDAAuD;;;AAbzD;;;;;;;;;GASG;AACH,qBAAa,SAAU,SAAQ,cAK7B;CAAG;AAEL;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,oFAAoF;IACpF,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;IACnC,oFAAoF;IACpF,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;CACpC;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAA;IAC3D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,CAAA;IACjD;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC;;;;;;;OAOG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7C,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAA;CAClD;AAiJD;;;;;;;;;GASG;AACH,eAAO,MAAM,IAAI,GACf,SAAS,MAAM,EACf,UAAS,WAAgB,KACxB,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,mBAAmB,CAAC,mBAAmB,CAazE,CAAA;AAEN;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,SAAS,KAAG,QAAQ,CAAC,IACF,CAAA;AAEzD;;;;;;;;;GASG;AACH,eAAO,MAAM,UAAU,GAAI,SAAS,MAAM,EAAE,OAAO,SAAS,KAAG,QAAQ,CAAC,QAOpE,CAAA"}
1
+ {"version":3,"file":"Exec.d.ts","sourceRoot":"","sources":["../../../src/internal/Exec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,mBAAmB,MAAM,oCAAoC,CAAA;AACzE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAE1C;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,0EAAkE,CAAA;AAE5F;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;;;;IAenD,uDAAuD;;;AAbzD;;;;;;;;;GASG;AACH,qBAAa,SAAU,SAAQ,cAK7B;CAAG;AAEL;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,oFAAoF;IACpF,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;IACnC,oFAAoF;IACpF,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;CACpC;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAA;IAC3D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,CAAA;IACjD;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC;;;;;;;OAOG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7C,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAA;CAClD;AAiJD;;;;;;;;;GASG;AACH,eAAO,MAAM,IAAI,GACf,SAAS,MAAM,EACf,UAAS,WAAgB,KACxB,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,mBAAmB,CAAC,mBAAmB,CAazE,CAAA;AAEN;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,SAAS,KAAG,QAAQ,CAAC,IACF,CAAA;AAEzD;;;;;;;;;GASG;AACH,eAAO,MAAM,UAAU,GAAI,SAAS,MAAM,EAAE,OAAO,SAAS,KAAG,QAAQ,CAAC,QAOpE,CAAA"}
@@ -16,9 +16,9 @@
16
16
  import * as ChildProcessEnvironment from "@smthrs/kernel/ChildProcessEnvironment";
17
17
  import * as ChildProcessSpawner from "@smthrs/kernel/ChildProcessSpawner";
18
18
  import * as Effect from "effect/Effect";
19
+ import * as ChildProcess from "effect/process/ChildProcess";
19
20
  import * as Schema from "effect/Schema";
20
21
  import * as Stream from "effect/Stream";
21
- import * as ChildProcess from "effect/unstable/process/ChildProcess";
22
22
  import * as StdError from "../StdError.js";
23
23
  /**
24
24
  * Failure codes a buffered execution can report, matching the codes the