@dvina/agents 0.7.1 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-5XF3UDR3.mjs → chunk-WXK2K5IZ.mjs} +1 -37
- package/dist/{chunk-5XF3UDR3.mjs.map → chunk-WXK2K5IZ.mjs.map} +1 -1
- package/dist/eval/index.mjs +1 -2
- package/dist/eval/index.mjs.map +1 -1
- package/dist/index.js +55 -21162
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +20 -21128
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../node_modules/braces/lib/utils.js","../node_modules/braces/lib/stringify.js","../node_modules/is-number/index.js","../node_modules/to-regex-range/index.js","../node_modules/fill-range/index.js","../node_modules/braces/lib/compile.js","../node_modules/braces/lib/expand.js","../node_modules/braces/lib/constants.js","../node_modules/braces/lib/parse.js","../node_modules/braces/index.js","../node_modules/picomatch/lib/constants.js","../node_modules/picomatch/lib/utils.js","../node_modules/picomatch/lib/scan.js","../node_modules/picomatch/lib/parse.js","../node_modules/picomatch/lib/picomatch.js","../node_modules/picomatch/index.js","../node_modules/micromatch/index.js","../node_modules/yaml/dist/nodes/identity.js","../node_modules/yaml/dist/visit.js","../node_modules/yaml/dist/doc/directives.js","../node_modules/yaml/dist/doc/anchors.js","../node_modules/yaml/dist/doc/applyReviver.js","../node_modules/yaml/dist/nodes/toJS.js","../node_modules/yaml/dist/nodes/Node.js","../node_modules/yaml/dist/nodes/Alias.js","../node_modules/yaml/dist/nodes/Scalar.js","../node_modules/yaml/dist/doc/createNode.js","../node_modules/yaml/dist/nodes/Collection.js","../node_modules/yaml/dist/stringify/stringifyComment.js","../node_modules/yaml/dist/stringify/foldFlowLines.js","../node_modules/yaml/dist/stringify/stringifyString.js","../node_modules/yaml/dist/stringify/stringify.js","../node_modules/yaml/dist/stringify/stringifyPair.js","../node_modules/yaml/dist/log.js","../node_modules/yaml/dist/schema/yaml-1.1/merge.js","../node_modules/yaml/dist/nodes/addPairToJSMap.js","../node_modules/yaml/dist/nodes/Pair.js","../node_modules/yaml/dist/stringify/stringifyCollection.js","../node_modules/yaml/dist/nodes/YAMLMap.js","../node_modules/yaml/dist/schema/common/map.js","../node_modules/yaml/dist/nodes/YAMLSeq.js","../node_modules/yaml/dist/schema/common/seq.js","../node_modules/yaml/dist/schema/common/string.js","../node_modules/yaml/dist/schema/common/null.js","../node_modules/yaml/dist/schema/core/bool.js","../node_modules/yaml/dist/stringify/stringifyNumber.js","../node_modules/yaml/dist/schema/core/float.js","../node_modules/yaml/dist/schema/core/int.js","../node_modules/yaml/dist/schema/core/schema.js","../node_modules/yaml/dist/schema/json/schema.js","../node_modules/yaml/dist/schema/yaml-1.1/binary.js","../node_modules/yaml/dist/schema/yaml-1.1/pairs.js","../node_modules/yaml/dist/schema/yaml-1.1/omap.js","../node_modules/yaml/dist/schema/yaml-1.1/bool.js","../node_modules/yaml/dist/schema/yaml-1.1/float.js","../node_modules/yaml/dist/schema/yaml-1.1/int.js","../node_modules/yaml/dist/schema/yaml-1.1/set.js","../node_modules/yaml/dist/schema/yaml-1.1/timestamp.js","../node_modules/yaml/dist/schema/yaml-1.1/schema.js","../node_modules/yaml/dist/schema/tags.js","../node_modules/yaml/dist/schema/Schema.js","../node_modules/yaml/dist/stringify/stringifyDocument.js","../node_modules/yaml/dist/doc/Document.js","../node_modules/yaml/dist/errors.js","../node_modules/yaml/dist/compose/resolve-props.js","../node_modules/yaml/dist/compose/util-contains-newline.js","../node_modules/yaml/dist/compose/util-flow-indent-check.js","../node_modules/yaml/dist/compose/util-map-includes.js","../node_modules/yaml/dist/compose/resolve-block-map.js","../node_modules/yaml/dist/compose/resolve-block-seq.js","../node_modules/yaml/dist/compose/resolve-end.js","../node_modules/yaml/dist/compose/resolve-flow-collection.js","../node_modules/yaml/dist/compose/compose-collection.js","../node_modules/yaml/dist/compose/resolve-block-scalar.js","../node_modules/yaml/dist/compose/resolve-flow-scalar.js","../node_modules/yaml/dist/compose/compose-scalar.js","../node_modules/yaml/dist/compose/util-empty-scalar-position.js","../node_modules/yaml/dist/compose/compose-node.js","../node_modules/yaml/dist/compose/compose-doc.js","../node_modules/yaml/dist/compose/composer.js","../node_modules/yaml/dist/parse/cst-scalar.js","../node_modules/yaml/dist/parse/cst-stringify.js","../node_modules/yaml/dist/parse/cst-visit.js","../node_modules/yaml/dist/parse/cst.js","../node_modules/yaml/dist/parse/lexer.js","../node_modules/yaml/dist/parse/line-counter.js","../node_modules/yaml/dist/parse/parser.js","../node_modules/yaml/dist/public-api.js","../node_modules/yaml/dist/index.js","../node_modules/fast-glob/out/utils/array.js","../node_modules/fast-glob/out/utils/errno.js","../node_modules/fast-glob/out/utils/fs.js","../node_modules/fast-glob/out/utils/path.js","../node_modules/is-extglob/index.js","../node_modules/is-glob/index.js","../node_modules/glob-parent/index.js","../node_modules/fast-glob/out/utils/pattern.js","../node_modules/merge2/index.js","../node_modules/fast-glob/out/utils/stream.js","../node_modules/fast-glob/out/utils/string.js","../node_modules/fast-glob/out/utils/index.js","../node_modules/fast-glob/out/managers/tasks.js","../node_modules/@nodelib/fs.stat/out/providers/async.js","../node_modules/@nodelib/fs.stat/out/providers/sync.js","../node_modules/@nodelib/fs.stat/out/adapters/fs.js","../node_modules/@nodelib/fs.stat/out/settings.js","../node_modules/@nodelib/fs.stat/out/index.js","../node_modules/queue-microtask/index.js","../node_modules/run-parallel/index.js","../node_modules/@nodelib/fs.scandir/out/constants.js","../node_modules/@nodelib/fs.scandir/out/utils/fs.js","../node_modules/@nodelib/fs.scandir/out/utils/index.js","../node_modules/@nodelib/fs.scandir/out/providers/common.js","../node_modules/@nodelib/fs.scandir/out/providers/async.js","../node_modules/@nodelib/fs.scandir/out/providers/sync.js","../node_modules/@nodelib/fs.scandir/out/adapters/fs.js","../node_modules/@nodelib/fs.scandir/out/settings.js","../node_modules/@nodelib/fs.scandir/out/index.js","../node_modules/reusify/reusify.js","../node_modules/fastq/queue.js","../node_modules/@nodelib/fs.walk/out/readers/common.js","../node_modules/@nodelib/fs.walk/out/readers/reader.js","../node_modules/@nodelib/fs.walk/out/readers/async.js","../node_modules/@nodelib/fs.walk/out/providers/async.js","../node_modules/@nodelib/fs.walk/out/providers/stream.js","../node_modules/@nodelib/fs.walk/out/readers/sync.js","../node_modules/@nodelib/fs.walk/out/providers/sync.js","../node_modules/@nodelib/fs.walk/out/settings.js","../node_modules/@nodelib/fs.walk/out/index.js","../node_modules/fast-glob/out/readers/reader.js","../node_modules/fast-glob/out/readers/stream.js","../node_modules/fast-glob/out/readers/async.js","../node_modules/fast-glob/out/providers/matchers/matcher.js","../node_modules/fast-glob/out/providers/matchers/partial.js","../node_modules/fast-glob/out/providers/filters/deep.js","../node_modules/fast-glob/out/providers/filters/entry.js","../node_modules/fast-glob/out/providers/filters/error.js","../node_modules/fast-glob/out/providers/transformers/entry.js","../node_modules/fast-glob/out/providers/provider.js","../node_modules/fast-glob/out/providers/async.js","../node_modules/fast-glob/out/providers/stream.js","../node_modules/fast-glob/out/readers/sync.js","../node_modules/fast-glob/out/providers/sync.js","../node_modules/fast-glob/out/settings.js","../node_modules/fast-glob/out/index.js","../src/runtime/langchain/factory.ts","../node_modules/deepagents/src/backends/protocol.ts","../node_modules/deepagents/src/backends/utils.ts","../node_modules/deepagents/src/backends/state.ts","../node_modules/deepagents/src/middleware/fs.ts","../node_modules/deepagents/src/middleware/subagents.ts","../node_modules/deepagents/src/middleware/patch_tool_calls.ts","../node_modules/deepagents/src/middleware/memory.ts","../node_modules/deepagents/src/middleware/skills.ts","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/internal/tslib.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/internal/utils/uuid.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/internal/errors.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/core/error.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/internal/utils/values.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/internal/utils/sleep.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/version.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/internal/detect-platform.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/internal/shims.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/internal/request-options.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/internal/qs/formats.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/internal/qs/utils.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/internal/qs/stringify.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/internal/utils/bytes.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/internal/decoders/line.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/internal/utils/log.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/core/streaming.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/internal/parse.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/core/api-promise.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/core/pagination.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/internal/uploads.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/internal/to-file.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/core/resource.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/internal/utils/path.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/chat/completions/messages.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/lib/parser.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/lib/chatCompletionUtils.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/lib/EventStream.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/lib/RunnableFunction.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/lib/ChatCompletionRunner.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/_vendor/partial-json-parser/parser.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/lib/ChatCompletionStream.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/lib/ChatCompletionStreamingRunner.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/chat/completions/completions.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/chat/chat.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/internal/headers.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/audio/speech.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/audio/transcriptions.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/audio/translations.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/audio/audio.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/batches.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/beta/assistants.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/beta/realtime/sessions.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/beta/realtime/transcription-sessions.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/beta/realtime/realtime.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/beta/chatkit/sessions.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/beta/chatkit/threads.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/beta/chatkit/chatkit.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/beta/threads/messages.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/beta/threads/runs/steps.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/internal/utils/base64.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/internal/utils/env.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/lib/AssistantStream.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/beta/threads/runs/runs.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/beta/threads/threads.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/beta/beta.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/completions.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/containers/files/content.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/containers/files/files.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/containers/containers.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/conversations/items.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/conversations/conversations.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/embeddings.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/evals/runs/output-items.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/evals/runs/runs.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/evals/evals.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/files.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/fine-tuning/methods.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/fine-tuning/alpha/graders.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/fine-tuning/alpha/alpha.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/fine-tuning/jobs/jobs.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/fine-tuning/fine-tuning.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/graders/grader-models.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/graders/graders.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/images.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/models.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/moderations.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/realtime/calls.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/realtime/client-secrets.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/realtime/realtime.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/lib/ResponsesParser.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/lib/responses/ResponseStream.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/responses/input-items.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/responses/input-tokens.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/responses/responses.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/uploads/parts.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/uploads/uploads.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/lib/Util.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/vector-stores/file-batches.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/vector-stores/files.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/vector-stores/vector-stores.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/videos.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/resources/webhooks.mjs","../node_modules/.pnpm/openai@6.16.0_zod@4.3.6/node_modules/openai/client.mjs","../node_modules/.pnpm/@langchain+openai@1.2.3_@langchain+core@1.1.16_openai@6.16.0_zod@4.3.6__/node_modules/@langchain/openai/dist/tools/computerUse.js","../node_modules/.pnpm/@langchain+openai@1.2.3_@langchain+core@1.1.16_openai@6.16.0_zod@4.3.6__/node_modules/@langchain/openai/dist/tools/localShell.js","../node_modules/.pnpm/@langchain+openai@1.2.3_@langchain+core@1.1.16_openai@6.16.0_zod@4.3.6__/node_modules/@langchain/openai/dist/tools/shell.js","../node_modules/.pnpm/@langchain+openai@1.2.3_@langchain+core@1.1.16_openai@6.16.0_zod@4.3.6__/node_modules/@langchain/openai/dist/tools/applyPatch.js","../node_modules/deepagents/src/middleware/summarization.ts","../node_modules/deepagents/src/backends/store.ts","../node_modules/deepagents/src/backends/filesystem.ts","../node_modules/deepagents/src/backends/composite.ts","../node_modules/deepagents/src/backends/sandbox.ts","../node_modules/deepagents/src/agent.ts","../node_modules/deepagents/src/config.ts","../node_modules/deepagents/src/middleware/agent-memory.ts","../node_modules/deepagents/src/skills/loader.ts","../src/runtime/langchain/agent.ts","../src/core/tools/tool-registry.ts","../src/core/tools/tool-cache.ts"],"sourcesContent":["'use strict';\n\nexports.isInteger = num => {\n if (typeof num === 'number') {\n return Number.isInteger(num);\n }\n if (typeof num === 'string' && num.trim() !== '') {\n return Number.isInteger(Number(num));\n }\n return false;\n};\n\n/**\n * Find a node of the given type\n */\n\nexports.find = (node, type) => node.nodes.find(node => node.type === type);\n\n/**\n * Find a node of the given type\n */\n\nexports.exceedsLimit = (min, max, step = 1, limit) => {\n if (limit === false) return false;\n if (!exports.isInteger(min) || !exports.isInteger(max)) return false;\n return ((Number(max) - Number(min)) / Number(step)) >= limit;\n};\n\n/**\n * Escape the given node with '\\\\' before node.value\n */\n\nexports.escapeNode = (block, n = 0, type) => {\n const node = block.nodes[n];\n if (!node) return;\n\n if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {\n if (node.escaped !== true) {\n node.value = '\\\\' + node.value;\n node.escaped = true;\n }\n }\n};\n\n/**\n * Returns true if the given brace node should be enclosed in literal braces\n */\n\nexports.encloseBrace = node => {\n if (node.type !== 'brace') return false;\n if ((node.commas >> 0 + node.ranges >> 0) === 0) {\n node.invalid = true;\n return true;\n }\n return false;\n};\n\n/**\n * Returns true if a brace node is invalid.\n */\n\nexports.isInvalidBrace = block => {\n if (block.type !== 'brace') return false;\n if (block.invalid === true || block.dollar) return true;\n if ((block.commas >> 0 + block.ranges >> 0) === 0) {\n block.invalid = true;\n return true;\n }\n if (block.open !== true || block.close !== true) {\n block.invalid = true;\n return true;\n }\n return false;\n};\n\n/**\n * Returns true if a node is an open or close node\n */\n\nexports.isOpenOrClose = node => {\n if (node.type === 'open' || node.type === 'close') {\n return true;\n }\n return node.open === true || node.close === true;\n};\n\n/**\n * Reduce an array of text nodes.\n */\n\nexports.reduce = nodes => nodes.reduce((acc, node) => {\n if (node.type === 'text') acc.push(node.value);\n if (node.type === 'range') node.type = 'text';\n return acc;\n}, []);\n\n/**\n * Flatten an array\n */\n\nexports.flatten = (...args) => {\n const result = [];\n\n const flat = arr => {\n for (let i = 0; i < arr.length; i++) {\n const ele = arr[i];\n\n if (Array.isArray(ele)) {\n flat(ele);\n continue;\n }\n\n if (ele !== undefined) {\n result.push(ele);\n }\n }\n return result;\n };\n\n flat(args);\n return result;\n};\n","'use strict';\n\nconst utils = require('./utils');\n\nmodule.exports = (ast, options = {}) => {\n const stringify = (node, parent = {}) => {\n const invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);\n const invalidNode = node.invalid === true && options.escapeInvalid === true;\n let output = '';\n\n if (node.value) {\n if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {\n return '\\\\' + node.value;\n }\n return node.value;\n }\n\n if (node.value) {\n return node.value;\n }\n\n if (node.nodes) {\n for (const child of node.nodes) {\n output += stringify(child);\n }\n }\n return output;\n };\n\n return stringify(ast);\n};\n\n","/*!\n * is-number <https://github.com/jonschlinkert/is-number>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function(num) {\n if (typeof num === 'number') {\n return num - num === 0;\n }\n if (typeof num === 'string' && num.trim() !== '') {\n return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);\n }\n return false;\n};\n","/*!\n * to-regex-range <https://github.com/micromatch/to-regex-range>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nconst isNumber = require('is-number');\n\nconst toRegexRange = (min, max, options) => {\n if (isNumber(min) === false) {\n throw new TypeError('toRegexRange: expected the first argument to be a number');\n }\n\n if (max === void 0 || min === max) {\n return String(min);\n }\n\n if (isNumber(max) === false) {\n throw new TypeError('toRegexRange: expected the second argument to be a number.');\n }\n\n let opts = { relaxZeros: true, ...options };\n if (typeof opts.strictZeros === 'boolean') {\n opts.relaxZeros = opts.strictZeros === false;\n }\n\n let relax = String(opts.relaxZeros);\n let shorthand = String(opts.shorthand);\n let capture = String(opts.capture);\n let wrap = String(opts.wrap);\n let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;\n\n if (toRegexRange.cache.hasOwnProperty(cacheKey)) {\n return toRegexRange.cache[cacheKey].result;\n }\n\n let a = Math.min(min, max);\n let b = Math.max(min, max);\n\n if (Math.abs(a - b) === 1) {\n let result = min + '|' + max;\n if (opts.capture) {\n return `(${result})`;\n }\n if (opts.wrap === false) {\n return result;\n }\n return `(?:${result})`;\n }\n\n let isPadded = hasPadding(min) || hasPadding(max);\n let state = { min, max, a, b };\n let positives = [];\n let negatives = [];\n\n if (isPadded) {\n state.isPadded = isPadded;\n state.maxLen = String(state.max).length;\n }\n\n if (a < 0) {\n let newMin = b < 0 ? Math.abs(b) : 1;\n negatives = splitToPatterns(newMin, Math.abs(a), state, opts);\n a = state.a = 0;\n }\n\n if (b >= 0) {\n positives = splitToPatterns(a, b, state, opts);\n }\n\n state.negatives = negatives;\n state.positives = positives;\n state.result = collatePatterns(negatives, positives, opts);\n\n if (opts.capture === true) {\n state.result = `(${state.result})`;\n } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {\n state.result = `(?:${state.result})`;\n }\n\n toRegexRange.cache[cacheKey] = state;\n return state.result;\n};\n\nfunction collatePatterns(neg, pos, options) {\n let onlyNegative = filterPatterns(neg, pos, '-', false, options) || [];\n let onlyPositive = filterPatterns(pos, neg, '', false, options) || [];\n let intersected = filterPatterns(neg, pos, '-?', true, options) || [];\n let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);\n return subpatterns.join('|');\n}\n\nfunction splitToRanges(min, max) {\n let nines = 1;\n let zeros = 1;\n\n let stop = countNines(min, nines);\n let stops = new Set([max]);\n\n while (min <= stop && stop <= max) {\n stops.add(stop);\n nines += 1;\n stop = countNines(min, nines);\n }\n\n stop = countZeros(max + 1, zeros) - 1;\n\n while (min < stop && stop <= max) {\n stops.add(stop);\n zeros += 1;\n stop = countZeros(max + 1, zeros) - 1;\n }\n\n stops = [...stops];\n stops.sort(compare);\n return stops;\n}\n\n/**\n * Convert a range to a regex pattern\n * @param {Number} `start`\n * @param {Number} `stop`\n * @return {String}\n */\n\nfunction rangeToPattern(start, stop, options) {\n if (start === stop) {\n return { pattern: start, count: [], digits: 0 };\n }\n\n let zipped = zip(start, stop);\n let digits = zipped.length;\n let pattern = '';\n let count = 0;\n\n for (let i = 0; i < digits; i++) {\n let [startDigit, stopDigit] = zipped[i];\n\n if (startDigit === stopDigit) {\n pattern += startDigit;\n\n } else if (startDigit !== '0' || stopDigit !== '9') {\n pattern += toCharacterClass(startDigit, stopDigit, options);\n\n } else {\n count++;\n }\n }\n\n if (count) {\n pattern += options.shorthand === true ? '\\\\d' : '[0-9]';\n }\n\n return { pattern, count: [count], digits };\n}\n\nfunction splitToPatterns(min, max, tok, options) {\n let ranges = splitToRanges(min, max);\n let tokens = [];\n let start = min;\n let prev;\n\n for (let i = 0; i < ranges.length; i++) {\n let max = ranges[i];\n let obj = rangeToPattern(String(start), String(max), options);\n let zeros = '';\n\n if (!tok.isPadded && prev && prev.pattern === obj.pattern) {\n if (prev.count.length > 1) {\n prev.count.pop();\n }\n\n prev.count.push(obj.count[0]);\n prev.string = prev.pattern + toQuantifier(prev.count);\n start = max + 1;\n continue;\n }\n\n if (tok.isPadded) {\n zeros = padZeros(max, tok, options);\n }\n\n obj.string = zeros + obj.pattern + toQuantifier(obj.count);\n tokens.push(obj);\n start = max + 1;\n prev = obj;\n }\n\n return tokens;\n}\n\nfunction filterPatterns(arr, comparison, prefix, intersection, options) {\n let result = [];\n\n for (let ele of arr) {\n let { string } = ele;\n\n // only push if _both_ are negative...\n if (!intersection && !contains(comparison, 'string', string)) {\n result.push(prefix + string);\n }\n\n // or _both_ are positive\n if (intersection && contains(comparison, 'string', string)) {\n result.push(prefix + string);\n }\n }\n return result;\n}\n\n/**\n * Zip strings\n */\n\nfunction zip(a, b) {\n let arr = [];\n for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);\n return arr;\n}\n\nfunction compare(a, b) {\n return a > b ? 1 : b > a ? -1 : 0;\n}\n\nfunction contains(arr, key, val) {\n return arr.some(ele => ele[key] === val);\n}\n\nfunction countNines(min, len) {\n return Number(String(min).slice(0, -len) + '9'.repeat(len));\n}\n\nfunction countZeros(integer, zeros) {\n return integer - (integer % Math.pow(10, zeros));\n}\n\nfunction toQuantifier(digits) {\n let [start = 0, stop = ''] = digits;\n if (stop || start > 1) {\n return `{${start + (stop ? ',' + stop : '')}}`;\n }\n return '';\n}\n\nfunction toCharacterClass(a, b, options) {\n return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;\n}\n\nfunction hasPadding(str) {\n return /^-?(0+)\\d/.test(str);\n}\n\nfunction padZeros(value, tok, options) {\n if (!tok.isPadded) {\n return value;\n }\n\n let diff = Math.abs(tok.maxLen - String(value).length);\n let relax = options.relaxZeros !== false;\n\n switch (diff) {\n case 0:\n return '';\n case 1:\n return relax ? '0?' : '0';\n case 2:\n return relax ? '0{0,2}' : '00';\n default: {\n return relax ? `0{0,${diff}}` : `0{${diff}}`;\n }\n }\n}\n\n/**\n * Cache\n */\n\ntoRegexRange.cache = {};\ntoRegexRange.clearCache = () => (toRegexRange.cache = {});\n\n/**\n * Expose `toRegexRange`\n */\n\nmodule.exports = toRegexRange;\n","/*!\n * fill-range <https://github.com/jonschlinkert/fill-range>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nconst util = require('util');\nconst toRegexRange = require('to-regex-range');\n\nconst isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\n\nconst transform = toNumber => {\n return value => toNumber === true ? Number(value) : String(value);\n};\n\nconst isValidValue = value => {\n return typeof value === 'number' || (typeof value === 'string' && value !== '');\n};\n\nconst isNumber = num => Number.isInteger(+num);\n\nconst zeros = input => {\n let value = `${input}`;\n let index = -1;\n if (value[0] === '-') value = value.slice(1);\n if (value === '0') return false;\n while (value[++index] === '0');\n return index > 0;\n};\n\nconst stringify = (start, end, options) => {\n if (typeof start === 'string' || typeof end === 'string') {\n return true;\n }\n return options.stringify === true;\n};\n\nconst pad = (input, maxLength, toNumber) => {\n if (maxLength > 0) {\n let dash = input[0] === '-' ? '-' : '';\n if (dash) input = input.slice(1);\n input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));\n }\n if (toNumber === false) {\n return String(input);\n }\n return input;\n};\n\nconst toMaxLen = (input, maxLength) => {\n let negative = input[0] === '-' ? '-' : '';\n if (negative) {\n input = input.slice(1);\n maxLength--;\n }\n while (input.length < maxLength) input = '0' + input;\n return negative ? ('-' + input) : input;\n};\n\nconst toSequence = (parts, options, maxLen) => {\n parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n\n let prefix = options.capture ? '' : '?:';\n let positives = '';\n let negatives = '';\n let result;\n\n if (parts.positives.length) {\n positives = parts.positives.map(v => toMaxLen(String(v), maxLen)).join('|');\n }\n\n if (parts.negatives.length) {\n negatives = `-(${prefix}${parts.negatives.map(v => toMaxLen(String(v), maxLen)).join('|')})`;\n }\n\n if (positives && negatives) {\n result = `${positives}|${negatives}`;\n } else {\n result = positives || negatives;\n }\n\n if (options.wrap) {\n return `(${prefix}${result})`;\n }\n\n return result;\n};\n\nconst toRange = (a, b, isNumbers, options) => {\n if (isNumbers) {\n return toRegexRange(a, b, { wrap: false, ...options });\n }\n\n let start = String.fromCharCode(a);\n if (a === b) return start;\n\n let stop = String.fromCharCode(b);\n return `[${start}-${stop}]`;\n};\n\nconst toRegex = (start, end, options) => {\n if (Array.isArray(start)) {\n let wrap = options.wrap === true;\n let prefix = options.capture ? '' : '?:';\n return wrap ? `(${prefix}${start.join('|')})` : start.join('|');\n }\n return toRegexRange(start, end, options);\n};\n\nconst rangeError = (...args) => {\n return new RangeError('Invalid range arguments: ' + util.inspect(...args));\n};\n\nconst invalidRange = (start, end, options) => {\n if (options.strictRanges === true) throw rangeError([start, end]);\n return [];\n};\n\nconst invalidStep = (step, options) => {\n if (options.strictRanges === true) {\n throw new TypeError(`Expected step \"${step}\" to be a number`);\n }\n return [];\n};\n\nconst fillNumbers = (start, end, step = 1, options = {}) => {\n let a = Number(start);\n let b = Number(end);\n\n if (!Number.isInteger(a) || !Number.isInteger(b)) {\n if (options.strictRanges === true) throw rangeError([start, end]);\n return [];\n }\n\n // fix negative zero\n if (a === 0) a = 0;\n if (b === 0) b = 0;\n\n let descending = a > b;\n let startString = String(start);\n let endString = String(end);\n let stepString = String(step);\n step = Math.max(Math.abs(step), 1);\n\n let padded = zeros(startString) || zeros(endString) || zeros(stepString);\n let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;\n let toNumber = padded === false && stringify(start, end, options) === false;\n let format = options.transform || transform(toNumber);\n\n if (options.toRegex && step === 1) {\n return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);\n }\n\n let parts = { negatives: [], positives: [] };\n let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));\n let range = [];\n let index = 0;\n\n while (descending ? a >= b : a <= b) {\n if (options.toRegex === true && step > 1) {\n push(a);\n } else {\n range.push(pad(format(a, index), maxLen, toNumber));\n }\n a = descending ? a - step : a + step;\n index++;\n }\n\n if (options.toRegex === true) {\n return step > 1\n ? toSequence(parts, options, maxLen)\n : toRegex(range, null, { wrap: false, ...options });\n }\n\n return range;\n};\n\nconst fillLetters = (start, end, step = 1, options = {}) => {\n if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) {\n return invalidRange(start, end, options);\n }\n\n let format = options.transform || (val => String.fromCharCode(val));\n let a = `${start}`.charCodeAt(0);\n let b = `${end}`.charCodeAt(0);\n\n let descending = a > b;\n let min = Math.min(a, b);\n let max = Math.max(a, b);\n\n if (options.toRegex && step === 1) {\n return toRange(min, max, false, options);\n }\n\n let range = [];\n let index = 0;\n\n while (descending ? a >= b : a <= b) {\n range.push(format(a, index));\n a = descending ? a - step : a + step;\n index++;\n }\n\n if (options.toRegex === true) {\n return toRegex(range, null, { wrap: false, options });\n }\n\n return range;\n};\n\nconst fill = (start, end, step, options = {}) => {\n if (end == null && isValidValue(start)) {\n return [start];\n }\n\n if (!isValidValue(start) || !isValidValue(end)) {\n return invalidRange(start, end, options);\n }\n\n if (typeof step === 'function') {\n return fill(start, end, 1, { transform: step });\n }\n\n if (isObject(step)) {\n return fill(start, end, 0, step);\n }\n\n let opts = { ...options };\n if (opts.capture === true) opts.wrap = true;\n step = step || opts.step || 1;\n\n if (!isNumber(step)) {\n if (step != null && !isObject(step)) return invalidStep(step, opts);\n return fill(start, end, 1, step);\n }\n\n if (isNumber(start) && isNumber(end)) {\n return fillNumbers(start, end, step, opts);\n }\n\n return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);\n};\n\nmodule.exports = fill;\n","'use strict';\n\nconst fill = require('fill-range');\nconst utils = require('./utils');\n\nconst compile = (ast, options = {}) => {\n const walk = (node, parent = {}) => {\n const invalidBlock = utils.isInvalidBrace(parent);\n const invalidNode = node.invalid === true && options.escapeInvalid === true;\n const invalid = invalidBlock === true || invalidNode === true;\n const prefix = options.escapeInvalid === true ? '\\\\' : '';\n let output = '';\n\n if (node.isOpen === true) {\n return prefix + node.value;\n }\n\n if (node.isClose === true) {\n console.log('node.isClose', prefix, node.value);\n return prefix + node.value;\n }\n\n if (node.type === 'open') {\n return invalid ? prefix + node.value : '(';\n }\n\n if (node.type === 'close') {\n return invalid ? prefix + node.value : ')';\n }\n\n if (node.type === 'comma') {\n return node.prev.type === 'comma' ? '' : invalid ? node.value : '|';\n }\n\n if (node.value) {\n return node.value;\n }\n\n if (node.nodes && node.ranges > 0) {\n const args = utils.reduce(node.nodes);\n const range = fill(...args, { ...options, wrap: false, toRegex: true, strictZeros: true });\n\n if (range.length !== 0) {\n return args.length > 1 && range.length > 1 ? `(${range})` : range;\n }\n }\n\n if (node.nodes) {\n for (const child of node.nodes) {\n output += walk(child, node);\n }\n }\n\n return output;\n };\n\n return walk(ast);\n};\n\nmodule.exports = compile;\n","'use strict';\n\nconst fill = require('fill-range');\nconst stringify = require('./stringify');\nconst utils = require('./utils');\n\nconst append = (queue = '', stash = '', enclose = false) => {\n const result = [];\n\n queue = [].concat(queue);\n stash = [].concat(stash);\n\n if (!stash.length) return queue;\n if (!queue.length) {\n return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash;\n }\n\n for (const item of queue) {\n if (Array.isArray(item)) {\n for (const value of item) {\n result.push(append(value, stash, enclose));\n }\n } else {\n for (let ele of stash) {\n if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;\n result.push(Array.isArray(ele) ? append(item, ele, enclose) : item + ele);\n }\n }\n }\n return utils.flatten(result);\n};\n\nconst expand = (ast, options = {}) => {\n const rangeLimit = options.rangeLimit === undefined ? 1000 : options.rangeLimit;\n\n const walk = (node, parent = {}) => {\n node.queue = [];\n\n let p = parent;\n let q = parent.queue;\n\n while (p.type !== 'brace' && p.type !== 'root' && p.parent) {\n p = p.parent;\n q = p.queue;\n }\n\n if (node.invalid || node.dollar) {\n q.push(append(q.pop(), stringify(node, options)));\n return;\n }\n\n if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {\n q.push(append(q.pop(), ['{}']));\n return;\n }\n\n if (node.nodes && node.ranges > 0) {\n const args = utils.reduce(node.nodes);\n\n if (utils.exceedsLimit(...args, options.step, rangeLimit)) {\n throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');\n }\n\n let range = fill(...args, options);\n if (range.length === 0) {\n range = stringify(node, options);\n }\n\n q.push(append(q.pop(), range));\n node.nodes = [];\n return;\n }\n\n const enclose = utils.encloseBrace(node);\n let queue = node.queue;\n let block = node;\n\n while (block.type !== 'brace' && block.type !== 'root' && block.parent) {\n block = block.parent;\n queue = block.queue;\n }\n\n for (let i = 0; i < node.nodes.length; i++) {\n const child = node.nodes[i];\n\n if (child.type === 'comma' && node.type === 'brace') {\n if (i === 1) queue.push('');\n queue.push('');\n continue;\n }\n\n if (child.type === 'close') {\n q.push(append(q.pop(), queue, enclose));\n continue;\n }\n\n if (child.value && child.type !== 'open') {\n queue.push(append(queue.pop(), child.value));\n continue;\n }\n\n if (child.nodes) {\n walk(child, node);\n }\n }\n\n return queue;\n };\n\n return utils.flatten(walk(ast));\n};\n\nmodule.exports = expand;\n","'use strict';\n\nmodule.exports = {\n MAX_LENGTH: 10000,\n\n // Digits\n CHAR_0: '0', /* 0 */\n CHAR_9: '9', /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 'A', /* A */\n CHAR_LOWERCASE_A: 'a', /* a */\n CHAR_UPPERCASE_Z: 'Z', /* Z */\n CHAR_LOWERCASE_Z: 'z', /* z */\n\n CHAR_LEFT_PARENTHESES: '(', /* ( */\n CHAR_RIGHT_PARENTHESES: ')', /* ) */\n\n CHAR_ASTERISK: '*', /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: '&', /* & */\n CHAR_AT: '@', /* @ */\n CHAR_BACKSLASH: '\\\\', /* \\ */\n CHAR_BACKTICK: '`', /* ` */\n CHAR_CARRIAGE_RETURN: '\\r', /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */\n CHAR_COLON: ':', /* : */\n CHAR_COMMA: ',', /* , */\n CHAR_DOLLAR: '$', /* . */\n CHAR_DOT: '.', /* . */\n CHAR_DOUBLE_QUOTE: '\"', /* \" */\n CHAR_EQUAL: '=', /* = */\n CHAR_EXCLAMATION_MARK: '!', /* ! */\n CHAR_FORM_FEED: '\\f', /* \\f */\n CHAR_FORWARD_SLASH: '/', /* / */\n CHAR_HASH: '#', /* # */\n CHAR_HYPHEN_MINUS: '-', /* - */\n CHAR_LEFT_ANGLE_BRACKET: '<', /* < */\n CHAR_LEFT_CURLY_BRACE: '{', /* { */\n CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */\n CHAR_LINE_FEED: '\\n', /* \\n */\n CHAR_NO_BREAK_SPACE: '\\u00A0', /* \\u00A0 */\n CHAR_PERCENT: '%', /* % */\n CHAR_PLUS: '+', /* + */\n CHAR_QUESTION_MARK: '?', /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */\n CHAR_RIGHT_CURLY_BRACE: '}', /* } */\n CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */\n CHAR_SEMICOLON: ';', /* ; */\n CHAR_SINGLE_QUOTE: '\\'', /* ' */\n CHAR_SPACE: ' ', /* */\n CHAR_TAB: '\\t', /* \\t */\n CHAR_UNDERSCORE: '_', /* _ */\n CHAR_VERTICAL_LINE: '|', /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\\uFEFF' /* \\uFEFF */\n};\n","'use strict';\n\nconst stringify = require('./stringify');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n CHAR_BACKSLASH, /* \\ */\n CHAR_BACKTICK, /* ` */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_RIGHT_SQUARE_BRACKET, /* ] */\n CHAR_DOUBLE_QUOTE, /* \" */\n CHAR_SINGLE_QUOTE, /* ' */\n CHAR_NO_BREAK_SPACE,\n CHAR_ZERO_WIDTH_NOBREAK_SPACE\n} = require('./constants');\n\n/**\n * parse\n */\n\nconst parse = (input, options = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n const opts = options || {};\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n if (input.length > max) {\n throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);\n }\n\n const ast = { type: 'root', input, nodes: [] };\n const stack = [ast];\n let block = ast;\n let prev = ast;\n let brackets = 0;\n const length = input.length;\n let index = 0;\n let depth = 0;\n let value;\n\n /**\n * Helpers\n */\n\n const advance = () => input[index++];\n const push = node => {\n if (node.type === 'text' && prev.type === 'dot') {\n prev.type = 'text';\n }\n\n if (prev && prev.type === 'text' && node.type === 'text') {\n prev.value += node.value;\n return;\n }\n\n block.nodes.push(node);\n node.parent = block;\n node.prev = prev;\n prev = node;\n return node;\n };\n\n push({ type: 'bos' });\n\n while (index < length) {\n block = stack[stack.length - 1];\n value = advance();\n\n /**\n * Invalid chars\n */\n\n if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {\n continue;\n }\n\n /**\n * Escaped chars\n */\n\n if (value === CHAR_BACKSLASH) {\n push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });\n continue;\n }\n\n /**\n * Right square bracket (literal): ']'\n */\n\n if (value === CHAR_RIGHT_SQUARE_BRACKET) {\n push({ type: 'text', value: '\\\\' + value });\n continue;\n }\n\n /**\n * Left square bracket: '['\n */\n\n if (value === CHAR_LEFT_SQUARE_BRACKET) {\n brackets++;\n\n let next;\n\n while (index < length && (next = advance())) {\n value += next;\n\n if (next === CHAR_LEFT_SQUARE_BRACKET) {\n brackets++;\n continue;\n }\n\n if (next === CHAR_BACKSLASH) {\n value += advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n brackets--;\n\n if (brackets === 0) {\n break;\n }\n }\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === CHAR_LEFT_PARENTHESES) {\n block = push({ type: 'paren', nodes: [] });\n stack.push(block);\n push({ type: 'text', value });\n continue;\n }\n\n if (value === CHAR_RIGHT_PARENTHESES) {\n if (block.type !== 'paren') {\n push({ type: 'text', value });\n continue;\n }\n block = stack.pop();\n push({ type: 'text', value });\n block = stack[stack.length - 1];\n continue;\n }\n\n /**\n * Quotes: '|\"|`\n */\n\n if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {\n const open = value;\n let next;\n\n if (options.keepQuotes !== true) {\n value = '';\n }\n\n while (index < length && (next = advance())) {\n if (next === CHAR_BACKSLASH) {\n value += next + advance();\n continue;\n }\n\n if (next === open) {\n if (options.keepQuotes === true) value += next;\n break;\n }\n\n value += next;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Left curly brace: '{'\n */\n\n if (value === CHAR_LEFT_CURLY_BRACE) {\n depth++;\n\n const dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;\n const brace = {\n type: 'brace',\n open: true,\n close: false,\n dollar,\n depth,\n commas: 0,\n ranges: 0,\n nodes: []\n };\n\n block = push(brace);\n stack.push(block);\n push({ type: 'open', value });\n continue;\n }\n\n /**\n * Right curly brace: '}'\n */\n\n if (value === CHAR_RIGHT_CURLY_BRACE) {\n if (block.type !== 'brace') {\n push({ type: 'text', value });\n continue;\n }\n\n const type = 'close';\n block = stack.pop();\n block.close = true;\n\n push({ type, value });\n depth--;\n\n block = stack[stack.length - 1];\n continue;\n }\n\n /**\n * Comma: ','\n */\n\n if (value === CHAR_COMMA && depth > 0) {\n if (block.ranges > 0) {\n block.ranges = 0;\n const open = block.nodes.shift();\n block.nodes = [open, { type: 'text', value: stringify(block) }];\n }\n\n push({ type: 'comma', value });\n block.commas++;\n continue;\n }\n\n /**\n * Dot: '.'\n */\n\n if (value === CHAR_DOT && depth > 0 && block.commas === 0) {\n const siblings = block.nodes;\n\n if (depth === 0 || siblings.length === 0) {\n push({ type: 'text', value });\n continue;\n }\n\n if (prev.type === 'dot') {\n block.range = [];\n prev.value += value;\n prev.type = 'range';\n\n if (block.nodes.length !== 3 && block.nodes.length !== 5) {\n block.invalid = true;\n block.ranges = 0;\n prev.type = 'text';\n continue;\n }\n\n block.ranges++;\n block.args = [];\n continue;\n }\n\n if (prev.type === 'range') {\n siblings.pop();\n\n const before = siblings[siblings.length - 1];\n before.value += prev.value + value;\n prev = before;\n block.ranges--;\n continue;\n }\n\n push({ type: 'dot', value });\n continue;\n }\n\n /**\n * Text\n */\n\n push({ type: 'text', value });\n }\n\n // Mark imbalanced braces and brackets as invalid\n do {\n block = stack.pop();\n\n if (block.type !== 'root') {\n block.nodes.forEach(node => {\n if (!node.nodes) {\n if (node.type === 'open') node.isOpen = true;\n if (node.type === 'close') node.isClose = true;\n if (!node.nodes) node.type = 'text';\n node.invalid = true;\n }\n });\n\n // get the location of the block on parent.nodes (block's siblings)\n const parent = stack[stack.length - 1];\n const index = parent.nodes.indexOf(block);\n // replace the (invalid) block with it's nodes\n parent.nodes.splice(index, 1, ...block.nodes);\n }\n } while (stack.length > 0);\n\n push({ type: 'eos' });\n return ast;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nconst stringify = require('./lib/stringify');\nconst compile = require('./lib/compile');\nconst expand = require('./lib/expand');\nconst parse = require('./lib/parse');\n\n/**\n * Expand the given pattern or create a regex-compatible string.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']\n * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {String}\n * @api public\n */\n\nconst braces = (input, options = {}) => {\n let output = [];\n\n if (Array.isArray(input)) {\n for (const pattern of input) {\n const result = braces.create(pattern, options);\n if (Array.isArray(result)) {\n output.push(...result);\n } else {\n output.push(result);\n }\n }\n } else {\n output = [].concat(braces.create(input, options));\n }\n\n if (options && options.expand === true && options.nodupes === true) {\n output = [...new Set(output)];\n }\n return output;\n};\n\n/**\n * Parse the given `str` with the given `options`.\n *\n * ```js\n * // braces.parse(pattern, [, options]);\n * const ast = braces.parse('a/{b,c}/d');\n * console.log(ast);\n * ```\n * @param {String} pattern Brace pattern to parse\n * @param {Object} options\n * @return {Object} Returns an AST\n * @api public\n */\n\nbraces.parse = (input, options = {}) => parse(input, options);\n\n/**\n * Creates a braces string from an AST, or an AST node.\n *\n * ```js\n * const braces = require('braces');\n * let ast = braces.parse('foo/{a,b}/bar');\n * console.log(stringify(ast.nodes[2])); //=> '{a,b}'\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.stringify = (input, options = {}) => {\n if (typeof input === 'string') {\n return stringify(braces.parse(input, options), options);\n }\n return stringify(input, options);\n};\n\n/**\n * Compiles a brace pattern into a regex-compatible, optimized string.\n * This method is called by the main [braces](#braces) function by default.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.compile('a/{b,c}/d'));\n * //=> ['a/(b|c)/d']\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.compile = (input, options = {}) => {\n if (typeof input === 'string') {\n input = braces.parse(input, options);\n }\n return compile(input, options);\n};\n\n/**\n * Expands a brace pattern into an array. This method is called by the\n * main [braces](#braces) function when `options.expand` is true. Before\n * using this method it's recommended that you read the [performance notes](#performance))\n * and advantages of using [.compile](#compile) instead.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.expand('a/{b,c}/d'));\n * //=> ['a/b/d', 'a/c/d'];\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.expand = (input, options = {}) => {\n if (typeof input === 'string') {\n input = braces.parse(input, options);\n }\n\n let result = expand(input, options);\n\n // filter out empty strings if specified\n if (options.noempty === true) {\n result = result.filter(Boolean);\n }\n\n // filter out duplicates if specified\n if (options.nodupes === true) {\n result = [...new Set(result)];\n }\n\n return result;\n};\n\n/**\n * Processes a brace pattern and returns either an expanded array\n * (if `options.expand` is true), a highly optimized regex-compatible string.\n * This method is called by the main [braces](#braces) function.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))\n * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.create = (input, options = {}) => {\n if (input === '' || input.length < 3) {\n return [input];\n }\n\n return options.expand !== true\n ? braces.compile(input, options)\n : braces.expand(input, options);\n};\n\n/**\n * Expose \"braces\"\n */\n\nmodule.exports = braces;\n","'use strict';\n\nconst path = require('path');\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\n\nconst POSIX_CHARS = {\n DOT_LITERAL,\n PLUS_LITERAL,\n QMARK_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n QMARK,\n END_ANCHOR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n ...POSIX_CHARS,\n\n SLASH_LITERAL: `[${WIN_SLASH}]`,\n QMARK: WIN_NO_SLASH,\n STAR: `${WIN_NO_SLASH}*?`,\n DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n NO_DOT: `(?!${DOT_LITERAL})`,\n NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n END_ANCHOR: `(?:[${WIN_SLASH}]|$)`\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n alnum: 'a-zA-Z0-9',\n alpha: 'a-zA-Z',\n ascii: '\\\\x00-\\\\x7F',\n blank: ' \\\\t',\n cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n digit: '0-9',\n graph: '\\\\x21-\\\\x7E',\n lower: 'a-z',\n print: '\\\\x20-\\\\x7E ',\n punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n upper: 'A-Z',\n word: 'A-Za-z0-9_',\n xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n MAX_LENGTH: 1024 * 64,\n POSIX_REGEX_SOURCE,\n\n // regular expressions\n REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n // Replace globs with equivalent patterns to reduce parsing time.\n REPLACEMENTS: {\n '***': '*',\n '**/**': '**',\n '**/**/**': '**'\n },\n\n // Digits\n CHAR_0: 48, /* 0 */\n CHAR_9: 57, /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 65, /* A */\n CHAR_LOWERCASE_A: 97, /* a */\n CHAR_UPPERCASE_Z: 90, /* Z */\n CHAR_LOWERCASE_Z: 122, /* z */\n\n CHAR_LEFT_PARENTHESES: 40, /* ( */\n CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n CHAR_ASTERISK: 42, /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: 38, /* & */\n CHAR_AT: 64, /* @ */\n CHAR_BACKWARD_SLASH: 92, /* \\ */\n CHAR_CARRIAGE_RETURN: 13, /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n CHAR_COLON: 58, /* : */\n CHAR_COMMA: 44, /* , */\n CHAR_DOT: 46, /* . */\n CHAR_DOUBLE_QUOTE: 34, /* \" */\n CHAR_EQUAL: 61, /* = */\n CHAR_EXCLAMATION_MARK: 33, /* ! */\n CHAR_FORM_FEED: 12, /* \\f */\n CHAR_FORWARD_SLASH: 47, /* / */\n CHAR_GRAVE_ACCENT: 96, /* ` */\n CHAR_HASH: 35, /* # */\n CHAR_HYPHEN_MINUS: 45, /* - */\n CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n CHAR_LEFT_CURLY_BRACE: 123, /* { */\n CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n CHAR_LINE_FEED: 10, /* \\n */\n CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n CHAR_PERCENT: 37, /* % */\n CHAR_PLUS: 43, /* + */\n CHAR_QUESTION_MARK: 63, /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n CHAR_SEMICOLON: 59, /* ; */\n CHAR_SINGLE_QUOTE: 39, /* ' */\n CHAR_SPACE: 32, /* */\n CHAR_TAB: 9, /* \\t */\n CHAR_UNDERSCORE: 95, /* _ */\n CHAR_VERTICAL_LINE: 124, /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n SEP: path.sep,\n\n /**\n * Create EXTGLOB_CHARS\n */\n\n extglobChars(chars) {\n return {\n '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n '?': { type: 'qmark', open: '(?:', close: ')?' },\n '+': { type: 'plus', open: '(?:', close: ')+' },\n '*': { type: 'star', open: '(?:', close: ')*' },\n '@': { type: 'at', open: '(?:', close: ')' }\n };\n },\n\n /**\n * Create GLOB_CHARS\n */\n\n globChars(win32) {\n return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n }\n};\n","'use strict';\n\nconst path = require('path');\nconst win32 = process.platform === 'win32';\nconst {\n REGEX_BACKSLASH,\n REGEX_REMOVE_BACKSLASH,\n REGEX_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.removeBackslashes = str => {\n return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n return match === '\\\\' ? '' : match;\n });\n};\n\nexports.supportsLookbehinds = () => {\n const segs = process.version.slice(1).split('.').map(Number);\n if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {\n return true;\n }\n return false;\n};\n\nexports.isWindows = options => {\n if (options && typeof options.windows === 'boolean') {\n return options.windows;\n }\n return win32 === true || path.sep === '\\\\';\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n const idx = input.lastIndexOf(char, lastIdx);\n if (idx === -1) return input;\n if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n let output = input;\n if (output.startsWith('./')) {\n output = output.slice(2);\n state.prefix = './';\n }\n return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n const prepend = options.contains ? '' : '^';\n const append = options.contains ? '' : '$';\n\n let output = `${prepend}(?:${input})${append}`;\n if (state.negated === true) {\n output = `(?:^(?!${output}).*$)`;\n }\n return output;\n};\n","'use strict';\n\nconst utils = require('./utils');\nconst {\n CHAR_ASTERISK, /* * */\n CHAR_AT, /* @ */\n CHAR_BACKWARD_SLASH, /* \\ */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_EXCLAMATION_MARK, /* ! */\n CHAR_FORWARD_SLASH, /* / */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_PLUS, /* + */\n CHAR_QUESTION_MARK, /* ? */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_RIGHT_SQUARE_BRACKET /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n if (token.isPrefix !== true) {\n token.depth = token.isGlobstar ? Infinity : 1;\n }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n const opts = options || {};\n\n const length = input.length - 1;\n const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n const slashes = [];\n const tokens = [];\n const parts = [];\n\n let str = input;\n let index = -1;\n let start = 0;\n let lastIndex = 0;\n let isBrace = false;\n let isBracket = false;\n let isGlob = false;\n let isExtglob = false;\n let isGlobstar = false;\n let braceEscaped = false;\n let backslashes = false;\n let negated = false;\n let negatedExtglob = false;\n let finished = false;\n let braces = 0;\n let prev;\n let code;\n let token = { value: '', depth: 0, isGlob: false };\n\n const eos = () => index >= length;\n const peek = () => str.charCodeAt(index + 1);\n const advance = () => {\n prev = code;\n return str.charCodeAt(++index);\n };\n\n while (index < length) {\n code = advance();\n let next;\n\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braceEscaped = true;\n }\n continue;\n }\n\n if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n continue;\n }\n\n if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (braceEscaped !== true && code === CHAR_COMMA) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_RIGHT_CURLY_BRACE) {\n braces--;\n\n if (braces === 0) {\n braceEscaped = false;\n isBrace = token.isBrace = true;\n finished = true;\n break;\n }\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_FORWARD_SLASH) {\n slashes.push(index);\n tokens.push(token);\n token = { value: '', depth: 0, isGlob: false };\n\n if (finished === true) continue;\n if (prev === CHAR_DOT && index === (start + 1)) {\n start += 2;\n continue;\n }\n\n lastIndex = index + 1;\n continue;\n }\n\n if (opts.noext !== true) {\n const isExtglobChar = code === CHAR_PLUS\n || code === CHAR_AT\n || code === CHAR_ASTERISK\n || code === CHAR_QUESTION_MARK\n || code === CHAR_EXCLAMATION_MARK;\n\n if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n isExtglob = token.isExtglob = true;\n finished = true;\n if (code === CHAR_EXCLAMATION_MARK && index === start) {\n negatedExtglob = true;\n }\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n }\n\n if (code === CHAR_ASTERISK) {\n if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_QUESTION_MARK) {\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_LEFT_SQUARE_BRACKET) {\n while (eos() !== true && (next = advance())) {\n if (next === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n isBracket = token.isBracket = true;\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n negated = token.negated = true;\n start++;\n continue;\n }\n\n if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_LEFT_PARENTHESES) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n\n if (isGlob === true) {\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n }\n\n if (opts.noext === true) {\n isExtglob = false;\n isGlob = false;\n }\n\n let base = str;\n let prefix = '';\n let glob = '';\n\n if (start > 0) {\n prefix = str.slice(0, start);\n str = str.slice(start);\n lastIndex -= start;\n }\n\n if (base && isGlob === true && lastIndex > 0) {\n base = str.slice(0, lastIndex);\n glob = str.slice(lastIndex);\n } else if (isGlob === true) {\n base = '';\n glob = str;\n } else {\n base = str;\n }\n\n if (base && base !== '' && base !== '/' && base !== str) {\n if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n base = base.slice(0, -1);\n }\n }\n\n if (opts.unescape === true) {\n if (glob) glob = utils.removeBackslashes(glob);\n\n if (base && backslashes === true) {\n base = utils.removeBackslashes(base);\n }\n }\n\n const state = {\n prefix,\n input,\n start,\n base,\n glob,\n isBrace,\n isBracket,\n isGlob,\n isExtglob,\n isGlobstar,\n negated,\n negatedExtglob\n };\n\n if (opts.tokens === true) {\n state.maxDepth = 0;\n if (!isPathSeparator(code)) {\n tokens.push(token);\n }\n state.tokens = tokens;\n }\n\n if (opts.parts === true || opts.tokens === true) {\n let prevIndex;\n\n for (let idx = 0; idx < slashes.length; idx++) {\n const n = prevIndex ? prevIndex + 1 : start;\n const i = slashes[idx];\n const value = input.slice(n, i);\n if (opts.tokens) {\n if (idx === 0 && start !== 0) {\n tokens[idx].isPrefix = true;\n tokens[idx].value = prefix;\n } else {\n tokens[idx].value = value;\n }\n depth(tokens[idx]);\n state.maxDepth += tokens[idx].depth;\n }\n if (idx !== 0 || value !== '') {\n parts.push(value);\n }\n prevIndex = i;\n }\n\n if (prevIndex && prevIndex + 1 < input.length) {\n const value = input.slice(prevIndex + 1);\n parts.push(value);\n\n if (opts.tokens) {\n tokens[tokens.length - 1].value = value;\n depth(tokens[tokens.length - 1]);\n state.maxDepth += tokens[tokens.length - 1].depth;\n }\n }\n\n state.slashes = slashes;\n state.parts = parts;\n }\n\n return state;\n};\n\nmodule.exports = scan;\n","'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n POSIX_REGEX_SOURCE,\n REGEX_NON_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_BACKREF,\n REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n if (typeof options.expandRange === 'function') {\n return options.expandRange(...args, options);\n }\n\n args.sort();\n const value = `[${args.join('-')}]`;\n\n try {\n /* eslint-disable-next-line no-new */\n new RegExp(value);\n } catch (ex) {\n return args.map(v => utils.escapeRegex(v)).join('..');\n }\n\n return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n input = REPLACEMENTS[input] || input;\n\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n let len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n const tokens = [bos];\n\n const capture = opts.capture ? '' : '?:';\n const win32 = utils.isWindows(options);\n\n // create constants based on platform, for windows or posix\n const PLATFORM_CHARS = constants.globChars(win32);\n const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n const {\n DOT_LITERAL,\n PLUS_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n } = PLATFORM_CHARS;\n\n const globstar = opts => {\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const nodot = opts.dot ? '' : NO_DOT;\n const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n let star = opts.bash === true ? globstar(opts) : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n // minimatch options support\n if (typeof opts.noext === 'boolean') {\n opts.noextglob = opts.noext;\n }\n\n const state = {\n input,\n index: -1,\n start: 0,\n dot: opts.dot === true,\n consumed: '',\n output: '',\n prefix: '',\n backtrack: false,\n negated: false,\n brackets: 0,\n braces: 0,\n parens: 0,\n quotes: 0,\n globstar: false,\n tokens\n };\n\n input = utils.removePrefix(input, state);\n len = input.length;\n\n const extglobs = [];\n const braces = [];\n const stack = [];\n let prev = bos;\n let value;\n\n /**\n * Tokenizing helpers\n */\n\n const eos = () => state.index === len - 1;\n const peek = state.peek = (n = 1) => input[state.index + n];\n const advance = state.advance = () => input[++state.index] || '';\n const remaining = () => input.slice(state.index + 1);\n const consume = (value = '', num = 0) => {\n state.consumed += value;\n state.index += num;\n };\n\n const append = token => {\n state.output += token.output != null ? token.output : token.value;\n consume(token.value);\n };\n\n const negate = () => {\n let count = 1;\n\n while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n advance();\n state.start++;\n count++;\n }\n\n if (count % 2 === 0) {\n return false;\n }\n\n state.negated = true;\n state.start++;\n return true;\n };\n\n const increment = type => {\n state[type]++;\n stack.push(type);\n };\n\n const decrement = type => {\n state[type]--;\n stack.pop();\n };\n\n /**\n * Push tokens onto the tokens array. This helper speeds up\n * tokenizing by 1) helping us avoid backtracking as much as possible,\n * and 2) helping us avoid creating extra tokens when consecutive\n * characters are plain text. This improves performance and simplifies\n * lookbehinds.\n */\n\n const push = tok => {\n if (prev.type === 'globstar') {\n const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n state.output = state.output.slice(0, -prev.output.length);\n prev.type = 'star';\n prev.value = '*';\n prev.output = star;\n state.output += prev.output;\n }\n }\n\n if (extglobs.length && tok.type !== 'paren') {\n extglobs[extglobs.length - 1].inner += tok.value;\n }\n\n if (tok.value || tok.output) append(tok);\n if (prev && prev.type === 'text' && tok.type === 'text') {\n prev.value += tok.value;\n prev.output = (prev.output || '') + tok.value;\n return;\n }\n\n tok.prev = prev;\n tokens.push(tok);\n prev = tok;\n };\n\n const extglobOpen = (type, value) => {\n const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n token.prev = prev;\n token.parens = state.parens;\n token.output = state.output;\n const output = (opts.capture ? '(' : '') + token.open;\n\n increment('parens');\n push({ type, value, output: state.output ? '' : ONE_CHAR });\n push({ type: 'paren', extglob: true, value: advance(), output });\n extglobs.push(token);\n };\n\n const extglobClose = token => {\n let output = token.close + (opts.capture ? ')' : '');\n let rest;\n\n if (token.type === 'negate') {\n let extglobStar = star;\n\n if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n extglobStar = globstar(opts);\n }\n\n if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n output = token.close = `)$))${extglobStar}`;\n }\n\n if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.\n // In this case, we need to parse the string and use it in the output of the original pattern.\n // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.\n //\n // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.\n const expression = parse(rest, { ...options, fastpaths: false }).output;\n\n output = token.close = `)${expression})${extglobStar})`;\n }\n\n if (token.prev.type === 'bos') {\n state.negatedExtglob = true;\n }\n }\n\n push({ type: 'paren', extglob: true, value, output });\n decrement('parens');\n };\n\n /**\n * Fast paths\n */\n\n if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n let backslashes = false;\n\n let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n if (first === '\\\\') {\n backslashes = true;\n return m;\n }\n\n if (first === '?') {\n if (esc) {\n return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n }\n if (index === 0) {\n return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n }\n return QMARK.repeat(chars.length);\n }\n\n if (first === '.') {\n return DOT_LITERAL.repeat(chars.length);\n }\n\n if (first === '*') {\n if (esc) {\n return esc + first + (rest ? star : '');\n }\n return star;\n }\n return esc ? m : `\\\\${m}`;\n });\n\n if (backslashes === true) {\n if (opts.unescape === true) {\n output = output.replace(/\\\\/g, '');\n } else {\n output = output.replace(/\\\\+/g, m => {\n return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n });\n }\n }\n\n if (output === input && opts.contains === true) {\n state.output = input;\n return state;\n }\n\n state.output = utils.wrapOutput(output, state, options);\n return state;\n }\n\n /**\n * Tokenize input until we reach end-of-string\n */\n\n while (!eos()) {\n value = advance();\n\n if (value === '\\u0000') {\n continue;\n }\n\n /**\n * Escaped characters\n */\n\n if (value === '\\\\') {\n const next = peek();\n\n if (next === '/' && opts.bash !== true) {\n continue;\n }\n\n if (next === '.' || next === ';') {\n continue;\n }\n\n if (!next) {\n value += '\\\\';\n push({ type: 'text', value });\n continue;\n }\n\n // collapse slashes to reduce potential for exploits\n const match = /^\\\\+/.exec(remaining());\n let slashes = 0;\n\n if (match && match[0].length > 2) {\n slashes = match[0].length;\n state.index += slashes;\n if (slashes % 2 !== 0) {\n value += '\\\\';\n }\n }\n\n if (opts.unescape === true) {\n value = advance();\n } else {\n value += advance();\n }\n\n if (state.brackets === 0) {\n push({ type: 'text', value });\n continue;\n }\n }\n\n /**\n * If we're inside a regex character class, continue\n * until we reach the closing bracket.\n */\n\n if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n if (opts.posix !== false && value === ':') {\n const inner = prev.value.slice(1);\n if (inner.includes('[')) {\n prev.posix = true;\n\n if (inner.includes(':')) {\n const idx = prev.value.lastIndexOf('[');\n const pre = prev.value.slice(0, idx);\n const rest = prev.value.slice(idx + 2);\n const posix = POSIX_REGEX_SOURCE[rest];\n if (posix) {\n prev.value = pre + posix;\n state.backtrack = true;\n advance();\n\n if (!bos.output && tokens.indexOf(prev) === 1) {\n bos.output = ONE_CHAR;\n }\n continue;\n }\n }\n }\n }\n\n if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n value = `\\\\${value}`;\n }\n\n if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n value = `\\\\${value}`;\n }\n\n if (opts.posix === true && value === '!' && prev.value === '[') {\n value = '^';\n }\n\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * If we're inside a quoted string, continue\n * until we reach the closing double quote.\n */\n\n if (state.quotes === 1 && value !== '\"') {\n value = utils.escapeRegex(value);\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * Double quotes\n */\n\n if (value === '\"') {\n state.quotes = state.quotes === 1 ? 0 : 1;\n if (opts.keepQuotes === true) {\n push({ type: 'text', value });\n }\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === '(') {\n increment('parens');\n push({ type: 'paren', value });\n continue;\n }\n\n if (value === ')') {\n if (state.parens === 0 && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '('));\n }\n\n const extglob = extglobs[extglobs.length - 1];\n if (extglob && state.parens === extglob.parens + 1) {\n extglobClose(extglobs.pop());\n continue;\n }\n\n push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n decrement('parens');\n continue;\n }\n\n /**\n * Square brackets\n */\n\n if (value === '[') {\n if (opts.nobracket === true || !remaining().includes(']')) {\n if (opts.nobracket !== true && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('closing', ']'));\n }\n\n value = `\\\\${value}`;\n } else {\n increment('brackets');\n }\n\n push({ type: 'bracket', value });\n continue;\n }\n\n if (value === ']') {\n if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n if (state.brackets === 0) {\n if (opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '['));\n }\n\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n decrement('brackets');\n\n const prevValue = prev.value.slice(1);\n if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n value = `/${value}`;\n }\n\n prev.value += value;\n append({ value });\n\n // when literal brackets are explicitly disabled\n // assume we should match with a regex character class\n if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n continue;\n }\n\n const escaped = utils.escapeRegex(prev.value);\n state.output = state.output.slice(0, -prev.value.length);\n\n // when literal brackets are explicitly enabled\n // assume we should escape the brackets to match literal characters\n if (opts.literalBrackets === true) {\n state.output += escaped;\n prev.value = escaped;\n continue;\n }\n\n // when the user specifies nothing, try to match both\n prev.value = `(${capture}${escaped}|${prev.value})`;\n state.output += prev.value;\n continue;\n }\n\n /**\n * Braces\n */\n\n if (value === '{' && opts.nobrace !== true) {\n increment('braces');\n\n const open = {\n type: 'brace',\n value,\n output: '(',\n outputIndex: state.output.length,\n tokensIndex: state.tokens.length\n };\n\n braces.push(open);\n push(open);\n continue;\n }\n\n if (value === '}') {\n const brace = braces[braces.length - 1];\n\n if (opts.nobrace === true || !brace) {\n push({ type: 'text', value, output: value });\n continue;\n }\n\n let output = ')';\n\n if (brace.dots === true) {\n const arr = tokens.slice();\n const range = [];\n\n for (let i = arr.length - 1; i >= 0; i--) {\n tokens.pop();\n if (arr[i].type === 'brace') {\n break;\n }\n if (arr[i].type !== 'dots') {\n range.unshift(arr[i].value);\n }\n }\n\n output = expandRange(range, opts);\n state.backtrack = true;\n }\n\n if (brace.comma !== true && brace.dots !== true) {\n const out = state.output.slice(0, brace.outputIndex);\n const toks = state.tokens.slice(brace.tokensIndex);\n brace.value = brace.output = '\\\\{';\n value = output = '\\\\}';\n state.output = out;\n for (const t of toks) {\n state.output += (t.output || t.value);\n }\n }\n\n push({ type: 'brace', value, output });\n decrement('braces');\n braces.pop();\n continue;\n }\n\n /**\n * Pipes\n */\n\n if (value === '|') {\n if (extglobs.length > 0) {\n extglobs[extglobs.length - 1].conditions++;\n }\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Commas\n */\n\n if (value === ',') {\n let output = value;\n\n const brace = braces[braces.length - 1];\n if (brace && stack[stack.length - 1] === 'braces') {\n brace.comma = true;\n output = '|';\n }\n\n push({ type: 'comma', value, output });\n continue;\n }\n\n /**\n * Slashes\n */\n\n if (value === '/') {\n // if the beginning of the glob is \"./\", advance the start\n // to the current index, and don't add the \"./\" characters\n // to the state. This greatly simplifies lookbehinds when\n // checking for BOS characters like \"!\" and \".\" (not \"./\")\n if (prev.type === 'dot' && state.index === state.start + 1) {\n state.start = state.index + 1;\n state.consumed = '';\n state.output = '';\n tokens.pop();\n prev = bos; // reset \"prev\" to the first token\n continue;\n }\n\n push({ type: 'slash', value, output: SLASH_LITERAL });\n continue;\n }\n\n /**\n * Dots\n */\n\n if (value === '.') {\n if (state.braces > 0 && prev.type === 'dot') {\n if (prev.value === '.') prev.output = DOT_LITERAL;\n const brace = braces[braces.length - 1];\n prev.type = 'dots';\n prev.output += value;\n prev.value += value;\n brace.dots = true;\n continue;\n }\n\n if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n push({ type: 'text', value, output: DOT_LITERAL });\n continue;\n }\n\n push({ type: 'dot', value, output: DOT_LITERAL });\n continue;\n }\n\n /**\n * Question marks\n */\n\n if (value === '?') {\n const isGroup = prev && prev.value === '(';\n if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('qmark', value);\n continue;\n }\n\n if (prev && prev.type === 'paren') {\n const next = peek();\n let output = value;\n\n if (next === '<' && !utils.supportsLookbehinds()) {\n throw new Error('Node.js v10 or higher is required for regex lookbehinds');\n }\n\n if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n output = `\\\\${value}`;\n }\n\n push({ type: 'text', value, output });\n continue;\n }\n\n if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n push({ type: 'qmark', value, output: QMARK_NO_DOT });\n continue;\n }\n\n push({ type: 'qmark', value, output: QMARK });\n continue;\n }\n\n /**\n * Exclamation\n */\n\n if (value === '!') {\n if (opts.noextglob !== true && peek() === '(') {\n if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n extglobOpen('negate', value);\n continue;\n }\n }\n\n if (opts.nonegate !== true && state.index === 0) {\n negate();\n continue;\n }\n }\n\n /**\n * Plus\n */\n\n if (value === '+') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('plus', value);\n continue;\n }\n\n if ((prev && prev.value === '(') || opts.regex === false) {\n push({ type: 'plus', value, output: PLUS_LITERAL });\n continue;\n }\n\n if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n push({ type: 'plus', value });\n continue;\n }\n\n push({ type: 'plus', value: PLUS_LITERAL });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value === '@') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n push({ type: 'at', extglob: true, value, output: '' });\n continue;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value !== '*') {\n if (value === '$' || value === '^') {\n value = `\\\\${value}`;\n }\n\n const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n if (match) {\n value += match[0];\n state.index += match[0].length;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Stars\n */\n\n if (prev && (prev.type === 'globstar' || prev.star === true)) {\n prev.type = 'star';\n prev.star = true;\n prev.value += value;\n prev.output = star;\n state.backtrack = true;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n let rest = remaining();\n if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n extglobOpen('star', value);\n continue;\n }\n\n if (prev.type === 'star') {\n if (opts.noglobstar === true) {\n consume(value);\n continue;\n }\n\n const prior = prev.prev;\n const before = prior.prev;\n const isStart = prior.type === 'slash' || prior.type === 'bos';\n const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n // strip consecutive `/**/`\n while (rest.slice(0, 3) === '/**') {\n const after = input[state.index + 4];\n if (after && after !== '/') {\n break;\n }\n rest = rest.slice(3);\n consume('/**', 3);\n }\n\n if (prior.type === 'bos' && eos()) {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = globstar(opts);\n state.output = prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n prev.value += value;\n state.globstar = true;\n state.output += prior.output + prev.output;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n const end = rest[1] !== void 0 ? '|$' : '';\n\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n prev.value += value;\n\n state.output += prior.output + prev.output;\n state.globstar = true;\n\n consume(value + advance());\n\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n if (prior.type === 'bos' && rest[0] === '/') {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n state.output = prev.output;\n state.globstar = true;\n consume(value + advance());\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n // remove single star from output\n state.output = state.output.slice(0, -prev.output.length);\n\n // reset previous token to globstar\n prev.type = 'globstar';\n prev.output = globstar(opts);\n prev.value += value;\n\n // reset output with globstar\n state.output += prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n const token = { type: 'star', value, output: star };\n\n if (opts.bash === true) {\n token.output = '.*?';\n if (prev.type === 'bos' || prev.type === 'slash') {\n token.output = nodot + token.output;\n }\n push(token);\n continue;\n }\n\n if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n token.output = value;\n push(token);\n continue;\n }\n\n if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n if (prev.type === 'dot') {\n state.output += NO_DOT_SLASH;\n prev.output += NO_DOT_SLASH;\n\n } else if (opts.dot === true) {\n state.output += NO_DOTS_SLASH;\n prev.output += NO_DOTS_SLASH;\n\n } else {\n state.output += nodot;\n prev.output += nodot;\n }\n\n if (peek() !== '*') {\n state.output += ONE_CHAR;\n prev.output += ONE_CHAR;\n }\n }\n\n push(token);\n }\n\n while (state.brackets > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n state.output = utils.escapeLast(state.output, '[');\n decrement('brackets');\n }\n\n while (state.parens > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n state.output = utils.escapeLast(state.output, '(');\n decrement('parens');\n }\n\n while (state.braces > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n state.output = utils.escapeLast(state.output, '{');\n decrement('braces');\n }\n\n if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n }\n\n // rebuild the output if we had to backtrack at any point\n if (state.backtrack === true) {\n state.output = '';\n\n for (const token of state.tokens) {\n state.output += token.output != null ? token.output : token.value;\n\n if (token.suffix) {\n state.output += token.suffix;\n }\n }\n }\n\n return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n const len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n input = REPLACEMENTS[input] || input;\n const win32 = utils.isWindows(options);\n\n // create constants based on platform, for windows or posix\n const {\n DOT_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOTS_SLASH,\n STAR,\n START_ANCHOR\n } = constants.globChars(win32);\n\n const nodot = opts.dot ? NO_DOTS : NO_DOT;\n const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n const capture = opts.capture ? '' : '?:';\n const state = { negated: false, prefix: '' };\n let star = opts.bash === true ? '.*?' : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n const globstar = opts => {\n if (opts.noglobstar === true) return star;\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const create = str => {\n switch (str) {\n case '*':\n return `${nodot}${ONE_CHAR}${star}`;\n\n case '.*':\n return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*.*':\n return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*/*':\n return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n case '**':\n return nodot + globstar(opts);\n\n case '**/*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n case '**/*.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '**/.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n default: {\n const match = /^(.*?)\\.(\\w+)$/.exec(str);\n if (!match) return;\n\n const source = create(match[1]);\n if (!source) return;\n\n return source + DOT_LITERAL + match[2];\n }\n }\n };\n\n const output = utils.removePrefix(input, state);\n let source = create(output);\n\n if (source && opts.strictSlashes !== true) {\n source += `${SLASH_LITERAL}?`;\n }\n\n return source;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nconst path = require('path');\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n if (Array.isArray(glob)) {\n const fns = glob.map(input => picomatch(input, options, returnState));\n const arrayMatcher = str => {\n for (const isMatch of fns) {\n const state = isMatch(str);\n if (state) return state;\n }\n return false;\n };\n return arrayMatcher;\n }\n\n const isState = isObject(glob) && glob.tokens && glob.input;\n\n if (glob === '' || (typeof glob !== 'string' && !isState)) {\n throw new TypeError('Expected pattern to be a non-empty string');\n }\n\n const opts = options || {};\n const posix = utils.isWindows(options);\n const regex = isState\n ? picomatch.compileRe(glob, options)\n : picomatch.makeRe(glob, options, false, true);\n\n const state = regex.state;\n delete regex.state;\n\n let isIgnored = () => false;\n if (opts.ignore) {\n const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n }\n\n const matcher = (input, returnObject = false) => {\n const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n if (typeof opts.onResult === 'function') {\n opts.onResult(result);\n }\n\n if (isMatch === false) {\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (isIgnored(input)) {\n if (typeof opts.onIgnore === 'function') {\n opts.onIgnore(result);\n }\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (typeof opts.onMatch === 'function') {\n opts.onMatch(result);\n }\n return returnObject ? result : true;\n };\n\n if (returnState) {\n matcher.state = state;\n }\n\n return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected input to be a string');\n }\n\n if (input === '') {\n return { isMatch: false, output: '' };\n }\n\n const opts = options || {};\n const format = opts.format || (posix ? utils.toPosixSlashes : null);\n let match = input === glob;\n let output = (match && format) ? format(input) : input;\n\n if (match === false) {\n output = format ? format(input) : input;\n match = output === glob;\n }\n\n if (match === false || opts.capture === true) {\n if (opts.matchBase === true || opts.basename === true) {\n match = picomatch.matchBase(input, regex, options, posix);\n } else {\n match = regex.exec(output);\n }\n }\n\n return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {\n const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n return regex.test(path.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n * input: '!./foo/*.js',\n * start: 3,\n * base: 'foo',\n * glob: '*.js',\n * isBrace: false,\n * isBracket: false,\n * isGlob: true,\n * isExtglob: false,\n * isGlobstar: false,\n * negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n if (returnOutput === true) {\n return state.output;\n }\n\n const opts = options || {};\n const prepend = opts.contains ? '' : '^';\n const append = opts.contains ? '' : '$';\n\n let source = `${prepend}(?:${state.output})${append}`;\n if (state && state.negated === true) {\n source = `^(?!${source}).*$`;\n }\n\n const regex = picomatch.toRegex(source, options);\n if (returnState === true) {\n regex.state = state;\n }\n\n return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n if (!input || typeof input !== 'string') {\n throw new TypeError('Expected a non-empty string');\n }\n\n let parsed = { negated: false, fastpaths: true };\n\n if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n parsed.output = parse.fastpaths(input, options);\n }\n\n if (!parsed.output) {\n parsed = parse(input, options);\n }\n\n return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n try {\n const opts = options || {};\n return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n } catch (err) {\n if (options && options.debug === true) throw err;\n return /$^/;\n }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n","'use strict';\n\nmodule.exports = require('./lib/picomatch');\n","'use strict';\n\nconst util = require('util');\nconst braces = require('braces');\nconst picomatch = require('picomatch');\nconst utils = require('picomatch/lib/utils');\n\nconst isEmptyString = v => v === '' || v === './';\nconst hasBraces = v => {\n const index = v.indexOf('{');\n return index > -1 && v.indexOf('}', index) > -1;\n};\n\n/**\n * Returns an array of strings that match one or more glob patterns.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm(list, patterns[, options]);\n *\n * console.log(mm(['a.js', 'a.txt'], ['*.js']));\n * //=> [ 'a.js' ]\n * ```\n * @param {String|Array<string>} `list` List of strings to match.\n * @param {String|Array<string>} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options)\n * @return {Array} Returns an array of matches\n * @summary false\n * @api public\n */\n\nconst micromatch = (list, patterns, options) => {\n patterns = [].concat(patterns);\n list = [].concat(list);\n\n let omit = new Set();\n let keep = new Set();\n let items = new Set();\n let negatives = 0;\n\n let onResult = state => {\n items.add(state.output);\n if (options && options.onResult) {\n options.onResult(state);\n }\n };\n\n for (let i = 0; i < patterns.length; i++) {\n let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true);\n let negated = isMatch.state.negated || isMatch.state.negatedExtglob;\n if (negated) negatives++;\n\n for (let item of list) {\n let matched = isMatch(item, true);\n\n let match = negated ? !matched.isMatch : matched.isMatch;\n if (!match) continue;\n\n if (negated) {\n omit.add(matched.output);\n } else {\n omit.delete(matched.output);\n keep.add(matched.output);\n }\n }\n }\n\n let result = negatives === patterns.length ? [...items] : [...keep];\n let matches = result.filter(item => !omit.has(item));\n\n if (options && matches.length === 0) {\n if (options.failglob === true) {\n throw new Error(`No matches found for \"${patterns.join(', ')}\"`);\n }\n\n if (options.nonull === true || options.nullglob === true) {\n return options.unescape ? patterns.map(p => p.replace(/\\\\/g, '')) : patterns;\n }\n }\n\n return matches;\n};\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.match = micromatch;\n\n/**\n * Returns a matcher function from the given glob `pattern` and `options`.\n * The returned function takes a string to match as its only argument and returns\n * true if the string is a match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matcher(pattern[, options]);\n *\n * const isMatch = mm.matcher('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @param {String} `pattern` Glob pattern\n * @param {Object} `options`\n * @return {Function} Returns a matcher function.\n * @api public\n */\n\nmicromatch.matcher = (pattern, options) => picomatch(pattern, options);\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.isMatch(string, patterns[, options]);\n *\n * console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(mm.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `[options]` See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.any = micromatch.isMatch;\n\n/**\n * Returns a list of strings that _**do not match any**_ of the given `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.not(list, patterns[, options]);\n *\n * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));\n * //=> ['b.b', 'c.c']\n * ```\n * @param {Array} `list` Array of strings to match.\n * @param {String|Array} `patterns` One or more glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array} Returns an array of strings that **do not match** the given patterns.\n * @api public\n */\n\nmicromatch.not = (list, patterns, options = {}) => {\n patterns = [].concat(patterns).map(String);\n let result = new Set();\n let items = [];\n\n let onResult = state => {\n if (options.onResult) options.onResult(state);\n items.push(state.output);\n };\n\n let matches = new Set(micromatch(list, patterns, { ...options, onResult }));\n\n for (let item of items) {\n if (!matches.has(item)) {\n result.add(item);\n }\n }\n return [...result];\n};\n\n/**\n * Returns true if the given `string` contains the given pattern. Similar\n * to [.isMatch](#isMatch) but the pattern can match any part of the string.\n *\n * ```js\n * var mm = require('micromatch');\n * // mm.contains(string, pattern[, options]);\n *\n * console.log(mm.contains('aa/bb/cc', '*b'));\n * //=> true\n * console.log(mm.contains('aa/bb/cc', '*d'));\n * //=> false\n * ```\n * @param {String} `str` The string to match.\n * @param {String|Array} `patterns` Glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any of the patterns matches any part of `str`.\n * @api public\n */\n\nmicromatch.contains = (str, pattern, options) => {\n if (typeof str !== 'string') {\n throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n }\n\n if (Array.isArray(pattern)) {\n return pattern.some(p => micromatch.contains(str, p, options));\n }\n\n if (typeof pattern === 'string') {\n if (isEmptyString(str) || isEmptyString(pattern)) {\n return false;\n }\n\n if (str.includes(pattern) || (str.startsWith('./') && str.slice(2).includes(pattern))) {\n return true;\n }\n }\n\n return micromatch.isMatch(str, pattern, { ...options, contains: true });\n};\n\n/**\n * Filter the keys of the given object with the given `glob` pattern\n * and `options`. Does not attempt to match nested keys. If you need this feature,\n * use [glob-object][] instead.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matchKeys(object, patterns[, options]);\n *\n * const obj = { aa: 'a', ab: 'b', ac: 'c' };\n * console.log(mm.matchKeys(obj, '*b'));\n * //=> { ab: 'b' }\n * ```\n * @param {Object} `object` The object with keys to filter.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Object} Returns an object with only keys that match the given patterns.\n * @api public\n */\n\nmicromatch.matchKeys = (obj, patterns, options) => {\n if (!utils.isObject(obj)) {\n throw new TypeError('Expected the first argument to be an object');\n }\n let keys = micromatch(Object.keys(obj), patterns, options);\n let res = {};\n for (let key of keys) res[key] = obj[key];\n return res;\n};\n\n/**\n * Returns true if some of the strings in the given `list` match any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.some(list, patterns[, options]);\n *\n * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // true\n * console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any `patterns` matches any of the strings in `list`\n * @api public\n */\n\nmicromatch.some = (list, patterns, options) => {\n let items = [].concat(list);\n\n for (let pattern of [].concat(patterns)) {\n let isMatch = picomatch(String(pattern), options);\n if (items.some(item => isMatch(item))) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * Returns true if every string in the given `list` matches\n * any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.every(list, patterns[, options]);\n *\n * console.log(mm.every('foo.js', ['foo.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // false\n * console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if all `patterns` matches all of the strings in `list`\n * @api public\n */\n\nmicromatch.every = (list, patterns, options) => {\n let items = [].concat(list);\n\n for (let pattern of [].concat(patterns)) {\n let isMatch = picomatch(String(pattern), options);\n if (!items.every(item => isMatch(item))) {\n return false;\n }\n }\n return true;\n};\n\n/**\n * Returns true if **all** of the given `patterns` match\n * the specified string.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.all(string, patterns[, options]);\n *\n * console.log(mm.all('foo.js', ['foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', '!foo.js']));\n * // false\n *\n * console.log(mm.all('foo.js', ['*.js', 'foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));\n * // true\n * ```\n * @param {String|Array} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.all = (str, patterns, options) => {\n if (typeof str !== 'string') {\n throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n }\n\n return [].concat(patterns).every(p => picomatch(p, options)(str));\n};\n\n/**\n * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.capture(pattern, string[, options]);\n *\n * console.log(mm.capture('test/*.js', 'test/foo.js'));\n * //=> ['foo']\n * console.log(mm.capture('test/*.js', 'foo/bar.css'));\n * //=> null\n * ```\n * @param {String} `glob` Glob pattern to use for matching.\n * @param {String} `input` String to match\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array|null} Returns an array of captures if the input matches the glob pattern, otherwise `null`.\n * @api public\n */\n\nmicromatch.capture = (glob, input, options) => {\n let posix = utils.isWindows(options);\n let regex = picomatch.makeRe(String(glob), { ...options, capture: true });\n let match = regex.exec(posix ? utils.toPosixSlashes(input) : input);\n\n if (match) {\n return match.slice(1).map(v => v === void 0 ? '' : v);\n }\n};\n\n/**\n * Create a regular expression from the given glob `pattern`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.makeRe(pattern[, options]);\n *\n * console.log(mm.makeRe('*.js'));\n * //=> /^(?:(\\.[\\\\\\/])?(?!\\.)(?=.)[^\\/]*?\\.js)$/\n * ```\n * @param {String} `pattern` A glob pattern to convert to regex.\n * @param {Object} `options`\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\nmicromatch.makeRe = (...args) => picomatch.makeRe(...args);\n\n/**\n * Scan a glob pattern to separate the pattern into segments. Used\n * by the [split](#split) method.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.scan(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\nmicromatch.scan = (...args) => picomatch.scan(...args);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.parse(pattern[, options]);\n * ```\n * @param {String} `glob`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as regex source string.\n * @api public\n */\n\nmicromatch.parse = (patterns, options) => {\n let res = [];\n for (let pattern of [].concat(patterns || [])) {\n for (let str of braces(String(pattern), options)) {\n res.push(picomatch.parse(str, options));\n }\n }\n return res;\n};\n\n/**\n * Process the given brace `pattern`.\n *\n * ```js\n * const { braces } = require('micromatch');\n * console.log(braces('foo/{a,b,c}/bar'));\n * //=> [ 'foo/(a|b|c)/bar' ]\n *\n * console.log(braces('foo/{a,b,c}/bar', { expand: true }));\n * //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ]\n * ```\n * @param {String} `pattern` String with brace pattern to process.\n * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options.\n * @return {Array}\n * @api public\n */\n\nmicromatch.braces = (pattern, options) => {\n if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n if ((options && options.nobrace === true) || !hasBraces(pattern)) {\n return [pattern];\n }\n return braces(pattern, options);\n};\n\n/**\n * Expand braces\n */\n\nmicromatch.braceExpand = (pattern, options) => {\n if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n return micromatch.braces(pattern, { ...options, expand: true });\n};\n\n/**\n * Expose micromatch\n */\n\n// exposed for tests\nmicromatch.hasBraces = hasBraces;\nmodule.exports = micromatch;\n","'use strict';\n\nconst ALIAS = Symbol.for('yaml.alias');\nconst DOC = Symbol.for('yaml.document');\nconst MAP = Symbol.for('yaml.map');\nconst PAIR = Symbol.for('yaml.pair');\nconst SCALAR = Symbol.for('yaml.scalar');\nconst SEQ = Symbol.for('yaml.seq');\nconst NODE_TYPE = Symbol.for('yaml.node.type');\nconst isAlias = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === ALIAS;\nconst isDocument = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === DOC;\nconst isMap = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === MAP;\nconst isPair = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === PAIR;\nconst isScalar = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SCALAR;\nconst isSeq = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SEQ;\nfunction isCollection(node) {\n if (node && typeof node === 'object')\n switch (node[NODE_TYPE]) {\n case MAP:\n case SEQ:\n return true;\n }\n return false;\n}\nfunction isNode(node) {\n if (node && typeof node === 'object')\n switch (node[NODE_TYPE]) {\n case ALIAS:\n case MAP:\n case SCALAR:\n case SEQ:\n return true;\n }\n return false;\n}\nconst hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor;\n\nexports.ALIAS = ALIAS;\nexports.DOC = DOC;\nexports.MAP = MAP;\nexports.NODE_TYPE = NODE_TYPE;\nexports.PAIR = PAIR;\nexports.SCALAR = SCALAR;\nexports.SEQ = SEQ;\nexports.hasAnchor = hasAnchor;\nexports.isAlias = isAlias;\nexports.isCollection = isCollection;\nexports.isDocument = isDocument;\nexports.isMap = isMap;\nexports.isNode = isNode;\nexports.isPair = isPair;\nexports.isScalar = isScalar;\nexports.isSeq = isSeq;\n","'use strict';\n\nvar identity = require('./nodes/identity.js');\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove node');\n/**\n * Apply a visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n * - `key`: For sequence values and map `Pair`, the node's index in the\n * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n * `null` for the root node.\n * - `node`: The current node.\n * - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this node, continue with next\n * sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current node, then continue with the next one\n * - `Node`: Replace the current node, then continue by visiting it\n * - `number`: While iterating the items of a sequence or map, set the index\n * of the next step. This is useful especially if the index of the current\n * node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nfunction visit(node, visitor) {\n const visitor_ = initVisitor(visitor);\n if (identity.isDocument(node)) {\n const cd = visit_(null, node.contents, visitor_, Object.freeze([node]));\n if (cd === REMOVE)\n node.contents = null;\n }\n else\n visit_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisit.SKIP = SKIP;\n/** Remove the current node */\nvisit.REMOVE = REMOVE;\nfunction visit_(key, node, visitor, path) {\n const ctrl = callVisitor(key, node, visitor, path);\n if (identity.isNode(ctrl) || identity.isPair(ctrl)) {\n replaceNode(key, path, ctrl);\n return visit_(key, ctrl, visitor, path);\n }\n if (typeof ctrl !== 'symbol') {\n if (identity.isCollection(node)) {\n path = Object.freeze(path.concat(node));\n for (let i = 0; i < node.items.length; ++i) {\n const ci = visit_(i, node.items[i], visitor, path);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n node.items.splice(i, 1);\n i -= 1;\n }\n }\n }\n else if (identity.isPair(node)) {\n path = Object.freeze(path.concat(node));\n const ck = visit_('key', node.key, visitor, path);\n if (ck === BREAK)\n return BREAK;\n else if (ck === REMOVE)\n node.key = null;\n const cv = visit_('value', node.value, visitor, path);\n if (cv === BREAK)\n return BREAK;\n else if (cv === REMOVE)\n node.value = null;\n }\n }\n return ctrl;\n}\n/**\n * Apply an async visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n * - `key`: For sequence values and map `Pair`, the node's index in the\n * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n * `null` for the root node.\n * - `node`: The current node.\n * - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `Promise`: Must resolve to one of the following values\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this node, continue with next\n * sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current node, then continue with the next one\n * - `Node`: Replace the current node, then continue by visiting it\n * - `number`: While iterating the items of a sequence or map, set the index\n * of the next step. This is useful especially if the index of the current\n * node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nasync function visitAsync(node, visitor) {\n const visitor_ = initVisitor(visitor);\n if (identity.isDocument(node)) {\n const cd = await visitAsync_(null, node.contents, visitor_, Object.freeze([node]));\n if (cd === REMOVE)\n node.contents = null;\n }\n else\n await visitAsync_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisitAsync.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisitAsync.SKIP = SKIP;\n/** Remove the current node */\nvisitAsync.REMOVE = REMOVE;\nasync function visitAsync_(key, node, visitor, path) {\n const ctrl = await callVisitor(key, node, visitor, path);\n if (identity.isNode(ctrl) || identity.isPair(ctrl)) {\n replaceNode(key, path, ctrl);\n return visitAsync_(key, ctrl, visitor, path);\n }\n if (typeof ctrl !== 'symbol') {\n if (identity.isCollection(node)) {\n path = Object.freeze(path.concat(node));\n for (let i = 0; i < node.items.length; ++i) {\n const ci = await visitAsync_(i, node.items[i], visitor, path);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n node.items.splice(i, 1);\n i -= 1;\n }\n }\n }\n else if (identity.isPair(node)) {\n path = Object.freeze(path.concat(node));\n const ck = await visitAsync_('key', node.key, visitor, path);\n if (ck === BREAK)\n return BREAK;\n else if (ck === REMOVE)\n node.key = null;\n const cv = await visitAsync_('value', node.value, visitor, path);\n if (cv === BREAK)\n return BREAK;\n else if (cv === REMOVE)\n node.value = null;\n }\n }\n return ctrl;\n}\nfunction initVisitor(visitor) {\n if (typeof visitor === 'object' &&\n (visitor.Collection || visitor.Node || visitor.Value)) {\n return Object.assign({\n Alias: visitor.Node,\n Map: visitor.Node,\n Scalar: visitor.Node,\n Seq: visitor.Node\n }, visitor.Value && {\n Map: visitor.Value,\n Scalar: visitor.Value,\n Seq: visitor.Value\n }, visitor.Collection && {\n Map: visitor.Collection,\n Seq: visitor.Collection\n }, visitor);\n }\n return visitor;\n}\nfunction callVisitor(key, node, visitor, path) {\n if (typeof visitor === 'function')\n return visitor(key, node, path);\n if (identity.isMap(node))\n return visitor.Map?.(key, node, path);\n if (identity.isSeq(node))\n return visitor.Seq?.(key, node, path);\n if (identity.isPair(node))\n return visitor.Pair?.(key, node, path);\n if (identity.isScalar(node))\n return visitor.Scalar?.(key, node, path);\n if (identity.isAlias(node))\n return visitor.Alias?.(key, node, path);\n return undefined;\n}\nfunction replaceNode(key, path, node) {\n const parent = path[path.length - 1];\n if (identity.isCollection(parent)) {\n parent.items[key] = node;\n }\n else if (identity.isPair(parent)) {\n if (key === 'key')\n parent.key = node;\n else\n parent.value = node;\n }\n else if (identity.isDocument(parent)) {\n parent.contents = node;\n }\n else {\n const pt = identity.isAlias(parent) ? 'alias' : 'scalar';\n throw new Error(`Cannot replace node with ${pt} parent`);\n }\n}\n\nexports.visit = visit;\nexports.visitAsync = visitAsync;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar visit = require('../visit.js');\n\nconst escapeChars = {\n '!': '%21',\n ',': '%2C',\n '[': '%5B',\n ']': '%5D',\n '{': '%7B',\n '}': '%7D'\n};\nconst escapeTagName = (tn) => tn.replace(/[!,[\\]{}]/g, ch => escapeChars[ch]);\nclass Directives {\n constructor(yaml, tags) {\n /**\n * The directives-end/doc-start marker `---`. If `null`, a marker may still be\n * included in the document's stringified representation.\n */\n this.docStart = null;\n /** The doc-end marker `...`. */\n this.docEnd = false;\n this.yaml = Object.assign({}, Directives.defaultYaml, yaml);\n this.tags = Object.assign({}, Directives.defaultTags, tags);\n }\n clone() {\n const copy = new Directives(this.yaml, this.tags);\n copy.docStart = this.docStart;\n return copy;\n }\n /**\n * During parsing, get a Directives instance for the current document and\n * update the stream state according to the current version's spec.\n */\n atDocument() {\n const res = new Directives(this.yaml, this.tags);\n switch (this.yaml.version) {\n case '1.1':\n this.atNextDocument = true;\n break;\n case '1.2':\n this.atNextDocument = false;\n this.yaml = {\n explicit: Directives.defaultYaml.explicit,\n version: '1.2'\n };\n this.tags = Object.assign({}, Directives.defaultTags);\n break;\n }\n return res;\n }\n /**\n * @param onError - May be called even if the action was successful\n * @returns `true` on success\n */\n add(line, onError) {\n if (this.atNextDocument) {\n this.yaml = { explicit: Directives.defaultYaml.explicit, version: '1.1' };\n this.tags = Object.assign({}, Directives.defaultTags);\n this.atNextDocument = false;\n }\n const parts = line.trim().split(/[ \\t]+/);\n const name = parts.shift();\n switch (name) {\n case '%TAG': {\n if (parts.length !== 2) {\n onError(0, '%TAG directive should contain exactly two parts');\n if (parts.length < 2)\n return false;\n }\n const [handle, prefix] = parts;\n this.tags[handle] = prefix;\n return true;\n }\n case '%YAML': {\n this.yaml.explicit = true;\n if (parts.length !== 1) {\n onError(0, '%YAML directive should contain exactly one part');\n return false;\n }\n const [version] = parts;\n if (version === '1.1' || version === '1.2') {\n this.yaml.version = version;\n return true;\n }\n else {\n const isValid = /^\\d+\\.\\d+$/.test(version);\n onError(6, `Unsupported YAML version ${version}`, isValid);\n return false;\n }\n }\n default:\n onError(0, `Unknown directive ${name}`, true);\n return false;\n }\n }\n /**\n * Resolves a tag, matching handles to those defined in %TAG directives.\n *\n * @returns Resolved tag, which may also be the non-specific tag `'!'` or a\n * `'!local'` tag, or `null` if unresolvable.\n */\n tagName(source, onError) {\n if (source === '!')\n return '!'; // non-specific tag\n if (source[0] !== '!') {\n onError(`Not a valid tag: ${source}`);\n return null;\n }\n if (source[1] === '<') {\n const verbatim = source.slice(2, -1);\n if (verbatim === '!' || verbatim === '!!') {\n onError(`Verbatim tags aren't resolved, so ${source} is invalid.`);\n return null;\n }\n if (source[source.length - 1] !== '>')\n onError('Verbatim tags must end with a >');\n return verbatim;\n }\n const [, handle, suffix] = source.match(/^(.*!)([^!]*)$/s);\n if (!suffix)\n onError(`The ${source} tag has no suffix`);\n const prefix = this.tags[handle];\n if (prefix) {\n try {\n return prefix + decodeURIComponent(suffix);\n }\n catch (error) {\n onError(String(error));\n return null;\n }\n }\n if (handle === '!')\n return source; // local tag\n onError(`Could not resolve tag: ${source}`);\n return null;\n }\n /**\n * Given a fully resolved tag, returns its printable string form,\n * taking into account current tag prefixes and defaults.\n */\n tagString(tag) {\n for (const [handle, prefix] of Object.entries(this.tags)) {\n if (tag.startsWith(prefix))\n return handle + escapeTagName(tag.substring(prefix.length));\n }\n return tag[0] === '!' ? tag : `!<${tag}>`;\n }\n toString(doc) {\n const lines = this.yaml.explicit\n ? [`%YAML ${this.yaml.version || '1.2'}`]\n : [];\n const tagEntries = Object.entries(this.tags);\n let tagNames;\n if (doc && tagEntries.length > 0 && identity.isNode(doc.contents)) {\n const tags = {};\n visit.visit(doc.contents, (_key, node) => {\n if (identity.isNode(node) && node.tag)\n tags[node.tag] = true;\n });\n tagNames = Object.keys(tags);\n }\n else\n tagNames = [];\n for (const [handle, prefix] of tagEntries) {\n if (handle === '!!' && prefix === 'tag:yaml.org,2002:')\n continue;\n if (!doc || tagNames.some(tn => tn.startsWith(prefix)))\n lines.push(`%TAG ${handle} ${prefix}`);\n }\n return lines.join('\\n');\n }\n}\nDirectives.defaultYaml = { explicit: false, version: '1.2' };\nDirectives.defaultTags = { '!!': 'tag:yaml.org,2002:' };\n\nexports.Directives = Directives;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar visit = require('../visit.js');\n\n/**\n * Verify that the input string is a valid anchor.\n *\n * Will throw on errors.\n */\nfunction anchorIsValid(anchor) {\n if (/[\\x00-\\x19\\s,[\\]{}]/.test(anchor)) {\n const sa = JSON.stringify(anchor);\n const msg = `Anchor must not contain whitespace or control characters: ${sa}`;\n throw new Error(msg);\n }\n return true;\n}\nfunction anchorNames(root) {\n const anchors = new Set();\n visit.visit(root, {\n Value(_key, node) {\n if (node.anchor)\n anchors.add(node.anchor);\n }\n });\n return anchors;\n}\n/** Find a new anchor name with the given `prefix` and a one-indexed suffix. */\nfunction findNewAnchor(prefix, exclude) {\n for (let i = 1; true; ++i) {\n const name = `${prefix}${i}`;\n if (!exclude.has(name))\n return name;\n }\n}\nfunction createNodeAnchors(doc, prefix) {\n const aliasObjects = [];\n const sourceObjects = new Map();\n let prevAnchors = null;\n return {\n onAnchor: (source) => {\n aliasObjects.push(source);\n prevAnchors ?? (prevAnchors = anchorNames(doc));\n const anchor = findNewAnchor(prefix, prevAnchors);\n prevAnchors.add(anchor);\n return anchor;\n },\n /**\n * With circular references, the source node is only resolved after all\n * of its child nodes are. This is why anchors are set only after all of\n * the nodes have been created.\n */\n setAnchors: () => {\n for (const source of aliasObjects) {\n const ref = sourceObjects.get(source);\n if (typeof ref === 'object' &&\n ref.anchor &&\n (identity.isScalar(ref.node) || identity.isCollection(ref.node))) {\n ref.node.anchor = ref.anchor;\n }\n else {\n const error = new Error('Failed to resolve repeated object (this should not happen)');\n error.source = source;\n throw error;\n }\n }\n },\n sourceObjects\n };\n}\n\nexports.anchorIsValid = anchorIsValid;\nexports.anchorNames = anchorNames;\nexports.createNodeAnchors = createNodeAnchors;\nexports.findNewAnchor = findNewAnchor;\n","'use strict';\n\n/**\n * Applies the JSON.parse reviver algorithm as defined in the ECMA-262 spec,\n * in section 24.5.1.1 \"Runtime Semantics: InternalizeJSONProperty\" of the\n * 2021 edition: https://tc39.es/ecma262/#sec-json.parse\n *\n * Includes extensions for handling Map and Set objects.\n */\nfunction applyReviver(reviver, obj, key, val) {\n if (val && typeof val === 'object') {\n if (Array.isArray(val)) {\n for (let i = 0, len = val.length; i < len; ++i) {\n const v0 = val[i];\n const v1 = applyReviver(reviver, val, String(i), v0);\n // eslint-disable-next-line @typescript-eslint/no-array-delete\n if (v1 === undefined)\n delete val[i];\n else if (v1 !== v0)\n val[i] = v1;\n }\n }\n else if (val instanceof Map) {\n for (const k of Array.from(val.keys())) {\n const v0 = val.get(k);\n const v1 = applyReviver(reviver, val, k, v0);\n if (v1 === undefined)\n val.delete(k);\n else if (v1 !== v0)\n val.set(k, v1);\n }\n }\n else if (val instanceof Set) {\n for (const v0 of Array.from(val)) {\n const v1 = applyReviver(reviver, val, v0, v0);\n if (v1 === undefined)\n val.delete(v0);\n else if (v1 !== v0) {\n val.delete(v0);\n val.add(v1);\n }\n }\n }\n else {\n for (const [k, v0] of Object.entries(val)) {\n const v1 = applyReviver(reviver, val, k, v0);\n if (v1 === undefined)\n delete val[k];\n else if (v1 !== v0)\n val[k] = v1;\n }\n }\n }\n return reviver.call(obj, key, val);\n}\n\nexports.applyReviver = applyReviver;\n","'use strict';\n\nvar identity = require('./identity.js');\n\n/**\n * Recursively convert any node or its contents to native JavaScript\n *\n * @param value - The input value\n * @param arg - If `value` defines a `toJSON()` method, use this\n * as its first argument\n * @param ctx - Conversion context, originally set in Document#toJS(). If\n * `{ keep: true }` is not set, output should be suitable for JSON\n * stringification.\n */\nfunction toJS(value, arg, ctx) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n if (Array.isArray(value))\n return value.map((v, i) => toJS(v, String(i), ctx));\n if (value && typeof value.toJSON === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n if (!ctx || !identity.hasAnchor(value))\n return value.toJSON(arg, ctx);\n const data = { aliasCount: 0, count: 1, res: undefined };\n ctx.anchors.set(value, data);\n ctx.onCreate = res => {\n data.res = res;\n delete ctx.onCreate;\n };\n const res = value.toJSON(arg, ctx);\n if (ctx.onCreate)\n ctx.onCreate(res);\n return res;\n }\n if (typeof value === 'bigint' && !ctx?.keep)\n return Number(value);\n return value;\n}\n\nexports.toJS = toJS;\n","'use strict';\n\nvar applyReviver = require('../doc/applyReviver.js');\nvar identity = require('./identity.js');\nvar toJS = require('./toJS.js');\n\nclass NodeBase {\n constructor(type) {\n Object.defineProperty(this, identity.NODE_TYPE, { value: type });\n }\n /** Create a copy of this node. */\n clone() {\n const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /** A plain JavaScript representation of this node. */\n toJS(doc, { mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n if (!identity.isDocument(doc))\n throw new TypeError('A document argument is required');\n const ctx = {\n anchors: new Map(),\n doc,\n keep: true,\n mapAsMap: mapAsMap === true,\n mapKeyWarned: false,\n maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n };\n const res = toJS.toJS(this, '', ctx);\n if (typeof onAnchor === 'function')\n for (const { count, res } of ctx.anchors.values())\n onAnchor(res, count);\n return typeof reviver === 'function'\n ? applyReviver.applyReviver(reviver, { '': res }, '', res)\n : res;\n }\n}\n\nexports.NodeBase = NodeBase;\n","'use strict';\n\nvar anchors = require('../doc/anchors.js');\nvar visit = require('../visit.js');\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\nvar toJS = require('./toJS.js');\n\nclass Alias extends Node.NodeBase {\n constructor(source) {\n super(identity.ALIAS);\n this.source = source;\n Object.defineProperty(this, 'tag', {\n set() {\n throw new Error('Alias nodes cannot have tags');\n }\n });\n }\n /**\n * Resolve the value of this alias within `doc`, finding the last\n * instance of the `source` anchor before this node.\n */\n resolve(doc, ctx) {\n let nodes;\n if (ctx?.aliasResolveCache) {\n nodes = ctx.aliasResolveCache;\n }\n else {\n nodes = [];\n visit.visit(doc, {\n Node: (_key, node) => {\n if (identity.isAlias(node) || identity.hasAnchor(node))\n nodes.push(node);\n }\n });\n if (ctx)\n ctx.aliasResolveCache = nodes;\n }\n let found = undefined;\n for (const node of nodes) {\n if (node === this)\n break;\n if (node.anchor === this.source)\n found = node;\n }\n return found;\n }\n toJSON(_arg, ctx) {\n if (!ctx)\n return { source: this.source };\n const { anchors, doc, maxAliasCount } = ctx;\n const source = this.resolve(doc, ctx);\n if (!source) {\n const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n throw new ReferenceError(msg);\n }\n let data = anchors.get(source);\n if (!data) {\n // Resolve anchors for Node.prototype.toJS()\n toJS.toJS(source, null, ctx);\n data = anchors.get(source);\n }\n /* istanbul ignore if */\n if (data?.res === undefined) {\n const msg = 'This should not happen: Alias anchor was not resolved?';\n throw new ReferenceError(msg);\n }\n if (maxAliasCount >= 0) {\n data.count += 1;\n if (data.aliasCount === 0)\n data.aliasCount = getAliasCount(doc, source, anchors);\n if (data.count * data.aliasCount > maxAliasCount) {\n const msg = 'Excessive alias count indicates a resource exhaustion attack';\n throw new ReferenceError(msg);\n }\n }\n return data.res;\n }\n toString(ctx, _onComment, _onChompKeep) {\n const src = `*${this.source}`;\n if (ctx) {\n anchors.anchorIsValid(this.source);\n if (ctx.options.verifyAliasOrder && !ctx.anchors.has(this.source)) {\n const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n throw new Error(msg);\n }\n if (ctx.implicitKey)\n return `${src} `;\n }\n return src;\n }\n}\nfunction getAliasCount(doc, node, anchors) {\n if (identity.isAlias(node)) {\n const source = node.resolve(doc);\n const anchor = anchors && source && anchors.get(source);\n return anchor ? anchor.count * anchor.aliasCount : 0;\n }\n else if (identity.isCollection(node)) {\n let count = 0;\n for (const item of node.items) {\n const c = getAliasCount(doc, item, anchors);\n if (c > count)\n count = c;\n }\n return count;\n }\n else if (identity.isPair(node)) {\n const kc = getAliasCount(doc, node.key, anchors);\n const vc = getAliasCount(doc, node.value, anchors);\n return Math.max(kc, vc);\n }\n return 1;\n}\n\nexports.Alias = Alias;\n","'use strict';\n\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\nvar toJS = require('./toJS.js');\n\nconst isScalarValue = (value) => !value || (typeof value !== 'function' && typeof value !== 'object');\nclass Scalar extends Node.NodeBase {\n constructor(value) {\n super(identity.SCALAR);\n this.value = value;\n }\n toJSON(arg, ctx) {\n return ctx?.keep ? this.value : toJS.toJS(this.value, arg, ctx);\n }\n toString() {\n return String(this.value);\n }\n}\nScalar.BLOCK_FOLDED = 'BLOCK_FOLDED';\nScalar.BLOCK_LITERAL = 'BLOCK_LITERAL';\nScalar.PLAIN = 'PLAIN';\nScalar.QUOTE_DOUBLE = 'QUOTE_DOUBLE';\nScalar.QUOTE_SINGLE = 'QUOTE_SINGLE';\n\nexports.Scalar = Scalar;\nexports.isScalarValue = isScalarValue;\n","'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\n\nconst defaultTagPrefix = 'tag:yaml.org,2002:';\nfunction findTagObject(value, tagName, tags) {\n if (tagName) {\n const match = tags.filter(t => t.tag === tagName);\n const tagObj = match.find(t => !t.format) ?? match[0];\n if (!tagObj)\n throw new Error(`Tag ${tagName} not found`);\n return tagObj;\n }\n return tags.find(t => t.identify?.(value) && !t.format);\n}\nfunction createNode(value, tagName, ctx) {\n if (identity.isDocument(value))\n value = value.contents;\n if (identity.isNode(value))\n return value;\n if (identity.isPair(value)) {\n const map = ctx.schema[identity.MAP].createNode?.(ctx.schema, null, ctx);\n map.items.push(value);\n return map;\n }\n if (value instanceof String ||\n value instanceof Number ||\n value instanceof Boolean ||\n (typeof BigInt !== 'undefined' && value instanceof BigInt) // not supported everywhere\n ) {\n // https://tc39.es/ecma262/#sec-serializejsonproperty\n value = value.valueOf();\n }\n const { aliasDuplicateObjects, onAnchor, onTagObj, schema, sourceObjects } = ctx;\n // Detect duplicate references to the same object & use Alias nodes for all\n // after first. The `ref` wrapper allows for circular references to resolve.\n let ref = undefined;\n if (aliasDuplicateObjects && value && typeof value === 'object') {\n ref = sourceObjects.get(value);\n if (ref) {\n ref.anchor ?? (ref.anchor = onAnchor(value));\n return new Alias.Alias(ref.anchor);\n }\n else {\n ref = { anchor: null, node: null };\n sourceObjects.set(value, ref);\n }\n }\n if (tagName?.startsWith('!!'))\n tagName = defaultTagPrefix + tagName.slice(2);\n let tagObj = findTagObject(value, tagName, schema.tags);\n if (!tagObj) {\n if (value && typeof value.toJSON === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n value = value.toJSON();\n }\n if (!value || typeof value !== 'object') {\n const node = new Scalar.Scalar(value);\n if (ref)\n ref.node = node;\n return node;\n }\n tagObj =\n value instanceof Map\n ? schema[identity.MAP]\n : Symbol.iterator in Object(value)\n ? schema[identity.SEQ]\n : schema[identity.MAP];\n }\n if (onTagObj) {\n onTagObj(tagObj);\n delete ctx.onTagObj;\n }\n const node = tagObj?.createNode\n ? tagObj.createNode(ctx.schema, value, ctx)\n : typeof tagObj?.nodeClass?.from === 'function'\n ? tagObj.nodeClass.from(ctx.schema, value, ctx)\n : new Scalar.Scalar(value);\n if (tagName)\n node.tag = tagName;\n else if (!tagObj.default)\n node.tag = tagObj.tag;\n if (ref)\n ref.node = node;\n return node;\n}\n\nexports.createNode = createNode;\n","'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\n\nfunction collectionFromPath(schema, path, value) {\n let v = value;\n for (let i = path.length - 1; i >= 0; --i) {\n const k = path[i];\n if (typeof k === 'number' && Number.isInteger(k) && k >= 0) {\n const a = [];\n a[k] = v;\n v = a;\n }\n else {\n v = new Map([[k, v]]);\n }\n }\n return createNode.createNode(v, undefined, {\n aliasDuplicateObjects: false,\n keepUndefined: false,\n onAnchor: () => {\n throw new Error('This should not happen, please report a bug.');\n },\n schema,\n sourceObjects: new Map()\n });\n}\n// Type guard is intentionally a little wrong so as to be more useful,\n// as it does not cover untypable empty non-string iterables (e.g. []).\nconst isEmptyPath = (path) => path == null ||\n (typeof path === 'object' && !!path[Symbol.iterator]().next().done);\nclass Collection extends Node.NodeBase {\n constructor(type, schema) {\n super(type);\n Object.defineProperty(this, 'schema', {\n value: schema,\n configurable: true,\n enumerable: false,\n writable: true\n });\n }\n /**\n * Create a copy of this collection.\n *\n * @param schema - If defined, overwrites the original's schema\n */\n clone(schema) {\n const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n if (schema)\n copy.schema = schema;\n copy.items = copy.items.map(it => identity.isNode(it) || identity.isPair(it) ? it.clone(schema) : it);\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /**\n * Adds a value to the collection. For `!!map` and `!!omap` the value must\n * be a Pair instance or a `{ key, value }` object, which may not have a key\n * that already exists in the map.\n */\n addIn(path, value) {\n if (isEmptyPath(path))\n this.add(value);\n else {\n const [key, ...rest] = path;\n const node = this.get(key, true);\n if (identity.isCollection(node))\n node.addIn(rest, value);\n else if (node === undefined && this.schema)\n this.set(key, collectionFromPath(this.schema, rest, value));\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n }\n /**\n * Removes a value from the collection.\n * @returns `true` if the item was found and removed.\n */\n deleteIn(path) {\n const [key, ...rest] = path;\n if (rest.length === 0)\n return this.delete(key);\n const node = this.get(key, true);\n if (identity.isCollection(node))\n return node.deleteIn(rest);\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n /**\n * Returns item at `key`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n getIn(path, keepScalar) {\n const [key, ...rest] = path;\n const node = this.get(key, true);\n if (rest.length === 0)\n return !keepScalar && identity.isScalar(node) ? node.value : node;\n else\n return identity.isCollection(node) ? node.getIn(rest, keepScalar) : undefined;\n }\n hasAllNullValues(allowScalar) {\n return this.items.every(node => {\n if (!identity.isPair(node))\n return false;\n const n = node.value;\n return (n == null ||\n (allowScalar &&\n identity.isScalar(n) &&\n n.value == null &&\n !n.commentBefore &&\n !n.comment &&\n !n.tag));\n });\n }\n /**\n * Checks if the collection includes a value with the key `key`.\n */\n hasIn(path) {\n const [key, ...rest] = path;\n if (rest.length === 0)\n return this.has(key);\n const node = this.get(key, true);\n return identity.isCollection(node) ? node.hasIn(rest) : false;\n }\n /**\n * Sets a value in this collection. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n setIn(path, value) {\n const [key, ...rest] = path;\n if (rest.length === 0) {\n this.set(key, value);\n }\n else {\n const node = this.get(key, true);\n if (identity.isCollection(node))\n node.setIn(rest, value);\n else if (node === undefined && this.schema)\n this.set(key, collectionFromPath(this.schema, rest, value));\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n }\n}\n\nexports.Collection = Collection;\nexports.collectionFromPath = collectionFromPath;\nexports.isEmptyPath = isEmptyPath;\n","'use strict';\n\n/**\n * Stringifies a comment.\n *\n * Empty comment lines are left empty,\n * lines consisting of a single space are replaced by `#`,\n * and all other lines are prefixed with a `#`.\n */\nconst stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, '#');\nfunction indentComment(comment, indent) {\n if (/^\\n+$/.test(comment))\n return comment.substring(1);\n return indent ? comment.replace(/^(?! *$)/gm, indent) : comment;\n}\nconst lineComment = (str, indent, comment) => str.endsWith('\\n')\n ? indentComment(comment, indent)\n : comment.includes('\\n')\n ? '\\n' + indentComment(comment, indent)\n : (str.endsWith(' ') ? '' : ' ') + comment;\n\nexports.indentComment = indentComment;\nexports.lineComment = lineComment;\nexports.stringifyComment = stringifyComment;\n","'use strict';\n\nconst FOLD_FLOW = 'flow';\nconst FOLD_BLOCK = 'block';\nconst FOLD_QUOTED = 'quoted';\n/**\n * Tries to keep input at up to `lineWidth` characters, splitting only on spaces\n * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are\n * terminated with `\\n` and started with `indent`.\n */\nfunction foldFlowLines(text, indent, mode = 'flow', { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) {\n if (!lineWidth || lineWidth < 0)\n return text;\n if (lineWidth < minContentWidth)\n minContentWidth = 0;\n const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);\n if (text.length <= endStep)\n return text;\n const folds = [];\n const escapedFolds = {};\n let end = lineWidth - indent.length;\n if (typeof indentAtStart === 'number') {\n if (indentAtStart > lineWidth - Math.max(2, minContentWidth))\n folds.push(0);\n else\n end = lineWidth - indentAtStart;\n }\n let split = undefined;\n let prev = undefined;\n let overflow = false;\n let i = -1;\n let escStart = -1;\n let escEnd = -1;\n if (mode === FOLD_BLOCK) {\n i = consumeMoreIndentedLines(text, i, indent.length);\n if (i !== -1)\n end = i + endStep;\n }\n for (let ch; (ch = text[(i += 1)]);) {\n if (mode === FOLD_QUOTED && ch === '\\\\') {\n escStart = i;\n switch (text[i + 1]) {\n case 'x':\n i += 3;\n break;\n case 'u':\n i += 5;\n break;\n case 'U':\n i += 9;\n break;\n default:\n i += 1;\n }\n escEnd = i;\n }\n if (ch === '\\n') {\n if (mode === FOLD_BLOCK)\n i = consumeMoreIndentedLines(text, i, indent.length);\n end = i + indent.length + endStep;\n split = undefined;\n }\n else {\n if (ch === ' ' &&\n prev &&\n prev !== ' ' &&\n prev !== '\\n' &&\n prev !== '\\t') {\n // space surrounded by non-space can be replaced with newline + indent\n const next = text[i + 1];\n if (next && next !== ' ' && next !== '\\n' && next !== '\\t')\n split = i;\n }\n if (i >= end) {\n if (split) {\n folds.push(split);\n end = split + endStep;\n split = undefined;\n }\n else if (mode === FOLD_QUOTED) {\n // white-space collected at end may stretch past lineWidth\n while (prev === ' ' || prev === '\\t') {\n prev = ch;\n ch = text[(i += 1)];\n overflow = true;\n }\n // Account for newline escape, but don't break preceding escape\n const j = i > escEnd + 1 ? i - 2 : escStart - 1;\n // Bail out if lineWidth & minContentWidth are shorter than an escape string\n if (escapedFolds[j])\n return text;\n folds.push(j);\n escapedFolds[j] = true;\n end = j + endStep;\n split = undefined;\n }\n else {\n overflow = true;\n }\n }\n }\n prev = ch;\n }\n if (overflow && onOverflow)\n onOverflow();\n if (folds.length === 0)\n return text;\n if (onFold)\n onFold();\n let res = text.slice(0, folds[0]);\n for (let i = 0; i < folds.length; ++i) {\n const fold = folds[i];\n const end = folds[i + 1] || text.length;\n if (fold === 0)\n res = `\\n${indent}${text.slice(0, end)}`;\n else {\n if (mode === FOLD_QUOTED && escapedFolds[fold])\n res += `${text[fold]}\\\\`;\n res += `\\n${indent}${text.slice(fold + 1, end)}`;\n }\n }\n return res;\n}\n/**\n * Presumes `i + 1` is at the start of a line\n * @returns index of last newline in more-indented block\n */\nfunction consumeMoreIndentedLines(text, i, indent) {\n let end = i;\n let start = i + 1;\n let ch = text[start];\n while (ch === ' ' || ch === '\\t') {\n if (i < start + indent) {\n ch = text[++i];\n }\n else {\n do {\n ch = text[++i];\n } while (ch && ch !== '\\n');\n end = i;\n start = i + 1;\n ch = text[start];\n }\n }\n return end;\n}\n\nexports.FOLD_BLOCK = FOLD_BLOCK;\nexports.FOLD_FLOW = FOLD_FLOW;\nexports.FOLD_QUOTED = FOLD_QUOTED;\nexports.foldFlowLines = foldFlowLines;\n","'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\nvar foldFlowLines = require('./foldFlowLines.js');\n\nconst getFoldOptions = (ctx, isBlock) => ({\n indentAtStart: isBlock ? ctx.indent.length : ctx.indentAtStart,\n lineWidth: ctx.options.lineWidth,\n minContentWidth: ctx.options.minContentWidth\n});\n// Also checks for lines starting with %, as parsing the output as YAML 1.1 will\n// presume that's starting a new document.\nconst containsDocumentMarker = (str) => /^(%|---|\\.\\.\\.)/m.test(str);\nfunction lineLengthOverLimit(str, lineWidth, indentLength) {\n if (!lineWidth || lineWidth < 0)\n return false;\n const limit = lineWidth - indentLength;\n const strLen = str.length;\n if (strLen <= limit)\n return false;\n for (let i = 0, start = 0; i < strLen; ++i) {\n if (str[i] === '\\n') {\n if (i - start > limit)\n return true;\n start = i + 1;\n if (strLen - start <= limit)\n return false;\n }\n }\n return true;\n}\nfunction doubleQuotedString(value, ctx) {\n const json = JSON.stringify(value);\n if (ctx.options.doubleQuotedAsJSON)\n return json;\n const { implicitKey } = ctx;\n const minMultiLineLength = ctx.options.doubleQuotedMinMultiLineLength;\n const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : '');\n let str = '';\n let start = 0;\n for (let i = 0, ch = json[i]; ch; ch = json[++i]) {\n if (ch === ' ' && json[i + 1] === '\\\\' && json[i + 2] === 'n') {\n // space before newline needs to be escaped to not be folded\n str += json.slice(start, i) + '\\\\ ';\n i += 1;\n start = i;\n ch = '\\\\';\n }\n if (ch === '\\\\')\n switch (json[i + 1]) {\n case 'u':\n {\n str += json.slice(start, i);\n const code = json.substr(i + 2, 4);\n switch (code) {\n case '0000':\n str += '\\\\0';\n break;\n case '0007':\n str += '\\\\a';\n break;\n case '000b':\n str += '\\\\v';\n break;\n case '001b':\n str += '\\\\e';\n break;\n case '0085':\n str += '\\\\N';\n break;\n case '00a0':\n str += '\\\\_';\n break;\n case '2028':\n str += '\\\\L';\n break;\n case '2029':\n str += '\\\\P';\n break;\n default:\n if (code.substr(0, 2) === '00')\n str += '\\\\x' + code.substr(2);\n else\n str += json.substr(i, 6);\n }\n i += 5;\n start = i + 1;\n }\n break;\n case 'n':\n if (implicitKey ||\n json[i + 2] === '\"' ||\n json.length < minMultiLineLength) {\n i += 1;\n }\n else {\n // folding will eat first newline\n str += json.slice(start, i) + '\\n\\n';\n while (json[i + 2] === '\\\\' &&\n json[i + 3] === 'n' &&\n json[i + 4] !== '\"') {\n str += '\\n';\n i += 2;\n }\n str += indent;\n // space after newline needs to be escaped to not be folded\n if (json[i + 2] === ' ')\n str += '\\\\';\n i += 1;\n start = i + 1;\n }\n break;\n default:\n i += 1;\n }\n }\n str = start ? str + json.slice(start) : json;\n return implicitKey\n ? str\n : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_QUOTED, getFoldOptions(ctx, false));\n}\nfunction singleQuotedString(value, ctx) {\n if (ctx.options.singleQuote === false ||\n (ctx.implicitKey && value.includes('\\n')) ||\n /[ \\t]\\n|\\n[ \\t]/.test(value) // single quoted string can't have leading or trailing whitespace around newline\n )\n return doubleQuotedString(value, ctx);\n const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : '');\n const res = \"'\" + value.replace(/'/g, \"''\").replace(/\\n+/g, `$&\\n${indent}`) + \"'\";\n return ctx.implicitKey\n ? res\n : foldFlowLines.foldFlowLines(res, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction quotedString(value, ctx) {\n const { singleQuote } = ctx.options;\n let qs;\n if (singleQuote === false)\n qs = doubleQuotedString;\n else {\n const hasDouble = value.includes('\"');\n const hasSingle = value.includes(\"'\");\n if (hasDouble && !hasSingle)\n qs = singleQuotedString;\n else if (hasSingle && !hasDouble)\n qs = doubleQuotedString;\n else\n qs = singleQuote ? singleQuotedString : doubleQuotedString;\n }\n return qs(value, ctx);\n}\n// The negative lookbehind avoids a polynomial search,\n// but isn't supported yet on Safari: https://caniuse.com/js-regexp-lookbehind\nlet blockEndNewlines;\ntry {\n blockEndNewlines = new RegExp('(^|(?<!\\n))\\n+(?!\\n|$)', 'g');\n}\ncatch {\n blockEndNewlines = /\\n+(?!\\n|$)/g;\n}\nfunction blockString({ comment, type, value }, ctx, onComment, onChompKeep) {\n const { blockQuote, commentString, lineWidth } = ctx.options;\n // 1. Block can't end in whitespace unless the last line is non-empty.\n // 2. Strings consisting of only whitespace are best rendered explicitly.\n if (!blockQuote || /\\n[\\t ]+$/.test(value)) {\n return quotedString(value, ctx);\n }\n const indent = ctx.indent ||\n (ctx.forceBlockIndent || containsDocumentMarker(value) ? ' ' : '');\n const literal = blockQuote === 'literal'\n ? true\n : blockQuote === 'folded' || type === Scalar.Scalar.BLOCK_FOLDED\n ? false\n : type === Scalar.Scalar.BLOCK_LITERAL\n ? true\n : !lineLengthOverLimit(value, lineWidth, indent.length);\n if (!value)\n return literal ? '|\\n' : '>\\n';\n // determine chomping from whitespace at value end\n let chomp;\n let endStart;\n for (endStart = value.length; endStart > 0; --endStart) {\n const ch = value[endStart - 1];\n if (ch !== '\\n' && ch !== '\\t' && ch !== ' ')\n break;\n }\n let end = value.substring(endStart);\n const endNlPos = end.indexOf('\\n');\n if (endNlPos === -1) {\n chomp = '-'; // strip\n }\n else if (value === end || endNlPos !== end.length - 1) {\n chomp = '+'; // keep\n if (onChompKeep)\n onChompKeep();\n }\n else {\n chomp = ''; // clip\n }\n if (end) {\n value = value.slice(0, -end.length);\n if (end[end.length - 1] === '\\n')\n end = end.slice(0, -1);\n end = end.replace(blockEndNewlines, `$&${indent}`);\n }\n // determine indent indicator from whitespace at value start\n let startWithSpace = false;\n let startEnd;\n let startNlPos = -1;\n for (startEnd = 0; startEnd < value.length; ++startEnd) {\n const ch = value[startEnd];\n if (ch === ' ')\n startWithSpace = true;\n else if (ch === '\\n')\n startNlPos = startEnd;\n else\n break;\n }\n let start = value.substring(0, startNlPos < startEnd ? startNlPos + 1 : startEnd);\n if (start) {\n value = value.substring(start.length);\n start = start.replace(/\\n+/g, `$&${indent}`);\n }\n const indentSize = indent ? '2' : '1'; // root is at -1\n // Leading | or > is added later\n let header = (startWithSpace ? indentSize : '') + chomp;\n if (comment) {\n header += ' ' + commentString(comment.replace(/ ?[\\r\\n]+/g, ' '));\n if (onComment)\n onComment();\n }\n if (!literal) {\n const foldedValue = value\n .replace(/\\n+/g, '\\n$&')\n .replace(/(?:^|\\n)([\\t ].*)(?:([\\n\\t ]*)\\n(?![\\n\\t ]))?/g, '$1$2') // more-indented lines aren't folded\n // ^ more-ind. ^ empty ^ capture next empty lines only at end of indent\n .replace(/\\n+/g, `$&${indent}`);\n let literalFallback = false;\n const foldOptions = getFoldOptions(ctx, true);\n if (blockQuote !== 'folded' && type !== Scalar.Scalar.BLOCK_FOLDED) {\n foldOptions.onOverflow = () => {\n literalFallback = true;\n };\n }\n const body = foldFlowLines.foldFlowLines(`${start}${foldedValue}${end}`, indent, foldFlowLines.FOLD_BLOCK, foldOptions);\n if (!literalFallback)\n return `>${header}\\n${indent}${body}`;\n }\n value = value.replace(/\\n+/g, `$&${indent}`);\n return `|${header}\\n${indent}${start}${value}${end}`;\n}\nfunction plainString(item, ctx, onComment, onChompKeep) {\n const { type, value } = item;\n const { actualString, implicitKey, indent, indentStep, inFlow } = ctx;\n if ((implicitKey && value.includes('\\n')) ||\n (inFlow && /[[\\]{},]/.test(value))) {\n return quotedString(value, ctx);\n }\n if (/^[\\n\\t ,[\\]{}#&*!|>'\"%@`]|^[?-]$|^[?-][ \\t]|[\\n:][ \\t]|[ \\t]\\n|[\\n\\t ]#|[\\n\\t :]$/.test(value)) {\n // not allowed:\n // - '-' or '?'\n // - start with an indicator character (except [?:-]) or /[?-] /\n // - '\\n ', ': ' or ' \\n' anywhere\n // - '#' not preceded by a non-space char\n // - end with ' ' or ':'\n return implicitKey || inFlow || !value.includes('\\n')\n ? quotedString(value, ctx)\n : blockString(item, ctx, onComment, onChompKeep);\n }\n if (!implicitKey &&\n !inFlow &&\n type !== Scalar.Scalar.PLAIN &&\n value.includes('\\n')) {\n // Where allowed & type not set explicitly, prefer block style for multiline strings\n return blockString(item, ctx, onComment, onChompKeep);\n }\n if (containsDocumentMarker(value)) {\n if (indent === '') {\n ctx.forceBlockIndent = true;\n return blockString(item, ctx, onComment, onChompKeep);\n }\n else if (implicitKey && indent === indentStep) {\n return quotedString(value, ctx);\n }\n }\n const str = value.replace(/\\n+/g, `$&\\n${indent}`);\n // Verify that output will be parsed as a string, as e.g. plain numbers and\n // booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'),\n // and others in v1.1.\n if (actualString) {\n const test = (tag) => tag.default && tag.tag !== 'tag:yaml.org,2002:str' && tag.test?.test(str);\n const { compat, tags } = ctx.doc.schema;\n if (tags.some(test) || compat?.some(test))\n return quotedString(value, ctx);\n }\n return implicitKey\n ? str\n : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction stringifyString(item, ctx, onComment, onChompKeep) {\n const { implicitKey, inFlow } = ctx;\n const ss = typeof item.value === 'string'\n ? item\n : Object.assign({}, item, { value: String(item.value) });\n let { type } = item;\n if (type !== Scalar.Scalar.QUOTE_DOUBLE) {\n // force double quotes on control characters & unpaired surrogates\n if (/[\\x00-\\x08\\x0b-\\x1f\\x7f-\\x9f\\u{D800}-\\u{DFFF}]/u.test(ss.value))\n type = Scalar.Scalar.QUOTE_DOUBLE;\n }\n const _stringify = (_type) => {\n switch (_type) {\n case Scalar.Scalar.BLOCK_FOLDED:\n case Scalar.Scalar.BLOCK_LITERAL:\n return implicitKey || inFlow\n ? quotedString(ss.value, ctx) // blocks are not valid inside flow containers\n : blockString(ss, ctx, onComment, onChompKeep);\n case Scalar.Scalar.QUOTE_DOUBLE:\n return doubleQuotedString(ss.value, ctx);\n case Scalar.Scalar.QUOTE_SINGLE:\n return singleQuotedString(ss.value, ctx);\n case Scalar.Scalar.PLAIN:\n return plainString(ss, ctx, onComment, onChompKeep);\n default:\n return null;\n }\n };\n let res = _stringify(type);\n if (res === null) {\n const { defaultKeyType, defaultStringType } = ctx.options;\n const t = (implicitKey && defaultKeyType) || defaultStringType;\n res = _stringify(t);\n if (res === null)\n throw new Error(`Unsupported default string type ${t}`);\n }\n return res;\n}\n\nexports.stringifyString = stringifyString;\n","'use strict';\n\nvar anchors = require('../doc/anchors.js');\nvar identity = require('../nodes/identity.js');\nvar stringifyComment = require('./stringifyComment.js');\nvar stringifyString = require('./stringifyString.js');\n\nfunction createStringifyContext(doc, options) {\n const opt = Object.assign({\n blockQuote: true,\n commentString: stringifyComment.stringifyComment,\n defaultKeyType: null,\n defaultStringType: 'PLAIN',\n directives: null,\n doubleQuotedAsJSON: false,\n doubleQuotedMinMultiLineLength: 40,\n falseStr: 'false',\n flowCollectionPadding: true,\n indentSeq: true,\n lineWidth: 80,\n minContentWidth: 20,\n nullStr: 'null',\n simpleKeys: false,\n singleQuote: null,\n trueStr: 'true',\n verifyAliasOrder: true\n }, doc.schema.toStringOptions, options);\n let inFlow;\n switch (opt.collectionStyle) {\n case 'block':\n inFlow = false;\n break;\n case 'flow':\n inFlow = true;\n break;\n default:\n inFlow = null;\n }\n return {\n anchors: new Set(),\n doc,\n flowCollectionPadding: opt.flowCollectionPadding ? ' ' : '',\n indent: '',\n indentStep: typeof opt.indent === 'number' ? ' '.repeat(opt.indent) : ' ',\n inFlow,\n options: opt\n };\n}\nfunction getTagObject(tags, item) {\n if (item.tag) {\n const match = tags.filter(t => t.tag === item.tag);\n if (match.length > 0)\n return match.find(t => t.format === item.format) ?? match[0];\n }\n let tagObj = undefined;\n let obj;\n if (identity.isScalar(item)) {\n obj = item.value;\n let match = tags.filter(t => t.identify?.(obj));\n if (match.length > 1) {\n const testMatch = match.filter(t => t.test);\n if (testMatch.length > 0)\n match = testMatch;\n }\n tagObj =\n match.find(t => t.format === item.format) ?? match.find(t => !t.format);\n }\n else {\n obj = item;\n tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass);\n }\n if (!tagObj) {\n const name = obj?.constructor?.name ?? (obj === null ? 'null' : typeof obj);\n throw new Error(`Tag not resolved for ${name} value`);\n }\n return tagObj;\n}\n// needs to be called before value stringifier to allow for circular anchor refs\nfunction stringifyProps(node, tagObj, { anchors: anchors$1, doc }) {\n if (!doc.directives)\n return '';\n const props = [];\n const anchor = (identity.isScalar(node) || identity.isCollection(node)) && node.anchor;\n if (anchor && anchors.anchorIsValid(anchor)) {\n anchors$1.add(anchor);\n props.push(`&${anchor}`);\n }\n const tag = node.tag ?? (tagObj.default ? null : tagObj.tag);\n if (tag)\n props.push(doc.directives.tagString(tag));\n return props.join(' ');\n}\nfunction stringify(item, ctx, onComment, onChompKeep) {\n if (identity.isPair(item))\n return item.toString(ctx, onComment, onChompKeep);\n if (identity.isAlias(item)) {\n if (ctx.doc.directives)\n return item.toString(ctx);\n if (ctx.resolvedAliases?.has(item)) {\n throw new TypeError(`Cannot stringify circular structure without alias nodes`);\n }\n else {\n if (ctx.resolvedAliases)\n ctx.resolvedAliases.add(item);\n else\n ctx.resolvedAliases = new Set([item]);\n item = item.resolve(ctx.doc);\n }\n }\n let tagObj = undefined;\n const node = identity.isNode(item)\n ? item\n : ctx.doc.createNode(item, { onTagObj: o => (tagObj = o) });\n tagObj ?? (tagObj = getTagObject(ctx.doc.schema.tags, node));\n const props = stringifyProps(node, tagObj, ctx);\n if (props.length > 0)\n ctx.indentAtStart = (ctx.indentAtStart ?? 0) + props.length + 1;\n const str = typeof tagObj.stringify === 'function'\n ? tagObj.stringify(node, ctx, onComment, onChompKeep)\n : identity.isScalar(node)\n ? stringifyString.stringifyString(node, ctx, onComment, onChompKeep)\n : node.toString(ctx, onComment, onChompKeep);\n if (!props)\n return str;\n return identity.isScalar(node) || str[0] === '{' || str[0] === '['\n ? `${props} ${str}`\n : `${props}\\n${ctx.indent}${str}`;\n}\n\nexports.createStringifyContext = createStringifyContext;\nexports.stringify = stringify;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyPair({ key, value }, ctx, onComment, onChompKeep) {\n const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx;\n let keyComment = (identity.isNode(key) && key.comment) || null;\n if (simpleKeys) {\n if (keyComment) {\n throw new Error('With simple keys, key nodes cannot have comments');\n }\n if (identity.isCollection(key) || (!identity.isNode(key) && typeof key === 'object')) {\n const msg = 'With simple keys, collection cannot be used as a key value';\n throw new Error(msg);\n }\n }\n let explicitKey = !simpleKeys &&\n (!key ||\n (keyComment && value == null && !ctx.inFlow) ||\n identity.isCollection(key) ||\n (identity.isScalar(key)\n ? key.type === Scalar.Scalar.BLOCK_FOLDED || key.type === Scalar.Scalar.BLOCK_LITERAL\n : typeof key === 'object'));\n ctx = Object.assign({}, ctx, {\n allNullValues: false,\n implicitKey: !explicitKey && (simpleKeys || !allNullValues),\n indent: indent + indentStep\n });\n let keyCommentDone = false;\n let chompKeep = false;\n let str = stringify.stringify(key, ctx, () => (keyCommentDone = true), () => (chompKeep = true));\n if (!explicitKey && !ctx.inFlow && str.length > 1024) {\n if (simpleKeys)\n throw new Error('With simple keys, single line scalar must not span more than 1024 characters');\n explicitKey = true;\n }\n if (ctx.inFlow) {\n if (allNullValues || value == null) {\n if (keyCommentDone && onComment)\n onComment();\n return str === '' ? '?' : explicitKey ? `? ${str}` : str;\n }\n }\n else if ((allNullValues && !simpleKeys) || (value == null && explicitKey)) {\n str = `? ${str}`;\n if (keyComment && !keyCommentDone) {\n str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n }\n else if (chompKeep && onChompKeep)\n onChompKeep();\n return str;\n }\n if (keyCommentDone)\n keyComment = null;\n if (explicitKey) {\n if (keyComment)\n str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n str = `? ${str}\\n${indent}:`;\n }\n else {\n str = `${str}:`;\n if (keyComment)\n str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n }\n let vsb, vcb, valueComment;\n if (identity.isNode(value)) {\n vsb = !!value.spaceBefore;\n vcb = value.commentBefore;\n valueComment = value.comment;\n }\n else {\n vsb = false;\n vcb = null;\n valueComment = null;\n if (value && typeof value === 'object')\n value = doc.createNode(value);\n }\n ctx.implicitKey = false;\n if (!explicitKey && !keyComment && identity.isScalar(value))\n ctx.indentAtStart = str.length + 1;\n chompKeep = false;\n if (!indentSeq &&\n indentStep.length >= 2 &&\n !ctx.inFlow &&\n !explicitKey &&\n identity.isSeq(value) &&\n !value.flow &&\n !value.tag &&\n !value.anchor) {\n // If indentSeq === false, consider '- ' as part of indentation where possible\n ctx.indent = ctx.indent.substring(2);\n }\n let valueCommentDone = false;\n const valueStr = stringify.stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true));\n let ws = ' ';\n if (keyComment || vsb || vcb) {\n ws = vsb ? '\\n' : '';\n if (vcb) {\n const cs = commentString(vcb);\n ws += `\\n${stringifyComment.indentComment(cs, ctx.indent)}`;\n }\n if (valueStr === '' && !ctx.inFlow) {\n if (ws === '\\n' && valueComment)\n ws = '\\n\\n';\n }\n else {\n ws += `\\n${ctx.indent}`;\n }\n }\n else if (!explicitKey && identity.isCollection(value)) {\n const vs0 = valueStr[0];\n const nl0 = valueStr.indexOf('\\n');\n const hasNewline = nl0 !== -1;\n const flow = ctx.inFlow ?? value.flow ?? value.items.length === 0;\n if (hasNewline || !flow) {\n let hasPropsLine = false;\n if (hasNewline && (vs0 === '&' || vs0 === '!')) {\n let sp0 = valueStr.indexOf(' ');\n if (vs0 === '&' &&\n sp0 !== -1 &&\n sp0 < nl0 &&\n valueStr[sp0 + 1] === '!') {\n sp0 = valueStr.indexOf(' ', sp0 + 1);\n }\n if (sp0 === -1 || nl0 < sp0)\n hasPropsLine = true;\n }\n if (!hasPropsLine)\n ws = `\\n${ctx.indent}`;\n }\n }\n else if (valueStr === '' || valueStr[0] === '\\n') {\n ws = '';\n }\n str += ws + valueStr;\n if (ctx.inFlow) {\n if (valueCommentDone && onComment)\n onComment();\n }\n else if (valueComment && !valueCommentDone) {\n str += stringifyComment.lineComment(str, ctx.indent, commentString(valueComment));\n }\n else if (chompKeep && onChompKeep) {\n onChompKeep();\n }\n return str;\n}\n\nexports.stringifyPair = stringifyPair;\n","'use strict';\n\nvar node_process = require('process');\n\nfunction debug(logLevel, ...messages) {\n if (logLevel === 'debug')\n console.log(...messages);\n}\nfunction warn(logLevel, warning) {\n if (logLevel === 'debug' || logLevel === 'warn') {\n if (typeof node_process.emitWarning === 'function')\n node_process.emitWarning(warning);\n else\n console.warn(warning);\n }\n}\n\nexports.debug = debug;\nexports.warn = warn;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Scalar = require('../../nodes/Scalar.js');\n\n// If the value associated with a merge key is a single mapping node, each of\n// its key/value pairs is inserted into the current mapping, unless the key\n// already exists in it. If the value associated with the merge key is a\n// sequence, then this sequence is expected to contain mapping nodes and each\n// of these nodes is merged in turn according to its order in the sequence.\n// Keys in mapping nodes earlier in the sequence override keys specified in\n// later mapping nodes. -- http://yaml.org/type/merge.html\nconst MERGE_KEY = '<<';\nconst merge = {\n identify: value => value === MERGE_KEY ||\n (typeof value === 'symbol' && value.description === MERGE_KEY),\n default: 'key',\n tag: 'tag:yaml.org,2002:merge',\n test: /^<<$/,\n resolve: () => Object.assign(new Scalar.Scalar(Symbol(MERGE_KEY)), {\n addToJSMap: addMergeToJSMap\n }),\n stringify: () => MERGE_KEY\n};\nconst isMergeKey = (ctx, key) => (merge.identify(key) ||\n (identity.isScalar(key) &&\n (!key.type || key.type === Scalar.Scalar.PLAIN) &&\n merge.identify(key.value))) &&\n ctx?.doc.schema.tags.some(tag => tag.tag === merge.tag && tag.default);\nfunction addMergeToJSMap(ctx, map, value) {\n value = ctx && identity.isAlias(value) ? value.resolve(ctx.doc) : value;\n if (identity.isSeq(value))\n for (const it of value.items)\n mergeValue(ctx, map, it);\n else if (Array.isArray(value))\n for (const it of value)\n mergeValue(ctx, map, it);\n else\n mergeValue(ctx, map, value);\n}\nfunction mergeValue(ctx, map, value) {\n const source = ctx && identity.isAlias(value) ? value.resolve(ctx.doc) : value;\n if (!identity.isMap(source))\n throw new Error('Merge sources must be maps or map aliases');\n const srcMap = source.toJSON(null, ctx, Map);\n for (const [key, value] of srcMap) {\n if (map instanceof Map) {\n if (!map.has(key))\n map.set(key, value);\n }\n else if (map instanceof Set) {\n map.add(key);\n }\n else if (!Object.prototype.hasOwnProperty.call(map, key)) {\n Object.defineProperty(map, key, {\n value,\n writable: true,\n enumerable: true,\n configurable: true\n });\n }\n }\n return map;\n}\n\nexports.addMergeToJSMap = addMergeToJSMap;\nexports.isMergeKey = isMergeKey;\nexports.merge = merge;\n","'use strict';\n\nvar log = require('../log.js');\nvar merge = require('../schema/yaml-1.1/merge.js');\nvar stringify = require('../stringify/stringify.js');\nvar identity = require('./identity.js');\nvar toJS = require('./toJS.js');\n\nfunction addPairToJSMap(ctx, map, { key, value }) {\n if (identity.isNode(key) && key.addToJSMap)\n key.addToJSMap(ctx, map, value);\n // TODO: Should drop this special case for bare << handling\n else if (merge.isMergeKey(ctx, key))\n merge.addMergeToJSMap(ctx, map, value);\n else {\n const jsKey = toJS.toJS(key, '', ctx);\n if (map instanceof Map) {\n map.set(jsKey, toJS.toJS(value, jsKey, ctx));\n }\n else if (map instanceof Set) {\n map.add(jsKey);\n }\n else {\n const stringKey = stringifyKey(key, jsKey, ctx);\n const jsValue = toJS.toJS(value, stringKey, ctx);\n if (stringKey in map)\n Object.defineProperty(map, stringKey, {\n value: jsValue,\n writable: true,\n enumerable: true,\n configurable: true\n });\n else\n map[stringKey] = jsValue;\n }\n }\n return map;\n}\nfunction stringifyKey(key, jsKey, ctx) {\n if (jsKey === null)\n return '';\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n if (typeof jsKey !== 'object')\n return String(jsKey);\n if (identity.isNode(key) && ctx?.doc) {\n const strCtx = stringify.createStringifyContext(ctx.doc, {});\n strCtx.anchors = new Set();\n for (const node of ctx.anchors.keys())\n strCtx.anchors.add(node.anchor);\n strCtx.inFlow = true;\n strCtx.inStringifyKey = true;\n const strKey = key.toString(strCtx);\n if (!ctx.mapKeyWarned) {\n let jsonStr = JSON.stringify(strKey);\n if (jsonStr.length > 40)\n jsonStr = jsonStr.substring(0, 36) + '...\"';\n log.warn(ctx.doc.options.logLevel, `Keys with collection values will be stringified due to JS Object restrictions: ${jsonStr}. Set mapAsMap: true to use object keys.`);\n ctx.mapKeyWarned = true;\n }\n return strKey;\n }\n return JSON.stringify(jsKey);\n}\n\nexports.addPairToJSMap = addPairToJSMap;\n","'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar stringifyPair = require('../stringify/stringifyPair.js');\nvar addPairToJSMap = require('./addPairToJSMap.js');\nvar identity = require('./identity.js');\n\nfunction createPair(key, value, ctx) {\n const k = createNode.createNode(key, undefined, ctx);\n const v = createNode.createNode(value, undefined, ctx);\n return new Pair(k, v);\n}\nclass Pair {\n constructor(key, value = null) {\n Object.defineProperty(this, identity.NODE_TYPE, { value: identity.PAIR });\n this.key = key;\n this.value = value;\n }\n clone(schema) {\n let { key, value } = this;\n if (identity.isNode(key))\n key = key.clone(schema);\n if (identity.isNode(value))\n value = value.clone(schema);\n return new Pair(key, value);\n }\n toJSON(_, ctx) {\n const pair = ctx?.mapAsMap ? new Map() : {};\n return addPairToJSMap.addPairToJSMap(ctx, pair, this);\n }\n toString(ctx, onComment, onChompKeep) {\n return ctx?.doc\n ? stringifyPair.stringifyPair(this, ctx, onComment, onChompKeep)\n : JSON.stringify(this);\n }\n}\n\nexports.Pair = Pair;\nexports.createPair = createPair;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyCollection(collection, ctx, options) {\n const flow = ctx.inFlow ?? collection.flow;\n const stringify = flow ? stringifyFlowCollection : stringifyBlockCollection;\n return stringify(collection, ctx, options);\n}\nfunction stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) {\n const { indent, options: { commentString } } = ctx;\n const itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null });\n let chompKeep = false; // flag for the preceding node's status\n const lines = [];\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n let comment = null;\n if (identity.isNode(item)) {\n if (!chompKeep && item.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, item.commentBefore, chompKeep);\n if (item.comment)\n comment = item.comment;\n }\n else if (identity.isPair(item)) {\n const ik = identity.isNode(item.key) ? item.key : null;\n if (ik) {\n if (!chompKeep && ik.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, ik.commentBefore, chompKeep);\n }\n }\n chompKeep = false;\n let str = stringify.stringify(item, itemCtx, () => (comment = null), () => (chompKeep = true));\n if (comment)\n str += stringifyComment.lineComment(str, itemIndent, commentString(comment));\n if (chompKeep && comment)\n chompKeep = false;\n lines.push(blockItemPrefix + str);\n }\n let str;\n if (lines.length === 0) {\n str = flowChars.start + flowChars.end;\n }\n else {\n str = lines[0];\n for (let i = 1; i < lines.length; ++i) {\n const line = lines[i];\n str += line ? `\\n${indent}${line}` : '\\n';\n }\n }\n if (comment) {\n str += '\\n' + stringifyComment.indentComment(commentString(comment), indent);\n if (onComment)\n onComment();\n }\n else if (chompKeep && onChompKeep)\n onChompKeep();\n return str;\n}\nfunction stringifyFlowCollection({ items }, ctx, { flowChars, itemIndent }) {\n const { indent, indentStep, flowCollectionPadding: fcPadding, options: { commentString } } = ctx;\n itemIndent += indentStep;\n const itemCtx = Object.assign({}, ctx, {\n indent: itemIndent,\n inFlow: true,\n type: null\n });\n let reqNewline = false;\n let linesAtValue = 0;\n const lines = [];\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n let comment = null;\n if (identity.isNode(item)) {\n if (item.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, item.commentBefore, false);\n if (item.comment)\n comment = item.comment;\n }\n else if (identity.isPair(item)) {\n const ik = identity.isNode(item.key) ? item.key : null;\n if (ik) {\n if (ik.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, ik.commentBefore, false);\n if (ik.comment)\n reqNewline = true;\n }\n const iv = identity.isNode(item.value) ? item.value : null;\n if (iv) {\n if (iv.comment)\n comment = iv.comment;\n if (iv.commentBefore)\n reqNewline = true;\n }\n else if (item.value == null && ik?.comment) {\n comment = ik.comment;\n }\n }\n if (comment)\n reqNewline = true;\n let str = stringify.stringify(item, itemCtx, () => (comment = null));\n if (i < items.length - 1)\n str += ',';\n if (comment)\n str += stringifyComment.lineComment(str, itemIndent, commentString(comment));\n if (!reqNewline && (lines.length > linesAtValue || str.includes('\\n')))\n reqNewline = true;\n lines.push(str);\n linesAtValue = lines.length;\n }\n const { start, end } = flowChars;\n if (lines.length === 0) {\n return start + end;\n }\n else {\n if (!reqNewline) {\n const len = lines.reduce((sum, line) => sum + line.length + 2, 2);\n reqNewline = ctx.options.lineWidth > 0 && len > ctx.options.lineWidth;\n }\n if (reqNewline) {\n let str = start;\n for (const line of lines)\n str += line ? `\\n${indentStep}${indent}${line}` : '\\n';\n return `${str}\\n${indent}${end}`;\n }\n else {\n return `${start}${fcPadding}${lines.join(' ')}${fcPadding}${end}`;\n }\n }\n}\nfunction addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) {\n if (comment && chompKeep)\n comment = comment.replace(/^\\n+/, '');\n if (comment) {\n const ic = stringifyComment.indentComment(commentString(comment), indent);\n lines.push(ic.trimStart()); // Avoid double indent on first line\n }\n}\n\nexports.stringifyCollection = stringifyCollection;\n","'use strict';\n\nvar stringifyCollection = require('../stringify/stringifyCollection.js');\nvar addPairToJSMap = require('./addPairToJSMap.js');\nvar Collection = require('./Collection.js');\nvar identity = require('./identity.js');\nvar Pair = require('./Pair.js');\nvar Scalar = require('./Scalar.js');\n\nfunction findPair(items, key) {\n const k = identity.isScalar(key) ? key.value : key;\n for (const it of items) {\n if (identity.isPair(it)) {\n if (it.key === key || it.key === k)\n return it;\n if (identity.isScalar(it.key) && it.key.value === k)\n return it;\n }\n }\n return undefined;\n}\nclass YAMLMap extends Collection.Collection {\n static get tagName() {\n return 'tag:yaml.org,2002:map';\n }\n constructor(schema) {\n super(identity.MAP, schema);\n this.items = [];\n }\n /**\n * A generic collection parsing method that can be extended\n * to other node classes that inherit from YAMLMap\n */\n static from(schema, obj, ctx) {\n const { keepUndefined, replacer } = ctx;\n const map = new this(schema);\n const add = (key, value) => {\n if (typeof replacer === 'function')\n value = replacer.call(obj, key, value);\n else if (Array.isArray(replacer) && !replacer.includes(key))\n return;\n if (value !== undefined || keepUndefined)\n map.items.push(Pair.createPair(key, value, ctx));\n };\n if (obj instanceof Map) {\n for (const [key, value] of obj)\n add(key, value);\n }\n else if (obj && typeof obj === 'object') {\n for (const key of Object.keys(obj))\n add(key, obj[key]);\n }\n if (typeof schema.sortMapEntries === 'function') {\n map.items.sort(schema.sortMapEntries);\n }\n return map;\n }\n /**\n * Adds a value to the collection.\n *\n * @param overwrite - If not set `true`, using a key that is already in the\n * collection will throw. Otherwise, overwrites the previous value.\n */\n add(pair, overwrite) {\n let _pair;\n if (identity.isPair(pair))\n _pair = pair;\n else if (!pair || typeof pair !== 'object' || !('key' in pair)) {\n // In TypeScript, this never happens.\n _pair = new Pair.Pair(pair, pair?.value);\n }\n else\n _pair = new Pair.Pair(pair.key, pair.value);\n const prev = findPair(this.items, _pair.key);\n const sortEntries = this.schema?.sortMapEntries;\n if (prev) {\n if (!overwrite)\n throw new Error(`Key ${_pair.key} already set`);\n // For scalars, keep the old node & its comments and anchors\n if (identity.isScalar(prev.value) && Scalar.isScalarValue(_pair.value))\n prev.value.value = _pair.value;\n else\n prev.value = _pair.value;\n }\n else if (sortEntries) {\n const i = this.items.findIndex(item => sortEntries(_pair, item) < 0);\n if (i === -1)\n this.items.push(_pair);\n else\n this.items.splice(i, 0, _pair);\n }\n else {\n this.items.push(_pair);\n }\n }\n delete(key) {\n const it = findPair(this.items, key);\n if (!it)\n return false;\n const del = this.items.splice(this.items.indexOf(it), 1);\n return del.length > 0;\n }\n get(key, keepScalar) {\n const it = findPair(this.items, key);\n const node = it?.value;\n return (!keepScalar && identity.isScalar(node) ? node.value : node) ?? undefined;\n }\n has(key) {\n return !!findPair(this.items, key);\n }\n set(key, value) {\n this.add(new Pair.Pair(key, value), true);\n }\n /**\n * @param ctx - Conversion context, originally set in Document#toJS()\n * @param {Class} Type - If set, forces the returned collection type\n * @returns Instance of Type, Map, or Object\n */\n toJSON(_, ctx, Type) {\n const map = Type ? new Type() : ctx?.mapAsMap ? new Map() : {};\n if (ctx?.onCreate)\n ctx.onCreate(map);\n for (const item of this.items)\n addPairToJSMap.addPairToJSMap(ctx, map, item);\n return map;\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n for (const item of this.items) {\n if (!identity.isPair(item))\n throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`);\n }\n if (!ctx.allNullValues && this.hasAllNullValues(false))\n ctx = Object.assign({}, ctx, { allNullValues: true });\n return stringifyCollection.stringifyCollection(this, ctx, {\n blockItemPrefix: '',\n flowChars: { start: '{', end: '}' },\n itemIndent: ctx.indent || '',\n onChompKeep,\n onComment\n });\n }\n}\n\nexports.YAMLMap = YAMLMap;\nexports.findPair = findPair;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar YAMLMap = require('../../nodes/YAMLMap.js');\n\nconst map = {\n collection: 'map',\n default: true,\n nodeClass: YAMLMap.YAMLMap,\n tag: 'tag:yaml.org,2002:map',\n resolve(map, onError) {\n if (!identity.isMap(map))\n onError('Expected a mapping for this tag');\n return map;\n },\n createNode: (schema, obj, ctx) => YAMLMap.YAMLMap.from(schema, obj, ctx)\n};\n\nexports.map = map;\n","'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar stringifyCollection = require('../stringify/stringifyCollection.js');\nvar Collection = require('./Collection.js');\nvar identity = require('./identity.js');\nvar Scalar = require('./Scalar.js');\nvar toJS = require('./toJS.js');\n\nclass YAMLSeq extends Collection.Collection {\n static get tagName() {\n return 'tag:yaml.org,2002:seq';\n }\n constructor(schema) {\n super(identity.SEQ, schema);\n this.items = [];\n }\n add(value) {\n this.items.push(value);\n }\n /**\n * Removes a value from the collection.\n *\n * `key` must contain a representation of an integer for this to succeed.\n * It may be wrapped in a `Scalar`.\n *\n * @returns `true` if the item was found and removed.\n */\n delete(key) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n return false;\n const del = this.items.splice(idx, 1);\n return del.length > 0;\n }\n get(key, keepScalar) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n return undefined;\n const it = this.items[idx];\n return !keepScalar && identity.isScalar(it) ? it.value : it;\n }\n /**\n * Checks if the collection includes a value with the key `key`.\n *\n * `key` must contain a representation of an integer for this to succeed.\n * It may be wrapped in a `Scalar`.\n */\n has(key) {\n const idx = asItemIndex(key);\n return typeof idx === 'number' && idx < this.items.length;\n }\n /**\n * Sets a value in this collection. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n *\n * If `key` does not contain a representation of an integer, this will throw.\n * It may be wrapped in a `Scalar`.\n */\n set(key, value) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n throw new Error(`Expected a valid index, not ${key}.`);\n const prev = this.items[idx];\n if (identity.isScalar(prev) && Scalar.isScalarValue(value))\n prev.value = value;\n else\n this.items[idx] = value;\n }\n toJSON(_, ctx) {\n const seq = [];\n if (ctx?.onCreate)\n ctx.onCreate(seq);\n let i = 0;\n for (const item of this.items)\n seq.push(toJS.toJS(item, String(i++), ctx));\n return seq;\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n return stringifyCollection.stringifyCollection(this, ctx, {\n blockItemPrefix: '- ',\n flowChars: { start: '[', end: ']' },\n itemIndent: (ctx.indent || '') + ' ',\n onChompKeep,\n onComment\n });\n }\n static from(schema, obj, ctx) {\n const { replacer } = ctx;\n const seq = new this(schema);\n if (obj && Symbol.iterator in Object(obj)) {\n let i = 0;\n for (let it of obj) {\n if (typeof replacer === 'function') {\n const key = obj instanceof Set ? it : String(i++);\n it = replacer.call(obj, key, it);\n }\n seq.items.push(createNode.createNode(it, undefined, ctx));\n }\n }\n return seq;\n }\n}\nfunction asItemIndex(key) {\n let idx = identity.isScalar(key) ? key.value : key;\n if (idx && typeof idx === 'string')\n idx = Number(idx);\n return typeof idx === 'number' && Number.isInteger(idx) && idx >= 0\n ? idx\n : null;\n}\n\nexports.YAMLSeq = YAMLSeq;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar YAMLSeq = require('../../nodes/YAMLSeq.js');\n\nconst seq = {\n collection: 'seq',\n default: true,\n nodeClass: YAMLSeq.YAMLSeq,\n tag: 'tag:yaml.org,2002:seq',\n resolve(seq, onError) {\n if (!identity.isSeq(seq))\n onError('Expected a sequence for this tag');\n return seq;\n },\n createNode: (schema, obj, ctx) => YAMLSeq.YAMLSeq.from(schema, obj, ctx)\n};\n\nexports.seq = seq;\n","'use strict';\n\nvar stringifyString = require('../../stringify/stringifyString.js');\n\nconst string = {\n identify: value => typeof value === 'string',\n default: true,\n tag: 'tag:yaml.org,2002:str',\n resolve: str => str,\n stringify(item, ctx, onComment, onChompKeep) {\n ctx = Object.assign({ actualString: true }, ctx);\n return stringifyString.stringifyString(item, ctx, onComment, onChompKeep);\n }\n};\n\nexports.string = string;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nconst nullTag = {\n identify: value => value == null,\n createNode: () => new Scalar.Scalar(null),\n default: true,\n tag: 'tag:yaml.org,2002:null',\n test: /^(?:~|[Nn]ull|NULL)?$/,\n resolve: () => new Scalar.Scalar(null),\n stringify: ({ source }, ctx) => typeof source === 'string' && nullTag.test.test(source)\n ? source\n : ctx.options.nullStr\n};\n\nexports.nullTag = nullTag;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nconst boolTag = {\n identify: value => typeof value === 'boolean',\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,\n resolve: str => new Scalar.Scalar(str[0] === 't' || str[0] === 'T'),\n stringify({ source, value }, ctx) {\n if (source && boolTag.test.test(source)) {\n const sv = source[0] === 't' || source[0] === 'T';\n if (value === sv)\n return source;\n }\n return value ? ctx.options.trueStr : ctx.options.falseStr;\n }\n};\n\nexports.boolTag = boolTag;\n","'use strict';\n\nfunction stringifyNumber({ format, minFractionDigits, tag, value }) {\n if (typeof value === 'bigint')\n return String(value);\n const num = typeof value === 'number' ? value : Number(value);\n if (!isFinite(num))\n return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf';\n let n = Object.is(value, -0) ? '-0' : JSON.stringify(value);\n if (!format &&\n minFractionDigits &&\n (!tag || tag === 'tag:yaml.org,2002:float') &&\n /^\\d/.test(n)) {\n let i = n.indexOf('.');\n if (i < 0) {\n i = n.length;\n n += '.';\n }\n let d = minFractionDigits - (n.length - i - 1);\n while (d-- > 0)\n n += '0';\n }\n return n;\n}\n\nexports.stringifyNumber = stringifyNumber;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst floatNaN = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n resolve: str => str.slice(-3).toLowerCase() === 'nan'\n ? NaN\n : str[0] === '-'\n ? Number.NEGATIVE_INFINITY\n : Number.POSITIVE_INFINITY,\n stringify: stringifyNumber.stringifyNumber\n};\nconst floatExp = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'EXP',\n test: /^[-+]?(?:\\.[0-9]+|[0-9]+(?:\\.[0-9]*)?)[eE][-+]?[0-9]+$/,\n resolve: str => parseFloat(str),\n stringify(node) {\n const num = Number(node.value);\n return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node);\n }\n};\nconst float = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^[-+]?(?:\\.[0-9]+|[0-9]+\\.[0-9]*)$/,\n resolve(str) {\n const node = new Scalar.Scalar(parseFloat(str));\n const dot = str.indexOf('.');\n if (dot !== -1 && str[str.length - 1] === '0')\n node.minFractionDigits = str.length - dot - 1;\n return node;\n },\n stringify: stringifyNumber.stringifyNumber\n};\n\nexports.float = float;\nexports.floatExp = floatExp;\nexports.floatNaN = floatNaN;\n","'use strict';\n\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nconst intResolve = (str, offset, radix, { intAsBigInt }) => (intAsBigInt ? BigInt(str) : parseInt(str.substring(offset), radix));\nfunction intStringify(node, radix, prefix) {\n const { value } = node;\n if (intIdentify(value) && value >= 0)\n return prefix + value.toString(radix);\n return stringifyNumber.stringifyNumber(node);\n}\nconst intOct = {\n identify: value => intIdentify(value) && value >= 0,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'OCT',\n test: /^0o[0-7]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 8, opt),\n stringify: node => intStringify(node, 8, '0o')\n};\nconst int = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^[-+]?[0-9]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n stringify: stringifyNumber.stringifyNumber\n};\nconst intHex = {\n identify: value => intIdentify(value) && value >= 0,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'HEX',\n test: /^0x[0-9a-fA-F]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n stringify: node => intStringify(node, 16, '0x')\n};\n\nexports.int = int;\nexports.intHex = intHex;\nexports.intOct = intOct;\n","'use strict';\n\nvar map = require('../common/map.js');\nvar _null = require('../common/null.js');\nvar seq = require('../common/seq.js');\nvar string = require('../common/string.js');\nvar bool = require('./bool.js');\nvar float = require('./float.js');\nvar int = require('./int.js');\n\nconst schema = [\n map.map,\n seq.seq,\n string.string,\n _null.nullTag,\n bool.boolTag,\n int.intOct,\n int.int,\n int.intHex,\n float.floatNaN,\n float.floatExp,\n float.float\n];\n\nexports.schema = schema;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\nvar map = require('../common/map.js');\nvar seq = require('../common/seq.js');\n\nfunction intIdentify(value) {\n return typeof value === 'bigint' || Number.isInteger(value);\n}\nconst stringifyJSON = ({ value }) => JSON.stringify(value);\nconst jsonScalars = [\n {\n identify: value => typeof value === 'string',\n default: true,\n tag: 'tag:yaml.org,2002:str',\n resolve: str => str,\n stringify: stringifyJSON\n },\n {\n identify: value => value == null,\n createNode: () => new Scalar.Scalar(null),\n default: true,\n tag: 'tag:yaml.org,2002:null',\n test: /^null$/,\n resolve: () => null,\n stringify: stringifyJSON\n },\n {\n identify: value => typeof value === 'boolean',\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^true$|^false$/,\n resolve: str => str === 'true',\n stringify: stringifyJSON\n },\n {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^-?(?:0|[1-9][0-9]*)$/,\n resolve: (str, _onError, { intAsBigInt }) => intAsBigInt ? BigInt(str) : parseInt(str, 10),\n stringify: ({ value }) => intIdentify(value) ? value.toString() : JSON.stringify(value)\n },\n {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,\n resolve: str => parseFloat(str),\n stringify: stringifyJSON\n }\n];\nconst jsonError = {\n default: true,\n tag: '',\n test: /^/,\n resolve(str, onError) {\n onError(`Unresolved plain scalar ${JSON.stringify(str)}`);\n return str;\n }\n};\nconst schema = [map.map, seq.seq].concat(jsonScalars, jsonError);\n\nexports.schema = schema;\n","'use strict';\n\nvar node_buffer = require('buffer');\nvar Scalar = require('../../nodes/Scalar.js');\nvar stringifyString = require('../../stringify/stringifyString.js');\n\nconst binary = {\n identify: value => value instanceof Uint8Array, // Buffer inherits from Uint8Array\n default: false,\n tag: 'tag:yaml.org,2002:binary',\n /**\n * Returns a Buffer in node and an Uint8Array in browsers\n *\n * To use the resulting buffer as an image, you'll want to do something like:\n *\n * const blob = new Blob([buffer], { type: 'image/jpeg' })\n * document.querySelector('#photo').src = URL.createObjectURL(blob)\n */\n resolve(src, onError) {\n if (typeof node_buffer.Buffer === 'function') {\n return node_buffer.Buffer.from(src, 'base64');\n }\n else if (typeof atob === 'function') {\n // On IE 11, atob() can't handle newlines\n const str = atob(src.replace(/[\\n\\r]/g, ''));\n const buffer = new Uint8Array(str.length);\n for (let i = 0; i < str.length; ++i)\n buffer[i] = str.charCodeAt(i);\n return buffer;\n }\n else {\n onError('This environment does not support reading binary tags; either Buffer or atob is required');\n return src;\n }\n },\n stringify({ comment, type, value }, ctx, onComment, onChompKeep) {\n if (!value)\n return '';\n const buf = value; // checked earlier by binary.identify()\n let str;\n if (typeof node_buffer.Buffer === 'function') {\n str =\n buf instanceof node_buffer.Buffer\n ? buf.toString('base64')\n : node_buffer.Buffer.from(buf.buffer).toString('base64');\n }\n else if (typeof btoa === 'function') {\n let s = '';\n for (let i = 0; i < buf.length; ++i)\n s += String.fromCharCode(buf[i]);\n str = btoa(s);\n }\n else {\n throw new Error('This environment does not support writing binary tags; either Buffer or btoa is required');\n }\n type ?? (type = Scalar.Scalar.BLOCK_LITERAL);\n if (type !== Scalar.Scalar.QUOTE_DOUBLE) {\n const lineWidth = Math.max(ctx.options.lineWidth - ctx.indent.length, ctx.options.minContentWidth);\n const n = Math.ceil(str.length / lineWidth);\n const lines = new Array(n);\n for (let i = 0, o = 0; i < n; ++i, o += lineWidth) {\n lines[i] = str.substr(o, lineWidth);\n }\n str = lines.join(type === Scalar.Scalar.BLOCK_LITERAL ? '\\n' : ' ');\n }\n return stringifyString.stringifyString({ comment, type, value: str }, ctx, onComment, onChompKeep);\n }\n};\n\nexports.binary = binary;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Pair = require('../../nodes/Pair.js');\nvar Scalar = require('../../nodes/Scalar.js');\nvar YAMLSeq = require('../../nodes/YAMLSeq.js');\n\nfunction resolvePairs(seq, onError) {\n if (identity.isSeq(seq)) {\n for (let i = 0; i < seq.items.length; ++i) {\n let item = seq.items[i];\n if (identity.isPair(item))\n continue;\n else if (identity.isMap(item)) {\n if (item.items.length > 1)\n onError('Each pair must have its own sequence indicator');\n const pair = item.items[0] || new Pair.Pair(new Scalar.Scalar(null));\n if (item.commentBefore)\n pair.key.commentBefore = pair.key.commentBefore\n ? `${item.commentBefore}\\n${pair.key.commentBefore}`\n : item.commentBefore;\n if (item.comment) {\n const cn = pair.value ?? pair.key;\n cn.comment = cn.comment\n ? `${item.comment}\\n${cn.comment}`\n : item.comment;\n }\n item = pair;\n }\n seq.items[i] = identity.isPair(item) ? item : new Pair.Pair(item);\n }\n }\n else\n onError('Expected a sequence for this tag');\n return seq;\n}\nfunction createPairs(schema, iterable, ctx) {\n const { replacer } = ctx;\n const pairs = new YAMLSeq.YAMLSeq(schema);\n pairs.tag = 'tag:yaml.org,2002:pairs';\n let i = 0;\n if (iterable && Symbol.iterator in Object(iterable))\n for (let it of iterable) {\n if (typeof replacer === 'function')\n it = replacer.call(iterable, String(i++), it);\n let key, value;\n if (Array.isArray(it)) {\n if (it.length === 2) {\n key = it[0];\n value = it[1];\n }\n else\n throw new TypeError(`Expected [key, value] tuple: ${it}`);\n }\n else if (it && it instanceof Object) {\n const keys = Object.keys(it);\n if (keys.length === 1) {\n key = keys[0];\n value = it[key];\n }\n else {\n throw new TypeError(`Expected tuple with one key, not ${keys.length} keys`);\n }\n }\n else {\n key = it;\n }\n pairs.items.push(Pair.createPair(key, value, ctx));\n }\n return pairs;\n}\nconst pairs = {\n collection: 'seq',\n default: false,\n tag: 'tag:yaml.org,2002:pairs',\n resolve: resolvePairs,\n createNode: createPairs\n};\n\nexports.createPairs = createPairs;\nexports.pairs = pairs;\nexports.resolvePairs = resolvePairs;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar toJS = require('../../nodes/toJS.js');\nvar YAMLMap = require('../../nodes/YAMLMap.js');\nvar YAMLSeq = require('../../nodes/YAMLSeq.js');\nvar pairs = require('./pairs.js');\n\nclass YAMLOMap extends YAMLSeq.YAMLSeq {\n constructor() {\n super();\n this.add = YAMLMap.YAMLMap.prototype.add.bind(this);\n this.delete = YAMLMap.YAMLMap.prototype.delete.bind(this);\n this.get = YAMLMap.YAMLMap.prototype.get.bind(this);\n this.has = YAMLMap.YAMLMap.prototype.has.bind(this);\n this.set = YAMLMap.YAMLMap.prototype.set.bind(this);\n this.tag = YAMLOMap.tag;\n }\n /**\n * If `ctx` is given, the return type is actually `Map<unknown, unknown>`,\n * but TypeScript won't allow widening the signature of a child method.\n */\n toJSON(_, ctx) {\n if (!ctx)\n return super.toJSON(_);\n const map = new Map();\n if (ctx?.onCreate)\n ctx.onCreate(map);\n for (const pair of this.items) {\n let key, value;\n if (identity.isPair(pair)) {\n key = toJS.toJS(pair.key, '', ctx);\n value = toJS.toJS(pair.value, key, ctx);\n }\n else {\n key = toJS.toJS(pair, '', ctx);\n }\n if (map.has(key))\n throw new Error('Ordered maps must not include duplicate keys');\n map.set(key, value);\n }\n return map;\n }\n static from(schema, iterable, ctx) {\n const pairs$1 = pairs.createPairs(schema, iterable, ctx);\n const omap = new this();\n omap.items = pairs$1.items;\n return omap;\n }\n}\nYAMLOMap.tag = 'tag:yaml.org,2002:omap';\nconst omap = {\n collection: 'seq',\n identify: value => value instanceof Map,\n nodeClass: YAMLOMap,\n default: false,\n tag: 'tag:yaml.org,2002:omap',\n resolve(seq, onError) {\n const pairs$1 = pairs.resolvePairs(seq, onError);\n const seenKeys = [];\n for (const { key } of pairs$1.items) {\n if (identity.isScalar(key)) {\n if (seenKeys.includes(key.value)) {\n onError(`Ordered maps must not include duplicate keys: ${key.value}`);\n }\n else {\n seenKeys.push(key.value);\n }\n }\n }\n return Object.assign(new YAMLOMap(), pairs$1);\n },\n createNode: (schema, iterable, ctx) => YAMLOMap.from(schema, iterable, ctx)\n};\n\nexports.YAMLOMap = YAMLOMap;\nexports.omap = omap;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nfunction boolStringify({ value, source }, ctx) {\n const boolObj = value ? trueTag : falseTag;\n if (source && boolObj.test.test(source))\n return source;\n return value ? ctx.options.trueStr : ctx.options.falseStr;\n}\nconst trueTag = {\n identify: value => value === true,\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,\n resolve: () => new Scalar.Scalar(true),\n stringify: boolStringify\n};\nconst falseTag = {\n identify: value => value === false,\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,\n resolve: () => new Scalar.Scalar(false),\n stringify: boolStringify\n};\n\nexports.falseTag = falseTag;\nexports.trueTag = trueTag;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst floatNaN = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n resolve: (str) => str.slice(-3).toLowerCase() === 'nan'\n ? NaN\n : str[0] === '-'\n ? Number.NEGATIVE_INFINITY\n : Number.POSITIVE_INFINITY,\n stringify: stringifyNumber.stringifyNumber\n};\nconst floatExp = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'EXP',\n test: /^[-+]?(?:[0-9][0-9_]*)?(?:\\.[0-9_]*)?[eE][-+]?[0-9]+$/,\n resolve: (str) => parseFloat(str.replace(/_/g, '')),\n stringify(node) {\n const num = Number(node.value);\n return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node);\n }\n};\nconst float = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^[-+]?(?:[0-9][0-9_]*)?\\.[0-9_]*$/,\n resolve(str) {\n const node = new Scalar.Scalar(parseFloat(str.replace(/_/g, '')));\n const dot = str.indexOf('.');\n if (dot !== -1) {\n const f = str.substring(dot + 1).replace(/_/g, '');\n if (f[f.length - 1] === '0')\n node.minFractionDigits = f.length;\n }\n return node;\n },\n stringify: stringifyNumber.stringifyNumber\n};\n\nexports.float = float;\nexports.floatExp = floatExp;\nexports.floatNaN = floatNaN;\n","'use strict';\n\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nfunction intResolve(str, offset, radix, { intAsBigInt }) {\n const sign = str[0];\n if (sign === '-' || sign === '+')\n offset += 1;\n str = str.substring(offset).replace(/_/g, '');\n if (intAsBigInt) {\n switch (radix) {\n case 2:\n str = `0b${str}`;\n break;\n case 8:\n str = `0o${str}`;\n break;\n case 16:\n str = `0x${str}`;\n break;\n }\n const n = BigInt(str);\n return sign === '-' ? BigInt(-1) * n : n;\n }\n const n = parseInt(str, radix);\n return sign === '-' ? -1 * n : n;\n}\nfunction intStringify(node, radix, prefix) {\n const { value } = node;\n if (intIdentify(value)) {\n const str = value.toString(radix);\n return value < 0 ? '-' + prefix + str.substr(1) : prefix + str;\n }\n return stringifyNumber.stringifyNumber(node);\n}\nconst intBin = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'BIN',\n test: /^[-+]?0b[0-1_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 2, opt),\n stringify: node => intStringify(node, 2, '0b')\n};\nconst intOct = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'OCT',\n test: /^[-+]?0[0-7_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 1, 8, opt),\n stringify: node => intStringify(node, 8, '0')\n};\nconst int = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^[-+]?[0-9][0-9_]*$/,\n resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n stringify: stringifyNumber.stringifyNumber\n};\nconst intHex = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'HEX',\n test: /^[-+]?0x[0-9a-fA-F_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n stringify: node => intStringify(node, 16, '0x')\n};\n\nexports.int = int;\nexports.intBin = intBin;\nexports.intHex = intHex;\nexports.intOct = intOct;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Pair = require('../../nodes/Pair.js');\nvar YAMLMap = require('../../nodes/YAMLMap.js');\n\nclass YAMLSet extends YAMLMap.YAMLMap {\n constructor(schema) {\n super(schema);\n this.tag = YAMLSet.tag;\n }\n add(key) {\n let pair;\n if (identity.isPair(key))\n pair = key;\n else if (key &&\n typeof key === 'object' &&\n 'key' in key &&\n 'value' in key &&\n key.value === null)\n pair = new Pair.Pair(key.key, null);\n else\n pair = new Pair.Pair(key, null);\n const prev = YAMLMap.findPair(this.items, pair.key);\n if (!prev)\n this.items.push(pair);\n }\n /**\n * If `keepPair` is `true`, returns the Pair matching `key`.\n * Otherwise, returns the value of that Pair's key.\n */\n get(key, keepPair) {\n const pair = YAMLMap.findPair(this.items, key);\n return !keepPair && identity.isPair(pair)\n ? identity.isScalar(pair.key)\n ? pair.key.value\n : pair.key\n : pair;\n }\n set(key, value) {\n if (typeof value !== 'boolean')\n throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);\n const prev = YAMLMap.findPair(this.items, key);\n if (prev && !value) {\n this.items.splice(this.items.indexOf(prev), 1);\n }\n else if (!prev && value) {\n this.items.push(new Pair.Pair(key));\n }\n }\n toJSON(_, ctx) {\n return super.toJSON(_, ctx, Set);\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n if (this.hasAllNullValues(true))\n return super.toString(Object.assign({}, ctx, { allNullValues: true }), onComment, onChompKeep);\n else\n throw new Error('Set items must all have null values');\n }\n static from(schema, iterable, ctx) {\n const { replacer } = ctx;\n const set = new this(schema);\n if (iterable && Symbol.iterator in Object(iterable))\n for (let value of iterable) {\n if (typeof replacer === 'function')\n value = replacer.call(iterable, value, value);\n set.items.push(Pair.createPair(value, null, ctx));\n }\n return set;\n }\n}\nYAMLSet.tag = 'tag:yaml.org,2002:set';\nconst set = {\n collection: 'map',\n identify: value => value instanceof Set,\n nodeClass: YAMLSet,\n default: false,\n tag: 'tag:yaml.org,2002:set',\n createNode: (schema, iterable, ctx) => YAMLSet.from(schema, iterable, ctx),\n resolve(map, onError) {\n if (identity.isMap(map)) {\n if (map.hasAllNullValues(true))\n return Object.assign(new YAMLSet(), map);\n else\n onError('Set items must all have null values');\n }\n else\n onError('Expected a mapping for this tag');\n return map;\n }\n};\n\nexports.YAMLSet = YAMLSet;\nexports.set = set;\n","'use strict';\n\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\n/** Internal types handle bigint as number, because TS can't figure it out. */\nfunction parseSexagesimal(str, asBigInt) {\n const sign = str[0];\n const parts = sign === '-' || sign === '+' ? str.substring(1) : str;\n const num = (n) => asBigInt ? BigInt(n) : Number(n);\n const res = parts\n .replace(/_/g, '')\n .split(':')\n .reduce((res, p) => res * num(60) + num(p), num(0));\n return (sign === '-' ? num(-1) * res : res);\n}\n/**\n * hhhh:mm:ss.sss\n *\n * Internal types handle bigint as number, because TS can't figure it out.\n */\nfunction stringifySexagesimal(node) {\n let { value } = node;\n let num = (n) => n;\n if (typeof value === 'bigint')\n num = n => BigInt(n);\n else if (isNaN(value) || !isFinite(value))\n return stringifyNumber.stringifyNumber(node);\n let sign = '';\n if (value < 0) {\n sign = '-';\n value *= num(-1);\n }\n const _60 = num(60);\n const parts = [value % _60]; // seconds, including ms\n if (value < 60) {\n parts.unshift(0); // at least one : is required\n }\n else {\n value = (value - parts[0]) / _60;\n parts.unshift(value % _60); // minutes\n if (value >= 60) {\n value = (value - parts[0]) / _60;\n parts.unshift(value); // hours\n }\n }\n return (sign +\n parts\n .map(n => String(n).padStart(2, '0'))\n .join(':')\n .replace(/000000\\d*$/, '') // % 60 may introduce error\n );\n}\nconst intTime = {\n identify: value => typeof value === 'bigint' || Number.isInteger(value),\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'TIME',\n test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,\n resolve: (str, _onError, { intAsBigInt }) => parseSexagesimal(str, intAsBigInt),\n stringify: stringifySexagesimal\n};\nconst floatTime = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'TIME',\n test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*$/,\n resolve: str => parseSexagesimal(str, false),\n stringify: stringifySexagesimal\n};\nconst timestamp = {\n identify: value => value instanceof Date,\n default: true,\n tag: 'tag:yaml.org,2002:timestamp',\n // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part\n // may be omitted altogether, resulting in a date format. In such a case, the time part is\n // assumed to be 00:00:00Z (start of day, UTC).\n test: RegExp('^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd\n '(?:' + // time is optional\n '(?:t|T|[ \\\\t]+)' + // t | T | whitespace\n '([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)?\n '(?:[ \\\\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30\n ')?$'),\n resolve(str) {\n const match = str.match(timestamp.test);\n if (!match)\n throw new Error('!!timestamp expects a date, starting with yyyy-mm-dd');\n const [, year, month, day, hour, minute, second] = match.map(Number);\n const millisec = match[7] ? Number((match[7] + '00').substr(1, 3)) : 0;\n let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec);\n const tz = match[8];\n if (tz && tz !== 'Z') {\n let d = parseSexagesimal(tz, false);\n if (Math.abs(d) < 30)\n d *= 60;\n date -= 60000 * d;\n }\n return new Date(date);\n },\n stringify: ({ value }) => value?.toISOString().replace(/(T00:00:00)?\\.000Z$/, '') ?? ''\n};\n\nexports.floatTime = floatTime;\nexports.intTime = intTime;\nexports.timestamp = timestamp;\n","'use strict';\n\nvar map = require('../common/map.js');\nvar _null = require('../common/null.js');\nvar seq = require('../common/seq.js');\nvar string = require('../common/string.js');\nvar binary = require('./binary.js');\nvar bool = require('./bool.js');\nvar float = require('./float.js');\nvar int = require('./int.js');\nvar merge = require('./merge.js');\nvar omap = require('./omap.js');\nvar pairs = require('./pairs.js');\nvar set = require('./set.js');\nvar timestamp = require('./timestamp.js');\n\nconst schema = [\n map.map,\n seq.seq,\n string.string,\n _null.nullTag,\n bool.trueTag,\n bool.falseTag,\n int.intBin,\n int.intOct,\n int.int,\n int.intHex,\n float.floatNaN,\n float.floatExp,\n float.float,\n binary.binary,\n merge.merge,\n omap.omap,\n pairs.pairs,\n set.set,\n timestamp.intTime,\n timestamp.floatTime,\n timestamp.timestamp\n];\n\nexports.schema = schema;\n","'use strict';\n\nvar map = require('./common/map.js');\nvar _null = require('./common/null.js');\nvar seq = require('./common/seq.js');\nvar string = require('./common/string.js');\nvar bool = require('./core/bool.js');\nvar float = require('./core/float.js');\nvar int = require('./core/int.js');\nvar schema = require('./core/schema.js');\nvar schema$1 = require('./json/schema.js');\nvar binary = require('./yaml-1.1/binary.js');\nvar merge = require('./yaml-1.1/merge.js');\nvar omap = require('./yaml-1.1/omap.js');\nvar pairs = require('./yaml-1.1/pairs.js');\nvar schema$2 = require('./yaml-1.1/schema.js');\nvar set = require('./yaml-1.1/set.js');\nvar timestamp = require('./yaml-1.1/timestamp.js');\n\nconst schemas = new Map([\n ['core', schema.schema],\n ['failsafe', [map.map, seq.seq, string.string]],\n ['json', schema$1.schema],\n ['yaml11', schema$2.schema],\n ['yaml-1.1', schema$2.schema]\n]);\nconst tagsByName = {\n binary: binary.binary,\n bool: bool.boolTag,\n float: float.float,\n floatExp: float.floatExp,\n floatNaN: float.floatNaN,\n floatTime: timestamp.floatTime,\n int: int.int,\n intHex: int.intHex,\n intOct: int.intOct,\n intTime: timestamp.intTime,\n map: map.map,\n merge: merge.merge,\n null: _null.nullTag,\n omap: omap.omap,\n pairs: pairs.pairs,\n seq: seq.seq,\n set: set.set,\n timestamp: timestamp.timestamp\n};\nconst coreKnownTags = {\n 'tag:yaml.org,2002:binary': binary.binary,\n 'tag:yaml.org,2002:merge': merge.merge,\n 'tag:yaml.org,2002:omap': omap.omap,\n 'tag:yaml.org,2002:pairs': pairs.pairs,\n 'tag:yaml.org,2002:set': set.set,\n 'tag:yaml.org,2002:timestamp': timestamp.timestamp\n};\nfunction getTags(customTags, schemaName, addMergeTag) {\n const schemaTags = schemas.get(schemaName);\n if (schemaTags && !customTags) {\n return addMergeTag && !schemaTags.includes(merge.merge)\n ? schemaTags.concat(merge.merge)\n : schemaTags.slice();\n }\n let tags = schemaTags;\n if (!tags) {\n if (Array.isArray(customTags))\n tags = [];\n else {\n const keys = Array.from(schemas.keys())\n .filter(key => key !== 'yaml11')\n .map(key => JSON.stringify(key))\n .join(', ');\n throw new Error(`Unknown schema \"${schemaName}\"; use one of ${keys} or define customTags array`);\n }\n }\n if (Array.isArray(customTags)) {\n for (const tag of customTags)\n tags = tags.concat(tag);\n }\n else if (typeof customTags === 'function') {\n tags = customTags(tags.slice());\n }\n if (addMergeTag)\n tags = tags.concat(merge.merge);\n return tags.reduce((tags, tag) => {\n const tagObj = typeof tag === 'string' ? tagsByName[tag] : tag;\n if (!tagObj) {\n const tagName = JSON.stringify(tag);\n const keys = Object.keys(tagsByName)\n .map(key => JSON.stringify(key))\n .join(', ');\n throw new Error(`Unknown custom tag ${tagName}; use one of ${keys}`);\n }\n if (!tags.includes(tagObj))\n tags.push(tagObj);\n return tags;\n }, []);\n}\n\nexports.coreKnownTags = coreKnownTags;\nexports.getTags = getTags;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar map = require('./common/map.js');\nvar seq = require('./common/seq.js');\nvar string = require('./common/string.js');\nvar tags = require('./tags.js');\n\nconst sortMapEntriesByKey = (a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0;\nclass Schema {\n constructor({ compat, customTags, merge, resolveKnownTags, schema, sortMapEntries, toStringDefaults }) {\n this.compat = Array.isArray(compat)\n ? tags.getTags(compat, 'compat')\n : compat\n ? tags.getTags(null, compat)\n : null;\n this.name = (typeof schema === 'string' && schema) || 'core';\n this.knownTags = resolveKnownTags ? tags.coreKnownTags : {};\n this.tags = tags.getTags(customTags, this.name, merge);\n this.toStringOptions = toStringDefaults ?? null;\n Object.defineProperty(this, identity.MAP, { value: map.map });\n Object.defineProperty(this, identity.SCALAR, { value: string.string });\n Object.defineProperty(this, identity.SEQ, { value: seq.seq });\n // Used by createMap()\n this.sortMapEntries =\n typeof sortMapEntries === 'function'\n ? sortMapEntries\n : sortMapEntries === true\n ? sortMapEntriesByKey\n : null;\n }\n clone() {\n const copy = Object.create(Schema.prototype, Object.getOwnPropertyDescriptors(this));\n copy.tags = this.tags.slice();\n return copy;\n }\n}\n\nexports.Schema = Schema;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyDocument(doc, options) {\n const lines = [];\n let hasDirectives = options.directives === true;\n if (options.directives !== false && doc.directives) {\n const dir = doc.directives.toString(doc);\n if (dir) {\n lines.push(dir);\n hasDirectives = true;\n }\n else if (doc.directives.docStart)\n hasDirectives = true;\n }\n if (hasDirectives)\n lines.push('---');\n const ctx = stringify.createStringifyContext(doc, options);\n const { commentString } = ctx.options;\n if (doc.commentBefore) {\n if (lines.length !== 1)\n lines.unshift('');\n const cs = commentString(doc.commentBefore);\n lines.unshift(stringifyComment.indentComment(cs, ''));\n }\n let chompKeep = false;\n let contentComment = null;\n if (doc.contents) {\n if (identity.isNode(doc.contents)) {\n if (doc.contents.spaceBefore && hasDirectives)\n lines.push('');\n if (doc.contents.commentBefore) {\n const cs = commentString(doc.contents.commentBefore);\n lines.push(stringifyComment.indentComment(cs, ''));\n }\n // top-level block scalars need to be indented if followed by a comment\n ctx.forceBlockIndent = !!doc.comment;\n contentComment = doc.contents.comment;\n }\n const onChompKeep = contentComment ? undefined : () => (chompKeep = true);\n let body = stringify.stringify(doc.contents, ctx, () => (contentComment = null), onChompKeep);\n if (contentComment)\n body += stringifyComment.lineComment(body, '', commentString(contentComment));\n if ((body[0] === '|' || body[0] === '>') &&\n lines[lines.length - 1] === '---') {\n // Top-level block scalars with a preceding doc marker ought to use the\n // same line for their header.\n lines[lines.length - 1] = `--- ${body}`;\n }\n else\n lines.push(body);\n }\n else {\n lines.push(stringify.stringify(doc.contents, ctx));\n }\n if (doc.directives?.docEnd) {\n if (doc.comment) {\n const cs = commentString(doc.comment);\n if (cs.includes('\\n')) {\n lines.push('...');\n lines.push(stringifyComment.indentComment(cs, ''));\n }\n else {\n lines.push(`... ${cs}`);\n }\n }\n else {\n lines.push('...');\n }\n }\n else {\n let dc = doc.comment;\n if (dc && chompKeep)\n dc = dc.replace(/^\\n+/, '');\n if (dc) {\n if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '')\n lines.push('');\n lines.push(stringifyComment.indentComment(commentString(dc), ''));\n }\n }\n return lines.join('\\n') + '\\n';\n}\n\nexports.stringifyDocument = stringifyDocument;\n","'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar Collection = require('../nodes/Collection.js');\nvar identity = require('../nodes/identity.js');\nvar Pair = require('../nodes/Pair.js');\nvar toJS = require('../nodes/toJS.js');\nvar Schema = require('../schema/Schema.js');\nvar stringifyDocument = require('../stringify/stringifyDocument.js');\nvar anchors = require('./anchors.js');\nvar applyReviver = require('./applyReviver.js');\nvar createNode = require('./createNode.js');\nvar directives = require('./directives.js');\n\nclass Document {\n constructor(value, replacer, options) {\n /** A comment before this Document */\n this.commentBefore = null;\n /** A comment immediately after this Document */\n this.comment = null;\n /** Errors encountered during parsing. */\n this.errors = [];\n /** Warnings encountered during parsing. */\n this.warnings = [];\n Object.defineProperty(this, identity.NODE_TYPE, { value: identity.DOC });\n let _replacer = null;\n if (typeof replacer === 'function' || Array.isArray(replacer)) {\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n replacer = undefined;\n }\n const opt = Object.assign({\n intAsBigInt: false,\n keepSourceTokens: false,\n logLevel: 'warn',\n prettyErrors: true,\n strict: true,\n stringKeys: false,\n uniqueKeys: true,\n version: '1.2'\n }, options);\n this.options = opt;\n let { version } = opt;\n if (options?._directives) {\n this.directives = options._directives.atDocument();\n if (this.directives.yaml.explicit)\n version = this.directives.yaml.version;\n }\n else\n this.directives = new directives.Directives({ version });\n this.setSchema(version, options);\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents =\n value === undefined ? null : this.createNode(value, _replacer, options);\n }\n /**\n * Create a deep copy of this Document and its contents.\n *\n * Custom Node values that inherit from `Object` still refer to their original instances.\n */\n clone() {\n const copy = Object.create(Document.prototype, {\n [identity.NODE_TYPE]: { value: identity.DOC }\n });\n copy.commentBefore = this.commentBefore;\n copy.comment = this.comment;\n copy.errors = this.errors.slice();\n copy.warnings = this.warnings.slice();\n copy.options = Object.assign({}, this.options);\n if (this.directives)\n copy.directives = this.directives.clone();\n copy.schema = this.schema.clone();\n // @ts-expect-error We can't really know that this matches Contents.\n copy.contents = identity.isNode(this.contents)\n ? this.contents.clone(copy.schema)\n : this.contents;\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /** Adds a value to the document. */\n add(value) {\n if (assertCollection(this.contents))\n this.contents.add(value);\n }\n /** Adds a value to the document. */\n addIn(path, value) {\n if (assertCollection(this.contents))\n this.contents.addIn(path, value);\n }\n /**\n * Create a new `Alias` node, ensuring that the target `node` has the required anchor.\n *\n * If `node` already has an anchor, `name` is ignored.\n * Otherwise, the `node.anchor` value will be set to `name`,\n * or if an anchor with that name is already present in the document,\n * `name` will be used as a prefix for a new unique anchor.\n * If `name` is undefined, the generated anchor will use 'a' as a prefix.\n */\n createAlias(node, name) {\n if (!node.anchor) {\n const prev = anchors.anchorNames(this);\n node.anchor =\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n !name || prev.has(name) ? anchors.findNewAnchor(name || 'a', prev) : name;\n }\n return new Alias.Alias(node.anchor);\n }\n createNode(value, replacer, options) {\n let _replacer = undefined;\n if (typeof replacer === 'function') {\n value = replacer.call({ '': value }, '', value);\n _replacer = replacer;\n }\n else if (Array.isArray(replacer)) {\n const keyToStr = (v) => typeof v === 'number' || v instanceof String || v instanceof Number;\n const asStr = replacer.filter(keyToStr).map(String);\n if (asStr.length > 0)\n replacer = replacer.concat(asStr);\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n replacer = undefined;\n }\n const { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options ?? {};\n const { onAnchor, setAnchors, sourceObjects } = anchors.createNodeAnchors(this, \n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n anchorPrefix || 'a');\n const ctx = {\n aliasDuplicateObjects: aliasDuplicateObjects ?? true,\n keepUndefined: keepUndefined ?? false,\n onAnchor,\n onTagObj,\n replacer: _replacer,\n schema: this.schema,\n sourceObjects\n };\n const node = createNode.createNode(value, tag, ctx);\n if (flow && identity.isCollection(node))\n node.flow = true;\n setAnchors();\n return node;\n }\n /**\n * Convert a key and a value into a `Pair` using the current schema,\n * recursively wrapping all values as `Scalar` or `Collection` nodes.\n */\n createPair(key, value, options = {}) {\n const k = this.createNode(key, null, options);\n const v = this.createNode(value, null, options);\n return new Pair.Pair(k, v);\n }\n /**\n * Removes a value from the document.\n * @returns `true` if the item was found and removed.\n */\n delete(key) {\n return assertCollection(this.contents) ? this.contents.delete(key) : false;\n }\n /**\n * Removes a value from the document.\n * @returns `true` if the item was found and removed.\n */\n deleteIn(path) {\n if (Collection.isEmptyPath(path)) {\n if (this.contents == null)\n return false;\n // @ts-expect-error Presumed impossible if Strict extends false\n this.contents = null;\n return true;\n }\n return assertCollection(this.contents)\n ? this.contents.deleteIn(path)\n : false;\n }\n /**\n * Returns item at `key`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n get(key, keepScalar) {\n return identity.isCollection(this.contents)\n ? this.contents.get(key, keepScalar)\n : undefined;\n }\n /**\n * Returns item at `path`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n getIn(path, keepScalar) {\n if (Collection.isEmptyPath(path))\n return !keepScalar && identity.isScalar(this.contents)\n ? this.contents.value\n : this.contents;\n return identity.isCollection(this.contents)\n ? this.contents.getIn(path, keepScalar)\n : undefined;\n }\n /**\n * Checks if the document includes a value with the key `key`.\n */\n has(key) {\n return identity.isCollection(this.contents) ? this.contents.has(key) : false;\n }\n /**\n * Checks if the document includes a value at `path`.\n */\n hasIn(path) {\n if (Collection.isEmptyPath(path))\n return this.contents !== undefined;\n return identity.isCollection(this.contents) ? this.contents.hasIn(path) : false;\n }\n /**\n * Sets a value in this document. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n set(key, value) {\n if (this.contents == null) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = Collection.collectionFromPath(this.schema, [key], value);\n }\n else if (assertCollection(this.contents)) {\n this.contents.set(key, value);\n }\n }\n /**\n * Sets a value in this document. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n setIn(path, value) {\n if (Collection.isEmptyPath(path)) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = value;\n }\n else if (this.contents == null) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = Collection.collectionFromPath(this.schema, Array.from(path), value);\n }\n else if (assertCollection(this.contents)) {\n this.contents.setIn(path, value);\n }\n }\n /**\n * Change the YAML version and schema used by the document.\n * A `null` version disables support for directives, explicit tags, anchors, and aliases.\n * It also requires the `schema` option to be given as a `Schema` instance value.\n *\n * Overrides all previously set schema options.\n */\n setSchema(version, options = {}) {\n if (typeof version === 'number')\n version = String(version);\n let opt;\n switch (version) {\n case '1.1':\n if (this.directives)\n this.directives.yaml.version = '1.1';\n else\n this.directives = new directives.Directives({ version: '1.1' });\n opt = { resolveKnownTags: false, schema: 'yaml-1.1' };\n break;\n case '1.2':\n case 'next':\n if (this.directives)\n this.directives.yaml.version = version;\n else\n this.directives = new directives.Directives({ version });\n opt = { resolveKnownTags: true, schema: 'core' };\n break;\n case null:\n if (this.directives)\n delete this.directives;\n opt = null;\n break;\n default: {\n const sv = JSON.stringify(version);\n throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${sv}`);\n }\n }\n // Not using `instanceof Schema` to allow for duck typing\n if (options.schema instanceof Object)\n this.schema = options.schema;\n else if (opt)\n this.schema = new Schema.Schema(Object.assign(opt, options));\n else\n throw new Error(`With a null YAML version, the { schema: Schema } option is required`);\n }\n // json & jsonArg are only used from toJSON()\n toJS({ json, jsonArg, mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n const ctx = {\n anchors: new Map(),\n doc: this,\n keep: !json,\n mapAsMap: mapAsMap === true,\n mapKeyWarned: false,\n maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n };\n const res = toJS.toJS(this.contents, jsonArg ?? '', ctx);\n if (typeof onAnchor === 'function')\n for (const { count, res } of ctx.anchors.values())\n onAnchor(res, count);\n return typeof reviver === 'function'\n ? applyReviver.applyReviver(reviver, { '': res }, '', res)\n : res;\n }\n /**\n * A JSON representation of the document `contents`.\n *\n * @param jsonArg Used by `JSON.stringify` to indicate the array index or\n * property name.\n */\n toJSON(jsonArg, onAnchor) {\n return this.toJS({ json: true, jsonArg, mapAsMap: false, onAnchor });\n }\n /** A YAML representation of the document. */\n toString(options = {}) {\n if (this.errors.length > 0)\n throw new Error('Document with errors cannot be stringified');\n if ('indent' in options &&\n (!Number.isInteger(options.indent) || Number(options.indent) <= 0)) {\n const s = JSON.stringify(options.indent);\n throw new Error(`\"indent\" option must be a positive integer, not ${s}`);\n }\n return stringifyDocument.stringifyDocument(this, options);\n }\n}\nfunction assertCollection(contents) {\n if (identity.isCollection(contents))\n return true;\n throw new Error('Expected a YAML collection as document contents');\n}\n\nexports.Document = Document;\n","'use strict';\n\nclass YAMLError extends Error {\n constructor(name, pos, code, message) {\n super();\n this.name = name;\n this.code = code;\n this.message = message;\n this.pos = pos;\n }\n}\nclass YAMLParseError extends YAMLError {\n constructor(pos, code, message) {\n super('YAMLParseError', pos, code, message);\n }\n}\nclass YAMLWarning extends YAMLError {\n constructor(pos, code, message) {\n super('YAMLWarning', pos, code, message);\n }\n}\nconst prettifyError = (src, lc) => (error) => {\n if (error.pos[0] === -1)\n return;\n error.linePos = error.pos.map(pos => lc.linePos(pos));\n const { line, col } = error.linePos[0];\n error.message += ` at line ${line}, column ${col}`;\n let ci = col - 1;\n let lineStr = src\n .substring(lc.lineStarts[line - 1], lc.lineStarts[line])\n .replace(/[\\n\\r]+$/, '');\n // Trim to max 80 chars, keeping col position near the middle\n if (ci >= 60 && lineStr.length > 80) {\n const trimStart = Math.min(ci - 39, lineStr.length - 79);\n lineStr = '…' + lineStr.substring(trimStart);\n ci -= trimStart - 1;\n }\n if (lineStr.length > 80)\n lineStr = lineStr.substring(0, 79) + '…';\n // Include previous line in context if pointing at line start\n if (line > 1 && /^ *$/.test(lineStr.substring(0, ci))) {\n // Regexp won't match if start is trimmed\n let prev = src.substring(lc.lineStarts[line - 2], lc.lineStarts[line - 1]);\n if (prev.length > 80)\n prev = prev.substring(0, 79) + '…\\n';\n lineStr = prev + lineStr;\n }\n if (/[^ ]/.test(lineStr)) {\n let count = 1;\n const end = error.linePos[1];\n if (end?.line === line && end.col > col) {\n count = Math.max(1, Math.min(end.col - col, 80 - ci));\n }\n const pointer = ' '.repeat(ci) + '^'.repeat(count);\n error.message += `:\\n\\n${lineStr}\\n${pointer}\\n`;\n }\n};\n\nexports.YAMLError = YAMLError;\nexports.YAMLParseError = YAMLParseError;\nexports.YAMLWarning = YAMLWarning;\nexports.prettifyError = prettifyError;\n","'use strict';\n\nfunction resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {\n let spaceBefore = false;\n let atNewline = startOnNewline;\n let hasSpace = startOnNewline;\n let comment = '';\n let commentSep = '';\n let hasNewline = false;\n let reqSpace = false;\n let tab = null;\n let anchor = null;\n let tag = null;\n let newlineAfterProp = null;\n let comma = null;\n let found = null;\n let start = null;\n for (const token of tokens) {\n if (reqSpace) {\n if (token.type !== 'space' &&\n token.type !== 'newline' &&\n token.type !== 'comma')\n onError(token.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n reqSpace = false;\n }\n if (tab) {\n if (atNewline && token.type !== 'comment' && token.type !== 'newline') {\n onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n }\n tab = null;\n }\n switch (token.type) {\n case 'space':\n // At the doc level, tabs at line start may be parsed\n // as leading white space rather than indentation.\n // In a flow collection, only the parser handles indent.\n if (!flow &&\n (indicator !== 'doc-start' || next?.type !== 'flow-collection') &&\n token.source.includes('\\t')) {\n tab = token;\n }\n hasSpace = true;\n break;\n case 'comment': {\n if (!hasSpace)\n onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n const cb = token.source.substring(1) || ' ';\n if (!comment)\n comment = cb;\n else\n comment += commentSep + cb;\n commentSep = '';\n atNewline = false;\n break;\n }\n case 'newline':\n if (atNewline) {\n if (comment)\n comment += token.source;\n else if (!found || indicator !== 'seq-item-ind')\n spaceBefore = true;\n }\n else\n commentSep += token.source;\n atNewline = true;\n hasNewline = true;\n if (anchor || tag)\n newlineAfterProp = token;\n hasSpace = true;\n break;\n case 'anchor':\n if (anchor)\n onError(token, 'MULTIPLE_ANCHORS', 'A node can have at most one anchor');\n if (token.source.endsWith(':'))\n onError(token.offset + token.source.length - 1, 'BAD_ALIAS', 'Anchor ending in : is ambiguous', true);\n anchor = token;\n start ?? (start = token.offset);\n atNewline = false;\n hasSpace = false;\n reqSpace = true;\n break;\n case 'tag': {\n if (tag)\n onError(token, 'MULTIPLE_TAGS', 'A node can have at most one tag');\n tag = token;\n start ?? (start = token.offset);\n atNewline = false;\n hasSpace = false;\n reqSpace = true;\n break;\n }\n case indicator:\n // Could here handle preceding comments differently\n if (anchor || tag)\n onError(token, 'BAD_PROP_ORDER', `Anchors and tags must be after the ${token.source} indicator`);\n if (found)\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.source} in ${flow ?? 'collection'}`);\n found = token;\n atNewline =\n indicator === 'seq-item-ind' || indicator === 'explicit-key-ind';\n hasSpace = false;\n break;\n case 'comma':\n if (flow) {\n if (comma)\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected , in ${flow}`);\n comma = token;\n atNewline = false;\n hasSpace = false;\n break;\n }\n // else fallthrough\n default:\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.type} token`);\n atNewline = false;\n hasSpace = false;\n }\n }\n const last = tokens[tokens.length - 1];\n const end = last ? last.offset + last.source.length : offset;\n if (reqSpace &&\n next &&\n next.type !== 'space' &&\n next.type !== 'newline' &&\n next.type !== 'comma' &&\n (next.type !== 'scalar' || next.source !== '')) {\n onError(next.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n }\n if (tab &&\n ((atNewline && tab.indent <= parentIndent) ||\n next?.type === 'block-map' ||\n next?.type === 'block-seq'))\n onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n return {\n comma,\n found,\n spaceBefore,\n comment,\n hasNewline,\n anchor,\n tag,\n newlineAfterProp,\n end,\n start: start ?? end\n };\n}\n\nexports.resolveProps = resolveProps;\n","'use strict';\n\nfunction containsNewline(key) {\n if (!key)\n return null;\n switch (key.type) {\n case 'alias':\n case 'scalar':\n case 'double-quoted-scalar':\n case 'single-quoted-scalar':\n if (key.source.includes('\\n'))\n return true;\n if (key.end)\n for (const st of key.end)\n if (st.type === 'newline')\n return true;\n return false;\n case 'flow-collection':\n for (const it of key.items) {\n for (const st of it.start)\n if (st.type === 'newline')\n return true;\n if (it.sep)\n for (const st of it.sep)\n if (st.type === 'newline')\n return true;\n if (containsNewline(it.key) || containsNewline(it.value))\n return true;\n }\n return false;\n default:\n return true;\n }\n}\n\nexports.containsNewline = containsNewline;\n","'use strict';\n\nvar utilContainsNewline = require('./util-contains-newline.js');\n\nfunction flowIndentCheck(indent, fc, onError) {\n if (fc?.type === 'flow-collection') {\n const end = fc.end[0];\n if (end.indent === indent &&\n (end.source === ']' || end.source === '}') &&\n utilContainsNewline.containsNewline(fc)) {\n const msg = 'Flow end indicator should be more indented than parent';\n onError(end, 'BAD_INDENT', msg, true);\n }\n }\n}\n\nexports.flowIndentCheck = flowIndentCheck;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\n\nfunction mapIncludes(ctx, items, search) {\n const { uniqueKeys } = ctx.options;\n if (uniqueKeys === false)\n return false;\n const isEqual = typeof uniqueKeys === 'function'\n ? uniqueKeys\n : (a, b) => a === b || (identity.isScalar(a) && identity.isScalar(b) && a.value === b.value);\n return items.some(pair => isEqual(pair.key, search));\n}\n\nexports.mapIncludes = mapIncludes;\n","'use strict';\n\nvar Pair = require('../nodes/Pair.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar resolveProps = require('./resolve-props.js');\nvar utilContainsNewline = require('./util-contains-newline.js');\nvar utilFlowIndentCheck = require('./util-flow-indent-check.js');\nvar utilMapIncludes = require('./util-map-includes.js');\n\nconst startColMsg = 'All mapping items must start at the same column';\nfunction resolveBlockMap({ composeNode, composeEmptyNode }, ctx, bm, onError, tag) {\n const NodeClass = tag?.nodeClass ?? YAMLMap.YAMLMap;\n const map = new NodeClass(ctx.schema);\n if (ctx.atRoot)\n ctx.atRoot = false;\n let offset = bm.offset;\n let commentEnd = null;\n for (const collItem of bm.items) {\n const { start, key, sep, value } = collItem;\n // key properties\n const keyProps = resolveProps.resolveProps(start, {\n indicator: 'explicit-key-ind',\n next: key ?? sep?.[0],\n offset,\n onError,\n parentIndent: bm.indent,\n startOnNewline: true\n });\n const implicitKey = !keyProps.found;\n if (implicitKey) {\n if (key) {\n if (key.type === 'block-seq')\n onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'A block sequence may not be used as an implicit map key');\n else if ('indent' in key && key.indent !== bm.indent)\n onError(offset, 'BAD_INDENT', startColMsg);\n }\n if (!keyProps.anchor && !keyProps.tag && !sep) {\n commentEnd = keyProps.end;\n if (keyProps.comment) {\n if (map.comment)\n map.comment += '\\n' + keyProps.comment;\n else\n map.comment = keyProps.comment;\n }\n continue;\n }\n if (keyProps.newlineAfterProp || utilContainsNewline.containsNewline(key)) {\n onError(key ?? start[start.length - 1], 'MULTILINE_IMPLICIT_KEY', 'Implicit keys need to be on a single line');\n }\n }\n else if (keyProps.found?.indent !== bm.indent) {\n onError(offset, 'BAD_INDENT', startColMsg);\n }\n // key value\n ctx.atKey = true;\n const keyStart = keyProps.end;\n const keyNode = key\n ? composeNode(ctx, key, keyProps, onError)\n : composeEmptyNode(ctx, keyStart, start, null, keyProps, onError);\n if (ctx.schema.compat)\n utilFlowIndentCheck.flowIndentCheck(bm.indent, key, onError);\n ctx.atKey = false;\n if (utilMapIncludes.mapIncludes(ctx, map.items, keyNode))\n onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n // value properties\n const valueProps = resolveProps.resolveProps(sep ?? [], {\n indicator: 'map-value-ind',\n next: value,\n offset: keyNode.range[2],\n onError,\n parentIndent: bm.indent,\n startOnNewline: !key || key.type === 'block-scalar'\n });\n offset = valueProps.end;\n if (valueProps.found) {\n if (implicitKey) {\n if (value?.type === 'block-map' && !valueProps.hasNewline)\n onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'Nested mappings are not allowed in compact mappings');\n if (ctx.options.strict &&\n keyProps.start < valueProps.found.offset - 1024)\n onError(keyNode.range, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit block mapping key');\n }\n // value value\n const valueNode = value\n ? composeNode(ctx, value, valueProps, onError)\n : composeEmptyNode(ctx, offset, sep, null, valueProps, onError);\n if (ctx.schema.compat)\n utilFlowIndentCheck.flowIndentCheck(bm.indent, value, onError);\n offset = valueNode.range[2];\n const pair = new Pair.Pair(keyNode, valueNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n map.items.push(pair);\n }\n else {\n // key with no value\n if (implicitKey)\n onError(keyNode.range, 'MISSING_CHAR', 'Implicit map keys need to be followed by map values');\n if (valueProps.comment) {\n if (keyNode.comment)\n keyNode.comment += '\\n' + valueProps.comment;\n else\n keyNode.comment = valueProps.comment;\n }\n const pair = new Pair.Pair(keyNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n map.items.push(pair);\n }\n }\n if (commentEnd && commentEnd < offset)\n onError(commentEnd, 'IMPOSSIBLE', 'Map comment with trailing content');\n map.range = [bm.offset, offset, commentEnd ?? offset];\n return map;\n}\n\nexports.resolveBlockMap = resolveBlockMap;\n","'use strict';\n\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveProps = require('./resolve-props.js');\nvar utilFlowIndentCheck = require('./util-flow-indent-check.js');\n\nfunction resolveBlockSeq({ composeNode, composeEmptyNode }, ctx, bs, onError, tag) {\n const NodeClass = tag?.nodeClass ?? YAMLSeq.YAMLSeq;\n const seq = new NodeClass(ctx.schema);\n if (ctx.atRoot)\n ctx.atRoot = false;\n if (ctx.atKey)\n ctx.atKey = false;\n let offset = bs.offset;\n let commentEnd = null;\n for (const { start, value } of bs.items) {\n const props = resolveProps.resolveProps(start, {\n indicator: 'seq-item-ind',\n next: value,\n offset,\n onError,\n parentIndent: bs.indent,\n startOnNewline: true\n });\n if (!props.found) {\n if (props.anchor || props.tag || value) {\n if (value?.type === 'block-seq')\n onError(props.end, 'BAD_INDENT', 'All sequence items must start at the same column');\n else\n onError(offset, 'MISSING_CHAR', 'Sequence item without - indicator');\n }\n else {\n commentEnd = props.end;\n if (props.comment)\n seq.comment = props.comment;\n continue;\n }\n }\n const node = value\n ? composeNode(ctx, value, props, onError)\n : composeEmptyNode(ctx, props.end, start, null, props, onError);\n if (ctx.schema.compat)\n utilFlowIndentCheck.flowIndentCheck(bs.indent, value, onError);\n offset = node.range[2];\n seq.items.push(node);\n }\n seq.range = [bs.offset, offset, commentEnd ?? offset];\n return seq;\n}\n\nexports.resolveBlockSeq = resolveBlockSeq;\n","'use strict';\n\nfunction resolveEnd(end, offset, reqSpace, onError) {\n let comment = '';\n if (end) {\n let hasSpace = false;\n let sep = '';\n for (const token of end) {\n const { source, type } = token;\n switch (type) {\n case 'space':\n hasSpace = true;\n break;\n case 'comment': {\n if (reqSpace && !hasSpace)\n onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n const cb = source.substring(1) || ' ';\n if (!comment)\n comment = cb;\n else\n comment += sep + cb;\n sep = '';\n break;\n }\n case 'newline':\n if (comment)\n sep += source;\n hasSpace = true;\n break;\n default:\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${type} at node end`);\n }\n offset += source.length;\n }\n }\n return { comment, offset };\n}\n\nexports.resolveEnd = resolveEnd;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Pair = require('../nodes/Pair.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveEnd = require('./resolve-end.js');\nvar resolveProps = require('./resolve-props.js');\nvar utilContainsNewline = require('./util-contains-newline.js');\nvar utilMapIncludes = require('./util-map-includes.js');\n\nconst blockMsg = 'Block collections are not allowed within flow collections';\nconst isBlock = (token) => token && (token.type === 'block-map' || token.type === 'block-seq');\nfunction resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onError, tag) {\n const isMap = fc.start.source === '{';\n const fcName = isMap ? 'flow map' : 'flow sequence';\n const NodeClass = (tag?.nodeClass ?? (isMap ? YAMLMap.YAMLMap : YAMLSeq.YAMLSeq));\n const coll = new NodeClass(ctx.schema);\n coll.flow = true;\n const atRoot = ctx.atRoot;\n if (atRoot)\n ctx.atRoot = false;\n if (ctx.atKey)\n ctx.atKey = false;\n let offset = fc.offset + fc.start.source.length;\n for (let i = 0; i < fc.items.length; ++i) {\n const collItem = fc.items[i];\n const { start, key, sep, value } = collItem;\n const props = resolveProps.resolveProps(start, {\n flow: fcName,\n indicator: 'explicit-key-ind',\n next: key ?? sep?.[0],\n offset,\n onError,\n parentIndent: fc.indent,\n startOnNewline: false\n });\n if (!props.found) {\n if (!props.anchor && !props.tag && !sep && !value) {\n if (i === 0 && props.comma)\n onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n else if (i < fc.items.length - 1)\n onError(props.start, 'UNEXPECTED_TOKEN', `Unexpected empty item in ${fcName}`);\n if (props.comment) {\n if (coll.comment)\n coll.comment += '\\n' + props.comment;\n else\n coll.comment = props.comment;\n }\n offset = props.end;\n continue;\n }\n if (!isMap && ctx.options.strict && utilContainsNewline.containsNewline(key))\n onError(key, // checked by containsNewline()\n 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n }\n if (i === 0) {\n if (props.comma)\n onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n }\n else {\n if (!props.comma)\n onError(props.start, 'MISSING_CHAR', `Missing , between ${fcName} items`);\n if (props.comment) {\n let prevItemComment = '';\n loop: for (const st of start) {\n switch (st.type) {\n case 'comma':\n case 'space':\n break;\n case 'comment':\n prevItemComment = st.source.substring(1);\n break loop;\n default:\n break loop;\n }\n }\n if (prevItemComment) {\n let prev = coll.items[coll.items.length - 1];\n if (identity.isPair(prev))\n prev = prev.value ?? prev.key;\n if (prev.comment)\n prev.comment += '\\n' + prevItemComment;\n else\n prev.comment = prevItemComment;\n props.comment = props.comment.substring(prevItemComment.length + 1);\n }\n }\n }\n if (!isMap && !sep && !props.found) {\n // item is a value in a seq\n // → key & sep are empty, start does not include ? or :\n const valueNode = value\n ? composeNode(ctx, value, props, onError)\n : composeEmptyNode(ctx, props.end, sep, null, props, onError);\n coll.items.push(valueNode);\n offset = valueNode.range[2];\n if (isBlock(value))\n onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n }\n else {\n // item is a key+value pair\n // key value\n ctx.atKey = true;\n const keyStart = props.end;\n const keyNode = key\n ? composeNode(ctx, key, props, onError)\n : composeEmptyNode(ctx, keyStart, start, null, props, onError);\n if (isBlock(key))\n onError(keyNode.range, 'BLOCK_IN_FLOW', blockMsg);\n ctx.atKey = false;\n // value properties\n const valueProps = resolveProps.resolveProps(sep ?? [], {\n flow: fcName,\n indicator: 'map-value-ind',\n next: value,\n offset: keyNode.range[2],\n onError,\n parentIndent: fc.indent,\n startOnNewline: false\n });\n if (valueProps.found) {\n if (!isMap && !props.found && ctx.options.strict) {\n if (sep)\n for (const st of sep) {\n if (st === valueProps.found)\n break;\n if (st.type === 'newline') {\n onError(st, 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n break;\n }\n }\n if (props.start < valueProps.found.offset - 1024)\n onError(valueProps.found, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit flow sequence key');\n }\n }\n else if (value) {\n if ('source' in value && value.source?.[0] === ':')\n onError(value, 'MISSING_CHAR', `Missing space after : in ${fcName}`);\n else\n onError(valueProps.start, 'MISSING_CHAR', `Missing , or : between ${fcName} items`);\n }\n // value value\n const valueNode = value\n ? composeNode(ctx, value, valueProps, onError)\n : valueProps.found\n ? composeEmptyNode(ctx, valueProps.end, sep, null, valueProps, onError)\n : null;\n if (valueNode) {\n if (isBlock(value))\n onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n }\n else if (valueProps.comment) {\n if (keyNode.comment)\n keyNode.comment += '\\n' + valueProps.comment;\n else\n keyNode.comment = valueProps.comment;\n }\n const pair = new Pair.Pair(keyNode, valueNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n if (isMap) {\n const map = coll;\n if (utilMapIncludes.mapIncludes(ctx, map.items, keyNode))\n onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n map.items.push(pair);\n }\n else {\n const map = new YAMLMap.YAMLMap(ctx.schema);\n map.flow = true;\n map.items.push(pair);\n const endRange = (valueNode ?? keyNode).range;\n map.range = [keyNode.range[0], endRange[1], endRange[2]];\n coll.items.push(map);\n }\n offset = valueNode ? valueNode.range[2] : valueProps.end;\n }\n }\n const expectedEnd = isMap ? '}' : ']';\n const [ce, ...ee] = fc.end;\n let cePos = offset;\n if (ce?.source === expectedEnd)\n cePos = ce.offset + ce.source.length;\n else {\n const name = fcName[0].toUpperCase() + fcName.substring(1);\n const msg = atRoot\n ? `${name} must end with a ${expectedEnd}`\n : `${name} in block collection must be sufficiently indented and end with a ${expectedEnd}`;\n onError(offset, atRoot ? 'MISSING_CHAR' : 'BAD_INDENT', msg);\n if (ce && ce.source.length !== 1)\n ee.unshift(ce);\n }\n if (ee.length > 0) {\n const end = resolveEnd.resolveEnd(ee, cePos, ctx.options.strict, onError);\n if (end.comment) {\n if (coll.comment)\n coll.comment += '\\n' + end.comment;\n else\n coll.comment = end.comment;\n }\n coll.range = [fc.offset, cePos, end.offset];\n }\n else {\n coll.range = [fc.offset, cePos, cePos];\n }\n return coll;\n}\n\nexports.resolveFlowCollection = resolveFlowCollection;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveBlockMap = require('./resolve-block-map.js');\nvar resolveBlockSeq = require('./resolve-block-seq.js');\nvar resolveFlowCollection = require('./resolve-flow-collection.js');\n\nfunction resolveCollection(CN, ctx, token, onError, tagName, tag) {\n const coll = token.type === 'block-map'\n ? resolveBlockMap.resolveBlockMap(CN, ctx, token, onError, tag)\n : token.type === 'block-seq'\n ? resolveBlockSeq.resolveBlockSeq(CN, ctx, token, onError, tag)\n : resolveFlowCollection.resolveFlowCollection(CN, ctx, token, onError, tag);\n const Coll = coll.constructor;\n // If we got a tagName matching the class, or the tag name is '!',\n // then use the tagName from the node class used to create it.\n if (tagName === '!' || tagName === Coll.tagName) {\n coll.tag = Coll.tagName;\n return coll;\n }\n if (tagName)\n coll.tag = tagName;\n return coll;\n}\nfunction composeCollection(CN, ctx, token, props, onError) {\n const tagToken = props.tag;\n const tagName = !tagToken\n ? null\n : ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg));\n if (token.type === 'block-seq') {\n const { anchor, newlineAfterProp: nl } = props;\n const lastProp = anchor && tagToken\n ? anchor.offset > tagToken.offset\n ? anchor\n : tagToken\n : (anchor ?? tagToken);\n if (lastProp && (!nl || nl.offset < lastProp.offset)) {\n const message = 'Missing newline after block sequence props';\n onError(lastProp, 'MISSING_CHAR', message);\n }\n }\n const expType = token.type === 'block-map'\n ? 'map'\n : token.type === 'block-seq'\n ? 'seq'\n : token.start.source === '{'\n ? 'map'\n : 'seq';\n // shortcut: check if it's a generic YAMLMap or YAMLSeq\n // before jumping into the custom tag logic.\n if (!tagToken ||\n !tagName ||\n tagName === '!' ||\n (tagName === YAMLMap.YAMLMap.tagName && expType === 'map') ||\n (tagName === YAMLSeq.YAMLSeq.tagName && expType === 'seq')) {\n return resolveCollection(CN, ctx, token, onError, tagName);\n }\n let tag = ctx.schema.tags.find(t => t.tag === tagName && t.collection === expType);\n if (!tag) {\n const kt = ctx.schema.knownTags[tagName];\n if (kt?.collection === expType) {\n ctx.schema.tags.push(Object.assign({}, kt, { default: false }));\n tag = kt;\n }\n else {\n if (kt) {\n onError(tagToken, 'BAD_COLLECTION_TYPE', `${kt.tag} used for ${expType} collection, but expects ${kt.collection ?? 'scalar'}`, true);\n }\n else {\n onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, true);\n }\n return resolveCollection(CN, ctx, token, onError, tagName);\n }\n }\n const coll = resolveCollection(CN, ctx, token, onError, tagName, tag);\n const res = tag.resolve?.(coll, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg), ctx.options) ?? coll;\n const node = identity.isNode(res)\n ? res\n : new Scalar.Scalar(res);\n node.range = coll.range;\n node.tag = tagName;\n if (tag?.format)\n node.format = tag.format;\n return node;\n}\n\nexports.composeCollection = composeCollection;\n","'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\n\nfunction resolveBlockScalar(ctx, scalar, onError) {\n const start = scalar.offset;\n const header = parseBlockScalarHeader(scalar, ctx.options.strict, onError);\n if (!header)\n return { value: '', type: null, comment: '', range: [start, start, start] };\n const type = header.mode === '>' ? Scalar.Scalar.BLOCK_FOLDED : Scalar.Scalar.BLOCK_LITERAL;\n const lines = scalar.source ? splitLines(scalar.source) : [];\n // determine the end of content & start of chomping\n let chompStart = lines.length;\n for (let i = lines.length - 1; i >= 0; --i) {\n const content = lines[i][1];\n if (content === '' || content === '\\r')\n chompStart = i;\n else\n break;\n }\n // shortcut for empty contents\n if (chompStart === 0) {\n const value = header.chomp === '+' && lines.length > 0\n ? '\\n'.repeat(Math.max(1, lines.length - 1))\n : '';\n let end = start + header.length;\n if (scalar.source)\n end += scalar.source.length;\n return { value, type, comment: header.comment, range: [start, end, end] };\n }\n // find the indentation level to trim from start\n let trimIndent = scalar.indent + header.indent;\n let offset = scalar.offset + header.length;\n let contentStart = 0;\n for (let i = 0; i < chompStart; ++i) {\n const [indent, content] = lines[i];\n if (content === '' || content === '\\r') {\n if (header.indent === 0 && indent.length > trimIndent)\n trimIndent = indent.length;\n }\n else {\n if (indent.length < trimIndent) {\n const message = 'Block scalars with more-indented leading empty lines must use an explicit indentation indicator';\n onError(offset + indent.length, 'MISSING_CHAR', message);\n }\n if (header.indent === 0)\n trimIndent = indent.length;\n contentStart = i;\n if (trimIndent === 0 && !ctx.atRoot) {\n const message = 'Block scalar values in collections must be indented';\n onError(offset, 'BAD_INDENT', message);\n }\n break;\n }\n offset += indent.length + content.length + 1;\n }\n // include trailing more-indented empty lines in content\n for (let i = lines.length - 1; i >= chompStart; --i) {\n if (lines[i][0].length > trimIndent)\n chompStart = i + 1;\n }\n let value = '';\n let sep = '';\n let prevMoreIndented = false;\n // leading whitespace is kept intact\n for (let i = 0; i < contentStart; ++i)\n value += lines[i][0].slice(trimIndent) + '\\n';\n for (let i = contentStart; i < chompStart; ++i) {\n let [indent, content] = lines[i];\n offset += indent.length + content.length + 1;\n const crlf = content[content.length - 1] === '\\r';\n if (crlf)\n content = content.slice(0, -1);\n /* istanbul ignore if already caught in lexer */\n if (content && indent.length < trimIndent) {\n const src = header.indent\n ? 'explicit indentation indicator'\n : 'first line';\n const message = `Block scalar lines must not be less indented than their ${src}`;\n onError(offset - content.length - (crlf ? 2 : 1), 'BAD_INDENT', message);\n indent = '';\n }\n if (type === Scalar.Scalar.BLOCK_LITERAL) {\n value += sep + indent.slice(trimIndent) + content;\n sep = '\\n';\n }\n else if (indent.length > trimIndent || content[0] === '\\t') {\n // more-indented content within a folded block\n if (sep === ' ')\n sep = '\\n';\n else if (!prevMoreIndented && sep === '\\n')\n sep = '\\n\\n';\n value += sep + indent.slice(trimIndent) + content;\n sep = '\\n';\n prevMoreIndented = true;\n }\n else if (content === '') {\n // empty line\n if (sep === '\\n')\n value += '\\n';\n else\n sep = '\\n';\n }\n else {\n value += sep + content;\n sep = ' ';\n prevMoreIndented = false;\n }\n }\n switch (header.chomp) {\n case '-':\n break;\n case '+':\n for (let i = chompStart; i < lines.length; ++i)\n value += '\\n' + lines[i][0].slice(trimIndent);\n if (value[value.length - 1] !== '\\n')\n value += '\\n';\n break;\n default:\n value += '\\n';\n }\n const end = start + header.length + scalar.source.length;\n return { value, type, comment: header.comment, range: [start, end, end] };\n}\nfunction parseBlockScalarHeader({ offset, props }, strict, onError) {\n /* istanbul ignore if should not happen */\n if (props[0].type !== 'block-scalar-header') {\n onError(props[0], 'IMPOSSIBLE', 'Block scalar header not found');\n return null;\n }\n const { source } = props[0];\n const mode = source[0];\n let indent = 0;\n let chomp = '';\n let error = -1;\n for (let i = 1; i < source.length; ++i) {\n const ch = source[i];\n if (!chomp && (ch === '-' || ch === '+'))\n chomp = ch;\n else {\n const n = Number(ch);\n if (!indent && n)\n indent = n;\n else if (error === -1)\n error = offset + i;\n }\n }\n if (error !== -1)\n onError(error, 'UNEXPECTED_TOKEN', `Block scalar header includes extra characters: ${source}`);\n let hasSpace = false;\n let comment = '';\n let length = source.length;\n for (let i = 1; i < props.length; ++i) {\n const token = props[i];\n switch (token.type) {\n case 'space':\n hasSpace = true;\n // fallthrough\n case 'newline':\n length += token.source.length;\n break;\n case 'comment':\n if (strict && !hasSpace) {\n const message = 'Comments must be separated from other tokens by white space characters';\n onError(token, 'MISSING_CHAR', message);\n }\n length += token.source.length;\n comment = token.source.substring(1);\n break;\n case 'error':\n onError(token, 'UNEXPECTED_TOKEN', token.message);\n length += token.source.length;\n break;\n /* istanbul ignore next should not happen */\n default: {\n const message = `Unexpected token in block scalar header: ${token.type}`;\n onError(token, 'UNEXPECTED_TOKEN', message);\n const ts = token.source;\n if (ts && typeof ts === 'string')\n length += ts.length;\n }\n }\n }\n return { mode, indent, chomp, comment, length };\n}\n/** @returns Array of lines split up as `[indent, content]` */\nfunction splitLines(source) {\n const split = source.split(/\\n( *)/);\n const first = split[0];\n const m = first.match(/^( *)/);\n const line0 = m?.[1]\n ? [m[1], first.slice(m[1].length)]\n : ['', first];\n const lines = [line0];\n for (let i = 1; i < split.length; i += 2)\n lines.push([split[i], split[i + 1]]);\n return lines;\n}\n\nexports.resolveBlockScalar = resolveBlockScalar;\n","'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\nvar resolveEnd = require('./resolve-end.js');\n\nfunction resolveFlowScalar(scalar, strict, onError) {\n const { offset, type, source, end } = scalar;\n let _type;\n let value;\n const _onError = (rel, code, msg) => onError(offset + rel, code, msg);\n switch (type) {\n case 'scalar':\n _type = Scalar.Scalar.PLAIN;\n value = plainValue(source, _onError);\n break;\n case 'single-quoted-scalar':\n _type = Scalar.Scalar.QUOTE_SINGLE;\n value = singleQuotedValue(source, _onError);\n break;\n case 'double-quoted-scalar':\n _type = Scalar.Scalar.QUOTE_DOUBLE;\n value = doubleQuotedValue(source, _onError);\n break;\n /* istanbul ignore next should not happen */\n default:\n onError(scalar, 'UNEXPECTED_TOKEN', `Expected a flow scalar value, but found: ${type}`);\n return {\n value: '',\n type: null,\n comment: '',\n range: [offset, offset + source.length, offset + source.length]\n };\n }\n const valueEnd = offset + source.length;\n const re = resolveEnd.resolveEnd(end, valueEnd, strict, onError);\n return {\n value,\n type: _type,\n comment: re.comment,\n range: [offset, valueEnd, re.offset]\n };\n}\nfunction plainValue(source, onError) {\n let badChar = '';\n switch (source[0]) {\n /* istanbul ignore next should not happen */\n case '\\t':\n badChar = 'a tab character';\n break;\n case ',':\n badChar = 'flow indicator character ,';\n break;\n case '%':\n badChar = 'directive indicator character %';\n break;\n case '|':\n case '>': {\n badChar = `block scalar indicator ${source[0]}`;\n break;\n }\n case '@':\n case '`': {\n badChar = `reserved character ${source[0]}`;\n break;\n }\n }\n if (badChar)\n onError(0, 'BAD_SCALAR_START', `Plain value cannot start with ${badChar}`);\n return foldLines(source);\n}\nfunction singleQuotedValue(source, onError) {\n if (source[source.length - 1] !== \"'\" || source.length === 1)\n onError(source.length, 'MISSING_CHAR', \"Missing closing 'quote\");\n return foldLines(source.slice(1, -1)).replace(/''/g, \"'\");\n}\nfunction foldLines(source) {\n /**\n * The negative lookbehind here and in the `re` RegExp is to\n * prevent causing a polynomial search time in certain cases.\n *\n * The try-catch is for Safari, which doesn't support this yet:\n * https://caniuse.com/js-regexp-lookbehind\n */\n let first, line;\n try {\n first = new RegExp('(.*?)(?<![ \\t])[ \\t]*\\r?\\n', 'sy');\n line = new RegExp('[ \\t]*(.*?)(?:(?<![ \\t])[ \\t]*)?\\r?\\n', 'sy');\n }\n catch {\n first = /(.*?)[ \\t]*\\r?\\n/sy;\n line = /[ \\t]*(.*?)[ \\t]*\\r?\\n/sy;\n }\n let match = first.exec(source);\n if (!match)\n return source;\n let res = match[1];\n let sep = ' ';\n let pos = first.lastIndex;\n line.lastIndex = pos;\n while ((match = line.exec(source))) {\n if (match[1] === '') {\n if (sep === '\\n')\n res += sep;\n else\n sep = '\\n';\n }\n else {\n res += sep + match[1];\n sep = ' ';\n }\n pos = line.lastIndex;\n }\n const last = /[ \\t]*(.*)/sy;\n last.lastIndex = pos;\n match = last.exec(source);\n return res + sep + (match?.[1] ?? '');\n}\nfunction doubleQuotedValue(source, onError) {\n let res = '';\n for (let i = 1; i < source.length - 1; ++i) {\n const ch = source[i];\n if (ch === '\\r' && source[i + 1] === '\\n')\n continue;\n if (ch === '\\n') {\n const { fold, offset } = foldNewline(source, i);\n res += fold;\n i = offset;\n }\n else if (ch === '\\\\') {\n let next = source[++i];\n const cc = escapeCodes[next];\n if (cc)\n res += cc;\n else if (next === '\\n') {\n // skip escaped newlines, but still trim the following line\n next = source[i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n }\n else if (next === '\\r' && source[i + 1] === '\\n') {\n // skip escaped CRLF newlines, but still trim the following line\n next = source[++i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n }\n else if (next === 'x' || next === 'u' || next === 'U') {\n const length = { x: 2, u: 4, U: 8 }[next];\n res += parseCharCode(source, i + 1, length, onError);\n i += length;\n }\n else {\n const raw = source.substr(i - 1, 2);\n onError(i - 1, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n res += raw;\n }\n }\n else if (ch === ' ' || ch === '\\t') {\n // trim trailing whitespace\n const wsStart = i;\n let next = source[i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n if (next !== '\\n' && !(next === '\\r' && source[i + 2] === '\\n'))\n res += i > wsStart ? source.slice(wsStart, i + 1) : ch;\n }\n else {\n res += ch;\n }\n }\n if (source[source.length - 1] !== '\"' || source.length === 1)\n onError(source.length, 'MISSING_CHAR', 'Missing closing \"quote');\n return res;\n}\n/**\n * Fold a single newline into a space, multiple newlines to N - 1 newlines.\n * Presumes `source[offset] === '\\n'`\n */\nfunction foldNewline(source, offset) {\n let fold = '';\n let ch = source[offset + 1];\n while (ch === ' ' || ch === '\\t' || ch === '\\n' || ch === '\\r') {\n if (ch === '\\r' && source[offset + 2] !== '\\n')\n break;\n if (ch === '\\n')\n fold += '\\n';\n offset += 1;\n ch = source[offset + 1];\n }\n if (!fold)\n fold = ' ';\n return { fold, offset };\n}\nconst escapeCodes = {\n '0': '\\0', // null character\n a: '\\x07', // bell character\n b: '\\b', // backspace\n e: '\\x1b', // escape character\n f: '\\f', // form feed\n n: '\\n', // line feed\n r: '\\r', // carriage return\n t: '\\t', // horizontal tab\n v: '\\v', // vertical tab\n N: '\\u0085', // Unicode next line\n _: '\\u00a0', // Unicode non-breaking space\n L: '\\u2028', // Unicode line separator\n P: '\\u2029', // Unicode paragraph separator\n ' ': ' ',\n '\"': '\"',\n '/': '/',\n '\\\\': '\\\\',\n '\\t': '\\t'\n};\nfunction parseCharCode(source, offset, length, onError) {\n const cc = source.substr(offset, length);\n const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc);\n const code = ok ? parseInt(cc, 16) : NaN;\n if (isNaN(code)) {\n const raw = source.substr(offset - 2, length + 2);\n onError(offset - 2, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n return raw;\n }\n return String.fromCodePoint(code);\n}\n\nexports.resolveFlowScalar = resolveFlowScalar;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar resolveBlockScalar = require('./resolve-block-scalar.js');\nvar resolveFlowScalar = require('./resolve-flow-scalar.js');\n\nfunction composeScalar(ctx, token, tagToken, onError) {\n const { value, type, comment, range } = token.type === 'block-scalar'\n ? resolveBlockScalar.resolveBlockScalar(ctx, token, onError)\n : resolveFlowScalar.resolveFlowScalar(token, ctx.options.strict, onError);\n const tagName = tagToken\n ? ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg))\n : null;\n let tag;\n if (ctx.options.stringKeys && ctx.atKey) {\n tag = ctx.schema[identity.SCALAR];\n }\n else if (tagName)\n tag = findScalarTagByName(ctx.schema, value, tagName, tagToken, onError);\n else if (token.type === 'scalar')\n tag = findScalarTagByTest(ctx, value, token, onError);\n else\n tag = ctx.schema[identity.SCALAR];\n let scalar;\n try {\n const res = tag.resolve(value, msg => onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg), ctx.options);\n scalar = identity.isScalar(res) ? res : new Scalar.Scalar(res);\n }\n catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg);\n scalar = new Scalar.Scalar(value);\n }\n scalar.range = range;\n scalar.source = value;\n if (type)\n scalar.type = type;\n if (tagName)\n scalar.tag = tagName;\n if (tag.format)\n scalar.format = tag.format;\n if (comment)\n scalar.comment = comment;\n return scalar;\n}\nfunction findScalarTagByName(schema, value, tagName, tagToken, onError) {\n if (tagName === '!')\n return schema[identity.SCALAR]; // non-specific tag\n const matchWithTest = [];\n for (const tag of schema.tags) {\n if (!tag.collection && tag.tag === tagName) {\n if (tag.default && tag.test)\n matchWithTest.push(tag);\n else\n return tag;\n }\n }\n for (const tag of matchWithTest)\n if (tag.test?.test(value))\n return tag;\n const kt = schema.knownTags[tagName];\n if (kt && !kt.collection) {\n // Ensure that the known tag is available for stringifying,\n // but does not get used by default.\n schema.tags.push(Object.assign({}, kt, { default: false, test: undefined }));\n return kt;\n }\n onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, tagName !== 'tag:yaml.org,2002:str');\n return schema[identity.SCALAR];\n}\nfunction findScalarTagByTest({ atKey, directives, schema }, value, token, onError) {\n const tag = schema.tags.find(tag => (tag.default === true || (atKey && tag.default === 'key')) &&\n tag.test?.test(value)) || schema[identity.SCALAR];\n if (schema.compat) {\n const compat = schema.compat.find(tag => tag.default && tag.test?.test(value)) ??\n schema[identity.SCALAR];\n if (tag.tag !== compat.tag) {\n const ts = directives.tagString(tag.tag);\n const cs = directives.tagString(compat.tag);\n const msg = `Value may be parsed as either ${ts} or ${cs}`;\n onError(token, 'TAG_RESOLVE_FAILED', msg, true);\n }\n }\n return tag;\n}\n\nexports.composeScalar = composeScalar;\n","'use strict';\n\nfunction emptyScalarPosition(offset, before, pos) {\n if (before) {\n pos ?? (pos = before.length);\n for (let i = pos - 1; i >= 0; --i) {\n let st = before[i];\n switch (st.type) {\n case 'space':\n case 'comment':\n case 'newline':\n offset -= st.source.length;\n continue;\n }\n // Technically, an empty scalar is immediately after the last non-empty\n // node, but it's more useful to place it after any whitespace.\n st = before[++i];\n while (st?.type === 'space') {\n offset += st.source.length;\n st = before[++i];\n }\n break;\n }\n }\n return offset;\n}\n\nexports.emptyScalarPosition = emptyScalarPosition;\n","'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar identity = require('../nodes/identity.js');\nvar composeCollection = require('./compose-collection.js');\nvar composeScalar = require('./compose-scalar.js');\nvar resolveEnd = require('./resolve-end.js');\nvar utilEmptyScalarPosition = require('./util-empty-scalar-position.js');\n\nconst CN = { composeNode, composeEmptyNode };\nfunction composeNode(ctx, token, props, onError) {\n const atKey = ctx.atKey;\n const { spaceBefore, comment, anchor, tag } = props;\n let node;\n let isSrcToken = true;\n switch (token.type) {\n case 'alias':\n node = composeAlias(ctx, token, onError);\n if (anchor || tag)\n onError(token, 'ALIAS_PROPS', 'An alias node must not specify any properties');\n break;\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n case 'block-scalar':\n node = composeScalar.composeScalar(ctx, token, tag, onError);\n if (anchor)\n node.anchor = anchor.source.substring(1);\n break;\n case 'block-map':\n case 'block-seq':\n case 'flow-collection':\n node = composeCollection.composeCollection(CN, ctx, token, props, onError);\n if (anchor)\n node.anchor = anchor.source.substring(1);\n break;\n default: {\n const message = token.type === 'error'\n ? token.message\n : `Unsupported token (type: ${token.type})`;\n onError(token, 'UNEXPECTED_TOKEN', message);\n node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError);\n isSrcToken = false;\n }\n }\n if (anchor && node.anchor === '')\n onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n if (atKey &&\n ctx.options.stringKeys &&\n (!identity.isScalar(node) ||\n typeof node.value !== 'string' ||\n (node.tag && node.tag !== 'tag:yaml.org,2002:str'))) {\n const msg = 'With stringKeys, all keys must be strings';\n onError(tag ?? token, 'NON_STRING_KEY', msg);\n }\n if (spaceBefore)\n node.spaceBefore = true;\n if (comment) {\n if (token.type === 'scalar' && token.source === '')\n node.comment = comment;\n else\n node.commentBefore = comment;\n }\n // @ts-expect-error Type checking misses meaning of isSrcToken\n if (ctx.options.keepSourceTokens && isSrcToken)\n node.srcToken = token;\n return node;\n}\nfunction composeEmptyNode(ctx, offset, before, pos, { spaceBefore, comment, anchor, tag, end }, onError) {\n const token = {\n type: 'scalar',\n offset: utilEmptyScalarPosition.emptyScalarPosition(offset, before, pos),\n indent: -1,\n source: ''\n };\n const node = composeScalar.composeScalar(ctx, token, tag, onError);\n if (anchor) {\n node.anchor = anchor.source.substring(1);\n if (node.anchor === '')\n onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n }\n if (spaceBefore)\n node.spaceBefore = true;\n if (comment) {\n node.comment = comment;\n node.range[2] = end;\n }\n return node;\n}\nfunction composeAlias({ options }, { offset, source, end }, onError) {\n const alias = new Alias.Alias(source.substring(1));\n if (alias.source === '')\n onError(offset, 'BAD_ALIAS', 'Alias cannot be an empty string');\n if (alias.source.endsWith(':'))\n onError(offset + source.length - 1, 'BAD_ALIAS', 'Alias ending in : is ambiguous', true);\n const valueEnd = offset + source.length;\n const re = resolveEnd.resolveEnd(end, valueEnd, options.strict, onError);\n alias.range = [offset, valueEnd, re.offset];\n if (re.comment)\n alias.comment = re.comment;\n return alias;\n}\n\nexports.composeEmptyNode = composeEmptyNode;\nexports.composeNode = composeNode;\n","'use strict';\n\nvar Document = require('../doc/Document.js');\nvar composeNode = require('./compose-node.js');\nvar resolveEnd = require('./resolve-end.js');\nvar resolveProps = require('./resolve-props.js');\n\nfunction composeDoc(options, directives, { offset, start, value, end }, onError) {\n const opts = Object.assign({ _directives: directives }, options);\n const doc = new Document.Document(undefined, opts);\n const ctx = {\n atKey: false,\n atRoot: true,\n directives: doc.directives,\n options: doc.options,\n schema: doc.schema\n };\n const props = resolveProps.resolveProps(start, {\n indicator: 'doc-start',\n next: value ?? end?.[0],\n offset,\n onError,\n parentIndent: 0,\n startOnNewline: true\n });\n if (props.found) {\n doc.directives.docStart = true;\n if (value &&\n (value.type === 'block-map' || value.type === 'block-seq') &&\n !props.hasNewline)\n onError(props.end, 'MISSING_CHAR', 'Block collection cannot start on same line with directives-end marker');\n }\n // @ts-expect-error If Contents is set, let's trust the user\n doc.contents = value\n ? composeNode.composeNode(ctx, value, props, onError)\n : composeNode.composeEmptyNode(ctx, props.end, start, null, props, onError);\n const contentEnd = doc.contents.range[2];\n const re = resolveEnd.resolveEnd(end, contentEnd, false, onError);\n if (re.comment)\n doc.comment = re.comment;\n doc.range = [offset, contentEnd, re.offset];\n return doc;\n}\n\nexports.composeDoc = composeDoc;\n","'use strict';\n\nvar node_process = require('process');\nvar directives = require('../doc/directives.js');\nvar Document = require('../doc/Document.js');\nvar errors = require('../errors.js');\nvar identity = require('../nodes/identity.js');\nvar composeDoc = require('./compose-doc.js');\nvar resolveEnd = require('./resolve-end.js');\n\nfunction getErrorPos(src) {\n if (typeof src === 'number')\n return [src, src + 1];\n if (Array.isArray(src))\n return src.length === 2 ? src : [src[0], src[1]];\n const { offset, source } = src;\n return [offset, offset + (typeof source === 'string' ? source.length : 1)];\n}\nfunction parsePrelude(prelude) {\n let comment = '';\n let atComment = false;\n let afterEmptyLine = false;\n for (let i = 0; i < prelude.length; ++i) {\n const source = prelude[i];\n switch (source[0]) {\n case '#':\n comment +=\n (comment === '' ? '' : afterEmptyLine ? '\\n\\n' : '\\n') +\n (source.substring(1) || ' ');\n atComment = true;\n afterEmptyLine = false;\n break;\n case '%':\n if (prelude[i + 1]?.[0] !== '#')\n i += 1;\n atComment = false;\n break;\n default:\n // This may be wrong after doc-end, but in that case it doesn't matter\n if (!atComment)\n afterEmptyLine = true;\n atComment = false;\n }\n }\n return { comment, afterEmptyLine };\n}\n/**\n * Compose a stream of CST nodes into a stream of YAML Documents.\n *\n * ```ts\n * import { Composer, Parser } from 'yaml'\n *\n * const src: string = ...\n * const tokens = new Parser().parse(src)\n * const docs = new Composer().compose(tokens)\n * ```\n */\nclass Composer {\n constructor(options = {}) {\n this.doc = null;\n this.atDirectives = false;\n this.prelude = [];\n this.errors = [];\n this.warnings = [];\n this.onError = (source, code, message, warning) => {\n const pos = getErrorPos(source);\n if (warning)\n this.warnings.push(new errors.YAMLWarning(pos, code, message));\n else\n this.errors.push(new errors.YAMLParseError(pos, code, message));\n };\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n this.directives = new directives.Directives({ version: options.version || '1.2' });\n this.options = options;\n }\n decorate(doc, afterDoc) {\n const { comment, afterEmptyLine } = parsePrelude(this.prelude);\n //console.log({ dc: doc.comment, prelude, comment })\n if (comment) {\n const dc = doc.contents;\n if (afterDoc) {\n doc.comment = doc.comment ? `${doc.comment}\\n${comment}` : comment;\n }\n else if (afterEmptyLine || doc.directives.docStart || !dc) {\n doc.commentBefore = comment;\n }\n else if (identity.isCollection(dc) && !dc.flow && dc.items.length > 0) {\n let it = dc.items[0];\n if (identity.isPair(it))\n it = it.key;\n const cb = it.commentBefore;\n it.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n }\n else {\n const cb = dc.commentBefore;\n dc.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n }\n }\n if (afterDoc) {\n Array.prototype.push.apply(doc.errors, this.errors);\n Array.prototype.push.apply(doc.warnings, this.warnings);\n }\n else {\n doc.errors = this.errors;\n doc.warnings = this.warnings;\n }\n this.prelude = [];\n this.errors = [];\n this.warnings = [];\n }\n /**\n * Current stream status information.\n *\n * Mostly useful at the end of input for an empty stream.\n */\n streamInfo() {\n return {\n comment: parsePrelude(this.prelude).comment,\n directives: this.directives,\n errors: this.errors,\n warnings: this.warnings\n };\n }\n /**\n * Compose tokens into documents.\n *\n * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n */\n *compose(tokens, forceDoc = false, endOffset = -1) {\n for (const token of tokens)\n yield* this.next(token);\n yield* this.end(forceDoc, endOffset);\n }\n /** Advance the composer by one CST token. */\n *next(token) {\n if (node_process.env.LOG_STREAM)\n console.dir(token, { depth: null });\n switch (token.type) {\n case 'directive':\n this.directives.add(token.source, (offset, message, warning) => {\n const pos = getErrorPos(token);\n pos[0] += offset;\n this.onError(pos, 'BAD_DIRECTIVE', message, warning);\n });\n this.prelude.push(token.source);\n this.atDirectives = true;\n break;\n case 'document': {\n const doc = composeDoc.composeDoc(this.options, this.directives, token, this.onError);\n if (this.atDirectives && !doc.directives.docStart)\n this.onError(token, 'MISSING_CHAR', 'Missing directives-end/doc-start indicator line');\n this.decorate(doc, false);\n if (this.doc)\n yield this.doc;\n this.doc = doc;\n this.atDirectives = false;\n break;\n }\n case 'byte-order-mark':\n case 'space':\n break;\n case 'comment':\n case 'newline':\n this.prelude.push(token.source);\n break;\n case 'error': {\n const msg = token.source\n ? `${token.message}: ${JSON.stringify(token.source)}`\n : token.message;\n const error = new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg);\n if (this.atDirectives || !this.doc)\n this.errors.push(error);\n else\n this.doc.errors.push(error);\n break;\n }\n case 'doc-end': {\n if (!this.doc) {\n const msg = 'Unexpected doc-end without preceding document';\n this.errors.push(new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg));\n break;\n }\n this.doc.directives.docEnd = true;\n const end = resolveEnd.resolveEnd(token.end, token.offset + token.source.length, this.doc.options.strict, this.onError);\n this.decorate(this.doc, true);\n if (end.comment) {\n const dc = this.doc.comment;\n this.doc.comment = dc ? `${dc}\\n${end.comment}` : end.comment;\n }\n this.doc.range[2] = end.offset;\n break;\n }\n default:\n this.errors.push(new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', `Unsupported token ${token.type}`));\n }\n }\n /**\n * Call at end of input to yield any remaining document.\n *\n * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n */\n *end(forceDoc = false, endOffset = -1) {\n if (this.doc) {\n this.decorate(this.doc, true);\n yield this.doc;\n this.doc = null;\n }\n else if (forceDoc) {\n const opts = Object.assign({ _directives: this.directives }, this.options);\n const doc = new Document.Document(undefined, opts);\n if (this.atDirectives)\n this.onError(endOffset, 'MISSING_CHAR', 'Missing directives-end indicator line');\n doc.range = [0, endOffset, endOffset];\n this.decorate(doc, false);\n yield doc;\n }\n }\n}\n\nexports.Composer = Composer;\n","'use strict';\n\nvar resolveBlockScalar = require('../compose/resolve-block-scalar.js');\nvar resolveFlowScalar = require('../compose/resolve-flow-scalar.js');\nvar errors = require('../errors.js');\nvar stringifyString = require('../stringify/stringifyString.js');\n\nfunction resolveAsScalar(token, strict = true, onError) {\n if (token) {\n const _onError = (pos, code, message) => {\n const offset = typeof pos === 'number' ? pos : Array.isArray(pos) ? pos[0] : pos.offset;\n if (onError)\n onError(offset, code, message);\n else\n throw new errors.YAMLParseError([offset, offset + 1], code, message);\n };\n switch (token.type) {\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return resolveFlowScalar.resolveFlowScalar(token, strict, _onError);\n case 'block-scalar':\n return resolveBlockScalar.resolveBlockScalar({ options: { strict } }, token, _onError);\n }\n }\n return null;\n}\n/**\n * Create a new scalar token with `value`\n *\n * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,\n * as this function does not support any schema operations and won't check for such conflicts.\n *\n * @param value The string representation of the value, which will have its content properly indented.\n * @param context.end Comments and whitespace after the end of the value, or after the block scalar header. If undefined, a newline will be added.\n * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.\n * @param context.indent The indent level of the token.\n * @param context.inFlow Is this scalar within a flow collection? This may affect the resolved type of the token's value.\n * @param context.offset The offset position of the token.\n * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.\n */\nfunction createScalarToken(value, context) {\n const { implicitKey = false, indent, inFlow = false, offset = -1, type = 'PLAIN' } = context;\n const source = stringifyString.stringifyString({ type, value }, {\n implicitKey,\n indent: indent > 0 ? ' '.repeat(indent) : '',\n inFlow,\n options: { blockQuote: true, lineWidth: -1 }\n });\n const end = context.end ?? [\n { type: 'newline', offset: -1, indent, source: '\\n' }\n ];\n switch (source[0]) {\n case '|':\n case '>': {\n const he = source.indexOf('\\n');\n const head = source.substring(0, he);\n const body = source.substring(he + 1) + '\\n';\n const props = [\n { type: 'block-scalar-header', offset, indent, source: head }\n ];\n if (!addEndtoBlockProps(props, end))\n props.push({ type: 'newline', offset: -1, indent, source: '\\n' });\n return { type: 'block-scalar', offset, indent, props, source: body };\n }\n case '\"':\n return { type: 'double-quoted-scalar', offset, indent, source, end };\n case \"'\":\n return { type: 'single-quoted-scalar', offset, indent, source, end };\n default:\n return { type: 'scalar', offset, indent, source, end };\n }\n}\n/**\n * Set the value of `token` to the given string `value`, overwriting any previous contents and type that it may have.\n *\n * Best efforts are made to retain any comments previously associated with the `token`,\n * though all contents within a collection's `items` will be overwritten.\n *\n * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,\n * as this function does not support any schema operations and won't check for such conflicts.\n *\n * @param token Any token. If it does not include an `indent` value, the value will be stringified as if it were an implicit key.\n * @param value The string representation of the value, which will have its content properly indented.\n * @param context.afterKey In most cases, values after a key should have an additional level of indentation.\n * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.\n * @param context.inFlow Being within a flow collection may affect the resolved type of the token's value.\n * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.\n */\nfunction setScalarValue(token, value, context = {}) {\n let { afterKey = false, implicitKey = false, inFlow = false, type } = context;\n let indent = 'indent' in token ? token.indent : null;\n if (afterKey && typeof indent === 'number')\n indent += 2;\n if (!type)\n switch (token.type) {\n case 'single-quoted-scalar':\n type = 'QUOTE_SINGLE';\n break;\n case 'double-quoted-scalar':\n type = 'QUOTE_DOUBLE';\n break;\n case 'block-scalar': {\n const header = token.props[0];\n if (header.type !== 'block-scalar-header')\n throw new Error('Invalid block scalar header');\n type = header.source[0] === '>' ? 'BLOCK_FOLDED' : 'BLOCK_LITERAL';\n break;\n }\n default:\n type = 'PLAIN';\n }\n const source = stringifyString.stringifyString({ type, value }, {\n implicitKey: implicitKey || indent === null,\n indent: indent !== null && indent > 0 ? ' '.repeat(indent) : '',\n inFlow,\n options: { blockQuote: true, lineWidth: -1 }\n });\n switch (source[0]) {\n case '|':\n case '>':\n setBlockScalarValue(token, source);\n break;\n case '\"':\n setFlowScalarValue(token, source, 'double-quoted-scalar');\n break;\n case \"'\":\n setFlowScalarValue(token, source, 'single-quoted-scalar');\n break;\n default:\n setFlowScalarValue(token, source, 'scalar');\n }\n}\nfunction setBlockScalarValue(token, source) {\n const he = source.indexOf('\\n');\n const head = source.substring(0, he);\n const body = source.substring(he + 1) + '\\n';\n if (token.type === 'block-scalar') {\n const header = token.props[0];\n if (header.type !== 'block-scalar-header')\n throw new Error('Invalid block scalar header');\n header.source = head;\n token.source = body;\n }\n else {\n const { offset } = token;\n const indent = 'indent' in token ? token.indent : -1;\n const props = [\n { type: 'block-scalar-header', offset, indent, source: head }\n ];\n if (!addEndtoBlockProps(props, 'end' in token ? token.end : undefined))\n props.push({ type: 'newline', offset: -1, indent, source: '\\n' });\n for (const key of Object.keys(token))\n if (key !== 'type' && key !== 'offset')\n delete token[key];\n Object.assign(token, { type: 'block-scalar', indent, props, source: body });\n }\n}\n/** @returns `true` if last token is a newline */\nfunction addEndtoBlockProps(props, end) {\n if (end)\n for (const st of end)\n switch (st.type) {\n case 'space':\n case 'comment':\n props.push(st);\n break;\n case 'newline':\n props.push(st);\n return true;\n }\n return false;\n}\nfunction setFlowScalarValue(token, source, type) {\n switch (token.type) {\n case 'scalar':\n case 'double-quoted-scalar':\n case 'single-quoted-scalar':\n token.type = type;\n token.source = source;\n break;\n case 'block-scalar': {\n const end = token.props.slice(1);\n let oa = source.length;\n if (token.props[0].type === 'block-scalar-header')\n oa -= token.props[0].source.length;\n for (const tok of end)\n tok.offset += oa;\n delete token.props;\n Object.assign(token, { type, source, end });\n break;\n }\n case 'block-map':\n case 'block-seq': {\n const offset = token.offset + source.length;\n const nl = { type: 'newline', offset, indent: token.indent, source: '\\n' };\n delete token.items;\n Object.assign(token, { type, source, end: [nl] });\n break;\n }\n default: {\n const indent = 'indent' in token ? token.indent : -1;\n const end = 'end' in token && Array.isArray(token.end)\n ? token.end.filter(st => st.type === 'space' ||\n st.type === 'comment' ||\n st.type === 'newline')\n : [];\n for (const key of Object.keys(token))\n if (key !== 'type' && key !== 'offset')\n delete token[key];\n Object.assign(token, { type, indent, source, end });\n }\n }\n}\n\nexports.createScalarToken = createScalarToken;\nexports.resolveAsScalar = resolveAsScalar;\nexports.setScalarValue = setScalarValue;\n","'use strict';\n\n/**\n * Stringify a CST document, token, or collection item\n *\n * Fair warning: This applies no validation whatsoever, and\n * simply concatenates the sources in their logical order.\n */\nconst stringify = (cst) => 'type' in cst ? stringifyToken(cst) : stringifyItem(cst);\nfunction stringifyToken(token) {\n switch (token.type) {\n case 'block-scalar': {\n let res = '';\n for (const tok of token.props)\n res += stringifyToken(tok);\n return res + token.source;\n }\n case 'block-map':\n case 'block-seq': {\n let res = '';\n for (const item of token.items)\n res += stringifyItem(item);\n return res;\n }\n case 'flow-collection': {\n let res = token.start.source;\n for (const item of token.items)\n res += stringifyItem(item);\n for (const st of token.end)\n res += st.source;\n return res;\n }\n case 'document': {\n let res = stringifyItem(token);\n if (token.end)\n for (const st of token.end)\n res += st.source;\n return res;\n }\n default: {\n let res = token.source;\n if ('end' in token && token.end)\n for (const st of token.end)\n res += st.source;\n return res;\n }\n }\n}\nfunction stringifyItem({ start, key, sep, value }) {\n let res = '';\n for (const st of start)\n res += st.source;\n if (key)\n res += stringifyToken(key);\n if (sep)\n for (const st of sep)\n res += st.source;\n if (value)\n res += stringifyToken(value);\n return res;\n}\n\nexports.stringify = stringify;\n","'use strict';\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove item');\n/**\n * Apply a visitor to a CST document or item.\n *\n * Walks through the tree (depth-first) starting from the root, calling a\n * `visitor` function with two arguments when entering each item:\n * - `item`: The current item, which included the following members:\n * - `start: SourceToken[]` – Source tokens before the key or value,\n * possibly including its anchor or tag.\n * - `key?: Token | null` – Set for pair values. May then be `null`, if\n * the key before the `:` separator is empty.\n * - `sep?: SourceToken[]` – Source tokens between the key and the value,\n * which should include the `:` map value indicator if `value` is set.\n * - `value?: Token` – The value of a sequence item, or of a map pair.\n * - `path`: The steps from the root to the current node, as an array of\n * `['key' | 'value', number]` tuples.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this token, continue with\n * next sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current item, then continue with the next one\n * - `number`: Set the index of the next step. This is useful especially if\n * the index of the current token has changed.\n * - `function`: Define the next visitor for this item. After the original\n * visitor is called on item entry, next visitors are called after handling\n * a non-empty `key` and when exiting the item.\n */\nfunction visit(cst, visitor) {\n if ('type' in cst && cst.type === 'document')\n cst = { start: cst.start, value: cst.value };\n _visit(Object.freeze([]), cst, visitor);\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current item */\nvisit.SKIP = SKIP;\n/** Remove the current item */\nvisit.REMOVE = REMOVE;\n/** Find the item at `path` from `cst` as the root */\nvisit.itemAtPath = (cst, path) => {\n let item = cst;\n for (const [field, index] of path) {\n const tok = item?.[field];\n if (tok && 'items' in tok) {\n item = tok.items[index];\n }\n else\n return undefined;\n }\n return item;\n};\n/**\n * Get the immediate parent collection of the item at `path` from `cst` as the root.\n *\n * Throws an error if the collection is not found, which should never happen if the item itself exists.\n */\nvisit.parentCollection = (cst, path) => {\n const parent = visit.itemAtPath(cst, path.slice(0, -1));\n const field = path[path.length - 1][0];\n const coll = parent?.[field];\n if (coll && 'items' in coll)\n return coll;\n throw new Error('Parent collection not found');\n};\nfunction _visit(path, item, visitor) {\n let ctrl = visitor(item, path);\n if (typeof ctrl === 'symbol')\n return ctrl;\n for (const field of ['key', 'value']) {\n const token = item[field];\n if (token && 'items' in token) {\n for (let i = 0; i < token.items.length; ++i) {\n const ci = _visit(Object.freeze(path.concat([[field, i]])), token.items[i], visitor);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n token.items.splice(i, 1);\n i -= 1;\n }\n }\n if (typeof ctrl === 'function' && field === 'key')\n ctrl = ctrl(item, path);\n }\n }\n return typeof ctrl === 'function' ? ctrl(item, path) : ctrl;\n}\n\nexports.visit = visit;\n","'use strict';\n\nvar cstScalar = require('./cst-scalar.js');\nvar cstStringify = require('./cst-stringify.js');\nvar cstVisit = require('./cst-visit.js');\n\n/** The byte order mark */\nconst BOM = '\\u{FEFF}';\n/** Start of doc-mode */\nconst DOCUMENT = '\\x02'; // C0: Start of Text\n/** Unexpected end of flow-mode */\nconst FLOW_END = '\\x18'; // C0: Cancel\n/** Next token is a scalar value */\nconst SCALAR = '\\x1f'; // C0: Unit Separator\n/** @returns `true` if `token` is a flow or block collection */\nconst isCollection = (token) => !!token && 'items' in token;\n/** @returns `true` if `token` is a flow or block scalar; not an alias */\nconst isScalar = (token) => !!token &&\n (token.type === 'scalar' ||\n token.type === 'single-quoted-scalar' ||\n token.type === 'double-quoted-scalar' ||\n token.type === 'block-scalar');\n/* istanbul ignore next */\n/** Get a printable representation of a lexer token */\nfunction prettyToken(token) {\n switch (token) {\n case BOM:\n return '<BOM>';\n case DOCUMENT:\n return '<DOC>';\n case FLOW_END:\n return '<FLOW_END>';\n case SCALAR:\n return '<SCALAR>';\n default:\n return JSON.stringify(token);\n }\n}\n/** Identify the type of a lexer token. May return `null` for unknown tokens. */\nfunction tokenType(source) {\n switch (source) {\n case BOM:\n return 'byte-order-mark';\n case DOCUMENT:\n return 'doc-mode';\n case FLOW_END:\n return 'flow-error-end';\n case SCALAR:\n return 'scalar';\n case '---':\n return 'doc-start';\n case '...':\n return 'doc-end';\n case '':\n case '\\n':\n case '\\r\\n':\n return 'newline';\n case '-':\n return 'seq-item-ind';\n case '?':\n return 'explicit-key-ind';\n case ':':\n return 'map-value-ind';\n case '{':\n return 'flow-map-start';\n case '}':\n return 'flow-map-end';\n case '[':\n return 'flow-seq-start';\n case ']':\n return 'flow-seq-end';\n case ',':\n return 'comma';\n }\n switch (source[0]) {\n case ' ':\n case '\\t':\n return 'space';\n case '#':\n return 'comment';\n case '%':\n return 'directive-line';\n case '*':\n return 'alias';\n case '&':\n return 'anchor';\n case '!':\n return 'tag';\n case \"'\":\n return 'single-quoted-scalar';\n case '\"':\n return 'double-quoted-scalar';\n case '|':\n case '>':\n return 'block-scalar-header';\n }\n return null;\n}\n\nexports.createScalarToken = cstScalar.createScalarToken;\nexports.resolveAsScalar = cstScalar.resolveAsScalar;\nexports.setScalarValue = cstScalar.setScalarValue;\nexports.stringify = cstStringify.stringify;\nexports.visit = cstVisit.visit;\nexports.BOM = BOM;\nexports.DOCUMENT = DOCUMENT;\nexports.FLOW_END = FLOW_END;\nexports.SCALAR = SCALAR;\nexports.isCollection = isCollection;\nexports.isScalar = isScalar;\nexports.prettyToken = prettyToken;\nexports.tokenType = tokenType;\n","'use strict';\n\nvar cst = require('./cst.js');\n\n/*\nSTART -> stream\n\nstream\n directive -> line-end -> stream\n indent + line-end -> stream\n [else] -> line-start\n\nline-end\n comment -> line-end\n newline -> .\n input-end -> END\n\nline-start\n doc-start -> doc\n doc-end -> stream\n [else] -> indent -> block-start\n\nblock-start\n seq-item-start -> block-start\n explicit-key-start -> block-start\n map-value-start -> block-start\n [else] -> doc\n\ndoc\n line-end -> line-start\n spaces -> doc\n anchor -> doc\n tag -> doc\n flow-start -> flow -> doc\n flow-end -> error -> doc\n seq-item-start -> error -> doc\n explicit-key-start -> error -> doc\n map-value-start -> doc\n alias -> doc\n quote-start -> quoted-scalar -> doc\n block-scalar-header -> line-end -> block-scalar(min) -> line-start\n [else] -> plain-scalar(false, min) -> doc\n\nflow\n line-end -> flow\n spaces -> flow\n anchor -> flow\n tag -> flow\n flow-start -> flow -> flow\n flow-end -> .\n seq-item-start -> error -> flow\n explicit-key-start -> flow\n map-value-start -> flow\n alias -> flow\n quote-start -> quoted-scalar -> flow\n comma -> flow\n [else] -> plain-scalar(true, 0) -> flow\n\nquoted-scalar\n quote-end -> .\n [else] -> quoted-scalar\n\nblock-scalar(min)\n newline + peek(indent < min) -> .\n [else] -> block-scalar(min)\n\nplain-scalar(is-flow, min)\n scalar-end(is-flow) -> .\n peek(newline + (indent < min)) -> .\n [else] -> plain-scalar(min)\n*/\nfunction isEmpty(ch) {\n switch (ch) {\n case undefined:\n case ' ':\n case '\\n':\n case '\\r':\n case '\\t':\n return true;\n default:\n return false;\n }\n}\nconst hexDigits = new Set('0123456789ABCDEFabcdef');\nconst tagChars = new Set(\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()\");\nconst flowIndicatorChars = new Set(',[]{}');\nconst invalidAnchorChars = new Set(' ,[]{}\\n\\r\\t');\nconst isNotAnchorChar = (ch) => !ch || invalidAnchorChars.has(ch);\n/**\n * Splits an input string into lexical tokens, i.e. smaller strings that are\n * easily identifiable by `tokens.tokenType()`.\n *\n * Lexing starts always in a \"stream\" context. Incomplete input may be buffered\n * until a complete token can be emitted.\n *\n * In addition to slices of the original input, the following control characters\n * may also be emitted:\n *\n * - `\\x02` (Start of Text): A document starts with the next token\n * - `\\x18` (Cancel): Unexpected end of flow-mode (indicates an error)\n * - `\\x1f` (Unit Separator): Next token is a scalar value\n * - `\\u{FEFF}` (Byte order mark): Emitted separately outside documents\n */\nclass Lexer {\n constructor() {\n /**\n * Flag indicating whether the end of the current buffer marks the end of\n * all input\n */\n this.atEnd = false;\n /**\n * Explicit indent set in block scalar header, as an offset from the current\n * minimum indent, so e.g. set to 1 from a header `|2+`. Set to -1 if not\n * explicitly set.\n */\n this.blockScalarIndent = -1;\n /**\n * Block scalars that include a + (keep) chomping indicator in their header\n * include trailing empty lines, which are otherwise excluded from the\n * scalar's contents.\n */\n this.blockScalarKeep = false;\n /** Current input */\n this.buffer = '';\n /**\n * Flag noting whether the map value indicator : can immediately follow this\n * node within a flow context.\n */\n this.flowKey = false;\n /** Count of surrounding flow collection levels. */\n this.flowLevel = 0;\n /**\n * Minimum level of indentation required for next lines to be parsed as a\n * part of the current scalar value.\n */\n this.indentNext = 0;\n /** Indentation level of the current line. */\n this.indentValue = 0;\n /** Position of the next \\n character. */\n this.lineEndPos = null;\n /** Stores the state of the lexer if reaching the end of incpomplete input */\n this.next = null;\n /** A pointer to `buffer`; the current position of the lexer. */\n this.pos = 0;\n }\n /**\n * Generate YAML tokens from the `source` string. If `incomplete`,\n * a part of the last line may be left as a buffer for the next call.\n *\n * @returns A generator of lexical tokens\n */\n *lex(source, incomplete = false) {\n if (source) {\n if (typeof source !== 'string')\n throw TypeError('source is not a string');\n this.buffer = this.buffer ? this.buffer + source : source;\n this.lineEndPos = null;\n }\n this.atEnd = !incomplete;\n let next = this.next ?? 'stream';\n while (next && (incomplete || this.hasChars(1)))\n next = yield* this.parseNext(next);\n }\n atLineEnd() {\n let i = this.pos;\n let ch = this.buffer[i];\n while (ch === ' ' || ch === '\\t')\n ch = this.buffer[++i];\n if (!ch || ch === '#' || ch === '\\n')\n return true;\n if (ch === '\\r')\n return this.buffer[i + 1] === '\\n';\n return false;\n }\n charAt(n) {\n return this.buffer[this.pos + n];\n }\n continueScalar(offset) {\n let ch = this.buffer[offset];\n if (this.indentNext > 0) {\n let indent = 0;\n while (ch === ' ')\n ch = this.buffer[++indent + offset];\n if (ch === '\\r') {\n const next = this.buffer[indent + offset + 1];\n if (next === '\\n' || (!next && !this.atEnd))\n return offset + indent + 1;\n }\n return ch === '\\n' || indent >= this.indentNext || (!ch && !this.atEnd)\n ? offset + indent\n : -1;\n }\n if (ch === '-' || ch === '.') {\n const dt = this.buffer.substr(offset, 3);\n if ((dt === '---' || dt === '...') && isEmpty(this.buffer[offset + 3]))\n return -1;\n }\n return offset;\n }\n getLine() {\n let end = this.lineEndPos;\n if (typeof end !== 'number' || (end !== -1 && end < this.pos)) {\n end = this.buffer.indexOf('\\n', this.pos);\n this.lineEndPos = end;\n }\n if (end === -1)\n return this.atEnd ? this.buffer.substring(this.pos) : null;\n if (this.buffer[end - 1] === '\\r')\n end -= 1;\n return this.buffer.substring(this.pos, end);\n }\n hasChars(n) {\n return this.pos + n <= this.buffer.length;\n }\n setNext(state) {\n this.buffer = this.buffer.substring(this.pos);\n this.pos = 0;\n this.lineEndPos = null;\n this.next = state;\n return null;\n }\n peek(n) {\n return this.buffer.substr(this.pos, n);\n }\n *parseNext(next) {\n switch (next) {\n case 'stream':\n return yield* this.parseStream();\n case 'line-start':\n return yield* this.parseLineStart();\n case 'block-start':\n return yield* this.parseBlockStart();\n case 'doc':\n return yield* this.parseDocument();\n case 'flow':\n return yield* this.parseFlowCollection();\n case 'quoted-scalar':\n return yield* this.parseQuotedScalar();\n case 'block-scalar':\n return yield* this.parseBlockScalar();\n case 'plain-scalar':\n return yield* this.parsePlainScalar();\n }\n }\n *parseStream() {\n let line = this.getLine();\n if (line === null)\n return this.setNext('stream');\n if (line[0] === cst.BOM) {\n yield* this.pushCount(1);\n line = line.substring(1);\n }\n if (line[0] === '%') {\n let dirEnd = line.length;\n let cs = line.indexOf('#');\n while (cs !== -1) {\n const ch = line[cs - 1];\n if (ch === ' ' || ch === '\\t') {\n dirEnd = cs - 1;\n break;\n }\n else {\n cs = line.indexOf('#', cs + 1);\n }\n }\n while (true) {\n const ch = line[dirEnd - 1];\n if (ch === ' ' || ch === '\\t')\n dirEnd -= 1;\n else\n break;\n }\n const n = (yield* this.pushCount(dirEnd)) + (yield* this.pushSpaces(true));\n yield* this.pushCount(line.length - n); // possible comment\n this.pushNewline();\n return 'stream';\n }\n if (this.atLineEnd()) {\n const sp = yield* this.pushSpaces(true);\n yield* this.pushCount(line.length - sp);\n yield* this.pushNewline();\n return 'stream';\n }\n yield cst.DOCUMENT;\n return yield* this.parseLineStart();\n }\n *parseLineStart() {\n const ch = this.charAt(0);\n if (!ch && !this.atEnd)\n return this.setNext('line-start');\n if (ch === '-' || ch === '.') {\n if (!this.atEnd && !this.hasChars(4))\n return this.setNext('line-start');\n const s = this.peek(3);\n if ((s === '---' || s === '...') && isEmpty(this.charAt(3))) {\n yield* this.pushCount(3);\n this.indentValue = 0;\n this.indentNext = 0;\n return s === '---' ? 'doc' : 'stream';\n }\n }\n this.indentValue = yield* this.pushSpaces(false);\n if (this.indentNext > this.indentValue && !isEmpty(this.charAt(1)))\n this.indentNext = this.indentValue;\n return yield* this.parseBlockStart();\n }\n *parseBlockStart() {\n const [ch0, ch1] = this.peek(2);\n if (!ch1 && !this.atEnd)\n return this.setNext('block-start');\n if ((ch0 === '-' || ch0 === '?' || ch0 === ':') && isEmpty(ch1)) {\n const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true));\n this.indentNext = this.indentValue + 1;\n this.indentValue += n;\n return yield* this.parseBlockStart();\n }\n return 'doc';\n }\n *parseDocument() {\n yield* this.pushSpaces(true);\n const line = this.getLine();\n if (line === null)\n return this.setNext('doc');\n let n = yield* this.pushIndicators();\n switch (line[n]) {\n case '#':\n yield* this.pushCount(line.length - n);\n // fallthrough\n case undefined:\n yield* this.pushNewline();\n return yield* this.parseLineStart();\n case '{':\n case '[':\n yield* this.pushCount(1);\n this.flowKey = false;\n this.flowLevel = 1;\n return 'flow';\n case '}':\n case ']':\n // this is an error\n yield* this.pushCount(1);\n return 'doc';\n case '*':\n yield* this.pushUntil(isNotAnchorChar);\n return 'doc';\n case '\"':\n case \"'\":\n return yield* this.parseQuotedScalar();\n case '|':\n case '>':\n n += yield* this.parseBlockScalarHeader();\n n += yield* this.pushSpaces(true);\n yield* this.pushCount(line.length - n);\n yield* this.pushNewline();\n return yield* this.parseBlockScalar();\n default:\n return yield* this.parsePlainScalar();\n }\n }\n *parseFlowCollection() {\n let nl, sp;\n let indent = -1;\n do {\n nl = yield* this.pushNewline();\n if (nl > 0) {\n sp = yield* this.pushSpaces(false);\n this.indentValue = indent = sp;\n }\n else {\n sp = 0;\n }\n sp += yield* this.pushSpaces(true);\n } while (nl + sp > 0);\n const line = this.getLine();\n if (line === null)\n return this.setNext('flow');\n if ((indent !== -1 && indent < this.indentNext && line[0] !== '#') ||\n (indent === 0 &&\n (line.startsWith('---') || line.startsWith('...')) &&\n isEmpty(line[3]))) {\n // Allowing for the terminal ] or } at the same (rather than greater)\n // indent level as the initial [ or { is technically invalid, but\n // failing here would be surprising to users.\n const atFlowEndMarker = indent === this.indentNext - 1 &&\n this.flowLevel === 1 &&\n (line[0] === ']' || line[0] === '}');\n if (!atFlowEndMarker) {\n // this is an error\n this.flowLevel = 0;\n yield cst.FLOW_END;\n return yield* this.parseLineStart();\n }\n }\n let n = 0;\n while (line[n] === ',') {\n n += yield* this.pushCount(1);\n n += yield* this.pushSpaces(true);\n this.flowKey = false;\n }\n n += yield* this.pushIndicators();\n switch (line[n]) {\n case undefined:\n return 'flow';\n case '#':\n yield* this.pushCount(line.length - n);\n return 'flow';\n case '{':\n case '[':\n yield* this.pushCount(1);\n this.flowKey = false;\n this.flowLevel += 1;\n return 'flow';\n case '}':\n case ']':\n yield* this.pushCount(1);\n this.flowKey = true;\n this.flowLevel -= 1;\n return this.flowLevel ? 'flow' : 'doc';\n case '*':\n yield* this.pushUntil(isNotAnchorChar);\n return 'flow';\n case '\"':\n case \"'\":\n this.flowKey = true;\n return yield* this.parseQuotedScalar();\n case ':': {\n const next = this.charAt(1);\n if (this.flowKey || isEmpty(next) || next === ',') {\n this.flowKey = false;\n yield* this.pushCount(1);\n yield* this.pushSpaces(true);\n return 'flow';\n }\n }\n // fallthrough\n default:\n this.flowKey = false;\n return yield* this.parsePlainScalar();\n }\n }\n *parseQuotedScalar() {\n const quote = this.charAt(0);\n let end = this.buffer.indexOf(quote, this.pos + 1);\n if (quote === \"'\") {\n while (end !== -1 && this.buffer[end + 1] === \"'\")\n end = this.buffer.indexOf(\"'\", end + 2);\n }\n else {\n // double-quote\n while (end !== -1) {\n let n = 0;\n while (this.buffer[end - 1 - n] === '\\\\')\n n += 1;\n if (n % 2 === 0)\n break;\n end = this.buffer.indexOf('\"', end + 1);\n }\n }\n // Only looking for newlines within the quotes\n const qb = this.buffer.substring(0, end);\n let nl = qb.indexOf('\\n', this.pos);\n if (nl !== -1) {\n while (nl !== -1) {\n const cs = this.continueScalar(nl + 1);\n if (cs === -1)\n break;\n nl = qb.indexOf('\\n', cs);\n }\n if (nl !== -1) {\n // this is an error caused by an unexpected unindent\n end = nl - (qb[nl - 1] === '\\r' ? 2 : 1);\n }\n }\n if (end === -1) {\n if (!this.atEnd)\n return this.setNext('quoted-scalar');\n end = this.buffer.length;\n }\n yield* this.pushToIndex(end + 1, false);\n return this.flowLevel ? 'flow' : 'doc';\n }\n *parseBlockScalarHeader() {\n this.blockScalarIndent = -1;\n this.blockScalarKeep = false;\n let i = this.pos;\n while (true) {\n const ch = this.buffer[++i];\n if (ch === '+')\n this.blockScalarKeep = true;\n else if (ch > '0' && ch <= '9')\n this.blockScalarIndent = Number(ch) - 1;\n else if (ch !== '-')\n break;\n }\n return yield* this.pushUntil(ch => isEmpty(ch) || ch === '#');\n }\n *parseBlockScalar() {\n let nl = this.pos - 1; // may be -1 if this.pos === 0\n let indent = 0;\n let ch;\n loop: for (let i = this.pos; (ch = this.buffer[i]); ++i) {\n switch (ch) {\n case ' ':\n indent += 1;\n break;\n case '\\n':\n nl = i;\n indent = 0;\n break;\n case '\\r': {\n const next = this.buffer[i + 1];\n if (!next && !this.atEnd)\n return this.setNext('block-scalar');\n if (next === '\\n')\n break;\n } // fallthrough\n default:\n break loop;\n }\n }\n if (!ch && !this.atEnd)\n return this.setNext('block-scalar');\n if (indent >= this.indentNext) {\n if (this.blockScalarIndent === -1)\n this.indentNext = indent;\n else {\n this.indentNext =\n this.blockScalarIndent + (this.indentNext === 0 ? 1 : this.indentNext);\n }\n do {\n const cs = this.continueScalar(nl + 1);\n if (cs === -1)\n break;\n nl = this.buffer.indexOf('\\n', cs);\n } while (nl !== -1);\n if (nl === -1) {\n if (!this.atEnd)\n return this.setNext('block-scalar');\n nl = this.buffer.length;\n }\n }\n // Trailing insufficiently indented tabs are invalid.\n // To catch that during parsing, we include them in the block scalar value.\n let i = nl + 1;\n ch = this.buffer[i];\n while (ch === ' ')\n ch = this.buffer[++i];\n if (ch === '\\t') {\n while (ch === '\\t' || ch === ' ' || ch === '\\r' || ch === '\\n')\n ch = this.buffer[++i];\n nl = i - 1;\n }\n else if (!this.blockScalarKeep) {\n do {\n let i = nl - 1;\n let ch = this.buffer[i];\n if (ch === '\\r')\n ch = this.buffer[--i];\n const lastChar = i; // Drop the line if last char not more indented\n while (ch === ' ')\n ch = this.buffer[--i];\n if (ch === '\\n' && i >= this.pos && i + 1 + indent > lastChar)\n nl = i;\n else\n break;\n } while (true);\n }\n yield cst.SCALAR;\n yield* this.pushToIndex(nl + 1, true);\n return yield* this.parseLineStart();\n }\n *parsePlainScalar() {\n const inFlow = this.flowLevel > 0;\n let end = this.pos - 1;\n let i = this.pos - 1;\n let ch;\n while ((ch = this.buffer[++i])) {\n if (ch === ':') {\n const next = this.buffer[i + 1];\n if (isEmpty(next) || (inFlow && flowIndicatorChars.has(next)))\n break;\n end = i;\n }\n else if (isEmpty(ch)) {\n let next = this.buffer[i + 1];\n if (ch === '\\r') {\n if (next === '\\n') {\n i += 1;\n ch = '\\n';\n next = this.buffer[i + 1];\n }\n else\n end = i;\n }\n if (next === '#' || (inFlow && flowIndicatorChars.has(next)))\n break;\n if (ch === '\\n') {\n const cs = this.continueScalar(i + 1);\n if (cs === -1)\n break;\n i = Math.max(i, cs - 2); // to advance, but still account for ' #'\n }\n }\n else {\n if (inFlow && flowIndicatorChars.has(ch))\n break;\n end = i;\n }\n }\n if (!ch && !this.atEnd)\n return this.setNext('plain-scalar');\n yield cst.SCALAR;\n yield* this.pushToIndex(end + 1, true);\n return inFlow ? 'flow' : 'doc';\n }\n *pushCount(n) {\n if (n > 0) {\n yield this.buffer.substr(this.pos, n);\n this.pos += n;\n return n;\n }\n return 0;\n }\n *pushToIndex(i, allowEmpty) {\n const s = this.buffer.slice(this.pos, i);\n if (s) {\n yield s;\n this.pos += s.length;\n return s.length;\n }\n else if (allowEmpty)\n yield '';\n return 0;\n }\n *pushIndicators() {\n switch (this.charAt(0)) {\n case '!':\n return ((yield* this.pushTag()) +\n (yield* this.pushSpaces(true)) +\n (yield* this.pushIndicators()));\n case '&':\n return ((yield* this.pushUntil(isNotAnchorChar)) +\n (yield* this.pushSpaces(true)) +\n (yield* this.pushIndicators()));\n case '-': // this is an error\n case '?': // this is an error outside flow collections\n case ':': {\n const inFlow = this.flowLevel > 0;\n const ch1 = this.charAt(1);\n if (isEmpty(ch1) || (inFlow && flowIndicatorChars.has(ch1))) {\n if (!inFlow)\n this.indentNext = this.indentValue + 1;\n else if (this.flowKey)\n this.flowKey = false;\n return ((yield* this.pushCount(1)) +\n (yield* this.pushSpaces(true)) +\n (yield* this.pushIndicators()));\n }\n }\n }\n return 0;\n }\n *pushTag() {\n if (this.charAt(1) === '<') {\n let i = this.pos + 2;\n let ch = this.buffer[i];\n while (!isEmpty(ch) && ch !== '>')\n ch = this.buffer[++i];\n return yield* this.pushToIndex(ch === '>' ? i + 1 : i, false);\n }\n else {\n let i = this.pos + 1;\n let ch = this.buffer[i];\n while (ch) {\n if (tagChars.has(ch))\n ch = this.buffer[++i];\n else if (ch === '%' &&\n hexDigits.has(this.buffer[i + 1]) &&\n hexDigits.has(this.buffer[i + 2])) {\n ch = this.buffer[(i += 3)];\n }\n else\n break;\n }\n return yield* this.pushToIndex(i, false);\n }\n }\n *pushNewline() {\n const ch = this.buffer[this.pos];\n if (ch === '\\n')\n return yield* this.pushCount(1);\n else if (ch === '\\r' && this.charAt(1) === '\\n')\n return yield* this.pushCount(2);\n else\n return 0;\n }\n *pushSpaces(allowTabs) {\n let i = this.pos - 1;\n let ch;\n do {\n ch = this.buffer[++i];\n } while (ch === ' ' || (allowTabs && ch === '\\t'));\n const n = i - this.pos;\n if (n > 0) {\n yield this.buffer.substr(this.pos, n);\n this.pos = i;\n }\n return n;\n }\n *pushUntil(test) {\n let i = this.pos;\n let ch = this.buffer[i];\n while (!test(ch))\n ch = this.buffer[++i];\n return yield* this.pushToIndex(i, false);\n }\n}\n\nexports.Lexer = Lexer;\n","'use strict';\n\n/**\n * Tracks newlines during parsing in order to provide an efficient API for\n * determining the one-indexed `{ line, col }` position for any offset\n * within the input.\n */\nclass LineCounter {\n constructor() {\n this.lineStarts = [];\n /**\n * Should be called in ascending order. Otherwise, call\n * `lineCounter.lineStarts.sort()` before calling `linePos()`.\n */\n this.addNewLine = (offset) => this.lineStarts.push(offset);\n /**\n * Performs a binary search and returns the 1-indexed { line, col }\n * position of `offset`. If `line === 0`, `addNewLine` has never been\n * called or `offset` is before the first known newline.\n */\n this.linePos = (offset) => {\n let low = 0;\n let high = this.lineStarts.length;\n while (low < high) {\n const mid = (low + high) >> 1; // Math.floor((low + high) / 2)\n if (this.lineStarts[mid] < offset)\n low = mid + 1;\n else\n high = mid;\n }\n if (this.lineStarts[low] === offset)\n return { line: low + 1, col: 1 };\n if (low === 0)\n return { line: 0, col: offset };\n const start = this.lineStarts[low - 1];\n return { line: low, col: offset - start + 1 };\n };\n }\n}\n\nexports.LineCounter = LineCounter;\n","'use strict';\n\nvar node_process = require('process');\nvar cst = require('./cst.js');\nvar lexer = require('./lexer.js');\n\nfunction includesToken(list, type) {\n for (let i = 0; i < list.length; ++i)\n if (list[i].type === type)\n return true;\n return false;\n}\nfunction findNonEmptyIndex(list) {\n for (let i = 0; i < list.length; ++i) {\n switch (list[i].type) {\n case 'space':\n case 'comment':\n case 'newline':\n break;\n default:\n return i;\n }\n }\n return -1;\n}\nfunction isFlowToken(token) {\n switch (token?.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n case 'flow-collection':\n return true;\n default:\n return false;\n }\n}\nfunction getPrevProps(parent) {\n switch (parent.type) {\n case 'document':\n return parent.start;\n case 'block-map': {\n const it = parent.items[parent.items.length - 1];\n return it.sep ?? it.start;\n }\n case 'block-seq':\n return parent.items[parent.items.length - 1].start;\n /* istanbul ignore next should not happen */\n default:\n return [];\n }\n}\n/** Note: May modify input array */\nfunction getFirstKeyStartProps(prev) {\n if (prev.length === 0)\n return [];\n let i = prev.length;\n loop: while (--i >= 0) {\n switch (prev[i].type) {\n case 'doc-start':\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n case 'newline':\n break loop;\n }\n }\n while (prev[++i]?.type === 'space') {\n /* loop */\n }\n return prev.splice(i, prev.length);\n}\nfunction fixFlowSeqItems(fc) {\n if (fc.start.type === 'flow-seq-start') {\n for (const it of fc.items) {\n if (it.sep &&\n !it.value &&\n !includesToken(it.start, 'explicit-key-ind') &&\n !includesToken(it.sep, 'map-value-ind')) {\n if (it.key)\n it.value = it.key;\n delete it.key;\n if (isFlowToken(it.value)) {\n if (it.value.end)\n Array.prototype.push.apply(it.value.end, it.sep);\n else\n it.value.end = it.sep;\n }\n else\n Array.prototype.push.apply(it.start, it.sep);\n delete it.sep;\n }\n }\n }\n}\n/**\n * A YAML concrete syntax tree (CST) parser\n *\n * ```ts\n * const src: string = ...\n * for (const token of new Parser().parse(src)) {\n * // token: Token\n * }\n * ```\n *\n * To use the parser with a user-provided lexer:\n *\n * ```ts\n * function* parse(source: string, lexer: Lexer) {\n * const parser = new Parser()\n * for (const lexeme of lexer.lex(source))\n * yield* parser.next(lexeme)\n * yield* parser.end()\n * }\n *\n * const src: string = ...\n * const lexer = new Lexer()\n * for (const token of parse(src, lexer)) {\n * // token: Token\n * }\n * ```\n */\nclass Parser {\n /**\n * @param onNewLine - If defined, called separately with the start position of\n * each new line (in `parse()`, including the start of input).\n */\n constructor(onNewLine) {\n /** If true, space and sequence indicators count as indentation */\n this.atNewLine = true;\n /** If true, next token is a scalar value */\n this.atScalar = false;\n /** Current indentation level */\n this.indent = 0;\n /** Current offset since the start of parsing */\n this.offset = 0;\n /** On the same line with a block map key */\n this.onKeyLine = false;\n /** Top indicates the node that's currently being built */\n this.stack = [];\n /** The source of the current token, set in parse() */\n this.source = '';\n /** The type of the current token, set in parse() */\n this.type = '';\n // Must be defined after `next()`\n this.lexer = new lexer.Lexer();\n this.onNewLine = onNewLine;\n }\n /**\n * Parse `source` as a YAML stream.\n * If `incomplete`, a part of the last line may be left as a buffer for the next call.\n *\n * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens.\n *\n * @returns A generator of tokens representing each directive, document, and other structure.\n */\n *parse(source, incomplete = false) {\n if (this.onNewLine && this.offset === 0)\n this.onNewLine(0);\n for (const lexeme of this.lexer.lex(source, incomplete))\n yield* this.next(lexeme);\n if (!incomplete)\n yield* this.end();\n }\n /**\n * Advance the parser by the `source` of one lexical token.\n */\n *next(source) {\n this.source = source;\n if (node_process.env.LOG_TOKENS)\n console.log('|', cst.prettyToken(source));\n if (this.atScalar) {\n this.atScalar = false;\n yield* this.step();\n this.offset += source.length;\n return;\n }\n const type = cst.tokenType(source);\n if (!type) {\n const message = `Not a YAML token: ${source}`;\n yield* this.pop({ type: 'error', offset: this.offset, message, source });\n this.offset += source.length;\n }\n else if (type === 'scalar') {\n this.atNewLine = false;\n this.atScalar = true;\n this.type = 'scalar';\n }\n else {\n this.type = type;\n yield* this.step();\n switch (type) {\n case 'newline':\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine)\n this.onNewLine(this.offset + source.length);\n break;\n case 'space':\n if (this.atNewLine && source[0] === ' ')\n this.indent += source.length;\n break;\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n if (this.atNewLine)\n this.indent += source.length;\n break;\n case 'doc-mode':\n case 'flow-error-end':\n return;\n default:\n this.atNewLine = false;\n }\n this.offset += source.length;\n }\n }\n /** Call at end of input to push out any remaining constructions */\n *end() {\n while (this.stack.length > 0)\n yield* this.pop();\n }\n get sourceToken() {\n const st = {\n type: this.type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n return st;\n }\n *step() {\n const top = this.peek(1);\n if (this.type === 'doc-end' && top?.type !== 'doc-end') {\n while (this.stack.length > 0)\n yield* this.pop();\n this.stack.push({\n type: 'doc-end',\n offset: this.offset,\n source: this.source\n });\n return;\n }\n if (!top)\n return yield* this.stream();\n switch (top.type) {\n case 'document':\n return yield* this.document(top);\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return yield* this.scalar(top);\n case 'block-scalar':\n return yield* this.blockScalar(top);\n case 'block-map':\n return yield* this.blockMap(top);\n case 'block-seq':\n return yield* this.blockSequence(top);\n case 'flow-collection':\n return yield* this.flowCollection(top);\n case 'doc-end':\n return yield* this.documentEnd(top);\n }\n /* istanbul ignore next should not happen */\n yield* this.pop();\n }\n peek(n) {\n return this.stack[this.stack.length - n];\n }\n *pop(error) {\n const token = error ?? this.stack.pop();\n /* istanbul ignore if should not happen */\n if (!token) {\n const message = 'Tried to pop an empty stack';\n yield { type: 'error', offset: this.offset, source: '', message };\n }\n else if (this.stack.length === 0) {\n yield token;\n }\n else {\n const top = this.peek(1);\n if (token.type === 'block-scalar') {\n // Block scalars use their parent rather than header indent\n token.indent = 'indent' in top ? top.indent : 0;\n }\n else if (token.type === 'flow-collection' && top.type === 'document') {\n // Ignore all indent for top-level flow collections\n token.indent = 0;\n }\n if (token.type === 'flow-collection')\n fixFlowSeqItems(token);\n switch (top.type) {\n case 'document':\n top.value = token;\n break;\n case 'block-scalar':\n top.props.push(token); // error\n break;\n case 'block-map': {\n const it = top.items[top.items.length - 1];\n if (it.value) {\n top.items.push({ start: [], key: token, sep: [] });\n this.onKeyLine = true;\n return;\n }\n else if (it.sep) {\n it.value = token;\n }\n else {\n Object.assign(it, { key: token, sep: [] });\n this.onKeyLine = !it.explicitKey;\n return;\n }\n break;\n }\n case 'block-seq': {\n const it = top.items[top.items.length - 1];\n if (it.value)\n top.items.push({ start: [], value: token });\n else\n it.value = token;\n break;\n }\n case 'flow-collection': {\n const it = top.items[top.items.length - 1];\n if (!it || it.value)\n top.items.push({ start: [], key: token, sep: [] });\n else if (it.sep)\n it.value = token;\n else\n Object.assign(it, { key: token, sep: [] });\n return;\n }\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.pop(token);\n }\n if ((top.type === 'document' ||\n top.type === 'block-map' ||\n top.type === 'block-seq') &&\n (token.type === 'block-map' || token.type === 'block-seq')) {\n const last = token.items[token.items.length - 1];\n if (last &&\n !last.sep &&\n !last.value &&\n last.start.length > 0 &&\n findNonEmptyIndex(last.start) === -1 &&\n (token.indent === 0 ||\n last.start.every(st => st.type !== 'comment' || st.indent < token.indent))) {\n if (top.type === 'document')\n top.end = last.start;\n else\n top.items.push({ start: last.start });\n token.items.splice(-1, 1);\n }\n }\n }\n }\n *stream() {\n switch (this.type) {\n case 'directive-line':\n yield { type: 'directive', offset: this.offset, source: this.source };\n return;\n case 'byte-order-mark':\n case 'space':\n case 'comment':\n case 'newline':\n yield this.sourceToken;\n return;\n case 'doc-mode':\n case 'doc-start': {\n const doc = {\n type: 'document',\n offset: this.offset,\n start: []\n };\n if (this.type === 'doc-start')\n doc.start.push(this.sourceToken);\n this.stack.push(doc);\n return;\n }\n }\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML stream`,\n source: this.source\n };\n }\n *document(doc) {\n if (doc.value)\n return yield* this.lineEnd(doc);\n switch (this.type) {\n case 'doc-start': {\n if (findNonEmptyIndex(doc.start) !== -1) {\n yield* this.pop();\n yield* this.step();\n }\n else\n doc.start.push(this.sourceToken);\n return;\n }\n case 'anchor':\n case 'tag':\n case 'space':\n case 'comment':\n case 'newline':\n doc.start.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(doc);\n if (bv)\n this.stack.push(bv);\n else {\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML document`,\n source: this.source\n };\n }\n }\n *scalar(scalar) {\n if (this.type === 'map-value-ind') {\n const prev = getPrevProps(this.peek(2));\n const start = getFirstKeyStartProps(prev);\n let sep;\n if (scalar.end) {\n sep = scalar.end;\n sep.push(this.sourceToken);\n delete scalar.end;\n }\n else\n sep = [this.sourceToken];\n const map = {\n type: 'block-map',\n offset: scalar.offset,\n indent: scalar.indent,\n items: [{ start, key: scalar, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else\n yield* this.lineEnd(scalar);\n }\n *blockScalar(scalar) {\n switch (this.type) {\n case 'space':\n case 'comment':\n case 'newline':\n scalar.props.push(this.sourceToken);\n return;\n case 'scalar':\n scalar.source = this.source;\n // block-scalar source includes trailing newline\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n yield* this.pop();\n break;\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.step();\n }\n }\n *blockMap(map) {\n const it = map.items[map.items.length - 1];\n // it.sep is true-ish if pair already has key or : separator\n switch (this.type) {\n case 'newline':\n this.onKeyLine = false;\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'space':\n case 'comment':\n if (it.value) {\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n if (this.atIndentedComment(it.start, map.indent)) {\n const prev = map.items[map.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n Array.prototype.push.apply(end, it.start);\n end.push(this.sourceToken);\n map.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n }\n if (this.indent >= map.indent) {\n const atMapIndent = !this.onKeyLine && this.indent === map.indent;\n const atNextItem = atMapIndent &&\n (it.sep || it.explicitKey) &&\n this.type !== 'seq-item-ind';\n // For empty nodes, assign newline-separated not indented empty tokens to following node\n let start = [];\n if (atNextItem && it.sep && !it.value) {\n const nl = [];\n for (let i = 0; i < it.sep.length; ++i) {\n const st = it.sep[i];\n switch (st.type) {\n case 'newline':\n nl.push(i);\n break;\n case 'space':\n break;\n case 'comment':\n if (st.indent > map.indent)\n nl.length = 0;\n break;\n default:\n nl.length = 0;\n }\n }\n if (nl.length >= 2)\n start = it.sep.splice(nl[1]);\n }\n switch (this.type) {\n case 'anchor':\n case 'tag':\n if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'explicit-key-ind':\n if (!it.sep && !it.explicitKey) {\n it.start.push(this.sourceToken);\n it.explicitKey = true;\n }\n else if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start, explicitKey: true });\n }\n else {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken], explicitKey: true }]\n });\n }\n this.onKeyLine = true;\n return;\n case 'map-value-ind':\n if (it.explicitKey) {\n if (!it.sep) {\n if (includesToken(it.start, 'newline')) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else {\n const start = getFirstKeyStartProps(it.start);\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n }\n else if (it.value) {\n map.items.push({ start: [], key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n else if (isFlowToken(it.key) &&\n !includesToken(it.sep, 'newline')) {\n const start = getFirstKeyStartProps(it.start);\n const key = it.key;\n const sep = it.sep;\n sep.push(this.sourceToken);\n // @ts-expect-error type guard is wrong here\n delete it.key;\n // @ts-expect-error type guard is wrong here\n delete it.sep;\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key, sep }]\n });\n }\n else if (start.length > 0) {\n // Not actually at next item\n it.sep = it.sep.concat(start, this.sourceToken);\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n else {\n if (!it.sep) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else if (it.value || atNextItem) {\n map.items.push({ start, key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [], key: null, sep: [this.sourceToken] }]\n });\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n this.onKeyLine = true;\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (atNextItem || it.value) {\n map.items.push({ start, key: fs, sep: [] });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n this.stack.push(fs);\n }\n else {\n Object.assign(it, { key: fs, sep: [] });\n this.onKeyLine = true;\n }\n return;\n }\n default: {\n const bv = this.startBlockValue(map);\n if (bv) {\n if (bv.type === 'block-seq') {\n if (!it.explicitKey &&\n it.sep &&\n !includesToken(it.sep, 'newline')) {\n yield* this.pop({\n type: 'error',\n offset: this.offset,\n message: 'Unexpected block-seq-ind on same line with key',\n source: this.source\n });\n return;\n }\n }\n else if (atMapIndent) {\n map.items.push({ start });\n }\n this.stack.push(bv);\n return;\n }\n }\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *blockSequence(seq) {\n const it = seq.items[seq.items.length - 1];\n switch (this.type) {\n case 'newline':\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n seq.items.push({ start: [this.sourceToken] });\n }\n else\n it.start.push(this.sourceToken);\n return;\n case 'space':\n case 'comment':\n if (it.value)\n seq.items.push({ start: [this.sourceToken] });\n else {\n if (this.atIndentedComment(it.start, seq.indent)) {\n const prev = seq.items[seq.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n Array.prototype.push.apply(end, it.start);\n end.push(this.sourceToken);\n seq.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n case 'anchor':\n case 'tag':\n if (it.value || this.indent <= seq.indent)\n break;\n it.start.push(this.sourceToken);\n return;\n case 'seq-item-ind':\n if (this.indent !== seq.indent)\n break;\n if (it.value || includesToken(it.start, 'seq-item-ind'))\n seq.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n }\n if (this.indent > seq.indent) {\n const bv = this.startBlockValue(seq);\n if (bv) {\n this.stack.push(bv);\n return;\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *flowCollection(fc) {\n const it = fc.items[fc.items.length - 1];\n if (this.type === 'flow-error-end') {\n let top;\n do {\n yield* this.pop();\n top = this.peek(1);\n } while (top?.type === 'flow-collection');\n }\n else if (fc.end.length === 0) {\n switch (this.type) {\n case 'comma':\n case 'explicit-key-ind':\n if (!it || it.sep)\n fc.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n case 'map-value-ind':\n if (!it || it.value)\n fc.items.push({ start: [], key: null, sep: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n return;\n case 'space':\n case 'comment':\n case 'newline':\n case 'anchor':\n case 'tag':\n if (!it || it.value)\n fc.items.push({ start: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n it.start.push(this.sourceToken);\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (!it || it.value)\n fc.items.push({ start: [], key: fs, sep: [] });\n else if (it.sep)\n this.stack.push(fs);\n else\n Object.assign(it, { key: fs, sep: [] });\n return;\n }\n case 'flow-map-end':\n case 'flow-seq-end':\n fc.end.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(fc);\n /* istanbul ignore else should not happen */\n if (bv)\n this.stack.push(bv);\n else {\n yield* this.pop();\n yield* this.step();\n }\n }\n else {\n const parent = this.peek(2);\n if (parent.type === 'block-map' &&\n ((this.type === 'map-value-ind' && parent.indent === fc.indent) ||\n (this.type === 'newline' &&\n !parent.items[parent.items.length - 1].sep))) {\n yield* this.pop();\n yield* this.step();\n }\n else if (this.type === 'map-value-ind' &&\n parent.type !== 'flow-collection') {\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n fixFlowSeqItems(fc);\n const sep = fc.end.splice(1, fc.end.length);\n sep.push(this.sourceToken);\n const map = {\n type: 'block-map',\n offset: fc.offset,\n indent: fc.indent,\n items: [{ start, key: fc, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else {\n yield* this.lineEnd(fc);\n }\n }\n }\n flowScalar(type) {\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n return {\n type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n }\n startBlockValue(parent) {\n switch (this.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return this.flowScalar(this.type);\n case 'block-scalar-header':\n return {\n type: 'block-scalar',\n offset: this.offset,\n indent: this.indent,\n props: [this.sourceToken],\n source: ''\n };\n case 'flow-map-start':\n case 'flow-seq-start':\n return {\n type: 'flow-collection',\n offset: this.offset,\n indent: this.indent,\n start: this.sourceToken,\n items: [],\n end: []\n };\n case 'seq-item-ind':\n return {\n type: 'block-seq',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken] }]\n };\n case 'explicit-key-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n start.push(this.sourceToken);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, explicitKey: true }]\n };\n }\n case 'map-value-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n };\n }\n }\n return null;\n }\n atIndentedComment(start, indent) {\n if (this.type !== 'comment')\n return false;\n if (this.indent <= indent)\n return false;\n return start.every(st => st.type === 'newline' || st.type === 'space');\n }\n *documentEnd(docEnd) {\n if (this.type !== 'doc-mode') {\n if (docEnd.end)\n docEnd.end.push(this.sourceToken);\n else\n docEnd.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n *lineEnd(token) {\n switch (this.type) {\n case 'comma':\n case 'doc-start':\n case 'doc-end':\n case 'flow-seq-end':\n case 'flow-map-end':\n case 'map-value-ind':\n yield* this.pop();\n yield* this.step();\n break;\n case 'newline':\n this.onKeyLine = false;\n // fallthrough\n case 'space':\n case 'comment':\n default:\n // all other values are errors\n if (token.end)\n token.end.push(this.sourceToken);\n else\n token.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n}\n\nexports.Parser = Parser;\n","'use strict';\n\nvar composer = require('./compose/composer.js');\nvar Document = require('./doc/Document.js');\nvar errors = require('./errors.js');\nvar log = require('./log.js');\nvar identity = require('./nodes/identity.js');\nvar lineCounter = require('./parse/line-counter.js');\nvar parser = require('./parse/parser.js');\n\nfunction parseOptions(options) {\n const prettyErrors = options.prettyErrors !== false;\n const lineCounter$1 = options.lineCounter || (prettyErrors && new lineCounter.LineCounter()) || null;\n return { lineCounter: lineCounter$1, prettyErrors };\n}\n/**\n * Parse the input as a stream of YAML documents.\n *\n * Documents should be separated from each other by `...` or `---` marker lines.\n *\n * @returns If an empty `docs` array is returned, it will be of type\n * EmptyStream and contain additional stream information. In\n * TypeScript, you should use `'empty' in docs` as a type guard for it.\n */\nfunction parseAllDocuments(source, options = {}) {\n const { lineCounter, prettyErrors } = parseOptions(options);\n const parser$1 = new parser.Parser(lineCounter?.addNewLine);\n const composer$1 = new composer.Composer(options);\n const docs = Array.from(composer$1.compose(parser$1.parse(source)));\n if (prettyErrors && lineCounter)\n for (const doc of docs) {\n doc.errors.forEach(errors.prettifyError(source, lineCounter));\n doc.warnings.forEach(errors.prettifyError(source, lineCounter));\n }\n if (docs.length > 0)\n return docs;\n return Object.assign([], { empty: true }, composer$1.streamInfo());\n}\n/** Parse an input string into a single YAML.Document */\nfunction parseDocument(source, options = {}) {\n const { lineCounter, prettyErrors } = parseOptions(options);\n const parser$1 = new parser.Parser(lineCounter?.addNewLine);\n const composer$1 = new composer.Composer(options);\n // `doc` is always set by compose.end(true) at the very latest\n let doc = null;\n for (const _doc of composer$1.compose(parser$1.parse(source), true, source.length)) {\n if (!doc)\n doc = _doc;\n else if (doc.options.logLevel !== 'silent') {\n doc.errors.push(new errors.YAMLParseError(_doc.range.slice(0, 2), 'MULTIPLE_DOCS', 'Source contains multiple documents; please use YAML.parseAllDocuments()'));\n break;\n }\n }\n if (prettyErrors && lineCounter) {\n doc.errors.forEach(errors.prettifyError(source, lineCounter));\n doc.warnings.forEach(errors.prettifyError(source, lineCounter));\n }\n return doc;\n}\nfunction parse(src, reviver, options) {\n let _reviver = undefined;\n if (typeof reviver === 'function') {\n _reviver = reviver;\n }\n else if (options === undefined && reviver && typeof reviver === 'object') {\n options = reviver;\n }\n const doc = parseDocument(src, options);\n if (!doc)\n return null;\n doc.warnings.forEach(warning => log.warn(doc.options.logLevel, warning));\n if (doc.errors.length > 0) {\n if (doc.options.logLevel !== 'silent')\n throw doc.errors[0];\n else\n doc.errors = [];\n }\n return doc.toJS(Object.assign({ reviver: _reviver }, options));\n}\nfunction stringify(value, replacer, options) {\n let _replacer = null;\n if (typeof replacer === 'function' || Array.isArray(replacer)) {\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n }\n if (typeof options === 'string')\n options = options.length;\n if (typeof options === 'number') {\n const indent = Math.round(options);\n options = indent < 1 ? undefined : indent > 8 ? { indent: 8 } : { indent };\n }\n if (value === undefined) {\n const { keepUndefined } = options ?? replacer ?? {};\n if (!keepUndefined)\n return undefined;\n }\n if (identity.isDocument(value) && !_replacer)\n return value.toString(options);\n return new Document.Document(value, _replacer, options).toString(options);\n}\n\nexports.parse = parse;\nexports.parseAllDocuments = parseAllDocuments;\nexports.parseDocument = parseDocument;\nexports.stringify = stringify;\n","'use strict';\n\nvar composer = require('./compose/composer.js');\nvar Document = require('./doc/Document.js');\nvar Schema = require('./schema/Schema.js');\nvar errors = require('./errors.js');\nvar Alias = require('./nodes/Alias.js');\nvar identity = require('./nodes/identity.js');\nvar Pair = require('./nodes/Pair.js');\nvar Scalar = require('./nodes/Scalar.js');\nvar YAMLMap = require('./nodes/YAMLMap.js');\nvar YAMLSeq = require('./nodes/YAMLSeq.js');\nvar cst = require('./parse/cst.js');\nvar lexer = require('./parse/lexer.js');\nvar lineCounter = require('./parse/line-counter.js');\nvar parser = require('./parse/parser.js');\nvar publicApi = require('./public-api.js');\nvar visit = require('./visit.js');\n\n\n\nexports.Composer = composer.Composer;\nexports.Document = Document.Document;\nexports.Schema = Schema.Schema;\nexports.YAMLError = errors.YAMLError;\nexports.YAMLParseError = errors.YAMLParseError;\nexports.YAMLWarning = errors.YAMLWarning;\nexports.Alias = Alias.Alias;\nexports.isAlias = identity.isAlias;\nexports.isCollection = identity.isCollection;\nexports.isDocument = identity.isDocument;\nexports.isMap = identity.isMap;\nexports.isNode = identity.isNode;\nexports.isPair = identity.isPair;\nexports.isScalar = identity.isScalar;\nexports.isSeq = identity.isSeq;\nexports.Pair = Pair.Pair;\nexports.Scalar = Scalar.Scalar;\nexports.YAMLMap = YAMLMap.YAMLMap;\nexports.YAMLSeq = YAMLSeq.YAMLSeq;\nexports.CST = cst;\nexports.Lexer = lexer.Lexer;\nexports.LineCounter = lineCounter.LineCounter;\nexports.Parser = parser.Parser;\nexports.parse = publicApi.parse;\nexports.parseAllDocuments = publicApi.parseAllDocuments;\nexports.parseDocument = publicApi.parseDocument;\nexports.stringify = publicApi.stringify;\nexports.visit = visit.visit;\nexports.visitAsync = visit.visitAsync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.splitWhen = exports.flatten = void 0;\nfunction flatten(items) {\n return items.reduce((collection, item) => [].concat(collection, item), []);\n}\nexports.flatten = flatten;\nfunction splitWhen(items, predicate) {\n const result = [[]];\n let groupIndex = 0;\n for (const item of items) {\n if (predicate(item)) {\n groupIndex++;\n result[groupIndex] = [];\n }\n else {\n result[groupIndex].push(item);\n }\n }\n return result;\n}\nexports.splitWhen = splitWhen;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isEnoentCodeError = void 0;\nfunction isEnoentCodeError(error) {\n return error.code === 'ENOENT';\n}\nexports.isEnoentCodeError = isEnoentCodeError;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createDirentFromStats = void 0;\nclass DirentFromStats {\n constructor(name, stats) {\n this.name = name;\n this.isBlockDevice = stats.isBlockDevice.bind(stats);\n this.isCharacterDevice = stats.isCharacterDevice.bind(stats);\n this.isDirectory = stats.isDirectory.bind(stats);\n this.isFIFO = stats.isFIFO.bind(stats);\n this.isFile = stats.isFile.bind(stats);\n this.isSocket = stats.isSocket.bind(stats);\n this.isSymbolicLink = stats.isSymbolicLink.bind(stats);\n }\n}\nfunction createDirentFromStats(name, stats) {\n return new DirentFromStats(name, stats);\n}\nexports.createDirentFromStats = createDirentFromStats;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertPosixPathToPattern = exports.convertWindowsPathToPattern = exports.convertPathToPattern = exports.escapePosixPath = exports.escapeWindowsPath = exports.escape = exports.removeLeadingDotSegment = exports.makeAbsolute = exports.unixify = void 0;\nconst os = require(\"os\");\nconst path = require(\"path\");\nconst IS_WINDOWS_PLATFORM = os.platform() === 'win32';\nconst LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2; // ./ or .\\\\\n/**\n * All non-escaped special characters.\n * Posix: ()*?[]{|}, !+@ before (, ! at the beginning, \\\\ before non-special characters.\n * Windows: (){}[], !+@ before (, ! at the beginning.\n */\nconst POSIX_UNESCAPED_GLOB_SYMBOLS_RE = /(\\\\?)([()*?[\\]{|}]|^!|[!+@](?=\\()|\\\\(?![!()*+?@[\\]{|}]))/g;\nconst WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE = /(\\\\?)([()[\\]{}]|^!|[!+@](?=\\())/g;\n/**\n * The device path (\\\\.\\ or \\\\?\\).\n * https://learn.microsoft.com/en-us/dotnet/standard/io/file-path-formats#dos-device-paths\n */\nconst DOS_DEVICE_PATH_RE = /^\\\\\\\\([.?])/;\n/**\n * All backslashes except those escaping special characters.\n * Windows: !()+@{}\n * https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file#naming-conventions\n */\nconst WINDOWS_BACKSLASHES_RE = /\\\\(?![!()+@[\\]{}])/g;\n/**\n * Designed to work only with simple paths: `dir\\\\file`.\n */\nfunction unixify(filepath) {\n return filepath.replace(/\\\\/g, '/');\n}\nexports.unixify = unixify;\nfunction makeAbsolute(cwd, filepath) {\n return path.resolve(cwd, filepath);\n}\nexports.makeAbsolute = makeAbsolute;\nfunction removeLeadingDotSegment(entry) {\n // We do not use `startsWith` because this is 10x slower than current implementation for some cases.\n // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with\n if (entry.charAt(0) === '.') {\n const secondCharactery = entry.charAt(1);\n if (secondCharactery === '/' || secondCharactery === '\\\\') {\n return entry.slice(LEADING_DOT_SEGMENT_CHARACTERS_COUNT);\n }\n }\n return entry;\n}\nexports.removeLeadingDotSegment = removeLeadingDotSegment;\nexports.escape = IS_WINDOWS_PLATFORM ? escapeWindowsPath : escapePosixPath;\nfunction escapeWindowsPath(pattern) {\n return pattern.replace(WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE, '\\\\$2');\n}\nexports.escapeWindowsPath = escapeWindowsPath;\nfunction escapePosixPath(pattern) {\n return pattern.replace(POSIX_UNESCAPED_GLOB_SYMBOLS_RE, '\\\\$2');\n}\nexports.escapePosixPath = escapePosixPath;\nexports.convertPathToPattern = IS_WINDOWS_PLATFORM ? convertWindowsPathToPattern : convertPosixPathToPattern;\nfunction convertWindowsPathToPattern(filepath) {\n return escapeWindowsPath(filepath)\n .replace(DOS_DEVICE_PATH_RE, '//$1')\n .replace(WINDOWS_BACKSLASHES_RE, '/');\n}\nexports.convertWindowsPathToPattern = convertWindowsPathToPattern;\nfunction convertPosixPathToPattern(filepath) {\n return escapePosixPath(filepath);\n}\nexports.convertPosixPathToPattern = convertPosixPathToPattern;\n","/*!\n * is-extglob <https://github.com/jonschlinkert/is-extglob>\n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\nmodule.exports = function isExtglob(str) {\n if (typeof str !== 'string' || str === '') {\n return false;\n }\n\n var match;\n while ((match = /(\\\\).|([@?!+*]\\(.*\\))/g.exec(str))) {\n if (match[2]) return true;\n str = str.slice(match.index + match[0].length);\n }\n\n return false;\n};\n","/*!\n * is-glob <https://github.com/jonschlinkert/is-glob>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nvar isExtglob = require('is-extglob');\nvar chars = { '{': '}', '(': ')', '[': ']'};\nvar strictCheck = function(str) {\n if (str[0] === '!') {\n return true;\n }\n var index = 0;\n var pipeIndex = -2;\n var closeSquareIndex = -2;\n var closeCurlyIndex = -2;\n var closeParenIndex = -2;\n var backSlashIndex = -2;\n while (index < str.length) {\n if (str[index] === '*') {\n return true;\n }\n\n if (str[index + 1] === '?' && /[\\].+)]/.test(str[index])) {\n return true;\n }\n\n if (closeSquareIndex !== -1 && str[index] === '[' && str[index + 1] !== ']') {\n if (closeSquareIndex < index) {\n closeSquareIndex = str.indexOf(']', index);\n }\n if (closeSquareIndex > index) {\n if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n return true;\n }\n backSlashIndex = str.indexOf('\\\\', index);\n if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n return true;\n }\n }\n }\n\n if (closeCurlyIndex !== -1 && str[index] === '{' && str[index + 1] !== '}') {\n closeCurlyIndex = str.indexOf('}', index);\n if (closeCurlyIndex > index) {\n backSlashIndex = str.indexOf('\\\\', index);\n if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) {\n return true;\n }\n }\n }\n\n if (closeParenIndex !== -1 && str[index] === '(' && str[index + 1] === '?' && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ')') {\n closeParenIndex = str.indexOf(')', index);\n if (closeParenIndex > index) {\n backSlashIndex = str.indexOf('\\\\', index);\n if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n return true;\n }\n }\n }\n\n if (pipeIndex !== -1 && str[index] === '(' && str[index + 1] !== '|') {\n if (pipeIndex < index) {\n pipeIndex = str.indexOf('|', index);\n }\n if (pipeIndex !== -1 && str[pipeIndex + 1] !== ')') {\n closeParenIndex = str.indexOf(')', pipeIndex);\n if (closeParenIndex > pipeIndex) {\n backSlashIndex = str.indexOf('\\\\', pipeIndex);\n if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n return true;\n }\n }\n }\n }\n\n if (str[index] === '\\\\') {\n var open = str[index + 1];\n index += 2;\n var close = chars[open];\n\n if (close) {\n var n = str.indexOf(close, index);\n if (n !== -1) {\n index = n + 1;\n }\n }\n\n if (str[index] === '!') {\n return true;\n }\n } else {\n index++;\n }\n }\n return false;\n};\n\nvar relaxedCheck = function(str) {\n if (str[0] === '!') {\n return true;\n }\n var index = 0;\n while (index < str.length) {\n if (/[*?{}()[\\]]/.test(str[index])) {\n return true;\n }\n\n if (str[index] === '\\\\') {\n var open = str[index + 1];\n index += 2;\n var close = chars[open];\n\n if (close) {\n var n = str.indexOf(close, index);\n if (n !== -1) {\n index = n + 1;\n }\n }\n\n if (str[index] === '!') {\n return true;\n }\n } else {\n index++;\n }\n }\n return false;\n};\n\nmodule.exports = function isGlob(str, options) {\n if (typeof str !== 'string' || str === '') {\n return false;\n }\n\n if (isExtglob(str)) {\n return true;\n }\n\n var check = strictCheck;\n\n // optionally relax check\n if (options && options.strict === false) {\n check = relaxedCheck;\n }\n\n return check(str);\n};\n","'use strict';\n\nvar isGlob = require('is-glob');\nvar pathPosixDirname = require('path').posix.dirname;\nvar isWin32 = require('os').platform() === 'win32';\n\nvar slash = '/';\nvar backslash = /\\\\/g;\nvar enclosure = /[\\{\\[].*[\\}\\]]$/;\nvar globby = /(^|[^\\\\])([\\{\\[]|\\([^\\)]+$)/;\nvar escaped = /\\\\([\\!\\*\\?\\|\\[\\]\\(\\)\\{\\}])/g;\n\n/**\n * @param {string} str\n * @param {Object} opts\n * @param {boolean} [opts.flipBackslashes=true]\n * @returns {string}\n */\nmodule.exports = function globParent(str, opts) {\n var options = Object.assign({ flipBackslashes: true }, opts);\n\n // flip windows path separators\n if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) {\n str = str.replace(backslash, slash);\n }\n\n // special case for strings ending in enclosure containing path separator\n if (enclosure.test(str)) {\n str += slash;\n }\n\n // preserves full path in case of trailing path separator\n str += 'a';\n\n // remove path parts that are globby\n do {\n str = pathPosixDirname(str);\n } while (isGlob(str) || globby.test(str));\n\n // remove escape chars and return result\n return str.replace(escaped, '$1');\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isAbsolute = exports.partitionAbsoluteAndRelative = exports.removeDuplicateSlashes = exports.matchAny = exports.convertPatternsToRe = exports.makeRe = exports.getPatternParts = exports.expandBraceExpansion = exports.expandPatternsWithBraceExpansion = exports.isAffectDepthOfReadingPattern = exports.endsWithSlashGlobStar = exports.hasGlobStar = exports.getBaseDirectory = exports.isPatternRelatedToParentDirectory = exports.getPatternsOutsideCurrentDirectory = exports.getPatternsInsideCurrentDirectory = exports.getPositivePatterns = exports.getNegativePatterns = exports.isPositivePattern = exports.isNegativePattern = exports.convertToNegativePattern = exports.convertToPositivePattern = exports.isDynamicPattern = exports.isStaticPattern = void 0;\nconst path = require(\"path\");\nconst globParent = require(\"glob-parent\");\nconst micromatch = require(\"micromatch\");\nconst GLOBSTAR = '**';\nconst ESCAPE_SYMBOL = '\\\\';\nconst COMMON_GLOB_SYMBOLS_RE = /[*?]|^!/;\nconst REGEX_CHARACTER_CLASS_SYMBOLS_RE = /\\[[^[]*]/;\nconst REGEX_GROUP_SYMBOLS_RE = /(?:^|[^!*+?@])\\([^(]*\\|[^|]*\\)/;\nconst GLOB_EXTENSION_SYMBOLS_RE = /[!*+?@]\\([^(]*\\)/;\nconst BRACE_EXPANSION_SEPARATORS_RE = /,|\\.\\./;\n/**\n * Matches a sequence of two or more consecutive slashes, excluding the first two slashes at the beginning of the string.\n * The latter is due to the presence of the device path at the beginning of the UNC path.\n */\nconst DOUBLE_SLASH_RE = /(?!^)\\/{2,}/g;\nfunction isStaticPattern(pattern, options = {}) {\n return !isDynamicPattern(pattern, options);\n}\nexports.isStaticPattern = isStaticPattern;\nfunction isDynamicPattern(pattern, options = {}) {\n /**\n * A special case with an empty string is necessary for matching patterns that start with a forward slash.\n * An empty string cannot be a dynamic pattern.\n * For example, the pattern `/lib/*` will be spread into parts: '', 'lib', '*'.\n */\n if (pattern === '') {\n return false;\n }\n /**\n * When the `caseSensitiveMatch` option is disabled, all patterns must be marked as dynamic, because we cannot check\n * filepath directly (without read directory).\n */\n if (options.caseSensitiveMatch === false || pattern.includes(ESCAPE_SYMBOL)) {\n return true;\n }\n if (COMMON_GLOB_SYMBOLS_RE.test(pattern) || REGEX_CHARACTER_CLASS_SYMBOLS_RE.test(pattern) || REGEX_GROUP_SYMBOLS_RE.test(pattern)) {\n return true;\n }\n if (options.extglob !== false && GLOB_EXTENSION_SYMBOLS_RE.test(pattern)) {\n return true;\n }\n if (options.braceExpansion !== false && hasBraceExpansion(pattern)) {\n return true;\n }\n return false;\n}\nexports.isDynamicPattern = isDynamicPattern;\nfunction hasBraceExpansion(pattern) {\n const openingBraceIndex = pattern.indexOf('{');\n if (openingBraceIndex === -1) {\n return false;\n }\n const closingBraceIndex = pattern.indexOf('}', openingBraceIndex + 1);\n if (closingBraceIndex === -1) {\n return false;\n }\n const braceContent = pattern.slice(openingBraceIndex, closingBraceIndex);\n return BRACE_EXPANSION_SEPARATORS_RE.test(braceContent);\n}\nfunction convertToPositivePattern(pattern) {\n return isNegativePattern(pattern) ? pattern.slice(1) : pattern;\n}\nexports.convertToPositivePattern = convertToPositivePattern;\nfunction convertToNegativePattern(pattern) {\n return '!' + pattern;\n}\nexports.convertToNegativePattern = convertToNegativePattern;\nfunction isNegativePattern(pattern) {\n return pattern.startsWith('!') && pattern[1] !== '(';\n}\nexports.isNegativePattern = isNegativePattern;\nfunction isPositivePattern(pattern) {\n return !isNegativePattern(pattern);\n}\nexports.isPositivePattern = isPositivePattern;\nfunction getNegativePatterns(patterns) {\n return patterns.filter(isNegativePattern);\n}\nexports.getNegativePatterns = getNegativePatterns;\nfunction getPositivePatterns(patterns) {\n return patterns.filter(isPositivePattern);\n}\nexports.getPositivePatterns = getPositivePatterns;\n/**\n * Returns patterns that can be applied inside the current directory.\n *\n * @example\n * // ['./*', '*', 'a/*']\n * getPatternsInsideCurrentDirectory(['./*', '*', 'a/*', '../*', './../*'])\n */\nfunction getPatternsInsideCurrentDirectory(patterns) {\n return patterns.filter((pattern) => !isPatternRelatedToParentDirectory(pattern));\n}\nexports.getPatternsInsideCurrentDirectory = getPatternsInsideCurrentDirectory;\n/**\n * Returns patterns to be expanded relative to (outside) the current directory.\n *\n * @example\n * // ['../*', './../*']\n * getPatternsInsideCurrentDirectory(['./*', '*', 'a/*', '../*', './../*'])\n */\nfunction getPatternsOutsideCurrentDirectory(patterns) {\n return patterns.filter(isPatternRelatedToParentDirectory);\n}\nexports.getPatternsOutsideCurrentDirectory = getPatternsOutsideCurrentDirectory;\nfunction isPatternRelatedToParentDirectory(pattern) {\n return pattern.startsWith('..') || pattern.startsWith('./..');\n}\nexports.isPatternRelatedToParentDirectory = isPatternRelatedToParentDirectory;\nfunction getBaseDirectory(pattern) {\n return globParent(pattern, { flipBackslashes: false });\n}\nexports.getBaseDirectory = getBaseDirectory;\nfunction hasGlobStar(pattern) {\n return pattern.includes(GLOBSTAR);\n}\nexports.hasGlobStar = hasGlobStar;\nfunction endsWithSlashGlobStar(pattern) {\n return pattern.endsWith('/' + GLOBSTAR);\n}\nexports.endsWithSlashGlobStar = endsWithSlashGlobStar;\nfunction isAffectDepthOfReadingPattern(pattern) {\n const basename = path.basename(pattern);\n return endsWithSlashGlobStar(pattern) || isStaticPattern(basename);\n}\nexports.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern;\nfunction expandPatternsWithBraceExpansion(patterns) {\n return patterns.reduce((collection, pattern) => {\n return collection.concat(expandBraceExpansion(pattern));\n }, []);\n}\nexports.expandPatternsWithBraceExpansion = expandPatternsWithBraceExpansion;\nfunction expandBraceExpansion(pattern) {\n const patterns = micromatch.braces(pattern, { expand: true, nodupes: true, keepEscaping: true });\n /**\n * Sort the patterns by length so that the same depth patterns are processed side by side.\n * `a/{b,}/{c,}/*` – `['a///*', 'a/b//*', 'a//c/*', 'a/b/c/*']`\n */\n patterns.sort((a, b) => a.length - b.length);\n /**\n * Micromatch can return an empty string in the case of patterns like `{a,}`.\n */\n return patterns.filter((pattern) => pattern !== '');\n}\nexports.expandBraceExpansion = expandBraceExpansion;\nfunction getPatternParts(pattern, options) {\n let { parts } = micromatch.scan(pattern, Object.assign(Object.assign({}, options), { parts: true }));\n /**\n * The scan method returns an empty array in some cases.\n * See micromatch/picomatch#58 for more details.\n */\n if (parts.length === 0) {\n parts = [pattern];\n }\n /**\n * The scan method does not return an empty part for the pattern with a forward slash.\n * This is another part of micromatch/picomatch#58.\n */\n if (parts[0].startsWith('/')) {\n parts[0] = parts[0].slice(1);\n parts.unshift('');\n }\n return parts;\n}\nexports.getPatternParts = getPatternParts;\nfunction makeRe(pattern, options) {\n return micromatch.makeRe(pattern, options);\n}\nexports.makeRe = makeRe;\nfunction convertPatternsToRe(patterns, options) {\n return patterns.map((pattern) => makeRe(pattern, options));\n}\nexports.convertPatternsToRe = convertPatternsToRe;\nfunction matchAny(entry, patternsRe) {\n return patternsRe.some((patternRe) => patternRe.test(entry));\n}\nexports.matchAny = matchAny;\n/**\n * This package only works with forward slashes as a path separator.\n * Because of this, we cannot use the standard `path.normalize` method, because on Windows platform it will use of backslashes.\n */\nfunction removeDuplicateSlashes(pattern) {\n return pattern.replace(DOUBLE_SLASH_RE, '/');\n}\nexports.removeDuplicateSlashes = removeDuplicateSlashes;\nfunction partitionAbsoluteAndRelative(patterns) {\n const absolute = [];\n const relative = [];\n for (const pattern of patterns) {\n if (isAbsolute(pattern)) {\n absolute.push(pattern);\n }\n else {\n relative.push(pattern);\n }\n }\n return [absolute, relative];\n}\nexports.partitionAbsoluteAndRelative = partitionAbsoluteAndRelative;\nfunction isAbsolute(pattern) {\n return path.isAbsolute(pattern);\n}\nexports.isAbsolute = isAbsolute;\n","'use strict'\n/*\n * merge2\n * https://github.com/teambition/merge2\n *\n * Copyright (c) 2014-2020 Teambition\n * Licensed under the MIT license.\n */\nconst Stream = require('stream')\nconst PassThrough = Stream.PassThrough\nconst slice = Array.prototype.slice\n\nmodule.exports = merge2\n\nfunction merge2 () {\n const streamsQueue = []\n const args = slice.call(arguments)\n let merging = false\n let options = args[args.length - 1]\n\n if (options && !Array.isArray(options) && options.pipe == null) {\n args.pop()\n } else {\n options = {}\n }\n\n const doEnd = options.end !== false\n const doPipeError = options.pipeError === true\n if (options.objectMode == null) {\n options.objectMode = true\n }\n if (options.highWaterMark == null) {\n options.highWaterMark = 64 * 1024\n }\n const mergedStream = PassThrough(options)\n\n function addStream () {\n for (let i = 0, len = arguments.length; i < len; i++) {\n streamsQueue.push(pauseStreams(arguments[i], options))\n }\n mergeStream()\n return this\n }\n\n function mergeStream () {\n if (merging) {\n return\n }\n merging = true\n\n let streams = streamsQueue.shift()\n if (!streams) {\n process.nextTick(endStream)\n return\n }\n if (!Array.isArray(streams)) {\n streams = [streams]\n }\n\n let pipesCount = streams.length + 1\n\n function next () {\n if (--pipesCount > 0) {\n return\n }\n merging = false\n mergeStream()\n }\n\n function pipe (stream) {\n function onend () {\n stream.removeListener('merge2UnpipeEnd', onend)\n stream.removeListener('end', onend)\n if (doPipeError) {\n stream.removeListener('error', onerror)\n }\n next()\n }\n function onerror (err) {\n mergedStream.emit('error', err)\n }\n // skip ended stream\n if (stream._readableState.endEmitted) {\n return next()\n }\n\n stream.on('merge2UnpipeEnd', onend)\n stream.on('end', onend)\n\n if (doPipeError) {\n stream.on('error', onerror)\n }\n\n stream.pipe(mergedStream, { end: false })\n // compatible for old stream\n stream.resume()\n }\n\n for (let i = 0; i < streams.length; i++) {\n pipe(streams[i])\n }\n\n next()\n }\n\n function endStream () {\n merging = false\n // emit 'queueDrain' when all streams merged.\n mergedStream.emit('queueDrain')\n if (doEnd) {\n mergedStream.end()\n }\n }\n\n mergedStream.setMaxListeners(0)\n mergedStream.add = addStream\n mergedStream.on('unpipe', function (stream) {\n stream.emit('merge2UnpipeEnd')\n })\n\n if (args.length) {\n addStream.apply(null, args)\n }\n return mergedStream\n}\n\n// check and pause streams for pipe.\nfunction pauseStreams (streams, options) {\n if (!Array.isArray(streams)) {\n // Backwards-compat with old-style streams\n if (!streams._readableState && streams.pipe) {\n streams = streams.pipe(PassThrough(options))\n }\n if (!streams._readableState || !streams.pause || !streams.pipe) {\n throw new Error('Only readable stream can be merged.')\n }\n streams.pause()\n } else {\n for (let i = 0, len = streams.length; i < len; i++) {\n streams[i] = pauseStreams(streams[i], options)\n }\n }\n return streams\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.merge = void 0;\nconst merge2 = require(\"merge2\");\nfunction merge(streams) {\n const mergedStream = merge2(streams);\n streams.forEach((stream) => {\n stream.once('error', (error) => mergedStream.emit('error', error));\n });\n mergedStream.once('close', () => propagateCloseEventToSources(streams));\n mergedStream.once('end', () => propagateCloseEventToSources(streams));\n return mergedStream;\n}\nexports.merge = merge;\nfunction propagateCloseEventToSources(streams) {\n streams.forEach((stream) => stream.emit('close'));\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isEmpty = exports.isString = void 0;\nfunction isString(input) {\n return typeof input === 'string';\n}\nexports.isString = isString;\nfunction isEmpty(input) {\n return input === '';\n}\nexports.isEmpty = isEmpty;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.string = exports.stream = exports.pattern = exports.path = exports.fs = exports.errno = exports.array = void 0;\nconst array = require(\"./array\");\nexports.array = array;\nconst errno = require(\"./errno\");\nexports.errno = errno;\nconst fs = require(\"./fs\");\nexports.fs = fs;\nconst path = require(\"./path\");\nexports.path = path;\nconst pattern = require(\"./pattern\");\nexports.pattern = pattern;\nconst stream = require(\"./stream\");\nexports.stream = stream;\nconst string = require(\"./string\");\nexports.string = string;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertPatternGroupToTask = exports.convertPatternGroupsToTasks = exports.groupPatternsByBaseDirectory = exports.getNegativePatternsAsPositive = exports.getPositivePatterns = exports.convertPatternsToTasks = exports.generate = void 0;\nconst utils = require(\"../utils\");\nfunction generate(input, settings) {\n const patterns = processPatterns(input, settings);\n const ignore = processPatterns(settings.ignore, settings);\n const positivePatterns = getPositivePatterns(patterns);\n const negativePatterns = getNegativePatternsAsPositive(patterns, ignore);\n const staticPatterns = positivePatterns.filter((pattern) => utils.pattern.isStaticPattern(pattern, settings));\n const dynamicPatterns = positivePatterns.filter((pattern) => utils.pattern.isDynamicPattern(pattern, settings));\n const staticTasks = convertPatternsToTasks(staticPatterns, negativePatterns, /* dynamic */ false);\n const dynamicTasks = convertPatternsToTasks(dynamicPatterns, negativePatterns, /* dynamic */ true);\n return staticTasks.concat(dynamicTasks);\n}\nexports.generate = generate;\nfunction processPatterns(input, settings) {\n let patterns = input;\n /**\n * The original pattern like `{,*,**,a/*}` can lead to problems checking the depth when matching entry\n * and some problems with the micromatch package (see fast-glob issues: #365, #394).\n *\n * To solve this problem, we expand all patterns containing brace expansion. This can lead to a slight slowdown\n * in matching in the case of a large set of patterns after expansion.\n */\n if (settings.braceExpansion) {\n patterns = utils.pattern.expandPatternsWithBraceExpansion(patterns);\n }\n /**\n * If the `baseNameMatch` option is enabled, we must add globstar to patterns, so that they can be used\n * at any nesting level.\n *\n * We do this here, because otherwise we have to complicate the filtering logic. For example, we need to change\n * the pattern in the filter before creating a regular expression. There is no need to change the patterns\n * in the application. Only on the input.\n */\n if (settings.baseNameMatch) {\n patterns = patterns.map((pattern) => pattern.includes('/') ? pattern : `**/${pattern}`);\n }\n /**\n * This method also removes duplicate slashes that may have been in the pattern or formed as a result of expansion.\n */\n return patterns.map((pattern) => utils.pattern.removeDuplicateSlashes(pattern));\n}\n/**\n * Returns tasks grouped by basic pattern directories.\n *\n * Patterns that can be found inside (`./`) and outside (`../`) the current directory are handled separately.\n * This is necessary because directory traversal starts at the base directory and goes deeper.\n */\nfunction convertPatternsToTasks(positive, negative, dynamic) {\n const tasks = [];\n const patternsOutsideCurrentDirectory = utils.pattern.getPatternsOutsideCurrentDirectory(positive);\n const patternsInsideCurrentDirectory = utils.pattern.getPatternsInsideCurrentDirectory(positive);\n const outsideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsOutsideCurrentDirectory);\n const insideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsInsideCurrentDirectory);\n tasks.push(...convertPatternGroupsToTasks(outsideCurrentDirectoryGroup, negative, dynamic));\n /*\n * For the sake of reducing future accesses to the file system, we merge all tasks within the current directory\n * into a global task, if at least one pattern refers to the root (`.`). In this case, the global task covers the rest.\n */\n if ('.' in insideCurrentDirectoryGroup) {\n tasks.push(convertPatternGroupToTask('.', patternsInsideCurrentDirectory, negative, dynamic));\n }\n else {\n tasks.push(...convertPatternGroupsToTasks(insideCurrentDirectoryGroup, negative, dynamic));\n }\n return tasks;\n}\nexports.convertPatternsToTasks = convertPatternsToTasks;\nfunction getPositivePatterns(patterns) {\n return utils.pattern.getPositivePatterns(patterns);\n}\nexports.getPositivePatterns = getPositivePatterns;\nfunction getNegativePatternsAsPositive(patterns, ignore) {\n const negative = utils.pattern.getNegativePatterns(patterns).concat(ignore);\n const positive = negative.map(utils.pattern.convertToPositivePattern);\n return positive;\n}\nexports.getNegativePatternsAsPositive = getNegativePatternsAsPositive;\nfunction groupPatternsByBaseDirectory(patterns) {\n const group = {};\n return patterns.reduce((collection, pattern) => {\n const base = utils.pattern.getBaseDirectory(pattern);\n if (base in collection) {\n collection[base].push(pattern);\n }\n else {\n collection[base] = [pattern];\n }\n return collection;\n }, group);\n}\nexports.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory;\nfunction convertPatternGroupsToTasks(positive, negative, dynamic) {\n return Object.keys(positive).map((base) => {\n return convertPatternGroupToTask(base, positive[base], negative, dynamic);\n });\n}\nexports.convertPatternGroupsToTasks = convertPatternGroupsToTasks;\nfunction convertPatternGroupToTask(base, positive, negative, dynamic) {\n return {\n dynamic,\n positive,\n negative,\n base,\n patterns: [].concat(positive, negative.map(utils.pattern.convertToNegativePattern))\n };\n}\nexports.convertPatternGroupToTask = convertPatternGroupToTask;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.read = void 0;\nfunction read(path, settings, callback) {\n settings.fs.lstat(path, (lstatError, lstat) => {\n if (lstatError !== null) {\n callFailureCallback(callback, lstatError);\n return;\n }\n if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {\n callSuccessCallback(callback, lstat);\n return;\n }\n settings.fs.stat(path, (statError, stat) => {\n if (statError !== null) {\n if (settings.throwErrorOnBrokenSymbolicLink) {\n callFailureCallback(callback, statError);\n return;\n }\n callSuccessCallback(callback, lstat);\n return;\n }\n if (settings.markSymbolicLink) {\n stat.isSymbolicLink = () => true;\n }\n callSuccessCallback(callback, stat);\n });\n });\n}\nexports.read = read;\nfunction callFailureCallback(callback, error) {\n callback(error);\n}\nfunction callSuccessCallback(callback, result) {\n callback(null, result);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.read = void 0;\nfunction read(path, settings) {\n const lstat = settings.fs.lstatSync(path);\n if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {\n return lstat;\n }\n try {\n const stat = settings.fs.statSync(path);\n if (settings.markSymbolicLink) {\n stat.isSymbolicLink = () => true;\n }\n return stat;\n }\n catch (error) {\n if (!settings.throwErrorOnBrokenSymbolicLink) {\n return lstat;\n }\n throw error;\n }\n}\nexports.read = read;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nexports.FILE_SYSTEM_ADAPTER = {\n lstat: fs.lstat,\n stat: fs.stat,\n lstatSync: fs.lstatSync,\n statSync: fs.statSync\n};\nfunction createFileSystemAdapter(fsMethods) {\n if (fsMethods === undefined) {\n return exports.FILE_SYSTEM_ADAPTER;\n }\n return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);\n}\nexports.createFileSystemAdapter = createFileSystemAdapter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs = require(\"./adapters/fs\");\nclass Settings {\n constructor(_options = {}) {\n this._options = _options;\n this.followSymbolicLink = this._getValue(this._options.followSymbolicLink, true);\n this.fs = fs.createFileSystemAdapter(this._options.fs);\n this.markSymbolicLink = this._getValue(this._options.markSymbolicLink, false);\n this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);\n }\n _getValue(option, value) {\n return option !== null && option !== void 0 ? option : value;\n }\n}\nexports.default = Settings;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.statSync = exports.stat = exports.Settings = void 0;\nconst async = require(\"./providers/async\");\nconst sync = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction stat(path, optionsOrSettingsOrCallback, callback) {\n if (typeof optionsOrSettingsOrCallback === 'function') {\n async.read(path, getSettings(), optionsOrSettingsOrCallback);\n return;\n }\n async.read(path, getSettings(optionsOrSettingsOrCallback), callback);\n}\nexports.stat = stat;\nfunction statSync(path, optionsOrSettings) {\n const settings = getSettings(optionsOrSettings);\n return sync.read(path, settings);\n}\nexports.statSync = statSync;\nfunction getSettings(settingsOrOptions = {}) {\n if (settingsOrOptions instanceof settings_1.default) {\n return settingsOrOptions;\n }\n return new settings_1.default(settingsOrOptions);\n}\n","/*! queue-microtask. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nlet promise\n\nmodule.exports = typeof queueMicrotask === 'function'\n ? queueMicrotask.bind(typeof window !== 'undefined' ? window : global)\n // reuse resolved promise, and allocate it lazily\n : cb => (promise || (promise = Promise.resolve()))\n .then(cb)\n .catch(err => setTimeout(() => { throw err }, 0))\n","/*! run-parallel. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nmodule.exports = runParallel\n\nconst queueMicrotask = require('queue-microtask')\n\nfunction runParallel (tasks, cb) {\n let results, pending, keys\n let isSync = true\n\n if (Array.isArray(tasks)) {\n results = []\n pending = tasks.length\n } else {\n keys = Object.keys(tasks)\n results = {}\n pending = keys.length\n }\n\n function done (err) {\n function end () {\n if (cb) cb(err, results)\n cb = null\n }\n if (isSync) queueMicrotask(end)\n else end()\n }\n\n function each (i, err, result) {\n results[i] = result\n if (--pending === 0 || err) {\n done(err)\n }\n }\n\n if (!pending) {\n // empty\n done(null)\n } else if (keys) {\n // object\n keys.forEach(function (key) {\n tasks[key](function (err, result) { each(key, err, result) })\n })\n } else {\n // array\n tasks.forEach(function (task, i) {\n task(function (err, result) { each(i, err, result) })\n })\n }\n\n isSync = false\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = void 0;\nconst NODE_PROCESS_VERSION_PARTS = process.versions.node.split('.');\nif (NODE_PROCESS_VERSION_PARTS[0] === undefined || NODE_PROCESS_VERSION_PARTS[1] === undefined) {\n throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);\n}\nconst MAJOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[0], 10);\nconst MINOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[1], 10);\nconst SUPPORTED_MAJOR_VERSION = 10;\nconst SUPPORTED_MINOR_VERSION = 10;\nconst IS_MATCHED_BY_MAJOR = MAJOR_VERSION > SUPPORTED_MAJOR_VERSION;\nconst IS_MATCHED_BY_MAJOR_AND_MINOR = MAJOR_VERSION === SUPPORTED_MAJOR_VERSION && MINOR_VERSION >= SUPPORTED_MINOR_VERSION;\n/**\n * IS `true` for Node.js 10.10 and greater.\n */\nexports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = IS_MATCHED_BY_MAJOR || IS_MATCHED_BY_MAJOR_AND_MINOR;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createDirentFromStats = void 0;\nclass DirentFromStats {\n constructor(name, stats) {\n this.name = name;\n this.isBlockDevice = stats.isBlockDevice.bind(stats);\n this.isCharacterDevice = stats.isCharacterDevice.bind(stats);\n this.isDirectory = stats.isDirectory.bind(stats);\n this.isFIFO = stats.isFIFO.bind(stats);\n this.isFile = stats.isFile.bind(stats);\n this.isSocket = stats.isSocket.bind(stats);\n this.isSymbolicLink = stats.isSymbolicLink.bind(stats);\n }\n}\nfunction createDirentFromStats(name, stats) {\n return new DirentFromStats(name, stats);\n}\nexports.createDirentFromStats = createDirentFromStats;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fs = void 0;\nconst fs = require(\"./fs\");\nexports.fs = fs;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.joinPathSegments = void 0;\nfunction joinPathSegments(a, b, separator) {\n /**\n * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`).\n */\n if (a.endsWith(separator)) {\n return a + b;\n }\n return a + separator + b;\n}\nexports.joinPathSegments = joinPathSegments;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.readdir = exports.readdirWithFileTypes = exports.read = void 0;\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst rpl = require(\"run-parallel\");\nconst constants_1 = require(\"../constants\");\nconst utils = require(\"../utils\");\nconst common = require(\"./common\");\nfunction read(directory, settings, callback) {\n if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {\n readdirWithFileTypes(directory, settings, callback);\n return;\n }\n readdir(directory, settings, callback);\n}\nexports.read = read;\nfunction readdirWithFileTypes(directory, settings, callback) {\n settings.fs.readdir(directory, { withFileTypes: true }, (readdirError, dirents) => {\n if (readdirError !== null) {\n callFailureCallback(callback, readdirError);\n return;\n }\n const entries = dirents.map((dirent) => ({\n dirent,\n name: dirent.name,\n path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)\n }));\n if (!settings.followSymbolicLinks) {\n callSuccessCallback(callback, entries);\n return;\n }\n const tasks = entries.map((entry) => makeRplTaskEntry(entry, settings));\n rpl(tasks, (rplError, rplEntries) => {\n if (rplError !== null) {\n callFailureCallback(callback, rplError);\n return;\n }\n callSuccessCallback(callback, rplEntries);\n });\n });\n}\nexports.readdirWithFileTypes = readdirWithFileTypes;\nfunction makeRplTaskEntry(entry, settings) {\n return (done) => {\n if (!entry.dirent.isSymbolicLink()) {\n done(null, entry);\n return;\n }\n settings.fs.stat(entry.path, (statError, stats) => {\n if (statError !== null) {\n if (settings.throwErrorOnBrokenSymbolicLink) {\n done(statError);\n return;\n }\n done(null, entry);\n return;\n }\n entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);\n done(null, entry);\n });\n };\n}\nfunction readdir(directory, settings, callback) {\n settings.fs.readdir(directory, (readdirError, names) => {\n if (readdirError !== null) {\n callFailureCallback(callback, readdirError);\n return;\n }\n const tasks = names.map((name) => {\n const path = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);\n return (done) => {\n fsStat.stat(path, settings.fsStatSettings, (error, stats) => {\n if (error !== null) {\n done(error);\n return;\n }\n const entry = {\n name,\n path,\n dirent: utils.fs.createDirentFromStats(name, stats)\n };\n if (settings.stats) {\n entry.stats = stats;\n }\n done(null, entry);\n });\n };\n });\n rpl(tasks, (rplError, entries) => {\n if (rplError !== null) {\n callFailureCallback(callback, rplError);\n return;\n }\n callSuccessCallback(callback, entries);\n });\n });\n}\nexports.readdir = readdir;\nfunction callFailureCallback(callback, error) {\n callback(error);\n}\nfunction callSuccessCallback(callback, result) {\n callback(null, result);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.readdir = exports.readdirWithFileTypes = exports.read = void 0;\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst constants_1 = require(\"../constants\");\nconst utils = require(\"../utils\");\nconst common = require(\"./common\");\nfunction read(directory, settings) {\n if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {\n return readdirWithFileTypes(directory, settings);\n }\n return readdir(directory, settings);\n}\nexports.read = read;\nfunction readdirWithFileTypes(directory, settings) {\n const dirents = settings.fs.readdirSync(directory, { withFileTypes: true });\n return dirents.map((dirent) => {\n const entry = {\n dirent,\n name: dirent.name,\n path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)\n };\n if (entry.dirent.isSymbolicLink() && settings.followSymbolicLinks) {\n try {\n const stats = settings.fs.statSync(entry.path);\n entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);\n }\n catch (error) {\n if (settings.throwErrorOnBrokenSymbolicLink) {\n throw error;\n }\n }\n }\n return entry;\n });\n}\nexports.readdirWithFileTypes = readdirWithFileTypes;\nfunction readdir(directory, settings) {\n const names = settings.fs.readdirSync(directory);\n return names.map((name) => {\n const entryPath = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);\n const stats = fsStat.statSync(entryPath, settings.fsStatSettings);\n const entry = {\n name,\n path: entryPath,\n dirent: utils.fs.createDirentFromStats(name, stats)\n };\n if (settings.stats) {\n entry.stats = stats;\n }\n return entry;\n });\n}\nexports.readdir = readdir;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nexports.FILE_SYSTEM_ADAPTER = {\n lstat: fs.lstat,\n stat: fs.stat,\n lstatSync: fs.lstatSync,\n statSync: fs.statSync,\n readdir: fs.readdir,\n readdirSync: fs.readdirSync\n};\nfunction createFileSystemAdapter(fsMethods) {\n if (fsMethods === undefined) {\n return exports.FILE_SYSTEM_ADAPTER;\n }\n return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);\n}\nexports.createFileSystemAdapter = createFileSystemAdapter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fs = require(\"./adapters/fs\");\nclass Settings {\n constructor(_options = {}) {\n this._options = _options;\n this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false);\n this.fs = fs.createFileSystemAdapter(this._options.fs);\n this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);\n this.stats = this._getValue(this._options.stats, false);\n this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);\n this.fsStatSettings = new fsStat.Settings({\n followSymbolicLink: this.followSymbolicLinks,\n fs: this.fs,\n throwErrorOnBrokenSymbolicLink: this.throwErrorOnBrokenSymbolicLink\n });\n }\n _getValue(option, value) {\n return option !== null && option !== void 0 ? option : value;\n }\n}\nexports.default = Settings;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Settings = exports.scandirSync = exports.scandir = void 0;\nconst async = require(\"./providers/async\");\nconst sync = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction scandir(path, optionsOrSettingsOrCallback, callback) {\n if (typeof optionsOrSettingsOrCallback === 'function') {\n async.read(path, getSettings(), optionsOrSettingsOrCallback);\n return;\n }\n async.read(path, getSettings(optionsOrSettingsOrCallback), callback);\n}\nexports.scandir = scandir;\nfunction scandirSync(path, optionsOrSettings) {\n const settings = getSettings(optionsOrSettings);\n return sync.read(path, settings);\n}\nexports.scandirSync = scandirSync;\nfunction getSettings(settingsOrOptions = {}) {\n if (settingsOrOptions instanceof settings_1.default) {\n return settingsOrOptions;\n }\n return new settings_1.default(settingsOrOptions);\n}\n","'use strict'\n\nfunction reusify (Constructor) {\n var head = new Constructor()\n var tail = head\n\n function get () {\n var current = head\n\n if (current.next) {\n head = current.next\n } else {\n head = new Constructor()\n tail = head\n }\n\n current.next = null\n\n return current\n }\n\n function release (obj) {\n tail.next = obj\n tail = obj\n }\n\n return {\n get: get,\n release: release\n }\n}\n\nmodule.exports = reusify\n","'use strict'\n\n/* eslint-disable no-var */\n\nvar reusify = require('reusify')\n\nfunction fastqueue (context, worker, _concurrency) {\n if (typeof context === 'function') {\n _concurrency = worker\n worker = context\n context = null\n }\n\n if (!(_concurrency >= 1)) {\n throw new Error('fastqueue concurrency must be equal to or greater than 1')\n }\n\n var cache = reusify(Task)\n var queueHead = null\n var queueTail = null\n var _running = 0\n var errorHandler = null\n\n var self = {\n push: push,\n drain: noop,\n saturated: noop,\n pause: pause,\n paused: false,\n\n get concurrency () {\n return _concurrency\n },\n set concurrency (value) {\n if (!(value >= 1)) {\n throw new Error('fastqueue concurrency must be equal to or greater than 1')\n }\n _concurrency = value\n\n if (self.paused) return\n for (; queueHead && _running < _concurrency;) {\n _running++\n release()\n }\n },\n\n running: running,\n resume: resume,\n idle: idle,\n length: length,\n getQueue: getQueue,\n unshift: unshift,\n empty: noop,\n kill: kill,\n killAndDrain: killAndDrain,\n error: error,\n abort: abort\n }\n\n return self\n\n function running () {\n return _running\n }\n\n function pause () {\n self.paused = true\n }\n\n function length () {\n var current = queueHead\n var counter = 0\n\n while (current) {\n current = current.next\n counter++\n }\n\n return counter\n }\n\n function getQueue () {\n var current = queueHead\n var tasks = []\n\n while (current) {\n tasks.push(current.value)\n current = current.next\n }\n\n return tasks\n }\n\n function resume () {\n if (!self.paused) return\n self.paused = false\n if (queueHead === null) {\n _running++\n release()\n return\n }\n for (; queueHead && _running < _concurrency;) {\n _running++\n release()\n }\n }\n\n function idle () {\n return _running === 0 && self.length() === 0\n }\n\n function push (value, done) {\n var current = cache.get()\n\n current.context = context\n current.release = release\n current.value = value\n current.callback = done || noop\n current.errorHandler = errorHandler\n\n if (_running >= _concurrency || self.paused) {\n if (queueTail) {\n queueTail.next = current\n queueTail = current\n } else {\n queueHead = current\n queueTail = current\n self.saturated()\n }\n } else {\n _running++\n worker.call(context, current.value, current.worked)\n }\n }\n\n function unshift (value, done) {\n var current = cache.get()\n\n current.context = context\n current.release = release\n current.value = value\n current.callback = done || noop\n current.errorHandler = errorHandler\n\n if (_running >= _concurrency || self.paused) {\n if (queueHead) {\n current.next = queueHead\n queueHead = current\n } else {\n queueHead = current\n queueTail = current\n self.saturated()\n }\n } else {\n _running++\n worker.call(context, current.value, current.worked)\n }\n }\n\n function release (holder) {\n if (holder) {\n cache.release(holder)\n }\n var next = queueHead\n if (next && _running <= _concurrency) {\n if (!self.paused) {\n if (queueTail === queueHead) {\n queueTail = null\n }\n queueHead = next.next\n next.next = null\n worker.call(context, next.value, next.worked)\n if (queueTail === null) {\n self.empty()\n }\n } else {\n _running--\n }\n } else if (--_running === 0) {\n self.drain()\n }\n }\n\n function kill () {\n queueHead = null\n queueTail = null\n self.drain = noop\n }\n\n function killAndDrain () {\n queueHead = null\n queueTail = null\n self.drain()\n self.drain = noop\n }\n\n function abort () {\n var current = queueHead\n queueHead = null\n queueTail = null\n\n while (current) {\n var next = current.next\n var callback = current.callback\n var errorHandler = current.errorHandler\n var val = current.value\n var context = current.context\n\n // Reset the task state\n current.value = null\n current.callback = noop\n current.errorHandler = null\n\n // Call error handler if present\n if (errorHandler) {\n errorHandler(new Error('abort'), val)\n }\n\n // Call callback with error\n callback.call(context, new Error('abort'))\n\n // Release the task back to the pool\n current.release(current)\n\n current = next\n }\n\n self.drain = noop\n }\n\n function error (handler) {\n errorHandler = handler\n }\n}\n\nfunction noop () {}\n\nfunction Task () {\n this.value = null\n this.callback = noop\n this.next = null\n this.release = noop\n this.context = null\n this.errorHandler = null\n\n var self = this\n\n this.worked = function worked (err, result) {\n var callback = self.callback\n var errorHandler = self.errorHandler\n var val = self.value\n self.value = null\n self.callback = noop\n if (self.errorHandler) {\n errorHandler(err, val)\n }\n callback.call(self.context, err, result)\n self.release(self)\n }\n}\n\nfunction queueAsPromised (context, worker, _concurrency) {\n if (typeof context === 'function') {\n _concurrency = worker\n worker = context\n context = null\n }\n\n function asyncWrapper (arg, cb) {\n worker.call(this, arg)\n .then(function (res) {\n cb(null, res)\n }, cb)\n }\n\n var queue = fastqueue(context, asyncWrapper, _concurrency)\n\n var pushCb = queue.push\n var unshiftCb = queue.unshift\n\n queue.push = push\n queue.unshift = unshift\n queue.drained = drained\n\n return queue\n\n function push (value) {\n var p = new Promise(function (resolve, reject) {\n pushCb(value, function (err, result) {\n if (err) {\n reject(err)\n return\n }\n resolve(result)\n })\n })\n\n // Let's fork the promise chain to\n // make the error bubble up to the user but\n // not lead to a unhandledRejection\n p.catch(noop)\n\n return p\n }\n\n function unshift (value) {\n var p = new Promise(function (resolve, reject) {\n unshiftCb(value, function (err, result) {\n if (err) {\n reject(err)\n return\n }\n resolve(result)\n })\n })\n\n // Let's fork the promise chain to\n // make the error bubble up to the user but\n // not lead to a unhandledRejection\n p.catch(noop)\n\n return p\n }\n\n function drained () {\n var p = new Promise(function (resolve) {\n process.nextTick(function () {\n if (queue.idle()) {\n resolve()\n } else {\n var previousDrain = queue.drain\n queue.drain = function () {\n if (typeof previousDrain === 'function') previousDrain()\n resolve()\n queue.drain = previousDrain\n }\n }\n })\n })\n\n return p\n }\n}\n\nmodule.exports = fastqueue\nmodule.exports.promise = queueAsPromised\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.joinPathSegments = exports.replacePathSegmentSeparator = exports.isAppliedFilter = exports.isFatalError = void 0;\nfunction isFatalError(settings, error) {\n if (settings.errorFilter === null) {\n return true;\n }\n return !settings.errorFilter(error);\n}\nexports.isFatalError = isFatalError;\nfunction isAppliedFilter(filter, value) {\n return filter === null || filter(value);\n}\nexports.isAppliedFilter = isAppliedFilter;\nfunction replacePathSegmentSeparator(filepath, separator) {\n return filepath.split(/[/\\\\]/).join(separator);\n}\nexports.replacePathSegmentSeparator = replacePathSegmentSeparator;\nfunction joinPathSegments(a, b, separator) {\n if (a === '') {\n return b;\n }\n /**\n * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`).\n */\n if (a.endsWith(separator)) {\n return a + b;\n }\n return a + separator + b;\n}\nexports.joinPathSegments = joinPathSegments;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst common = require(\"./common\");\nclass Reader {\n constructor(_root, _settings) {\n this._root = _root;\n this._settings = _settings;\n this._root = common.replacePathSegmentSeparator(_root, _settings.pathSegmentSeparator);\n }\n}\nexports.default = Reader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst events_1 = require(\"events\");\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nconst fastq = require(\"fastq\");\nconst common = require(\"./common\");\nconst reader_1 = require(\"./reader\");\nclass AsyncReader extends reader_1.default {\n constructor(_root, _settings) {\n super(_root, _settings);\n this._settings = _settings;\n this._scandir = fsScandir.scandir;\n this._emitter = new events_1.EventEmitter();\n this._queue = fastq(this._worker.bind(this), this._settings.concurrency);\n this._isFatalError = false;\n this._isDestroyed = false;\n this._queue.drain = () => {\n if (!this._isFatalError) {\n this._emitter.emit('end');\n }\n };\n }\n read() {\n this._isFatalError = false;\n this._isDestroyed = false;\n setImmediate(() => {\n this._pushToQueue(this._root, this._settings.basePath);\n });\n return this._emitter;\n }\n get isDestroyed() {\n return this._isDestroyed;\n }\n destroy() {\n if (this._isDestroyed) {\n throw new Error('The reader is already destroyed');\n }\n this._isDestroyed = true;\n this._queue.killAndDrain();\n }\n onEntry(callback) {\n this._emitter.on('entry', callback);\n }\n onError(callback) {\n this._emitter.once('error', callback);\n }\n onEnd(callback) {\n this._emitter.once('end', callback);\n }\n _pushToQueue(directory, base) {\n const queueItem = { directory, base };\n this._queue.push(queueItem, (error) => {\n if (error !== null) {\n this._handleError(error);\n }\n });\n }\n _worker(item, done) {\n this._scandir(item.directory, this._settings.fsScandirSettings, (error, entries) => {\n if (error !== null) {\n done(error, undefined);\n return;\n }\n for (const entry of entries) {\n this._handleEntry(entry, item.base);\n }\n done(null, undefined);\n });\n }\n _handleError(error) {\n if (this._isDestroyed || !common.isFatalError(this._settings, error)) {\n return;\n }\n this._isFatalError = true;\n this._isDestroyed = true;\n this._emitter.emit('error', error);\n }\n _handleEntry(entry, base) {\n if (this._isDestroyed || this._isFatalError) {\n return;\n }\n const fullpath = entry.path;\n if (base !== undefined) {\n entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);\n }\n if (common.isAppliedFilter(this._settings.entryFilter, entry)) {\n this._emitEntry(entry);\n }\n if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {\n this._pushToQueue(fullpath, base === undefined ? undefined : entry.path);\n }\n }\n _emitEntry(entry) {\n this._emitter.emit('entry', entry);\n }\n}\nexports.default = AsyncReader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst async_1 = require(\"../readers/async\");\nclass AsyncProvider {\n constructor(_root, _settings) {\n this._root = _root;\n this._settings = _settings;\n this._reader = new async_1.default(this._root, this._settings);\n this._storage = [];\n }\n read(callback) {\n this._reader.onError((error) => {\n callFailureCallback(callback, error);\n });\n this._reader.onEntry((entry) => {\n this._storage.push(entry);\n });\n this._reader.onEnd(() => {\n callSuccessCallback(callback, this._storage);\n });\n this._reader.read();\n }\n}\nexports.default = AsyncProvider;\nfunction callFailureCallback(callback, error) {\n callback(error);\n}\nfunction callSuccessCallback(callback, entries) {\n callback(null, entries);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst async_1 = require(\"../readers/async\");\nclass StreamProvider {\n constructor(_root, _settings) {\n this._root = _root;\n this._settings = _settings;\n this._reader = new async_1.default(this._root, this._settings);\n this._stream = new stream_1.Readable({\n objectMode: true,\n read: () => { },\n destroy: () => {\n if (!this._reader.isDestroyed) {\n this._reader.destroy();\n }\n }\n });\n }\n read() {\n this._reader.onError((error) => {\n this._stream.emit('error', error);\n });\n this._reader.onEntry((entry) => {\n this._stream.push(entry);\n });\n this._reader.onEnd(() => {\n this._stream.push(null);\n });\n this._reader.read();\n return this._stream;\n }\n}\nexports.default = StreamProvider;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nconst common = require(\"./common\");\nconst reader_1 = require(\"./reader\");\nclass SyncReader extends reader_1.default {\n constructor() {\n super(...arguments);\n this._scandir = fsScandir.scandirSync;\n this._storage = [];\n this._queue = new Set();\n }\n read() {\n this._pushToQueue(this._root, this._settings.basePath);\n this._handleQueue();\n return this._storage;\n }\n _pushToQueue(directory, base) {\n this._queue.add({ directory, base });\n }\n _handleQueue() {\n for (const item of this._queue.values()) {\n this._handleDirectory(item.directory, item.base);\n }\n }\n _handleDirectory(directory, base) {\n try {\n const entries = this._scandir(directory, this._settings.fsScandirSettings);\n for (const entry of entries) {\n this._handleEntry(entry, base);\n }\n }\n catch (error) {\n this._handleError(error);\n }\n }\n _handleError(error) {\n if (!common.isFatalError(this._settings, error)) {\n return;\n }\n throw error;\n }\n _handleEntry(entry, base) {\n const fullpath = entry.path;\n if (base !== undefined) {\n entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);\n }\n if (common.isAppliedFilter(this._settings.entryFilter, entry)) {\n this._pushToStorage(entry);\n }\n if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {\n this._pushToQueue(fullpath, base === undefined ? undefined : entry.path);\n }\n }\n _pushToStorage(entry) {\n this._storage.push(entry);\n }\n}\nexports.default = SyncReader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst sync_1 = require(\"../readers/sync\");\nclass SyncProvider {\n constructor(_root, _settings) {\n this._root = _root;\n this._settings = _settings;\n this._reader = new sync_1.default(this._root, this._settings);\n }\n read() {\n return this._reader.read();\n }\n}\nexports.default = SyncProvider;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nclass Settings {\n constructor(_options = {}) {\n this._options = _options;\n this.basePath = this._getValue(this._options.basePath, undefined);\n this.concurrency = this._getValue(this._options.concurrency, Number.POSITIVE_INFINITY);\n this.deepFilter = this._getValue(this._options.deepFilter, null);\n this.entryFilter = this._getValue(this._options.entryFilter, null);\n this.errorFilter = this._getValue(this._options.errorFilter, null);\n this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);\n this.fsScandirSettings = new fsScandir.Settings({\n followSymbolicLinks: this._options.followSymbolicLinks,\n fs: this._options.fs,\n pathSegmentSeparator: this._options.pathSegmentSeparator,\n stats: this._options.stats,\n throwErrorOnBrokenSymbolicLink: this._options.throwErrorOnBrokenSymbolicLink\n });\n }\n _getValue(option, value) {\n return option !== null && option !== void 0 ? option : value;\n }\n}\nexports.default = Settings;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Settings = exports.walkStream = exports.walkSync = exports.walk = void 0;\nconst async_1 = require(\"./providers/async\");\nconst stream_1 = require(\"./providers/stream\");\nconst sync_1 = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction walk(directory, optionsOrSettingsOrCallback, callback) {\n if (typeof optionsOrSettingsOrCallback === 'function') {\n new async_1.default(directory, getSettings()).read(optionsOrSettingsOrCallback);\n return;\n }\n new async_1.default(directory, getSettings(optionsOrSettingsOrCallback)).read(callback);\n}\nexports.walk = walk;\nfunction walkSync(directory, optionsOrSettings) {\n const settings = getSettings(optionsOrSettings);\n const provider = new sync_1.default(directory, settings);\n return provider.read();\n}\nexports.walkSync = walkSync;\nfunction walkStream(directory, optionsOrSettings) {\n const settings = getSettings(optionsOrSettings);\n const provider = new stream_1.default(directory, settings);\n return provider.read();\n}\nexports.walkStream = walkStream;\nfunction getSettings(settingsOrOptions = {}) {\n if (settingsOrOptions instanceof settings_1.default) {\n return settingsOrOptions;\n }\n return new settings_1.default(settingsOrOptions);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst utils = require(\"../utils\");\nclass Reader {\n constructor(_settings) {\n this._settings = _settings;\n this._fsStatSettings = new fsStat.Settings({\n followSymbolicLink: this._settings.followSymbolicLinks,\n fs: this._settings.fs,\n throwErrorOnBrokenSymbolicLink: this._settings.followSymbolicLinks\n });\n }\n _getFullEntryPath(filepath) {\n return path.resolve(this._settings.cwd, filepath);\n }\n _makeEntry(stats, pattern) {\n const entry = {\n name: pattern,\n path: pattern,\n dirent: utils.fs.createDirentFromStats(pattern, stats)\n };\n if (this._settings.stats) {\n entry.stats = stats;\n }\n return entry;\n }\n _isFatalError(error) {\n return !utils.errno.isEnoentCodeError(error) && !this._settings.suppressErrors;\n }\n}\nexports.default = Reader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nclass ReaderStream extends reader_1.default {\n constructor() {\n super(...arguments);\n this._walkStream = fsWalk.walkStream;\n this._stat = fsStat.stat;\n }\n dynamic(root, options) {\n return this._walkStream(root, options);\n }\n static(patterns, options) {\n const filepaths = patterns.map(this._getFullEntryPath, this);\n const stream = new stream_1.PassThrough({ objectMode: true });\n stream._write = (index, _enc, done) => {\n return this._getEntry(filepaths[index], patterns[index], options)\n .then((entry) => {\n if (entry !== null && options.entryFilter(entry)) {\n stream.push(entry);\n }\n if (index === filepaths.length - 1) {\n stream.end();\n }\n done();\n })\n .catch(done);\n };\n for (let i = 0; i < filepaths.length; i++) {\n stream.write(i);\n }\n return stream;\n }\n _getEntry(filepath, pattern, options) {\n return this._getStat(filepath)\n .then((stats) => this._makeEntry(stats, pattern))\n .catch((error) => {\n if (options.errorFilter(error)) {\n return null;\n }\n throw error;\n });\n }\n _getStat(filepath) {\n return new Promise((resolve, reject) => {\n this._stat(filepath, this._fsStatSettings, (error, stats) => {\n return error === null ? resolve(stats) : reject(error);\n });\n });\n }\n}\nexports.default = ReaderStream;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nconst stream_1 = require(\"./stream\");\nclass ReaderAsync extends reader_1.default {\n constructor() {\n super(...arguments);\n this._walkAsync = fsWalk.walk;\n this._readerStream = new stream_1.default(this._settings);\n }\n dynamic(root, options) {\n return new Promise((resolve, reject) => {\n this._walkAsync(root, options, (error, entries) => {\n if (error === null) {\n resolve(entries);\n }\n else {\n reject(error);\n }\n });\n });\n }\n async static(patterns, options) {\n const entries = [];\n const stream = this._readerStream.static(patterns, options);\n // After #235, replace it with an asynchronous iterator.\n return new Promise((resolve, reject) => {\n stream.once('error', reject);\n stream.on('data', (entry) => entries.push(entry));\n stream.once('end', () => resolve(entries));\n });\n }\n}\nexports.default = ReaderAsync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass Matcher {\n constructor(_patterns, _settings, _micromatchOptions) {\n this._patterns = _patterns;\n this._settings = _settings;\n this._micromatchOptions = _micromatchOptions;\n this._storage = [];\n this._fillStorage();\n }\n _fillStorage() {\n for (const pattern of this._patterns) {\n const segments = this._getPatternSegments(pattern);\n const sections = this._splitSegmentsIntoSections(segments);\n this._storage.push({\n complete: sections.length <= 1,\n pattern,\n segments,\n sections\n });\n }\n }\n _getPatternSegments(pattern) {\n const parts = utils.pattern.getPatternParts(pattern, this._micromatchOptions);\n return parts.map((part) => {\n const dynamic = utils.pattern.isDynamicPattern(part, this._settings);\n if (!dynamic) {\n return {\n dynamic: false,\n pattern: part\n };\n }\n return {\n dynamic: true,\n pattern: part,\n patternRe: utils.pattern.makeRe(part, this._micromatchOptions)\n };\n });\n }\n _splitSegmentsIntoSections(segments) {\n return utils.array.splitWhen(segments, (segment) => segment.dynamic && utils.pattern.hasGlobStar(segment.pattern));\n }\n}\nexports.default = Matcher;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst matcher_1 = require(\"./matcher\");\nclass PartialMatcher extends matcher_1.default {\n match(filepath) {\n const parts = filepath.split('/');\n const levels = parts.length;\n const patterns = this._storage.filter((info) => !info.complete || info.segments.length > levels);\n for (const pattern of patterns) {\n const section = pattern.sections[0];\n /**\n * In this case, the pattern has a globstar and we must read all directories unconditionally,\n * but only if the level has reached the end of the first group.\n *\n * fixtures/{a,b}/**\n * ^ true/false ^ always true\n */\n if (!pattern.complete && levels > section.length) {\n return true;\n }\n const match = parts.every((part, index) => {\n const segment = pattern.segments[index];\n if (segment.dynamic && segment.patternRe.test(part)) {\n return true;\n }\n if (!segment.dynamic && segment.pattern === part) {\n return true;\n }\n return false;\n });\n if (match) {\n return true;\n }\n }\n return false;\n }\n}\nexports.default = PartialMatcher;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nconst partial_1 = require(\"../matchers/partial\");\nclass DeepFilter {\n constructor(_settings, _micromatchOptions) {\n this._settings = _settings;\n this._micromatchOptions = _micromatchOptions;\n }\n getFilter(basePath, positive, negative) {\n const matcher = this._getMatcher(positive);\n const negativeRe = this._getNegativePatternsRe(negative);\n return (entry) => this._filter(basePath, entry, matcher, negativeRe);\n }\n _getMatcher(patterns) {\n return new partial_1.default(patterns, this._settings, this._micromatchOptions);\n }\n _getNegativePatternsRe(patterns) {\n const affectDepthOfReadingPatterns = patterns.filter(utils.pattern.isAffectDepthOfReadingPattern);\n return utils.pattern.convertPatternsToRe(affectDepthOfReadingPatterns, this._micromatchOptions);\n }\n _filter(basePath, entry, matcher, negativeRe) {\n if (this._isSkippedByDeep(basePath, entry.path)) {\n return false;\n }\n if (this._isSkippedSymbolicLink(entry)) {\n return false;\n }\n const filepath = utils.path.removeLeadingDotSegment(entry.path);\n if (this._isSkippedByPositivePatterns(filepath, matcher)) {\n return false;\n }\n return this._isSkippedByNegativePatterns(filepath, negativeRe);\n }\n _isSkippedByDeep(basePath, entryPath) {\n /**\n * Avoid unnecessary depth calculations when it doesn't matter.\n */\n if (this._settings.deep === Infinity) {\n return false;\n }\n return this._getEntryLevel(basePath, entryPath) >= this._settings.deep;\n }\n _getEntryLevel(basePath, entryPath) {\n const entryPathDepth = entryPath.split('/').length;\n if (basePath === '') {\n return entryPathDepth;\n }\n const basePathDepth = basePath.split('/').length;\n return entryPathDepth - basePathDepth;\n }\n _isSkippedSymbolicLink(entry) {\n return !this._settings.followSymbolicLinks && entry.dirent.isSymbolicLink();\n }\n _isSkippedByPositivePatterns(entryPath, matcher) {\n return !this._settings.baseNameMatch && !matcher.match(entryPath);\n }\n _isSkippedByNegativePatterns(entryPath, patternsRe) {\n return !utils.pattern.matchAny(entryPath, patternsRe);\n }\n}\nexports.default = DeepFilter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass EntryFilter {\n constructor(_settings, _micromatchOptions) {\n this._settings = _settings;\n this._micromatchOptions = _micromatchOptions;\n this.index = new Map();\n }\n getFilter(positive, negative) {\n const [absoluteNegative, relativeNegative] = utils.pattern.partitionAbsoluteAndRelative(negative);\n const patterns = {\n positive: {\n all: utils.pattern.convertPatternsToRe(positive, this._micromatchOptions)\n },\n negative: {\n absolute: utils.pattern.convertPatternsToRe(absoluteNegative, Object.assign(Object.assign({}, this._micromatchOptions), { dot: true })),\n relative: utils.pattern.convertPatternsToRe(relativeNegative, Object.assign(Object.assign({}, this._micromatchOptions), { dot: true }))\n }\n };\n return (entry) => this._filter(entry, patterns);\n }\n _filter(entry, patterns) {\n const filepath = utils.path.removeLeadingDotSegment(entry.path);\n if (this._settings.unique && this._isDuplicateEntry(filepath)) {\n return false;\n }\n if (this._onlyFileFilter(entry) || this._onlyDirectoryFilter(entry)) {\n return false;\n }\n const isMatched = this._isMatchToPatternsSet(filepath, patterns, entry.dirent.isDirectory());\n if (this._settings.unique && isMatched) {\n this._createIndexRecord(filepath);\n }\n return isMatched;\n }\n _isDuplicateEntry(filepath) {\n return this.index.has(filepath);\n }\n _createIndexRecord(filepath) {\n this.index.set(filepath, undefined);\n }\n _onlyFileFilter(entry) {\n return this._settings.onlyFiles && !entry.dirent.isFile();\n }\n _onlyDirectoryFilter(entry) {\n return this._settings.onlyDirectories && !entry.dirent.isDirectory();\n }\n _isMatchToPatternsSet(filepath, patterns, isDirectory) {\n const isMatched = this._isMatchToPatterns(filepath, patterns.positive.all, isDirectory);\n if (!isMatched) {\n return false;\n }\n const isMatchedByRelativeNegative = this._isMatchToPatterns(filepath, patterns.negative.relative, isDirectory);\n if (isMatchedByRelativeNegative) {\n return false;\n }\n const isMatchedByAbsoluteNegative = this._isMatchToAbsoluteNegative(filepath, patterns.negative.absolute, isDirectory);\n if (isMatchedByAbsoluteNegative) {\n return false;\n }\n return true;\n }\n _isMatchToAbsoluteNegative(filepath, patternsRe, isDirectory) {\n if (patternsRe.length === 0) {\n return false;\n }\n const fullpath = utils.path.makeAbsolute(this._settings.cwd, filepath);\n return this._isMatchToPatterns(fullpath, patternsRe, isDirectory);\n }\n _isMatchToPatterns(filepath, patternsRe, isDirectory) {\n if (patternsRe.length === 0) {\n return false;\n }\n // Trying to match files and directories by patterns.\n const isMatched = utils.pattern.matchAny(filepath, patternsRe);\n // A pattern with a trailling slash can be used for directory matching.\n // To apply such pattern, we need to add a tralling slash to the path.\n if (!isMatched && isDirectory) {\n return utils.pattern.matchAny(filepath + '/', patternsRe);\n }\n return isMatched;\n }\n}\nexports.default = EntryFilter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass ErrorFilter {\n constructor(_settings) {\n this._settings = _settings;\n }\n getFilter() {\n return (error) => this._isNonFatalError(error);\n }\n _isNonFatalError(error) {\n return utils.errno.isEnoentCodeError(error) || this._settings.suppressErrors;\n }\n}\nexports.default = ErrorFilter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass EntryTransformer {\n constructor(_settings) {\n this._settings = _settings;\n }\n getTransformer() {\n return (entry) => this._transform(entry);\n }\n _transform(entry) {\n let filepath = entry.path;\n if (this._settings.absolute) {\n filepath = utils.path.makeAbsolute(this._settings.cwd, filepath);\n filepath = utils.path.unixify(filepath);\n }\n if (this._settings.markDirectories && entry.dirent.isDirectory()) {\n filepath += '/';\n }\n if (!this._settings.objectMode) {\n return filepath;\n }\n return Object.assign(Object.assign({}, entry), { path: filepath });\n }\n}\nexports.default = EntryTransformer;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst deep_1 = require(\"./filters/deep\");\nconst entry_1 = require(\"./filters/entry\");\nconst error_1 = require(\"./filters/error\");\nconst entry_2 = require(\"./transformers/entry\");\nclass Provider {\n constructor(_settings) {\n this._settings = _settings;\n this.errorFilter = new error_1.default(this._settings);\n this.entryFilter = new entry_1.default(this._settings, this._getMicromatchOptions());\n this.deepFilter = new deep_1.default(this._settings, this._getMicromatchOptions());\n this.entryTransformer = new entry_2.default(this._settings);\n }\n _getRootDirectory(task) {\n return path.resolve(this._settings.cwd, task.base);\n }\n _getReaderOptions(task) {\n const basePath = task.base === '.' ? '' : task.base;\n return {\n basePath,\n pathSegmentSeparator: '/',\n concurrency: this._settings.concurrency,\n deepFilter: this.deepFilter.getFilter(basePath, task.positive, task.negative),\n entryFilter: this.entryFilter.getFilter(task.positive, task.negative),\n errorFilter: this.errorFilter.getFilter(),\n followSymbolicLinks: this._settings.followSymbolicLinks,\n fs: this._settings.fs,\n stats: this._settings.stats,\n throwErrorOnBrokenSymbolicLink: this._settings.throwErrorOnBrokenSymbolicLink,\n transform: this.entryTransformer.getTransformer()\n };\n }\n _getMicromatchOptions() {\n return {\n dot: this._settings.dot,\n matchBase: this._settings.baseNameMatch,\n nobrace: !this._settings.braceExpansion,\n nocase: !this._settings.caseSensitiveMatch,\n noext: !this._settings.extglob,\n noglobstar: !this._settings.globstar,\n posix: true,\n strictSlashes: false\n };\n }\n}\nexports.default = Provider;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst async_1 = require(\"../readers/async\");\nconst provider_1 = require(\"./provider\");\nclass ProviderAsync extends provider_1.default {\n constructor() {\n super(...arguments);\n this._reader = new async_1.default(this._settings);\n }\n async read(task) {\n const root = this._getRootDirectory(task);\n const options = this._getReaderOptions(task);\n const entries = await this.api(root, task, options);\n return entries.map((entry) => options.transform(entry));\n }\n api(root, task, options) {\n if (task.dynamic) {\n return this._reader.dynamic(root, options);\n }\n return this._reader.static(task.patterns, options);\n }\n}\nexports.default = ProviderAsync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst stream_2 = require(\"../readers/stream\");\nconst provider_1 = require(\"./provider\");\nclass ProviderStream extends provider_1.default {\n constructor() {\n super(...arguments);\n this._reader = new stream_2.default(this._settings);\n }\n read(task) {\n const root = this._getRootDirectory(task);\n const options = this._getReaderOptions(task);\n const source = this.api(root, task, options);\n const destination = new stream_1.Readable({ objectMode: true, read: () => { } });\n source\n .once('error', (error) => destination.emit('error', error))\n .on('data', (entry) => destination.emit('data', options.transform(entry)))\n .once('end', () => destination.emit('end'));\n destination\n .once('close', () => source.destroy());\n return destination;\n }\n api(root, task, options) {\n if (task.dynamic) {\n return this._reader.dynamic(root, options);\n }\n return this._reader.static(task.patterns, options);\n }\n}\nexports.default = ProviderStream;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nclass ReaderSync extends reader_1.default {\n constructor() {\n super(...arguments);\n this._walkSync = fsWalk.walkSync;\n this._statSync = fsStat.statSync;\n }\n dynamic(root, options) {\n return this._walkSync(root, options);\n }\n static(patterns, options) {\n const entries = [];\n for (const pattern of patterns) {\n const filepath = this._getFullEntryPath(pattern);\n const entry = this._getEntry(filepath, pattern, options);\n if (entry === null || !options.entryFilter(entry)) {\n continue;\n }\n entries.push(entry);\n }\n return entries;\n }\n _getEntry(filepath, pattern, options) {\n try {\n const stats = this._getStat(filepath);\n return this._makeEntry(stats, pattern);\n }\n catch (error) {\n if (options.errorFilter(error)) {\n return null;\n }\n throw error;\n }\n }\n _getStat(filepath) {\n return this._statSync(filepath, this._fsStatSettings);\n }\n}\nexports.default = ReaderSync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst sync_1 = require(\"../readers/sync\");\nconst provider_1 = require(\"./provider\");\nclass ProviderSync extends provider_1.default {\n constructor() {\n super(...arguments);\n this._reader = new sync_1.default(this._settings);\n }\n read(task) {\n const root = this._getRootDirectory(task);\n const options = this._getReaderOptions(task);\n const entries = this.api(root, task, options);\n return entries.map(options.transform);\n }\n api(root, task, options) {\n if (task.dynamic) {\n return this._reader.dynamic(root, options);\n }\n return this._reader.static(task.patterns, options);\n }\n}\nexports.default = ProviderSync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nconst os = require(\"os\");\n/**\n * The `os.cpus` method can return zero. We expect the number of cores to be greater than zero.\n * https://github.com/nodejs/node/blob/7faeddf23a98c53896f8b574a6e66589e8fb1eb8/lib/os.js#L106-L107\n */\nconst CPU_COUNT = Math.max(os.cpus().length, 1);\nexports.DEFAULT_FILE_SYSTEM_ADAPTER = {\n lstat: fs.lstat,\n lstatSync: fs.lstatSync,\n stat: fs.stat,\n statSync: fs.statSync,\n readdir: fs.readdir,\n readdirSync: fs.readdirSync\n};\nclass Settings {\n constructor(_options = {}) {\n this._options = _options;\n this.absolute = this._getValue(this._options.absolute, false);\n this.baseNameMatch = this._getValue(this._options.baseNameMatch, false);\n this.braceExpansion = this._getValue(this._options.braceExpansion, true);\n this.caseSensitiveMatch = this._getValue(this._options.caseSensitiveMatch, true);\n this.concurrency = this._getValue(this._options.concurrency, CPU_COUNT);\n this.cwd = this._getValue(this._options.cwd, process.cwd());\n this.deep = this._getValue(this._options.deep, Infinity);\n this.dot = this._getValue(this._options.dot, false);\n this.extglob = this._getValue(this._options.extglob, true);\n this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, true);\n this.fs = this._getFileSystemMethods(this._options.fs);\n this.globstar = this._getValue(this._options.globstar, true);\n this.ignore = this._getValue(this._options.ignore, []);\n this.markDirectories = this._getValue(this._options.markDirectories, false);\n this.objectMode = this._getValue(this._options.objectMode, false);\n this.onlyDirectories = this._getValue(this._options.onlyDirectories, false);\n this.onlyFiles = this._getValue(this._options.onlyFiles, true);\n this.stats = this._getValue(this._options.stats, false);\n this.suppressErrors = this._getValue(this._options.suppressErrors, false);\n this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, false);\n this.unique = this._getValue(this._options.unique, true);\n if (this.onlyDirectories) {\n this.onlyFiles = false;\n }\n if (this.stats) {\n this.objectMode = true;\n }\n // Remove the cast to the array in the next major (#404).\n this.ignore = [].concat(this.ignore);\n }\n _getValue(option, value) {\n return option === undefined ? value : option;\n }\n _getFileSystemMethods(methods = {}) {\n return Object.assign(Object.assign({}, exports.DEFAULT_FILE_SYSTEM_ADAPTER), methods);\n }\n}\nexports.default = Settings;\n","\"use strict\";\nconst taskManager = require(\"./managers/tasks\");\nconst async_1 = require(\"./providers/async\");\nconst stream_1 = require(\"./providers/stream\");\nconst sync_1 = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nconst utils = require(\"./utils\");\nasync function FastGlob(source, options) {\n assertPatternsInput(source);\n const works = getWorks(source, async_1.default, options);\n const result = await Promise.all(works);\n return utils.array.flatten(result);\n}\n// https://github.com/typescript-eslint/typescript-eslint/issues/60\n// eslint-disable-next-line no-redeclare\n(function (FastGlob) {\n FastGlob.glob = FastGlob;\n FastGlob.globSync = sync;\n FastGlob.globStream = stream;\n FastGlob.async = FastGlob;\n function sync(source, options) {\n assertPatternsInput(source);\n const works = getWorks(source, sync_1.default, options);\n return utils.array.flatten(works);\n }\n FastGlob.sync = sync;\n function stream(source, options) {\n assertPatternsInput(source);\n const works = getWorks(source, stream_1.default, options);\n /**\n * The stream returned by the provider cannot work with an asynchronous iterator.\n * To support asynchronous iterators, regardless of the number of tasks, we always multiplex streams.\n * This affects performance (+25%). I don't see best solution right now.\n */\n return utils.stream.merge(works);\n }\n FastGlob.stream = stream;\n function generateTasks(source, options) {\n assertPatternsInput(source);\n const patterns = [].concat(source);\n const settings = new settings_1.default(options);\n return taskManager.generate(patterns, settings);\n }\n FastGlob.generateTasks = generateTasks;\n function isDynamicPattern(source, options) {\n assertPatternsInput(source);\n const settings = new settings_1.default(options);\n return utils.pattern.isDynamicPattern(source, settings);\n }\n FastGlob.isDynamicPattern = isDynamicPattern;\n function escapePath(source) {\n assertPatternsInput(source);\n return utils.path.escape(source);\n }\n FastGlob.escapePath = escapePath;\n function convertPathToPattern(source) {\n assertPatternsInput(source);\n return utils.path.convertPathToPattern(source);\n }\n FastGlob.convertPathToPattern = convertPathToPattern;\n let posix;\n (function (posix) {\n function escapePath(source) {\n assertPatternsInput(source);\n return utils.path.escapePosixPath(source);\n }\n posix.escapePath = escapePath;\n function convertPathToPattern(source) {\n assertPatternsInput(source);\n return utils.path.convertPosixPathToPattern(source);\n }\n posix.convertPathToPattern = convertPathToPattern;\n })(posix = FastGlob.posix || (FastGlob.posix = {}));\n let win32;\n (function (win32) {\n function escapePath(source) {\n assertPatternsInput(source);\n return utils.path.escapeWindowsPath(source);\n }\n win32.escapePath = escapePath;\n function convertPathToPattern(source) {\n assertPatternsInput(source);\n return utils.path.convertWindowsPathToPattern(source);\n }\n win32.convertPathToPattern = convertPathToPattern;\n })(win32 = FastGlob.win32 || (FastGlob.win32 = {}));\n})(FastGlob || (FastGlob = {}));\nfunction getWorks(source, _Provider, options) {\n const patterns = [].concat(source);\n const settings = new settings_1.default(options);\n const tasks = taskManager.generate(patterns, settings);\n const provider = new _Provider(settings);\n return tasks.map(provider.read, provider);\n}\nfunction assertPatternsInput(input) {\n const source = [].concat(input);\n const isValidSource = source.every((item) => utils.string.isString(item) && !utils.string.isEmpty(item));\n if (!isValidSource) {\n throw new TypeError('Patterns must be a string (non empty) or an array of strings');\n }\n}\nmodule.exports = FastGlob;\n","import { AgentFactory, CreateAgentOptions } from '@core/agent.factory';\nimport { Agent } from '@core/agent.interface';\nimport { PostgresSaver } from '@langchain/langgraph-checkpoint-postgres';\n// @ts-ignore -_-\nimport { PostgresStore } from '@langchain/langgraph-checkpoint-postgres/store';\nimport { CompositeBackend, StateBackend, StoreBackend } from 'deepagents';\nimport { AgentMiddleware, llmToolSelectorMiddleware, summarizationMiddleware, tool } from 'langchain';\nimport { CreateOptions, LangchainAgent } from './agent';\nimport { LangchainModelConfig, LangchainModelResolver } from './model-resolver';\n\nexport interface PostgresSaverConfig {\n\tconnString: string;\n\tschema: string;\n}\n\nexport interface PostgresStoreConfig {\n\tconnString: string;\n\tschema: string;\n}\n\nexport class LangchainAgentFactory implements AgentFactory {\n\tprivate modelResolver: LangchainModelResolver;\n\n\tconstructor(\n\t\tprivate modelConfig: LangchainModelConfig,\n\t\tprivate saverConfig: PostgresSaverConfig,\n\t\tprivate storeConfig: PostgresStoreConfig,\n\t) {\n\t\tthis.modelResolver = new LangchainModelResolver(this.modelConfig);\n\t}\n\n\tprivate buildMemorySystemPrompt(slots: { name: string; usedFor: string }[]): string {\n\t\tconst lines = [\n\t\t\t'Long-term memory is enabled.',\n\t\t\t'Persist memories using the filesystem tools under these path prefixes:',\n\t\t\t...slots.map((slot) => {\n\t\t\t\tconst prefix = this.normalizeStoreRoutePrefix(slot.name);\n\t\t\t\treturn `- ${prefix}: ${slot.usedFor}`;\n\t\t\t}),\n\t\t];\n\n\t\treturn lines.join('\\n');\n\t}\n\n\tprivate buildHandoffsSystemPrompt(handoffs: { name: string; description: string }[]): string {\n\t\tconst lines = [\n\t\t\t'You can delegate tasks to the following subagents:',\n\t\t\t...handoffs.map((handoff) => `- ${handoff.name}: ${handoff.description}`),\n\t\t];\n\n\t\treturn lines.join('\\n');\n\t}\n\n\tprivate normalizeStoreRoutePrefix(prefix: string): string {\n\t\tconst trimmedPrefix = prefix.trim();\n\t\tif (trimmedPrefix.length === 0) {\n\t\t\tthrow new Error('Memory slot name cannot be empty');\n\t\t}\n\n\t\tconst withLeadingSlash = trimmedPrefix.startsWith('/') ? trimmedPrefix : `/${trimmedPrefix}`;\n\t\treturn withLeadingSlash.endsWith('/') ? withLeadingSlash : `${withLeadingSlash}/`;\n\t}\n\n\tasync createAgent(options: CreateAgentOptions): Promise<Agent> {\n\t\tlet deepAgentOptions: CreateOptions = {\n\t\t\tmodel: this.modelResolver.resolve(options.model),\n\t\t};\n\n\t\tlet middlewares: AgentMiddleware[] = [];\n\t\tlet systemPrompt = options.instructions ?? '';\n\t\tlet disableStreamingForTools: string[] = [\n\t\t\t'write_todos',\n\t\t\t'ls',\n\t\t\t'read_file',\n\t\t\t'write_file',\n\t\t\t'edit_file',\n\t\t\t'glob',\n\t\t\t'grep',\n\t\t\t'task',\n\t\t];\n\t\tlet disableReportingForTools: string[] = disableStreamingForTools;\n\t\tlet disableModelStreamingFor: string[] = [];\n\n\t\tif (options.history) {\n\t\t\tconst checkpointer = PostgresSaver.fromConnString(this.saverConfig.connString, {\n\t\t\t\tschema: this.saverConfig.schema,\n\t\t\t});\n\n\t\t\tawait checkpointer.setup();\n\n\t\t\tdeepAgentOptions.checkpointer = checkpointer;\n\t\t}\n\n\t\tif (options.memory) {\n\t\t\tconst memorySystemPrompt = this.buildMemorySystemPrompt(options.memory.slots);\n\t\t\tsystemPrompt = systemPrompt ? `${systemPrompt}\\n\\n${memorySystemPrompt}` : memorySystemPrompt;\n\n\t\t\tdeepAgentOptions.store = new PostgresStore({\n\t\t\t\tconnectionOptions: this.storeConfig.connString,\n\t\t\t\tschema: this.storeConfig.schema,\n\t\t\t\tensureTables: true,\n\t\t\t});\n\t\t\t/**\n\t\t\t * StateBackend for ephemeral storage\n\t\t\t * StoreBackend for persistent storage\n\t\t\t */\n\t\t\tdeepAgentOptions.backend = (config) => {\n\t\t\t\tconst configWithAssistantId = { ...config, assistantId: options.memory?.assistantId };\n\t\t\t\tconst storeBackend = new StoreBackend(configWithAssistantId);\n\t\t\t\tconst routes = Object.fromEntries(\n\t\t\t\t\t(options.memory?.slots ?? []).map((slot) => {\n\t\t\t\t\t\tconst routePrefix = this.normalizeStoreRoutePrefix(slot.name);\n\t\t\t\t\t\treturn [routePrefix, storeBackend];\n\t\t\t\t\t}),\n\t\t\t\t);\n\n\t\t\t\treturn new CompositeBackend(new StateBackend(configWithAssistantId), {\n\t\t\t\t\t...routes,\n\t\t\t\t});\n\t\t\t};\n\t\t}\n\n\t\tif (options.tools) {\n\t\t\tdeepAgentOptions.tools = options.tools.tools.map((t) =>\n\t\t\t\ttool(\n\t\t\t\t\tasync (input, options) => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst res = await t.exec(input);\n\n\t\t\t\t\t\t\tif (typeof res === 'string') return res;\n\n\t\t\t\t\t\t\treturn JSON.stringify(res);\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tconsole.error('Error executing tool:', e);\n\t\t\t\t\t\t\treturn 'Something went wrong while executing the tool.';\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: t.name,\n\t\t\t\t\t\tdescription: t.description,\n\t\t\t\t\t\tschema: t.inputSchema,\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\ttoolKit: t.toolKit,\n\t\t\t\t\t\t\ttoolKitIconUrl: t.toolKitIconUrl,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t);\n\t\t\tmiddlewares.push(\n\t\t\t\tllmToolSelectorMiddleware({\n\t\t\t\t\tmodel: this.modelResolver.resolve(options.tools.model, ['tool-selector']),\n\t\t\t\t\tmaxTools: 128,\n\t\t\t\t\talwaysInclude: options.tools.alwaysIncludeTools ?? undefined,\n\t\t\t\t}),\n\t\t\t);\n\t\t\tdisableModelStreamingFor.push('tool-selector');\n\t\t}\n\n\t\tif (options.summarization)\n\t\t\tmiddlewares.push(\n\t\t\t\tsummarizationMiddleware({\n\t\t\t\t\tmodel: this.modelResolver.resolve(options.summarization.model),\n\t\t\t\t\ttrigger: {\n\t\t\t\t\t\ttokens: options.summarization.triggerAtTokens,\n\t\t\t\t\t},\n\t\t\t\t\tkeep: {\n\t\t\t\t\t\tmessages: options.summarization.keepMessages,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t);\n\n\t\tif (options.handoffs) {\n\t\t\toptions.handoffs.every((h) => {\n\t\t\t\tif (!(h.agent instanceof LangchainAgent)) {\n\t\t\t\t\tthrow new Error('Handoff agent must be an instance of LangchainAgent');\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tconst handoffsSystemPrompt = this.buildHandoffsSystemPrompt(options.handoffs);\n\t\t\tsystemPrompt = systemPrompt ? `${systemPrompt}\\n\\n${handoffsSystemPrompt}` : handoffsSystemPrompt;\n\n\t\t\tdeepAgentOptions.subagents = options.handoffs.map((h) => {\n\t\t\t\treturn {\n\t\t\t\t\tname: h.name,\n\t\t\t\t\tdescription: h.description,\n\t\t\t\t\trunnable: (h.agent as LangchainAgent).getLangchainAgent(),\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\n\t\tif (middlewares.length > 0) deepAgentOptions.middleware = middlewares;\n\n\t\tif (systemPrompt) deepAgentOptions.systemPrompt = systemPrompt;\n\n\t\tdeepAgentOptions.disableModelStreamingFor = disableModelStreamingFor;\n\t\tdeepAgentOptions.disableToolReportingFor = disableReportingForTools;\n\t\tdeepAgentOptions.disableToolStreamingFor = disableStreamingForTools;\n\n\t\treturn new LangchainAgent(deepAgentOptions);\n\t}\n}\n","/**\n * Protocol definition for pluggable memory backends.\n *\n * This module defines the BackendProtocol that all backend implementations\n * must follow. Backends can store files in different locations (state, filesystem,\n * database, etc.) and provide a uniform interface for file operations.\n */\n\nimport type { BaseStore } from \"@langchain/langgraph-checkpoint\";\n\nexport type MaybePromise<T> = T | Promise<T>;\n\n/**\n * Structured file listing info.\n *\n * Minimal contract used across backends. Only \"path\" is required.\n * Other fields are best-effort and may be absent depending on backend.\n */\nexport interface FileInfo {\n /** File path */\n path: string;\n /** Whether this is a directory */\n is_dir?: boolean;\n /** File size in bytes (approximate) */\n size?: number;\n /** ISO 8601 timestamp of last modification */\n modified_at?: string;\n}\n\n/**\n * Structured grep match entry.\n */\nexport interface GrepMatch {\n /** File path where match was found */\n path: string;\n /** Line number (1-indexed) */\n line: number;\n /** The matching line text */\n text: string;\n}\n\n/**\n * File data structure used by backends.\n *\n * All file data is represented as objects with this structure:\n */\nexport interface FileData {\n /** Lines of text content */\n content: string[];\n /** ISO format timestamp of creation */\n created_at: string;\n /** ISO format timestamp of last modification */\n modified_at: string;\n}\n\n/**\n * Result from backend write operations.\n *\n * Checkpoint backends populate filesUpdate with {file_path: file_data} for LangGraph state.\n * External backends set filesUpdate to null (already persisted to disk/S3/database/etc).\n */\nexport interface WriteResult {\n /** Error message on failure, undefined on success */\n error?: string;\n /** File path of written file, undefined on failure */\n path?: string;\n /**\n * State update dict for checkpoint backends, null for external storage.\n * Checkpoint backends populate this with {file_path: file_data} for LangGraph state.\n * External backends set null (already persisted to disk/S3/database/etc).\n */\n filesUpdate?: Record<string, FileData> | null;\n /** Metadata for the write operation, attached to the ToolMessage */\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Result from backend edit operations.\n *\n * Checkpoint backends populate filesUpdate with {file_path: file_data} for LangGraph state.\n * External backends set filesUpdate to null (already persisted to disk/S3/database/etc).\n */\nexport interface EditResult {\n /** Error message on failure, undefined on success */\n error?: string;\n /** File path of edited file, undefined on failure */\n path?: string;\n /**\n * State update dict for checkpoint backends, null for external storage.\n * Checkpoint backends populate this with {file_path: file_data} for LangGraph state.\n * External backends set null (already persisted to disk/S3/database/etc).\n */\n filesUpdate?: Record<string, FileData> | null;\n /** Number of replacements made, undefined on failure */\n occurrences?: number;\n /** Metadata for the edit operation, attached to the ToolMessage */\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Result of code execution.\n * Simplified schema optimized for LLM consumption.\n */\nexport interface ExecuteResponse {\n /** Combined stdout and stderr output of the executed command */\n output: string;\n /** The process exit code. 0 indicates success, non-zero indicates failure */\n exitCode: number | null;\n /** Whether the output was truncated due to backend limitations */\n truncated: boolean;\n}\n\n/**\n * Standardized error codes for file upload/download operations.\n */\nexport type FileOperationError =\n | \"file_not_found\"\n | \"permission_denied\"\n | \"is_directory\"\n | \"invalid_path\";\n\n/**\n * Result of a single file download operation.\n */\nexport interface FileDownloadResponse {\n /** The file path that was requested */\n path: string;\n /** File contents as Uint8Array on success, null on failure */\n content: Uint8Array | null;\n /** Standardized error code on failure, null on success */\n error: FileOperationError | null;\n}\n\n/**\n * Result of a single file upload operation.\n */\nexport interface FileUploadResponse {\n /** The file path that was requested */\n path: string;\n /** Standardized error code on failure, null on success */\n error: FileOperationError | null;\n}\n\n/**\n * Protocol for pluggable memory backends (single, unified).\n *\n * Backends can store files in different locations (state, filesystem, database, etc.)\n * and provide a uniform interface for file operations.\n *\n * All file data is represented as objects with the FileData structure.\n *\n * Methods can return either direct values or Promises, allowing both\n * synchronous and asynchronous implementations.\n */\nexport interface BackendProtocol {\n /**\n * Structured listing with file metadata.\n *\n * Lists files and directories in the specified directory (non-recursive).\n * Directories have a trailing / in their path and is_dir=true.\n *\n * @param path - Absolute path to directory\n * @returns List of FileInfo objects for files and directories directly in the directory\n */\n lsInfo(path: string): MaybePromise<FileInfo[]>;\n\n /**\n * Read file content with line numbers or an error string.\n *\n * @param filePath - Absolute file path\n * @param offset - Line offset to start reading from (0-indexed), default 0\n * @param limit - Maximum number of lines to read, default 500\n * @returns Formatted file content with line numbers, or error message\n */\n read(filePath: string, offset?: number, limit?: number): MaybePromise<string>;\n\n /**\n * Read file content as raw FileData.\n *\n * @param filePath - Absolute file path\n * @returns Raw file content as FileData\n */\n readRaw(filePath: string): MaybePromise<FileData>;\n\n /**\n * Structured search results or error string for invalid input.\n *\n * Searches file contents for a regex pattern.\n *\n * @param pattern - Regex pattern to search for\n * @param path - Base path to search from (default: null)\n * @param glob - Optional glob pattern to filter files (e.g., \"*.py\")\n * @returns List of GrepMatch objects or error string for invalid regex\n */\n grepRaw(\n pattern: string,\n path?: string | null,\n glob?: string | null,\n ): MaybePromise<GrepMatch[] | string>;\n\n /**\n * Structured glob matching returning FileInfo objects.\n *\n * @param pattern - Glob pattern (e.g., `*.py`, `**\\/*.ts`)\n * @param path - Base path to search from (default: \"/\")\n * @returns List of FileInfo objects matching the pattern\n */\n globInfo(pattern: string, path?: string): MaybePromise<FileInfo[]>;\n\n /**\n * Create a new file.\n *\n * @param filePath - Absolute file path\n * @param content - File content as string\n * @returns WriteResult with error populated on failure\n */\n write(filePath: string, content: string): MaybePromise<WriteResult>;\n\n /**\n * Edit a file by replacing string occurrences.\n *\n * @param filePath - Absolute file path\n * @param oldString - String to find and replace\n * @param newString - Replacement string\n * @param replaceAll - If true, replace all occurrences (default: false)\n * @returns EditResult with error, path, filesUpdate, and occurrences\n */\n edit(\n filePath: string,\n oldString: string,\n newString: string,\n replaceAll?: boolean,\n ): MaybePromise<EditResult>;\n\n /**\n * Upload multiple files.\n * Optional - backends that don't support file upload can omit this.\n *\n * @param files - List of [path, content] tuples to upload\n * @returns List of FileUploadResponse objects, one per input file\n */\n uploadFiles?(\n files: Array<[string, Uint8Array]>,\n ): MaybePromise<FileUploadResponse[]>;\n\n /**\n * Download multiple files.\n * Optional - backends that don't support file download can omit this.\n *\n * @param paths - List of file paths to download\n * @returns List of FileDownloadResponse objects, one per input path\n */\n downloadFiles?(paths: string[]): MaybePromise<FileDownloadResponse[]>;\n}\n\n/**\n * Protocol for sandboxed backends with isolated runtime.\n * Sandboxed backends run in isolated environments (e.g., containers)\n * and communicate via defined interfaces.\n */\nexport interface SandboxBackendProtocol extends BackendProtocol {\n /**\n * Execute a command in the sandbox.\n *\n * @param command - Full shell command string to execute\n * @returns ExecuteResponse with combined output, exit code, and truncation flag\n */\n execute(command: string): MaybePromise<ExecuteResponse>;\n\n /** Unique identifier for the sandbox backend instance */\n readonly id: string;\n}\n\n/**\n * Type guard to check if a backend supports execution.\n *\n * @param backend - Backend instance to check\n * @returns True if the backend implements SandboxBackendProtocol\n */\nexport function isSandboxBackend(\n backend: BackendProtocol,\n): backend is SandboxBackendProtocol {\n return (\n typeof (backend as SandboxBackendProtocol).execute === \"function\" &&\n typeof (backend as SandboxBackendProtocol).id === \"string\"\n );\n}\n\n/**\n * State and store container for backend initialization.\n *\n * This provides a clean interface for what backends need to access:\n * - state: Current agent state (with files, messages, etc.)\n * - store: Optional persistent store for cross-conversation data\n *\n * Different contexts build this differently:\n * - Tools: Extract state via getCurrentTaskInput(config)\n * - Middleware: Use request.state directly\n */\nexport interface StateAndStore {\n /** Current agent state with files, messages, etc. */\n state: unknown;\n /** Optional BaseStore for persistent cross-conversation storage */\n store?: BaseStore;\n /** Optional assistant ID for per-assistant isolation in store */\n assistantId?: string;\n}\n\n/**\n * Factory function type for creating backend instances.\n *\n * Backends receive StateAndStore which contains the current state\n * and optional store, extracted from the execution context.\n *\n * @example\n * ```typescript\n * // Using in middleware\n * const middleware = createFilesystemMiddleware({\n * backend: (stateAndStore) => new StateBackend(stateAndStore)\n * });\n * ```\n */\nexport type BackendFactory = (stateAndStore: StateAndStore) => BackendProtocol;\n","/**\n * Shared utility functions for memory backend implementations.\n *\n * This module contains both user-facing string formatters and structured\n * helpers used by backends and the composite router. Structured helpers\n * enable composition without fragile string parsing.\n */\n\nimport micromatch from \"micromatch\";\nimport { basename } from \"path\";\nimport type { FileData, GrepMatch } from \"./protocol.js\";\n\n// Constants\nexport const EMPTY_CONTENT_WARNING =\n \"System reminder: File exists but has empty contents\";\nexport const MAX_LINE_LENGTH = 10000;\nexport const LINE_NUMBER_WIDTH = 6;\nexport const TOOL_RESULT_TOKEN_LIMIT = 20000; // Same threshold as eviction\nexport const TRUNCATION_GUIDANCE =\n \"... [results truncated, try being more specific with your parameters]\";\n\n/**\n * Sanitize tool_call_id to prevent path traversal and separator issues.\n *\n * Replaces dangerous characters (., /, \\) with underscores.\n */\nexport function sanitizeToolCallId(toolCallId: string): string {\n return toolCallId.replace(/\\./g, \"_\").replace(/\\//g, \"_\").replace(/\\\\/g, \"_\");\n}\n\n/**\n * Format file content with line numbers (cat -n style).\n *\n * Chunks lines longer than MAX_LINE_LENGTH with continuation markers (e.g., 5.1, 5.2).\n *\n * @param content - File content as string or list of lines\n * @param startLine - Starting line number (default: 1)\n * @returns Formatted content with line numbers and continuation markers\n */\nexport function formatContentWithLineNumbers(\n content: string | string[],\n startLine: number = 1,\n): string {\n let lines: string[];\n if (typeof content === \"string\") {\n lines = content.split(\"\\n\");\n if (lines.length > 0 && lines[lines.length - 1] === \"\") {\n lines = lines.slice(0, -1);\n }\n } else {\n lines = content;\n }\n\n const resultLines: string[] = [];\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const lineNum = i + startLine;\n\n if (line.length <= MAX_LINE_LENGTH) {\n resultLines.push(\n `${lineNum.toString().padStart(LINE_NUMBER_WIDTH)}\\t${line}`,\n );\n } else {\n // Split long line into chunks with continuation markers\n const numChunks = Math.ceil(line.length / MAX_LINE_LENGTH);\n for (let chunkIdx = 0; chunkIdx < numChunks; chunkIdx++) {\n const start = chunkIdx * MAX_LINE_LENGTH;\n const end = Math.min(start + MAX_LINE_LENGTH, line.length);\n const chunk = line.substring(start, end);\n if (chunkIdx === 0) {\n // First chunk: use normal line number\n resultLines.push(\n `${lineNum.toString().padStart(LINE_NUMBER_WIDTH)}\\t${chunk}`,\n );\n } else {\n // Continuation chunks: use decimal notation (e.g., 5.1, 5.2)\n const continuationMarker = `${lineNum}.${chunkIdx}`;\n resultLines.push(\n `${continuationMarker.padStart(LINE_NUMBER_WIDTH)}\\t${chunk}`,\n );\n }\n }\n }\n }\n\n return resultLines.join(\"\\n\");\n}\n\n/**\n * Check if content is empty and return warning message.\n *\n * @param content - Content to check\n * @returns Warning message if empty, null otherwise\n */\nexport function checkEmptyContent(content: string): string | null {\n if (!content || content.trim() === \"\") {\n return EMPTY_CONTENT_WARNING;\n }\n return null;\n}\n\n/**\n * Convert FileData to plain string content.\n *\n * @param fileData - FileData object with 'content' key\n * @returns Content as string with lines joined by newlines\n */\nexport function fileDataToString(fileData: FileData): string {\n return fileData.content.join(\"\\n\");\n}\n\n/**\n * Create a FileData object with timestamps.\n *\n * @param content - File content as string\n * @param createdAt - Optional creation timestamp (ISO format)\n * @returns FileData object with content and timestamps\n */\nexport function createFileData(content: string, createdAt?: string): FileData {\n const lines = typeof content === \"string\" ? content.split(\"\\n\") : content;\n const now = new Date().toISOString();\n\n return {\n content: lines,\n created_at: createdAt || now,\n modified_at: now,\n };\n}\n\n/**\n * Update FileData with new content, preserving creation timestamp.\n *\n * @param fileData - Existing FileData object\n * @param content - New content as string\n * @returns Updated FileData object\n */\nexport function updateFileData(fileData: FileData, content: string): FileData {\n const lines = typeof content === \"string\" ? content.split(\"\\n\") : content;\n const now = new Date().toISOString();\n\n return {\n content: lines,\n created_at: fileData.created_at,\n modified_at: now,\n };\n}\n\n/**\n * Format file data for read response with line numbers.\n *\n * @param fileData - FileData object\n * @param offset - Line offset (0-indexed)\n * @param limit - Maximum number of lines\n * @returns Formatted content or error message\n */\nexport function formatReadResponse(\n fileData: FileData,\n offset: number,\n limit: number,\n): string {\n const content = fileDataToString(fileData);\n const emptyMsg = checkEmptyContent(content);\n if (emptyMsg) {\n return emptyMsg;\n }\n\n const lines = content.split(\"\\n\");\n const startIdx = offset;\n const endIdx = Math.min(startIdx + limit, lines.length);\n\n if (startIdx >= lines.length) {\n return `Error: Line offset ${offset} exceeds file length (${lines.length} lines)`;\n }\n\n const selectedLines = lines.slice(startIdx, endIdx);\n return formatContentWithLineNumbers(selectedLines, startIdx + 1);\n}\n\n/**\n * Perform string replacement with occurrence validation.\n *\n * @param content - Original content\n * @param oldString - String to replace\n * @param newString - Replacement string\n * @param replaceAll - Whether to replace all occurrences\n * @returns Tuple of [new_content, occurrences] on success, or error message string\n */\nexport function performStringReplacement(\n content: string,\n oldString: string,\n newString: string,\n replaceAll: boolean,\n): [string, number] | string {\n // Use split to count occurrences (simpler than regex)\n const occurrences = content.split(oldString).length - 1;\n\n if (occurrences === 0) {\n return `Error: String not found in file: '${oldString}'`;\n }\n\n if (occurrences > 1 && !replaceAll) {\n return `Error: String '${oldString}' appears ${occurrences} times in file. Use replace_all=True to replace all instances, or provide a more specific string with surrounding context.`;\n }\n\n // Python's str.replace() replaces ALL occurrences\n // Use split/join for consistent behavior\n const newContent = content.split(oldString).join(newString);\n\n return [newContent, occurrences];\n}\n\n/**\n * Truncate list or string result if it exceeds token limit (rough estimate: 4 chars/token).\n */\nexport function truncateIfTooLong(\n result: string[] | string,\n): string[] | string {\n if (Array.isArray(result)) {\n const totalChars = result.reduce((sum, item) => sum + item.length, 0);\n if (totalChars > TOOL_RESULT_TOKEN_LIMIT * 4) {\n const truncateAt = Math.floor(\n (result.length * TOOL_RESULT_TOKEN_LIMIT * 4) / totalChars,\n );\n return [...result.slice(0, truncateAt), TRUNCATION_GUIDANCE];\n }\n return result;\n }\n // string\n if (result.length > TOOL_RESULT_TOKEN_LIMIT * 4) {\n return (\n result.substring(0, TOOL_RESULT_TOKEN_LIMIT * 4) +\n \"\\n\" +\n TRUNCATION_GUIDANCE\n );\n }\n return result;\n}\n\n/**\n * Validate and normalize a directory path.\n *\n * Ensures paths are safe to use by preventing directory traversal attacks\n * and enforcing consistent formatting. All paths are normalized to use\n * forward slashes and start with a leading slash.\n *\n * This function is designed for virtual filesystem paths and rejects\n * Windows absolute paths (e.g., C:/..., F:/...) to maintain consistency\n * and prevent path format ambiguity.\n *\n * @param path - Path to validate\n * @returns Normalized path starting with / and ending with /\n * @throws Error if path is invalid\n *\n * @example\n * ```typescript\n * validatePath(\"foo/bar\") // Returns: \"/foo/bar/\"\n * validatePath(\"/./foo//bar\") // Returns: \"/foo/bar/\"\n * validatePath(\"../etc/passwd\") // Throws: Path traversal not allowed\n * validatePath(\"C:\\\\Users\\\\file\") // Throws: Windows absolute paths not supported\n * ```\n */\nexport function validatePath(path: string | null | undefined): string {\n const pathStr = path || \"/\";\n if (!pathStr || pathStr.trim() === \"\") {\n throw new Error(\"Path cannot be empty\");\n }\n\n let normalized = pathStr.startsWith(\"/\") ? pathStr : \"/\" + pathStr;\n\n if (!normalized.endsWith(\"/\")) {\n normalized += \"/\";\n }\n\n return normalized;\n}\n\n/**\n * Validate and normalize a file path for security.\n *\n * Ensures paths are safe to use by preventing directory traversal attacks\n * and enforcing consistent formatting. All paths are normalized to use\n * forward slashes and start with a leading slash.\n *\n * This function is designed for virtual filesystem paths and rejects\n * Windows absolute paths (e.g., C:/..., F:/...) to maintain consistency\n * and prevent path format ambiguity.\n *\n * @param path - The path to validate and normalize.\n * @param allowedPrefixes - Optional list of allowed path prefixes. If provided,\n * the normalized path must start with one of these prefixes.\n * @returns Normalized canonical path starting with `/` and using forward slashes.\n * @throws Error if path contains traversal sequences (`..` or `~`), is a Windows\n * absolute path (e.g., C:/...), or does not start with an allowed prefix\n * when `allowedPrefixes` is specified.\n *\n * @example\n * ```typescript\n * validateFilePath(\"foo/bar\") // Returns: \"/foo/bar\"\n * validateFilePath(\"/./foo//bar\") // Returns: \"/foo/bar\"\n * validateFilePath(\"../etc/passwd\") // Throws: Path traversal not allowed\n * validateFilePath(\"C:\\\\Users\\\\file.txt\") // Throws: Windows absolute paths not supported\n * validateFilePath(\"/data/file.txt\", [\"/data/\"]) // Returns: \"/data/file.txt\"\n * validateFilePath(\"/etc/file.txt\", [\"/data/\"]) // Throws: Path must start with...\n * ```\n */\nexport function validateFilePath(\n path: string,\n allowedPrefixes?: string[],\n): string {\n // Check for path traversal\n if (path.includes(\"..\") || path.startsWith(\"~\")) {\n throw new Error(`Path traversal not allowed: ${path}`);\n }\n\n // Reject Windows absolute paths (e.g., C:\\..., D:/...)\n // This maintains consistency in virtual filesystem paths\n if (/^[a-zA-Z]:/.test(path)) {\n throw new Error(\n `Windows absolute paths are not supported: ${path}. Please use virtual paths starting with / (e.g., /workspace/file.txt)`,\n );\n }\n\n // Normalize path separators and remove redundant slashes\n let normalized = path.replace(/\\\\/g, \"/\");\n\n // Remove redundant path components (./foo becomes foo, foo//bar becomes foo/bar)\n const parts: string[] = [];\n for (const part of normalized.split(\"/\")) {\n if (part === \".\" || part === \"\") {\n continue;\n }\n parts.push(part);\n }\n normalized = \"/\" + parts.join(\"/\");\n\n // Check allowed prefixes if provided\n if (\n allowedPrefixes &&\n !allowedPrefixes.some((prefix) => normalized.startsWith(prefix))\n ) {\n throw new Error(\n `Path must start with one of ${JSON.stringify(allowedPrefixes)}: ${path}`,\n );\n }\n\n return normalized;\n}\n\n/**\n * Search files dict for paths matching glob pattern.\n *\n * @param files - Dictionary of file paths to FileData\n * @param pattern - Glob pattern (e.g., `*.py`, `**\\/*.ts`)\n * @param path - Base path to search from\n * @returns Newline-separated file paths, sorted by modification time (most recent first).\n * Returns \"No files found\" if no matches.\n *\n * @example\n * ```typescript\n * const files = {\"/src/main.py\": FileData(...), \"/test.py\": FileData(...)};\n * globSearchFiles(files, \"*.py\", \"/\");\n * // Returns: \"/test.py\\n/src/main.py\" (sorted by modified_at)\n * ```\n */\nexport function globSearchFiles(\n files: Record<string, FileData>,\n pattern: string,\n path: string = \"/\",\n): string {\n let normalizedPath: string;\n try {\n normalizedPath = validatePath(path);\n } catch {\n return \"No files found\";\n }\n\n const filtered = Object.fromEntries(\n Object.entries(files).filter(([fp]) => fp.startsWith(normalizedPath)),\n );\n\n // Respect standard glob semantics:\n // - Patterns without path separators (e.g., \"*.py\") match only in the current\n // directory (non-recursive) relative to `path`.\n // - Use \"**\" explicitly for recursive matching.\n const effectivePattern = pattern;\n\n const matches: Array<[string, string]> = [];\n for (const [filePath, fileData] of Object.entries(filtered)) {\n let relative = filePath.substring(normalizedPath.length);\n if (relative.startsWith(\"/\")) {\n relative = relative.substring(1);\n }\n if (!relative) {\n const parts = filePath.split(\"/\");\n relative = parts[parts.length - 1] || \"\";\n }\n\n if (\n micromatch.isMatch(relative, effectivePattern, {\n dot: true,\n nobrace: false,\n })\n ) {\n matches.push([filePath, fileData.modified_at]);\n }\n }\n\n matches.sort((a, b) => b[1].localeCompare(a[1])); // Sort by modified_at descending\n\n if (matches.length === 0) {\n return \"No files found\";\n }\n\n return matches.map(([fp]) => fp).join(\"\\n\");\n}\n\n/**\n * Format grep search results based on output mode.\n *\n * @param results - Dictionary mapping file paths to list of [line_num, line_content] tuples\n * @param outputMode - Output format - \"files_with_matches\", \"content\", or \"count\"\n * @returns Formatted string output\n */\nexport function formatGrepResults(\n results: Record<string, Array<[number, string]>>,\n outputMode: \"files_with_matches\" | \"content\" | \"count\",\n): string {\n if (outputMode === \"files_with_matches\") {\n return Object.keys(results).sort().join(\"\\n\");\n }\n if (outputMode === \"count\") {\n const lines: string[] = [];\n for (const filePath of Object.keys(results).sort()) {\n const count = results[filePath].length;\n lines.push(`${filePath}: ${count}`);\n }\n return lines.join(\"\\n\");\n }\n // content mode\n const lines: string[] = [];\n for (const filePath of Object.keys(results).sort()) {\n lines.push(`${filePath}:`);\n for (const [lineNum, line] of results[filePath]) {\n lines.push(` ${lineNum}: ${line}`);\n }\n }\n return lines.join(\"\\n\");\n}\n\n/**\n * Search file contents for regex pattern.\n *\n * @param files - Dictionary of file paths to FileData\n * @param pattern - Regex pattern to search for\n * @param path - Base path to search from\n * @param glob - Optional glob pattern to filter files (e.g., \"*.py\")\n * @param outputMode - Output format - \"files_with_matches\", \"content\", or \"count\"\n * @returns Formatted search results. Returns \"No matches found\" if no results.\n *\n * @example\n * ```typescript\n * const files = {\"/file.py\": FileData({content: [\"import os\", \"print('hi')\"], ...})};\n * grepSearchFiles(files, \"import\", \"/\");\n * // Returns: \"/file.py\" (with output_mode=\"files_with_matches\")\n * ```\n */\nexport function grepSearchFiles(\n files: Record<string, FileData>,\n pattern: string,\n path: string | null = null,\n glob: string | null = null,\n outputMode: \"files_with_matches\" | \"content\" | \"count\" = \"files_with_matches\",\n): string {\n let regex: RegExp;\n try {\n regex = new RegExp(pattern);\n } catch (e: any) {\n return `Invalid regex pattern: ${e.message}`;\n }\n\n let normalizedPath: string;\n try {\n normalizedPath = validatePath(path);\n } catch {\n return \"No matches found\";\n }\n\n let filtered = Object.fromEntries(\n Object.entries(files).filter(([fp]) => fp.startsWith(normalizedPath)),\n );\n\n if (glob) {\n filtered = Object.fromEntries(\n Object.entries(filtered).filter(([fp]) =>\n micromatch.isMatch(basename(fp), glob, { dot: true, nobrace: false }),\n ),\n );\n }\n\n const results: Record<string, Array<[number, string]>> = {};\n for (const [filePath, fileData] of Object.entries(filtered)) {\n for (let i = 0; i < fileData.content.length; i++) {\n const line = fileData.content[i];\n const lineNum = i + 1;\n if (regex.test(line)) {\n if (!results[filePath]) {\n results[filePath] = [];\n }\n results[filePath].push([lineNum, line]);\n }\n }\n }\n\n if (Object.keys(results).length === 0) {\n return \"No matches found\";\n }\n return formatGrepResults(results, outputMode);\n}\n\n// -------- Structured helpers for composition --------\n\n/**\n * Return structured grep matches from an in-memory files mapping.\n *\n * Returns a list of GrepMatch on success, or a string for invalid inputs\n * (e.g., invalid regex). We deliberately do not raise here to keep backends\n * non-throwing in tool contexts and preserve user-facing error messages.\n */\nexport function grepMatchesFromFiles(\n files: Record<string, FileData>,\n pattern: string,\n path: string | null = null,\n glob: string | null = null,\n): GrepMatch[] | string {\n let regex: RegExp;\n try {\n regex = new RegExp(pattern);\n } catch (e: any) {\n return `Invalid regex pattern: ${e.message}`;\n }\n\n let normalizedPath: string;\n try {\n normalizedPath = validatePath(path);\n } catch {\n return [];\n }\n\n let filtered = Object.fromEntries(\n Object.entries(files).filter(([fp]) => fp.startsWith(normalizedPath)),\n );\n\n if (glob) {\n filtered = Object.fromEntries(\n Object.entries(filtered).filter(([fp]) =>\n micromatch.isMatch(basename(fp), glob, { dot: true, nobrace: false }),\n ),\n );\n }\n\n const matches: GrepMatch[] = [];\n for (const [filePath, fileData] of Object.entries(filtered)) {\n for (let i = 0; i < fileData.content.length; i++) {\n const line = fileData.content[i];\n const lineNum = i + 1;\n if (regex.test(line)) {\n matches.push({ path: filePath, line: lineNum, text: line });\n }\n }\n }\n\n return matches;\n}\n\n/**\n * Group structured matches into the legacy dict form used by formatters.\n */\nexport function buildGrepResultsDict(\n matches: GrepMatch[],\n): Record<string, Array<[number, string]>> {\n const grouped: Record<string, Array<[number, string]>> = {};\n for (const m of matches) {\n if (!grouped[m.path]) {\n grouped[m.path] = [];\n }\n grouped[m.path].push([m.line, m.text]);\n }\n return grouped;\n}\n\n/**\n * Format structured grep matches using existing formatting logic.\n */\nexport function formatGrepMatches(\n matches: GrepMatch[],\n outputMode: \"files_with_matches\" | \"content\" | \"count\",\n): string {\n if (matches.length === 0) {\n return \"No matches found\";\n }\n return formatGrepResults(buildGrepResultsDict(matches), outputMode);\n}\n","/**\n * StateBackend: Store files in LangGraph agent state (ephemeral).\n */\n\nimport type {\n BackendProtocol,\n EditResult,\n FileData,\n FileDownloadResponse,\n FileInfo,\n FileUploadResponse,\n GrepMatch,\n StateAndStore,\n WriteResult,\n} from \"./protocol.js\";\nimport {\n createFileData,\n fileDataToString,\n formatReadResponse,\n globSearchFiles,\n grepMatchesFromFiles,\n performStringReplacement,\n updateFileData,\n} from \"./utils.js\";\n\n/**\n * Backend that stores files in agent state (ephemeral).\n *\n * Uses LangGraph's state management and checkpointing. Files persist within\n * a conversation thread but not across threads. State is automatically\n * checkpointed after each agent step.\n *\n * Special handling: Since LangGraph state must be updated via Command objects\n * (not direct mutation), operations return filesUpdate in WriteResult/EditResult\n * for the middleware to apply via Command.\n */\nexport class StateBackend implements BackendProtocol {\n private stateAndStore: StateAndStore;\n\n constructor(stateAndStore: StateAndStore) {\n this.stateAndStore = stateAndStore;\n }\n\n /**\n * Get files from current state.\n */\n private getFiles(): Record<string, FileData> {\n return (\n ((this.stateAndStore.state as any).files as Record<string, FileData>) ||\n {}\n );\n }\n\n /**\n * List files and directories in the specified directory (non-recursive).\n *\n * @param path - Absolute path to directory\n * @returns List of FileInfo objects for files and directories directly in the directory.\n * Directories have a trailing / in their path and is_dir=true.\n */\n lsInfo(path: string): FileInfo[] {\n const files = this.getFiles();\n const infos: FileInfo[] = [];\n const subdirs = new Set<string>();\n\n // Normalize path to have trailing slash for proper prefix matching\n const normalizedPath = path.endsWith(\"/\") ? path : path + \"/\";\n\n for (const [k, fd] of Object.entries(files)) {\n // Check if file is in the specified directory or a subdirectory\n if (!k.startsWith(normalizedPath)) {\n continue;\n }\n\n // Get the relative path after the directory\n const relative = k.substring(normalizedPath.length);\n\n // If relative path contains '/', it's in a subdirectory\n if (relative.includes(\"/\")) {\n // Extract the immediate subdirectory name\n const subdirName = relative.split(\"/\")[0];\n subdirs.add(normalizedPath + subdirName + \"/\");\n continue;\n }\n\n // This is a file directly in the current directory\n const size = fd.content.join(\"\\n\").length;\n infos.push({\n path: k,\n is_dir: false,\n size: size,\n modified_at: fd.modified_at,\n });\n }\n\n // Add directories to the results\n for (const subdir of Array.from(subdirs).sort()) {\n infos.push({\n path: subdir,\n is_dir: true,\n size: 0,\n modified_at: \"\",\n });\n }\n\n infos.sort((a, b) => a.path.localeCompare(b.path));\n return infos;\n }\n\n /**\n * Read file content with line numbers.\n *\n * @param filePath - Absolute file path\n * @param offset - Line offset to start reading from (0-indexed)\n * @param limit - Maximum number of lines to read\n * @returns Formatted file content with line numbers, or error message\n */\n read(filePath: string, offset: number = 0, limit: number = 500): string {\n const files = this.getFiles();\n const fileData = files[filePath];\n\n if (!fileData) {\n return `Error: File '${filePath}' not found`;\n }\n\n return formatReadResponse(fileData, offset, limit);\n }\n\n /**\n * Read file content as raw FileData.\n *\n * @param filePath - Absolute file path\n * @returns Raw file content as FileData\n */\n readRaw(filePath: string): FileData {\n const files = this.getFiles();\n const fileData = files[filePath];\n\n if (!fileData) throw new Error(`File '${filePath}' not found`);\n return fileData;\n }\n\n /**\n * Create a new file with content.\n * Returns WriteResult with filesUpdate to update LangGraph state.\n */\n write(filePath: string, content: string): WriteResult {\n const files = this.getFiles();\n\n if (filePath in files) {\n return {\n error: `Cannot write to ${filePath} because it already exists. Read and then make an edit, or write to a new path.`,\n };\n }\n\n const newFileData = createFileData(content);\n return {\n path: filePath,\n filesUpdate: { [filePath]: newFileData },\n };\n }\n\n /**\n * Edit a file by replacing string occurrences.\n * Returns EditResult with filesUpdate and occurrences.\n */\n edit(\n filePath: string,\n oldString: string,\n newString: string,\n replaceAll: boolean = false,\n ): EditResult {\n const files = this.getFiles();\n const fileData = files[filePath];\n\n if (!fileData) {\n return { error: `Error: File '${filePath}' not found` };\n }\n\n const content = fileDataToString(fileData);\n const result = performStringReplacement(\n content,\n oldString,\n newString,\n replaceAll,\n );\n\n if (typeof result === \"string\") {\n return { error: result };\n }\n\n const [newContent, occurrences] = result;\n const newFileData = updateFileData(fileData, newContent);\n return {\n path: filePath,\n filesUpdate: { [filePath]: newFileData },\n occurrences: occurrences,\n };\n }\n\n /**\n * Structured search results or error string for invalid input.\n */\n grepRaw(\n pattern: string,\n path: string = \"/\",\n glob: string | null = null,\n ): GrepMatch[] | string {\n const files = this.getFiles();\n return grepMatchesFromFiles(files, pattern, path, glob);\n }\n\n /**\n * Structured glob matching returning FileInfo objects.\n */\n globInfo(pattern: string, path: string = \"/\"): FileInfo[] {\n const files = this.getFiles();\n const result = globSearchFiles(files, pattern, path);\n\n if (result === \"No files found\") {\n return [];\n }\n\n const paths = result.split(\"\\n\");\n const infos: FileInfo[] = [];\n for (const p of paths) {\n const fd = files[p];\n const size = fd ? fd.content.join(\"\\n\").length : 0;\n infos.push({\n path: p,\n is_dir: false,\n size: size,\n modified_at: fd?.modified_at || \"\",\n });\n }\n return infos;\n }\n\n /**\n * Upload multiple files.\n *\n * Note: Since LangGraph state must be updated via Command objects,\n * the caller must apply filesUpdate via Command after calling this method.\n *\n * @param files - List of [path, content] tuples to upload\n * @returns List of FileUploadResponse objects, one per input file\n */\n uploadFiles(\n files: Array<[string, Uint8Array]>,\n ): FileUploadResponse[] & { filesUpdate?: Record<string, FileData> } {\n const responses: FileUploadResponse[] = [];\n const updates: Record<string, FileData> = {};\n\n for (const [path, content] of files) {\n try {\n const contentStr = new TextDecoder().decode(content);\n const fileData = createFileData(contentStr);\n updates[path] = fileData;\n responses.push({ path, error: null });\n } catch {\n responses.push({ path, error: \"invalid_path\" });\n }\n }\n\n // Attach filesUpdate for the caller to apply via Command\n const result = responses as FileUploadResponse[] & {\n filesUpdate?: Record<string, FileData>;\n };\n result.filesUpdate = updates;\n return result;\n }\n\n /**\n * Download multiple files.\n *\n * @param paths - List of file paths to download\n * @returns List of FileDownloadResponse objects, one per input path\n */\n downloadFiles(paths: string[]): FileDownloadResponse[] {\n const files = this.getFiles();\n const responses: FileDownloadResponse[] = [];\n\n for (const path of paths) {\n const fileData = files[path];\n if (!fileData) {\n responses.push({ path, content: null, error: \"file_not_found\" });\n continue;\n }\n\n const contentStr = fileDataToString(fileData);\n const content = new TextEncoder().encode(contentStr);\n responses.push({ path, content, error: null });\n }\n\n return responses;\n }\n}\n","/**\n * Middleware for providing filesystem tools to an agent.\n *\n * Provides ls, read_file, write_file, edit_file, glob, and grep tools with support for:\n * - Pluggable backends (StateBackend, StoreBackend, FilesystemBackend, CompositeBackend)\n * - Tool result eviction for large outputs\n */\n\nimport {\n createMiddleware,\n tool,\n ToolMessage,\n type AgentMiddleware as _AgentMiddleware,\n} from \"langchain\";\nimport { Command, isCommand, getCurrentTaskInput } from \"@langchain/langgraph\";\nimport { z } from \"zod/v4\";\nimport type {\n BackendProtocol,\n BackendFactory,\n FileData,\n StateAndStore,\n} from \"../backends/protocol.js\";\nimport { isSandboxBackend } from \"../backends/protocol.js\";\nimport { StateBackend } from \"../backends/state.js\";\nimport {\n sanitizeToolCallId,\n formatContentWithLineNumbers,\n} from \"../backends/utils.js\";\n\n/**\n * Tools that should be excluded from the large result eviction logic.\n *\n * This array contains tools that should NOT have their results evicted to the filesystem\n * when they exceed token limits. Tools are excluded for different reasons:\n *\n * 1. Tools with built-in truncation (ls, glob, grep):\n * These tools truncate their own output when it becomes too large. When these tools\n * produce truncated output due to many matches, it typically indicates the query\n * needs refinement rather than full result preservation. In such cases, the truncated\n * matches are potentially more like noise and the LLM should be prompted to narrow\n * its search criteria instead.\n *\n * 2. Tools with problematic truncation behavior (read_file):\n * read_file is tricky to handle as the failure mode here is single long lines\n * (e.g., imagine a jsonl file with very long payloads on each line). If we try to\n * truncate the result of read_file, the agent may then attempt to re-read the\n * truncated file using read_file again, which won't help.\n *\n * 3. Tools that never exceed limits (edit_file, write_file):\n * These tools return minimal confirmation messages and are never expected to produce\n * output large enough to exceed token limits, so checking them would be unnecessary.\n */\nexport const TOOLS_EXCLUDED_FROM_EVICTION = [\n \"ls\",\n \"glob\",\n \"grep\",\n \"read_file\",\n \"edit_file\",\n \"write_file\",\n] as const;\n\n/**\n * Approximate number of characters per token for truncation calculations.\n * Using 4 chars per token as a conservative approximation (actual ratio varies by content)\n * This errs on the high side to avoid premature eviction of content that might fit.\n */\nexport const NUM_CHARS_PER_TOKEN = 4;\n\n/**\n * Message template for evicted tool results.\n */\nconst TOO_LARGE_TOOL_MSG = `Tool result too large, the result of this tool call {tool_call_id} was saved in the filesystem at this path: {file_path}\nYou can read the result from the filesystem by using the read_file tool, but make sure to only read part of the result at a time.\nYou can do this by specifying an offset and limit in the read_file tool call.\nFor example, to read the first 100 lines, you can use the read_file tool with offset=0 and limit=100.\n\nHere is a preview showing the head and tail of the result (lines of the form\n... [N lines truncated] ...\nindicate omitted lines in the middle of the content):\n\n{content_sample}`;\n\n/**\n * Create a preview of content showing head and tail with truncation marker.\n *\n * @param contentStr - The full content string to preview.\n * @param headLines - Number of lines to show from the start (default: 5).\n * @param tailLines - Number of lines to show from the end (default: 5).\n * @returns Formatted preview string with line numbers.\n */\nexport function createContentPreview(\n contentStr: string,\n headLines: number = 5,\n tailLines: number = 5,\n): string {\n const lines = contentStr.split(\"\\n\");\n\n if (lines.length <= headLines + tailLines) {\n // If file is small enough, show all lines\n const previewLines = lines.map((line) => line.substring(0, 1000));\n return formatContentWithLineNumbers(previewLines, 1);\n }\n\n // Show head and tail with truncation marker\n const head = lines.slice(0, headLines).map((line) => line.substring(0, 1000));\n const tail = lines.slice(-tailLines).map((line) => line.substring(0, 1000));\n\n const headSample = formatContentWithLineNumbers(head, 1);\n const truncationNotice = `\\n... [${lines.length - headLines - tailLines} lines truncated] ...\\n`;\n const tailSample = formatContentWithLineNumbers(\n tail,\n lines.length - tailLines + 1,\n );\n\n return headSample + truncationNotice + tailSample;\n}\n\n/**\n * required for type inference\n */\nimport type * as _zodTypes from \"@langchain/core/utils/types\";\nimport type * as _zodMeta from \"@langchain/langgraph/zod\";\nimport type * as _messages from \"@langchain/core/messages\";\n\n/**\n * Zod v3 schema for FileData (re-export from backends)\n */\nconst FileDataSchema = z.object({\n content: z.array(z.string()),\n created_at: z.string(),\n modified_at: z.string(),\n});\n\nexport type { FileData };\n\n/**\n * Merge file updates with support for deletions.\n */\nfunction fileDataReducer(\n left: Record<string, FileData> | undefined,\n right: Record<string, FileData | null>,\n): Record<string, FileData> {\n if (left === undefined) {\n const result: Record<string, FileData> = {};\n for (const [key, value] of Object.entries(right)) {\n if (value !== null) {\n result[key] = value;\n }\n }\n return result;\n }\n\n const result = { ...left };\n for (const [key, value] of Object.entries(right)) {\n if (value === null) {\n delete result[key];\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\n/**\n * Shared filesystem state schema.\n * Defined at module level to ensure the same object identity is used across all agents,\n * preventing \"Channel already exists with different type\" errors when multiple agents\n * use createFilesystemMiddleware.\n */\nconst FilesystemStateSchema = z.object({\n files: z\n .record(z.string(), FileDataSchema)\n .default({})\n .meta({\n reducer: {\n fn: fileDataReducer,\n schema: z.record(z.string(), FileDataSchema.nullable()),\n },\n }),\n});\n\n/**\n * Resolve backend from factory or instance.\n *\n * @param backend - Backend instance or factory function\n * @param stateAndStore - State and store container for backend initialization\n */\nfunction getBackend(\n backend: BackendProtocol | BackendFactory,\n stateAndStore: StateAndStore,\n): BackendProtocol {\n if (typeof backend === \"function\") {\n return backend(stateAndStore);\n }\n return backend;\n}\n\n// System prompts\nconst FILESYSTEM_SYSTEM_PROMPT = `## Filesystem Tools \\`ls\\`, \\`read_file\\`, \\`write_file\\`, \\`edit_file\\`, \\`glob\\`, \\`grep\\`\n\nYou have access to a filesystem which you can interact with using these tools.\nAll file paths must start with a /.\n\n- ls: list files in a directory (requires absolute path)\n- read_file: read a file from the filesystem\n- write_file: write to a file in the filesystem\n- edit_file: edit a file in the filesystem\n- glob: find files matching a pattern (e.g., \"**/*.py\")\n- grep: search for text within files`;\n\n// Tool descriptions - ported from Python for comprehensive LLM guidance\nexport const LS_TOOL_DESCRIPTION = `Lists all files in a directory.\n\nThis is useful for exploring the filesystem and finding the right file to read or edit.\nYou should almost ALWAYS use this tool before using the read_file or edit_file tools.`;\n\nexport const READ_FILE_TOOL_DESCRIPTION = `Reads a file from the filesystem.\n\nAssume this tool is able to read all files. If the User provides a path to a file assume that path is valid. It is okay to read a file that does not exist; an error will be returned.\n\nUsage:\n- By default, it reads up to 500 lines starting from the beginning of the file\n- **IMPORTANT for large files and codebase exploration**: Use pagination with offset and limit parameters to avoid context overflow\n - First scan: read_file(path, limit=100) to see file structure\n - Read more sections: read_file(path, offset=100, limit=200) for next 200 lines\n - Only omit limit (read full file) when necessary for editing\n- Specify offset and limit: read_file(path, offset=0, limit=100) reads first 100 lines\n- Results are returned using cat -n format, with line numbers starting at 1\n- Lines longer than 10,000 characters will be split into multiple lines with continuation markers (e.g., 5.1, 5.2, etc.). When you specify a limit, these continuation lines count towards the limit.\n- You have the capability to call multiple tools in a single response. It is always better to speculatively read multiple files as a batch that are potentially useful.\n- If you read a file that exists but has empty contents you will receive a system reminder warning in place of file contents.\n- You should ALWAYS make sure a file has been read before editing it.`;\n\nexport const WRITE_FILE_TOOL_DESCRIPTION = `Writes to a new file in the filesystem.\n\nUsage:\n- The write_file tool will create a new file.\n- Prefer to edit existing files (with the edit_file tool) over creating new ones when possible.`;\n\nexport const EDIT_FILE_TOOL_DESCRIPTION = `Performs exact string replacements in files.\n\nUsage:\n- You must read the file before editing. This tool will error if you attempt an edit without reading the file first.\n- When editing, preserve the exact indentation (tabs/spaces) from the read output. Never include line number prefixes in old_string or new_string.\n- ALWAYS prefer editing existing files over creating new ones.\n- Only use emojis if the user explicitly requests it.`;\n\nexport const GLOB_TOOL_DESCRIPTION = `Find files matching a glob pattern.\n\nSupports standard glob patterns: \\`*\\` (any characters), \\`**\\` (any directories), \\`?\\` (single character).\nReturns a list of absolute file paths that match the pattern.\n\nExamples:\n- \\`**/*.py\\` - Find all Python files\n- \\`*.txt\\` - Find all text files in root\n- \\`/subdir/**/*.md\\` - Find all markdown files under /subdir`;\n\nexport const GREP_TOOL_DESCRIPTION = `Search for a text pattern across files.\n\nSearches for literal text (not regex) and returns matching files or content based on output_mode.\n\nExamples:\n- Search all files: \\`grep(pattern=\"TODO\")\\`\n- Search Python files only: \\`grep(pattern=\"import\", glob=\"*.py\")\\`\n- Show matching lines: \\`grep(pattern=\"error\", output_mode=\"content\")\\``;\nexport const EXECUTE_TOOL_DESCRIPTION = `Executes a shell command in an isolated sandbox environment.\n\nUsage:\nExecutes a given command in the sandbox environment with proper handling and security measures.\nBefore executing the command, please follow these steps:\n\n1. Directory Verification:\n - If the command will create new directories or files, first use the ls tool to verify the parent directory exists and is the correct location\n - For example, before running \"mkdir foo/bar\", first use ls to check that \"foo\" exists and is the intended parent directory\n\n2. Command Execution:\n - Always quote file paths that contain spaces with double quotes (e.g., cd \"path with spaces/file.txt\")\n - Examples of proper quoting:\n - cd \"/Users/name/My Documents\" (correct)\n - cd /Users/name/My Documents (incorrect - will fail)\n - python \"/path/with spaces/script.py\" (correct)\n - python /path/with spaces/script.py (incorrect - will fail)\n - After ensuring proper quoting, execute the command\n - Capture the output of the command\n\nUsage notes:\n - Commands run in an isolated sandbox environment\n - Returns combined stdout/stderr output with exit code\n - If the output is very large, it may be truncated\n - VERY IMPORTANT: You MUST avoid using search commands like find and grep. Instead use the grep, glob tools to search. You MUST avoid read tools like cat, head, tail, and use read_file to read files.\n - When issuing multiple commands, use the ';' or '&&' operator to separate them. DO NOT use newlines (newlines are ok in quoted strings)\n - Use '&&' when commands depend on each other (e.g., \"mkdir dir && cd dir\")\n - Use ';' only when you need to run commands sequentially but don't care if earlier commands fail\n - Try to maintain your current working directory throughout the session by using absolute paths and avoiding usage of cd\n\nExamples:\n Good examples:\n - execute(command=\"pytest /foo/bar/tests\")\n - execute(command=\"python /path/to/script.py\")\n - execute(command=\"npm install && npm test\")\n\n Bad examples (avoid these):\n - execute(command=\"cd /foo/bar && pytest tests\") # Use absolute path instead\n - execute(command=\"cat file.txt\") # Use read_file tool instead\n - execute(command=\"find . -name '*.py'\") # Use glob tool instead\n - execute(command=\"grep -r 'pattern' .\") # Use grep tool instead\n\nNote: This tool is only available if the backend supports execution (SandboxBackendProtocol).\nIf execution is not supported, the tool will return an error message.`;\n\n// System prompt for execution capability\nexport const EXECUTION_SYSTEM_PROMPT = `## Execute Tool \\`execute\\`\n\nYou have access to an \\`execute\\` tool for running shell commands in a sandboxed environment.\nUse this tool to run commands, scripts, tests, builds, and other shell operations.\n\n- execute: run a shell command in the sandbox (returns output and exit code)`;\n\n/**\n * Create ls tool using backend.\n */\nfunction createLsTool(\n backend: BackendProtocol | BackendFactory,\n options: { customDescription: string | undefined },\n) {\n const { customDescription } = options;\n return tool(\n async (input, config) => {\n const stateAndStore: StateAndStore = {\n state: getCurrentTaskInput(config),\n store: (config as any).store,\n };\n const resolvedBackend = getBackend(backend, stateAndStore);\n const path = input.path || \"/\";\n const infos = await resolvedBackend.lsInfo(path);\n\n if (infos.length === 0) {\n return `No files found in ${path}`;\n }\n\n // Format output\n const lines: string[] = [];\n for (const info of infos) {\n if (info.is_dir) {\n lines.push(`${info.path} (directory)`);\n } else {\n const size = info.size ? ` (${info.size} bytes)` : \"\";\n lines.push(`${info.path}${size}`);\n }\n }\n return lines.join(\"\\n\");\n },\n {\n name: \"ls\",\n description: customDescription || LS_TOOL_DESCRIPTION,\n schema: z.object({\n path: z\n .string()\n .optional()\n .default(\"/\")\n .describe(\"Directory path to list (default: /)\"),\n }),\n },\n );\n}\n\n/**\n * Create read_file tool using backend.\n */\nfunction createReadFileTool(\n backend: BackendProtocol | BackendFactory,\n options: { customDescription: string | undefined },\n) {\n const { customDescription } = options;\n return tool(\n async (input, config) => {\n const stateAndStore: StateAndStore = {\n state: getCurrentTaskInput(config),\n store: (config as any).store,\n };\n const resolvedBackend = getBackend(backend, stateAndStore);\n const { file_path, offset = 0, limit = 500 } = input;\n return await resolvedBackend.read(file_path, offset, limit);\n },\n {\n name: \"read_file\",\n description: customDescription || READ_FILE_TOOL_DESCRIPTION,\n schema: z.object({\n file_path: z.string().describe(\"Absolute path to the file to read\"),\n offset: z.coerce\n .number()\n .optional()\n .default(0)\n .describe(\"Line offset to start reading from (0-indexed)\"),\n limit: z.coerce\n .number()\n .optional()\n .default(500)\n .describe(\"Maximum number of lines to read\"),\n }),\n },\n );\n}\n\n/**\n * Create write_file tool using backend.\n */\nfunction createWriteFileTool(\n backend: BackendProtocol | BackendFactory,\n options: { customDescription: string | undefined },\n) {\n const { customDescription } = options;\n return tool(\n async (input, config) => {\n const stateAndStore: StateAndStore = {\n state: getCurrentTaskInput(config),\n store: (config as any).store,\n };\n const resolvedBackend = getBackend(backend, stateAndStore);\n const { file_path, content } = input;\n const result = await resolvedBackend.write(file_path, content);\n\n if (result.error) {\n return result.error;\n }\n\n // If filesUpdate is present, return Command to update state\n const message = new ToolMessage({\n content: `Successfully wrote to '${file_path}'`,\n tool_call_id: config.toolCall?.id as string,\n name: \"write_file\",\n metadata: result.metadata,\n });\n\n if (result.filesUpdate) {\n return new Command({\n update: { files: result.filesUpdate, messages: [message] },\n });\n }\n\n return message;\n },\n {\n name: \"write_file\",\n description: customDescription || WRITE_FILE_TOOL_DESCRIPTION,\n schema: z.object({\n file_path: z.string().describe(\"Absolute path to the file to write\"),\n content: z.string().describe(\"Content to write to the file\"),\n }),\n },\n );\n}\n\n/**\n * Create edit_file tool using backend.\n */\nfunction createEditFileTool(\n backend: BackendProtocol | BackendFactory,\n options: { customDescription: string | undefined },\n) {\n const { customDescription } = options;\n return tool(\n async (input, config) => {\n const stateAndStore: StateAndStore = {\n state: getCurrentTaskInput(config),\n store: (config as any).store,\n };\n const resolvedBackend = getBackend(backend, stateAndStore);\n const { file_path, old_string, new_string, replace_all = false } = input;\n const result = await resolvedBackend.edit(\n file_path,\n old_string,\n new_string,\n replace_all,\n );\n\n if (result.error) {\n return result.error;\n }\n\n const message = new ToolMessage({\n content: `Successfully replaced ${result.occurrences} occurrence(s) in '${file_path}'`,\n tool_call_id: config.toolCall?.id as string,\n name: \"edit_file\",\n metadata: result.metadata,\n });\n\n // If filesUpdate is present, return Command to update state\n if (result.filesUpdate) {\n return new Command({\n update: { files: result.filesUpdate, messages: [message] },\n });\n }\n\n // External storage (filesUpdate is null)\n return message;\n },\n {\n name: \"edit_file\",\n description: customDescription || EDIT_FILE_TOOL_DESCRIPTION,\n schema: z.object({\n file_path: z.string().describe(\"Absolute path to the file to edit\"),\n old_string: z\n .string()\n .describe(\"String to be replaced (must match exactly)\"),\n new_string: z.string().describe(\"String to replace with\"),\n replace_all: z\n .boolean()\n .optional()\n .default(false)\n .describe(\"Whether to replace all occurrences\"),\n }),\n },\n );\n}\n\n/**\n * Create glob tool using backend.\n */\nfunction createGlobTool(\n backend: BackendProtocol | BackendFactory,\n options: { customDescription: string | undefined },\n) {\n const { customDescription } = options;\n return tool(\n async (input, config) => {\n const stateAndStore: StateAndStore = {\n state: getCurrentTaskInput(config),\n store: (config as any).store,\n };\n const resolvedBackend = getBackend(backend, stateAndStore);\n const { pattern, path = \"/\" } = input;\n const infos = await resolvedBackend.globInfo(pattern, path);\n\n if (infos.length === 0) {\n return `No files found matching pattern '${pattern}'`;\n }\n\n return infos.map((info) => info.path).join(\"\\n\");\n },\n {\n name: \"glob\",\n description: customDescription || GLOB_TOOL_DESCRIPTION,\n schema: z.object({\n pattern: z.string().describe(\"Glob pattern (e.g., '*.py', '**/*.ts')\"),\n path: z\n .string()\n .optional()\n .default(\"/\")\n .describe(\"Base path to search from (default: /)\"),\n }),\n },\n );\n}\n\n/**\n * Create grep tool using backend.\n */\nfunction createGrepTool(\n backend: BackendProtocol | BackendFactory,\n options: { customDescription: string | undefined },\n) {\n const { customDescription } = options;\n return tool(\n async (input, config) => {\n const stateAndStore: StateAndStore = {\n state: getCurrentTaskInput(config),\n store: (config as any).store,\n };\n const resolvedBackend = getBackend(backend, stateAndStore);\n const { pattern, path = \"/\", glob = null } = input;\n const result = await resolvedBackend.grepRaw(pattern, path, glob);\n\n // If string, it's an error\n if (typeof result === \"string\") {\n return result;\n }\n\n if (result.length === 0) {\n return `No matches found for pattern '${pattern}'`;\n }\n\n // Format output: group by file\n const lines: string[] = [];\n let currentFile: string | null = null;\n for (const match of result) {\n if (match.path !== currentFile) {\n currentFile = match.path;\n lines.push(`\\n${currentFile}:`);\n }\n lines.push(` ${match.line}: ${match.text}`);\n }\n\n return lines.join(\"\\n\");\n },\n {\n name: \"grep\",\n description: customDescription || GREP_TOOL_DESCRIPTION,\n schema: z.object({\n pattern: z.string().describe(\"Regex pattern to search for\"),\n path: z\n .string()\n .optional()\n .default(\"/\")\n .describe(\"Base path to search from (default: /)\"),\n glob: z\n .string()\n .optional()\n .nullable()\n .describe(\"Optional glob pattern to filter files (e.g., '*.py')\"),\n }),\n },\n );\n}\n\n/**\n * Create execute tool using backend.\n */\nfunction createExecuteTool(\n backend: BackendProtocol | BackendFactory,\n options: { customDescription: string | undefined },\n) {\n const { customDescription } = options;\n return tool(\n async (input, config) => {\n const stateAndStore: StateAndStore = {\n state: getCurrentTaskInput(config),\n store: (config as any).store,\n };\n const resolvedBackend = getBackend(backend, stateAndStore);\n\n // Runtime check - fail gracefully if not supported\n if (!isSandboxBackend(resolvedBackend)) {\n return (\n \"Error: Execution not available. This agent's backend \" +\n \"does not support command execution (SandboxBackendProtocol). \" +\n \"To use the execute tool, provide a backend that implements SandboxBackendProtocol.\"\n );\n }\n\n const result = await resolvedBackend.execute(input.command);\n\n // Format output for LLM consumption\n const parts = [result.output];\n\n if (result.exitCode !== null) {\n const status = result.exitCode === 0 ? \"succeeded\" : \"failed\";\n parts.push(`\\n[Command ${status} with exit code ${result.exitCode}]`);\n }\n\n if (result.truncated) {\n parts.push(\"\\n[Output was truncated due to size limits]\");\n }\n\n return parts.join(\"\");\n },\n {\n name: \"execute\",\n description: customDescription || EXECUTE_TOOL_DESCRIPTION,\n schema: z.object({\n command: z.string().describe(\"The shell command to execute\"),\n }),\n },\n );\n}\n\n/**\n * Options for creating filesystem middleware.\n */\nexport interface FilesystemMiddlewareOptions {\n /** Backend instance or factory (default: StateBackend) */\n backend?: BackendProtocol | BackendFactory;\n /** Optional custom system prompt override */\n systemPrompt?: string | null;\n /** Optional custom tool descriptions override */\n customToolDescriptions?: Record<string, string> | null;\n /** Optional token limit before evicting a tool result to the filesystem (default: 20000 tokens, ~80KB) */\n toolTokenLimitBeforeEvict?: number | null;\n}\n\n/**\n * Create filesystem middleware with all tools and features.\n */\nexport function createFilesystemMiddleware(\n options: FilesystemMiddlewareOptions = {},\n) {\n const {\n backend = (stateAndStore: StateAndStore) => new StateBackend(stateAndStore),\n systemPrompt: customSystemPrompt = null,\n customToolDescriptions = null,\n toolTokenLimitBeforeEvict = 20000,\n } = options;\n\n const baseSystemPrompt = customSystemPrompt || FILESYSTEM_SYSTEM_PROMPT;\n\n // All tools including execute (execute will be filtered at runtime if backend doesn't support it)\n const allTools = [\n createLsTool(backend, {\n customDescription: customToolDescriptions?.ls,\n }),\n createReadFileTool(backend, {\n customDescription: customToolDescriptions?.read_file,\n }),\n createWriteFileTool(backend, {\n customDescription: customToolDescriptions?.write_file,\n }),\n createEditFileTool(backend, {\n customDescription: customToolDescriptions?.edit_file,\n }),\n createGlobTool(backend, {\n customDescription: customToolDescriptions?.glob,\n }),\n createGrepTool(backend, {\n customDescription: customToolDescriptions?.grep,\n }),\n createExecuteTool(backend, {\n customDescription: customToolDescriptions?.execute,\n }),\n ];\n\n return createMiddleware({\n name: \"FilesystemMiddleware\",\n stateSchema: FilesystemStateSchema,\n tools: allTools,\n wrapModelCall: async (request, handler) => {\n // Check if backend supports execution\n const stateAndStore: StateAndStore = {\n state: request.state || {},\n // @ts-expect-error - request.config is incorrect typed\n store: request.config?.store,\n };\n const resolvedBackend = getBackend(backend, stateAndStore);\n const supportsExecution = isSandboxBackend(resolvedBackend);\n\n // Filter tools based on backend capabilities\n let tools = request.tools;\n if (!supportsExecution) {\n tools = tools.filter((t: { name: string }) => t.name !== \"execute\");\n }\n\n // Build system prompt - add execution instructions if available\n let systemPrompt = baseSystemPrompt;\n if (supportsExecution) {\n systemPrompt = `${systemPrompt}\\n\\n${EXECUTION_SYSTEM_PROMPT}`;\n }\n\n // Combine with existing system prompt\n const currentSystemPrompt = request.systemPrompt || \"\";\n const newSystemPrompt = currentSystemPrompt\n ? `${currentSystemPrompt}\\n\\n${systemPrompt}`\n : systemPrompt;\n\n return handler({ ...request, tools, systemPrompt: newSystemPrompt });\n },\n wrapToolCall: async (request, handler) => {\n // Return early if eviction is disabled\n if (!toolTokenLimitBeforeEvict) {\n return handler(request);\n }\n\n // Check if this tool is excluded from eviction\n const toolName = request.toolCall?.name;\n if (\n toolName &&\n TOOLS_EXCLUDED_FROM_EVICTION.includes(\n toolName as (typeof TOOLS_EXCLUDED_FROM_EVICTION)[number],\n )\n ) {\n return handler(request);\n }\n\n const result = await handler(request);\n\n async function processToolMessage(\n msg: ToolMessage,\n toolTokenLimitBeforeEvict: number,\n ) {\n if (\n typeof msg.content === \"string\" &&\n msg.content.length > toolTokenLimitBeforeEvict * NUM_CHARS_PER_TOKEN\n ) {\n // Build StateAndStore from request\n const stateAndStore: StateAndStore = {\n state: request.state || {},\n // @ts-expect-error - request.config is incorrect typed\n store: request.config?.store,\n };\n const resolvedBackend = getBackend(backend, stateAndStore);\n const sanitizedId = sanitizeToolCallId(\n request.toolCall?.id || msg.tool_call_id,\n );\n const evictPath = `/large_tool_results/${sanitizedId}`;\n\n const writeResult = await resolvedBackend.write(\n evictPath,\n msg.content,\n );\n\n if (writeResult.error) {\n return { message: msg, filesUpdate: null };\n }\n\n // Create preview showing head and tail of the result\n const contentSample = createContentPreview(msg.content);\n const replacementText = TOO_LARGE_TOOL_MSG.replace(\n \"{tool_call_id}\",\n msg.tool_call_id,\n )\n .replace(\"{file_path}\", evictPath)\n .replace(\"{content_sample}\", contentSample);\n\n const truncatedMessage = new ToolMessage({\n content: replacementText,\n tool_call_id: msg.tool_call_id,\n name: msg.name,\n });\n\n return {\n message: truncatedMessage,\n filesUpdate: writeResult.filesUpdate,\n };\n }\n return { message: msg, filesUpdate: null };\n }\n\n if (ToolMessage.isInstance(result)) {\n const processed = await processToolMessage(\n result,\n toolTokenLimitBeforeEvict,\n );\n\n if (processed.filesUpdate) {\n return new Command({\n update: {\n files: processed.filesUpdate,\n messages: [processed.message],\n },\n });\n }\n\n return processed.message;\n }\n\n if (isCommand(result)) {\n const update = result.update as any;\n if (!update?.messages) {\n return result;\n }\n\n let hasLargeResults = false;\n const accumulatedFiles: Record<string, FileData> = update.files\n ? { ...update.files }\n : {};\n const processedMessages: ToolMessage[] = [];\n\n for (const msg of update.messages) {\n if (ToolMessage.isInstance(msg)) {\n const processed = await processToolMessage(\n msg,\n toolTokenLimitBeforeEvict,\n );\n processedMessages.push(processed.message);\n\n if (processed.filesUpdate) {\n hasLargeResults = true;\n Object.assign(accumulatedFiles, processed.filesUpdate);\n }\n } else {\n processedMessages.push(msg);\n }\n }\n\n if (hasLargeResults) {\n return new Command({\n update: {\n ...update,\n messages: processedMessages,\n files: accumulatedFiles,\n },\n });\n }\n }\n\n return result;\n },\n });\n}\n","import { z } from \"zod/v4\";\nimport {\n createMiddleware,\n createAgent,\n AgentMiddleware,\n tool,\n ToolMessage,\n humanInTheLoopMiddleware,\n SystemMessage,\n type InterruptOnConfig,\n type ReactAgent,\n StructuredTool,\n} from \"langchain\";\nimport { Command, getCurrentTaskInput } from \"@langchain/langgraph\";\nimport type { LanguageModelLike } from \"@langchain/core/language_models/base\";\nimport type { Runnable } from \"@langchain/core/runnables\";\nimport { HumanMessage } from \"@langchain/core/messages\";\n\nexport type { AgentMiddleware };\n\n// Constants\nconst DEFAULT_SUBAGENT_PROMPT =\n \"In order to complete the objective that the user asks of you, you have access to a number of standard tools.\";\n\n// State keys that are excluded when passing state to subagents and when returning\n// updates from subagents.\n// When returning updates:\n// 1. The messages key is handled explicitly to ensure only the final message is included\n// 2. The todos and structuredResponse keys are excluded as they do not have a defined reducer\n// and no clear meaning for returning them from a subagent to the main agent.\n// 3. The files key is excluded to prevent concurrent subagents from writing to the files\n// channel simultaneously (which causes LastValue errors in LangGraph).\nconst EXCLUDED_STATE_KEYS = [\n \"messages\",\n \"todos\",\n \"structuredResponse\",\n \"files\",\n] as const;\n\nconst DEFAULT_GENERAL_PURPOSE_DESCRIPTION =\n \"General-purpose agent for researching complex questions, searching for files and content, and executing multi-step tasks. When you are searching for a keyword or file and are not confident that you will find the right match in the first few tries use this agent to perform the search for you. This agent has access to all tools as the main agent.\";\n\n// Comprehensive task tool description from Python\nfunction getTaskToolDescription(subagentDescriptions: string[]): string {\n return `\nLaunch an ephemeral subagent to handle complex, multi-step independent tasks with isolated context windows.\n\nAvailable agent types and the tools they have access to:\n${subagentDescriptions.join(\"\\n\")}\n\nWhen using the Task tool, you must specify a subagent_type parameter to select which agent type to use.\n\n## Usage notes:\n1. Launch multiple agents concurrently whenever possible, to maximize performance; to do that, use a single message with multiple tool uses\n2. When the agent is done, it will return a single message back to you. The result returned by the agent is not visible to the user. To show the user the result, you should send a text message back to the user with a concise summary of the result.\n3. Each agent invocation is stateless. You will not be able to send additional messages to the agent, nor will the agent be able to communicate with you outside of its final report. Therefore, your prompt should contain a highly detailed task description for the agent to perform autonomously and you should specify exactly what information the agent should return back to you in its final and only message to you.\n4. The agent's outputs should generally be trusted\n5. Clearly tell the agent whether you expect it to create content, perform analysis, or just do research (search, file reads, web fetches, etc.), since it is not aware of the user's intent\n6. If the agent description mentions that it should be used proactively, then you should try your best to use it without the user having to ask for it first. Use your judgement.\n7. When only the general-purpose agent is provided, you should use it for all tasks. It is great for isolating context and token usage, and completing specific, complex tasks, as it has all the same capabilities as the main agent.\n\n### Example usage of the general-purpose agent:\n\n<example_agent_descriptions>\n\"general-purpose\": use this agent for general purpose tasks, it has access to all tools as the main agent.\n</example_agent_descriptions>\n\n<example>\nUser: \"I want to conduct research on the accomplishments of Lebron James, Michael Jordan, and Kobe Bryant, and then compare them.\"\nAssistant: *Uses the task tool in parallel to conduct isolated research on each of the three players*\nAssistant: *Synthesizes the results of the three isolated research tasks and responds to the User*\n<commentary>\nResearch is a complex, multi-step task in it of itself.\nThe research of each individual player is not dependent on the research of the other players.\nThe assistant uses the task tool to break down the complex objective into three isolated tasks.\nEach research task only needs to worry about context and tokens about one player, then returns synthesized information about each player as the Tool Result.\nThis means each research task can dive deep and spend tokens and context deeply researching each player, but the final result is synthesized information, and saves us tokens in the long run when comparing the players to each other.\n</commentary>\n</example>\n\n<example>\nUser: \"Analyze a single large code repository for security vulnerabilities and generate a report.\"\nAssistant: *Launches a single \\`task\\` subagent for the repository analysis*\nAssistant: *Receives report and integrates results into final summary*\n<commentary>\nSubagent is used to isolate a large, context-heavy task, even though there is only one. This prevents the main thread from being overloaded with details.\nIf the user then asks followup questions, we have a concise report to reference instead of the entire history of analysis and tool calls, which is good and saves us time and money.\n</commentary>\n</example>\n\n<example>\nUser: \"Schedule two meetings for me and prepare agendas for each.\"\nAssistant: *Calls the task tool in parallel to launch two \\`task\\` subagents (one per meeting) to prepare agendas*\nAssistant: *Returns final schedules and agendas*\n<commentary>\nTasks are simple individually, but subagents help silo agenda preparation.\nEach subagent only needs to worry about the agenda for one meeting.\n</commentary>\n</example>\n\n<example>\nUser: \"I want to order a pizza from Dominos, order a burger from McDonald's, and order a salad from Subway.\"\nAssistant: *Calls tools directly in parallel to order a pizza from Dominos, a burger from McDonald's, and a salad from Subway*\n<commentary>\nThe assistant did not use the task tool because the objective is super simple and clear and only requires a few trivial tool calls.\nIt is better to just complete the task directly and NOT use the \\`task\\`tool.\n</commentary>\n</example>\n\n### Example usage with custom agents:\n\n<example_agent_descriptions>\n\"content-reviewer\": use this agent after you are done creating significant content or documents\n\"greeting-responder\": use this agent when to respond to user greetings with a friendly joke\n\"research-analyst\": use this agent to conduct thorough research on complex topics\n</example_agent_description>\n\n<example>\nuser: \"Please write a function that checks if a number is prime\"\nassistant: Sure let me write a function that checks if a number is prime\nassistant: First let me use the Write tool to write a function that checks if a number is prime\nassistant: I'm going to use the Write tool to write the following code:\n<code>\nfunction isPrime(n) {\n if (n <= 1) return false\n for (let i = 2; i * i <= n; i++) {\n if (n % i === 0) return false\n }\n return true\n}\n</code>\n<commentary>\nSince significant content was created and the task was completed, now use the content-reviewer agent to review the work\n</commentary>\nassistant: Now let me use the content-reviewer agent to review the code\nassistant: Uses the Task tool to launch with the content-reviewer agent\n</example>\n\n<example>\nuser: \"Can you help me research the environmental impact of different renewable energy sources and create a comprehensive report?\"\n<commentary>\nThis is a complex research task that would benefit from using the research-analyst agent to conduct thorough analysis\n</commentary>\nassistant: I'll help you research the environmental impact of renewable energy sources. Let me use the research-analyst agent to conduct comprehensive research on this topic.\nassistant: Uses the Task tool to launch with the research-analyst agent, providing detailed instructions about what research to conduct and what format the report should take\n</example>\n\n<example>\nuser: \"Hello\"\n<commentary>\nSince the user is greeting, use the greeting-responder agent to respond with a friendly joke\n</commentary>\nassistant: \"I'm going to use the Task tool to launch with the greeting-responder agent\"\n</example>\n `.trim();\n}\n\nconst TASK_SYSTEM_PROMPT = `## \\`task\\` (subagent spawner)\n\nYou have access to a \\`task\\` tool to launch short-lived subagents that handle isolated tasks. These agents are ephemeral — they live only for the duration of the task and return a single result.\n\nWhen to use the task tool:\n- When a task is complex and multi-step, and can be fully delegated in isolation\n- When a task is independent of other tasks and can run in parallel\n- When a task requires focused reasoning or heavy token/context usage that would bloat the orchestrator thread\n- When sandboxing improves reliability (e.g. code execution, structured searches, data formatting)\n- When you only care about the output of the subagent, and not the intermediate steps (ex. performing a lot of research and then returned a synthesized report, performing a series of computations or lookups to achieve a concise, relevant answer.)\n\nSubagent lifecycle:\n1. **Spawn** → Provide clear role, instructions, and expected output\n2. **Run** → The subagent completes the task autonomously\n3. **Return** → The subagent provides a single structured result\n4. **Reconcile** → Incorporate or synthesize the result into the main thread\n\nWhen NOT to use the task tool:\n- If you need to see the intermediate reasoning or steps after the subagent has completed (the task tool hides them)\n- If the task is trivial (a few tool calls or simple lookup)\n- If delegating does not reduce token usage, complexity, or context switching\n- If splitting would add latency without benefit\n\n## Important Task Tool Usage Notes to Remember\n- Whenever possible, parallelize the work that you do. This is true for both tool_calls, and for tasks. Whenever you have independent steps to complete - make tool_calls, or kick off tasks (subagents) in parallel to accomplish them faster. This saves time for the user, which is incredibly important.\n- Remember to use the \\`task\\` tool to silo independent tasks within a multi-part objective.\n- You should use the \\`task\\` tool whenever you have a complex task that will take multiple steps, and is independent from other tasks that the agent needs to complete. These agents are highly competent and efficient.`;\n\n/**\n * Type definitions for pre-compiled agents.\n *\n * @typeParam TRunnable - The type of the runnable (ReactAgent or Runnable).\n * When using `createAgent`, this preserves the middleware types for type inference.\n */\nexport interface CompiledSubAgent<\n TRunnable extends ReactAgent | Runnable = ReactAgent | Runnable,\n> {\n /** The name of the agent */\n name: string;\n /** The description of the agent */\n description: string;\n /** The agent instance */\n runnable: TRunnable;\n}\n\n/**\n * Type definitions for subagents\n */\nexport interface SubAgent {\n /** The name of the agent */\n name: string;\n /** The description of the agent */\n description: string;\n /** The system prompt to use for the agent */\n systemPrompt: string;\n /** The tools to use for the agent (tool instances, not names). Defaults to defaultTools */\n tools?: StructuredTool[];\n /** The model for the agent. Defaults to default_model */\n model?: LanguageModelLike | string;\n /** Additional middleware to append after default_middleware */\n middleware?: readonly AgentMiddleware[];\n /** The tool configs to use for the agent */\n interruptOn?: Record<string, boolean | InterruptOnConfig>;\n}\n\n/**\n * Filter state to exclude certain keys when passing to subagents\n */\nfunction filterStateForSubagent(\n state: Record<string, unknown>,\n): Record<string, unknown> {\n const filtered: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(state)) {\n if (!EXCLUDED_STATE_KEYS.includes(key as never)) {\n filtered[key] = value;\n }\n }\n return filtered;\n}\n\n/**\n * Create Command with filtered state update from subagent result\n */\nfunction returnCommandWithStateUpdate(\n result: Record<string, unknown>,\n toolCallId: string,\n): Command {\n const stateUpdate = filterStateForSubagent(result);\n const messages = result.messages as Array<{ content: string }>;\n const lastMessage = messages?.[messages.length - 1];\n\n return new Command({\n update: {\n ...stateUpdate,\n messages: [\n new ToolMessage({\n content: lastMessage?.content || \"Task completed\",\n tool_call_id: toolCallId,\n name: \"task\",\n }),\n ],\n },\n });\n}\n\n/**\n * Create subagent instances from specifications\n */\nfunction getSubagents(options: {\n defaultModel: LanguageModelLike | string;\n defaultTools: StructuredTool[];\n defaultMiddleware: AgentMiddleware[] | null;\n defaultInterruptOn: Record<string, boolean | InterruptOnConfig> | null;\n subagents: (SubAgent | CompiledSubAgent)[];\n generalPurposeAgent: boolean;\n}): {\n agents: Record<string, ReactAgent | Runnable>;\n descriptions: string[];\n} {\n const {\n defaultModel,\n defaultTools,\n defaultMiddleware,\n defaultInterruptOn,\n subagents,\n generalPurposeAgent,\n } = options;\n\n const defaultSubagentMiddleware = defaultMiddleware || [];\n const agents: Record<string, ReactAgent | Runnable> = {};\n const subagentDescriptions: string[] = [];\n\n // Create general-purpose agent if enabled\n if (generalPurposeAgent) {\n const generalPurposeMiddleware = [...defaultSubagentMiddleware];\n if (defaultInterruptOn) {\n generalPurposeMiddleware.push(\n humanInTheLoopMiddleware({ interruptOn: defaultInterruptOn }),\n );\n }\n\n const generalPurposeSubagent = createAgent({\n model: defaultModel,\n systemPrompt: DEFAULT_SUBAGENT_PROMPT,\n tools: defaultTools as any,\n middleware: generalPurposeMiddleware,\n });\n\n agents[\"general-purpose\"] = generalPurposeSubagent;\n subagentDescriptions.push(\n `- general-purpose: ${DEFAULT_GENERAL_PURPOSE_DESCRIPTION}`,\n );\n }\n\n // Process custom subagents\n for (const agentParams of subagents) {\n subagentDescriptions.push(\n `- ${agentParams.name}: ${agentParams.description}`,\n );\n\n if (\"runnable\" in agentParams) {\n agents[agentParams.name] = agentParams.runnable;\n } else {\n const middleware = agentParams.middleware\n ? [...defaultSubagentMiddleware, ...agentParams.middleware]\n : [...defaultSubagentMiddleware];\n\n const interruptOn = agentParams.interruptOn || defaultInterruptOn;\n if (interruptOn)\n middleware.push(humanInTheLoopMiddleware({ interruptOn }));\n\n agents[agentParams.name] = createAgent({\n model: agentParams.model ?? defaultModel,\n systemPrompt: agentParams.systemPrompt,\n tools: agentParams.tools ?? defaultTools,\n middleware,\n });\n }\n }\n\n return { agents, descriptions: subagentDescriptions };\n}\n\n/**\n * Create the task tool for invoking subagents\n */\nfunction createTaskTool(options: {\n defaultModel: LanguageModelLike | string;\n defaultTools: StructuredTool[];\n defaultMiddleware: AgentMiddleware[] | null;\n defaultInterruptOn: Record<string, boolean | InterruptOnConfig> | null;\n subagents: (SubAgent | CompiledSubAgent)[];\n generalPurposeAgent: boolean;\n taskDescription: string | null;\n}) {\n const {\n defaultModel,\n defaultTools,\n defaultMiddleware,\n defaultInterruptOn,\n subagents,\n generalPurposeAgent,\n taskDescription,\n } = options;\n\n const { agents: subagentGraphs, descriptions: subagentDescriptions } =\n getSubagents({\n defaultModel,\n defaultTools,\n defaultMiddleware,\n defaultInterruptOn,\n subagents,\n generalPurposeAgent,\n });\n\n const finalTaskDescription = taskDescription\n ? taskDescription\n : getTaskToolDescription(subagentDescriptions);\n\n return tool(\n async (\n input: { description: string; subagent_type: string },\n config,\n ): Promise<Command | string> => {\n const { description, subagent_type } = input;\n\n // Validate subagent type\n if (!(subagent_type in subagentGraphs)) {\n const allowedTypes = Object.keys(subagentGraphs)\n .map((k) => `\\`${k}\\``)\n .join(\", \");\n throw new Error(\n `Error: invoked agent of type ${subagent_type}, the only allowed types are ${allowedTypes}`,\n );\n }\n\n const subagent = subagentGraphs[subagent_type];\n\n // Get current state and filter it for subagent\n const currentState = getCurrentTaskInput<Record<string, unknown>>();\n const subagentState = filterStateForSubagent(currentState);\n subagentState.messages = [new HumanMessage({ content: description })];\n\n // Invoke the subagent\n const result = (await subagent.invoke(subagentState, config)) as Record<\n string,\n unknown\n >;\n\n // Return command with filtered state update\n if (!config.toolCall?.id) {\n throw new Error(\"Tool call ID is required for subagent invocation\");\n }\n\n return returnCommandWithStateUpdate(result, config.toolCall.id);\n },\n {\n name: \"task\",\n description: finalTaskDescription,\n schema: z.object({\n description: z\n .string()\n .describe(\"The task to execute with the selected agent\"),\n subagent_type: z\n .string()\n .describe(\n `Name of the agent to use. Available: ${Object.keys(subagentGraphs).join(\", \")}`,\n ),\n }),\n },\n );\n}\n\n/**\n * Options for creating subagent middleware\n */\nexport interface SubAgentMiddlewareOptions {\n /** The model to use for subagents */\n defaultModel: LanguageModelLike | string;\n /** The tools to use for the default general-purpose subagent */\n defaultTools?: StructuredTool[];\n /** Default middleware to apply to all subagents */\n defaultMiddleware?: AgentMiddleware[] | null;\n /** The tool configs for the default general-purpose subagent */\n defaultInterruptOn?: Record<string, boolean | InterruptOnConfig> | null;\n /** A list of additional subagents to provide to the agent */\n subagents?: (SubAgent | CompiledSubAgent)[];\n /** Full system prompt override */\n systemPrompt?: string | null;\n /** Whether to include the general-purpose agent */\n generalPurposeAgent?: boolean;\n /** Custom description for the task tool */\n taskDescription?: string | null;\n}\n\n/**\n * Create subagent middleware with task tool\n */\nexport function createSubAgentMiddleware(options: SubAgentMiddlewareOptions) {\n const {\n defaultModel,\n defaultTools = [],\n defaultMiddleware = null,\n defaultInterruptOn = null,\n subagents = [],\n systemPrompt = TASK_SYSTEM_PROMPT,\n generalPurposeAgent = true,\n taskDescription = null,\n } = options;\n\n const taskTool = createTaskTool({\n defaultModel,\n defaultTools,\n defaultMiddleware,\n defaultInterruptOn,\n subagents,\n generalPurposeAgent,\n taskDescription,\n });\n\n return createMiddleware({\n name: \"subAgentMiddleware\",\n tools: [taskTool],\n wrapModelCall: async (request, handler) => {\n if (systemPrompt !== null) {\n return handler({\n ...request,\n systemMessage: request.systemMessage.concat(\n new SystemMessage({ content: systemPrompt }),\n ),\n });\n }\n return handler(request);\n },\n });\n}\n","import {\n createMiddleware,\n ToolMessage,\n AIMessage,\n /**\n * required for type inference\n */\n type AgentMiddleware as _AgentMiddleware,\n} from \"langchain\";\nimport { RemoveMessage } from \"@langchain/core/messages\";\nimport { REMOVE_ALL_MESSAGES } from \"@langchain/langgraph\";\n\n/**\n * Create middleware that patches dangling tool calls in the messages history.\n *\n * When an AI message contains tool_calls but subsequent messages don't include\n * the corresponding ToolMessage responses, this middleware adds synthetic\n * ToolMessages saying the tool call was cancelled.\n *\n * @returns AgentMiddleware that patches dangling tool calls\n *\n * @example\n * ```typescript\n * import { createAgent } from \"langchain\";\n * import { createPatchToolCallsMiddleware } from \"./middleware/patch_tool_calls\";\n *\n * const agent = createAgent({\n * model: \"claude-sonnet-4-5-20250929\",\n * middleware: [createPatchToolCallsMiddleware()],\n * });\n * ```\n */\nexport function createPatchToolCallsMiddleware() {\n return createMiddleware({\n name: \"patchToolCallsMiddleware\",\n beforeAgent: async (state) => {\n const messages = state.messages;\n\n if (!messages || messages.length === 0) {\n return;\n }\n\n const patchedMessages: any[] = [];\n\n // Iterate over the messages and add any dangling tool calls\n for (let i = 0; i < messages.length; i++) {\n const msg = messages[i];\n patchedMessages.push(msg);\n\n // Check if this is an AI message with tool calls\n if (AIMessage.isInstance(msg) && msg.tool_calls != null) {\n for (const toolCall of msg.tool_calls) {\n // Look for a corresponding ToolMessage in the messages after this one\n const correspondingToolMsg = messages\n .slice(i)\n .find(\n (m: any) =>\n ToolMessage.isInstance(m) && m.tool_call_id === toolCall.id,\n );\n\n if (!correspondingToolMsg) {\n // We have a dangling tool call which needs a ToolMessage\n const toolMsg = `Tool call ${toolCall.name} with id ${toolCall.id} was cancelled - another message came in before it could be completed.`;\n patchedMessages.push(\n new ToolMessage({\n content: toolMsg,\n name: toolCall.name,\n tool_call_id: toolCall.id!,\n }),\n );\n }\n }\n }\n }\n\n // Return state update with RemoveMessage followed by patched messages\n return {\n messages: [\n new RemoveMessage({ id: REMOVE_ALL_MESSAGES }),\n ...patchedMessages,\n ],\n };\n },\n });\n}\n","/**\n * Middleware for loading agent memory/context from AGENTS.md files.\n *\n * This module implements support for the AGENTS.md specification (https://agents.md/),\n * loading memory/context from configurable sources and injecting into the system prompt.\n *\n * ## Overview\n *\n * AGENTS.md files provide project-specific context and instructions to help AI agents\n * work effectively. Unlike skills (which are on-demand workflows), memory is always\n * loaded and provides persistent context.\n *\n * ## Usage\n *\n * ```typescript\n * import { createMemoryMiddleware } from \"@anthropic/deepagents\";\n * import { FilesystemBackend } from \"@anthropic/deepagents\";\n *\n * // Security: FilesystemBackend allows reading/writing from the entire filesystem.\n * // Either ensure the agent is running within a sandbox OR add human-in-the-loop (HIL)\n * // approval to file operations.\n * const backend = new FilesystemBackend({ rootDir: \"/\" });\n *\n * const middleware = createMemoryMiddleware({\n * backend,\n * sources: [\n * \"~/.deepagents/AGENTS.md\",\n * \"./.deepagents/AGENTS.md\",\n * ],\n * });\n *\n * const agent = createDeepAgent({ middleware: [middleware] });\n * ```\n *\n * ## Memory Sources\n *\n * Sources are simply paths to AGENTS.md files that are loaded in order and combined.\n * Multiple sources are concatenated in order, with all content included.\n * Later sources appear after earlier ones in the combined prompt.\n *\n * ## File Format\n *\n * AGENTS.md files are standard Markdown with no required structure.\n * Common sections include:\n * - Project overview\n * - Build/test commands\n * - Code style guidelines\n * - Architecture notes\n */\n\nimport { z } from \"zod\";\nimport {\n createMiddleware,\n /**\n * required for type inference\n */\n type AgentMiddleware as _AgentMiddleware,\n} from \"langchain\";\n\nimport type { BackendProtocol, BackendFactory } from \"../backends/protocol.js\";\nimport type { StateBackend } from \"../backends/state.js\";\nimport type { BaseStore } from \"@langchain/langgraph-checkpoint\";\n\n/**\n * Options for the memory middleware.\n */\nexport interface MemoryMiddlewareOptions {\n /**\n * Backend instance or factory function for file operations.\n * Use a factory for StateBackend since it requires runtime state.\n */\n backend:\n | BackendProtocol\n | BackendFactory\n | ((config: { state: unknown; store?: BaseStore }) => StateBackend);\n\n /**\n * List of memory file paths to load (e.g., [\"~/.deepagents/AGENTS.md\", \"./.deepagents/AGENTS.md\"]).\n * Display names are automatically derived from the paths.\n * Sources are loaded in order.\n */\n sources: string[];\n}\n\n/**\n * State schema for memory middleware.\n */\nconst MemoryStateSchema = z.object({\n /**\n * Dict mapping source paths to their loaded content.\n * Marked as private so it's not included in the final agent state.\n */\n memoryContents: z.record(z.string(), z.string()).optional(),\n});\n\n/**\n * Default system prompt template for memory.\n * Ported from Python's comprehensive memory guidelines.\n */\nconst MEMORY_SYSTEM_PROMPT = `<agent_memory>\n{memory_contents}\n</agent_memory>\n\n<memory_guidelines>\n The above <agent_memory> was loaded in from files in your filesystem. As you learn from your interactions with the user, you can save new knowledge by calling the \\`edit_file\\` tool.\n\n **Learning from feedback:**\n - One of your MAIN PRIORITIES is to learn from your interactions with the user. These learnings can be implicit or explicit. This means that in the future, you will remember this important information.\n - When you need to remember something, updating memory must be your FIRST, IMMEDIATE action - before responding to the user, before calling other tools, before doing anything else. Just update memory immediately.\n - When user says something is better/worse, capture WHY and encode it as a pattern.\n - Each correction is a chance to improve permanently - don't just fix the immediate issue, update your instructions.\n - A great opportunity to update your memories is when the user interrupts a tool call and provides feedback. You should update your memories immediately before revising the tool call.\n - Look for the underlying principle behind corrections, not just the specific mistake.\n - The user might not explicitly ask you to remember something, but if they provide information that is useful for future use, you should update your memories immediately.\n\n **Asking for information:**\n - If you lack context to perform an action (e.g. send a Slack DM, requires a user ID/email) you should explicitly ask the user for this information.\n - It is preferred for you to ask for information, don't assume anything that you do not know!\n - When the user provides information that is useful for future use, you should update your memories immediately.\n\n **When to update memories:**\n - When the user explicitly asks you to remember something (e.g., \"remember my email\", \"save this preference\")\n - When the user describes your role or how you should behave (e.g., \"you are a web researcher\", \"always do X\")\n - When the user gives feedback on your work - capture what was wrong and how to improve\n - When the user provides information required for tool use (e.g., slack channel ID, email addresses)\n - When the user provides context useful for future tasks, such as how to use tools, or which actions to take in a particular situation\n - When you discover new patterns or preferences (coding styles, conventions, workflows)\n\n **When to NOT update memories:**\n - When the information is temporary or transient (e.g., \"I'm running late\", \"I'm on my phone right now\")\n - When the information is a one-time task request (e.g., \"Find me a recipe\", \"What's 25 * 4?\")\n - When the information is a simple question that doesn't reveal lasting preferences (e.g., \"What day is it?\", \"Can you explain X?\")\n - When the information is an acknowledgment or small talk (e.g., \"Sounds good!\", \"Hello\", \"Thanks for that\")\n - When the information is stale or irrelevant in future conversations\n - Never store API keys, access tokens, passwords, or any other credentials in any file, memory, or system prompt.\n - If the user asks where to put API keys or provides an API key, do NOT echo or save it.\n\n **Examples:**\n Example 1 (remembering user information):\n User: Can you connect to my google account?\n Agent: Sure, I'll connect to your google account, what's your google account email?\n User: john@example.com\n Agent: Let me save this to my memory.\n Tool Call: edit_file(...) -> remembers that the user's google account email is john@example.com\n\n Example 2 (remembering implicit user preferences):\n User: Can you write me an example for creating a deep agent in LangChain?\n Agent: Sure, I'll write you an example for creating a deep agent in LangChain <example code in Python>\n User: Can you do this in JavaScript\n Agent: Let me save this to my memory.\n Tool Call: edit_file(...) -> remembers that the user prefers to get LangChain code examples in JavaScript\n Agent: Sure, here is the JavaScript example<example code in JavaScript>\n\n Example 3 (do not remember transient information):\n User: I'm going to play basketball tonight so I will be offline for a few hours.\n Agent: Okay I'll add a block to your calendar.\n Tool Call: create_calendar_event(...) -> just calls a tool, does not commit anything to memory, as it is transient information\n</memory_guidelines>`;\n\n/**\n * Format loaded memory contents for injection into prompt.\n * Pairs memory locations with their contents for clarity.\n */\nfunction formatMemoryContents(\n contents: Record<string, string>,\n sources: string[],\n): string {\n if (Object.keys(contents).length === 0) {\n return \"(No memory loaded)\";\n }\n\n const sections: string[] = [];\n for (const path of sources) {\n if (contents[path]) {\n sections.push(`${path}\\n${contents[path]}`);\n }\n }\n\n if (sections.length === 0) {\n return \"(No memory loaded)\";\n }\n\n return sections.join(\"\\n\\n\");\n}\n\n/**\n * Load memory content from a backend path.\n *\n * @param backend - Backend to load from.\n * @param path - Path to the AGENTS.md file.\n * @returns File content if found, null otherwise.\n */\nasync function loadMemoryFromBackend(\n backend: BackendProtocol,\n path: string,\n): Promise<string | null> {\n // Use downloadFiles if available, otherwise fall back to read\n if (!backend.downloadFiles) {\n const content = await backend.read(path);\n if (content.startsWith(\"Error:\")) {\n return null;\n }\n return content;\n }\n\n const results = await backend.downloadFiles([path]);\n\n // Should get exactly one response for one path\n if (results.length !== 1) {\n throw new Error(\n `Expected 1 response for path ${path}, got ${results.length}`,\n );\n }\n const response = results[0];\n\n if (response.error != null) {\n // For now, memory files are treated as optional. file_not_found is expected\n // and we skip silently to allow graceful degradation.\n if (response.error === \"file_not_found\") {\n return null;\n }\n // Other errors should be raised\n throw new Error(`Failed to download ${path}: ${response.error}`);\n }\n\n if (response.content != null) {\n // Content is a Uint8Array, decode to string\n return new TextDecoder().decode(response.content);\n }\n\n return null;\n}\n\n/**\n * Create middleware for loading agent memory from AGENTS.md files.\n *\n * Loads memory content from configured sources and injects into the system prompt.\n * Supports multiple sources that are combined together.\n *\n * @param options - Configuration options\n * @returns AgentMiddleware for memory loading and injection\n *\n * @example\n * ```typescript\n * const middleware = createMemoryMiddleware({\n * backend: new FilesystemBackend({ rootDir: \"/\" }),\n * sources: [\n * \"~/.deepagents/AGENTS.md\",\n * \"./.deepagents/AGENTS.md\",\n * ],\n * });\n * ```\n */\nexport function createMemoryMiddleware(options: MemoryMiddlewareOptions) {\n const { backend, sources } = options;\n\n /**\n * Resolve backend from instance or factory.\n */\n function getBackend(state: unknown): BackendProtocol {\n if (typeof backend === \"function\") {\n // It's a factory - call it with state\n return backend({ state }) as BackendProtocol;\n }\n return backend;\n }\n\n return createMiddleware({\n name: \"MemoryMiddleware\",\n stateSchema: MemoryStateSchema,\n\n async beforeAgent(state) {\n // Skip if already loaded\n if (\"memoryContents\" in state && state.memoryContents != null) {\n return undefined;\n }\n\n const resolvedBackend = getBackend(state);\n const contents: Record<string, string> = {};\n\n for (const path of sources) {\n try {\n const content = await loadMemoryFromBackend(resolvedBackend, path);\n if (content) {\n contents[path] = content;\n }\n } catch (error) {\n // Log but continue - memory is optional\n // eslint-disable-next-line no-console\n console.debug(`Failed to load memory from ${path}:`, error);\n }\n }\n\n return { memoryContents: contents };\n },\n\n wrapModelCall(request, handler) {\n // Get memory contents from state\n const memoryContents: Record<string, string> =\n request.state?.memoryContents || {};\n\n // Format memory section\n const formattedContents = formatMemoryContents(memoryContents, sources);\n\n const memorySection = MEMORY_SYSTEM_PROMPT.replace(\n \"{memory_contents}\",\n formattedContents,\n );\n\n // Prepend memory section to system prompt\n const currentSystemPrompt = request.systemPrompt || \"\";\n const newSystemPrompt = currentSystemPrompt\n ? `${memorySection}\\n\\n${currentSystemPrompt}`\n : memorySection;\n\n return handler({ ...request, systemPrompt: newSystemPrompt });\n },\n });\n}\n","/* eslint-disable no-console */\n/**\n * Backend-agnostic skills middleware for loading agent skills from any backend.\n *\n * This middleware implements Anthropic's agent skills pattern with progressive disclosure,\n * loading skills from backend storage via configurable sources.\n *\n * ## Architecture\n *\n * Skills are loaded from one or more **sources** - paths in a backend where skills are\n * organized. Sources are loaded in order, with later sources overriding earlier ones\n * when skills have the same name (last one wins). This enables layering: base -> user\n * -> project -> team skills.\n *\n * The middleware uses backend APIs exclusively (no direct filesystem access), making it\n * portable across different storage backends (filesystem, state, remote storage, etc.).\n *\n * ## Usage\n *\n * ```typescript\n * import { createSkillsMiddleware, FilesystemBackend } from \"@anthropic/deepagents\";\n *\n * const middleware = createSkillsMiddleware({\n * backend: new FilesystemBackend({ rootDir: \"/\" }),\n * sources: [\n * \"/skills/user/\",\n * \"/skills/project/\",\n * ],\n * });\n *\n * const agent = createDeepAgent({ middleware: [middleware] });\n * ```\n *\n * Or use the `skills` parameter on createDeepAgent:\n *\n * ```typescript\n * const agent = createDeepAgent({\n * skills: [\"/skills/user/\", \"/skills/project/\"],\n * });\n * ```\n */\n\nimport { z } from \"zod\";\nimport yaml from \"yaml\";\nimport {\n createMiddleware,\n /**\n * required for type inference\n */\n type AgentMiddleware as _AgentMiddleware,\n} from \"langchain\";\n\nimport type { BackendProtocol, BackendFactory } from \"../backends/protocol.js\";\nimport type { StateBackend } from \"../backends/state.js\";\nimport type { BaseStore } from \"@langchain/langgraph-checkpoint\";\n\n// Security: Maximum size for SKILL.md files to prevent DoS attacks (10MB)\nexport const MAX_SKILL_FILE_SIZE = 10 * 1024 * 1024;\n\n// Agent Skills specification constraints (https://agentskills.io/specification)\nexport const MAX_SKILL_NAME_LENGTH = 64;\nexport const MAX_SKILL_DESCRIPTION_LENGTH = 1024;\n\n/**\n * Metadata for a skill per Agent Skills specification.\n */\nexport interface SkillMetadata {\n /** Skill identifier (max 64 chars, lowercase alphanumeric and hyphens) */\n name: string;\n\n /** What the skill does (max 1024 chars) */\n description: string;\n\n /** Path to the SKILL.md file in the backend */\n path: string;\n\n /** License name or reference to bundled license file */\n license?: string | null;\n\n /** Environment requirements (max 500 chars) */\n compatibility?: string | null;\n\n /** Arbitrary key-value mapping for additional metadata */\n metadata?: Record<string, string>;\n\n /** List of pre-approved tools (experimental) */\n allowedTools?: string[];\n}\n\n/**\n * Options for the skills middleware.\n */\nexport interface SkillsMiddlewareOptions {\n /**\n * Backend instance or factory function for file operations.\n * Use a factory for StateBackend since it requires runtime state.\n */\n backend:\n | BackendProtocol\n | BackendFactory\n | ((config: { state: unknown; store?: BaseStore }) => StateBackend);\n\n /**\n * List of skill source paths to load (e.g., [\"/skills/user/\", \"/skills/project/\"]).\n * Paths must use POSIX conventions (forward slashes).\n * Later sources override earlier ones for skills with the same name (last one wins).\n */\n sources: string[];\n}\n\n/**\n * State schema for skills middleware.\n */\nconst SkillsStateSchema = z.object({\n skillsMetadata: z\n .array(\n z.object({\n name: z.string(),\n description: z.string(),\n path: z.string(),\n license: z.string().nullable().optional(),\n compatibility: z.string().nullable().optional(),\n metadata: z.record(z.string(), z.string()).optional(),\n allowedTools: z.array(z.string()).optional(),\n }),\n )\n .optional(),\n});\n\n/**\n * Skills System Documentation prompt template.\n */\nconst SKILLS_SYSTEM_PROMPT = `\n## Skills System\n\nYou have access to a skills library that provides specialized capabilities and domain knowledge.\n\n{skills_locations}\n\n**Available Skills:**\n\n{skills_list}\n\n**How to Use Skills (Progressive Disclosure):**\n\nSkills follow a **progressive disclosure** pattern - you know they exist (name + description above), but you only read the full instructions when needed:\n\n1. **Recognize when a skill applies**: Check if the user's task matches any skill's description\n2. **Read the skill's full instructions**: The skill list above shows the exact path to use with read_file\n3. **Follow the skill's instructions**: SKILL.md contains step-by-step workflows, best practices, and examples\n4. **Access supporting files**: Skills may include Python scripts, configs, or reference docs - use absolute paths\n\n**When to Use Skills:**\n- When the user's request matches a skill's domain (e.g., \"research X\" → web-research skill)\n- When you need specialized knowledge or structured workflows\n- When a skill provides proven patterns for complex tasks\n\n**Skills are Self-Documenting:**\n- Each SKILL.md tells you exactly what the skill does and how to use it\n- The skill list above shows the full path for each skill's SKILL.md file\n\n**Executing Skill Scripts:**\nSkills may contain Python scripts or other executable files. Always use absolute paths from the skill list.\n\n**Example Workflow:**\n\nUser: \"Can you research the latest developments in quantum computing?\"\n\n1. Check available skills above → See \"web-research\" skill with its full path\n2. Read the skill using the path shown in the list\n3. Follow the skill's research workflow (search → organize → synthesize)\n4. Use any helper scripts with absolute paths\n\nRemember: Skills are tools to make you more capable and consistent. When in doubt, check if a skill exists for the task!\n`;\n\n/**\n * Validate skill name per Agent Skills specification.\n */\nfunction validateSkillName(\n name: string,\n directoryName: string,\n): { valid: boolean; error: string } {\n if (!name) {\n return { valid: false, error: \"name is required\" };\n }\n if (name.length > MAX_SKILL_NAME_LENGTH) {\n return { valid: false, error: \"name exceeds 64 characters\" };\n }\n // Pattern: lowercase alphanumeric, single hyphens between segments, no start/end hyphen\n if (!/^[a-z0-9]+(-[a-z0-9]+)*$/.test(name)) {\n return {\n valid: false,\n error: \"name must be lowercase alphanumeric with single hyphens only\",\n };\n }\n if (name !== directoryName) {\n return {\n valid: false,\n error: `name '${name}' must match directory name '${directoryName}'`,\n };\n }\n return { valid: true, error: \"\" };\n}\n\n/**\n * Parse YAML frontmatter from SKILL.md content.\n */\nfunction parseSkillMetadataFromContent(\n content: string,\n skillPath: string,\n directoryName: string,\n): SkillMetadata | null {\n if (content.length > MAX_SKILL_FILE_SIZE) {\n console.warn(\n `Skipping ${skillPath}: content too large (${content.length} bytes)`,\n );\n return null;\n }\n\n // Match YAML frontmatter between --- delimiters\n const frontmatterPattern = /^---\\s*\\n([\\s\\S]*?)\\n---\\s*\\n/;\n const match = content.match(frontmatterPattern);\n\n if (!match) {\n console.warn(`Skipping ${skillPath}: no valid YAML frontmatter found`);\n return null;\n }\n\n const frontmatterStr = match[1];\n\n // Parse YAML\n let frontmatterData: Record<string, unknown>;\n try {\n frontmatterData = yaml.parse(frontmatterStr);\n } catch (e) {\n console.warn(`Invalid YAML in ${skillPath}:`, e);\n return null;\n }\n\n if (!frontmatterData || typeof frontmatterData !== \"object\") {\n console.warn(`Skipping ${skillPath}: frontmatter is not a mapping`);\n return null;\n }\n\n // Validate required fields\n const name = frontmatterData.name as string | undefined;\n const description = frontmatterData.description as string | undefined;\n\n if (!name || !description) {\n console.warn(\n `Skipping ${skillPath}: missing required 'name' or 'description'`,\n );\n return null;\n }\n\n // Validate name format per spec (warn but continue for backwards compatibility)\n const validation = validateSkillName(String(name), directoryName);\n if (!validation.valid) {\n console.warn(\n `Skill '${name}' in ${skillPath} does not follow Agent Skills specification: ${validation.error}. Consider renaming for spec compliance.`,\n );\n }\n\n // Validate description length per spec (max 1024 chars)\n let descriptionStr = String(description).trim();\n if (descriptionStr.length > MAX_SKILL_DESCRIPTION_LENGTH) {\n console.warn(\n `Description exceeds ${MAX_SKILL_DESCRIPTION_LENGTH} characters in ${skillPath}, truncating`,\n );\n descriptionStr = descriptionStr.slice(0, MAX_SKILL_DESCRIPTION_LENGTH);\n }\n\n // Parse allowed-tools\n const allowedToolsStr = frontmatterData[\"allowed-tools\"] as\n | string\n | undefined;\n const allowedTools = allowedToolsStr ? allowedToolsStr.split(\" \") : [];\n\n return {\n name: String(name),\n description: descriptionStr,\n path: skillPath,\n metadata: (frontmatterData.metadata as Record<string, string>) || {},\n license:\n typeof frontmatterData.license === \"string\"\n ? frontmatterData.license.trim() || null\n : null,\n compatibility:\n typeof frontmatterData.compatibility === \"string\"\n ? frontmatterData.compatibility.trim() || null\n : null,\n allowedTools,\n };\n}\n\n/**\n * List all skills from a backend source.\n */\nasync function listSkillsFromBackend(\n backend: BackendProtocol,\n sourcePath: string,\n): Promise<SkillMetadata[]> {\n const skills: SkillMetadata[] = [];\n\n // Normalize path to ensure it ends with /\n const normalizedPath = sourcePath.endsWith(\"/\")\n ? sourcePath\n : `${sourcePath}/`;\n\n // List directories in the source path using lsInfo\n let fileInfos: { path: string; is_dir?: boolean }[];\n try {\n fileInfos = await backend.lsInfo(normalizedPath);\n } catch {\n // Source path doesn't exist or can't be listed\n return [];\n }\n\n // Convert FileInfo[] to entries format\n const entries = fileInfos.map((info) => ({\n name: info.path.replace(/\\/$/, \"\").split(\"/\").pop() || \"\",\n type: (info.is_dir ? \"directory\" : \"file\") as \"file\" | \"directory\",\n }));\n\n // Look for subdirectories containing SKILL.md\n for (const entry of entries) {\n if (entry.type !== \"directory\") {\n continue;\n }\n\n const skillMdPath = `${normalizedPath}${entry.name}/SKILL.md`;\n\n // Try to download the SKILL.md file\n let content: string;\n if (backend.downloadFiles) {\n const results = await backend.downloadFiles([skillMdPath]);\n if (results.length !== 1) {\n continue;\n }\n\n const response = results[0];\n if (response.error != null || response.content == null) {\n continue;\n }\n\n // Decode content\n content = new TextDecoder().decode(response.content);\n } else {\n // Fall back to read if downloadFiles is not available\n const readResult = await backend.read(skillMdPath);\n if (readResult.startsWith(\"Error:\")) {\n continue;\n }\n content = readResult;\n }\n const metadata = parseSkillMetadataFromContent(\n content,\n skillMdPath,\n entry.name,\n );\n\n if (metadata) {\n skills.push(metadata);\n }\n }\n\n return skills;\n}\n\n/**\n * Format skills locations for display in system prompt.\n * Shows priority indicator for the last source (highest priority).\n */\nfunction formatSkillsLocations(sources: string[]): string {\n if (sources.length === 0) {\n return \"**Skills Sources:** None configured\";\n }\n\n const lines: string[] = [];\n for (let i = 0; i < sources.length; i++) {\n const sourcePath = sources[i];\n // Extract a friendly name from the path (last non-empty component)\n const name =\n sourcePath\n .replace(/\\/$/, \"\")\n .split(\"/\")\n .filter(Boolean)\n .pop()\n ?.replace(/^./, (c) => c.toUpperCase()) || \"Skills\";\n const suffix = i === sources.length - 1 ? \" (higher priority)\" : \"\";\n lines.push(`**${name} Skills**: \\`${sourcePath}\\`${suffix}`);\n }\n return lines.join(\"\\n\");\n}\n\n/**\n * Format skills metadata for display in system prompt.\n * Shows allowed tools for each skill if specified.\n */\nfunction formatSkillsList(skills: SkillMetadata[], sources: string[]): string {\n if (skills.length === 0) {\n const paths = sources.map((s) => `\\`${s}\\``).join(\" or \");\n return `(No skills available yet. You can create skills in ${paths})`;\n }\n\n const lines: string[] = [];\n for (const skill of skills) {\n lines.push(`- **${skill.name}**: ${skill.description}`);\n if (skill.allowedTools && skill.allowedTools.length > 0) {\n lines.push(` → Allowed tools: ${skill.allowedTools.join(\", \")}`);\n }\n lines.push(` → Read \\`${skill.path}\\` for full instructions`);\n }\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Create backend-agnostic middleware for loading and exposing agent skills.\n *\n * This middleware loads skills from configurable backend sources and injects\n * skill metadata into the system prompt. It implements the progressive disclosure\n * pattern: skill names and descriptions are shown in the prompt, but the agent\n * reads full SKILL.md content only when needed.\n *\n * @param options - Configuration options\n * @returns AgentMiddleware for skills loading and injection\n *\n * @example\n * ```typescript\n * const middleware = createSkillsMiddleware({\n * backend: new FilesystemBackend({ rootDir: \"/\" }),\n * sources: [\"/skills/user/\", \"/skills/project/\"],\n * });\n * ```\n */\nexport function createSkillsMiddleware(options: SkillsMiddlewareOptions) {\n const { backend, sources } = options;\n\n // Closure variable to store loaded skills - wrapModelCall can access this\n // directly since beforeAgent state updates aren't immediately available\n let loadedSkills: SkillMetadata[] = [];\n\n /**\n * Resolve backend from instance or factory.\n */\n function getBackend(state: unknown): BackendProtocol {\n if (typeof backend === \"function\") {\n return backend({ state }) as BackendProtocol;\n }\n return backend;\n }\n\n return createMiddleware({\n name: \"SkillsMiddleware\",\n stateSchema: SkillsStateSchema,\n\n async beforeAgent(state) {\n // Skip if already loaded (check both closure and state)\n if (loadedSkills.length > 0) {\n return undefined;\n }\n if (\"skillsMetadata\" in state && state.skillsMetadata != null) {\n // Restore from state (e.g., after checkpoint restore)\n loadedSkills = state.skillsMetadata as SkillMetadata[];\n return undefined;\n }\n\n const resolvedBackend = getBackend(state);\n const allSkills: Map<string, SkillMetadata> = new Map();\n\n // Load skills from each source in order (later sources override earlier)\n for (const sourcePath of sources) {\n try {\n const skills = await listSkillsFromBackend(\n resolvedBackend,\n sourcePath,\n );\n for (const skill of skills) {\n allSkills.set(skill.name, skill);\n }\n } catch (error) {\n // Log but continue - individual source failures shouldn't break everything\n console.debug(\n `[BackendSkillsMiddleware] Failed to load skills from ${sourcePath}:`,\n error,\n );\n }\n }\n\n // Store in closure for immediate access by wrapModelCall\n loadedSkills = Array.from(allSkills.values());\n\n return { skillsMetadata: loadedSkills };\n },\n\n wrapModelCall(request, handler) {\n // Use closure variable which is populated by beforeAgent\n // Fall back to state for checkpoint restore scenarios\n const skillsMetadata: SkillMetadata[] =\n loadedSkills.length > 0\n ? loadedSkills\n : (request.state?.skillsMetadata as SkillMetadata[]) || [];\n\n // Format skills section\n const skillsLocations = formatSkillsLocations(sources);\n const skillsList = formatSkillsList(skillsMetadata, sources);\n\n const skillsSection = SKILLS_SYSTEM_PROMPT.replace(\n \"{skills_locations}\",\n skillsLocations,\n ).replace(\"{skills_list}\", skillsList);\n\n // Append to existing system prompt\n const currentSystemPrompt = request.systemPrompt || \"\";\n const newSystemPrompt = currentSystemPrompt\n ? `${currentSystemPrompt}\\n\\n${skillsSection}`\n : skillsSection;\n\n return handler({ ...request, systemPrompt: newSystemPrompt });\n },\n });\n}\n","function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class OpenAIError extends Error {\n}\nexport class APIError extends OpenAIError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('x-request-id');\n this.error = error;\n const data = error;\n this.code = data?.['code'];\n this.param = data?.['param'];\n this.type = data?.['type'];\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse?.['error'];\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\nexport class LengthFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the length limit was reached`);\n }\n}\nexport class ContentFilterFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the request was rejected by the content filter`);\n }\n}\nexport class InvalidWebhookSignatureError extends Error {\n constructor(message) {\n super(message);\n }\n}\n//# sourceMappingURL=error.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new OpenAIError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new OpenAIError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n//# sourceMappingURL=values.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map","export const VERSION = '6.16.0'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map","export const default_format = 'RFC3986';\nexport const default_formatter = (v) => String(v);\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nexport let has = (obj, key) => ((has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n has(obj, key));\nconst hex_table = /* @__PURE__ */ (() => {\n const array = [];\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n})();\nfunction compact_queue(queue) {\n while (queue.length > 1) {\n const item = queue.pop();\n if (!item)\n continue;\n const obj = item.obj[item.prop];\n if (isArray(obj)) {\n const compacted = [];\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n // @ts-ignore\n item.obj[item.prop] = compacted;\n }\n }\n}\nfunction array_to_object(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {};\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n}\nexport function merge(target, source, options = {}) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n let mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has(target, i)) {\n const targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key];\n if (has(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n}\nexport function assign_single_source(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n}\nexport function decode(str, _, charset) {\n const strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n}\nconst limit = 1024;\nexport const encode = (str, _defaultEncoder, charset, _kind, format) => {\n // This code was originally written by Brian White for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n let string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n }\n else if (typeof str !== 'string') {\n string = String(str);\n }\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n let out = '';\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n const arr = [];\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i);\n if (c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n if (c < 0x80) {\n arr[arr.length] = hex_table[c];\n continue;\n }\n if (c < 0x800) {\n arr[arr.length] = hex_table[0xc0 | (c >> 6)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hex_table[0xe0 | (c >> 12)] + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n arr[arr.length] =\n hex_table[0xf0 | (c >> 18)] +\n hex_table[0x80 | ((c >> 12) & 0x3f)] +\n hex_table[0x80 | ((c >> 6) & 0x3f)] +\n hex_table[0x80 | (c & 0x3f)];\n }\n out += arr.join('');\n }\n return out;\n};\nexport function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }];\n const refs = [];\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i];\n // @ts-ignore\n const obj = item.obj[item.prop];\n const keys = Object.keys(obj);\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j];\n const val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compact_queue(queue);\n return value;\n}\nexport function is_regexp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nexport function is_buffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\nexport function combine(a, b) {\n return [].concat(a, b);\n}\nexport function maybe_map(val, fn) {\n if (isArray(val)) {\n const mapped = [];\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n}\n//# sourceMappingURL=utils.mjs.map","import { encode, is_buffer, maybe_map, has } from \"./utils.mjs\";\nimport { default_format, default_formatter, formatters } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nconst array_prefix_generators = {\n brackets(prefix) {\n return String(prefix) + '[]';\n },\n comma: 'comma',\n indices(prefix, key) {\n return String(prefix) + '[' + key + ']';\n },\n repeat(prefix) {\n return String(prefix);\n },\n};\nconst push_to_array = function (arr, value_or_array) {\n Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\nlet toISOString;\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: encode,\n encodeValuesOnly: false,\n format: default_format,\n formatter: default_formatter,\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date);\n },\n skipNulls: false,\n strictNullHandling: false,\n};\nfunction is_non_nullish_primitive(v) {\n return (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint');\n}\nconst sentinel = {};\nfunction inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n let obj = object;\n let tmp_sc = sideChannel;\n let step = 0;\n let find_flag = false;\n while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n // Where object last appeared in the ref tree\n const pos = tmp_sc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n }\n else {\n find_flag = true; // Break while\n }\n }\n if (typeof tmp_sc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate?.(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = maybe_map(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate?.(value);\n }\n return value;\n });\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ?\n // @ts-expect-error\n encoder(prefix, defaults.encoder, charset, 'key', format)\n : prefix;\n }\n obj = '';\n }\n if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n if (encoder) {\n const key_value = encodeValuesOnly ? prefix\n // @ts-expect-error\n : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [\n formatter?.(key_value) +\n '=' +\n // @ts-expect-error\n formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n ];\n }\n return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n }\n const values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n let obj_keys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n // @ts-expect-error values only\n obj = maybe_map(obj, encoder);\n }\n obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n }\n else if (isArray(filter)) {\n obj_keys = filter;\n }\n else {\n const keys = Object.keys(obj);\n obj_keys = sort ? keys.sort(sort) : keys;\n }\n const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n const adjusted_prefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjusted_prefix + '[]';\n }\n for (let j = 0; j < obj_keys.length; ++j) {\n const key = obj_keys[j];\n const value = \n // @ts-ignore\n typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n if (skipNulls && value === null) {\n continue;\n }\n // @ts-ignore\n const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n const key_prefix = isArray(obj) ?\n typeof generateArrayPrefix === 'function' ?\n generateArrayPrefix(adjusted_prefix, encoded_key)\n : adjusted_prefix\n : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n sideChannel.set(object, step);\n const valueSideChannel = new WeakMap();\n valueSideChannel.set(sentinel, sideChannel);\n push_to_array(values, inner_stringify(value, key_prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, \n // @ts-ignore\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n }\n return values;\n}\nfunction normalize_stringify_options(opts = defaults) {\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n const charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n let format = default_format;\n if (typeof opts.format !== 'undefined') {\n if (!has(formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n const formatter = formatters[format];\n let filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n let arrayFormat;\n if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n arrayFormat = opts.arrayFormat;\n }\n else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = defaults.arrayFormat;\n }\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n const allowDots = typeof opts.allowDots === 'undefined' ?\n !!opts.encodeDotInKeys === true ?\n true\n : defaults.allowDots\n : !!opts.allowDots;\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n // @ts-ignore\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n // @ts-ignore\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n };\n}\nexport function stringify(object, opts = {}) {\n let obj = object;\n const options = normalize_stringify_options(opts);\n let obj_keys;\n let filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n obj_keys = filter;\n }\n const keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n if (!obj_keys) {\n obj_keys = Object.keys(obj);\n }\n if (options.sort) {\n obj_keys.sort(options.sort);\n }\n const sideChannel = new WeakMap();\n for (let i = 0; i < obj_keys.length; ++i) {\n const key = obj_keys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n push_to_array(keys, inner_stringify(obj[key], key, \n // @ts-expect-error\n generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n }\n const joined = keys.join(options.delimiter);\n let prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n}\n//# sourceMappingURL=stringify.mjs.map","export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map","var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map","var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (done)\n continue;\n if (sse.data.startsWith('[DONE]')) {\n done = true;\n continue;\n }\n if (sse.event === null || !sse.event.startsWith('thread.')) {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, response.headers);\n }\n yield data;\n }\n else {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n console.error(`Could not parse message into JSON:`, sse.data);\n console.error(`From chunk:`, sse.raw);\n throw e;\n }\n // TODO: Is this where the error should be thrown?\n if (sse.event == 'error') {\n throw new APIError(undefined, data.error, data.message, undefined);\n }\n yield { event: sse.event, data: data };\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new OpenAIError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new OpenAIError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream<T>`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller, client);\n }\n return Stream.fromSSEResponse(response, props.controller, client);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('x-request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the X-Request-ID header which is useful for debugging requests and reporting\n * issues to OpenAI.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('x-request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.object = body.object;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n nextPageRequestOptions() {\n return null;\n }\n}\nexport class CursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const data = this.getPaginatedItems();\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: id,\n },\n };\n }\n}\nexport class ConversationCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.last_id = body.last_id || '';\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map","import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n form.append(key, makeFile([await value.blob()], getName(value)));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, value, getName(value));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map","import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, BlobLikePart, or AsyncIterable of BlobLikeParts\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n // If we've been given a `File` we don't need to do anything\n if (isFileLike(value)) {\n if (value instanceof File) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], value.name);\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n name || (name = getName(value));\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map","import { OpenAIError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new OpenAIError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Messages extends APIResource {\n /**\n * Get the messages in a stored chat completion. Only Chat Completions that have\n * been created with the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n * 'completion_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(completionID, query = {}, options) {\n return this._client.getAPIList(path `/chat/completions/${completionID}/messages`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=messages.mjs.map","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\nexport function isChatCompletionFunctionTool(tool) {\n return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\nexport function makeParseableResponseFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function makeParseableTextFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableResponseFormat(response_format) {\n return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\nexport function makeParseableTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nexport function maybeParseChatCompletion(completion, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...completion,\n choices: completion.choices.map((choice) => {\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n parsed: null,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls,\n }\n : undefined),\n },\n };\n }),\n };\n }\n return parseChatCompletion(completion, params);\n}\nexport function parseChatCompletion(completion, params) {\n const choices = completion.choices.map((choice) => {\n if (choice.finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (choice.finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n }\n : undefined),\n parsed: choice.message.content && !choice.message.refusal ?\n parseResponseFormat(params, choice.message.content)\n : null,\n },\n };\n });\n return { ...completion, choices };\n}\nfunction parseResponseFormat(params, content) {\n if (params.response_format?.type !== 'json_schema') {\n return null;\n }\n if (params.response_format?.type === 'json_schema') {\n if ('$parseRaw' in params.response_format) {\n const response_format = params.response_format;\n return response_format.$parseRaw(content);\n }\n return JSON.parse(content);\n }\n return null;\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name); // TS doesn't narrow based on isChatCompletionTool\n return {\n ...toolCall,\n function: {\n ...toolCall.function,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n : null,\n },\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params || !('tools' in params) || !params.tools) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name);\n return (isChatCompletionFunctionTool(inputTool) &&\n (isAutoParsableTool(inputTool) || inputTool?.function.strict || false));\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.response_format)) {\n return true;\n }\n return (params.tools?.some((t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true)) ?? false);\n}\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(toolCalls) {\n for (const toolCall of toolCalls || []) {\n if (toolCall.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``);\n }\n }\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\n//# sourceMappingURL=parser.mjs.map","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isToolMessage = (message) => {\n return message?.role === 'tool';\n};\nexport function isPresent(obj) {\n return obj != null;\n}\n//# sourceMappingURL=chatCompletionUtils.mjs.map","var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_handleError;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nexport class EventStream {\n constructor() {\n _EventStream_instances.add(this);\n this.controller = new AbortController();\n _EventStream_connectedPromise.set(this, void 0);\n _EventStream_resolveConnectedPromise.set(this, () => { });\n _EventStream_rejectConnectedPromise.set(this, () => { });\n _EventStream_endPromise.set(this, void 0);\n _EventStream_resolveEndPromise.set(this, () => { });\n _EventStream_rejectEndPromise.set(this, () => { });\n _EventStream_listeners.set(this, {});\n _EventStream_ended.set(this, false);\n _EventStream_errored.set(this, false);\n _EventStream_aborted.set(this, false);\n _EventStream_catchingPromiseCreated.set(this, false);\n __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _EventStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _EventStream_endPromise, \"f\").catch(() => { });\n }\n _run(executor) {\n // Unfortunately if we call `executor()` immediately we get runtime errors about\n // references to `this` before the `super()` constructor call returns.\n setTimeout(() => {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _EventStream_instances, \"m\", _EventStream_handleError).bind(this));\n }, 0);\n }\n _connected() {\n if (this.ended)\n return;\n __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, \"f\").call(this);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _EventStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _EventStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _EventStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _EventStream_endPromise, \"f\");\n }\n _emit(event, ...args) {\n // make sure we don't emit any events after end\n if (__classPrivateFieldGet(this, _EventStream_ended, \"f\")) {\n return;\n }\n if (event === 'end') {\n __classPrivateFieldSet(this, _EventStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _EventStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.finalChatCompletion()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() { }\n}\n_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_handleError = function _EventStream_handleError(error) {\n __classPrivateFieldSet(this, _EventStream_errored, true, \"f\");\n if (error instanceof Error && error.name === 'AbortError') {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _EventStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof OpenAIError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const openAIError = new OpenAIError(error.message);\n // @ts-ignore\n openAIError.cause = error;\n return this._emit('error', openAIError);\n }\n return this._emit('error', new OpenAIError(String(error)));\n};\n//# sourceMappingURL=EventStream.mjs.map","export function isRunnableFunctionWithParse(fn) {\n return typeof fn.parse === 'function';\n}\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction {\n constructor(input) {\n this.type = 'function';\n this.function = input;\n }\n}\n//# sourceMappingURL=RunnableFunction.mjs.map","var _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport class AbstractChatCompletionRunner extends EventStream {\n constructor() {\n super(...arguments);\n _AbstractChatCompletionRunner_instances.add(this);\n this._chatCompletions = [];\n this.messages = [];\n }\n _addChatCompletion(chatCompletion) {\n this._chatCompletions.push(chatCompletion);\n this._emit('chatCompletion', chatCompletion);\n const message = chatCompletion.choices[0]?.message;\n if (message)\n this._addMessage(message);\n return chatCompletion;\n }\n _addMessage(message, emit = true) {\n if (!('content' in message))\n message.content = null;\n this.messages.push(message);\n if (emit) {\n this._emit('message', message);\n if (isToolMessage(message) && message.content) {\n // Note, this assumes that {role: 'tool', content: …} is always the result of a call of tool of type=function.\n this._emit('functionToolCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.tool_calls) {\n for (const tool_call of message.tool_calls) {\n if (tool_call.type === 'function') {\n this._emit('functionToolCall', tool_call.function);\n }\n }\n }\n }\n }\n /**\n * @returns a promise that resolves with the final ChatCompletion, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n */\n async finalChatCompletion() {\n await this.done();\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (!completion)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return completion;\n }\n /**\n * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalContent() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalFunctionToolCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n }\n async finalFunctionToolCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n }\n async totalUsage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this);\n }\n allChatCompletions() {\n return [...this._chatCompletions];\n }\n _emitFinal() {\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (completion)\n this._emit('finalChatCompletion', completion);\n const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n if (finalMessage)\n this._emit('finalMessage', finalMessage);\n const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n if (finalContent)\n this._emit('finalContent', finalContent);\n const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionToolCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n if (this._chatCompletions.some((c) => c.usage)) {\n this._emit('totalUsage', __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this));\n }\n }\n async _createChatCompletion(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_validateParams).call(this, params);\n const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal });\n this._connected();\n return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n }\n async _runChatCompletion(client, params, options) {\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n return await this._createChatCompletion(client, params, options);\n }\n async _runTools(client, params, options) {\n const role = 'tool';\n const { tool_choice = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n // TODO(someday): clean this logic up\n const inputTools = params.tools.map((tool) => {\n if (isAutoParsableTool(tool)) {\n if (!tool.$callback) {\n throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n }\n return {\n type: 'function',\n function: {\n function: tool.$callback,\n name: tool.function.name,\n description: tool.function.description || '',\n parameters: tool.function.parameters,\n parse: tool.$parseRaw,\n strict: true,\n },\n };\n }\n return tool;\n });\n const functionsByName = {};\n for (const f of inputTools) {\n if (f.type === 'function') {\n functionsByName[f.function.name || f.function.function.name] = f.function;\n }\n }\n const tools = 'tools' in params ?\n inputTools.map((t) => t.type === 'function' ?\n {\n type: 'function',\n function: {\n name: t.function.name || t.function.function.name,\n parameters: t.function.parameters,\n description: t.function.description,\n strict: t.function.strict,\n },\n }\n : t)\n : undefined;\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n for (let i = 0; i < maxChatCompletions; ++i) {\n const chatCompletion = await this._createChatCompletion(client, {\n ...restParams,\n tool_choice,\n tools,\n messages: [...this.messages],\n }, options);\n const message = chatCompletion.choices[0]?.message;\n if (!message) {\n throw new OpenAIError(`missing message in ChatCompletion response`);\n }\n if (!message.tool_calls?.length) {\n return;\n }\n for (const tool_call of message.tool_calls) {\n if (tool_call.type !== 'function')\n continue;\n const tool_call_id = tool_call.id;\n const { name, arguments: args } = tool_call.function;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName)\n .map((name) => JSON.stringify(name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n const content = error instanceof Error ? error.message : String(error);\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n // @ts-expect-error it can't rule out `never` type.\n const rawContent = await fn.function(parsed, this);\n const content = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent);\n this._addMessage({ role, tool_call_id, content });\n if (singleFunctionToCall) {\n return;\n }\n }\n }\n return;\n }\n}\n_AbstractChatCompletionRunner_instances = new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent() {\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null;\n}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage() {\n let i = this.messages.length;\n while (i-- > 0) {\n const message = this.messages[i];\n if (isAssistantMessage(message)) {\n // TODO: support audio here\n const ret = {\n ...message,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCall = function _AbstractChatCompletionRunner_getFinalFunctionToolCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult = function _AbstractChatCompletionRunner_getFinalFunctionToolCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isToolMessage(message) &&\n message.content != null &&\n typeof message.content === 'string' &&\n this.messages.some((x) => x.role === 'assistant' &&\n x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id))) {\n return message.content;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage() {\n const total = {\n completion_tokens: 0,\n prompt_tokens: 0,\n total_tokens: 0,\n };\n for (const { usage } of this._chatCompletions) {\n if (usage) {\n total.completion_tokens += usage.completion_tokens;\n total.prompt_tokens += usage.prompt_tokens;\n total.total_tokens += usage.total_tokens;\n }\n }\n return total;\n}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams(params) {\n if (params.n != null && params.n > 1) {\n throw new OpenAIError('ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.');\n }\n}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult(rawContent) {\n return (typeof rawContent === 'string' ? rawContent\n : rawContent === undefined ? 'undefined'\n : JSON.stringify(rawContent));\n};\n//# sourceMappingURL=AbstractChatCompletionRunner.mjs.map","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n static runTools(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n _addMessage(message, emit = true) {\n super._addMessage(message, emit);\n if (isAssistantMessage(message) && message.content) {\n this._emit('content', message.content);\n }\n }\n}\n//# sourceMappingURL=ChatCompletionRunner.mjs.map","const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\nconst Allow = {\n STR,\n NUM,\n ARR,\n OBJ,\n NULL,\n BOOL,\n NAN,\n INFINITY,\n MINUS_INFINITY,\n INF,\n SPECIAL,\n ATOM,\n COLLECTION,\n ALL,\n};\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {\n}\nclass MalformedJSON extends Error {\n}\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = Allow.ALL) {\n if (typeof jsonString !== 'string') {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON('Unexpected end of input');\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === '{')\n return parseObj();\n if (jsonString[index] === '[')\n return parseArr();\n if (jsonString.substring(index, index + 4) === 'null' ||\n (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === 'true' ||\n (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === 'false' ||\n (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === 'Infinity' ||\n (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === '-Infinity' ||\n (Allow.MINUS_INFINITY & allow &&\n 1 < length - index &&\n length - index < 9 &&\n '-Infinity'.startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === 'NaN' ||\n (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n escape = jsonString[index] === '\\\\' ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n }\n }\n markPartialJSON('Unterminated string literal');\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== '}') {\n skipBlank();\n if (index >= length && Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === ',')\n index++; // skip comma\n }\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== ']') {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === ',') {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (Allow.NUM & allow) {\n try {\n if ('.' === jsonString[jsonString.length - 1])\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n }\n catch (e) { }\n }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === '-')\n index++;\n while (jsonString[index] && !',]}'.includes(jsonString[index]))\n index++;\n if (index == length && !(Allow.NUM & allow))\n markPartialJSON('Unterminated number literal');\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && ' \\n\\r\\t'.includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM);\nexport { partialParse, PartialJSON, MalformedJSON };\n//# sourceMappingURL=parser.mjs.map","var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_endRequest, _ChatCompletionStream_getAutoParseableResponseFormat, _ChatCompletionStream_accumulateChatCompletion;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { APIUserAbortError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError, } from \"../error.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, isChatCompletionFunctionTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nexport class ChatCompletionStream extends AbstractChatCompletionRunner {\n constructor(params) {\n super();\n _ChatCompletionStream_instances.add(this);\n _ChatCompletionStream_params.set(this, void 0);\n _ChatCompletionStream_choiceEventStates.set(this, void 0);\n _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0);\n __classPrivateFieldSet(this, _ChatCompletionStream_params, params, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n }\n get currentChatCompletionSnapshot() {\n return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createChatCompletion(client, params, options) {\n const runner = new ChatCompletionStream(params);\n runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n async _createChatCompletion(client, params, options) {\n super._createChatCompletion;\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const chunk of stream) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n let chatId;\n for await (const chunk of stream) {\n if (chatId && chatId !== chunk.id) {\n // A new request has been made.\n this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n chatId = chunk.id;\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n [(_ChatCompletionStream_params = new WeakMap(), _ChatCompletionStream_choiceEventStates = new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = new WeakMap(), _ChatCompletionStream_instances = new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState(choice) {\n let state = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index];\n if (state) {\n return state;\n }\n state = {\n content_done: false,\n refusal_done: false,\n logprobs_content_done: false,\n logprobs_refusal_done: false,\n done_tool_calls: new Set(),\n current_tool_call_index: null,\n };\n __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index] = state;\n return state;\n }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk(chunk) {\n if (this.ended)\n return;\n const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk);\n this._emit('chunk', chunk, completion);\n for (const choice of chunk.choices) {\n const choiceSnapshot = completion.choices[choice.index];\n if (choice.delta.content != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.content) {\n this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n this._emit('content.delta', {\n delta: choice.delta.content,\n snapshot: choiceSnapshot.message.content,\n parsed: choiceSnapshot.message.parsed,\n });\n }\n if (choice.delta.refusal != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.refusal) {\n this._emit('refusal.delta', {\n delta: choice.delta.refusal,\n snapshot: choiceSnapshot.message.refusal,\n });\n }\n if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.content.delta', {\n content: choice.logprobs?.content,\n snapshot: choiceSnapshot.logprobs?.content ?? [],\n });\n }\n if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.refusal.delta', {\n refusal: choice.logprobs?.refusal,\n snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n });\n }\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.finish_reason) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n for (const toolCall of choice.delta.tool_calls ?? []) {\n if (state.current_tool_call_index !== toolCall.index) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n // new tool call started, the previous one is done\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n state.current_tool_call_index = toolCall.index;\n }\n for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n if (!toolCallSnapshot?.type) {\n continue;\n }\n if (toolCallSnapshot?.type === 'function') {\n this._emit('tool_calls.function.arguments.delta', {\n name: toolCallSnapshot.function?.name,\n index: toolCallDelta.index,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n arguments_delta: toolCallDelta.function?.arguments ?? '',\n });\n }\n else {\n assertNever(toolCallSnapshot?.type);\n }\n }\n }\n }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent(choiceSnapshot, toolCallIndex) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (state.done_tool_calls.has(toolCallIndex)) {\n // we've already fired the done event\n return;\n }\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n if (!toolCallSnapshot) {\n throw new Error('no tool call snapshot');\n }\n if (!toolCallSnapshot.type) {\n throw new Error('tool call snapshot missing `type`');\n }\n if (toolCallSnapshot.type === 'function') {\n const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); // TS doesn't narrow based on isChatCompletionTool\n this._emit('tool_calls.function.arguments.done', {\n name: toolCallSnapshot.function.name,\n index: toolCallIndex,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n : null,\n });\n }\n else {\n assertNever(toolCallSnapshot.type);\n }\n }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents(choiceSnapshot) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.message.content && !state.content_done) {\n state.content_done = true;\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this);\n this._emit('content.done', {\n content: choiceSnapshot.message.content,\n parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null,\n });\n }\n if (choiceSnapshot.message.refusal && !state.refusal_done) {\n state.refusal_done = true;\n this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n }\n if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n state.logprobs_content_done = true;\n this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n }\n if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n state.logprobs_refusal_done = true;\n this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n }\n }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"));\n }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat() {\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.response_format;\n if (isAutoParsableResponseFormat(responseFormat)) {\n return responseFormat;\n }\n return null;\n }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion(chunk) {\n var _a, _b, _c, _d;\n let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n const { choices, ...rest } = chunk;\n if (!snapshot) {\n snapshot = __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, {\n ...rest,\n choices: [],\n }, \"f\");\n }\n else {\n Object.assign(snapshot, rest);\n }\n for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n let choice = snapshot.choices[index];\n if (!choice) {\n choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n }\n if (logprobs) {\n if (!choice.logprobs) {\n choice.logprobs = Object.assign({}, logprobs);\n }\n else {\n const { content, refusal, ...rest } = logprobs;\n assertIsEmpty(rest);\n Object.assign(choice.logprobs, rest);\n if (content) {\n (_a = choice.logprobs).content ?? (_a.content = []);\n choice.logprobs.content.push(...content);\n }\n if (refusal) {\n (_b = choice.logprobs).refusal ?? (_b.refusal = []);\n choice.logprobs.refusal.push(...refusal);\n }\n }\n }\n if (finish_reason) {\n choice.finish_reason = finish_reason;\n if (__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\") && hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"))) {\n if (finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n }\n }\n Object.assign(choice, other);\n if (!delta)\n continue; // Shouldn't happen; just in case.\n const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n assertIsEmpty(rest);\n Object.assign(choice.message, rest);\n if (refusal) {\n choice.message.refusal = (choice.message.refusal || '') + refusal;\n }\n if (role)\n choice.message.role = role;\n if (function_call) {\n if (!choice.message.function_call) {\n choice.message.function_call = function_call;\n }\n else {\n if (function_call.name)\n choice.message.function_call.name = function_call.name;\n if (function_call.arguments) {\n (_c = choice.message.function_call).arguments ?? (_c.arguments = '');\n choice.message.function_call.arguments += function_call.arguments;\n }\n }\n }\n if (content) {\n choice.message.content = (choice.message.content || '') + content;\n if (!choice.message.refusal && __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) {\n choice.message.parsed = partialParse(choice.message.content);\n }\n }\n if (tool_calls) {\n if (!choice.message.tool_calls)\n choice.message.tool_calls = [];\n for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n const tool_call = ((_d = choice.message.tool_calls)[index] ?? (_d[index] = {}));\n Object.assign(tool_call, rest);\n if (id)\n tool_call.id = id;\n if (type)\n tool_call.type = type;\n if (fn)\n tool_call.function ?? (tool_call.function = { name: fn.name ?? '', arguments: '' });\n if (fn?.name)\n tool_call.function.name = fn.name;\n if (fn?.arguments) {\n tool_call.function.arguments += fn.arguments;\n if (shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"), tool_call)) {\n tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments);\n }\n }\n }\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('chunk', (chunk) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(chunk);\n }\n else {\n pushQueue.push(chunk);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\nfunction finalizeChatCompletion(snapshot, params) {\n const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n const completion = {\n ...rest,\n id,\n choices: choices.map(({ message, finish_reason, index, logprobs, ...choiceRest }) => {\n if (!finish_reason) {\n throw new OpenAIError(`missing finish_reason for choice ${index}`);\n }\n const { content = null, function_call, tool_calls, ...messageRest } = message;\n const role = message.role; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n if (!role) {\n throw new OpenAIError(`missing role for choice ${index}`);\n }\n if (function_call) {\n const { arguments: args, name } = function_call;\n if (args == null) {\n throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n }\n if (!name) {\n throw new OpenAIError(`missing function_call.name for choice ${index}`);\n }\n return {\n ...choiceRest,\n message: {\n content,\n function_call: { arguments: args, name },\n role,\n refusal: message.refusal ?? null,\n },\n finish_reason,\n index,\n logprobs,\n };\n }\n if (tool_calls) {\n return {\n ...choiceRest,\n index,\n finish_reason,\n logprobs,\n message: {\n ...messageRest,\n role,\n content,\n refusal: message.refusal ?? null,\n tool_calls: tool_calls.map((tool_call, i) => {\n const { function: fn, type, id, ...toolRest } = tool_call;\n const { arguments: args, name, ...fnRest } = fn || {};\n if (id == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n }\n if (type == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n }\n if (name == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`);\n }\n if (args == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`);\n }\n return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n }),\n },\n };\n }\n return {\n ...choiceRest,\n message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n finish_reason,\n index,\n logprobs,\n };\n }),\n created,\n model,\n object: 'chat.completion',\n ...(system_fingerprint ? { system_fingerprint } : {}),\n };\n return maybeParseChatCompletion(completion, params);\n}\nfunction str(x) {\n return JSON.stringify(x);\n}\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty(obj) {\n return;\n}\nfunction assertNever(_x) { }\n//# sourceMappingURL=ChatCompletionStream.mjs.map","import { ChatCompletionStream } from \"./ChatCompletionStream.mjs\";\nexport class ChatCompletionStreamingRunner extends ChatCompletionStream {\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStreamingRunner(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static runTools(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(\n // @ts-expect-error TODO these types are incompatible\n params);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n}\n//# sourceMappingURL=ChatCompletionStreamingRunner.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages } from \"./messages.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nimport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nimport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nimport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nimport { parseChatCompletion, validateInputTools } from \"../../../lib/parser.mjs\";\nexport class Completions extends APIResource {\n constructor() {\n super(...arguments);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n create(body, options) {\n return this._client.post('/chat/completions', { body, ...options, stream: body.stream ?? false });\n }\n /**\n * Get a stored chat completion. Only Chat Completions that have been created with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * const chatCompletion =\n * await client.chat.completions.retrieve('completion_id');\n * ```\n */\n retrieve(completionID, options) {\n return this._client.get(path `/chat/completions/${completionID}`, options);\n }\n /**\n * Modify a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be modified. Currently, the only\n * supported modification is to update the `metadata` field.\n *\n * @example\n * ```ts\n * const chatCompletion = await client.chat.completions.update(\n * 'completion_id',\n * { metadata: { foo: 'string' } },\n * );\n * ```\n */\n update(completionID, body, options) {\n return this._client.post(path `/chat/completions/${completionID}`, { body, ...options });\n }\n /**\n * List stored Chat Completions. Only Chat Completions that have been stored with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletion of client.chat.completions.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chat/completions', (CursorPage), { query, ...options });\n }\n /**\n * Delete a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be deleted.\n *\n * @example\n * ```ts\n * const chatCompletionDeleted =\n * await client.chat.completions.delete('completion_id');\n * ```\n */\n delete(completionID, options) {\n return this._client.delete(path `/chat/completions/${completionID}`, options);\n }\n parse(body, options) {\n validateInputTools(body.tools);\n return this._client.chat.completions\n .create(body, {\n ...options,\n headers: {\n ...options?.headers,\n 'X-Stainless-Helper-Method': 'chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runTools(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runTools(this._client, body, options);\n }\n return ChatCompletionRunner.runTools(this._client, body, options);\n }\n /**\n * Creates a chat completion stream\n */\n stream(body, options) {\n return ChatCompletionStream.createChatCompletion(this._client, body, options);\n }\n}\nexport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nCompletions.Messages = Messages;\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CompletionsAPI from \"./completions/completions.mjs\";\nimport { Completions, } from \"./completions/completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\nChat.Completions = Completions;\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n *\n * @example\n * ```ts\n * const speech = await client.audio.speech.create({\n * input: 'input',\n * model: 'string',\n * voice: 'ash',\n * });\n *\n * const content = await speech.blob();\n * console.log(content);\n * ```\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=speech.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', multipartFormRequestOptions({\n body,\n ...options,\n stream: body.stream ?? false,\n __metadata: { model: body.model },\n }, this._client));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } }, this._client));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as SpeechAPI from \"./speech.mjs\";\nimport { Speech } from \"./speech.mjs\";\nimport * as TranscriptionsAPI from \"./transcriptions.mjs\";\nimport { Transcriptions, } from \"./transcriptions.mjs\";\nimport * as TranslationsAPI from \"./translations.mjs\";\nimport { Translations, } from \"./translations.mjs\";\nexport class Audio extends APIResource {\n constructor() {\n super(...arguments);\n this.transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n this.translations = new TranslationsAPI.Translations(this._client);\n this.speech = new SpeechAPI.Speech(this._client);\n }\n}\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n//# sourceMappingURL=audio.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Creates and executes a batch from an uploaded file of requests\n */\n create(body, options) {\n return this._client.post('/batches', { body, ...options });\n }\n /**\n * Retrieves a batch.\n */\n retrieve(batchID, options) {\n return this._client.get(path `/batches/${batchID}`, options);\n }\n /**\n * List your organization's batches.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/batches', (CursorPage), { query, ...options });\n }\n /**\n * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n * 10 minutes, before changing to `cancelled`, where it will have partial results\n * (if any) available in the output file.\n */\n cancel(batchID, options) {\n return this._client.post(path `/batches/${batchID}/cancel`, options);\n }\n}\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.create({\n * model: 'gpt-4o',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.retrieve(\n * 'assistant_id',\n * );\n * ```\n */\n retrieve(assistantID, options) {\n return this._client.get(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.update(\n * 'assistant_id',\n * );\n * ```\n */\n update(assistantID, body, options) {\n return this._client.post(path `/assistants/${assistantID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of assistants.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const assistant of client.beta.assistants.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/assistants', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete an assistant.\n *\n * @example\n * ```ts\n * const assistantDeleted =\n * await client.beta.assistants.delete('assistant_id');\n * ```\n */\n delete(assistantID, options) {\n return this._client.delete(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=assistants.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API. Can be configured with the same session parameters as the\n * `session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const session =\n * await client.beta.realtime.sessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class TranscriptionSessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API specifically for realtime transcriptions. Can be configured with\n * the same session parameters as the `transcription_session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const transcriptionSession =\n * await client.beta.realtime.transcriptionSessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/transcription_sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=transcription-sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nimport * as TranscriptionSessionsAPI from \"./transcription-sessions.mjs\";\nimport { TranscriptionSessions, } from \"./transcription-sessions.mjs\";\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.transcriptionSessions = new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n//# sourceMappingURL=realtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create a ChatKit session\n *\n * @example\n * ```ts\n * const chatSession =\n * await client.beta.chatkit.sessions.create({\n * user: 'x',\n * workflow: { id: 'id' },\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/chatkit/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]),\n });\n }\n /**\n * Cancel a ChatKit session\n *\n * @example\n * ```ts\n * const chatSession =\n * await client.beta.chatkit.sessions.cancel('cksess_123');\n * ```\n */\n cancel(sessionID, options) {\n return this._client.post(path `/chatkit/sessions/${sessionID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Threads extends APIResource {\n /**\n * Retrieve a ChatKit thread\n *\n * @example\n * ```ts\n * const chatkitThread =\n * await client.beta.chatkit.threads.retrieve('cthr_123');\n * ```\n */\n retrieve(threadID, options) {\n return this._client.get(path `/chatkit/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]),\n });\n }\n /**\n * List ChatKit threads\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatkitThread of client.beta.chatkit.threads.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chatkit/threads', (ConversationCursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]),\n });\n }\n /**\n * Delete a ChatKit thread\n *\n * @example\n * ```ts\n * const thread = await client.beta.chatkit.threads.delete(\n * 'cthr_123',\n * );\n * ```\n */\n delete(threadID, options) {\n return this._client.delete(path `/chatkit/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]),\n });\n }\n /**\n * List ChatKit thread items\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const thread of client.beta.chatkit.threads.listItems(\n * 'cthr_123',\n * )) {\n * // ...\n * }\n * ```\n */\n listItems(threadID, query = {}, options) {\n return this._client.getAPIList(path `/chatkit/threads/${threadID}/items`, (ConversationCursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions } from \"./sessions.mjs\";\nimport * as ThreadsAPI from \"./threads.mjs\";\nimport { Threads, } from \"./threads.mjs\";\nexport class ChatKit extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nChatKit.Sessions = Sessions;\nChatKit.Threads = Threads;\n//# sourceMappingURL=chatkit.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n /**\n * Create a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}/messages`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieve a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(messageID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(messageID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/messages/${messageID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of messages for a given thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/messages`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Deletes a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(messageID, params, options) {\n const { thread_id } = params;\n return this._client.delete(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n /**\n * Retrieves a run step.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(stepID, params, options) {\n const { thread_id, run_id, ...query } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of run steps belonging to a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(runID, params, options) {\n const { thread_id, ...query } = params;\n return this._client.getAPIList(path `/threads/${thread_id}/runs/${runID}/steps`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\nimport { encodeUTF8 } from \"./bytes.mjs\";\nexport const toBase64 = (data) => {\n if (!data)\n return '';\n if (typeof globalThis.Buffer !== 'undefined') {\n return globalThis.Buffer.from(data).toString('base64');\n }\n if (typeof data === 'string') {\n data = encodeUTF8(data);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(String.fromCharCode.apply(null, data));\n }\n throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport const fromBase64 = (str) => {\n if (typeof globalThis.Buffer !== 'undefined') {\n const buf = globalThis.Buffer.from(str, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n if (typeof atob !== 'undefined') {\n const bstr = atob(str);\n const buf = new Uint8Array(bstr.length);\n for (let i = 0; i < bstr.length; i++) {\n buf[i] = bstr.charCodeAt(i);\n }\n return buf;\n }\n throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str) => {\n if (typeof Buffer !== 'undefined') {\n // for Node.js environment\n const buf = Buffer.from(base64Str, 'base64');\n return Array.from(new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT));\n }\n else {\n // for legacy web platform APIs\n const binaryStr = atob(base64Str);\n const len = binaryStr.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryStr.charCodeAt(i);\n }\n return Array.from(new Float32Array(bytes.buffer));\n }\n};\n//# sourceMappingURL=base64.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim();\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map","var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isObj } from \"../internal/utils.mjs\";\nexport class AssistantStream extends EventStream {\n constructor() {\n super(...arguments);\n _AssistantStream_instances.add(this);\n //Track all events in a single list for reference\n _AssistantStream_events.set(this, []);\n //Used to accumulate deltas\n //We are accumulating many types so the value here is not strict\n _AssistantStream_runStepSnapshots.set(this, {});\n _AssistantStream_messageSnapshots.set(this, {});\n _AssistantStream_messageSnapshot.set(this, void 0);\n _AssistantStream_finalRun.set(this, void 0);\n _AssistantStream_currentContentIndex.set(this, void 0);\n _AssistantStream_currentContent.set(this, void 0);\n _AssistantStream_currentToolCallIndex.set(this, void 0);\n _AssistantStream_currentToolCall.set(this, void 0);\n //For current snapshot methods\n _AssistantStream_currentEvent.set(this, void 0);\n _AssistantStream_currentRunSnapshot.set(this, void 0);\n _AssistantStream_currentRunStepSnapshot.set(this, void 0);\n }\n [(_AssistantStream_events = new WeakMap(), _AssistantStream_runStepSnapshots = new WeakMap(), _AssistantStream_messageSnapshots = new WeakMap(), _AssistantStream_messageSnapshot = new WeakMap(), _AssistantStream_finalRun = new WeakMap(), _AssistantStream_currentContentIndex = new WeakMap(), _AssistantStream_currentContent = new WeakMap(), _AssistantStream_currentToolCallIndex = new WeakMap(), _AssistantStream_currentToolCall = new WeakMap(), _AssistantStream_currentEvent = new WeakMap(), _AssistantStream_currentRunSnapshot = new WeakMap(), _AssistantStream_currentRunStepSnapshot = new WeakMap(), _AssistantStream_instances = new WeakSet(), Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n //Catch all for passing along all events\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n static fromReadableStream(stream) {\n const runner = new _a();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n static createToolAssistantStream(runId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runToolAssistantStream(runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, runId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.submitToolOutputs(runId, body, {\n ...options,\n signal: this.controller.signal,\n });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static createThreadAssistantStream(params, thread, options) {\n const runner = new _a();\n runner._run(() => runner._threadAssistantStream(params, thread, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n static createAssistantStream(threadId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runAssistantStream(threadId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n currentEvent() {\n return __classPrivateFieldGet(this, _AssistantStream_currentEvent, \"f\");\n }\n currentRun() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, \"f\");\n }\n currentMessageSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\");\n }\n currentRunStepSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, \"f\");\n }\n async finalRunSteps() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\"));\n }\n async finalMessages() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\"));\n }\n async finalRun() {\n await this.done();\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run was not received.');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n }\n async _createThreadAssistantStream(thread, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n async _createAssistantStream(run, threadId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static accumulateDelta(acc, delta) {\n for (const [key, deltaValue] of Object.entries(delta)) {\n if (!acc.hasOwnProperty(key)) {\n acc[key] = deltaValue;\n continue;\n }\n let accValue = acc[key];\n if (accValue === null || accValue === undefined) {\n acc[key] = deltaValue;\n continue;\n }\n // We don't accumulate these special properties\n if (key === 'index' || key === 'type') {\n acc[key] = deltaValue;\n continue;\n }\n // Type-specific accumulation logic\n if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n accValue += deltaValue;\n }\n else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n accValue += deltaValue;\n }\n else if (isObj(accValue) && isObj(deltaValue)) {\n accValue = this.accumulateDelta(accValue, deltaValue);\n }\n else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n accValue.push(...deltaValue); // Use spread syntax for efficient addition\n continue;\n }\n for (const deltaEntry of deltaValue) {\n if (!isObj(deltaEntry)) {\n throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n }\n const index = deltaEntry['index'];\n if (index == null) {\n console.error(deltaEntry);\n throw new Error('Expected array delta entry to have an `index` property');\n }\n if (typeof index !== 'number') {\n throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n }\n const accEntry = accValue[index];\n if (accEntry == null) {\n accValue.push(deltaEntry);\n }\n else {\n accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n }\n }\n continue;\n }\n else {\n throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n }\n acc[key] = accValue;\n }\n return acc;\n }\n _addRun(run) {\n return run;\n }\n async _threadAssistantStream(params, thread, options) {\n return await this._createThreadAssistantStream(thread, params, options);\n }\n async _runAssistantStream(threadId, runs, params, options) {\n return await this._createAssistantStream(runs, threadId, params, options);\n }\n async _runToolAssistantStream(runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, runId, params, options);\n }\n}\n_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _AssistantStream_currentEvent, event, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleEvent).call(this, event);\n switch (event.event) {\n case 'thread.created':\n //No action on this event.\n break;\n case 'thread.run.created':\n case 'thread.run.queued':\n case 'thread.run.in_progress':\n case 'thread.run.requires_action':\n case 'thread.run.completed':\n case 'thread.run.incomplete':\n case 'thread.run.failed':\n case 'thread.run.cancelling':\n case 'thread.run.cancelled':\n case 'thread.run.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRun).call(this, event);\n break;\n case 'thread.run.step.created':\n case 'thread.run.step.in_progress':\n case 'thread.run.step.delta':\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRunStep).call(this, event);\n break;\n case 'thread.message.created':\n case 'thread.message.in_progress':\n case 'thread.message.delta':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleMessage).call(this, event);\n break;\n case 'error':\n //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n throw new Error('Encountered an error event in event processing - errors should be processed earlier');\n default:\n assertNever(event);\n }\n}, _AssistantStream_endRequest = function _AssistantStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run has not been received');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage(event) {\n const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\")[accumulatedMessage.id] = accumulatedMessage;\n for (const content of newContent) {\n const snapshotContent = accumulatedMessage.content[content.index];\n if (snapshotContent?.type == 'text') {\n this._emit('textCreated', snapshotContent.text);\n }\n }\n switch (event.event) {\n case 'thread.message.created':\n this._emit('messageCreated', event.data);\n break;\n case 'thread.message.in_progress':\n break;\n case 'thread.message.delta':\n this._emit('messageDelta', event.data.delta, accumulatedMessage);\n if (event.data.delta.content) {\n for (const content of event.data.delta.content) {\n //If it is text delta, emit a text delta event\n if (content.type == 'text' && content.text) {\n let textDelta = content.text;\n let snapshot = accumulatedMessage.content[content.index];\n if (snapshot && snapshot.type == 'text') {\n this._emit('textDelta', textDelta, snapshot.text);\n }\n else {\n throw Error('The snapshot associated with this text delta is not text or missing');\n }\n }\n if (content.index != __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")) {\n //See if we have in progress content\n if (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\")) {\n switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").type) {\n case 'text':\n this._emit('textDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'image_file':\n this._emit('imageFileDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, \"f\");\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], \"f\");\n }\n }\n break;\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //We emit the latest content we were working on on completion (including incomplete)\n if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\") !== undefined) {\n const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")];\n if (currentContent) {\n switch (currentContent.type) {\n case 'image_file':\n this._emit('imageFileDone', currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'text':\n this._emit('textDone', currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n }\n if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\")) {\n this._emit('messageDone', event.data);\n }\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, undefined, \"f\");\n }\n}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep(event) {\n const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateRunStep).call(this, event);\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, \"f\");\n switch (event.event) {\n case 'thread.run.step.created':\n this._emit('runStepCreated', event.data);\n break;\n case 'thread.run.step.delta':\n const delta = event.data.delta;\n if (delta.step_details &&\n delta.step_details.type == 'tool_calls' &&\n delta.step_details.tool_calls &&\n accumulatedRunStep.step_details.type == 'tool_calls') {\n for (const toolCall of delta.step_details.tool_calls) {\n if (toolCall.index == __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, \"f\")) {\n this._emit('toolCallDelta', toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]);\n }\n else {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, \"f\");\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"))\n this._emit('toolCallCreated', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n }\n }\n this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n break;\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, undefined, \"f\");\n const details = event.data.step_details;\n if (details.type == 'tool_calls') {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n }\n this._emit('runStepDone', event.data, accumulatedRunStep);\n break;\n case 'thread.run.step.in_progress':\n break;\n }\n}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent(event) {\n __classPrivateFieldGet(this, _AssistantStream_events, \"f\").push(event);\n this._emit('event', event);\n}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep(event) {\n switch (event.event) {\n case 'thread.run.step.created':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n return event.data;\n case 'thread.run.step.delta':\n let snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n if (!snapshot) {\n throw Error('Received a RunStepDelta before creation of a snapshot');\n }\n let data = event.data;\n if (data.delta) {\n const accumulated = _a.accumulateDelta(snapshot, data.delta);\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = accumulated;\n }\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n case 'thread.run.step.in_progress':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n break;\n }\n if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id])\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n throw new Error('No snapshot available');\n}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage(event, snapshot) {\n let newContent = [];\n switch (event.event) {\n case 'thread.message.created':\n //On creation the snapshot is just the initial message\n return [event.data, newContent];\n case 'thread.message.delta':\n if (!snapshot) {\n throw Error('Received a delta with no existing snapshot (there should be one from message creation)');\n }\n let data = event.data;\n //If this delta does not have content, nothing to process\n if (data.delta.content) {\n for (const contentElement of data.delta.content) {\n if (contentElement.index in snapshot.content) {\n let currentContent = snapshot.content[contentElement.index];\n snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateContent).call(this, contentElement, currentContent);\n }\n else {\n snapshot.content[contentElement.index] = contentElement;\n // This is a new element\n newContent.push(contentElement);\n }\n }\n }\n return [snapshot, newContent];\n case 'thread.message.in_progress':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //No changes on other thread events\n if (snapshot) {\n return [snapshot, newContent];\n }\n else {\n throw Error('Received thread message event with no existing snapshot');\n }\n }\n throw Error('Tried to accumulate a non-message event');\n}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {\n return _a.accumulateDelta(currentContent, contentElement);\n}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {\n __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, \"f\");\n switch (event.event) {\n case 'thread.run.created':\n break;\n case 'thread.run.queued':\n break;\n case 'thread.run.in_progress':\n break;\n case 'thread.run.requires_action':\n case 'thread.run.cancelled':\n case 'thread.run.failed':\n case 'thread.run.completed':\n case 'thread.run.expired':\n case 'thread.run.incomplete':\n __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n break;\n case 'thread.run.cancelling':\n break;\n }\n};\nfunction assertNever(_x) { }\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../internal/utils/sleep.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.steps = new StepsAPI.Steps(this._client);\n }\n create(threadID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/threads/${threadID}/runs`, {\n query: { include },\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(runID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${runID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of runs belonging to a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/runs`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n cancel(runID, params, options) {\n const { thread_id } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * A helper to create a run an poll for a terminal state. More information on Run\n * lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndPoll(threadId, body, options) {\n const run = await this.create(threadId, body, options);\n return await this.poll(run.id, { thread_id: threadId }, options);\n }\n /**\n * Create a Run stream\n *\n * @deprecated use `stream` instead\n */\n createAndStream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n /**\n * A helper to poll a run status until it reaches a terminal state. More\n * information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async poll(runId, params, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: run, response } = await this.retrieve(runId, params, {\n ...options,\n headers: { ...options?.headers, ...headers },\n }).withResponse();\n switch (run.status) {\n //If we are in any sort of intermediate state we poll\n case 'queued':\n case 'in_progress':\n case 'cancelling':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n //We return the run in any terminal state.\n case 'requires_action':\n case 'incomplete':\n case 'cancelled':\n case 'completed':\n case 'failed':\n case 'expired':\n return run;\n }\n }\n }\n /**\n * Create a Run stream\n */\n stream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n submitToolOutputs(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * A helper to submit a tool output to a run and poll for a terminal run state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async submitToolOutputsAndPoll(runId, params, options) {\n const run = await this.submitToolOutputs(runId, params, options);\n return await this.poll(run.id, params, options);\n }\n /**\n * Submit the tool outputs from a previous run and stream the run to a terminal\n * state. More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n submitToolOutputsStream(runId, params, options) {\n return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n }\n}\nRuns.Steps = Steps;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n /**\n * Create a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(body = {}, options) {\n return this._client.post('/threads', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(threadID, options) {\n return this._client.get(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(threadID, options) {\n return this._client.delete(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n createAndRun(body, options) {\n return this._client.post('/threads/runs', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: body.stream ?? false,\n });\n }\n /**\n * A helper to create a thread, start a run and then poll for a terminal state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndRunPoll(body, options) {\n const run = await this.createAndRun(body, options);\n return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n }\n /**\n * Create a thread and stream the run back\n */\n createAndRunStream(body, options) {\n return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n }\n}\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport { Assistants, } from \"./assistants.mjs\";\nimport * as RealtimeAPI from \"./realtime/realtime.mjs\";\nimport { Realtime, } from \"./realtime/realtime.mjs\";\nimport * as ChatKitAPI from \"./chatkit/chatkit.mjs\";\nimport { ChatKit } from \"./chatkit/chatkit.mjs\";\nimport * as ThreadsAPI from \"./threads/threads.mjs\";\nimport { Threads, } from \"./threads/threads.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.chatkit = new ChatKitAPI.ChatKit(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.ChatKit = ChatKit;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/completions', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Retrieve Container File Content\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a Container File\n *\n * You can send either a multipart/form-data request with the raw file content, or\n * a JSON request with a file ID.\n */\n create(containerID, body, options) {\n return this._client.post(path `/containers/${containerID}/files`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve Container File\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}`, options);\n }\n /**\n * List Container files\n */\n list(containerID, query = {}, options) {\n return this._client.getAPIList(path `/containers/${containerID}/files`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete Container File\n */\n delete(fileID, params, options) {\n const { container_id } = params;\n return this._client.delete(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nFiles.Content = Content;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files/files.mjs\";\nimport { Files, } from \"./files/files.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Containers extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n }\n /**\n * Create Container\n */\n create(body, options) {\n return this._client.post('/containers', { body, ...options });\n }\n /**\n * Retrieve Container\n */\n retrieve(containerID, options) {\n return this._client.get(path `/containers/${containerID}`, options);\n }\n /**\n * List Containers\n */\n list(query = {}, options) {\n return this._client.getAPIList('/containers', (CursorPage), { query, ...options });\n }\n /**\n * Delete Container\n */\n delete(containerID, options) {\n return this._client.delete(path `/containers/${containerID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nContainers.Files = Files;\n//# sourceMappingURL=containers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Items extends APIResource {\n /**\n * Create items in a conversation with the given ID.\n */\n create(conversationID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/conversations/${conversationID}/items`, {\n query: { include },\n body,\n ...options,\n });\n }\n /**\n * Get a single item from a conversation with the given IDs.\n */\n retrieve(itemID, params, options) {\n const { conversation_id, ...query } = params;\n return this._client.get(path `/conversations/${conversation_id}/items/${itemID}`, { query, ...options });\n }\n /**\n * List all items for a conversation with the given ID.\n */\n list(conversationID, query = {}, options) {\n return this._client.getAPIList(path `/conversations/${conversationID}/items`, (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete an item from a conversation with the given IDs.\n */\n delete(itemID, params, options) {\n const { conversation_id } = params;\n return this._client.delete(path `/conversations/${conversation_id}/items/${itemID}`, options);\n }\n}\n//# sourceMappingURL=items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ItemsAPI from \"./items.mjs\";\nimport { Items, } from \"./items.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Conversations extends APIResource {\n constructor() {\n super(...arguments);\n this.items = new ItemsAPI.Items(this._client);\n }\n /**\n * Create a conversation.\n */\n create(body = {}, options) {\n return this._client.post('/conversations', { body, ...options });\n }\n /**\n * Get a conversation\n */\n retrieve(conversationID, options) {\n return this._client.get(path `/conversations/${conversationID}`, options);\n }\n /**\n * Update a conversation\n */\n update(conversationID, body, options) {\n return this._client.post(path `/conversations/${conversationID}`, { body, ...options });\n }\n /**\n * Delete a conversation. Items in the conversation will not be deleted.\n */\n delete(conversationID, options) {\n return this._client.delete(path `/conversations/${conversationID}`, options);\n }\n}\nConversations.Items = Items;\n//# sourceMappingURL=conversations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { loggerFor, toFloat32Array } from \"../internal/utils.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n *\n * @example\n * ```ts\n * const createEmbeddingResponse =\n * await client.embeddings.create({\n * input: 'The quick brown fox jumped over the lazy dog',\n * model: 'text-embedding-3-small',\n * });\n * ```\n */\n create(body, options) {\n const hasUserProvidedEncodingFormat = !!body.encoding_format;\n // No encoding_format specified, defaulting to base64 for performance reasons\n // See https://github.com/openai/openai-node/pull/1312\n let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n if (hasUserProvidedEncodingFormat) {\n loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n }\n const response = this._client.post('/embeddings', {\n body: {\n ...body,\n encoding_format: encoding_format,\n },\n ...options,\n });\n // if the user specified an encoding_format, return the response as-is\n if (hasUserProvidedEncodingFormat) {\n return response;\n }\n // in this stage, we are sure the user did not specify an encoding_format\n // and we defaulted to base64 for performance reasons\n // we are sure then that the response is base64 encoded, let's decode it\n // the returned result will be a float32 array since this is OpenAI API's default encoding\n loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n return response._thenUnwrap((response) => {\n if (response && response.data) {\n response.data.forEach((embeddingBase64Obj) => {\n const embeddingBase64Str = embeddingBase64Obj.embedding;\n embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n });\n }\n return response;\n });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class OutputItems extends APIResource {\n /**\n * Get an evaluation run output item by ID.\n */\n retrieve(outputItemID, params, options) {\n const { eval_id, run_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, options);\n }\n /**\n * Get a list of output items for an evaluation run.\n */\n list(runID, params, options) {\n const { eval_id, ...query } = params;\n return this._client.getAPIList(path `/evals/${eval_id}/runs/${runID}/output_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=output-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as OutputItemsAPI from \"./output-items.mjs\";\nimport { OutputItems, } from \"./output-items.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.outputItems = new OutputItemsAPI.OutputItems(this._client);\n }\n /**\n * Kicks off a new run for a given evaluation, specifying the data source, and what\n * model configuration to use to test. The datasource will be validated against the\n * schema specified in the config of the evaluation.\n */\n create(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}/runs`, { body, ...options });\n }\n /**\n * Get an evaluation run by ID.\n */\n retrieve(runID, params, options) {\n const { eval_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Get a list of runs for an evaluation.\n */\n list(evalID, query = {}, options) {\n return this._client.getAPIList(path `/evals/${evalID}/runs`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete an eval run.\n */\n delete(runID, params, options) {\n const { eval_id } = params;\n return this._client.delete(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Cancel an ongoing evaluation run.\n */\n cancel(runID, params, options) {\n const { eval_id } = params;\n return this._client.post(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n}\nRuns.OutputItems = OutputItems;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Evals extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n }\n /**\n * Create the structure of an evaluation that can be used to test a model's\n * performance. An evaluation is a set of testing criteria and the config for a\n * data source, which dictates the schema of the data used in the evaluation. After\n * creating an evaluation, you can run it on different models and model parameters.\n * We support several types of graders and datasources. For more information, see\n * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n */\n create(body, options) {\n return this._client.post('/evals', { body, ...options });\n }\n /**\n * Get an evaluation by ID.\n */\n retrieve(evalID, options) {\n return this._client.get(path `/evals/${evalID}`, options);\n }\n /**\n * Update certain properties of an evaluation.\n */\n update(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}`, { body, ...options });\n }\n /**\n * List evaluations for a project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/evals', (CursorPage), { query, ...options });\n }\n /**\n * Delete an evaluation.\n */\n delete(evalID, options) {\n return this._client.delete(path `/evals/${evalID}`, options);\n }\n}\nEvals.Runs = Runs;\n//# sourceMappingURL=evals.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { sleep } from \"../internal/utils/sleep.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Upload a file that can be used across various endpoints. Individual files can be\n * up to 512 MB, and the size of all files uploaded by one organization can be up\n * to 1 TB.\n *\n * - The Assistants API supports files up to 2 million tokens and of specific file\n * types. See the\n * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools)\n * for details.\n * - The Fine-tuning API only supports `.jsonl` files. The input also has certain\n * required formats for fine-tuning\n * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input)\n * or\n * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n * models.\n * - The Batch API only supports `.jsonl` files up to 200 MB in size. The input\n * also has a specific required\n * [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n *\n * Please [contact us](https://help.openai.com/) if you need to increase these\n * storage limits.\n */\n create(body, options) {\n return this._client.post('/files', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileID, options) {\n return this._client.get(path `/files/${fileID}`, options);\n }\n /**\n * Returns a list of files.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/files', (CursorPage), { query, ...options });\n }\n /**\n * Delete a file and remove it from all vector stores.\n */\n delete(fileID, options) {\n return this._client.delete(path `/files/${fileID}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileID, options) {\n return this._client.get(path `/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Waits for the given file to be processed, default timeout is 30 mins.\n */\n async waitForProcessing(id, { pollInterval = 5000, maxWait = 30 * 60 * 1000 } = {}) {\n const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n const start = Date.now();\n let file = await this.retrieve(id);\n while (!file.status || !TERMINAL_STATES.has(file.status)) {\n await sleep(pollInterval);\n file = await this.retrieve(id);\n if (Date.now() - start > maxWait) {\n throw new APIConnectionTimeoutError({\n message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n });\n }\n }\n return file;\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class Methods extends APIResource {\n}\n//# sourceMappingURL=methods.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class Graders extends APIResource {\n /**\n * Run a grader.\n *\n * @example\n * ```ts\n * const response = await client.fineTuning.alpha.graders.run({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * model_sample: 'model_sample',\n * });\n * ```\n */\n run(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/run', { body, ...options });\n }\n /**\n * Validate a grader.\n *\n * @example\n * ```ts\n * const response =\n * await client.fineTuning.alpha.graders.validate({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * });\n * ```\n */\n validate(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/validate', { body, ...options });\n }\n}\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as GradersAPI from \"./graders.mjs\";\nimport { Graders, } from \"./graders.mjs\";\nexport class Alpha extends APIResource {\n constructor() {\n super(...arguments);\n this.graders = new GradersAPI.Graders(this._client);\n }\n}\nAlpha.Graders = Graders;\n//# sourceMappingURL=alpha.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { Page } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Permissions extends APIResource {\n /**\n * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n *\n * This enables organization owners to share fine-tuned models with other projects\n * in their organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * { project_ids: ['string'] },\n * )) {\n * // ...\n * }\n * ```\n */\n create(fineTunedModelCheckpoint, body, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (Page), { body, method: 'post', ...options });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.get(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n query,\n ...options,\n });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to delete a permission for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.delete(\n * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n * {\n * fine_tuned_model_checkpoint:\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * },\n * );\n * ```\n */\n delete(permissionID, params, options) {\n const { fine_tuned_model_checkpoint } = params;\n return this._client.delete(path `/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, options);\n }\n}\n//# sourceMappingURL=permissions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as PermissionsAPI from \"./permissions.mjs\";\nimport { Permissions, } from \"./permissions.mjs\";\nexport class Checkpoints extends APIResource {\n constructor() {\n super(...arguments);\n this.permissions = new PermissionsAPI.Permissions(this._client);\n }\n}\nCheckpoints.Permissions = Permissions;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Checkpoints extends APIResource {\n /**\n * List checkpoints for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Jobs extends APIResource {\n constructor() {\n super(...arguments);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n }\n /**\n * Creates a fine-tuning job which begins the process of creating a new model from\n * a given dataset.\n *\n * Response includes details of the enqueued job including job status and the name\n * of the fine-tuned models once complete.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.create({\n * model: 'gpt-4o-mini',\n * training_file: 'file-abc123',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/fine_tuning/jobs', { body, ...options });\n }\n /**\n * Get info about a fine-tuning job.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTuningJobID, options) {\n return this._client.get(path `/fine_tuning/jobs/${fineTuningJobID}`, options);\n }\n /**\n * List your organization's fine-tuning jobs\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/fine_tuning/jobs', (CursorPage), { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.cancel(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n cancel(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/cancel`, options);\n }\n /**\n * Get status updates for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n listEvents(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/events`, (CursorPage), { query, ...options });\n }\n /**\n * Pause a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.pause(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n pause(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/pause`, options);\n }\n /**\n * Resume a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.resume(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n resume(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/resume`, options);\n }\n}\nJobs.Checkpoints = Checkpoints;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as MethodsAPI from \"./methods.mjs\";\nimport { Methods, } from \"./methods.mjs\";\nimport * as AlphaAPI from \"./alpha/alpha.mjs\";\nimport { Alpha } from \"./alpha/alpha.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints/checkpoints.mjs\";\nimport { Checkpoints } from \"./checkpoints/checkpoints.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.methods = new MethodsAPI.Methods(this._client);\n this.jobs = new JobsAPI.Jobs(this._client);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n this.alpha = new AlphaAPI.Alpha(this._client);\n }\n}\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class GraderModels extends APIResource {\n}\n//# sourceMappingURL=grader-models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as GraderModelsAPI from \"./grader-models.mjs\";\nimport { GraderModels, } from \"./grader-models.mjs\";\nexport class Graders extends APIResource {\n constructor() {\n super(...arguments);\n this.graderModels = new GraderModelsAPI.GraderModels(this._client);\n }\n}\nGraders.GraderModels = GraderModels;\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n *\n * @example\n * ```ts\n * const imagesResponse = await client.images.createVariation({\n * image: fs.createReadStream('otter.png'),\n * });\n * ```\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n edit(body, options) {\n return this._client.post('/images/edits', multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false }, this._client));\n }\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Retrieves a model instance, providing basic information about the model such as\n * the owner and permissioning.\n */\n retrieve(model, options) {\n return this._client.get(path `/models/${model}`, options);\n }\n /**\n * Lists the currently available models, and provides basic information about each\n * one such as the owner and availability.\n */\n list(options) {\n return this._client.getAPIList('/models', (Page), options);\n }\n /**\n * Delete a fine-tuned model. You must have the Owner role in your organization to\n * delete a model.\n */\n delete(model, options) {\n return this._client.delete(path `/models/${model}`, options);\n }\n}\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Moderations extends APIResource {\n /**\n * Classifies if text and/or image inputs are potentially harmful. Learn more in\n * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n */\n create(body, options) {\n return this._client.post('/moderations', { body, ...options });\n }\n}\n//# sourceMappingURL=moderations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Calls extends APIResource {\n /**\n * Accept an incoming SIP call and configure the realtime session that will handle\n * it.\n *\n * @example\n * ```ts\n * await client.realtime.calls.accept('call_id', {\n * type: 'realtime',\n * });\n * ```\n */\n accept(callID, body, options) {\n return this._client.post(path `/realtime/calls/${callID}/accept`, {\n body,\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n /**\n * End an active Realtime API call, whether it was initiated over SIP or WebRTC.\n *\n * @example\n * ```ts\n * await client.realtime.calls.hangup('call_id');\n * ```\n */\n hangup(callID, options) {\n return this._client.post(path `/realtime/calls/${callID}/hangup`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n /**\n * Transfer an active SIP call to a new destination using the SIP REFER verb.\n *\n * @example\n * ```ts\n * await client.realtime.calls.refer('call_id', {\n * target_uri: 'tel:+14155550123',\n * });\n * ```\n */\n refer(callID, body, options) {\n return this._client.post(path `/realtime/calls/${callID}/refer`, {\n body,\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n /**\n * Decline an incoming SIP call by returning a SIP status code to the caller.\n *\n * @example\n * ```ts\n * await client.realtime.calls.reject('call_id');\n * ```\n */\n reject(callID, body = {}, options) {\n return this._client.post(path `/realtime/calls/${callID}/reject`, {\n body,\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=calls.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class ClientSecrets extends APIResource {\n /**\n * Create a Realtime client secret with an associated session configuration.\n *\n * @example\n * ```ts\n * const clientSecret =\n * await client.realtime.clientSecrets.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/client_secrets', { body, ...options });\n }\n}\n//# sourceMappingURL=client-secrets.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CallsAPI from \"./calls.mjs\";\nimport { Calls } from \"./calls.mjs\";\nimport * as ClientSecretsAPI from \"./client-secrets.mjs\";\nimport { ClientSecrets, } from \"./client-secrets.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.clientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n this.calls = new CallsAPI.Calls(this._client);\n }\n}\nRealtime.ClientSecrets = ClientSecrets;\nRealtime.Calls = Calls;\n//# sourceMappingURL=realtime.mjs.map","import { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableResponseFormat } from \"../lib/parser.mjs\";\nexport function maybeParseResponse(response, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...response,\n output_parsed: null,\n output: response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: null,\n };\n }\n if (item.type === 'message') {\n return {\n ...item,\n content: item.content.map((content) => ({\n ...content,\n parsed: null,\n })),\n };\n }\n else {\n return item;\n }\n }),\n };\n }\n return parseResponse(response, params);\n}\nexport function parseResponse(response, params) {\n const output = response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: parseToolCall(params, item),\n };\n }\n if (item.type === 'message') {\n const content = item.content.map((content) => {\n if (content.type === 'output_text') {\n return {\n ...content,\n parsed: parseTextFormat(params, content.text),\n };\n }\n return content;\n });\n return {\n ...item,\n content,\n };\n }\n return item;\n });\n const parsed = Object.assign({}, response, { output });\n if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n addOutputText(parsed);\n }\n Object.defineProperty(parsed, 'output_parsed', {\n enumerable: true,\n get() {\n for (const output of parsed.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text' && content.parsed !== null) {\n return content.parsed;\n }\n }\n }\n return null;\n },\n });\n return parsed;\n}\nfunction parseTextFormat(params, content) {\n if (params.text?.format?.type !== 'json_schema') {\n return null;\n }\n if ('$parseRaw' in params.text?.format) {\n const text_format = params.text?.format;\n return text_format.$parseRaw(content);\n }\n return JSON.parse(content);\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.text?.format)) {\n return true;\n }\n return false;\n}\nexport function makeParseableResponseTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nfunction getInputToolByName(input_tools, name) {\n return input_tools.find((tool) => tool.type === 'function' && tool.name === name);\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return {\n ...toolCall,\n ...toolCall,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n : inputTool?.strict ? JSON.parse(toolCall.arguments)\n : null,\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params) {\n return false;\n }\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\nexport function addOutputText(rsp) {\n const texts = [];\n for (const output of rsp.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text') {\n texts.push(content.text);\n }\n }\n }\n rsp.output_text = texts.join('');\n}\n//# sourceMappingURL=ResponsesParser.mjs.map","var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, _ResponseStream_accumulateResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../../error.mjs\";\nimport { EventStream } from \"../EventStream.mjs\";\nimport { maybeParseResponse } from \"../ResponsesParser.mjs\";\nexport class ResponseStream extends EventStream {\n constructor(params) {\n super();\n _ResponseStream_instances.add(this);\n _ResponseStream_params.set(this, void 0);\n _ResponseStream_currentResponseSnapshot.set(this, void 0);\n _ResponseStream_finalResponse.set(this, void 0);\n __classPrivateFieldSet(this, _ResponseStream_params, params, \"f\");\n }\n static createResponse(client, params, options) {\n const runner = new ResponseStream(params);\n runner._run(() => runner._createOrRetrieveResponse(client, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createOrRetrieveResponse(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_beginRequest).call(this);\n let stream;\n let starting_after = null;\n if ('response_id' in params) {\n stream = await client.responses.retrieve(params.response_id, { stream: true }, { ...options, signal: this.controller.signal, stream: true });\n starting_after = params.starting_after ?? null;\n }\n else {\n stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n }\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_addEvent).call(this, event, starting_after);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_endRequest).call(this);\n }\n [(_ResponseStream_params = new WeakMap(), _ResponseStream_currentResponseSnapshot = new WeakMap(), _ResponseStream_finalResponse = new WeakMap(), _ResponseStream_instances = new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n }, _ResponseStream_addEvent = function _ResponseStream_addEvent(event, starting_after) {\n if (this.ended)\n return;\n const maybeEmit = (name, event) => {\n if (starting_after == null || event.sequence_number > starting_after) {\n this._emit(name, event);\n }\n };\n const response = __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_accumulateResponse).call(this, event);\n maybeEmit('event', event);\n switch (event.type) {\n case 'response.output_text.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n maybeEmit('response.output_text.delta', {\n ...event,\n snapshot: content.text,\n });\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n maybeEmit('response.function_call_arguments.delta', {\n ...event,\n snapshot: output.arguments,\n });\n }\n break;\n }\n default:\n maybeEmit(event.type, event);\n break;\n }\n }, _ResponseStream_endRequest = function _ResponseStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any events`);\n }\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, \"f\"));\n __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, \"f\");\n return parsedResponse;\n }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse(event) {\n let snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n if (event.type !== 'response.created') {\n throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`);\n }\n snapshot = __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n return snapshot;\n }\n switch (event.type) {\n case 'response.output_item.added': {\n snapshot.output.push(event.item);\n break;\n }\n case 'response.content_part.added': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n const type = output.type;\n const part = event.part;\n if (type === 'message' && part.type !== 'reasoning_text') {\n output.content.push(part);\n }\n else if (type === 'reasoning' && part.type === 'reasoning_text') {\n if (!output.content) {\n output.content = [];\n }\n output.content.push(part);\n }\n break;\n }\n case 'response.output_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n output.arguments += event.delta;\n }\n break;\n }\n case 'response.reasoning_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'reasoning') {\n const content = output.content?.[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'reasoning_text') {\n throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.completed': {\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n break;\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n }\n const event = pushQueue.shift();\n return { value: event, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n /**\n * @returns a promise that resolves with the final Response, or rejects\n * if an error occurred or the stream ended prematurely without producing a REsponse.\n */\n async finalResponse() {\n await this.done();\n const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, \"f\");\n if (!response)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return response;\n }\n}\nfunction finalizeResponse(snapshot, params) {\n return maybeParseResponse(snapshot, params);\n}\n//# sourceMappingURL=ResponseStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class InputItems extends APIResource {\n /**\n * Returns a list of input items for a given response.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const responseItem of client.responses.inputItems.list(\n * 'response_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(responseID, query = {}, options) {\n return this._client.getAPIList(path `/responses/${responseID}/input_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=input-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class InputTokens extends APIResource {\n /**\n * Get input token counts\n *\n * @example\n * ```ts\n * const response = await client.responses.inputTokens.count();\n * ```\n */\n count(body = {}, options) {\n return this._client.post('/responses/input_tokens', { body, ...options });\n }\n}\n//# sourceMappingURL=input-tokens.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { parseResponse, addOutputText, } from \"../../lib/ResponsesParser.mjs\";\nimport { ResponseStream } from \"../../lib/responses/ResponseStream.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as InputItemsAPI from \"./input-items.mjs\";\nimport { InputItems } from \"./input-items.mjs\";\nimport * as InputTokensAPI from \"./input-tokens.mjs\";\nimport { InputTokens } from \"./input-tokens.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Responses extends APIResource {\n constructor() {\n super(...arguments);\n this.inputItems = new InputItemsAPI.InputItems(this._client);\n this.inputTokens = new InputTokensAPI.InputTokens(this._client);\n }\n create(body, options) {\n return this._client.post('/responses', { body, ...options, stream: body.stream ?? false })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n retrieve(responseID, query = {}, options) {\n return this._client.get(path `/responses/${responseID}`, {\n query,\n ...options,\n stream: query?.stream ?? false,\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n /**\n * Deletes a model response with the given ID.\n *\n * @example\n * ```ts\n * await client.responses.delete(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n delete(responseID, options) {\n return this._client.delete(path `/responses/${responseID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n parse(body, options) {\n return this._client.responses\n .create(body, options)\n ._thenUnwrap((response) => parseResponse(response, body));\n }\n /**\n * Creates a model response stream\n */\n stream(body, options) {\n return ResponseStream.createResponse(this._client, body, options);\n }\n /**\n * Cancels a model response with the given ID. Only responses created with the\n * `background` parameter set to `true` can be cancelled.\n * [Learn more](https://platform.openai.com/docs/guides/background).\n *\n * @example\n * ```ts\n * const response = await client.responses.cancel(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n cancel(responseID, options) {\n return this._client.post(path `/responses/${responseID}/cancel`, options);\n }\n /**\n * Compact conversation\n *\n * @example\n * ```ts\n * const compactedResponse = await client.responses.compact({\n * model: 'gpt-5.2',\n * });\n * ```\n */\n compact(body, options) {\n return this._client.post('/responses/compact', { body, ...options });\n }\n}\nResponses.InputItems = InputItems;\nResponses.InputTokens = InputTokens;\n//# sourceMappingURL=responses.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Parts extends APIResource {\n /**\n * Adds a\n * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n * A Part represents a chunk of bytes from the file you are trying to upload.\n *\n * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n * maximum of 8 GB.\n *\n * It is possible to add multiple Parts in parallel. You can decide the intended\n * order of the Parts when you\n * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n */\n create(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Uploads extends APIResource {\n constructor() {\n super(...arguments);\n this.parts = new PartsAPI.Parts(this._client);\n }\n /**\n * Creates an intermediate\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n * that you can add\n * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n * after you create it.\n *\n * Once you complete the Upload, we will create a\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * contains all the parts you uploaded. This File is usable in the rest of our\n * platform as a regular File object.\n *\n * For certain `purpose` values, the correct `mime_type` must be specified. Please\n * refer to documentation for the\n * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n *\n * For guidance on the proper filename extensions for each purpose, please follow\n * the documentation on\n * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n */\n create(body, options) {\n return this._client.post('/uploads', { body, ...options });\n }\n /**\n * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n */\n cancel(uploadID, options) {\n return this._client.post(path `/uploads/${uploadID}/cancel`, options);\n }\n /**\n * Completes the\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n *\n * Within the returned Upload object, there is a nested\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * is ready to use in the rest of the platform.\n *\n * You can specify the order of the Parts by passing in an ordered list of the Part\n * IDs.\n *\n * The number of bytes uploaded upon completion must match the number of bytes\n * initially specified when creating the Upload object. No Parts may be added after\n * an Upload is completed.\n */\n complete(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/complete`, { body, ...options });\n }\n}\nUploads.Parts = Parts;\n//# sourceMappingURL=uploads.mjs.map","/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async (promises) => {\n const results = await Promise.allSettled(promises);\n const rejected = results.filter((result) => result.status === 'rejected');\n if (rejected.length) {\n for (const result of rejected) {\n console.error(result.reason);\n }\n throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n }\n // Note: TS was complaining about using `.filter().map()` here for some reason\n const values = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value);\n }\n }\n return values;\n};\n//# sourceMappingURL=Util.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils/sleep.mjs\";\nimport { allSettledWithThrow } from \"../../lib/Util.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class FileBatches extends APIResource {\n /**\n * Create a vector store file batch.\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/file_batches`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancel a vector store file batch. This attempts to cancel the processing of\n * files in this batch as soon as possible.\n */\n cancel(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Create a vector store batch and poll until all files have been processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const batch = await this.create(vectorStoreId, body);\n return await this.poll(vectorStoreId, batch.id, options);\n }\n /**\n * Returns a list of vector store files in a batch.\n */\n listFiles(batchID, params, options) {\n const { vector_store_id, ...query } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, (CursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n /**\n * Wait for the given file batch to be processed.\n *\n * Note: this will return even if one of the files failed to process, you need to\n * check batch.file_counts.failed_count to handle this case.\n */\n async poll(vectorStoreID, batchID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: batch, response } = await this.retrieve(batchID, { vector_store_id: vectorStoreID }, {\n ...options,\n headers,\n }).withResponse();\n switch (batch.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'cancelled':\n case 'completed':\n return batch;\n }\n }\n }\n /**\n * Uploads the given files concurrently and then creates a vector store file batch.\n *\n * The concurrency limit is configurable using the `maxConcurrency` parameter.\n */\n async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) {\n if (files == null || files.length == 0) {\n throw new Error(`No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`);\n }\n const configuredConcurrency = options?.maxConcurrency ?? 5;\n // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n const client = this._client;\n const fileIterator = files.values();\n const allFileIds = [...fileIds];\n // This code is based on this design. The libraries don't accommodate our environment limits.\n // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n async function processFiles(iterator) {\n for (let item of iterator) {\n const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n allFileIds.push(fileObj.id);\n }\n }\n // Start workers to process results\n const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n // Wait for all processing to complete.\n await allSettledWithThrow(workers);\n return await this.createAndPoll(vectorStoreId, {\n file_ids: allFileIds,\n });\n }\n}\n//# sourceMappingURL=file-batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Create a vector store file by attaching a\n * [File](https://platform.openai.com/docs/api-reference/files) to a\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/files`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Update attributes on a vector store file.\n */\n update(fileID, params, options) {\n const { vector_store_id, ...body } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector store files.\n */\n list(vectorStoreID, query = {}, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store file. This will remove the file from the vector store but\n * the file itself will not be deleted. To delete the file, use the\n * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n * endpoint.\n */\n delete(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.delete(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Attach a file to the given vector store and wait for it to be processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const file = await this.create(vectorStoreId, body, options);\n return await this.poll(vectorStoreId, file.id, options);\n }\n /**\n * Wait for the vector store file to finish processing.\n *\n * Note: this will return even if the file failed to process, you need to check\n * file.last_error and file.status to handle these cases\n */\n async poll(vectorStoreID, fileID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const fileResponse = await this.retrieve(fileID, {\n vector_store_id: vectorStoreID,\n }, { ...options, headers }).withResponse();\n const file = fileResponse.data;\n switch (file.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'completed':\n return file;\n }\n }\n }\n /**\n * Upload a file to the `files` API and then attach it to the given vector store.\n *\n * Note the file will be asynchronously processed (you can use the alternative\n * polling helper method to wait for processing to complete).\n */\n async upload(vectorStoreId, file, options) {\n const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n }\n /**\n * Add a file to a vector store and poll until processing is complete.\n */\n async uploadAndPoll(vectorStoreId, file, options) {\n const fileInfo = await this.upload(vectorStoreId, file, options);\n return await this.poll(vectorStoreId, fileInfo.id, options);\n }\n /**\n * Retrieve the parsed contents of a vector store file.\n */\n content(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/files/${fileID}/content`, (Page), { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class VectorStores extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n this.fileBatches = new FileBatchesAPI.FileBatches(this._client);\n }\n /**\n * Create a vector store.\n */\n create(body, options) {\n return this._client.post('/vector_stores', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreID, options) {\n return this._client.get(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a vector store.\n */\n update(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector stores.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/vector_stores', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store.\n */\n delete(vectorStoreID, options) {\n return this._client.delete(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Search a vector store for relevant chunks based on a query and file attributes\n * filter.\n */\n search(vectorStoreID, body, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/search`, (Page), {\n body,\n method: 'post',\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { ConversationCursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { maybeMultipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Videos extends APIResource {\n /**\n * Create a video\n */\n create(body, options) {\n return this._client.post('/videos', maybeMultipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve a video\n */\n retrieve(videoID, options) {\n return this._client.get(path `/videos/${videoID}`, options);\n }\n /**\n * List videos\n */\n list(query = {}, options) {\n return this._client.getAPIList('/videos', (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete a video\n */\n delete(videoID, options) {\n return this._client.delete(path `/videos/${videoID}`, options);\n }\n /**\n * Download video content\n */\n downloadContent(videoID, query = {}, options) {\n return this._client.get(path `/videos/${videoID}/content`, {\n query,\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Create a video remix\n */\n remix(videoID, body, options) {\n return this._client.post(path `/videos/${videoID}/remix`, maybeMultipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=videos.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { InvalidWebhookSignatureError } from \"../error.mjs\";\nimport { APIResource } from \"../core/resource.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nexport class Webhooks extends APIResource {\n constructor() {\n super(...arguments);\n _Webhooks_instances.add(this);\n }\n /**\n * Validates that the given payload was sent by OpenAI and parses the payload.\n */\n async unwrap(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n await this.verifySignature(payload, headers, secret, tolerance);\n return JSON.parse(payload);\n }\n /**\n * Validates whether or not the webhook payload was sent by OpenAI.\n *\n * An error will be raised if the webhook payload was not sent by OpenAI.\n *\n * @param payload - The webhook payload\n * @param headers - The webhook headers\n * @param secret - The webhook secret (optional, will use client secret if not provided)\n * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n */\n async verifySignature(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n if (typeof crypto === 'undefined' ||\n typeof crypto.subtle.importKey !== 'function' ||\n typeof crypto.subtle.verify !== 'function') {\n throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n }\n __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_validateSecret).call(this, secret);\n const headersObj = buildHeaders([headers]).values;\n const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-signature');\n const timestamp = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-timestamp');\n const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-id');\n // Validate timestamp to prevent replay attacks\n const timestampSeconds = parseInt(timestamp, 10);\n if (isNaN(timestampSeconds)) {\n throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n }\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (nowSeconds - timestampSeconds > tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n }\n if (timestampSeconds > nowSeconds + tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n }\n // Extract signatures from v1,<base64> format\n // The signature header can have multiple values, separated by spaces.\n // Each value is in the format v1,<base64>. We should accept if any match.\n const signatures = signatureHeader\n .split(' ')\n .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n // Decode the secret if it starts with whsec_\n const decodedSecret = secret.startsWith('whsec_') ?\n Buffer.from(secret.replace('whsec_', ''), 'base64')\n : Buffer.from(secret, 'utf-8');\n // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n // Import the secret as a cryptographic key for HMAC\n const key = await crypto.subtle.importKey('raw', decodedSecret, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);\n // Check if any signature matches using timing-safe WebCrypto verify\n for (const signature of signatures) {\n try {\n const signatureBytes = Buffer.from(signature, 'base64');\n const isValid = await crypto.subtle.verify('HMAC', key, signatureBytes, new TextEncoder().encode(signedPayload));\n if (isValid) {\n return; // Valid signature found\n }\n }\n catch {\n // Invalid base64 or signature format, continue to next signature\n continue;\n }\n }\n throw new InvalidWebhookSignatureError('The given webhook signature does not match the expected signature');\n }\n}\n_Webhooks_instances = new WeakSet(), _Webhooks_validateSecret = function _Webhooks_validateSecret(secret) {\n if (typeof secret !== 'string' || secret.length === 0) {\n throw new Error(`The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`);\n }\n}, _Webhooks_getRequiredHeader = function _Webhooks_getRequiredHeader(headers, name) {\n if (!headers) {\n throw new Error(`Headers are required`);\n }\n const value = headers.get(name);\n if (value === null || value === undefined) {\n throw new Error(`Missing required header: ${name}`);\n }\n return value;\n};\n//# sourceMappingURL=webhooks.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _OpenAI_instances, _a, _OpenAI_encoder, _OpenAI_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport * as qs from \"./internal/qs/index.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Batches, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Videos, } from \"./resources/videos.mjs\";\nimport { Webhooks } from \"./resources/webhooks.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { Containers, } from \"./resources/containers/containers.mjs\";\nimport { Conversations } from \"./resources/conversations/conversations.mjs\";\nimport { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.mjs\";\nimport { Realtime } from \"./resources/realtime/realtime.mjs\";\nimport { Responses } from \"./resources/responses/responses.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\nimport { VectorStores, } from \"./resources/vector-stores/vector-stores.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n /**\n * API Client for interfacing with the OpenAI API.\n *\n * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined]\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record<string, string | undefined>} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('OPENAI_BASE_URL'), apiKey = readEnv('OPENAI_API_KEY'), organization = readEnv('OPENAI_ORG_ID') ?? null, project = readEnv('OPENAI_PROJECT_ID') ?? null, webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, ...opts } = {}) {\n _OpenAI_instances.add(this);\n _OpenAI_encoder.set(this, void 0);\n this.completions = new API.Completions(this);\n this.chat = new API.Chat(this);\n this.embeddings = new API.Embeddings(this);\n this.files = new API.Files(this);\n this.images = new API.Images(this);\n this.audio = new API.Audio(this);\n this.moderations = new API.Moderations(this);\n this.models = new API.Models(this);\n this.fineTuning = new API.FineTuning(this);\n this.graders = new API.Graders(this);\n this.vectorStores = new API.VectorStores(this);\n this.webhooks = new API.Webhooks(this);\n this.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this.responses = new API.Responses(this);\n this.realtime = new API.Realtime(this);\n this.conversations = new API.Conversations(this);\n this.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n this.videos = new API.Videos(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError('Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.');\n }\n const options = {\n apiKey,\n organization,\n project,\n webhookSecret,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.OpenAIError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _OpenAI_encoder, Opts.FallbackEncoder, \"f\");\n this._options = options;\n this.apiKey = typeof apiKey === 'string' ? apiKey : 'Missing Key';\n this.organization = organization;\n this.project = project;\n this.webhookSecret = webhookSecret;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this.apiKey,\n organization: this.organization,\n project: this.project,\n webhookSecret: this.webhookSecret,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }) {\n return;\n }\n async authHeaders(opts) {\n return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n async _callApiKey() {\n const apiKey = this._options.apiKey;\n if (typeof apiKey !== 'function')\n return false;\n let token;\n try {\n token = await apiKey();\n }\n catch (err) {\n if (err instanceof Errors.OpenAIError)\n throw err;\n throw new Errors.OpenAIError(`Failed to get token from 'apiKey' function: ${err.message}`, \n // @ts-ignore\n { cause: err });\n }\n if (typeof token !== 'string' || !token) {\n throw new Errors.OpenAIError(`Expected 'apiKey' function argument to return a string but it returned ${token}`);\n }\n this.apiKey = token;\n return true;\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _OpenAI_instances, \"m\", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n if (!isEmptyObj(defaultQuery)) {\n query = { ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) {\n await this._callApiKey();\n }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({ cause: response });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'x-request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body } = this.buildBody({ options });\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n },\n await this.authHeaders(options),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers);\n return headers.values;\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined };\n }\n const headers = buildHeaders([rawHeaders]);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n (globalThis.ReadableStream && body instanceof globalThis.ReadableStream)) {\n return { bodyHeaders: undefined, body: body };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body) };\n }\n else {\n return __classPrivateFieldGet(this, _OpenAI_encoder, \"f\").call(this, { body, headers });\n }\n }\n}\n_a = OpenAI, _OpenAI_encoder = new WeakMap(), _OpenAI_instances = new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden() {\n return this.baseURL !== 'https://api.openai.com/v1';\n};\nOpenAI.OpenAI = _a;\nOpenAI.DEFAULT_TIMEOUT = 600000; // 10 minutes\nOpenAI.OpenAIError = Errors.OpenAIError;\nOpenAI.APIError = Errors.APIError;\nOpenAI.APIConnectionError = Errors.APIConnectionError;\nOpenAI.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nOpenAI.APIUserAbortError = Errors.APIUserAbortError;\nOpenAI.NotFoundError = Errors.NotFoundError;\nOpenAI.ConflictError = Errors.ConflictError;\nOpenAI.RateLimitError = Errors.RateLimitError;\nOpenAI.BadRequestError = Errors.BadRequestError;\nOpenAI.AuthenticationError = Errors.AuthenticationError;\nOpenAI.InternalServerError = Errors.InternalServerError;\nOpenAI.PermissionDeniedError = Errors.PermissionDeniedError;\nOpenAI.UnprocessableEntityError = Errors.UnprocessableEntityError;\nOpenAI.InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\nOpenAI.toFile = Uploads.toFile;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\nOpenAI.Videos = Videos;\n//# sourceMappingURL=client.mjs.map","import { ToolMessage } from \"@langchain/core/messages\";\nimport { tool } from \"@langchain/core/tools\";\nimport { z } from \"zod/v4\";\n\n//#region src/tools/computerUse.ts\nconst ComputerUseScreenshotActionSchema = z.object({ type: z.literal(\"screenshot\") });\nconst ComputerUseClickActionSchema = z.object({\n\ttype: z.literal(\"click\"),\n\tx: z.number(),\n\ty: z.number(),\n\tbutton: z.enum([\n\t\t\"left\",\n\t\t\"right\",\n\t\t\"wheel\",\n\t\t\"back\",\n\t\t\"forward\"\n\t]).default(\"left\")\n});\nconst ComputerUseDoubleClickActionSchema = z.object({\n\ttype: z.literal(\"double_click\"),\n\tx: z.number(),\n\ty: z.number(),\n\tbutton: z.enum([\n\t\t\"left\",\n\t\t\"right\",\n\t\t\"wheel\",\n\t\t\"back\",\n\t\t\"forward\"\n\t]).default(\"left\")\n});\nconst ComputerUseDragActionSchema = z.object({\n\ttype: z.literal(\"drag\"),\n\tpath: z.array(z.object({\n\t\tx: z.number(),\n\t\ty: z.number()\n\t}))\n});\nconst ComputerUseKeypressActionSchema = z.object({\n\ttype: z.literal(\"keypress\"),\n\tkeys: z.array(z.string())\n});\nconst ComputerUseMoveActionSchema = z.object({\n\ttype: z.literal(\"move\"),\n\tx: z.number(),\n\ty: z.number()\n});\nconst ComputerUseScrollActionSchema = z.object({\n\ttype: z.literal(\"scroll\"),\n\tx: z.number(),\n\ty: z.number(),\n\tscroll_x: z.number(),\n\tscroll_y: z.number()\n});\nconst ComputerUseTypeActionSchema = z.object({\n\ttype: z.literal(\"type\"),\n\ttext: z.string()\n});\nconst ComputerUseWaitActionSchema = z.object({\n\ttype: z.literal(\"wait\"),\n\tduration: z.number().optional()\n});\nconst ComputerUseActionUnionSchema = z.discriminatedUnion(\"type\", [\n\tComputerUseScreenshotActionSchema,\n\tComputerUseClickActionSchema,\n\tComputerUseDoubleClickActionSchema,\n\tComputerUseDragActionSchema,\n\tComputerUseKeypressActionSchema,\n\tComputerUseMoveActionSchema,\n\tComputerUseScrollActionSchema,\n\tComputerUseTypeActionSchema,\n\tComputerUseWaitActionSchema\n]);\nconst ComputerUseActionSchema = z.object({ action: ComputerUseActionUnionSchema });\nconst TOOL_NAME = \"computer_use\";\n/**\n* Creates a Computer Use tool that allows models to control computer interfaces\n* and perform tasks by simulating mouse clicks, keyboard input, scrolling, and more.\n*\n* **Computer Use** is a practical application of OpenAI's Computer-Using Agent (CUA)\n* model (`computer-use-preview`), which combines vision capabilities with advanced\n* reasoning to simulate controlling computer interfaces.\n*\n* **How it works**:\n* The tool operates in a continuous loop:\n* 1. Model sends computer actions (click, type, scroll, etc.)\n* 2. Your code executes these actions in a controlled environment\n* 3. You capture a screenshot of the result\n* 4. Send the screenshot back to the model\n* 5. Repeat until the task is complete\n*\n* **Important**: Computer use is in beta and requires careful consideration:\n* - Use in sandboxed environments only\n* - Do not use for high-stakes or authenticated tasks\n* - Always implement human-in-the-loop for important decisions\n* - Handle safety checks appropriately\n*\n* @see {@link https://platform.openai.com/docs/guides/tools-computer-use | OpenAI Computer Use Documentation}\n*\n* @param options - Configuration options for the Computer Use tool\n* @returns A Computer Use tool that can be passed to `bindTools`\n*\n* @example\n* ```typescript\n* import { ChatOpenAI, tools } from \"@langchain/openai\";\n*\n* const model = new ChatOpenAI({ model: \"computer-use-preview\" });\n*\n* // With execute callback for automatic action handling\n* const computer = tools.computerUse({\n* displayWidth: 1024,\n* displayHeight: 768,\n* environment: \"browser\",\n* execute: async (action) => {\n* if (action.type === \"screenshot\") {\n* return captureScreenshot();\n* }\n* if (action.type === \"click\") {\n* await page.mouse.click(action.x, action.y, { button: action.button });\n* return captureScreenshot();\n* }\n* if (action.type === \"type\") {\n* await page.keyboard.type(action.text);\n* return captureScreenshot();\n* }\n* // Handle other actions...\n* return captureScreenshot();\n* },\n* });\n*\n* const llmWithComputer = model.bindTools([computer]);\n* const response = await llmWithComputer.invoke(\n* \"Check the latest news on bing.com\"\n* );\n* ```\n*\n* @example\n* ```typescript\n* // Without execute callback (manual action handling)\n* const computer = tools.computerUse({\n* displayWidth: 1024,\n* displayHeight: 768,\n* environment: \"browser\",\n* });\n*\n* const response = await model.invoke(\"Check the news\", {\n* tools: [computer],\n* });\n*\n* // Access the computer call from the response\n* const computerCall = response.additional_kwargs.tool_outputs?.find(\n* (output) => output.type === \"computer_call\"\n* );\n* if (computerCall) {\n* console.log(\"Action to execute:\", computerCall.action);\n* // Execute the action manually, then send back a screenshot\n* }\n* ```\n*\n* @example\n* ```typescript\n* // For macOS desktop automation with Docker\n* const computer = tools.computerUse({\n* displayWidth: 1920,\n* displayHeight: 1080,\n* environment: \"mac\",\n* execute: async (action) => {\n* if (action.type === \"click\") {\n* await dockerExec(\n* `DISPLAY=:99 xdotool mousemove ${action.x} ${action.y} click 1`,\n* containerName\n* );\n* }\n* // Capture screenshot from container\n* return await getDockerScreenshot(containerName);\n* },\n* });\n* ```\n*\n* @remarks\n* - Only available through the Responses API (not Chat Completions)\n* - Requires `computer-use-preview` model\n* - Actions include: click, double_click, drag, keypress, move, screenshot, scroll, type, wait\n* - Safety checks may be returned that require acknowledgment before proceeding\n* - Use `truncation: \"auto\"` parameter when making requests\n* - Recommended to use with `reasoning.summary` for debugging\n*/\nfunction computerUse(options) {\n\tconst computerTool = tool(async (input, runtime) => {\n\t\t/**\n\t\t* get computer_use call id from runtime\n\t\t*/\n\t\tconst aiMessage = runtime.state?.messages.at(-1);\n\t\tconst computerToolCall = aiMessage?.tool_calls?.find((tc) => tc.name === \"computer_use\");\n\t\tconst computerToolCallId = computerToolCall?.id;\n\t\tif (!computerToolCallId) throw new Error(\"Computer use call id not found\");\n\t\tconst result = await options.execute(input.action, runtime);\n\t\t/**\n\t\t* make sure {@link ToolMessage} is returned with the correct additional kwargs\n\t\t*/\n\t\tif (typeof result === \"string\") return new ToolMessage({\n\t\t\tcontent: result,\n\t\t\ttool_call_id: computerToolCallId,\n\t\t\tadditional_kwargs: { type: \"computer_call_output\" }\n\t\t});\n\t\t/**\n\t\t* make sure {@link ToolMessage} is returned with the correct additional kwargs\n\t\t*/\n\t\treturn new ToolMessage({\n\t\t\t...result,\n\t\t\ttool_call_id: computerToolCallId,\n\t\t\tadditional_kwargs: {\n\t\t\t\ttype: \"computer_call_output\",\n\t\t\t\t...result.additional_kwargs\n\t\t\t}\n\t\t});\n\t}, {\n\t\tname: TOOL_NAME,\n\t\tdescription: \"Control a computer interface by executing mouse clicks, keyboard input, scrolling, and other actions.\",\n\t\tschema: ComputerUseActionSchema\n\t});\n\tcomputerTool.extras = {\n\t\t...computerTool.extras ?? {},\n\t\tproviderToolDefinition: {\n\t\t\ttype: \"computer_use_preview\",\n\t\t\tdisplay_width: options.displayWidth,\n\t\t\tdisplay_height: options.displayHeight,\n\t\t\tenvironment: options.environment\n\t\t}\n\t};\n\t/**\n\t* return as typed {@link DynamicStructuredTool} so we don't get any type\n\t* errors like \"can't export tool without reference\"\n\t*/\n\treturn computerTool;\n}\n\n//#endregion\nexport { computerUse };\n//# sourceMappingURL=computerUse.js.map","import { tool } from \"@langchain/core/tools\";\nimport { z } from \"zod/v4\";\n\n//#region src/tools/localShell.ts\nconst LocalShellExecActionSchema = z.object({\n\ttype: z.literal(\"exec\"),\n\tcommand: z.array(z.string()),\n\tenv: z.record(z.string(), z.string()).optional(),\n\tworking_directory: z.string().optional(),\n\ttimeout_ms: z.number().optional(),\n\tuser: z.string().optional()\n});\nconst LocalShellActionSchema = z.discriminatedUnion(\"type\", [LocalShellExecActionSchema]);\nconst TOOL_NAME = \"local_shell\";\n/**\n* Creates a Local Shell tool that allows models to run shell commands locally\n* on a machine you provide. Commands are executed inside your own runtime—\n* the API only returns the instructions, but does not execute them on OpenAI infrastructure.\n*\n* **Important**: The local shell tool is designed to work with\n* [Codex CLI](https://github.com/openai/codex) and the `codex-mini-latest` model.\n*\n* **How it works**:\n* The tool operates in a continuous loop:\n* 1. Model sends shell commands (`local_shell_call` with `exec` action)\n* 2. Your code executes the command locally\n* 3. You return the output back to the model\n* 4. Repeat until the task is complete\n*\n* **Security Warning**: Running arbitrary shell commands can be dangerous.\n* Always sandbox execution or add strict allow/deny-lists before forwarding\n* a command to the system shell.\n*\n* @see {@link https://platform.openai.com/docs/guides/tools-local-shell | OpenAI Local Shell Documentation}\n*\n* @param options - Optional configuration for the Local Shell tool\n* @returns A Local Shell tool that can be passed to `bindTools`\n*\n* @example\n* ```typescript\n* import { ChatOpenAI, tools } from \"@langchain/openai\";\n* import { exec } from \"child_process\";\n* import { promisify } from \"util\";\n*\n* const execAsync = promisify(exec);\n* const model = new ChatOpenAI({ model: \"codex-mini-latest\" });\n*\n* // With execute callback for automatic command handling\n* const shell = tools.localShell({\n* execute: async (action) => {\n* const { command, env, working_directory, timeout_ms } = action;\n* const result = await execAsync(command.join(' '), {\n* cwd: working_directory ?? process.cwd(),\n* env: { ...process.env, ...env },\n* timeout: timeout_ms ?? undefined,\n* });\n* return result.stdout + result.stderr;\n* },\n* });\n*\n* const llmWithShell = model.bindTools([shell]);\n* const response = await llmWithShell.invoke(\n* \"List files in the current directory\"\n* );\n* ```\n*\n* @example\n* ```typescript\n* // Without execute callback (manual handling)\n* const shell = tools.localShell();\n*\n* const response = await model.invoke(\"List files\", {\n* tools: [shell],\n* });\n*\n* // Access the shell call from the response\n* const shellCall = response.additional_kwargs.tool_outputs?.find(\n* (output) => output.type === \"local_shell_call\"\n* );\n* if (shellCall) {\n* console.log(\"Command to execute:\", shellCall.action.command);\n* // Execute the command manually, then send back the output\n* }\n* ```\n*\n* @example\n* ```typescript\n* // Full shell loop example\n* async function shellLoop(model, task) {\n* let response = await model.invoke(task, {\n* tools: [tools.localShell()],\n* });\n*\n* while (true) {\n* const shellCall = response.additional_kwargs.tool_outputs?.find(\n* (output) => output.type === \"local_shell_call\"\n* );\n*\n* if (!shellCall) break;\n*\n* // Execute command (with proper sandboxing!)\n* const output = await executeCommand(shellCall.action);\n*\n* // Send output back to model\n* response = await model.invoke([\n* response,\n* {\n* type: \"local_shell_call_output\",\n* id: shellCall.call_id,\n* output: output,\n* },\n* ], {\n* tools: [tools.localShell()],\n* });\n* }\n*\n* return response;\n* }\n* ```\n*\n* @remarks\n* - Only available through the Responses API (not Chat Completions)\n* - Designed for use with `codex-mini-latest` model\n* - Commands are provided as argv tokens in `action.command`\n* - Action includes: `command`, `env`, `working_directory`, `timeout_ms`, `user`\n* - Always sandbox or validate commands before execution\n* - The `timeout_ms` from the model is only a hint—enforce your own limits\n*/\nfunction localShell(options) {\n\tconst shellTool = tool(options.execute, {\n\t\tname: TOOL_NAME,\n\t\tdescription: \"Execute shell commands locally on the machine. Commands are provided as argv tokens.\",\n\t\tschema: LocalShellActionSchema\n\t});\n\tshellTool.extras = {\n\t\t...shellTool.extras ?? {},\n\t\tproviderToolDefinition: { type: \"local_shell\" }\n\t};\n\treturn shellTool;\n}\n\n//#endregion\nexport { localShell };\n//# sourceMappingURL=localShell.js.map","import { tool } from \"@langchain/core/tools\";\nimport { z } from \"zod/v4\";\n\n//#region src/tools/shell.ts\nconst ShellActionSchema = z.object({\n\tcommands: z.array(z.string()).describe(\"Array of shell commands to execute\"),\n\ttimeout_ms: z.number().optional().describe(\"Optional timeout in milliseconds for the commands\"),\n\tmax_output_length: z.number().optional().describe(\"Optional maximum number of characters to return from each command\")\n});\nconst TOOL_NAME = \"shell\";\n/**\n* Creates a Shell tool that allows models to run shell commands through your integration.\n*\n* The shell tool allows the model to interact with your local computer through a controlled\n* command-line interface. The model proposes shell commands; your integration executes them\n* and returns the outputs. This creates a simple plan-execute loop that lets models inspect\n* the system, run utilities, and gather data until they can finish the task.\n*\n* **Important**: The shell tool is available through the Responses API for use with `GPT-5.1`.\n* It is not available on other models, or via the Chat Completions API.\n*\n* **When to use**:\n* - **Automating filesystem or process diagnostics** – For example, \"find the largest PDF\n* under ~/Documents\" or \"show running gunicorn processes.\"\n* - **Extending the model's capabilities** – Using built-in UNIX utilities, python runtime\n* and other CLIs in your environment.\n* - **Running multi-step build and test flows** – Chaining commands like `pip install` and `pytest`.\n* - **Complex agentic coding workflows** – Using other tools like `apply_patch` to complete\n* workflows that involve complex file operations.\n*\n* **How it works**:\n* The tool operates in a continuous loop:\n* 1. Model sends shell commands (`shell_call` with `commands` array)\n* 2. Your code executes the commands (can be concurrent)\n* 3. You return stdout, stderr, and outcome for each command\n* 4. Repeat until the task is complete\n*\n* **Security Warning**: Running arbitrary shell commands can be dangerous.\n* Always sandbox execution or add strict allow/deny-lists before forwarding\n* a command to the system shell.\n*\n* @see {@link https://platform.openai.com/docs/guides/tools-shell | OpenAI Shell Documentation}\n* @see {@link https://github.com/openai/codex | Codex CLI} for reference implementation.\n*\n* @param options - Configuration for the Shell tool\n* @returns A Shell tool that can be passed to `bindTools`\n*\n* @example\n* ```typescript\n* import { ChatOpenAI, tools } from \"@langchain/openai\";\n* import { exec } from \"child_process/promises\";\n*\n* const model = new ChatOpenAI({ model: \"gpt-5.1\" });\n*\n* // With execute callback for automatic command handling\n* const shellTool = tools.shell({\n* execute: async (action) => {\n* const outputs = await Promise.all(\n* action.commands.map(async (cmd) => {\n* try {\n* const { stdout, stderr } = await exec(cmd, {\n* timeout: action.timeout_ms ?? undefined,\n* });\n* return {\n* stdout,\n* stderr,\n* outcome: { type: \"exit\" as const, exit_code: 0 },\n* };\n* } catch (error) {\n* const timedOut = error.killed && error.signal === \"SIGTERM\";\n* return {\n* stdout: error.stdout ?? \"\",\n* stderr: error.stderr ?? String(error),\n* outcome: timedOut\n* ? { type: \"timeout\" as const }\n* : { type: \"exit\" as const, exit_code: error.code ?? 1 },\n* };\n* }\n* })\n* );\n* return {\n* output: outputs,\n* maxOutputLength: action.max_output_length,\n* };\n* },\n* });\n*\n* const llmWithShell = model.bindTools([shellTool]);\n* const response = await llmWithShell.invoke(\n* \"Find the largest PDF file in ~/Documents\"\n* );\n* ```\n*\n* @example\n* ```typescript\n* // Full shell loop example\n* async function shellLoop(model, task) {\n* let response = await model.invoke(task, {\n* tools: [tools.shell({ execute: myExecutor })],\n* });\n*\n* while (true) {\n* const shellCall = response.additional_kwargs.tool_outputs?.find(\n* (output) => output.type === \"shell_call\"\n* );\n*\n* if (!shellCall) break;\n*\n* // Execute commands (with proper sandboxing!)\n* const result = await executeCommands(shellCall.action);\n*\n* // Send output back to model\n* response = await model.invoke([\n* response,\n* {\n* type: \"shell_call_output\",\n* call_id: shellCall.call_id,\n* output: result.output,\n* max_output_length: result.maxOutputLength,\n* },\n* ], {\n* tools: [tools.shell({ execute: myExecutor })],\n* });\n* }\n*\n* return response;\n* }\n* ```\n*\n* @remarks\n* - Only available through the Responses API (not Chat Completions)\n* - Designed for use with `gpt-5.1` model\n* - Commands are provided as an array of strings that can be executed concurrently\n* - Action includes: `commands`, `timeout_ms`, `max_output_length`\n* - Always sandbox or validate commands before execution\n* - The `timeout_ms` from the model is only a hint—enforce your own limits\n* - If `max_output_length` exists in the action, always pass it back in the output\n* - Many CLI tools return non-zero exit codes for warnings; still capture stdout/stderr\n*/\nfunction shell(options) {\n\tconst executeWrapper = async (action) => {\n\t\tconst result = await options.execute(action);\n\t\treturn JSON.stringify({\n\t\t\toutput: result.output,\n\t\t\tmax_output_length: result.maxOutputLength\n\t\t});\n\t};\n\tconst shellTool = tool(executeWrapper, {\n\t\tname: TOOL_NAME,\n\t\tdescription: \"Execute shell commands in a managed environment. Commands can be run concurrently.\",\n\t\tschema: ShellActionSchema\n\t});\n\tshellTool.extras = {\n\t\t...shellTool.extras ?? {},\n\t\tproviderToolDefinition: { type: \"shell\" }\n\t};\n\treturn shellTool;\n}\n\n//#endregion\nexport { shell };\n//# sourceMappingURL=shell.js.map","import { tool } from \"@langchain/core/tools\";\nimport { z } from \"zod/v4\";\n\n//#region src/tools/applyPatch.ts\nconst ApplyPatchCreateFileOperationSchema = z.object({\n\ttype: z.literal(\"create_file\"),\n\tpath: z.string(),\n\tdiff: z.string()\n});\nconst ApplyPatchUpdateFileOperationSchema = z.object({\n\ttype: z.literal(\"update_file\"),\n\tpath: z.string(),\n\tdiff: z.string()\n});\nconst ApplyPatchDeleteFileOperationSchema = z.object({\n\ttype: z.literal(\"delete_file\"),\n\tpath: z.string()\n});\nconst ApplyPatchOperationSchema = z.discriminatedUnion(\"type\", [\n\tApplyPatchCreateFileOperationSchema,\n\tApplyPatchUpdateFileOperationSchema,\n\tApplyPatchDeleteFileOperationSchema\n]);\nconst TOOL_NAME = \"apply_patch\";\n/**\n* Creates an Apply Patch tool that allows models to propose structured diffs\n* that your integration applies. This enables iterative, multi-step code\n* editing workflows.\n*\n* **Apply Patch** lets GPT-5.1 create, update, and delete files in your codebase\n* using structured diffs. Instead of just suggesting edits, the model emits\n* patch operations that your application applies and then reports back on.\n*\n* **When to use**:\n* - **Multi-file refactors** – Rename symbols, extract helpers, or reorganize modules\n* - **Bug fixes** – Have the model both diagnose issues and emit precise patches\n* - **Tests & docs generation** – Create new test files, fixtures, and documentation\n* - **Migrations & mechanical edits** – Apply repetitive, structured updates\n*\n* **How it works**:\n* The tool operates in a continuous loop:\n* 1. Model sends patch operations (`apply_patch_call` with operation type)\n* 2. Your code applies the patch to your working directory or repo\n* 3. You return success/failure status and optional output\n* 4. Repeat until the task is complete\n*\n* **Security Warning**: Applying patches can modify files in your codebase.\n* Always validate paths, implement backups, and consider sandboxing.\n*\n* @see {@link https://platform.openai.com/docs/guides/tools-apply-patch | OpenAI Apply Patch Documentation}\n*\n* @param options - Configuration options for the Apply Patch tool\n* @returns An Apply Patch tool that can be passed to `bindTools`\n*\n* @example\n* ```typescript\n* import { ChatOpenAI, tools } from \"@langchain/openai\";\n* import { applyDiff } from \"@openai/agents\";\n* import * as fs from \"fs/promises\";\n*\n* const model = new ChatOpenAI({ model: \"gpt-5.1\" });\n*\n* // With execute callback for automatic patch handling\n* const patchTool = tools.applyPatch({\n* execute: async (operation) => {\n* if (operation.type === \"create_file\") {\n* const content = applyDiff(\"\", operation.diff, \"create\");\n* await fs.writeFile(operation.path, content);\n* return `Created ${operation.path}`;\n* }\n* if (operation.type === \"update_file\") {\n* const current = await fs.readFile(operation.path, \"utf-8\");\n* const newContent = applyDiff(current, operation.diff);\n* await fs.writeFile(operation.path, newContent);\n* return `Updated ${operation.path}`;\n* }\n* if (operation.type === \"delete_file\") {\n* await fs.unlink(operation.path);\n* return `Deleted ${operation.path}`;\n* }\n* return \"Unknown operation type\";\n* },\n* });\n*\n* const llmWithPatch = model.bindTools([patchTool]);\n* const response = await llmWithPatch.invoke(\n* \"Rename the fib() function to fibonacci() in lib/fib.py\"\n* );\n* ```\n*\n* @remarks\n* - Only available through the Responses API (not Chat Completions)\n* - Designed for use with `gpt-5.1` model\n* - Operations include: `create_file`, `update_file`, `delete_file`\n* - Patches use V4A diff format for updates\n* - Always validate paths to prevent directory traversal attacks\n* - Consider backing up files before applying patches\n* - Implement \"all-or-nothing\" semantics if atomicity is required\n*/\nfunction applyPatch(options) {\n\tconst patchTool = tool(options.execute, {\n\t\tname: TOOL_NAME,\n\t\tdescription: \"Apply structured diffs to create, update, or delete files in the codebase.\",\n\t\tschema: ApplyPatchOperationSchema\n\t});\n\tpatchTool.extras = {\n\t\t...patchTool.extras ?? {},\n\t\tproviderToolDefinition: { type: \"apply_patch\" }\n\t};\n\treturn patchTool;\n}\n\n//#endregion\nexport { applyPatch };\n//# sourceMappingURL=applyPatch.js.map","/* eslint-disable no-console */\n/**\n * Summarization middleware with backend support for conversation history offloading.\n *\n * This module extends the base LangChain summarization middleware with additional\n * backend-based features for persisting conversation history before summarization.\n *\n * ## Usage\n *\n * ```typescript\n * import { createSummarizationMiddleware } from \"@anthropic/deepagents\";\n * import { FilesystemBackend } from \"@anthropic/deepagents\";\n *\n * const backend = new FilesystemBackend({ rootDir: \"/data\" });\n *\n * const middleware = createSummarizationMiddleware({\n * model: \"gpt-4o-mini\",\n * backend,\n * trigger: { type: \"fraction\", value: 0.85 },\n * keep: { type: \"fraction\", value: 0.10 },\n * });\n *\n * const agent = createDeepAgent({ middleware: [middleware] });\n * ```\n *\n * ## Storage\n *\n * Offloaded messages are stored as markdown at `/conversation_history/{thread_id}.md`.\n *\n * Each summarization event appends a new section to this file, creating a running log\n * of all evicted messages.\n *\n * ## Relationship to LangChain Summarization Middleware\n *\n * The base `summarizationMiddleware` from `langchain` provides core summarization\n * functionality. This middleware adds:\n * - Backend-based conversation history offloading\n * - Tool argument truncation for old messages\n *\n * For simple use cases without backend offloading, use `summarizationMiddleware`\n * from `langchain` directly.\n */\n\nimport { z } from \"zod\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport {\n createMiddleware,\n countTokensApproximately,\n HumanMessage,\n AIMessage,\n BaseMessage,\n type AgentMiddleware as _AgentMiddleware,\n} from \"langchain\";\nimport { getBufferString } from \"@langchain/core/messages\";\nimport type { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { ChatOpenAI } from \"@langchain/openai\";\n\nimport type { BackendProtocol, BackendFactory } from \"../backends/protocol.js\";\nimport type { StateBackend } from \"../backends/state.js\";\nimport type { BaseStore } from \"@langchain/langgraph-checkpoint\";\n\n// Re-export the base summarization middleware from langchain for users who don't need backend offloading\nexport { summarizationMiddleware } from \"langchain\";\n\n/**\n * Context size specification for summarization triggers and retention policies.\n */\nexport interface ContextSize {\n /** Type of context measurement */\n type: \"messages\" | \"tokens\" | \"fraction\";\n /** Threshold value */\n value: number;\n}\n\n/**\n * Settings for truncating large tool arguments in old messages.\n */\nexport interface TruncateArgsSettings {\n /**\n * Threshold to trigger argument truncation.\n * If not provided, truncation is disabled.\n */\n trigger?: ContextSize;\n\n /**\n * Context retention policy for message truncation.\n * Defaults to keeping last 20 messages.\n */\n keep?: ContextSize;\n\n /**\n * Maximum character length for tool arguments before truncation.\n * Defaults to 2000.\n */\n maxLength?: number;\n\n /**\n * Text to replace truncated arguments with.\n * Defaults to \"...(argument truncated)\".\n */\n truncationText?: string;\n}\n\n/**\n * Options for the summarization middleware.\n */\nexport interface SummarizationMiddlewareOptions {\n /**\n * The language model to use for generating summaries.\n * Can be a model string (e.g., \"gpt-4o-mini\") or a BaseChatModel instance.\n */\n model: string | BaseChatModel;\n\n /**\n * Backend instance or factory for persisting conversation history.\n */\n backend:\n | BackendProtocol\n | BackendFactory\n | ((config: { state: unknown; store?: BaseStore }) => StateBackend);\n\n /**\n * Threshold(s) that trigger summarization.\n * Can be a single ContextSize or an array for multiple triggers.\n */\n trigger?: ContextSize | ContextSize[];\n\n /**\n * Context retention policy after summarization.\n * Defaults to keeping last 20 messages.\n */\n keep?: ContextSize;\n\n /**\n * Prompt template for generating summaries.\n */\n summaryPrompt?: string;\n\n /**\n * Max tokens to include when generating summary.\n * Defaults to 4000.\n */\n trimTokensToSummarize?: number;\n\n /**\n * Path prefix for storing conversation history.\n * Defaults to \"/conversation_history\".\n */\n historyPathPrefix?: string;\n\n /**\n * Settings for truncating large tool arguments in old messages.\n * If not provided, argument truncation is disabled.\n */\n truncateArgsSettings?: TruncateArgsSettings;\n}\n\n// Default values\nconst DEFAULT_MESSAGES_TO_KEEP = 20;\nconst DEFAULT_TRIM_TOKEN_LIMIT = 4000;\nconst DEFAULT_SUMMARY_PROMPT = `You are a conversation summarizer. Your task is to create a concise summary of the conversation that captures:\n1. The main topics discussed\n2. Key decisions or conclusions reached\n3. Any important context that would be needed for continuing the conversation\n\nKeep the summary focused and informative. Do not include unnecessary details.\n\nConversation to summarize:\n{conversation}\n\nSummary:`;\n\n/**\n * State schema for summarization middleware.\n */\nconst SummarizationStateSchema = z.object({\n /** Session ID for history file naming */\n _summarizationSessionId: z.string().optional(),\n});\n\n/**\n * Check if a message is a previous summarization message.\n * Summary messages are HumanMessage objects with lc_source='summarization' in additional_kwargs.\n */\nfunction isSummaryMessage(msg: BaseMessage): boolean {\n if (!HumanMessage.isInstance(msg)) {\n return false;\n }\n return msg.additional_kwargs?.lc_source === \"summarization\";\n}\n\n/**\n * Create summarization middleware with backend support for conversation history offloading.\n *\n * This middleware:\n * 1. Monitors conversation length against configured thresholds\n * 2. When triggered, offloads old messages to backend storage\n * 3. Generates a summary of offloaded messages\n * 4. Replaces old messages with the summary, preserving recent context\n *\n * @param options - Configuration options\n * @returns AgentMiddleware for summarization and history offloading\n */\nexport function createSummarizationMiddleware(\n options: SummarizationMiddlewareOptions,\n) {\n const {\n model,\n backend,\n trigger,\n keep = { type: \"messages\", value: DEFAULT_MESSAGES_TO_KEEP },\n summaryPrompt = DEFAULT_SUMMARY_PROMPT,\n trimTokensToSummarize = DEFAULT_TRIM_TOKEN_LIMIT,\n historyPathPrefix = \"/conversation_history\",\n truncateArgsSettings,\n } = options;\n\n // Parse truncate settings\n const truncateTrigger = truncateArgsSettings?.trigger;\n const truncateKeep = truncateArgsSettings?.keep || {\n type: \"messages\" as const,\n value: 20,\n };\n const maxArgLength = truncateArgsSettings?.maxLength || 2000;\n const truncationText =\n truncateArgsSettings?.truncationText || \"...(argument truncated)\";\n\n // Session ID for this middleware instance (fallback if no thread_id)\n let sessionId: string | null = null;\n\n /**\n * Resolve backend from instance or factory.\n */\n function getBackend(state: unknown): BackendProtocol {\n if (typeof backend === \"function\") {\n return backend({ state }) as BackendProtocol;\n }\n return backend;\n }\n\n /**\n * Get or create session ID for history file naming.\n */\n function getSessionId(state: Record<string, unknown>): string {\n if (state._summarizationSessionId) {\n return state._summarizationSessionId as string;\n }\n if (!sessionId) {\n sessionId = `session_${uuidv4().substring(0, 8)}`;\n }\n return sessionId;\n }\n\n /**\n * Get the history file path.\n */\n function getHistoryPath(state: Record<string, unknown>): string {\n const id = getSessionId(state);\n return `${historyPathPrefix}/${id}.md`;\n }\n\n /**\n * Resolve the chat model.\n */\n function getChatModel(): BaseChatModel {\n if (typeof model === \"string\") {\n return new ChatOpenAI({ modelName: model });\n }\n return model;\n }\n\n /**\n * Check if summarization should be triggered.\n */\n function shouldSummarize(\n messages: BaseMessage[],\n totalTokens: number,\n maxInputTokens?: number,\n ): boolean {\n if (!trigger) {\n return false;\n }\n\n const triggers = Array.isArray(trigger) ? trigger : [trigger];\n\n for (const t of triggers) {\n if (t.type === \"messages\" && messages.length >= t.value) {\n return true;\n }\n if (t.type === \"tokens\" && totalTokens >= t.value) {\n return true;\n }\n if (t.type === \"fraction\" && maxInputTokens) {\n const threshold = Math.floor(maxInputTokens * t.value);\n if (totalTokens >= threshold) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n /**\n * Determine cutoff index for messages to summarize.\n * Messages at index < cutoff will be summarized.\n * Messages at index >= cutoff will be preserved.\n */\n function determineCutoffIndex(\n messages: BaseMessage[],\n maxInputTokens?: number,\n ): number {\n if (keep.type === \"messages\") {\n if (messages.length <= keep.value) {\n return 0;\n }\n return messages.length - keep.value;\n }\n\n if (keep.type === \"tokens\" || keep.type === \"fraction\") {\n const targetTokenCount =\n keep.type === \"fraction\" && maxInputTokens\n ? Math.floor(maxInputTokens * keep.value)\n : keep.value;\n\n let tokensKept = 0;\n for (let i = messages.length - 1; i >= 0; i--) {\n const msgTokens = countTokensApproximately([messages[i]]);\n if (tokensKept + msgTokens > targetTokenCount) {\n return i + 1;\n }\n tokensKept += msgTokens;\n }\n return 0;\n }\n\n return 0;\n }\n\n /**\n * Check if argument truncation should be triggered.\n */\n function shouldTruncateArgs(\n messages: BaseMessage[],\n totalTokens: number,\n maxInputTokens?: number,\n ): boolean {\n if (!truncateTrigger) {\n return false;\n }\n\n if (truncateTrigger.type === \"messages\") {\n return messages.length >= truncateTrigger.value;\n }\n if (truncateTrigger.type === \"tokens\") {\n return totalTokens >= truncateTrigger.value;\n }\n if (truncateTrigger.type === \"fraction\" && maxInputTokens) {\n const threshold = Math.floor(maxInputTokens * truncateTrigger.value);\n return totalTokens >= threshold;\n }\n\n return false;\n }\n\n /**\n * Determine cutoff index for argument truncation.\n */\n function determineTruncateCutoffIndex(\n messages: BaseMessage[],\n maxInputTokens?: number,\n ): number {\n if (truncateKeep.type === \"messages\") {\n if (messages.length <= truncateKeep.value) {\n return messages.length;\n }\n return messages.length - truncateKeep.value;\n }\n\n if (truncateKeep.type === \"tokens\" || truncateKeep.type === \"fraction\") {\n const targetTokenCount =\n truncateKeep.type === \"fraction\" && maxInputTokens\n ? Math.floor(maxInputTokens * truncateKeep.value)\n : truncateKeep.value;\n\n let tokensKept = 0;\n for (let i = messages.length - 1; i >= 0; i--) {\n const msgTokens = countTokensApproximately([messages[i]]);\n if (tokensKept + msgTokens > targetTokenCount) {\n return i + 1;\n }\n tokensKept += msgTokens;\n }\n return 0;\n }\n\n return messages.length;\n }\n\n /**\n * Truncate large tool arguments in old messages.\n */\n function truncateArgs(\n messages: BaseMessage[],\n maxInputTokens?: number,\n ): { messages: BaseMessage[]; modified: boolean } {\n const totalTokens = countTokensApproximately(messages);\n if (!shouldTruncateArgs(messages, totalTokens, maxInputTokens)) {\n return { messages, modified: false };\n }\n\n const cutoffIndex = determineTruncateCutoffIndex(messages, maxInputTokens);\n if (cutoffIndex >= messages.length) {\n return { messages, modified: false };\n }\n\n const truncatedMessages: BaseMessage[] = [];\n let modified = false;\n\n for (let i = 0; i < messages.length; i++) {\n const msg = messages[i];\n\n if (i < cutoffIndex && AIMessage.isInstance(msg) && msg.tool_calls) {\n const truncatedToolCalls = msg.tool_calls.map((toolCall) => {\n const args = toolCall.args || {};\n const truncatedArgs: Record<string, unknown> = {};\n let toolModified = false;\n\n for (const [key, value] of Object.entries(args)) {\n if (\n typeof value === \"string\" &&\n value.length > maxArgLength &&\n (toolCall.name === \"write_file\" || toolCall.name === \"edit_file\")\n ) {\n truncatedArgs[key] = value.substring(0, 20) + truncationText;\n toolModified = true;\n } else {\n truncatedArgs[key] = value;\n }\n }\n\n if (toolModified) {\n modified = true;\n return { ...toolCall, args: truncatedArgs };\n }\n return toolCall;\n });\n\n if (modified) {\n const truncatedMsg = new AIMessage({\n content: msg.content,\n tool_calls: truncatedToolCalls,\n additional_kwargs: msg.additional_kwargs,\n });\n truncatedMessages.push(truncatedMsg);\n } else {\n truncatedMessages.push(msg);\n }\n } else {\n truncatedMessages.push(msg);\n }\n }\n\n return { messages: truncatedMessages, modified };\n }\n\n /**\n * Filter out previous summary messages.\n */\n function filterSummaryMessages(messages: BaseMessage[]): BaseMessage[] {\n return messages.filter((msg) => !isSummaryMessage(msg));\n }\n\n /**\n * Offload messages to backend.\n */\n async function offloadToBackend(\n resolvedBackend: BackendProtocol,\n messages: BaseMessage[],\n state: Record<string, unknown>,\n ): Promise<string | null> {\n const path = getHistoryPath(state);\n const filteredMessages = filterSummaryMessages(messages);\n\n const timestamp = new Date().toISOString();\n const newSection = `## Summarized at ${timestamp}\\n\\n${getBufferString(filteredMessages)}\\n\\n`;\n\n // Read existing content\n let existingContent = \"\";\n try {\n if (resolvedBackend.downloadFiles) {\n const responses = await resolvedBackend.downloadFiles([path]);\n if (\n responses.length > 0 &&\n responses[0].content &&\n !responses[0].error\n ) {\n existingContent = new TextDecoder().decode(responses[0].content);\n }\n }\n } catch {\n // File doesn't exist yet, that's fine\n }\n\n const combinedContent = existingContent + newSection;\n\n try {\n let result;\n if (existingContent) {\n result = await resolvedBackend.edit(\n path,\n existingContent,\n combinedContent,\n );\n } else {\n result = await resolvedBackend.write(path, combinedContent);\n }\n\n if (result.error) {\n console.warn(\n `Failed to offload conversation history to ${path}: ${result.error}`,\n );\n return null;\n }\n\n return path;\n } catch (e) {\n console.warn(`Exception offloading conversation history to ${path}:`, e);\n return null;\n }\n }\n\n /**\n * Create summary of messages.\n */\n async function createSummary(messages: BaseMessage[]): Promise<string> {\n const chatModel = getChatModel();\n\n // Trim messages if too long\n let messagesToSummarize = messages;\n const tokens = countTokensApproximately(messages);\n if (tokens > trimTokensToSummarize) {\n // Keep only recent messages that fit\n let kept = 0;\n const trimmedMessages: BaseMessage[] = [];\n for (let i = messages.length - 1; i >= 0; i--) {\n const msgTokens = countTokensApproximately([messages[i]]);\n if (kept + msgTokens > trimTokensToSummarize) {\n break;\n }\n trimmedMessages.unshift(messages[i]);\n kept += msgTokens;\n }\n messagesToSummarize = trimmedMessages;\n }\n\n const conversation = getBufferString(messagesToSummarize);\n const prompt = summaryPrompt.replace(\"{conversation}\", conversation);\n\n const response = await chatModel.invoke([\n new HumanMessage({ content: prompt }),\n ]);\n\n return typeof response.content === \"string\"\n ? response.content\n : JSON.stringify(response.content);\n }\n\n /**\n * Build the summary message with file path reference.\n */\n function buildSummaryMessage(\n summary: string,\n filePath: string | null,\n ): HumanMessage {\n let content: string;\n if (filePath) {\n content = `You are in the middle of a conversation that has been summarized.\n\nThe full conversation history has been saved to ${filePath} should you need to refer back to it for details.\n\nA condensed summary follows:\n\n<summary>\n${summary}\n</summary>`;\n } else {\n content = `Here is a summary of the conversation to date:\\n\\n${summary}`;\n }\n\n return new HumanMessage({\n content,\n additional_kwargs: { lc_source: \"summarization\" },\n });\n }\n\n return createMiddleware({\n name: \"SummarizationMiddleware\",\n stateSchema: SummarizationStateSchema,\n\n async beforeModel(state) {\n const messages = state.messages ?? [];\n\n if (messages.length === 0) {\n return undefined;\n }\n\n // Step 1: Truncate args if configured\n const { messages: truncatedMessages, modified: argsWereTruncated } =\n truncateArgs(messages);\n\n // Step 2: Check if summarization should happen\n const totalTokens = countTokensApproximately(truncatedMessages);\n const shouldDoSummarization = shouldSummarize(\n truncatedMessages,\n totalTokens,\n );\n\n // If only truncation happened (no summarization)\n if (argsWereTruncated && !shouldDoSummarization) {\n return { messages: truncatedMessages };\n }\n\n // If no truncation and no summarization\n if (!shouldDoSummarization) {\n return undefined;\n }\n\n // Step 3: Perform summarization\n const cutoffIndex = determineCutoffIndex(truncatedMessages);\n if (cutoffIndex <= 0) {\n if (argsWereTruncated) {\n return { messages: truncatedMessages };\n }\n return undefined;\n }\n\n const messagesToSummarize = truncatedMessages.slice(0, cutoffIndex);\n const preservedMessages = truncatedMessages.slice(cutoffIndex);\n\n // Offload to backend first\n const resolvedBackend = getBackend(state);\n const filePath = await offloadToBackend(\n resolvedBackend,\n messagesToSummarize,\n state,\n );\n\n if (filePath === null) {\n // Offloading failed - don't proceed with summarization\n return undefined;\n }\n\n // Generate summary\n const summary = await createSummary(messagesToSummarize);\n\n // Build summary message\n const summaryMessage = buildSummaryMessage(summary, filePath);\n\n return {\n messages: [summaryMessage, ...preservedMessages],\n _summarizationSessionId: getSessionId(state),\n };\n },\n });\n}\n","/**\n * StoreBackend: Adapter for LangGraph's BaseStore (persistent, cross-thread).\n */\n\nimport type { Item } from \"@langchain/langgraph\";\nimport type {\n BackendProtocol,\n EditResult,\n FileData,\n FileDownloadResponse,\n FileInfo,\n FileUploadResponse,\n GrepMatch,\n StateAndStore,\n WriteResult,\n} from \"./protocol.js\";\nimport {\n createFileData,\n fileDataToString,\n formatReadResponse,\n globSearchFiles,\n grepMatchesFromFiles,\n performStringReplacement,\n updateFileData,\n} from \"./utils.js\";\n\n/**\n * Backend that stores files in LangGraph's BaseStore (persistent).\n *\n * Uses LangGraph's Store for persistent, cross-conversation storage.\n * Files are organized via namespaces and persist across all threads.\n *\n * The namespace can include an optional assistant_id for multi-agent isolation.\n */\nexport class StoreBackend implements BackendProtocol {\n private stateAndStore: StateAndStore;\n\n constructor(stateAndStore: StateAndStore) {\n this.stateAndStore = stateAndStore;\n }\n\n /**\n * Get the store instance.\n *\n * @returns BaseStore instance\n * @throws Error if no store is available\n */\n private getStore() {\n const store = this.stateAndStore.store;\n if (!store) {\n throw new Error(\"Store is required but not available in StateAndStore\");\n }\n return store;\n }\n\n /**\n * Get the namespace for store operations.\n *\n * If an assistant_id is available in stateAndStore, return\n * [assistant_id, \"filesystem\"] to provide per-assistant isolation.\n * Otherwise return [\"filesystem\"].\n */\n protected getNamespace(): string[] {\n const namespace = \"filesystem\";\n const assistantId = this.stateAndStore.assistantId;\n\n if (assistantId) {\n return [assistantId, namespace];\n }\n\n return [namespace];\n }\n\n /**\n * Convert a store Item to FileData format.\n *\n * @param storeItem - The store Item containing file data\n * @returns FileData object\n * @throws Error if required fields are missing or have incorrect types\n */\n private convertStoreItemToFileData(storeItem: Item): FileData {\n const value = storeItem.value as any;\n\n if (\n !value.content ||\n !Array.isArray(value.content) ||\n typeof value.created_at !== \"string\" ||\n typeof value.modified_at !== \"string\"\n ) {\n throw new Error(\n `Store item does not contain valid FileData fields. Got keys: ${Object.keys(value).join(\", \")}`,\n );\n }\n\n return {\n content: value.content,\n created_at: value.created_at,\n modified_at: value.modified_at,\n };\n }\n\n /**\n * Convert FileData to a value suitable for store.put().\n *\n * @param fileData - The FileData to convert\n * @returns Object with content, created_at, and modified_at fields\n */\n private convertFileDataToStoreValue(fileData: FileData): Record<string, any> {\n return {\n content: fileData.content,\n created_at: fileData.created_at,\n modified_at: fileData.modified_at,\n };\n }\n\n /**\n * Search store with automatic pagination to retrieve all results.\n *\n * @param store - The store to search\n * @param namespace - Hierarchical path prefix to search within\n * @param options - Optional query, filter, and page_size\n * @returns List of all items matching the search criteria\n */\n private async searchStorePaginated(\n store: any,\n namespace: string[],\n options: {\n query?: string;\n filter?: Record<string, any>;\n pageSize?: number;\n } = {},\n ): Promise<Item[]> {\n const { query, filter, pageSize = 100 } = options;\n const allItems: Item[] = [];\n let offset = 0;\n\n while (true) {\n const pageItems = await store.search(namespace, {\n query,\n filter,\n limit: pageSize,\n offset,\n });\n\n if (!pageItems || pageItems.length === 0) {\n break;\n }\n\n allItems.push(...pageItems);\n\n if (pageItems.length < pageSize) {\n break;\n }\n\n offset += pageSize;\n }\n\n return allItems;\n }\n\n /**\n * List files and directories in the specified directory (non-recursive).\n *\n * @param path - Absolute path to directory\n * @returns List of FileInfo objects for files and directories directly in the directory.\n * Directories have a trailing / in their path and is_dir=true.\n */\n async lsInfo(path: string): Promise<FileInfo[]> {\n const store = this.getStore();\n const namespace = this.getNamespace();\n\n // Retrieve all items and filter by path prefix locally to avoid\n // coupling to store-specific filter semantics\n const items = await this.searchStorePaginated(store, namespace);\n const infos: FileInfo[] = [];\n const subdirs = new Set<string>();\n\n // Normalize path to have trailing slash for proper prefix matching\n const normalizedPath = path.endsWith(\"/\") ? path : path + \"/\";\n\n for (const item of items) {\n const itemKey = String(item.key);\n\n // Check if file is in the specified directory or a subdirectory\n if (!itemKey.startsWith(normalizedPath)) {\n continue;\n }\n\n // Get the relative path after the directory\n const relative = itemKey.substring(normalizedPath.length);\n\n // If relative path contains '/', it's in a subdirectory\n if (relative.includes(\"/\")) {\n // Extract the immediate subdirectory name\n const subdirName = relative.split(\"/\")[0];\n subdirs.add(normalizedPath + subdirName + \"/\");\n continue;\n }\n\n // This is a file directly in the current directory\n try {\n const fd = this.convertStoreItemToFileData(item);\n const size = fd.content.join(\"\\n\").length;\n infos.push({\n path: itemKey,\n is_dir: false,\n size: size,\n modified_at: fd.modified_at,\n });\n } catch {\n // Skip invalid items\n continue;\n }\n }\n\n // Add directories to the results\n for (const subdir of Array.from(subdirs).sort()) {\n infos.push({\n path: subdir,\n is_dir: true,\n size: 0,\n modified_at: \"\",\n });\n }\n\n infos.sort((a, b) => a.path.localeCompare(b.path));\n return infos;\n }\n\n /**\n * Read file content with line numbers.\n *\n * @param filePath - Absolute file path\n * @param offset - Line offset to start reading from (0-indexed)\n * @param limit - Maximum number of lines to read\n * @returns Formatted file content with line numbers, or error message\n */\n async read(\n filePath: string,\n offset: number = 0,\n limit: number = 500,\n ): Promise<string> {\n try {\n const fileData = await this.readRaw(filePath);\n return formatReadResponse(fileData, offset, limit);\n } catch (e: any) {\n return `Error: ${e.message}`;\n }\n }\n\n /**\n * Read file content as raw FileData.\n *\n * @param filePath - Absolute file path\n * @returns Raw file content as FileData\n */\n async readRaw(filePath: string): Promise<FileData> {\n const store = this.getStore();\n const namespace = this.getNamespace();\n const item = await store.get(namespace, filePath);\n\n if (!item) throw new Error(`File '${filePath}' not found`);\n return this.convertStoreItemToFileData(item);\n }\n\n /**\n * Create a new file with content.\n * Returns WriteResult. External storage sets filesUpdate=null.\n */\n async write(filePath: string, content: string): Promise<WriteResult> {\n const store = this.getStore();\n const namespace = this.getNamespace();\n\n // Check if file exists\n const existing = await store.get(namespace, filePath);\n if (existing) {\n return {\n error: `Cannot write to ${filePath} because it already exists. Read and then make an edit, or write to a new path.`,\n };\n }\n\n // Create new file\n const fileData = createFileData(content);\n const storeValue = this.convertFileDataToStoreValue(fileData);\n await store.put(namespace, filePath, storeValue);\n return { path: filePath, filesUpdate: null };\n }\n\n /**\n * Edit a file by replacing string occurrences.\n * Returns EditResult. External storage sets filesUpdate=null.\n */\n async edit(\n filePath: string,\n oldString: string,\n newString: string,\n replaceAll: boolean = false,\n ): Promise<EditResult> {\n const store = this.getStore();\n const namespace = this.getNamespace();\n\n // Get existing file\n const item = await store.get(namespace, filePath);\n if (!item) {\n return { error: `Error: File '${filePath}' not found` };\n }\n\n try {\n const fileData = this.convertStoreItemToFileData(item);\n const content = fileDataToString(fileData);\n const result = performStringReplacement(\n content,\n oldString,\n newString,\n replaceAll,\n );\n\n if (typeof result === \"string\") {\n return { error: result };\n }\n\n const [newContent, occurrences] = result;\n const newFileData = updateFileData(fileData, newContent);\n\n // Update file in store\n const storeValue = this.convertFileDataToStoreValue(newFileData);\n await store.put(namespace, filePath, storeValue);\n return { path: filePath, filesUpdate: null, occurrences: occurrences };\n } catch (e: any) {\n return { error: `Error: ${e.message}` };\n }\n }\n\n /**\n * Structured search results or error string for invalid input.\n */\n async grepRaw(\n pattern: string,\n path: string = \"/\",\n glob: string | null = null,\n ): Promise<GrepMatch[] | string> {\n const store = this.getStore();\n const namespace = this.getNamespace();\n const items = await this.searchStorePaginated(store, namespace);\n\n const files: Record<string, FileData> = {};\n for (const item of items) {\n try {\n files[item.key] = this.convertStoreItemToFileData(item);\n } catch {\n // Skip invalid items\n continue;\n }\n }\n\n return grepMatchesFromFiles(files, pattern, path, glob);\n }\n\n /**\n * Structured glob matching returning FileInfo objects.\n */\n async globInfo(pattern: string, path: string = \"/\"): Promise<FileInfo[]> {\n const store = this.getStore();\n const namespace = this.getNamespace();\n const items = await this.searchStorePaginated(store, namespace);\n\n const files: Record<string, FileData> = {};\n for (const item of items) {\n try {\n files[item.key] = this.convertStoreItemToFileData(item);\n } catch {\n // Skip invalid items\n continue;\n }\n }\n\n const result = globSearchFiles(files, pattern, path);\n if (result === \"No files found\") {\n return [];\n }\n\n const paths = result.split(\"\\n\");\n const infos: FileInfo[] = [];\n for (const p of paths) {\n const fd = files[p];\n const size = fd ? fd.content.join(\"\\n\").length : 0;\n infos.push({\n path: p,\n is_dir: false,\n size: size,\n modified_at: fd?.modified_at || \"\",\n });\n }\n return infos;\n }\n\n /**\n * Upload multiple files.\n *\n * @param files - List of [path, content] tuples to upload\n * @returns List of FileUploadResponse objects, one per input file\n */\n async uploadFiles(\n files: Array<[string, Uint8Array]>,\n ): Promise<FileUploadResponse[]> {\n const store = this.getStore();\n const namespace = this.getNamespace();\n const responses: FileUploadResponse[] = [];\n\n for (const [path, content] of files) {\n try {\n const contentStr = new TextDecoder().decode(content);\n const fileData = createFileData(contentStr);\n const storeValue = this.convertFileDataToStoreValue(fileData);\n await store.put(namespace, path, storeValue);\n responses.push({ path, error: null });\n } catch {\n responses.push({ path, error: \"invalid_path\" });\n }\n }\n\n return responses;\n }\n\n /**\n * Download multiple files.\n *\n * @param paths - List of file paths to download\n * @returns List of FileDownloadResponse objects, one per input path\n */\n async downloadFiles(paths: string[]): Promise<FileDownloadResponse[]> {\n const store = this.getStore();\n const namespace = this.getNamespace();\n const responses: FileDownloadResponse[] = [];\n\n for (const path of paths) {\n try {\n const item = await store.get(namespace, path);\n if (!item) {\n responses.push({ path, content: null, error: \"file_not_found\" });\n continue;\n }\n\n const fileData = this.convertStoreItemToFileData(item);\n const contentStr = fileDataToString(fileData);\n const content = new TextEncoder().encode(contentStr);\n responses.push({ path, content, error: null });\n } catch {\n responses.push({ path, content: null, error: \"file_not_found\" });\n }\n }\n\n return responses;\n }\n}\n","/**\n * FilesystemBackend: Read and write files directly from the filesystem.\n *\n * Security and search upgrades:\n * - Secure path resolution with root containment when in virtual_mode (sandboxed to cwd)\n * - Prevent symlink-following on file I/O using O_NOFOLLOW when available\n * - Ripgrep-powered grep with JSON parsing, plus regex fallback\n * and optional glob include filtering, while preserving virtual path behavior\n */\n\nimport fs from \"node:fs/promises\";\nimport fsSync from \"node:fs\";\nimport path from \"node:path\";\nimport { spawn } from \"node:child_process\";\n\nimport fg from \"fast-glob\";\nimport micromatch from \"micromatch\";\nimport type {\n BackendProtocol,\n EditResult,\n FileData,\n FileDownloadResponse,\n FileInfo,\n FileUploadResponse,\n GrepMatch,\n WriteResult,\n} from \"./protocol.js\";\nimport {\n checkEmptyContent,\n formatContentWithLineNumbers,\n performStringReplacement,\n} from \"./utils.js\";\n\nconst SUPPORTS_NOFOLLOW = fsSync.constants.O_NOFOLLOW !== undefined;\n\n/**\n * Backend that reads and writes files directly from the filesystem.\n *\n * Files are accessed using their actual filesystem paths. Relative paths are\n * resolved relative to the current working directory. Content is read/written\n * as plain text, and metadata (timestamps) are derived from filesystem stats.\n */\nexport class FilesystemBackend implements BackendProtocol {\n private cwd: string;\n private virtualMode: boolean;\n private maxFileSizeBytes: number;\n\n constructor(\n options: {\n rootDir?: string;\n virtualMode?: boolean;\n maxFileSizeMb?: number;\n } = {},\n ) {\n const { rootDir, virtualMode = false, maxFileSizeMb = 10 } = options;\n this.cwd = rootDir ? path.resolve(rootDir) : process.cwd();\n this.virtualMode = virtualMode;\n this.maxFileSizeBytes = maxFileSizeMb * 1024 * 1024;\n }\n\n /**\n * Resolve a file path with security checks.\n *\n * When virtualMode=true, treat incoming paths as virtual absolute paths under\n * this.cwd, disallow traversal (.., ~) and ensure resolved path stays within root.\n * When virtualMode=false, preserve legacy behavior: absolute paths are allowed\n * as-is; relative paths resolve under cwd.\n *\n * @param key - File path (absolute, relative, or virtual when virtualMode=true)\n * @returns Resolved absolute path string\n * @throws Error if path traversal detected or path outside root\n */\n private resolvePath(key: string): string {\n if (this.virtualMode) {\n const vpath = key.startsWith(\"/\") ? key : \"/\" + key;\n if (vpath.includes(\"..\") || vpath.startsWith(\"~\")) {\n throw new Error(\"Path traversal not allowed\");\n }\n const full = path.resolve(this.cwd, vpath.substring(1));\n const relative = path.relative(this.cwd, full);\n if (relative.startsWith(\"..\") || path.isAbsolute(relative)) {\n throw new Error(`Path: ${full} outside root directory: ${this.cwd}`);\n }\n return full;\n }\n\n if (path.isAbsolute(key)) {\n return key;\n }\n return path.resolve(this.cwd, key);\n }\n\n /**\n * List files and directories in the specified directory (non-recursive).\n *\n * @param dirPath - Absolute directory path to list files from\n * @returns List of FileInfo objects for files and directories directly in the directory.\n * Directories have a trailing / in their path and is_dir=true.\n */\n async lsInfo(dirPath: string): Promise<FileInfo[]> {\n try {\n const resolvedPath = this.resolvePath(dirPath);\n const stat = await fs.stat(resolvedPath);\n\n if (!stat.isDirectory()) {\n return [];\n }\n\n const entries = await fs.readdir(resolvedPath, { withFileTypes: true });\n const results: FileInfo[] = [];\n\n const cwdStr = this.cwd.endsWith(path.sep)\n ? this.cwd\n : this.cwd + path.sep;\n\n for (const entry of entries) {\n const fullPath = path.join(resolvedPath, entry.name);\n\n try {\n const entryStat = await fs.stat(fullPath);\n const isFile = entryStat.isFile();\n const isDir = entryStat.isDirectory();\n\n if (!this.virtualMode) {\n // Non-virtual mode: use absolute paths\n if (isFile) {\n results.push({\n path: fullPath,\n is_dir: false,\n size: entryStat.size,\n modified_at: entryStat.mtime.toISOString(),\n });\n } else if (isDir) {\n results.push({\n path: fullPath + path.sep,\n is_dir: true,\n size: 0,\n modified_at: entryStat.mtime.toISOString(),\n });\n }\n } else {\n let relativePath: string;\n if (fullPath.startsWith(cwdStr)) {\n relativePath = fullPath.substring(cwdStr.length);\n } else if (fullPath.startsWith(this.cwd)) {\n relativePath = fullPath\n .substring(this.cwd.length)\n .replace(/^[/\\\\]/, \"\");\n } else {\n relativePath = fullPath;\n }\n\n relativePath = relativePath.split(path.sep).join(\"/\");\n const virtPath = \"/\" + relativePath;\n\n if (isFile) {\n results.push({\n path: virtPath,\n is_dir: false,\n size: entryStat.size,\n modified_at: entryStat.mtime.toISOString(),\n });\n } else if (isDir) {\n results.push({\n path: virtPath + \"/\",\n is_dir: true,\n size: 0,\n modified_at: entryStat.mtime.toISOString(),\n });\n }\n }\n } catch {\n // Skip entries we can't stat\n continue;\n }\n }\n\n results.sort((a, b) => a.path.localeCompare(b.path));\n return results;\n } catch {\n return [];\n }\n }\n\n /**\n * Read file content with line numbers.\n *\n * @param filePath - Absolute or relative file path\n * @param offset - Line offset to start reading from (0-indexed)\n * @param limit - Maximum number of lines to read\n * @returns Formatted file content with line numbers, or error message\n */\n async read(\n filePath: string,\n offset: number = 0,\n limit: number = 500,\n ): Promise<string> {\n try {\n const resolvedPath = this.resolvePath(filePath);\n\n let content: string;\n\n if (SUPPORTS_NOFOLLOW) {\n const stat = await fs.stat(resolvedPath);\n if (!stat.isFile()) {\n return `Error: File '${filePath}' not found`;\n }\n const fd = await fs.open(\n resolvedPath,\n fsSync.constants.O_RDONLY | fsSync.constants.O_NOFOLLOW,\n );\n try {\n content = await fd.readFile({ encoding: \"utf-8\" });\n } finally {\n await fd.close();\n }\n } else {\n const stat = await fs.lstat(resolvedPath);\n if (stat.isSymbolicLink()) {\n return `Error: Symlinks are not allowed: ${filePath}`;\n }\n if (!stat.isFile()) {\n return `Error: File '${filePath}' not found`;\n }\n content = await fs.readFile(resolvedPath, \"utf-8\");\n }\n\n const emptyMsg = checkEmptyContent(content);\n if (emptyMsg) {\n return emptyMsg;\n }\n\n const lines = content.split(\"\\n\");\n const startIdx = offset;\n const endIdx = Math.min(startIdx + limit, lines.length);\n\n if (startIdx >= lines.length) {\n return `Error: Line offset ${offset} exceeds file length (${lines.length} lines)`;\n }\n\n const selectedLines = lines.slice(startIdx, endIdx);\n return formatContentWithLineNumbers(selectedLines, startIdx + 1);\n } catch (e: any) {\n return `Error reading file '${filePath}': ${e.message}`;\n }\n }\n\n /**\n * Read file content as raw FileData.\n *\n * @param filePath - Absolute file path\n * @returns Raw file content as FileData\n */\n async readRaw(filePath: string): Promise<FileData> {\n const resolvedPath = this.resolvePath(filePath);\n\n let content: string;\n let stat: fsSync.Stats;\n\n if (SUPPORTS_NOFOLLOW) {\n stat = await fs.stat(resolvedPath);\n if (!stat.isFile()) throw new Error(`File '${filePath}' not found`);\n const fd = await fs.open(\n resolvedPath,\n fsSync.constants.O_RDONLY | fsSync.constants.O_NOFOLLOW,\n );\n try {\n content = await fd.readFile({ encoding: \"utf-8\" });\n } finally {\n await fd.close();\n }\n } else {\n stat = await fs.lstat(resolvedPath);\n if (stat.isSymbolicLink()) {\n throw new Error(`Symlinks are not allowed: ${filePath}`);\n }\n if (!stat.isFile()) throw new Error(`File '${filePath}' not found`);\n content = await fs.readFile(resolvedPath, \"utf-8\");\n }\n\n return {\n content: content.split(\"\\n\"),\n created_at: stat.ctime.toISOString(),\n modified_at: stat.mtime.toISOString(),\n };\n }\n\n /**\n * Create a new file with content.\n * Returns WriteResult. External storage sets filesUpdate=null.\n */\n async write(filePath: string, content: string): Promise<WriteResult> {\n try {\n const resolvedPath = this.resolvePath(filePath);\n\n try {\n const stat = await fs.lstat(resolvedPath);\n if (stat.isSymbolicLink()) {\n return {\n error: `Cannot write to ${filePath} because it is a symlink. Symlinks are not allowed.`,\n };\n }\n return {\n error: `Cannot write to ${filePath} because it already exists. Read and then make an edit, or write to a new path.`,\n };\n } catch {\n // File doesn't exist, good to proceed\n }\n\n await fs.mkdir(path.dirname(resolvedPath), { recursive: true });\n\n if (SUPPORTS_NOFOLLOW) {\n const flags =\n fsSync.constants.O_WRONLY |\n fsSync.constants.O_CREAT |\n fsSync.constants.O_TRUNC |\n fsSync.constants.O_NOFOLLOW;\n\n const fd = await fs.open(resolvedPath, flags, 0o644);\n try {\n await fd.writeFile(content, \"utf-8\");\n } finally {\n await fd.close();\n }\n } else {\n await fs.writeFile(resolvedPath, content, \"utf-8\");\n }\n\n return { path: filePath, filesUpdate: null };\n } catch (e: any) {\n return { error: `Error writing file '${filePath}': ${e.message}` };\n }\n }\n\n /**\n * Edit a file by replacing string occurrences.\n * Returns EditResult. External storage sets filesUpdate=null.\n */\n async edit(\n filePath: string,\n oldString: string,\n newString: string,\n replaceAll: boolean = false,\n ): Promise<EditResult> {\n try {\n const resolvedPath = this.resolvePath(filePath);\n\n let content: string;\n\n if (SUPPORTS_NOFOLLOW) {\n const stat = await fs.stat(resolvedPath);\n if (!stat.isFile()) {\n return { error: `Error: File '${filePath}' not found` };\n }\n\n const fd = await fs.open(\n resolvedPath,\n fsSync.constants.O_RDONLY | fsSync.constants.O_NOFOLLOW,\n );\n try {\n content = await fd.readFile({ encoding: \"utf-8\" });\n } finally {\n await fd.close();\n }\n } else {\n const stat = await fs.lstat(resolvedPath);\n if (stat.isSymbolicLink()) {\n return { error: `Error: Symlinks are not allowed: ${filePath}` };\n }\n if (!stat.isFile()) {\n return { error: `Error: File '${filePath}' not found` };\n }\n content = await fs.readFile(resolvedPath, \"utf-8\");\n }\n\n const result = performStringReplacement(\n content,\n oldString,\n newString,\n replaceAll,\n );\n\n if (typeof result === \"string\") {\n return { error: result };\n }\n\n const [newContent, occurrences] = result;\n\n // Write securely\n if (SUPPORTS_NOFOLLOW) {\n const flags =\n fsSync.constants.O_WRONLY |\n fsSync.constants.O_TRUNC |\n fsSync.constants.O_NOFOLLOW;\n\n const fd = await fs.open(resolvedPath, flags);\n try {\n await fd.writeFile(newContent, \"utf-8\");\n } finally {\n await fd.close();\n }\n } else {\n await fs.writeFile(resolvedPath, newContent, \"utf-8\");\n }\n\n return { path: filePath, filesUpdate: null, occurrences: occurrences };\n } catch (e: any) {\n return { error: `Error editing file '${filePath}': ${e.message}` };\n }\n }\n\n /**\n * Structured search results or error string for invalid input.\n */\n async grepRaw(\n pattern: string,\n dirPath: string = \"/\",\n glob: string | null = null,\n ): Promise<GrepMatch[] | string> {\n // Validate regex\n try {\n new RegExp(pattern);\n } catch (e: any) {\n return `Invalid regex pattern: ${e.message}`;\n }\n\n // Resolve base path\n let baseFull: string;\n try {\n baseFull = this.resolvePath(dirPath || \".\");\n } catch {\n return [];\n }\n\n try {\n await fs.stat(baseFull);\n } catch {\n return [];\n }\n\n // Try ripgrep first, fallback to regex search\n let results = await this.ripgrepSearch(pattern, baseFull, glob);\n if (results === null) {\n results = await this.pythonSearch(pattern, baseFull, glob);\n }\n\n const matches: GrepMatch[] = [];\n for (const [fpath, items] of Object.entries(results)) {\n for (const [lineNum, lineText] of items) {\n matches.push({ path: fpath, line: lineNum, text: lineText });\n }\n }\n return matches;\n }\n\n /**\n * Try to use ripgrep for fast searching.\n * Returns null if ripgrep is not available or fails.\n */\n private async ripgrepSearch(\n pattern: string,\n baseFull: string,\n includeGlob: string | null,\n ): Promise<Record<string, Array<[number, string]>> | null> {\n return new Promise((resolve) => {\n const args = [\"--json\"];\n if (includeGlob) {\n args.push(\"--glob\", includeGlob);\n }\n args.push(\"--\", pattern, baseFull);\n\n const proc = spawn(\"rg\", args, { timeout: 30000 });\n const results: Record<string, Array<[number, string]>> = {};\n let output = \"\";\n\n proc.stdout.on(\"data\", (data) => {\n output += data.toString();\n });\n\n proc.on(\"close\", (code) => {\n if (code !== 0 && code !== 1) {\n // Error (code 1 means no matches, which is ok)\n resolve(null);\n return;\n }\n\n for (const line of output.split(\"\\n\")) {\n if (!line.trim()) continue;\n try {\n const data = JSON.parse(line);\n if (data.type !== \"match\") continue;\n\n const pdata = data.data || {};\n const ftext = pdata.path?.text;\n if (!ftext) continue;\n\n let virtPath: string;\n if (this.virtualMode) {\n try {\n const resolved = path.resolve(ftext);\n const relative = path.relative(this.cwd, resolved);\n if (relative.startsWith(\"..\")) continue;\n const normalizedRelative = relative.split(path.sep).join(\"/\");\n virtPath = \"/\" + normalizedRelative;\n } catch {\n continue;\n }\n } else {\n virtPath = ftext;\n }\n\n const ln = pdata.line_number;\n const lt = pdata.lines?.text?.replace(/\\n$/, \"\") || \"\";\n if (ln === undefined) continue;\n\n if (!results[virtPath]) {\n results[virtPath] = [];\n }\n results[virtPath].push([ln, lt]);\n } catch {\n // Skip invalid JSON\n continue;\n }\n }\n\n resolve(results);\n });\n\n proc.on(\"error\", () => {\n resolve(null);\n });\n });\n }\n\n /**\n * Fallback regex search implementation.\n */\n private async pythonSearch(\n pattern: string,\n baseFull: string,\n includeGlob: string | null,\n ): Promise<Record<string, Array<[number, string]>>> {\n let regex: RegExp;\n try {\n regex = new RegExp(pattern);\n } catch {\n return {};\n }\n\n const results: Record<string, Array<[number, string]>> = {};\n const stat = await fs.stat(baseFull);\n const root = stat.isDirectory() ? baseFull : path.dirname(baseFull);\n\n // Use fast-glob to recursively find all files\n const files = await fg(\"**/*\", {\n cwd: root,\n absolute: true,\n onlyFiles: true,\n dot: true,\n });\n\n for (const fp of files) {\n try {\n // Filter by glob if provided\n if (\n includeGlob &&\n !micromatch.isMatch(path.basename(fp), includeGlob)\n ) {\n continue;\n }\n\n // Check file size\n const stat = await fs.stat(fp);\n if (stat.size > this.maxFileSizeBytes) {\n continue;\n }\n\n // Read and search\n const content = await fs.readFile(fp, \"utf-8\");\n const lines = content.split(\"\\n\");\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (regex.test(line)) {\n let virtPath: string;\n if (this.virtualMode) {\n try {\n const relative = path.relative(this.cwd, fp);\n if (relative.startsWith(\"..\")) continue;\n const normalizedRelative = relative.split(path.sep).join(\"/\");\n virtPath = \"/\" + normalizedRelative;\n } catch {\n continue;\n }\n } else {\n virtPath = fp;\n }\n\n if (!results[virtPath]) {\n results[virtPath] = [];\n }\n results[virtPath].push([i + 1, line]);\n }\n }\n } catch {\n // Skip files we can't read\n continue;\n }\n }\n\n return results;\n }\n\n /**\n * Structured glob matching returning FileInfo objects.\n */\n async globInfo(\n pattern: string,\n searchPath: string = \"/\",\n ): Promise<FileInfo[]> {\n if (pattern.startsWith(\"/\")) {\n pattern = pattern.substring(1);\n }\n\n const resolvedSearchPath =\n searchPath === \"/\" ? this.cwd : this.resolvePath(searchPath);\n\n try {\n const stat = await fs.stat(resolvedSearchPath);\n if (!stat.isDirectory()) {\n return [];\n }\n } catch {\n return [];\n }\n\n const results: FileInfo[] = [];\n\n try {\n // Use fast-glob for pattern matching\n const matches = await fg(pattern, {\n cwd: resolvedSearchPath,\n absolute: true,\n onlyFiles: true,\n dot: true,\n });\n\n for (const matchedPath of matches) {\n try {\n const stat = await fs.stat(matchedPath);\n if (!stat.isFile()) continue;\n\n // Normalize fast-glob paths to platform separators\n // fast-glob returns forward slashes on all platforms, but we need\n // platform-native separators for path comparisons on Windows\n const normalizedPath = matchedPath.split(\"/\").join(path.sep);\n\n if (!this.virtualMode) {\n results.push({\n path: normalizedPath,\n is_dir: false,\n size: stat.size,\n modified_at: stat.mtime.toISOString(),\n });\n } else {\n const cwdStr = this.cwd.endsWith(path.sep)\n ? this.cwd\n : this.cwd + path.sep;\n let relativePath: string;\n\n if (normalizedPath.startsWith(cwdStr)) {\n relativePath = normalizedPath.substring(cwdStr.length);\n } else if (normalizedPath.startsWith(this.cwd)) {\n relativePath = normalizedPath\n .substring(this.cwd.length)\n .replace(/^[/\\\\]/, \"\");\n } else {\n relativePath = normalizedPath;\n }\n\n relativePath = relativePath.split(path.sep).join(\"/\");\n const virt = \"/\" + relativePath;\n results.push({\n path: virt,\n is_dir: false,\n size: stat.size,\n modified_at: stat.mtime.toISOString(),\n });\n }\n } catch {\n // Skip files we can't stat\n continue;\n }\n }\n } catch {\n // Ignore glob errors\n }\n\n results.sort((a, b) => a.path.localeCompare(b.path));\n return results;\n }\n\n /**\n * Upload multiple files to the filesystem.\n *\n * @param files - List of [path, content] tuples to upload\n * @returns List of FileUploadResponse objects, one per input file\n */\n async uploadFiles(\n files: Array<[string, Uint8Array]>,\n ): Promise<FileUploadResponse[]> {\n const responses: FileUploadResponse[] = [];\n\n for (const [filePath, content] of files) {\n try {\n const resolvedPath = this.resolvePath(filePath);\n\n // Ensure parent directory exists\n await fs.mkdir(path.dirname(resolvedPath), { recursive: true });\n\n // Write file\n await fs.writeFile(resolvedPath, content);\n responses.push({ path: filePath, error: null });\n } catch (e: any) {\n if (e.code === \"ENOENT\") {\n responses.push({ path: filePath, error: \"file_not_found\" });\n } else if (e.code === \"EACCES\") {\n responses.push({ path: filePath, error: \"permission_denied\" });\n } else if (e.code === \"EISDIR\") {\n responses.push({ path: filePath, error: \"is_directory\" });\n } else {\n responses.push({ path: filePath, error: \"invalid_path\" });\n }\n }\n }\n\n return responses;\n }\n\n /**\n * Download multiple files from the filesystem.\n *\n * @param paths - List of file paths to download\n * @returns List of FileDownloadResponse objects, one per input path\n */\n async downloadFiles(paths: string[]): Promise<FileDownloadResponse[]> {\n const responses: FileDownloadResponse[] = [];\n\n for (const filePath of paths) {\n try {\n const resolvedPath = this.resolvePath(filePath);\n const content = await fs.readFile(resolvedPath);\n responses.push({ path: filePath, content, error: null });\n } catch (e: any) {\n if (e.code === \"ENOENT\") {\n responses.push({\n path: filePath,\n content: null,\n error: \"file_not_found\",\n });\n } else if (e.code === \"EACCES\") {\n responses.push({\n path: filePath,\n content: null,\n error: \"permission_denied\",\n });\n } else if (e.code === \"EISDIR\") {\n responses.push({\n path: filePath,\n content: null,\n error: \"is_directory\",\n });\n } else {\n responses.push({\n path: filePath,\n content: null,\n error: \"invalid_path\",\n });\n }\n }\n }\n\n return responses;\n }\n}\n","/**\n * CompositeBackend: Route operations to different backends based on path prefix.\n */\n\nimport type {\n BackendProtocol,\n EditResult,\n ExecuteResponse,\n FileData,\n FileDownloadResponse,\n FileInfo,\n FileUploadResponse,\n GrepMatch,\n WriteResult,\n} from \"./protocol.js\";\nimport { isSandboxBackend } from \"./protocol.js\";\n\n/**\n * Backend that routes file operations to different backends based on path prefix.\n *\n * This enables hybrid storage strategies like:\n * - `/memories/` → StoreBackend (persistent, cross-thread)\n * - Everything else → StateBackend (ephemeral, per-thread)\n *\n * The CompositeBackend handles path prefix stripping/re-adding transparently.\n */\nexport class CompositeBackend implements BackendProtocol {\n private default: BackendProtocol;\n private routes: Record<string, BackendProtocol>;\n private sortedRoutes: Array<[string, BackendProtocol]>;\n\n constructor(\n defaultBackend: BackendProtocol,\n routes: Record<string, BackendProtocol>,\n ) {\n this.default = defaultBackend;\n this.routes = routes;\n\n // Sort routes by length (longest first) for correct prefix matching\n this.sortedRoutes = Object.entries(routes).sort(\n (a, b) => b[0].length - a[0].length,\n );\n }\n\n /**\n * Determine which backend handles this key and strip prefix.\n *\n * @param key - Original file path\n * @returns Tuple of [backend, stripped_key] where stripped_key has the route\n * prefix removed (but keeps leading slash).\n */\n private getBackendAndKey(key: string): [BackendProtocol, string] {\n // Check routes in order of length (longest first)\n for (const [prefix, backend] of this.sortedRoutes) {\n if (key.startsWith(prefix)) {\n // Strip full prefix and ensure a leading slash remains\n // e.g., \"/memories/notes.txt\" → \"/notes.txt\"; \"/memories/\" → \"/\"\n const suffix = key.substring(prefix.length);\n const strippedKey = suffix ? \"/\" + suffix : \"/\";\n return [backend, strippedKey];\n }\n }\n\n return [this.default, key];\n }\n\n /**\n * List files and directories in the specified directory (non-recursive).\n *\n * @param path - Absolute path to directory\n * @returns List of FileInfo objects with route prefixes added, for files and directories\n * directly in the directory. Directories have a trailing / in their path and is_dir=true.\n */\n async lsInfo(path: string): Promise<FileInfo[]> {\n // Check if path matches a specific route\n for (const [routePrefix, backend] of this.sortedRoutes) {\n if (path.startsWith(routePrefix.replace(/\\/$/, \"\"))) {\n // Query only the matching routed backend\n const suffix = path.substring(routePrefix.length);\n const searchPath = suffix ? \"/\" + suffix : \"/\";\n const infos = await backend.lsInfo(searchPath);\n\n // Add route prefix back to paths\n const prefixed: FileInfo[] = [];\n for (const fi of infos) {\n prefixed.push({\n ...fi,\n path: routePrefix.slice(0, -1) + fi.path,\n });\n }\n return prefixed;\n }\n }\n\n // At root, aggregate default and all routed backends\n if (path === \"/\") {\n const results: FileInfo[] = [];\n const defaultInfos = await this.default.lsInfo(path);\n results.push(...defaultInfos);\n\n // Add the route itself as a directory (e.g., /memories/)\n for (const [routePrefix] of this.sortedRoutes) {\n results.push({\n path: routePrefix,\n is_dir: true,\n size: 0,\n modified_at: \"\",\n });\n }\n\n results.sort((a, b) => a.path.localeCompare(b.path));\n return results;\n }\n\n // Path doesn't match a route: query only default backend\n return await this.default.lsInfo(path);\n }\n\n /**\n * Read file content, routing to appropriate backend.\n *\n * @param filePath - Absolute file path\n * @param offset - Line offset to start reading from (0-indexed)\n * @param limit - Maximum number of lines to read\n * @returns Formatted file content with line numbers, or error message\n */\n async read(\n filePath: string,\n offset: number = 0,\n limit: number = 500,\n ): Promise<string> {\n const [backend, strippedKey] = this.getBackendAndKey(filePath);\n return await backend.read(strippedKey, offset, limit);\n }\n\n /**\n * Read file content as raw FileData.\n *\n * @param filePath - Absolute file path\n * @returns Raw file content as FileData\n */\n async readRaw(filePath: string): Promise<FileData> {\n const [backend, strippedKey] = this.getBackendAndKey(filePath);\n return await backend.readRaw(strippedKey);\n }\n\n /**\n * Structured search results or error string for invalid input.\n */\n async grepRaw(\n pattern: string,\n path: string = \"/\",\n glob: string | null = null,\n ): Promise<GrepMatch[] | string> {\n // If path targets a specific route, search only that backend\n for (const [routePrefix, backend] of this.sortedRoutes) {\n if (path.startsWith(routePrefix.replace(/\\/$/, \"\"))) {\n const searchPath = path.substring(routePrefix.length - 1);\n const raw = await backend.grepRaw(pattern, searchPath || \"/\", glob);\n\n if (typeof raw === \"string\") {\n return raw;\n }\n\n // Add route prefix back\n return raw.map((m) => ({\n ...m,\n path: routePrefix.slice(0, -1) + m.path,\n }));\n }\n }\n\n // Otherwise, search default and all routed backends and merge\n const allMatches: GrepMatch[] = [];\n const rawDefault = await this.default.grepRaw(pattern, path, glob);\n\n if (typeof rawDefault === \"string\") {\n return rawDefault;\n }\n\n allMatches.push(...rawDefault);\n\n // Search all routes\n for (const [routePrefix, backend] of Object.entries(this.routes)) {\n const raw = await backend.grepRaw(pattern, \"/\", glob);\n\n if (typeof raw === \"string\") {\n return raw;\n }\n\n // Add route prefix back\n allMatches.push(\n ...raw.map((m) => ({\n ...m,\n path: routePrefix.slice(0, -1) + m.path,\n })),\n );\n }\n\n return allMatches;\n }\n\n /**\n * Structured glob matching returning FileInfo objects.\n */\n async globInfo(pattern: string, path: string = \"/\"): Promise<FileInfo[]> {\n const results: FileInfo[] = [];\n\n // Route based on path, not pattern\n for (const [routePrefix, backend] of this.sortedRoutes) {\n if (path.startsWith(routePrefix.replace(/\\/$/, \"\"))) {\n const searchPath = path.substring(routePrefix.length - 1);\n const infos = await backend.globInfo(pattern, searchPath || \"/\");\n\n // Add route prefix back\n return infos.map((fi) => ({\n ...fi,\n path: routePrefix.slice(0, -1) + fi.path,\n }));\n }\n }\n\n // Path doesn't match any specific route - search default backend AND all routed backends\n const defaultInfos = await this.default.globInfo(pattern, path);\n results.push(...defaultInfos);\n\n for (const [routePrefix, backend] of Object.entries(this.routes)) {\n const infos = await backend.globInfo(pattern, \"/\");\n results.push(\n ...infos.map((fi) => ({\n ...fi,\n path: routePrefix.slice(0, -1) + fi.path,\n })),\n );\n }\n\n // Deterministic ordering\n results.sort((a, b) => a.path.localeCompare(b.path));\n return results;\n }\n\n /**\n * Create a new file, routing to appropriate backend.\n *\n * @param filePath - Absolute file path\n * @param content - File content as string\n * @returns WriteResult with path or error\n */\n async write(filePath: string, content: string): Promise<WriteResult> {\n const [backend, strippedKey] = this.getBackendAndKey(filePath);\n return await backend.write(strippedKey, content);\n }\n\n /**\n * Edit a file, routing to appropriate backend.\n *\n * @param filePath - Absolute file path\n * @param oldString - String to find and replace\n * @param newString - Replacement string\n * @param replaceAll - If true, replace all occurrences\n * @returns EditResult with path, occurrences, or error\n */\n async edit(\n filePath: string,\n oldString: string,\n newString: string,\n replaceAll: boolean = false,\n ): Promise<EditResult> {\n const [backend, strippedKey] = this.getBackendAndKey(filePath);\n return await backend.edit(strippedKey, oldString, newString, replaceAll);\n }\n\n /**\n * Execute a command via the default backend.\n * Execution is not path-specific, so it always delegates to the default backend.\n *\n * @param command - Full shell command string to execute\n * @returns ExecuteResponse with combined output, exit code, and truncation flag\n * @throws Error if the default backend doesn't support command execution\n */\n execute(command: string): Promise<ExecuteResponse> {\n if (!isSandboxBackend(this.default)) {\n throw new Error(\n \"Default backend doesn't support command execution (SandboxBackendProtocol). \" +\n \"To enable execution, provide a default backend that implements SandboxBackendProtocol.\",\n );\n }\n return Promise.resolve(this.default.execute(command));\n }\n\n /**\n * Upload multiple files, batching by backend for efficiency.\n *\n * @param files - List of [path, content] tuples to upload\n * @returns List of FileUploadResponse objects, one per input file\n */\n async uploadFiles(\n files: Array<[string, Uint8Array]>,\n ): Promise<FileUploadResponse[]> {\n const results: Array<FileUploadResponse | null> = Array.from(\n { length: files.length },\n () => null,\n );\n const batchesByBackend = new Map<\n BackendProtocol,\n Array<{ idx: number; path: string; content: Uint8Array }>\n >();\n\n for (let idx = 0; idx < files.length; idx++) {\n const [path, content] = files[idx];\n const [backend, strippedPath] = this.getBackendAndKey(path);\n\n if (!batchesByBackend.has(backend)) {\n batchesByBackend.set(backend, []);\n }\n batchesByBackend.get(backend)!.push({ idx, path: strippedPath, content });\n }\n\n for (const [backend, batch] of batchesByBackend) {\n if (!backend.uploadFiles) {\n throw new Error(\"Backend does not support uploadFiles\");\n }\n\n const batchFiles = batch.map(\n (b) => [b.path, b.content] as [string, Uint8Array],\n );\n const batchResponses = await backend.uploadFiles(batchFiles);\n\n for (let i = 0; i < batch.length; i++) {\n const originalIdx = batch[i].idx;\n results[originalIdx] = {\n path: files[originalIdx][0], // Original path\n error: batchResponses[i]?.error ?? null,\n };\n }\n }\n\n return results as FileUploadResponse[];\n }\n\n /**\n * Download multiple files, batching by backend for efficiency.\n *\n * @param paths - List of file paths to download\n * @returns List of FileDownloadResponse objects, one per input path\n */\n async downloadFiles(paths: string[]): Promise<FileDownloadResponse[]> {\n const results: Array<FileDownloadResponse | null> = Array.from(\n { length: paths.length },\n () => null,\n );\n const batchesByBackend = new Map<\n BackendProtocol,\n Array<{ idx: number; path: string }>\n >();\n\n for (let idx = 0; idx < paths.length; idx++) {\n const path = paths[idx];\n const [backend, strippedPath] = this.getBackendAndKey(path);\n\n if (!batchesByBackend.has(backend)) {\n batchesByBackend.set(backend, []);\n }\n batchesByBackend.get(backend)!.push({ idx, path: strippedPath });\n }\n\n for (const [backend, batch] of batchesByBackend) {\n if (!backend.downloadFiles) {\n throw new Error(\"Backend does not support downloadFiles\");\n }\n\n const batchPaths = batch.map((b) => b.path);\n const batchResponses = await backend.downloadFiles(batchPaths);\n\n for (let i = 0; i < batch.length; i++) {\n const originalIdx = batch[i].idx;\n results[originalIdx] = {\n path: paths[originalIdx], // Original path\n content: batchResponses[i]?.content ?? null,\n error: batchResponses[i]?.error ?? null,\n };\n }\n }\n\n return results as FileDownloadResponse[];\n }\n}\n","/**\n * BaseSandbox: Abstract base class for sandbox backends with command execution.\n *\n * This class provides default implementations for all SandboxBackendProtocol\n * methods using shell commands executed via execute(). Concrete implementations\n * only need to implement the execute() method.\n *\n * Requires Node.js 20+ on the sandbox host.\n */\n\nimport type {\n EditResult,\n ExecuteResponse,\n FileData,\n FileDownloadResponse,\n FileInfo,\n FileUploadResponse,\n GrepMatch,\n MaybePromise,\n SandboxBackendProtocol,\n WriteResult,\n} from \"./protocol.js\";\n\n/**\n * Node.js command template for glob operations.\n * Uses web-standard atob() for base64 decoding.\n */\nfunction buildGlobCommand(searchPath: string, pattern: string): string {\n const pathB64 = btoa(searchPath);\n const patternB64 = btoa(pattern);\n\n return `node -e \"\nconst fs = require('fs');\nconst path = require('path');\n\nconst searchPath = atob('${pathB64}');\nconst pattern = atob('${patternB64}');\n\nfunction globMatch(relativePath, pattern) {\n const regexPattern = pattern\n .replace(/\\\\*\\\\*/g, '<<<GLOBSTAR>>>')\n .replace(/\\\\*/g, '[^/]*')\n .replace(/\\\\?/g, '.')\n .replace(/<<<GLOBSTAR>>>/g, '.*');\n return new RegExp('^' + regexPattern + '$').test(relativePath);\n}\n\nfunction walkDir(dir, baseDir, results) {\n try {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n const relativePath = path.relative(baseDir, fullPath);\n if (entry.isDirectory()) {\n walkDir(fullPath, baseDir, results);\n } else if (globMatch(relativePath, pattern)) {\n const stat = fs.statSync(fullPath);\n console.log(JSON.stringify({\n path: relativePath,\n size: stat.size,\n mtime: stat.mtimeMs,\n isDir: false\n }));\n }\n }\n } catch (e) {\n // Silent failure for non-existent paths\n }\n}\n\ntry {\n process.chdir(searchPath);\n walkDir('.', '.', []);\n} catch (e) {\n // Silent failure for non-existent paths\n}\n\"`;\n}\n\n/**\n * Node.js command template for listing directory contents.\n */\nfunction buildLsCommand(dirPath: string): string {\n const pathB64 = btoa(dirPath);\n\n return `node -e \"\nconst fs = require('fs');\nconst path = require('path');\n\nconst dirPath = atob('${pathB64}');\n\ntry {\n const entries = fs.readdirSync(dirPath, { withFileTypes: true });\n for (const entry of entries) {\n const fullPath = path.join(dirPath, entry.name);\n const stat = fs.statSync(fullPath);\n console.log(JSON.stringify({\n path: entry.isDirectory() ? fullPath + '/' : fullPath,\n size: stat.size,\n mtime: stat.mtimeMs,\n isDir: entry.isDirectory()\n }));\n }\n} catch (e) {\n console.error('Error: ' + e.message);\n process.exit(1);\n}\n\"`;\n}\n\n/**\n * Node.js command template for reading files.\n */\nfunction buildReadCommand(\n filePath: string,\n offset: number,\n limit: number,\n): string {\n const pathB64 = btoa(filePath);\n // Coerce offset and limit to safe non-negative integers before embedding in the shell command.\n const safeOffset =\n Number.isFinite(offset) && offset > 0 ? Math.floor(offset) : 0;\n const safeLimit =\n Number.isFinite(limit) && limit > 0 && limit < Number.MAX_SAFE_INTEGER\n ? Math.floor(limit)\n : 0;\n\n return `node -e \"\nconst fs = require('fs');\n\nconst filePath = atob('${pathB64}');\nconst offset = ${safeOffset};\nconst limit = ${safeLimit};\n\nif (!fs.existsSync(filePath)) {\n console.log('Error: File not found');\n process.exit(1);\n}\n\nconst stat = fs.statSync(filePath);\nif (stat.size === 0) {\n console.log('System reminder: File exists but has empty contents');\n process.exit(0);\n}\n\nconst content = fs.readFileSync(filePath, 'utf-8');\nconst lines = content.split('\\\\n');\nconst selected = lines.slice(offset, offset + limit);\n\nfor (let i = 0; i < selected.length; i++) {\n const lineNum = offset + i + 1;\n console.log(String(lineNum).padStart(6) + '\\\\t' + selected[i]);\n}\n\"`;\n}\n\n/**\n * Node.js command template for writing files.\n */\nfunction buildWriteCommand(filePath: string, content: string): string {\n const pathB64 = btoa(filePath);\n const contentB64 = btoa(content);\n\n return `node -e \"\nconst fs = require('fs');\nconst path = require('path');\n\nconst filePath = atob('${pathB64}');\nconst content = atob('${contentB64}');\n\nif (fs.existsSync(filePath)) {\n console.error('Error: File already exists');\n process.exit(1);\n}\n\nconst parentDir = path.dirname(filePath) || '.';\nfs.mkdirSync(parentDir, { recursive: true });\n\nfs.writeFileSync(filePath, content, 'utf-8');\nconsole.log('OK');\n\"`;\n}\n\n/**\n * Node.js command template for editing files.\n */\nfunction buildEditCommand(\n filePath: string,\n oldStr: string,\n newStr: string,\n replaceAll: boolean,\n): string {\n const pathB64 = btoa(filePath);\n const oldB64 = btoa(oldStr);\n const newB64 = btoa(newStr);\n\n return `node -e \"\nconst fs = require('fs');\n\nconst filePath = atob('${pathB64}');\nconst oldStr = atob('${oldB64}');\nconst newStr = atob('${newB64}');\nconst replaceAll = ${Boolean(replaceAll)};\n\nlet text;\ntry {\n text = fs.readFileSync(filePath, 'utf-8');\n} catch (e) {\n process.exit(3);\n}\n\nconst count = text.split(oldStr).length - 1;\n\nif (count === 0) {\n process.exit(1);\n}\nif (count > 1 && !replaceAll) {\n process.exit(2);\n}\n\nconst result = text.split(oldStr).join(newStr);\nfs.writeFileSync(filePath, result, 'utf-8');\nconsole.log(count);\n\"`;\n}\n\n/**\n * Node.js command template for grep operations.\n */\nfunction buildGrepCommand(\n pattern: string,\n searchPath: string,\n globPattern: string | null,\n): string {\n const patternB64 = btoa(pattern);\n const pathB64 = btoa(searchPath);\n const globB64 = globPattern ? btoa(globPattern) : \"\";\n\n return `node -e \"\nconst fs = require('fs');\nconst path = require('path');\n\nconst pattern = atob('${patternB64}');\nconst searchPath = atob('${pathB64}');\nconst globPattern = ${globPattern ? `atob('${globB64}')` : \"null\"};\n\nlet regex;\ntry {\n regex = new RegExp(pattern);\n} catch (e) {\n console.error('Invalid regex: ' + e.message);\n process.exit(1);\n}\n\nfunction globMatch(filePath, pattern) {\n if (!pattern) return true;\n const regexPattern = pattern\n .replace(/\\\\*\\\\*/g, '<<<GLOBSTAR>>>')\n .replace(/\\\\*/g, '[^/]*')\n .replace(/\\\\?/g, '.')\n .replace(/<<<GLOBSTAR>>>/g, '.*');\n return new RegExp('^' + regexPattern + '$').test(filePath);\n}\n\nfunction walkDir(dir, results) {\n try {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n walkDir(fullPath, results);\n } else {\n const relativePath = path.relative(searchPath, fullPath);\n if (globMatch(relativePath, globPattern)) {\n try {\n const content = fs.readFileSync(fullPath, 'utf-8');\n const lines = content.split('\\\\n');\n for (let i = 0; i < lines.length; i++) {\n if (regex.test(lines[i])) {\n console.log(JSON.stringify({\n path: fullPath,\n line: i + 1,\n text: lines[i]\n }));\n }\n }\n } catch (e) {\n // Skip unreadable files\n }\n }\n }\n }\n } catch (e) {\n // Skip unreadable directories\n }\n}\n\ntry {\n walkDir(searchPath, []);\n} catch (e) {\n // Silent failure\n}\n\"`;\n}\n\n/**\n * Base sandbox implementation with execute() as the only abstract method.\n *\n * This class provides default implementations for all SandboxBackendProtocol\n * methods using shell commands executed via execute(). Concrete implementations\n * only need to implement the execute() method.\n *\n * Requires Node.js 20+ on the sandbox host.\n */\nexport abstract class BaseSandbox implements SandboxBackendProtocol {\n /** Unique identifier for the sandbox backend */\n abstract readonly id: string;\n\n /**\n * Execute a command in the sandbox.\n * This is the only method concrete implementations must provide.\n */\n abstract execute(command: string): MaybePromise<ExecuteResponse>;\n\n /**\n * Upload multiple files to the sandbox.\n * Implementations must support partial success.\n */\n abstract uploadFiles(\n files: Array<[string, Uint8Array]>,\n ): MaybePromise<FileUploadResponse[]>;\n\n /**\n * Download multiple files from the sandbox.\n * Implementations must support partial success.\n */\n abstract downloadFiles(paths: string[]): MaybePromise<FileDownloadResponse[]>;\n\n /**\n * List files and directories in the specified directory (non-recursive).\n *\n * @param path - Absolute path to directory\n * @returns List of FileInfo objects for files and directories directly in the directory.\n */\n async lsInfo(path: string): Promise<FileInfo[]> {\n const command = buildLsCommand(path);\n const result = await this.execute(command);\n\n if (result.exitCode !== 0) {\n return [];\n }\n\n const infos: FileInfo[] = [];\n const lines = result.output.trim().split(\"\\n\").filter(Boolean);\n\n for (const line of lines) {\n try {\n const parsed = JSON.parse(line);\n infos.push({\n path: parsed.path,\n is_dir: parsed.isDir,\n size: parsed.size,\n modified_at: parsed.mtime\n ? new Date(parsed.mtime).toISOString()\n : undefined,\n });\n } catch {\n // Skip invalid JSON lines\n }\n }\n\n return infos;\n }\n\n /**\n * Read file content with line numbers.\n *\n * @param filePath - Absolute file path\n * @param offset - Line offset to start reading from (0-indexed)\n * @param limit - Maximum number of lines to read\n * @returns Formatted file content with line numbers, or error message\n */\n async read(\n filePath: string,\n offset: number = 0,\n limit: number = 500,\n ): Promise<string> {\n const command = buildReadCommand(filePath, offset, limit);\n const result = await this.execute(command);\n\n if (result.exitCode !== 0) {\n return `Error: File '${filePath}' not found`;\n }\n\n return result.output;\n }\n\n /**\n * Read file content as raw FileData.\n *\n * @param filePath - Absolute file path\n * @returns Raw file content as FileData\n */\n async readRaw(filePath: string): Promise<FileData> {\n const command = buildReadCommand(filePath, 0, Number.MAX_SAFE_INTEGER);\n const result = await this.execute(command);\n\n if (result.exitCode !== 0) {\n throw new Error(`File '${filePath}' not found`);\n }\n\n // Parse the line-numbered output back to content\n const lines: string[] = [];\n for (const line of result.output.split(\"\\n\")) {\n // Format is \" 123\\tContent\"\n const tabIndex = line.indexOf(\"\\t\");\n if (tabIndex !== -1) {\n lines.push(line.substring(tabIndex + 1));\n }\n }\n\n const now = new Date().toISOString();\n return {\n content: lines,\n created_at: now,\n modified_at: now,\n };\n }\n\n /**\n * Structured search results or error string for invalid input.\n */\n async grepRaw(\n pattern: string,\n path: string = \"/\",\n glob: string | null = null,\n ): Promise<GrepMatch[] | string> {\n const command = buildGrepCommand(pattern, path, glob);\n const result = await this.execute(command);\n\n if (result.exitCode === 1) {\n // Check if it's a regex error\n if (result.output.includes(\"Invalid regex:\")) {\n return result.output.trim();\n }\n }\n\n const matches: GrepMatch[] = [];\n const lines = result.output.trim().split(\"\\n\").filter(Boolean);\n\n for (const line of lines) {\n try {\n const parsed = JSON.parse(line);\n matches.push({\n path: parsed.path,\n line: parsed.line,\n text: parsed.text,\n });\n } catch {\n // Skip invalid JSON lines\n }\n }\n\n return matches;\n }\n\n /**\n * Structured glob matching returning FileInfo objects.\n */\n async globInfo(pattern: string, path: string = \"/\"): Promise<FileInfo[]> {\n const command = buildGlobCommand(path, pattern);\n const result = await this.execute(command);\n\n const infos: FileInfo[] = [];\n const lines = result.output.trim().split(\"\\n\").filter(Boolean);\n\n for (const line of lines) {\n try {\n const parsed = JSON.parse(line);\n infos.push({\n path: parsed.path,\n is_dir: parsed.isDir,\n size: parsed.size,\n modified_at: parsed.mtime\n ? new Date(parsed.mtime).toISOString()\n : undefined,\n });\n } catch {\n // Skip invalid JSON lines\n }\n }\n\n return infos;\n }\n\n /**\n * Create a new file with content.\n */\n async write(filePath: string, content: string): Promise<WriteResult> {\n const command = buildWriteCommand(filePath, content);\n const result = await this.execute(command);\n\n if (result.exitCode !== 0) {\n return {\n error: `Cannot write to ${filePath} because it already exists. Read and then make an edit, or write to a new path.`,\n };\n }\n\n return { path: filePath, filesUpdate: null };\n }\n\n /**\n * Edit a file by replacing string occurrences.\n */\n async edit(\n filePath: string,\n oldString: string,\n newString: string,\n replaceAll: boolean = false,\n ): Promise<EditResult> {\n const command = buildEditCommand(\n filePath,\n oldString,\n newString,\n replaceAll,\n );\n const result = await this.execute(command);\n\n switch (result.exitCode) {\n case 0: {\n const occurrences = parseInt(result.output.trim(), 10) || 1;\n return { path: filePath, filesUpdate: null, occurrences };\n }\n case 1:\n return { error: `String not found in file '${filePath}'` };\n case 2:\n return {\n error: `Multiple occurrences found in '${filePath}'. Use replaceAll=true to replace all.`,\n };\n case 3:\n return { error: `Error: File '${filePath}' not found` };\n default:\n return { error: `Unknown error editing file '${filePath}'` };\n }\n }\n}\n","import {\n createAgent,\n humanInTheLoopMiddleware,\n anthropicPromptCachingMiddleware,\n todoListMiddleware,\n summarizationMiddleware,\n SystemMessage,\n type AgentMiddleware,\n type ResponseFormat,\n} from \"langchain\";\nimport type {\n ClientTool,\n ServerTool,\n StructuredTool,\n} from \"@langchain/core/tools\";\nimport type { BaseStore } from \"@langchain/langgraph-checkpoint\";\n\nimport {\n createFilesystemMiddleware,\n createSubAgentMiddleware,\n createPatchToolCallsMiddleware,\n createMemoryMiddleware,\n createSkillsMiddleware,\n type SubAgent,\n} from \"./middleware/index.js\";\nimport { StateBackend } from \"./backends/index.js\";\nimport { InteropZodObject } from \"@langchain/core/utils/types\";\nimport { CompiledSubAgent } from \"./middleware/subagents.js\";\nimport type {\n CreateDeepAgentParams,\n DeepAgent,\n DeepAgentTypeConfig,\n FlattenSubAgentMiddleware,\n} from \"./types.js\";\n\n/**\n * required for type inference\n */\nimport type * as _messages from \"@langchain/core/messages\";\nimport type * as _Command from \"@langchain/langgraph\";\n\nconst BASE_PROMPT = `In order to complete the objective that the user asks of you, you have access to a number of standard tools.`;\n\n/**\n * Create a Deep Agent with middleware-based architecture.\n *\n * Matches Python's create_deep_agent function, using middleware for all features:\n * - Todo management (todoListMiddleware)\n * - Filesystem tools (createFilesystemMiddleware)\n * - Subagent delegation (createSubAgentMiddleware)\n * - Conversation summarization (summarizationMiddleware)\n * - Prompt caching (anthropicPromptCachingMiddleware)\n * - Tool call patching (createPatchToolCallsMiddleware)\n * - Human-in-the-loop (humanInTheLoopMiddleware) - optional\n *\n * @param params Configuration parameters for the agent\n * @returns ReactAgent instance ready for invocation with properly inferred state types\n *\n * @example\n * ```typescript\n * // Middleware with custom state\n * const ResearchMiddleware = createMiddleware({\n * name: \"ResearchMiddleware\",\n * stateSchema: z.object({ research: z.string().default(\"\") }),\n * });\n *\n * const agent = createDeepAgent({\n * middleware: [ResearchMiddleware],\n * });\n *\n * const result = await agent.invoke({ messages: [...] });\n * // result.research is properly typed as string\n * ```\n */\nexport function createDeepAgent<\n TResponse extends ResponseFormat = ResponseFormat,\n ContextSchema extends InteropZodObject = InteropZodObject,\n const TMiddleware extends readonly AgentMiddleware[] = readonly [],\n const TSubagents extends readonly (SubAgent | CompiledSubAgent)[] =\n readonly [],\n const TTools extends readonly (ClientTool | ServerTool)[] = readonly [],\n>(\n params: CreateDeepAgentParams<\n TResponse,\n ContextSchema,\n TMiddleware,\n TSubagents,\n TTools\n > = {} as CreateDeepAgentParams<\n TResponse,\n ContextSchema,\n TMiddleware,\n TSubagents,\n TTools\n >,\n) {\n const {\n model = \"claude-sonnet-4-5-20250929\",\n tools = [],\n systemPrompt,\n middleware: customMiddleware = [],\n subagents = [],\n responseFormat,\n contextSchema,\n checkpointer,\n store,\n backend,\n interruptOn,\n name,\n memory,\n skills,\n } = params;\n\n // Combine system prompt with base prompt like Python implementation\n const finalSystemPrompt = systemPrompt\n ? typeof systemPrompt === \"string\"\n ? `${systemPrompt}\\n\\n${BASE_PROMPT}`\n : new SystemMessage({\n content: [\n {\n type: \"text\",\n text: BASE_PROMPT,\n },\n ...(typeof systemPrompt.content === \"string\"\n ? [{ type: \"text\", text: systemPrompt.content }]\n : systemPrompt.content),\n ],\n })\n : BASE_PROMPT;\n\n // Create backend configuration for filesystem middleware\n // If no backend is provided, use a factory that creates a StateBackend\n const filesystemBackend = backend\n ? backend\n : (config: { state: unknown; store?: BaseStore }) =>\n new StateBackend(config);\n\n // Add skills middleware if skill sources provided\n const skillsMiddleware =\n skills != null && skills.length > 0\n ? [\n createSkillsMiddleware({\n backend: filesystemBackend,\n sources: skills,\n }),\n ]\n : [];\n\n // Built-in middleware array\n const builtInMiddleware = [\n // Provides todo list management capabilities for tracking tasks\n todoListMiddleware(),\n // Add skills middleware if skill sources provided\n ...skillsMiddleware,\n // Enables filesystem operations and optional long-term memory storage\n createFilesystemMiddleware({ backend: filesystemBackend }),\n // Enables delegation to specialized subagents for complex tasks\n createSubAgentMiddleware({\n defaultModel: model,\n defaultTools: tools as StructuredTool[],\n defaultMiddleware: [\n // Subagent middleware: Todo list management\n todoListMiddleware(),\n // Subagent middleware: Skills (if provided)\n ...skillsMiddleware,\n // Subagent middleware: Filesystem operations\n createFilesystemMiddleware({\n backend: filesystemBackend,\n }),\n // Subagent middleware: Automatic conversation summarization when token limits are approached\n summarizationMiddleware({\n model,\n trigger: { tokens: 170_000 },\n keep: { messages: 6 },\n }),\n // Subagent middleware: Anthropic prompt caching for improved performance\n anthropicPromptCachingMiddleware({\n unsupportedModelBehavior: \"ignore\",\n }),\n // Subagent middleware: Patches tool calls for compatibility\n createPatchToolCallsMiddleware(),\n ],\n defaultInterruptOn: interruptOn,\n subagents: subagents as unknown as (SubAgent | CompiledSubAgent)[],\n generalPurposeAgent: true,\n }),\n // Automatically summarizes conversation history when token limits are approached\n summarizationMiddleware({\n model,\n trigger: { tokens: 170_000 },\n keep: { messages: 6 },\n }),\n // Enables Anthropic prompt caching for improved performance and reduced costs\n anthropicPromptCachingMiddleware({\n unsupportedModelBehavior: \"ignore\",\n }),\n // Patches tool calls to ensure compatibility across different model providers\n createPatchToolCallsMiddleware(),\n // Add memory middleware if memory sources provided\n ...(memory != null && memory.length > 0\n ? [\n createMemoryMiddleware({\n backend: filesystemBackend,\n sources: memory,\n }),\n ]\n : []),\n ] as const;\n\n // Add human-in-the-loop middleware if interrupt config provided\n if (interruptOn) {\n // builtInMiddleware is typed as readonly to enable type inference\n // however, we need to push to it to add the middleware, so let's ignore the type error\n // @ts-expect-error - builtInMiddleware is readonly\n builtInMiddleware.push(humanInTheLoopMiddleware({ interruptOn }));\n }\n\n // Combine built-in middleware with custom middleware\n // The custom middleware is typed as TMiddleware to preserve type information\n const allMiddleware = [\n ...builtInMiddleware,\n ...(customMiddleware as unknown as TMiddleware),\n ] as const;\n\n // Note: Recursion limit of 1000 (matching Python behavior) should be passed\n // at invocation time: agent.invoke(input, { recursionLimit: 1000 })\n const agent = createAgent({\n model,\n systemPrompt: finalSystemPrompt,\n tools: tools as StructuredTool[],\n middleware: allMiddleware as unknown as AgentMiddleware[],\n responseFormat: responseFormat as ResponseFormat,\n contextSchema,\n checkpointer,\n store,\n name,\n });\n\n // Combine custom middleware with flattened subagent middleware for complete type inference\n // This ensures InferMiddlewareStates captures state from both sources\n type AllMiddleware = readonly [\n ...typeof builtInMiddleware,\n ...TMiddleware,\n ...FlattenSubAgentMiddleware<TSubagents>,\n ];\n\n // Return as DeepAgent with proper DeepAgentTypeConfig\n // - Response: TResponse (from responseFormat parameter)\n // - State: undefined (state comes from middleware)\n // - Context: ContextSchema\n // - Middleware: AllMiddleware (built-in + custom + subagent middleware for state inference)\n // - Tools: TTools\n // - Subagents: TSubagents (for type-safe streaming)\n return agent as unknown as DeepAgent<\n DeepAgentTypeConfig<\n TResponse,\n undefined,\n ContextSchema,\n AllMiddleware,\n TTools,\n TSubagents\n >\n >;\n}\n","/**\n * Configuration and settings for deepagents.\n *\n * Provides project detection, path management, and environment configuration\n * for skills and agent memory middleware.\n */\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport os from \"node:os\";\n\n/**\n * Options for creating a Settings instance.\n */\nexport interface SettingsOptions {\n /** Starting directory for project detection (defaults to cwd) */\n startPath?: string;\n}\n\n/**\n * Settings interface for project detection and path management.\n *\n * Provides access to:\n * - Project root detection (via .git directory)\n * - User-level deepagents directory (~/.deepagents)\n * - Agent-specific directories and files\n * - Skills directories (user and project level)\n */\nexport interface Settings {\n /** Detected project root directory, or null if not in a git project */\n readonly projectRoot: string | null;\n\n /** Base user-level .deepagents directory (~/.deepagents) */\n readonly userDeepagentsDir: string;\n\n /** Check if currently in a git project */\n readonly hasProject: boolean;\n\n /**\n * Get the agent directory path.\n * @param agentName - Name of the agent\n * @returns Path to ~/.deepagents/{agentName}\n * @throws Error if agent name is invalid\n */\n getAgentDir(agentName: string): string;\n\n /**\n * Ensure agent directory exists and return path.\n * @param agentName - Name of the agent\n * @returns Path to ~/.deepagents/{agentName}\n * @throws Error if agent name is invalid\n */\n ensureAgentDir(agentName: string): string;\n\n /**\n * Get user-level agent.md path for a specific agent.\n * @param agentName - Name of the agent\n * @returns Path to ~/.deepagents/{agentName}/agent.md\n */\n getUserAgentMdPath(agentName: string): string;\n\n /**\n * Get project-level agent.md path.\n * @returns Path to {projectRoot}/.deepagents/agent.md, or null if not in a project\n */\n getProjectAgentMdPath(): string | null;\n\n /**\n * Get user-level skills directory path for a specific agent.\n * @param agentName - Name of the agent\n * @returns Path to ~/.deepagents/{agentName}/skills/\n */\n getUserSkillsDir(agentName: string): string;\n\n /**\n * Ensure user-level skills directory exists and return path.\n * @param agentName - Name of the agent\n * @returns Path to ~/.deepagents/{agentName}/skills/\n */\n ensureUserSkillsDir(agentName: string): string;\n\n /**\n * Get project-level skills directory path.\n * @returns Path to {projectRoot}/.deepagents/skills/, or null if not in a project\n */\n getProjectSkillsDir(): string | null;\n\n /**\n * Ensure project-level skills directory exists and return path.\n * @returns Path to {projectRoot}/.deepagents/skills/, or null if not in a project\n */\n ensureProjectSkillsDir(): string | null;\n\n /**\n * Ensure project .deepagents directory exists.\n * @returns Path to {projectRoot}/.deepagents/, or null if not in a project\n */\n ensureProjectDeepagentsDir(): string | null;\n}\n\n/**\n * Find the project root by looking for .git directory.\n *\n * Walks up the directory tree from startPath (or cwd) looking for a .git\n * directory, which indicates the project root.\n *\n * @param startPath - Directory to start searching from. Defaults to current working directory.\n * @returns Path to the project root if found, null otherwise.\n */\nexport function findProjectRoot(startPath?: string): string | null {\n let current = path.resolve(startPath || process.cwd());\n\n // Walk up the directory tree\n while (current !== path.dirname(current)) {\n const gitDir = path.join(current, \".git\");\n if (fs.existsSync(gitDir)) {\n return current;\n }\n current = path.dirname(current);\n }\n\n // Check root directory as well\n const rootGitDir = path.join(current, \".git\");\n if (fs.existsSync(rootGitDir)) {\n return current;\n }\n\n return null;\n}\n\n/**\n * Validate agent name to prevent invalid filesystem paths and security issues.\n *\n * @param agentName - The agent name to validate\n * @returns True if valid, false otherwise\n */\nfunction isValidAgentName(agentName: string): boolean {\n if (!agentName || !agentName.trim()) {\n return false;\n }\n // Allow only alphanumeric, hyphens, underscores, and whitespace\n return /^[a-zA-Z0-9_\\-\\s]+$/.test(agentName);\n}\n\n/**\n * Create a Settings instance with detected environment.\n *\n * @param options - Configuration options\n * @returns Settings instance with project detection and path management\n */\nexport function createSettings(options: SettingsOptions = {}): Settings {\n const projectRoot = findProjectRoot(options.startPath);\n const userDeepagentsDir = path.join(os.homedir(), \".deepagents\");\n\n return {\n projectRoot,\n userDeepagentsDir,\n hasProject: projectRoot !== null,\n\n getAgentDir(agentName: string): string {\n if (!isValidAgentName(agentName)) {\n throw new Error(\n `Invalid agent name: ${JSON.stringify(agentName)}. ` +\n \"Agent names can only contain letters, numbers, hyphens, underscores, and spaces.\",\n );\n }\n return path.join(userDeepagentsDir, agentName);\n },\n\n ensureAgentDir(agentName: string): string {\n const agentDir = this.getAgentDir(agentName);\n fs.mkdirSync(agentDir, { recursive: true });\n return agentDir;\n },\n\n getUserAgentMdPath(agentName: string): string {\n return path.join(this.getAgentDir(agentName), \"agent.md\");\n },\n\n getProjectAgentMdPath(): string | null {\n if (!projectRoot) {\n return null;\n }\n return path.join(projectRoot, \".deepagents\", \"agent.md\");\n },\n\n getUserSkillsDir(agentName: string): string {\n return path.join(this.getAgentDir(agentName), \"skills\");\n },\n\n ensureUserSkillsDir(agentName: string): string {\n const skillsDir = this.getUserSkillsDir(agentName);\n fs.mkdirSync(skillsDir, { recursive: true });\n return skillsDir;\n },\n\n getProjectSkillsDir(): string | null {\n if (!projectRoot) {\n return null;\n }\n return path.join(projectRoot, \".deepagents\", \"skills\");\n },\n\n ensureProjectSkillsDir(): string | null {\n const skillsDir = this.getProjectSkillsDir();\n if (!skillsDir) {\n return null;\n }\n fs.mkdirSync(skillsDir, { recursive: true });\n return skillsDir;\n },\n\n ensureProjectDeepagentsDir(): string | null {\n if (!projectRoot) {\n return null;\n }\n const deepagentsDir = path.join(projectRoot, \".deepagents\");\n fs.mkdirSync(deepagentsDir, { recursive: true });\n return deepagentsDir;\n },\n };\n}\n","/**\n * Middleware for loading agent-specific long-term memory into the system prompt.\n *\n * This middleware loads the agent's long-term memory from agent.md files\n * and injects it into the system prompt. Memory is loaded from:\n * - User memory: ~/.deepagents/{agent_name}/agent.md\n * - Project memory: {project_root}/.deepagents/agent.md\n *\n * @deprecated Use `createMemoryMiddleware` from `./memory.js` instead.\n * This middleware uses direct filesystem access (Node.js fs module) which is not\n * portable across backends. The `createMemoryMiddleware` function uses the\n * `BackendProtocol` abstraction and follows the AGENTS.md specification.\n *\n * Migration example:\n * ```typescript\n * // Before (deprecated):\n * import { createAgentMemoryMiddleware } from \"./agent-memory.js\";\n * const middleware = createAgentMemoryMiddleware({ settings, assistantId });\n *\n * // After (recommended):\n * import { createMemoryMiddleware } from \"./memory.js\";\n * import { FilesystemBackend } from \"../backends/filesystem.js\";\n *\n * const middleware = createMemoryMiddleware({\n * backend: new FilesystemBackend({ rootDir: \"/\" }),\n * sources: [\n * `~/.deepagents/${assistantId}/AGENTS.md`,\n * `${projectRoot}/.deepagents/AGENTS.md`,\n * ],\n * });\n * ```\n */\n\nimport fs from \"node:fs\";\nimport { z } from \"zod\";\nimport {\n createMiddleware,\n /**\n * required for type inference\n */\n type AgentMiddleware as _AgentMiddleware,\n} from \"langchain\";\n\nimport type { Settings } from \"../config.js\";\n\n/**\n * Options for the agent memory middleware.\n */\nexport interface AgentMemoryMiddlewareOptions {\n /** Settings instance with project detection and paths */\n settings: Settings;\n\n /** The agent identifier */\n assistantId: string;\n\n /** Optional custom template for injecting agent memory into system prompt */\n systemPromptTemplate?: string;\n}\n\n/**\n * State schema for agent memory middleware.\n */\nconst AgentMemoryStateSchema = z.object({\n /** Personal preferences from ~/.deepagents/{agent}/ (applies everywhere) */\n userMemory: z.string().optional(),\n\n /** Project-specific context (loaded from project root) */\n projectMemory: z.string().optional(),\n});\n\n/**\n * Default template for memory injection.\n */\nconst DEFAULT_MEMORY_TEMPLATE = `<user_memory>\n{user_memory}\n</user_memory>\n\n<project_memory>\n{project_memory}\n</project_memory>`;\n\n/**\n * Long-term Memory Documentation system prompt.\n */\nconst LONGTERM_MEMORY_SYSTEM_PROMPT = `\n\n## Long-term Memory\n\nYour long-term memory is stored in files on the filesystem and persists across sessions.\n\n**User Memory Location**: \\`{agent_dir_absolute}\\` (displays as \\`{agent_dir_display}\\`)\n**Project Memory Location**: {project_memory_info}\n\nYour system prompt is loaded from TWO sources at startup:\n1. **User agent.md**: \\`{agent_dir_absolute}/agent.md\\` - Your personal preferences across all projects\n2. **Project agent.md**: Loaded from project root if available - Project-specific instructions\n\nProject-specific agent.md is loaded from these locations (both combined if both exist):\n- \\`[project-root]/.deepagents/agent.md\\` (preferred)\n- \\`[project-root]/agent.md\\` (fallback, but also included if both exist)\n\n**When to CHECK/READ memories (CRITICAL - do this FIRST):**\n- **At the start of ANY new session**: Check both user and project memories\n - User: \\`ls {agent_dir_absolute}\\`\n - Project: \\`ls {project_deepagents_dir}\\` (if in a project)\n- **BEFORE answering questions**: If asked \"what do you know about X?\" or \"how do I do Y?\", check project memories FIRST, then user\n- **When user asks you to do something**: Check if you have project-specific guides or examples\n- **When user references past work**: Search project memory files for related context\n\n**Memory-first response pattern:**\n1. User asks a question → Check project directory first: \\`ls {project_deepagents_dir}\\`\n2. If relevant files exist → Read them with \\`read_file '{project_deepagents_dir}/[filename]'\\`\n3. Check user memory if needed → \\`ls {agent_dir_absolute}\\`\n4. Base your answer on saved knowledge supplemented by general knowledge\n\n**When to update memories:**\n- **IMMEDIATELY when the user describes your role or how you should behave**\n- **IMMEDIATELY when the user gives feedback on your work** - Update memories to capture what was wrong and how to do it better\n- When the user explicitly asks you to remember something\n- When patterns or preferences emerge (coding styles, conventions, workflows)\n- After significant work where context would help in future sessions\n\n**Learning from feedback:**\n- When user says something is better/worse, capture WHY and encode it as a pattern\n- Each correction is a chance to improve permanently - don't just fix the immediate issue, update your instructions\n- When user says \"you should remember X\" or \"be careful about Y\", treat this as HIGH PRIORITY - update memories IMMEDIATELY\n- Look for the underlying principle behind corrections, not just the specific mistake\n\n## Deciding Where to Store Memory\n\nWhen writing or updating agent memory, decide whether each fact, configuration, or behavior belongs in:\n\n### User Agent File: \\`{agent_dir_absolute}/agent.md\\`\n→ Describes the agent's **personality, style, and universal behavior** across all projects.\n\n**Store here:**\n- Your general tone and communication style\n- Universal coding preferences (formatting, comment style, etc.)\n- General workflows and methodologies you follow\n- Tool usage patterns that apply everywhere\n- Personal preferences that don't change per-project\n\n**Examples:**\n- \"Be concise and direct in responses\"\n- \"Always use type hints in Python\"\n- \"Prefer functional programming patterns\"\n\n### Project Agent File: \\`{project_deepagents_dir}/agent.md\\`\n→ Describes **how this specific project works** and **how the agent should behave here only.**\n\n**Store here:**\n- Project-specific architecture and design patterns\n- Coding conventions specific to this codebase\n- Project structure and organization\n- Testing strategies for this project\n- Deployment processes and workflows\n- Team conventions and guidelines\n\n**Examples:**\n- \"This project uses FastAPI with SQLAlchemy\"\n- \"Tests go in tests/ directory mirroring src/ structure\"\n- \"All API changes require updating OpenAPI spec\"\n\n### Project Memory Files: \\`{project_deepagents_dir}/*.md\\`\n→ Use for **project-specific reference information** and structured notes.\n\n**Store here:**\n- API design documentation\n- Architecture decisions and rationale\n- Deployment procedures\n- Common debugging patterns\n- Onboarding information\n\n**Examples:**\n- \\`{project_deepagents_dir}/api-design.md\\` - REST API patterns used\n- \\`{project_deepagents_dir}/architecture.md\\` - System architecture overview\n- \\`{project_deepagents_dir}/deployment.md\\` - How to deploy this project\n\n### File Operations:\n\n**User memory:**\n\\`\\`\\`\nls {agent_dir_absolute} # List user memory files\nread_file '{agent_dir_absolute}/agent.md' # Read user preferences\nedit_file '{agent_dir_absolute}/agent.md' ... # Update user preferences\n\\`\\`\\`\n\n**Project memory (preferred for project-specific information):**\n\\`\\`\\`\nls {project_deepagents_dir} # List project memory files\nread_file '{project_deepagents_dir}/agent.md' # Read project instructions\nedit_file '{project_deepagents_dir}/agent.md' ... # Update project instructions\nwrite_file '{project_deepagents_dir}/agent.md' ... # Create project memory file\n\\`\\`\\`\n\n**Important**:\n- Project memory files are stored in \\`.deepagents/\\` inside the project root\n- Always use absolute paths for file operations\n- Check project memories BEFORE user when answering project-specific questions`;\n\n/**\n * Create middleware for loading agent-specific long-term memory.\n *\n * This middleware loads the agent's long-term memory from a file (agent.md)\n * and injects it into the system prompt. The memory is loaded once at the\n * start of the conversation and stored in state.\n *\n * @param options - Configuration options\n * @returns AgentMiddleware for memory loading and injection\n *\n * @deprecated Use `createMemoryMiddleware` from `./memory.js` instead.\n * This function uses direct filesystem access which limits portability.\n */\nexport function createAgentMemoryMiddleware(\n options: AgentMemoryMiddlewareOptions,\n) {\n const { settings, assistantId, systemPromptTemplate } = options;\n\n // Compute paths\n const agentDir = settings.getAgentDir(assistantId);\n const agentDirDisplay = `~/.deepagents/${assistantId}`;\n const agentDirAbsolute = agentDir;\n const projectRoot = settings.projectRoot;\n\n // Build project memory info for documentation\n const projectMemoryInfo = projectRoot\n ? `\\`${projectRoot}\\` (detected)`\n : \"None (not in a git project)\";\n\n // Build project deepagents directory path\n const projectDeepagentsDir = projectRoot\n ? `${projectRoot}/.deepagents`\n : \"[project-root]/.deepagents (not in a project)\";\n\n const template = systemPromptTemplate || DEFAULT_MEMORY_TEMPLATE;\n\n return createMiddleware({\n name: \"AgentMemoryMiddleware\",\n stateSchema: AgentMemoryStateSchema as any,\n\n beforeAgent(state: any) {\n const result: Record<string, string> = {};\n\n // Load user memory if not already in state\n if (!(\"userMemory\" in state)) {\n const userPath = settings.getUserAgentMdPath(assistantId);\n if (fs.existsSync(userPath)) {\n try {\n result.userMemory = fs.readFileSync(userPath, \"utf-8\");\n } catch {\n // Ignore read errors\n }\n }\n }\n\n // Load project memory if not already in state\n if (!(\"projectMemory\" in state)) {\n const projectPath = settings.getProjectAgentMdPath();\n if (projectPath && fs.existsSync(projectPath)) {\n try {\n result.projectMemory = fs.readFileSync(projectPath, \"utf-8\");\n } catch {\n // Ignore read errors\n }\n }\n }\n\n return Object.keys(result).length > 0 ? result : undefined;\n },\n\n wrapModelCall(request: any, handler: any) {\n // Extract memory from state\n const userMemory = request.state?.userMemory;\n const projectMemory = request.state?.projectMemory;\n const baseSystemPrompt = request.systemPrompt || \"\";\n\n // Format memory section with both memories\n const memorySection = template\n .replace(\"{user_memory}\", userMemory || \"(No user agent.md)\")\n .replace(\"{project_memory}\", projectMemory || \"(No project agent.md)\");\n\n // Format long-term memory documentation\n const memoryDocs = LONGTERM_MEMORY_SYSTEM_PROMPT.replaceAll(\n \"{agent_dir_absolute}\",\n agentDirAbsolute,\n )\n .replaceAll(\"{agent_dir_display}\", agentDirDisplay)\n .replaceAll(\"{project_memory_info}\", projectMemoryInfo)\n .replaceAll(\"{project_deepagents_dir}\", projectDeepagentsDir);\n\n // Memory content at start, base prompt in middle, documentation at end\n let systemPrompt = memorySection;\n if (baseSystemPrompt) {\n systemPrompt += \"\\n\\n\" + baseSystemPrompt;\n }\n systemPrompt += \"\\n\\n\" + memoryDocs;\n\n return handler({ ...request, systemPrompt });\n },\n });\n}\n","/**\n * Skill loader for parsing and loading agent skills from SKILL.md files.\n *\n * This module implements Anthropic's agent skills pattern with YAML frontmatter parsing.\n * Each skill is a directory containing a SKILL.md file with:\n * - YAML frontmatter (name, description required)\n * - Markdown instructions for the agent\n * - Optional supporting files (scripts, configs, etc.)\n *\n * @example\n * ```markdown\n * ---\n * name: web-research\n * description: Structured approach to conducting thorough web research\n * ---\n *\n * # Web Research Skill\n *\n * ## When to Use\n * - User asks you to research a topic\n * ...\n * ```\n *\n * @see https://agentskills.io/specification\n */\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport yaml from \"yaml\";\n\n/** Maximum size for SKILL.md files (10MB) */\nexport const MAX_SKILL_FILE_SIZE = 10 * 1024 * 1024;\n\n/** Agent Skills spec constraints */\nexport const MAX_SKILL_NAME_LENGTH = 64;\nexport const MAX_SKILL_DESCRIPTION_LENGTH = 1024;\n\n/** Pattern for validating skill names per Agent Skills spec */\nconst SKILL_NAME_PATTERN = /^[a-z0-9]+(-[a-z0-9]+)*$/;\n\n/** Pattern for extracting YAML frontmatter */\nconst FRONTMATTER_PATTERN = /^---\\s*\\n([\\s\\S]*?)\\n---\\s*\\n/;\n\n/**\n * Metadata for a skill per Agent Skills spec.\n * @see https://agentskills.io/specification\n */\nexport interface SkillMetadata {\n /** Name of the skill (max 64 chars, lowercase alphanumeric and hyphens) */\n name: string;\n\n /** Description of what the skill does (max 1024 chars) */\n description: string;\n\n /** Absolute path to the SKILL.md file */\n path: string;\n\n /** Source of the skill ('user' or 'project') */\n source: \"user\" | \"project\";\n\n /** Optional: License name or reference to bundled license file */\n license?: string;\n\n /** Optional: Environment requirements (max 500 chars) */\n compatibility?: string;\n\n /** Optional: Arbitrary key-value mapping for additional metadata */\n metadata?: Record<string, string>;\n\n /** Optional: Space-delimited list of pre-approved tools */\n allowedTools?: string;\n}\n\n/**\n * Options for listing skills.\n */\nexport interface ListSkillsOptions {\n /** Path to user-level skills directory */\n userSkillsDir?: string | null;\n\n /** Path to project-level skills directory */\n projectSkillsDir?: string | null;\n}\n\n/**\n * Result of skill name validation.\n */\ninterface ValidationResult {\n valid: boolean;\n error?: string;\n}\n\n/**\n * Check if a path is safely contained within base_dir.\n *\n * This prevents directory traversal attacks via symlinks or path manipulation.\n * The function resolves both paths to their canonical form (following symlinks)\n * and verifies that the target path is within the base directory.\n *\n * @param targetPath - The path to validate\n * @param baseDir - The base directory that should contain the path\n * @returns True if the path is safely within baseDir, false otherwise\n */\nfunction isSafePath(targetPath: string, baseDir: string): boolean {\n try {\n // Resolve both paths to their canonical form (follows symlinks)\n const resolvedPath = fs.realpathSync(targetPath);\n const resolvedBase = fs.realpathSync(baseDir);\n\n // Check if the resolved path is within the base directory\n return (\n resolvedPath.startsWith(resolvedBase + path.sep) ||\n resolvedPath === resolvedBase\n );\n } catch {\n // Error resolving paths (e.g., circular symlinks, too many levels)\n return false;\n }\n}\n\n/**\n * Validate skill name per Agent Skills spec.\n *\n * Requirements:\n * - Max 64 characters\n * - Lowercase alphanumeric and hyphens only (a-z, 0-9, -)\n * - Cannot start or end with hyphen\n * - No consecutive hyphens\n * - Must match parent directory name\n *\n * @param name - The skill name from YAML frontmatter\n * @param directoryName - The parent directory name\n * @returns Validation result with error message if invalid\n */\nfunction validateSkillName(\n name: string,\n directoryName: string,\n): ValidationResult {\n if (!name) {\n return { valid: false, error: \"name is required\" };\n }\n if (name.length > MAX_SKILL_NAME_LENGTH) {\n return { valid: false, error: \"name exceeds 64 characters\" };\n }\n // Pattern: lowercase alphanumeric, single hyphens between segments, no start/end hyphen\n if (!SKILL_NAME_PATTERN.test(name)) {\n return {\n valid: false,\n error: \"name must be lowercase alphanumeric with single hyphens only\",\n };\n }\n if (name !== directoryName) {\n return {\n valid: false,\n error: `name '${name}' must match directory name '${directoryName}'`,\n };\n }\n return { valid: true };\n}\n\n/**\n * Parse YAML frontmatter from content.\n *\n * @param content - The file content\n * @returns Parsed frontmatter object, or null if parsing fails\n */\nfunction parseFrontmatter(content: string): Record<string, unknown> | null {\n const match = content.match(FRONTMATTER_PATTERN);\n if (!match) {\n return null;\n }\n\n try {\n const parsed = yaml.parse(match[1]);\n return typeof parsed === \"object\" && parsed !== null ? parsed : null;\n } catch {\n return null;\n }\n}\n\n/**\n * Parse YAML frontmatter from a SKILL.md file per Agent Skills spec.\n *\n * @param skillMdPath - Path to the SKILL.md file\n * @param source - Source of the skill ('user' or 'project')\n * @returns SkillMetadata with all fields, or null if parsing fails\n */\nexport function parseSkillMetadata(\n skillMdPath: string,\n source: \"user\" | \"project\",\n): SkillMetadata | null {\n try {\n // Security: Check file size to prevent DoS attacks\n const stats = fs.statSync(skillMdPath);\n if (stats.size > MAX_SKILL_FILE_SIZE) {\n // eslint-disable-next-line no-console\n console.warn(\n `Skipping ${skillMdPath}: file too large (${stats.size} bytes)`,\n );\n return null;\n }\n\n const content = fs.readFileSync(skillMdPath, \"utf-8\");\n const frontmatter = parseFrontmatter(content);\n\n if (!frontmatter) {\n // eslint-disable-next-line no-console\n console.warn(`Skipping ${skillMdPath}: no valid YAML frontmatter found`);\n return null;\n }\n\n // Validate required fields\n const name = frontmatter.name;\n const description = frontmatter.description;\n\n if (!name || !description) {\n // eslint-disable-next-line no-console\n console.warn(\n `Skipping ${skillMdPath}: missing required 'name' or 'description'`,\n );\n return null;\n }\n\n // Validate name format per spec (warn but still load for backwards compatibility)\n const directoryName = path.basename(path.dirname(skillMdPath));\n const validation = validateSkillName(String(name), directoryName);\n if (!validation.valid) {\n // eslint-disable-next-line no-console\n console.warn(\n `Skill '${name}' in ${skillMdPath} does not follow Agent Skills spec: ${validation.error}. ` +\n \"Consider renaming to be spec-compliant.\",\n );\n }\n\n // Truncate description if too long (spec: max 1024 chars)\n let descriptionStr = String(description);\n if (descriptionStr.length > MAX_SKILL_DESCRIPTION_LENGTH) {\n // eslint-disable-next-line no-console\n console.warn(\n `Description exceeds ${MAX_SKILL_DESCRIPTION_LENGTH} chars in ${skillMdPath}, truncating`,\n );\n descriptionStr = descriptionStr.slice(0, MAX_SKILL_DESCRIPTION_LENGTH);\n }\n\n return {\n name: String(name),\n description: descriptionStr,\n path: skillMdPath,\n source,\n license: frontmatter.license ? String(frontmatter.license) : undefined,\n compatibility: frontmatter.compatibility\n ? String(frontmatter.compatibility)\n : undefined,\n metadata:\n frontmatter.metadata && typeof frontmatter.metadata === \"object\"\n ? (frontmatter.metadata as Record<string, string>)\n : undefined,\n allowedTools: frontmatter[\"allowed-tools\"]\n ? String(frontmatter[\"allowed-tools\"])\n : undefined,\n };\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn(`Error reading ${skillMdPath}: ${error}`);\n return null;\n }\n}\n\n/**\n * List all skills from a single skills directory (internal helper).\n *\n * Scans the skills directory for subdirectories containing SKILL.md files,\n * parses YAML frontmatter, and returns skill metadata.\n *\n * Skills are organized as:\n * ```\n * skills/\n * ├── skill-name/\n * │ ├── SKILL.md # Required: instructions with YAML frontmatter\n * │ ├── script.py # Optional: supporting files\n * │ └── config.json # Optional: supporting files\n * ```\n *\n * @param skillsDir - Path to the skills directory\n * @param source - Source of the skills ('user' or 'project')\n * @returns List of skill metadata\n */\nfunction listSkillsFromDir(\n skillsDir: string,\n source: \"user\" | \"project\",\n): SkillMetadata[] {\n // Check if skills directory exists\n const expandedDir = skillsDir.startsWith(\"~\")\n ? path.join(\n process.env.HOME || process.env.USERPROFILE || \"\",\n skillsDir.slice(1),\n )\n : skillsDir;\n\n if (!fs.existsSync(expandedDir)) {\n return [];\n }\n\n // Resolve base directory to canonical path for security checks\n let resolvedBase: string;\n try {\n resolvedBase = fs.realpathSync(expandedDir);\n } catch {\n // Can't resolve base directory, fail safe\n return [];\n }\n\n const skills: SkillMetadata[] = [];\n\n // Iterate through subdirectories\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(resolvedBase, { withFileTypes: true });\n } catch {\n return [];\n }\n\n for (const entry of entries) {\n const skillDir = path.join(resolvedBase, entry.name);\n\n // Security: Catch symlinks pointing outside the skills directory\n if (!isSafePath(skillDir, resolvedBase)) {\n continue;\n }\n\n if (!entry.isDirectory()) {\n continue;\n }\n\n // Look for SKILL.md file\n const skillMdPath = path.join(skillDir, \"SKILL.md\");\n if (!fs.existsSync(skillMdPath)) {\n continue;\n }\n\n // Security: Validate SKILL.md path is safe before reading\n if (!isSafePath(skillMdPath, resolvedBase)) {\n continue;\n }\n\n // Parse metadata\n const metadata = parseSkillMetadata(skillMdPath, source);\n if (metadata) {\n skills.push(metadata);\n }\n }\n\n return skills;\n}\n\n/**\n * List skills from user and/or project directories.\n *\n * When both directories are provided, project skills with the same name as\n * user skills will override them.\n *\n * @param options - Options specifying which directories to search\n * @returns Merged list of skill metadata from both sources, with project skills\n * taking precedence over user skills when names conflict\n */\nexport function listSkills(options: ListSkillsOptions): SkillMetadata[] {\n const allSkills: Map<string, SkillMetadata> = new Map();\n\n // Load user skills first (foundation)\n if (options.userSkillsDir) {\n const userSkills = listSkillsFromDir(options.userSkillsDir, \"user\");\n for (const skill of userSkills) {\n allSkills.set(skill.name, skill);\n }\n }\n\n // Load project skills second (override/augment)\n if (options.projectSkillsDir) {\n const projectSkills = listSkillsFromDir(\n options.projectSkillsDir,\n \"project\",\n );\n for (const skill of projectSkills) {\n // Project skills override user skills with the same name\n allSkills.set(skill.name, skill);\n }\n }\n\n return Array.from(allSkills.values());\n}\n","import {\n\tAgent,\n\tAgentResult,\n\tAgentRunInput,\n\tContentBlock,\n\tMessage,\n\tStreamEvent,\n\tToolCall,\n\tUsageMeta,\n} from '@core/agent.interface';\nimport { AIMessage, ToolCallChunk, ToolMessage } from '@langchain/core/messages';\nimport { Command } from '@langchain/langgraph';\nimport { createDeepAgent, CreateDeepAgentParams } from 'deepagents';\nimport {\n\tAgentMiddleware,\n\tAIMessageChunk,\n\tBaseMessage,\n\tcreateMiddleware,\n\tHumanMessage,\n\tReactAgent,\n\tStructuredTool,\n} from 'langchain';\nimport { convertToLangchainMessages } from './utils';\n\nconst ENABLE_STREAM_DEBUG_LOGS = false;\n\nfunction debugLogStream(type: StreamEvent['type'], text: string) {\n\tif (!ENABLE_STREAM_DEBUG_LOGS) return;\n\n\tconsole.warn(`${type}: ${text}`);\n}\n\nexport interface CreateOptions extends CreateDeepAgentParams {\n\t/**\n\t * Tool names to disable streaming for\n\t */\n\tdisableToolStreamingFor?: string[];\n\n\t/**\n\t * Tool names to disable streaming for\n\t */\n\tdisableToolReportingFor?: string[];\n\n\t/**\n\t * Model tags to disable streaming for\n\t */\n\tdisableModelStreamingFor?: string[];\n}\n\nexport class LangchainAgent implements Agent {\n\tprivate deepAgent: ReactAgent;\n\tprivate toolCalls: ToolCall[] = [];\n\tprivate tools?: StructuredTool[];\n\n\tconstructor(private params: CreateOptions) {\n\t\tthis.tools = params.tools;\n\n\t\tif (!params.disableModelStreamingFor) params.disableModelStreamingFor = [];\n\t\tif (!params.disableToolReportingFor) params.disableToolReportingFor = [];\n\t\tif (!params.disableToolStreamingFor) params.disableToolStreamingFor = [];\n\n\t\tlet middlewares: AgentMiddleware[] = [\n\t\t\tcreateMiddleware({\n\t\t\t\tname: 'toolCallsReporter',\n\t\t\t\twrapToolCall: async (request, handler) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst res = await handler(request);\n\n\t\t\t\t\t\tif (this.params.disableToolReportingFor?.includes(request.tool?.name as string)) return res;\n\n\t\t\t\t\t\tthis.toolCalls.push({\n\t\t\t\t\t\t\tid: request.toolCall.id as string,\n\t\t\t\t\t\t\tname: (request.tool?.name as string) || '',\n\t\t\t\t\t\t\tinput: request.toolCall.args,\n\t\t\t\t\t\t\toutput: res.toJSON(),\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * Wrapped tool may sometimes return Command objects\n\t\t\t\t\t\t * which should actually trigger the \"updates\" mode\n\t\t\t\t\t\t * of stream. But we don't want that to happen. We\n\t\t\t\t\t\t * want to emit tool_result events from a single place.\n\t\t\t\t\t\t * So we extract the tool message from the update and\n\t\t\t\t\t\t * command.update.messages and return that. That way\n\t\t\t\t\t\t * 'messages' stream mode is triggered\n\t\t\t\t\t\t *\n\t\t\t\t\t\t * Hopefully this won't cause any issues.\n\t\t\t\t\t\t */\n\t\t\t\t\t\tif (res instanceof Command) {\n\t\t\t\t\t\t\tconst resCast: {\n\t\t\t\t\t\t\t\tupdate?: {\n\t\t\t\t\t\t\t\t\tmessages?: BaseMessage[];\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t} = res as any;\n\n\t\t\t\t\t\t\tif (!resCast.update?.messages || resCast.update.messages.length == 0) return res;\n\n\t\t\t\t\t\t\tconst toolMessage = resCast.update.messages.find((m: BaseMessage) => m.type == 'tool');\n\n\t\t\t\t\t\t\tif (!toolMessage) return res;\n\n\t\t\t\t\t\t\treturn toolMessage as ToolMessage;\n\t\t\t\t\t\t} else return res;\n\t\t\t\t\t} catch (e: any) {\n\t\t\t\t\t\treturn new ToolMessage({\n\t\t\t\t\t\t\tname: request.toolCall.name,\n\t\t\t\t\t\t\tcontent: 'Something went wrong: ' + e.message,\n\t\t\t\t\t\t\ttool_call_id: request.toolCall.id || 'TOOL_CALL_ERROR',\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}),\n\t\t];\n\n\t\tif (params.middleware) middlewares = [...middlewares, ...params.middleware];\n\n\t\tparams.middleware = middlewares;\n\n\t\tthis.deepAgent = createDeepAgent(params);\n\t}\n\n\tasync run(input: AgentRunInput): Promise<AgentResult> {\n\t\tthis.toolCalls = []; // Reset tool calls for each run\n\n\t\t// Get current state to know how many messages existed before this turn\n\t\t// If no checkpointer is set, assume this is a fresh conversation\n\t\tlet messageCountBefore = 0;\n\t\ttry {\n\t\t\tconst stateBefore = await this.deepAgent.getState({\n\t\t\t\tconfigurable: {\n\t\t\t\t\tthreadId: input.threadId,\n\t\t\t\t\tthread_id: input.threadId,\n\t\t\t\t},\n\t\t\t});\n\t\t\tmessageCountBefore = (stateBefore as any)?.values?.messages?.length || 0;\n\t\t} catch {\n\t\t\t// No checkpointer set - this is fine, we'll count from 0\n\t\t}\n\n\t\tconst messages = convertToLangchainMessages(input.messages);\n\n\t\tconst result = await this.deepAgent.invoke(\n\t\t\t{\n\t\t\t\tmessages: messages,\n\t\t\t},\n\t\t\t{\n\t\t\t\tconfigurable: {\n\t\t\t\t\tthreadId: input.threadId,\n\t\t\t\t\tthread_id: input.threadId,\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\n\t\t// Only sum usage from messages added in this turn\n\t\tconst newMessages = result.messages.slice(messageCountBefore);\n\t\tconst messagesWithUsage = newMessages.filter((m: any) => m.usage_metadata != null);\n\n\t\tlet usage = {\n\t\t\tinput_tokens: 0,\n\t\t\toutput_tokens: 0,\n\t\t\ttotal_tokens: 0,\n\t\t\tcache_read: 0,\n\t\t};\n\n\t\tmessagesWithUsage.forEach((m: any) => {\n\t\t\tusage.input_tokens += m.usage_metadata.input_tokens || 0;\n\t\t\tusage.output_tokens += m.usage_metadata.output_tokens || 0;\n\t\t\tusage.total_tokens += m.usage_metadata.total_tokens || 0;\n\t\t\tusage.cache_read += m.usage_metadata.input_token_details?.cache_read || 0;\n\t\t});\n\n\t\t// Build content blocks from new messages\n\t\tconst contentBlocks: ContentBlock[] = [];\n\t\tconst toolCallInputs: { [toolCallId: string]: any } = {};\n\n\t\tfor (const msg of newMessages) {\n\t\t\tconst m = msg as any;\n\t\t\tif (m.type === 'ai') {\n\t\t\t\t// Store tool call inputs for later pairing\n\t\t\t\tif (m.tool_calls && m.tool_calls.length > 0) {\n\t\t\t\t\tfor (const tc of m.tool_calls) {\n\t\t\t\t\t\ttoolCallInputs[tc.id] = tc.args;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Add text content if present\n\t\t\t\tif (m.content && m.content.toString().trim().length > 0) {\n\t\t\t\t\tcontentBlocks.push({\n\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\toutput: m.content.toString(),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else if (m.type === 'tool') {\n\t\t\t\tcontentBlocks.push({\n\t\t\t\t\ttype: 'tool_call',\n\t\t\t\t\tname: m.name,\n\t\t\t\t\ttoolKit: this.getToolKitMeta(m.name).toolKit,\n\t\t\t\t\ttoolKitIconUrl: this.getToolKitMeta(m.name).toolKitIconUrl,\n\t\t\t\t\tinput: JSON.stringify(toolCallInputs[m.tool_call_id] || {}),\n\t\t\t\t\toutput: m.content.toString(),\n\t\t\t\t\ttoolCallId: m.tool_call_id,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tcontent: contentBlocks,\n\t\t\ttoolCalls: this.toolCalls,\n\t\t\tusage: {\n\t\t\t\tpromptTokens: usage.input_tokens,\n\t\t\t\tcompletionTokens: usage.output_tokens,\n\t\t\t\ttotalTokens: usage.total_tokens,\n\t\t\t\tcachedPromptTokens: usage.cache_read,\n\t\t\t},\n\t\t};\n\t}\n\n\tasync *stream(input: AgentRunInput): AsyncGenerator<StreamEvent> {\n\t\tthis.toolCalls = []; // Reset tool calls for each stream\n\t\tconst contentBlocks: ContentBlock[] = []; // this will be our final return value\n\t\tlet finalValue;\n\n\t\t// Initialize usage metadata - accumulated from updates mode (current turn only)\n\t\tlet usageMetadata: UsageMeta = {\n\t\t\tpromptTokens: 0,\n\t\t\tcompletionTokens: 0,\n\t\t\ttotalTokens: 0,\n\t\t\tcachedPromptTokens: 0,\n\t\t};\n\n\t\tconst messages = convertToLangchainMessages(input.messages);\n\n\t\tdebugLogStream('message_start', '');\n\n\t\t// Emit message start\n\t\tyield { type: 'message_start' };\n\n\t\tconst stream = await this.deepAgent.stream(\n\t\t\t{ messages },\n\t\t\t{\n\t\t\t\tconfigurable: {\n\t\t\t\t\tthreadId: input.threadId,\n\t\t\t\t\tthread_id: input.threadId,\n\t\t\t\t},\n\t\t\t\tstreamMode: ['messages', 'updates', 'values'],\n\t\t\t},\n\t\t);\n\n\t\tlet toolCalls: {\n\t\t\t[index: number]: {\n\t\t\t\ttoolCallId: string;\n\t\t\t\tname: string;\n\t\t\t};\n\t\t} = {};\n\t\tconst toolCallUpdates: {\n\t\t\t[toolCallId: string]: {\n\t\t\t\tname: string;\n\t\t\t\targs: any;\n\t\t\t};\n\t\t} = {};\n\n\t\t/**\n\t\t * Process chunks produced by the LLM\n\t\t */\n\t\tfor await (const chunk of stream) {\n\t\t\tconst [mode, data] = chunk;\n\n\t\t\tif (mode === 'messages') {\n\t\t\t\tconst [message, metadata] = data;\n\n\t\t\t\t/**\n\t\t\t\t * Some messages carry no meaningful information\n\t\t\t\t */\n\t\t\t\tif (this.shouldIgnoreMessage(message, metadata)) continue;\n\n\t\t\t\t/**\n\t\t\t\t * LLMs also stream the tool input tokens. If we see\n\t\t\t\t * tool_call_chunks inside the message, we know it's\n\t\t\t\t * a token stream for a tool call.\n\t\t\t\t */\n\t\t\t\tif (this.isToolCallMessage(message)) {\n\t\t\t\t\tconst aiMessage = message as AIMessageChunk;\n\t\t\t\t\tconst toolCallChunks = aiMessage.tool_call_chunks as ToolCallChunk[];\n\n\t\t\t\t\tfor (const toolChunk of toolCallChunks) {\n\t\t\t\t\t\tconst toolCallIndex = toolChunk.index as number;\n\n\t\t\t\t\t\tconst getToolCallInfo = () => {\n\t\t\t\t\t\t\treturn toolCalls[toolCallIndex];\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * On the first chunk, we get the tool name in\n\t\t\t\t\t\t * chunk.id. On sequential chunks this property\n\t\t\t\t\t\t * is set to defined. So if there is id in the\n\t\t\t\t\t\t * chunk; this is a tool_start event.\n\t\t\t\t\t\t *\n\t\t\t\t\t\t * Also different tool calls are separated using\n\t\t\t\t\t\t * the \"index\" property. This exists in all tool\n\t\t\t\t\t\t * chunk messages.\n\t\t\t\t\t\t */\n\t\t\t\t\t\tif (toolChunk.id) {\n\t\t\t\t\t\t\ttoolCalls[toolChunk.index as number] = {\n\t\t\t\t\t\t\t\ttoolCallId: toolChunk.id,\n\t\t\t\t\t\t\t\tname: toolChunk.name as string,\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tif (!this.shouldStreamToolEvent(getToolCallInfo().name)) continue;\n\n\t\t\t\t\t\t\tconst toolKitMeta = this.getToolKitMeta(getToolCallInfo().name);\n\n\t\t\t\t\t\t\tdebugLogStream('tool_start', `[${getToolCallInfo().toolCallId}] ${getToolCallInfo().name}`);\n\n\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\ttype: 'tool_start',\n\t\t\t\t\t\t\t\tname: getToolCallInfo().name,\n\t\t\t\t\t\t\t\ttoolKit: toolKitMeta.toolKit,\n\t\t\t\t\t\t\t\ttoolKitIconUrl: toolKitMeta.toolKitIconUrl,\n\t\t\t\t\t\t\t\tindex: toolCallIndex,\n\t\t\t\t\t\t\t\ttoolCallId: getToolCallInfo().toolCallId,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (toolChunk.args && toolChunk.args.length > 0) {\n\t\t\t\t\t\t\tif (!this.shouldStreamToolEvent(getToolCallInfo().name)) continue;\n\n\t\t\t\t\t\t\tdebugLogStream('tool_input_delta', `[${getToolCallInfo().toolCallId}] ${toolChunk.args}`);\n\n\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\ttype: 'tool_input_delta',\n\t\t\t\t\t\t\t\tname: getToolCallInfo().name,\n\t\t\t\t\t\t\t\targs: toolChunk.args || '',\n\t\t\t\t\t\t\t\tindex: toolCallIndex,\n\t\t\t\t\t\t\t\ttoolCallId: getToolCallInfo().toolCallId,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (message?.content && typeof message.content === 'string') {\n\t\t\t\t\tconst content = message.content;\n\n\t\t\t\t\tif (content.length === 0) continue;\n\n\t\t\t\t\tif (message.type == 'tool') {\n\t\t\t\t\t\t// I know it's odd but ToolMessage.name seems to corelate to the tool name\n\t\t\t\t\t\tconst toolName = message.name as string;\n\t\t\t\t\t\tconst toolKitMeta = this.getToolKitMeta(toolName);\n\n\t\t\t\t\t\tconst toolCall = Object.entries(toolCalls).find(\n\t\t\t\t\t\t\t([_, value]) => value.toolCallId == (message as ToolMessage).tool_call_id,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (!this.shouldStreamToolEvent(toolName)) continue;\n\n\t\t\t\t\t\tdebugLogStream('tool_result', `[${toolCall?.[1].toolCallId}] ${message.content}`);\n\n\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\t\t\tname: toolName,\n\t\t\t\t\t\t\tinput:\n\t\t\t\t\t\t\t\tJSON.stringify(\n\t\t\t\t\t\t\t\t\tthis.toolCalls.find((tc) => tc.id == (toolCall as any)[1].toolCallId)?.input,\n\t\t\t\t\t\t\t\t) || '',\n\t\t\t\t\t\t\toutput: message.content,\n\t\t\t\t\t\t\ttoolKit: toolKitMeta.toolKit,\n\t\t\t\t\t\t\ttoolKitIconUrl: toolKitMeta.toolKitIconUrl,\n\t\t\t\t\t\t\tindex: toolCall?.[0] ? parseInt(toolCall[0]) : 99999,\n\t\t\t\t\t\t\ttoolCallId: toolCall?.[1] ? toolCall[1].toolCallId : 'NO_ID_FOUND',\n\t\t\t\t\t\t};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdebugLogStream('text_delta', content);\n\n\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\ttype: 'text_delta',\n\t\t\t\t\t\t\tdelta: content,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn('Unexpected messages stream chunk', chunk);\n\t\t\t\t}\n\t\t\t} else if (mode == 'updates') {\n\t\t\t\tconst update = data;\n\n\t\t\t\t/**\n\t\t\t\t * This is how we get the tool INPUTS and llm\n\t\t\t\t * tokens that'll be used in returned content\n\t\t\t\t * blocks\n\t\t\t\t */\n\t\t\t\tif (update.model_request?.messages) {\n\t\t\t\t\tconst aiMessageChunks: AIMessageChunk[] = update.model_request.messages.filter(\n\t\t\t\t\t\t(m) => m.type == 'ai',\n\t\t\t\t\t) as AIMessageChunk[];\n\n\t\t\t\t\tfor (let aiChunk of aiMessageChunks) {\n\t\t\t\t\t\t// Accumulate usage metadata from current turn's AI messages\n\t\t\t\t\t\tconst um = (aiChunk as any).usage_metadata;\n\t\t\t\t\t\tif (um) {\n\t\t\t\t\t\t\tusageMetadata.promptTokens += um.input_tokens || 0;\n\t\t\t\t\t\t\tusageMetadata.completionTokens += um.output_tokens || 0;\n\t\t\t\t\t\t\tusageMetadata.totalTokens += um.total_tokens || 0;\n\t\t\t\t\t\t\tusageMetadata.cachedPromptTokens += um.input_token_details?.cache_read || 0;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (aiChunk.tool_calls && aiChunk.tool_calls.length > 0) {\n\t\t\t\t\t\t\tfor (let tc of aiChunk.tool_calls)\n\t\t\t\t\t\t\t\ttoolCallUpdates[tc.id as string] = {\n\t\t\t\t\t\t\t\t\tname: tc.name,\n\t\t\t\t\t\t\t\t\targs: tc.args,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else if (aiChunk.content && aiChunk.content.toString().trim().length > 0)\n\t\t\t\t\t\t\tcontentBlocks.push({\n\t\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\t\toutput: aiChunk.content.toString(),\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * This is how we get the tool OUTPUTS that'll be\n\t\t\t\t * used in returned content blocks\n\t\t\t\t */\n\t\t\t\tif (update.tools?.messages) {\n\t\t\t\t\tconst toolMessages: ToolMessage[] = update.tools.messages.filter(\n\t\t\t\t\t\t(m) => m.type == 'tool',\n\t\t\t\t\t) as ToolMessage[];\n\n\t\t\t\t\tfor (let tm of toolMessages) {\n\t\t\t\t\t\tconst input = JSON.stringify(toolCallUpdates[tm.tool_call_id].args);\n\t\t\t\t\t\tconst toolCall = this.toolCalls.find((tc) => tc.id == tm.tool_call_id);\n\n\t\t\t\t\t\tif (this.shouldStreamToolEvent(tm.name as string))\n\t\t\t\t\t\t\tcontentBlocks.push({\n\t\t\t\t\t\t\t\ttype: 'tool_call',\n\t\t\t\t\t\t\t\tname: tm.name as string,\n\t\t\t\t\t\t\t\ttoolKit: this.getToolKitMeta(tm.name as string).toolKit,\n\t\t\t\t\t\t\t\ttoolKitIconUrl: this.getToolKitMeta(tm.name as string).toolKitIconUrl,\n\t\t\t\t\t\t\t\tinput: toolCall ? JSON.stringify(toolCall.input) : null,\n\t\t\t\t\t\t\t\toutput: tm.content.toString(),\n\t\t\t\t\t\t\t\ttoolCallId: tm.tool_call_id,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// console.error('\\n----------');\n\t\t\t\t// console.error('UPDATE');\n\t\t\t\t// console.error(JSON.stringify(data, null, 2));\n\t\t\t\t// console.error('----------\\n');\n\t\t\t} else if (mode == 'values') finalValue = data;\n\t\t}\n\n\t\tdebugLogStream('message_end', '\\n');\n\n\t\tyield { type: 'final_content', content: contentBlocks, usage: usageMetadata };\n\n\t\tyield { type: 'message_end' };\n\t}\n\n\tgetLangchainAgent(): ReactAgent {\n\t\treturn this.deepAgent;\n\t}\n\n\t/**\n\t * Tools have metadata fields that we can use\n\t * to get which toolKit this tool belongs to\n\t * and what's the toolKit's icon url.\n\t *\n\t * So we first find the tool using the tool's\n\t * name, then we extract the toolkit metadata\n\t * from that tool's metadata.\n\t */\n\tprivate getToolKitMeta(toolName: string): {\n\t\ttoolKit: string;\n\t\ttoolKitIconUrl: string;\n\t} {\n\t\tif (!this.tools)\n\t\t\treturn {\n\t\t\t\ttoolKit: '',\n\t\t\t\ttoolKitIconUrl: '',\n\t\t\t};\n\n\t\tconst tool = this.tools.find((t) => t.name === toolName);\n\n\t\tif (!tool) return { toolKit: '', toolKitIconUrl: '' };\n\n\t\treturn {\n\t\t\ttoolKit: tool.metadata?.toolKit as string,\n\t\t\ttoolKitIconUrl: tool.metadata?.toolKitIconUrl as string,\n\t\t};\n\t}\n\n\tprivate isToolCallMessage(message: BaseMessage): boolean {\n\t\tif (!(message instanceof AIMessageChunk)) return false;\n\n\t\tconst toolCallChunks = message.tool_call_chunks;\n\n\t\tif (!toolCallChunks) return false;\n\n\t\tif (toolCallChunks.length == 0) return false;\n\n\t\treturn true;\n\t}\n\n\tprivate shouldIgnoreMessage = (message: BaseMessage, metadata: any) => {\n\t\tif (message.id == '__remove_all__') return true;\n\n\t\t/**\n\t\t * For some reason there are AIMessageChunk messages\n\t\t * with empty content + no tool_call_chunks\n\t\t */\n\t\tif (!this.isToolCallMessage(message) && (!message.content || message.content.length == 0)) return true;\n\n\t\t/**\n\t\t * This is the tool selector middleware\n\t\t */\n\t\tif (metadata?.langgraph_node?.includes('patchToolCallsMiddleware')) return true;\n\n\t\tfor (const disabled of this.params.disableModelStreamingFor || [])\n\t\t\tif (metadata?.tags.includes(disabled)) return true;\n\n\t\treturn false;\n\t};\n\n\tprivate shouldStreamToolEvent(toolName: string): boolean {\n\t\tconst shouldStream = !this.params.disableToolStreamingFor?.includes(toolName);\n\n\t\tif (!shouldStream && ENABLE_STREAM_DEBUG_LOGS) console.warn('SUPPRESSING TOOL EVENT: ' + toolName);\n\n\t\treturn shouldStream;\n\t}\n}\n","import { ToolDefinition, ToolSpec } from '@core/agent.interface';\nimport { ToolProvider } from './tool-provider';\nimport { ToolCache } from '@core/tools/tool-cache';\n\ntype ProviderEntry<TContext> = {\n\ttype: 'provider';\n\tprovider: ToolProvider<TContext>;\n};\n\ntype StaticEntry = {\n\ttype: 'static';\n\ttools: ToolDefinition[];\n};\n\ntype Entry<TContext> = ProviderEntry<TContext> | StaticEntry;\n\nexport interface ToolRegistryOptions {\n\t/**\n\t * Shared cache for tool specs (e.g. Redis). Values are stored as JSON strings.\n\t */\n\ttoolSpecCache?: ToolCache;\n}\n\nexport class ToolRegistry<TContext> {\n\tprivate entries = new Map<string, Entry<TContext>>();\n\tprivate toolSpecCache?: ToolCache;\n\n\tconstructor(options: ToolRegistryOptions = {}) {\n\t\tthis.toolSpecCache = options.toolSpecCache;\n\t}\n\n\tregisterProvider(toolKit: string, provider: ToolProvider<TContext>): void {\n\t\tthis.entries.set(toolKit, { type: 'provider', provider });\n\t}\n\n\tregisterTools(toolKit: string, tools: ToolDefinition[]): void {\n\t\tthis.entries.set(toolKit, { type: 'static', tools });\n\t}\n\n\tasync getTools(toolKits: string[], context: TContext): Promise<ToolDefinition[]> {\n\t\tconst results: ToolDefinition[] = [];\n\n\t\tfor (const kit of toolKits) {\n\t\t\tconst entry = this.entries.get(kit);\n\t\t\tif (!entry) {\n\t\t\t\tthrow new Error(`No tools or provider registered for tool kit: ${kit}`);\n\t\t\t}\n\n\t\t\tif (entry.type === 'static') {\n\t\t\t\tresults.push(...entry.tools);\n\t\t\t} else {\n\t\t\t\tconst provider = entry.provider;\n\t\t\t\tconst specs = await this.getToolKitSpecs(kit, provider, context);\n\t\t\t\tconst tools = await provider.bindTools(specs, context);\n\t\t\t\tresults.push(...tools);\n\t\t\t}\n\t\t}\n\n\t\treturn results;\n\t}\n\n\tinvalidate(toolKit: string): void {\n\t\tconst entry = this.entries.get(toolKit);\n\n\t\tif (entry && entry.type === 'provider') this.toolSpecCache?.del(toolKit);\n\t}\n\n\tprivate async getToolKitSpecs(\n\t\ttoolKit: string,\n\t\tprovider: ToolProvider<TContext>,\n\t\tcontext: TContext,\n\t): Promise<ToolSpec[]> {\n\t\tconst cache = this.toolSpecCache;\n\n\t\tif (cache) {\n\t\t\ttry {\n\t\t\t\tconst cached = await cache.get(toolKit);\n\n\t\t\t\tif (cached) return cached;\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error('Something went wrong when hitting the cache', e);\n\t\t\t}\n\t\t}\n\n\t\tconst specs = (await provider.listToolKitSpecs(toolKit, context)) ?? [];\n\n\t\tif (cache) {\n\t\t\ttry {\n\t\t\t\tawait cache.set(toolKit, specs);\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error('Something went wrong when setting the cache', e);\n\t\t\t}\n\t\t}\n\n\t\treturn specs;\n\t}\n}\n","import { ToolSpec } from '@core/agent.interface';\nimport Redis from 'ioredis';\nimport { z } from 'zod';\n\nexport interface ToolCache {\n\tget(toolKit: string): Promise<ToolSpec[] | null> | ToolSpec[] | null;\n\n\tset(toolKit: string, specs: ToolSpec[]): Promise<void>;\n\n\tdel(toolKit: string): Promise<void>;\n}\n\nexport class RedisToolCache implements ToolCache {\n\tprivate redis: Redis;\n\n\tconstructor(connectionString: string) {\n\t\tthis.redis = new Redis(connectionString);\n\t}\n\n\tasync get(toolKit: string): Promise<ToolSpec[] | null> {\n\t\tconst data = await this.redis.get(`tool-cache:${toolKit}`);\n\n\t\tif (!data) return null;\n\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(data);\n\n\t\t\tif (!Array.isArray(parsed)) return null;\n\n\t\t\treturn parsed.map((spec: any) => ({\n\t\t\t\t...spec,\n\t\t\t\tinputSchema: z.fromJSONSchema(spec.inputSchema),\n\t\t\t}));\n\t\t} catch (e) {\n\t\t\tconsole.error('Failed to parse cached tools', e);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tasync set(toolKit: string, specs: ToolSpec[]): Promise<void> {\n\t\tconst serialized = specs.map((spec) => ({\n\t\t\t...spec,\n\t\t\tinputSchema: spec.inputSchema.toJSONSchema(),\n\t\t}));\n\t\tawait this.redis.set(`tool-cache:${toolKit}`, JSON.stringify(serialized));\n\t}\n\n\tasync del(toolKit: string): Promise<void> {\n\t\tawait this.redis.del(`tool-cache:${toolKit}`);\n\t}\n}\n\nexport class InMemoryToolCache implements ToolCache {\n\tprivate cache = new Map<string, ToolSpec[]>();\n\n\tget(toolKit: string): ToolSpec[] | null {\n\t\treturn this.cache.get(`tool-cache:${toolKit}`) ?? null;\n\t}\n\n\tasync set(toolKit: string, specs: ToolSpec[]): Promise<void> {\n\t\tthis.cache.set(`tool-cache:${toolKit}`, specs);\n\t}\n\n\tasync del(toolKit: string): Promise<void> {\n\t\tthis.cache.delete(`tool-cache:${toolKit}`);\n\t}\n}\n"],"mappings":"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","names":["node","limit","stringify","max","str","stringify","stringify","stringify","index","stringify","require_constants","path","require_utils","path","str","str","require_parse","opts","value","rest","str","source","path","str","state","require_picomatch","micromatch","str","path","yaml","res","res","anchors","node","path","str","i","end","str","limit","require_stringify","stringify","str","stringify","str","value","stringify","stringify","comment","str","map","seq","str","str","str","str","require_schema","str","str","pairs","omap","require_bool","require_float","str","require_int","str","n","set","str","res","require_schema","tags","stringify","path","res","value","end","tag","stringify","path","i","ch","start","fs","lineCounter","stringify","os","path","str","str","str","path","micromatch","basename","pattern","Stream","require_string","require_utils","fs","path","path","path","require_fs","fs","fs","path","queueMicrotask","require_constants","require_fs","require_utils","fs","require_async","path","require_sync","require_fs","fs","require_settings","path","fs","require_out","path","noop","errorHandler","context","require_common","require_async","require_async","require_stream","require_sync","require_sync","require_settings","path","require_out","require_reader","path","require_stream","require_async","require_entry","path","require_async","require_stream","require_sync","require_sync","require_settings","fs","os","require_out","FastGlob","posix","escapePath","convertPathToPattern","win32","limit","path","micromatch","result","toolTokenLimitBeforeEvict","z","getBackend","validateSkillName","yaml","crypto","APIError","str","Stream","APIPromise","parseResponse","Page","client","process","fetch","Messages","tool","isAutoParsableTool","hasAutoParseableInput","parseToolCall","inputTool","_EventStream_handleError","content","name","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionToolCall","_AbstractChatCompletionRunner_getFinalFunctionToolCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","ChatCompletionRunner","escape","e","ChatCompletionStream","_ChatCompletionStream_beginRequest","_ChatCompletionStream_getChoiceEventState","_ChatCompletionStream_addChunk","_ChatCompletionStream_emitToolCallDoneEvent","_ChatCompletionStream_emitContentDoneEvents","_ChatCompletionStream_endRequest","_ChatCompletionStream_getAutoParseableResponseFormat","_ChatCompletionStream_accumulateChatCompletion","_a","rest","refusal","index","id","assertNever","ChatCompletionStreamingRunner","Completions","MessagesAPI.Messages","CompletionsAPI.Completions","TranscriptionsAPI.Transcriptions","TranslationsAPI.Translations","SpeechAPI.Speech","Sessions","Realtime","SessionsAPI.Sessions","TranscriptionSessionsAPI.TranscriptionSessions","Threads","ThreadsAPI.Threads","_AssistantStream_addEvent","_AssistantStream_endRequest","_AssistantStream_handleMessage","_AssistantStream_handleRunStep","_AssistantStream_handleEvent","_AssistantStream_accumulateRunStep","_AssistantStream_accumulateMessage","_AssistantStream_accumulateContent","_AssistantStream_handleRun","Runs","StepsAPI.Steps","RunsAPI.Runs","RealtimeAPI.Realtime","ChatKitAPI.ChatKit","AssistantsAPI.Assistants","Files","ContentAPI.Content","FilesAPI.Files","ItemsAPI.Items","response","OutputItemsAPI.OutputItems","Graders","GradersAPI.Graders","Checkpoints","PermissionsAPI.Permissions","CheckpointsAPI.Checkpoints","MethodsAPI.Methods","JobsAPI.Jobs","AlphaAPI.Alpha","GraderModelsAPI.GraderModels","ClientSecretsAPI.ClientSecrets","CallsAPI.Calls","output","ResponseStream","_ResponseStream_beginRequest","_ResponseStream_addEvent","event","_ResponseStream_endRequest","_ResponseStream_accumulateResponse","InputItemsAPI.InputItems","InputTokensAPI.InputTokens","PartsAPI.Parts","FileBatchesAPI.FileBatches","_Webhooks_validateSecret","_Webhooks_getRequiredHeader","API.Completions","API.Chat","API.Embeddings","API.Files","API.Images","API.Audio","API.Moderations","API.Models","API.FineTuning","API.Graders","API.VectorStores","API.Webhooks","API.Beta","API.Batches","API.Uploads","API.Responses","API.Realtime","API.Conversations","API.Evals","API.Containers","API.Videos","Errors.OpenAIError","Shims.getDefaultFetch","Opts.FallbackEncoder","qs.stringify","opts","Errors.APIUserAbortError","Errors.APIConnectionTimeoutError","Errors.APIConnectionError","retryMessage","Shims.CancelReadableStream","Pagination.PagePromise","Shims.ReadableStreamFrom","_OpenAI_baseURLOverridden","Errors.APIError","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Errors.InvalidWebhookSignatureError","Uploads.toFile","UploadsAPIUploads","fsSync","path","limit","z","MAX_SKILL_FILE_SIZE","summarizationMiddleware","tool","ToolMessage","Command","createMiddleware","createMiddleware","Command","ToolMessage","input","tool","tool","options","summarizationMiddleware","z"]}
|
|
1
|
+
{"version":3,"sources":["../src/runtime/langchain/factory.ts","../src/runtime/langchain/agent.ts","../src/core/tools/tool-registry.ts","../src/core/tools/tool-cache.ts"],"sourcesContent":["import { AgentFactory, CreateAgentOptions } from '@core/agent.factory';\nimport { Agent } from '@core/agent.interface';\nimport { PostgresSaver } from '@langchain/langgraph-checkpoint-postgres';\n// @ts-ignore -_-\nimport { PostgresStore } from '@langchain/langgraph-checkpoint-postgres/store';\nimport { CompositeBackend, StateBackend, StoreBackend } from 'deepagents';\nimport { AgentMiddleware, llmToolSelectorMiddleware, summarizationMiddleware, tool } from 'langchain';\nimport { CreateOptions, LangchainAgent } from './agent';\nimport { LangchainModelConfig, LangchainModelResolver } from './model-resolver';\n\nexport interface PostgresSaverConfig {\n\tconnString: string;\n\tschema: string;\n}\n\nexport interface PostgresStoreConfig {\n\tconnString: string;\n\tschema: string;\n}\n\nexport class LangchainAgentFactory implements AgentFactory {\n\tprivate modelResolver: LangchainModelResolver;\n\n\tconstructor(\n\t\tprivate modelConfig: LangchainModelConfig,\n\t\tprivate saverConfig: PostgresSaverConfig,\n\t\tprivate storeConfig: PostgresStoreConfig,\n\t) {\n\t\tthis.modelResolver = new LangchainModelResolver(this.modelConfig);\n\t}\n\n\tprivate buildMemorySystemPrompt(slots: { name: string; usedFor: string }[]): string {\n\t\tconst lines = [\n\t\t\t'Long-term memory is enabled.',\n\t\t\t'Persist memories using the filesystem tools under these path prefixes:',\n\t\t\t...slots.map((slot) => {\n\t\t\t\tconst prefix = this.normalizeStoreRoutePrefix(slot.name);\n\t\t\t\treturn `- ${prefix}: ${slot.usedFor}`;\n\t\t\t}),\n\t\t];\n\n\t\treturn lines.join('\\n');\n\t}\n\n\tprivate buildHandoffsSystemPrompt(handoffs: { name: string; description: string }[]): string {\n\t\tconst lines = [\n\t\t\t'You can delegate tasks to the following subagents:',\n\t\t\t...handoffs.map((handoff) => `- ${handoff.name}: ${handoff.description}`),\n\t\t];\n\n\t\treturn lines.join('\\n');\n\t}\n\n\tprivate normalizeStoreRoutePrefix(prefix: string): string {\n\t\tconst trimmedPrefix = prefix.trim();\n\t\tif (trimmedPrefix.length === 0) {\n\t\t\tthrow new Error('Memory slot name cannot be empty');\n\t\t}\n\n\t\tconst withLeadingSlash = trimmedPrefix.startsWith('/') ? trimmedPrefix : `/${trimmedPrefix}`;\n\t\treturn withLeadingSlash.endsWith('/') ? withLeadingSlash : `${withLeadingSlash}/`;\n\t}\n\n\tasync createAgent(options: CreateAgentOptions): Promise<Agent> {\n\t\tlet deepAgentOptions: CreateOptions = {\n\t\t\tmodel: this.modelResolver.resolve(options.model),\n\t\t};\n\n\t\tlet middlewares: AgentMiddleware[] = [];\n\t\tlet systemPrompt = options.instructions ?? '';\n\t\tlet disableStreamingForTools: string[] = [\n\t\t\t'write_todos',\n\t\t\t'ls',\n\t\t\t'read_file',\n\t\t\t'write_file',\n\t\t\t'edit_file',\n\t\t\t'glob',\n\t\t\t'grep',\n\t\t\t'task',\n\t\t];\n\t\tlet disableReportingForTools: string[] = disableStreamingForTools;\n\t\tlet disableModelStreamingFor: string[] = [];\n\n\t\tif (options.history) {\n\t\t\tconst checkpointer = PostgresSaver.fromConnString(this.saverConfig.connString, {\n\t\t\t\tschema: this.saverConfig.schema,\n\t\t\t});\n\n\t\t\tawait checkpointer.setup();\n\n\t\t\tdeepAgentOptions.checkpointer = checkpointer;\n\t\t}\n\n\t\tif (options.memory) {\n\t\t\tconst memorySystemPrompt = this.buildMemorySystemPrompt(options.memory.slots);\n\t\t\tsystemPrompt = systemPrompt ? `${systemPrompt}\\n\\n${memorySystemPrompt}` : memorySystemPrompt;\n\n\t\t\tdeepAgentOptions.store = new PostgresStore({\n\t\t\t\tconnectionOptions: this.storeConfig.connString,\n\t\t\t\tschema: this.storeConfig.schema,\n\t\t\t\tensureTables: true,\n\t\t\t});\n\t\t\t/**\n\t\t\t * StateBackend for ephemeral storage\n\t\t\t * StoreBackend for persistent storage\n\t\t\t */\n\t\t\tdeepAgentOptions.backend = (config) => {\n\t\t\t\tconst configWithAssistantId = { ...config, assistantId: options.memory?.assistantId };\n\t\t\t\tconst storeBackend = new StoreBackend(configWithAssistantId);\n\t\t\t\tconst routes = Object.fromEntries(\n\t\t\t\t\t(options.memory?.slots ?? []).map((slot) => {\n\t\t\t\t\t\tconst routePrefix = this.normalizeStoreRoutePrefix(slot.name);\n\t\t\t\t\t\treturn [routePrefix, storeBackend];\n\t\t\t\t\t}),\n\t\t\t\t);\n\n\t\t\t\treturn new CompositeBackend(new StateBackend(configWithAssistantId), {\n\t\t\t\t\t...routes,\n\t\t\t\t});\n\t\t\t};\n\t\t}\n\n\t\tif (options.tools) {\n\t\t\tdeepAgentOptions.tools = options.tools.tools.map((t) =>\n\t\t\t\ttool(\n\t\t\t\t\tasync (input, options) => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst res = await t.exec(input);\n\n\t\t\t\t\t\t\tif (typeof res === 'string') return res;\n\n\t\t\t\t\t\t\treturn JSON.stringify(res);\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tconsole.error('Error executing tool:', e);\n\t\t\t\t\t\t\treturn 'Something went wrong while executing the tool.';\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: t.name,\n\t\t\t\t\t\tdescription: t.description,\n\t\t\t\t\t\tschema: t.inputSchema,\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\ttoolKit: t.toolKit,\n\t\t\t\t\t\t\ttoolKitIconUrl: t.toolKitIconUrl,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t);\n\t\t\tmiddlewares.push(\n\t\t\t\tllmToolSelectorMiddleware({\n\t\t\t\t\tmodel: this.modelResolver.resolve(options.tools.model, ['tool-selector']),\n\t\t\t\t\tmaxTools: 128,\n\t\t\t\t\talwaysInclude: options.tools.alwaysIncludeTools ?? undefined,\n\t\t\t\t}),\n\t\t\t);\n\t\t\tdisableModelStreamingFor.push('tool-selector');\n\t\t}\n\n\t\tif (options.summarization)\n\t\t\tmiddlewares.push(\n\t\t\t\tsummarizationMiddleware({\n\t\t\t\t\tmodel: this.modelResolver.resolve(options.summarization.model),\n\t\t\t\t\ttrigger: {\n\t\t\t\t\t\ttokens: options.summarization.triggerAtTokens,\n\t\t\t\t\t},\n\t\t\t\t\tkeep: {\n\t\t\t\t\t\tmessages: options.summarization.keepMessages,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t);\n\n\t\tif (options.handoffs) {\n\t\t\toptions.handoffs.every((h) => {\n\t\t\t\tif (!(h.agent instanceof LangchainAgent)) {\n\t\t\t\t\tthrow new Error('Handoff agent must be an instance of LangchainAgent');\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tconst handoffsSystemPrompt = this.buildHandoffsSystemPrompt(options.handoffs);\n\t\t\tsystemPrompt = systemPrompt ? `${systemPrompt}\\n\\n${handoffsSystemPrompt}` : handoffsSystemPrompt;\n\n\t\t\tdeepAgentOptions.subagents = options.handoffs.map((h) => {\n\t\t\t\treturn {\n\t\t\t\t\tname: h.name,\n\t\t\t\t\tdescription: h.description,\n\t\t\t\t\trunnable: (h.agent as LangchainAgent).getLangchainAgent(),\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\n\t\tif (middlewares.length > 0) deepAgentOptions.middleware = middlewares;\n\n\t\tif (systemPrompt) deepAgentOptions.systemPrompt = systemPrompt;\n\n\t\tdeepAgentOptions.disableModelStreamingFor = disableModelStreamingFor;\n\t\tdeepAgentOptions.disableToolReportingFor = disableReportingForTools;\n\t\tdeepAgentOptions.disableToolStreamingFor = disableStreamingForTools;\n\n\t\treturn new LangchainAgent(deepAgentOptions);\n\t}\n}\n","import {\n\tAgent,\n\tAgentResult,\n\tAgentRunInput,\n\tContentBlock,\n\tMessage,\n\tStreamEvent,\n\tToolCall,\n\tUsageMeta,\n} from '@core/agent.interface';\nimport { AIMessage, ToolCallChunk, ToolMessage } from '@langchain/core/messages';\nimport { Command } from '@langchain/langgraph';\nimport { createDeepAgent, CreateDeepAgentParams } from 'deepagents';\nimport {\n\tAgentMiddleware,\n\tAIMessageChunk,\n\tBaseMessage,\n\tcreateMiddleware,\n\tHumanMessage,\n\tReactAgent,\n\tStructuredTool,\n} from 'langchain';\nimport { convertToLangchainMessages } from './utils';\n\nconst ENABLE_STREAM_DEBUG_LOGS = false;\n\nfunction debugLogStream(type: StreamEvent['type'], text: string) {\n\tif (!ENABLE_STREAM_DEBUG_LOGS) return;\n\n\tconsole.warn(`${type}: ${text}`);\n}\n\nexport interface CreateOptions extends CreateDeepAgentParams {\n\t/**\n\t * Tool names to disable streaming for\n\t */\n\tdisableToolStreamingFor?: string[];\n\n\t/**\n\t * Tool names to disable streaming for\n\t */\n\tdisableToolReportingFor?: string[];\n\n\t/**\n\t * Model tags to disable streaming for\n\t */\n\tdisableModelStreamingFor?: string[];\n}\n\nexport class LangchainAgent implements Agent {\n\tprivate deepAgent: ReactAgent;\n\tprivate toolCalls: ToolCall[] = [];\n\tprivate tools?: StructuredTool[];\n\n\tconstructor(private params: CreateOptions) {\n\t\tthis.tools = params.tools;\n\n\t\tif (!params.disableModelStreamingFor) params.disableModelStreamingFor = [];\n\t\tif (!params.disableToolReportingFor) params.disableToolReportingFor = [];\n\t\tif (!params.disableToolStreamingFor) params.disableToolStreamingFor = [];\n\n\t\tlet middlewares: AgentMiddleware[] = [\n\t\t\tcreateMiddleware({\n\t\t\t\tname: 'toolCallsReporter',\n\t\t\t\twrapToolCall: async (request, handler) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst res = await handler(request);\n\n\t\t\t\t\t\tif (this.params.disableToolReportingFor?.includes(request.tool?.name as string)) return res;\n\n\t\t\t\t\t\tthis.toolCalls.push({\n\t\t\t\t\t\t\tid: request.toolCall.id as string,\n\t\t\t\t\t\t\tname: (request.tool?.name as string) || '',\n\t\t\t\t\t\t\tinput: request.toolCall.args,\n\t\t\t\t\t\t\toutput: res.toJSON(),\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * Wrapped tool may sometimes return Command objects\n\t\t\t\t\t\t * which should actually trigger the \"updates\" mode\n\t\t\t\t\t\t * of stream. But we don't want that to happen. We\n\t\t\t\t\t\t * want to emit tool_result events from a single place.\n\t\t\t\t\t\t * So we extract the tool message from the update and\n\t\t\t\t\t\t * command.update.messages and return that. That way\n\t\t\t\t\t\t * 'messages' stream mode is triggered\n\t\t\t\t\t\t *\n\t\t\t\t\t\t * Hopefully this won't cause any issues.\n\t\t\t\t\t\t */\n\t\t\t\t\t\tif (res instanceof Command) {\n\t\t\t\t\t\t\tconst resCast: {\n\t\t\t\t\t\t\t\tupdate?: {\n\t\t\t\t\t\t\t\t\tmessages?: BaseMessage[];\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t} = res as any;\n\n\t\t\t\t\t\t\tif (!resCast.update?.messages || resCast.update.messages.length == 0) return res;\n\n\t\t\t\t\t\t\tconst toolMessage = resCast.update.messages.find((m: BaseMessage) => m.type == 'tool');\n\n\t\t\t\t\t\t\tif (!toolMessage) return res;\n\n\t\t\t\t\t\t\treturn toolMessage as ToolMessage;\n\t\t\t\t\t\t} else return res;\n\t\t\t\t\t} catch (e: any) {\n\t\t\t\t\t\treturn new ToolMessage({\n\t\t\t\t\t\t\tname: request.toolCall.name,\n\t\t\t\t\t\t\tcontent: 'Something went wrong: ' + e.message,\n\t\t\t\t\t\t\ttool_call_id: request.toolCall.id || 'TOOL_CALL_ERROR',\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}),\n\t\t];\n\n\t\tif (params.middleware) middlewares = [...middlewares, ...params.middleware];\n\n\t\tparams.middleware = middlewares;\n\n\t\tthis.deepAgent = createDeepAgent(params);\n\t}\n\n\tasync run(input: AgentRunInput): Promise<AgentResult> {\n\t\tthis.toolCalls = []; // Reset tool calls for each run\n\n\t\t// Get current state to know how many messages existed before this turn\n\t\t// If no checkpointer is set, assume this is a fresh conversation\n\t\tlet messageCountBefore = 0;\n\t\ttry {\n\t\t\tconst stateBefore = await this.deepAgent.getState({\n\t\t\t\tconfigurable: {\n\t\t\t\t\tthreadId: input.threadId,\n\t\t\t\t\tthread_id: input.threadId,\n\t\t\t\t},\n\t\t\t});\n\t\t\tmessageCountBefore = (stateBefore as any)?.values?.messages?.length || 0;\n\t\t} catch {\n\t\t\t// No checkpointer set - this is fine, we'll count from 0\n\t\t}\n\n\t\tconst messages = convertToLangchainMessages(input.messages);\n\n\t\tconst result = await this.deepAgent.invoke(\n\t\t\t{\n\t\t\t\tmessages: messages,\n\t\t\t},\n\t\t\t{\n\t\t\t\tconfigurable: {\n\t\t\t\t\tthreadId: input.threadId,\n\t\t\t\t\tthread_id: input.threadId,\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\n\t\t// Only sum usage from messages added in this turn\n\t\tconst newMessages = result.messages.slice(messageCountBefore);\n\t\tconst messagesWithUsage = newMessages.filter((m: any) => m.usage_metadata != null);\n\n\t\tlet usage = {\n\t\t\tinput_tokens: 0,\n\t\t\toutput_tokens: 0,\n\t\t\ttotal_tokens: 0,\n\t\t\tcache_read: 0,\n\t\t};\n\n\t\tmessagesWithUsage.forEach((m: any) => {\n\t\t\tusage.input_tokens += m.usage_metadata.input_tokens || 0;\n\t\t\tusage.output_tokens += m.usage_metadata.output_tokens || 0;\n\t\t\tusage.total_tokens += m.usage_metadata.total_tokens || 0;\n\t\t\tusage.cache_read += m.usage_metadata.input_token_details?.cache_read || 0;\n\t\t});\n\n\t\t// Build content blocks from new messages\n\t\tconst contentBlocks: ContentBlock[] = [];\n\t\tconst toolCallInputs: { [toolCallId: string]: any } = {};\n\n\t\tfor (const msg of newMessages) {\n\t\t\tconst m = msg as any;\n\t\t\tif (m.type === 'ai') {\n\t\t\t\t// Store tool call inputs for later pairing\n\t\t\t\tif (m.tool_calls && m.tool_calls.length > 0) {\n\t\t\t\t\tfor (const tc of m.tool_calls) {\n\t\t\t\t\t\ttoolCallInputs[tc.id] = tc.args;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Add text content if present\n\t\t\t\tif (m.content && m.content.toString().trim().length > 0) {\n\t\t\t\t\tcontentBlocks.push({\n\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\toutput: m.content.toString(),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else if (m.type === 'tool') {\n\t\t\t\tcontentBlocks.push({\n\t\t\t\t\ttype: 'tool_call',\n\t\t\t\t\tname: m.name,\n\t\t\t\t\ttoolKit: this.getToolKitMeta(m.name).toolKit,\n\t\t\t\t\ttoolKitIconUrl: this.getToolKitMeta(m.name).toolKitIconUrl,\n\t\t\t\t\tinput: JSON.stringify(toolCallInputs[m.tool_call_id] || {}),\n\t\t\t\t\toutput: m.content.toString(),\n\t\t\t\t\ttoolCallId: m.tool_call_id,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tcontent: contentBlocks,\n\t\t\ttoolCalls: this.toolCalls,\n\t\t\tusage: {\n\t\t\t\tpromptTokens: usage.input_tokens,\n\t\t\t\tcompletionTokens: usage.output_tokens,\n\t\t\t\ttotalTokens: usage.total_tokens,\n\t\t\t\tcachedPromptTokens: usage.cache_read,\n\t\t\t},\n\t\t};\n\t}\n\n\tasync *stream(input: AgentRunInput): AsyncGenerator<StreamEvent> {\n\t\tthis.toolCalls = []; // Reset tool calls for each stream\n\t\tconst contentBlocks: ContentBlock[] = []; // this will be our final return value\n\t\tlet finalValue;\n\n\t\t// Initialize usage metadata - accumulated from updates mode (current turn only)\n\t\tlet usageMetadata: UsageMeta = {\n\t\t\tpromptTokens: 0,\n\t\t\tcompletionTokens: 0,\n\t\t\ttotalTokens: 0,\n\t\t\tcachedPromptTokens: 0,\n\t\t};\n\n\t\tconst messages = convertToLangchainMessages(input.messages);\n\n\t\tdebugLogStream('message_start', '');\n\n\t\t// Emit message start\n\t\tyield { type: 'message_start' };\n\n\t\tconst stream = await this.deepAgent.stream(\n\t\t\t{ messages },\n\t\t\t{\n\t\t\t\tconfigurable: {\n\t\t\t\t\tthreadId: input.threadId,\n\t\t\t\t\tthread_id: input.threadId,\n\t\t\t\t},\n\t\t\t\tstreamMode: ['messages', 'updates', 'values'],\n\t\t\t},\n\t\t);\n\n\t\tlet toolCalls: {\n\t\t\t[index: number]: {\n\t\t\t\ttoolCallId: string;\n\t\t\t\tname: string;\n\t\t\t};\n\t\t} = {};\n\t\tconst toolCallUpdates: {\n\t\t\t[toolCallId: string]: {\n\t\t\t\tname: string;\n\t\t\t\targs: any;\n\t\t\t};\n\t\t} = {};\n\n\t\t/**\n\t\t * Process chunks produced by the LLM\n\t\t */\n\t\tfor await (const chunk of stream) {\n\t\t\tconst [mode, data] = chunk;\n\n\t\t\tif (mode === 'messages') {\n\t\t\t\tconst [message, metadata] = data;\n\n\t\t\t\t/**\n\t\t\t\t * Some messages carry no meaningful information\n\t\t\t\t */\n\t\t\t\tif (this.shouldIgnoreMessage(message, metadata)) continue;\n\n\t\t\t\t/**\n\t\t\t\t * LLMs also stream the tool input tokens. If we see\n\t\t\t\t * tool_call_chunks inside the message, we know it's\n\t\t\t\t * a token stream for a tool call.\n\t\t\t\t */\n\t\t\t\tif (this.isToolCallMessage(message)) {\n\t\t\t\t\tconst aiMessage = message as AIMessageChunk;\n\t\t\t\t\tconst toolCallChunks = aiMessage.tool_call_chunks as ToolCallChunk[];\n\n\t\t\t\t\tfor (const toolChunk of toolCallChunks) {\n\t\t\t\t\t\tconst toolCallIndex = toolChunk.index as number;\n\n\t\t\t\t\t\tconst getToolCallInfo = () => {\n\t\t\t\t\t\t\treturn toolCalls[toolCallIndex];\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * On the first chunk, we get the tool name in\n\t\t\t\t\t\t * chunk.id. On sequential chunks this property\n\t\t\t\t\t\t * is set to defined. So if there is id in the\n\t\t\t\t\t\t * chunk; this is a tool_start event.\n\t\t\t\t\t\t *\n\t\t\t\t\t\t * Also different tool calls are separated using\n\t\t\t\t\t\t * the \"index\" property. This exists in all tool\n\t\t\t\t\t\t * chunk messages.\n\t\t\t\t\t\t */\n\t\t\t\t\t\tif (toolChunk.id) {\n\t\t\t\t\t\t\ttoolCalls[toolChunk.index as number] = {\n\t\t\t\t\t\t\t\ttoolCallId: toolChunk.id,\n\t\t\t\t\t\t\t\tname: toolChunk.name as string,\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tif (!this.shouldStreamToolEvent(getToolCallInfo().name)) continue;\n\n\t\t\t\t\t\t\tconst toolKitMeta = this.getToolKitMeta(getToolCallInfo().name);\n\n\t\t\t\t\t\t\tdebugLogStream('tool_start', `[${getToolCallInfo().toolCallId}] ${getToolCallInfo().name}`);\n\n\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\ttype: 'tool_start',\n\t\t\t\t\t\t\t\tname: getToolCallInfo().name,\n\t\t\t\t\t\t\t\ttoolKit: toolKitMeta.toolKit,\n\t\t\t\t\t\t\t\ttoolKitIconUrl: toolKitMeta.toolKitIconUrl,\n\t\t\t\t\t\t\t\tindex: toolCallIndex,\n\t\t\t\t\t\t\t\ttoolCallId: getToolCallInfo().toolCallId,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (toolChunk.args && toolChunk.args.length > 0) {\n\t\t\t\t\t\t\tif (!this.shouldStreamToolEvent(getToolCallInfo().name)) continue;\n\n\t\t\t\t\t\t\tdebugLogStream('tool_input_delta', `[${getToolCallInfo().toolCallId}] ${toolChunk.args}`);\n\n\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\ttype: 'tool_input_delta',\n\t\t\t\t\t\t\t\tname: getToolCallInfo().name,\n\t\t\t\t\t\t\t\targs: toolChunk.args || '',\n\t\t\t\t\t\t\t\tindex: toolCallIndex,\n\t\t\t\t\t\t\t\ttoolCallId: getToolCallInfo().toolCallId,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (message?.content && typeof message.content === 'string') {\n\t\t\t\t\tconst content = message.content;\n\n\t\t\t\t\tif (content.length === 0) continue;\n\n\t\t\t\t\tif (message.type == 'tool') {\n\t\t\t\t\t\t// I know it's odd but ToolMessage.name seems to corelate to the tool name\n\t\t\t\t\t\tconst toolName = message.name as string;\n\t\t\t\t\t\tconst toolKitMeta = this.getToolKitMeta(toolName);\n\n\t\t\t\t\t\tconst toolCall = Object.entries(toolCalls).find(\n\t\t\t\t\t\t\t([_, value]) => value.toolCallId == (message as ToolMessage).tool_call_id,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (!this.shouldStreamToolEvent(toolName)) continue;\n\n\t\t\t\t\t\tdebugLogStream('tool_result', `[${toolCall?.[1].toolCallId}] ${message.content}`);\n\n\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\t\t\tname: toolName,\n\t\t\t\t\t\t\tinput:\n\t\t\t\t\t\t\t\tJSON.stringify(\n\t\t\t\t\t\t\t\t\tthis.toolCalls.find((tc) => tc.id == (toolCall as any)[1].toolCallId)?.input,\n\t\t\t\t\t\t\t\t) || '',\n\t\t\t\t\t\t\toutput: message.content,\n\t\t\t\t\t\t\ttoolKit: toolKitMeta.toolKit,\n\t\t\t\t\t\t\ttoolKitIconUrl: toolKitMeta.toolKitIconUrl,\n\t\t\t\t\t\t\tindex: toolCall?.[0] ? parseInt(toolCall[0]) : 99999,\n\t\t\t\t\t\t\ttoolCallId: toolCall?.[1] ? toolCall[1].toolCallId : 'NO_ID_FOUND',\n\t\t\t\t\t\t};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdebugLogStream('text_delta', content);\n\n\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\ttype: 'text_delta',\n\t\t\t\t\t\t\tdelta: content,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn('Unexpected messages stream chunk', chunk);\n\t\t\t\t}\n\t\t\t} else if (mode == 'updates') {\n\t\t\t\tconst update = data;\n\n\t\t\t\t/**\n\t\t\t\t * This is how we get the tool INPUTS and llm\n\t\t\t\t * tokens that'll be used in returned content\n\t\t\t\t * blocks\n\t\t\t\t */\n\t\t\t\tif (update.model_request?.messages) {\n\t\t\t\t\tconst aiMessageChunks: AIMessageChunk[] = update.model_request.messages.filter(\n\t\t\t\t\t\t(m) => m.type == 'ai',\n\t\t\t\t\t) as AIMessageChunk[];\n\n\t\t\t\t\tfor (let aiChunk of aiMessageChunks) {\n\t\t\t\t\t\t// Accumulate usage metadata from current turn's AI messages\n\t\t\t\t\t\tconst um = (aiChunk as any).usage_metadata;\n\t\t\t\t\t\tif (um) {\n\t\t\t\t\t\t\tusageMetadata.promptTokens += um.input_tokens || 0;\n\t\t\t\t\t\t\tusageMetadata.completionTokens += um.output_tokens || 0;\n\t\t\t\t\t\t\tusageMetadata.totalTokens += um.total_tokens || 0;\n\t\t\t\t\t\t\tusageMetadata.cachedPromptTokens += um.input_token_details?.cache_read || 0;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (aiChunk.tool_calls && aiChunk.tool_calls.length > 0) {\n\t\t\t\t\t\t\tfor (let tc of aiChunk.tool_calls)\n\t\t\t\t\t\t\t\ttoolCallUpdates[tc.id as string] = {\n\t\t\t\t\t\t\t\t\tname: tc.name,\n\t\t\t\t\t\t\t\t\targs: tc.args,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else if (aiChunk.content && aiChunk.content.toString().trim().length > 0)\n\t\t\t\t\t\t\tcontentBlocks.push({\n\t\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\t\toutput: aiChunk.content.toString(),\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * This is how we get the tool OUTPUTS that'll be\n\t\t\t\t * used in returned content blocks\n\t\t\t\t */\n\t\t\t\tif (update.tools?.messages) {\n\t\t\t\t\tconst toolMessages: ToolMessage[] = update.tools.messages.filter(\n\t\t\t\t\t\t(m) => m.type == 'tool',\n\t\t\t\t\t) as ToolMessage[];\n\n\t\t\t\t\tfor (let tm of toolMessages) {\n\t\t\t\t\t\tconst input = JSON.stringify(toolCallUpdates[tm.tool_call_id].args);\n\t\t\t\t\t\tconst toolCall = this.toolCalls.find((tc) => tc.id == tm.tool_call_id);\n\n\t\t\t\t\t\tif (this.shouldStreamToolEvent(tm.name as string))\n\t\t\t\t\t\t\tcontentBlocks.push({\n\t\t\t\t\t\t\t\ttype: 'tool_call',\n\t\t\t\t\t\t\t\tname: tm.name as string,\n\t\t\t\t\t\t\t\ttoolKit: this.getToolKitMeta(tm.name as string).toolKit,\n\t\t\t\t\t\t\t\ttoolKitIconUrl: this.getToolKitMeta(tm.name as string).toolKitIconUrl,\n\t\t\t\t\t\t\t\tinput: toolCall ? JSON.stringify(toolCall.input) : null,\n\t\t\t\t\t\t\t\toutput: tm.content.toString(),\n\t\t\t\t\t\t\t\ttoolCallId: tm.tool_call_id,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// console.error('\\n----------');\n\t\t\t\t// console.error('UPDATE');\n\t\t\t\t// console.error(JSON.stringify(data, null, 2));\n\t\t\t\t// console.error('----------\\n');\n\t\t\t} else if (mode == 'values') finalValue = data;\n\t\t}\n\n\t\tdebugLogStream('message_end', '\\n');\n\n\t\tyield { type: 'final_content', content: contentBlocks, usage: usageMetadata };\n\n\t\tyield { type: 'message_end' };\n\t}\n\n\tgetLangchainAgent(): ReactAgent {\n\t\treturn this.deepAgent;\n\t}\n\n\t/**\n\t * Tools have metadata fields that we can use\n\t * to get which toolKit this tool belongs to\n\t * and what's the toolKit's icon url.\n\t *\n\t * So we first find the tool using the tool's\n\t * name, then we extract the toolkit metadata\n\t * from that tool's metadata.\n\t */\n\tprivate getToolKitMeta(toolName: string): {\n\t\ttoolKit: string;\n\t\ttoolKitIconUrl: string;\n\t} {\n\t\tif (!this.tools)\n\t\t\treturn {\n\t\t\t\ttoolKit: '',\n\t\t\t\ttoolKitIconUrl: '',\n\t\t\t};\n\n\t\tconst tool = this.tools.find((t) => t.name === toolName);\n\n\t\tif (!tool) return { toolKit: '', toolKitIconUrl: '' };\n\n\t\treturn {\n\t\t\ttoolKit: tool.metadata?.toolKit as string,\n\t\t\ttoolKitIconUrl: tool.metadata?.toolKitIconUrl as string,\n\t\t};\n\t}\n\n\tprivate isToolCallMessage(message: BaseMessage): boolean {\n\t\tif (!(message instanceof AIMessageChunk)) return false;\n\n\t\tconst toolCallChunks = message.tool_call_chunks;\n\n\t\tif (!toolCallChunks) return false;\n\n\t\tif (toolCallChunks.length == 0) return false;\n\n\t\treturn true;\n\t}\n\n\tprivate shouldIgnoreMessage = (message: BaseMessage, metadata: any) => {\n\t\tif (message.id == '__remove_all__') return true;\n\n\t\t/**\n\t\t * For some reason there are AIMessageChunk messages\n\t\t * with empty content + no tool_call_chunks\n\t\t */\n\t\tif (!this.isToolCallMessage(message) && (!message.content || message.content.length == 0)) return true;\n\n\t\t/**\n\t\t * This is the tool selector middleware\n\t\t */\n\t\tif (metadata?.langgraph_node?.includes('patchToolCallsMiddleware')) return true;\n\n\t\tfor (const disabled of this.params.disableModelStreamingFor || [])\n\t\t\tif (metadata?.tags.includes(disabled)) return true;\n\n\t\treturn false;\n\t};\n\n\tprivate shouldStreamToolEvent(toolName: string): boolean {\n\t\tconst shouldStream = !this.params.disableToolStreamingFor?.includes(toolName);\n\n\t\tif (!shouldStream && ENABLE_STREAM_DEBUG_LOGS) console.warn('SUPPRESSING TOOL EVENT: ' + toolName);\n\n\t\treturn shouldStream;\n\t}\n}\n","import { ToolDefinition, ToolSpec } from '@core/agent.interface';\nimport { ToolProvider } from './tool-provider';\nimport { ToolCache } from '@core/tools/tool-cache';\n\ntype ProviderEntry<TContext> = {\n\ttype: 'provider';\n\tprovider: ToolProvider<TContext>;\n};\n\ntype StaticEntry = {\n\ttype: 'static';\n\ttools: ToolDefinition[];\n};\n\ntype Entry<TContext> = ProviderEntry<TContext> | StaticEntry;\n\nexport interface ToolRegistryOptions {\n\t/**\n\t * Shared cache for tool specs (e.g. Redis). Values are stored as JSON strings.\n\t */\n\ttoolSpecCache?: ToolCache;\n}\n\nexport class ToolRegistry<TContext> {\n\tprivate entries = new Map<string, Entry<TContext>>();\n\tprivate toolSpecCache?: ToolCache;\n\n\tconstructor(options: ToolRegistryOptions = {}) {\n\t\tthis.toolSpecCache = options.toolSpecCache;\n\t}\n\n\tregisterProvider(toolKit: string, provider: ToolProvider<TContext>): void {\n\t\tthis.entries.set(toolKit, { type: 'provider', provider });\n\t}\n\n\tregisterTools(toolKit: string, tools: ToolDefinition[]): void {\n\t\tthis.entries.set(toolKit, { type: 'static', tools });\n\t}\n\n\tasync getTools(toolKits: string[], context: TContext): Promise<ToolDefinition[]> {\n\t\tconst results: ToolDefinition[] = [];\n\n\t\tfor (const kit of toolKits) {\n\t\t\tconst entry = this.entries.get(kit);\n\t\t\tif (!entry) {\n\t\t\t\tthrow new Error(`No tools or provider registered for tool kit: ${kit}`);\n\t\t\t}\n\n\t\t\tif (entry.type === 'static') {\n\t\t\t\tresults.push(...entry.tools);\n\t\t\t} else {\n\t\t\t\tconst provider = entry.provider;\n\t\t\t\tconst specs = await this.getToolKitSpecs(kit, provider, context);\n\t\t\t\tconst tools = await provider.bindTools(specs, context);\n\t\t\t\tresults.push(...tools);\n\t\t\t}\n\t\t}\n\n\t\treturn results;\n\t}\n\n\tinvalidate(toolKit: string): void {\n\t\tconst entry = this.entries.get(toolKit);\n\n\t\tif (entry && entry.type === 'provider') this.toolSpecCache?.del(toolKit);\n\t}\n\n\tprivate async getToolKitSpecs(\n\t\ttoolKit: string,\n\t\tprovider: ToolProvider<TContext>,\n\t\tcontext: TContext,\n\t): Promise<ToolSpec[]> {\n\t\tconst cache = this.toolSpecCache;\n\n\t\tif (cache) {\n\t\t\ttry {\n\t\t\t\tconst cached = await cache.get(toolKit);\n\n\t\t\t\tif (cached) return cached;\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error('Something went wrong when hitting the cache', e);\n\t\t\t}\n\t\t}\n\n\t\tconst specs = (await provider.listToolKitSpecs(toolKit, context)) ?? [];\n\n\t\tif (cache) {\n\t\t\ttry {\n\t\t\t\tawait cache.set(toolKit, specs);\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error('Something went wrong when setting the cache', e);\n\t\t\t}\n\t\t}\n\n\t\treturn specs;\n\t}\n}\n","import { ToolSpec } from '@core/agent.interface';\nimport Redis from 'ioredis';\nimport { z } from 'zod';\n\nexport interface ToolCache {\n\tget(toolKit: string): Promise<ToolSpec[] | null> | ToolSpec[] | null;\n\n\tset(toolKit: string, specs: ToolSpec[]): Promise<void>;\n\n\tdel(toolKit: string): Promise<void>;\n}\n\nexport class RedisToolCache implements ToolCache {\n\tprivate redis: Redis;\n\n\tconstructor(connectionString: string) {\n\t\tthis.redis = new Redis(connectionString);\n\t}\n\n\tasync get(toolKit: string): Promise<ToolSpec[] | null> {\n\t\tconst data = await this.redis.get(`tool-cache:${toolKit}`);\n\n\t\tif (!data) return null;\n\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(data);\n\n\t\t\tif (!Array.isArray(parsed)) return null;\n\n\t\t\treturn parsed.map((spec: any) => ({\n\t\t\t\t...spec,\n\t\t\t\tinputSchema: z.fromJSONSchema(spec.inputSchema),\n\t\t\t}));\n\t\t} catch (e) {\n\t\t\tconsole.error('Failed to parse cached tools', e);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tasync set(toolKit: string, specs: ToolSpec[]): Promise<void> {\n\t\tconst serialized = specs.map((spec) => ({\n\t\t\t...spec,\n\t\t\tinputSchema: spec.inputSchema.toJSONSchema(),\n\t\t}));\n\t\tawait this.redis.set(`tool-cache:${toolKit}`, JSON.stringify(serialized));\n\t}\n\n\tasync del(toolKit: string): Promise<void> {\n\t\tawait this.redis.del(`tool-cache:${toolKit}`);\n\t}\n}\n\nexport class InMemoryToolCache implements ToolCache {\n\tprivate cache = new Map<string, ToolSpec[]>();\n\n\tget(toolKit: string): ToolSpec[] | null {\n\t\treturn this.cache.get(`tool-cache:${toolKit}`) ?? null;\n\t}\n\n\tasync set(toolKit: string, specs: ToolSpec[]): Promise<void> {\n\t\tthis.cache.set(`tool-cache:${toolKit}`, specs);\n\t}\n\n\tasync del(toolKit: string): Promise<void> {\n\t\tthis.cache.delete(`tool-cache:${toolKit}`);\n\t}\n}\n"],"mappings":"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","names":["input","tool","options"]}
|