{"_id":"@dbos-inc/vercel-ai","_rev":"4-f08f6f3a0bb14a5da5c6549ac1eedffb","name":"@dbos-inc/vercel-ai","dist-tags":{"latest":"0.4.4"},"versions":{"0.1.5":{"name":"@dbos-inc/vercel-ai","version":"0.1.5","keywords":["dbos","ai","vercel","ai-sdk","durable-execution","workflow","llm","agent"],"license":"MIT","_id":"@dbos-inc/vercel-ai@0.1.5","maintainers":[{"name":"qianli.cs","email":"liqian.cs@gmail.com"},{"name":"kraftp","email":"peter.kraft@dbos.dev"},{"name":"chuck-dbos","email":"chuck.bear@dbos.dev"}],"homepage":"https://docs.dbos.dev/","bugs":{"url":"https://github.com/dbos-inc/dbos-vercel-ai/issues"},"dist":{"shasum":"ddb60ae111fc502d89796e92266b102ff87dce8c","tarball":"https://registry.npmjs.org/@dbos-inc/vercel-ai/-/vercel-ai-0.1.5.tgz","fileCount":23,"integrity":"sha512-oGp9/9Fk8hKJp7KoXkef8w6zg60ZkdUS8Hyo67toqubcdZeXApcni7n0P9YrkbS/0l9G+A+0Vo6lNWpj8rut0w==","signatures":[{"sig":"MEYCIQCrspHINnA7t2xum3oHOWreq+nwXZe+TwSzT92cWg/P+AIhAL+b0cGcFJBXzviNrpDQTxQ82XhSTuSVcOy7E+3S8m3V","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":105838},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=22"},"gitHead":"ab320762c70cbe3d24709c460a25de4db88d788b","scripts":{"lint":"tsc --noEmit","test":"tsx --test tests/*.test.mts","build":"tsc --project tsconfig.build.json","clean":"rm -rf dist","pretest":"npm run build","check:package":"npm run build && publint && attw --pack .","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"kraftp","email":"peter.kraft@dbos.dev"},"repository":{"url":"git+https://github.com/dbos-inc/dbos-vercel-ai.git","type":"git"},"_npmVersion":"10.9.8","description":"DBOS durable execution integration for the Vercel AI SDK","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.0","pg":"^8.22.0","tsx":"^4.20.0","zod":"^4.0.0","publint":"^0.3.0","@types/pg":"^8.20.0","typescript":"^5.8.0","@types/node":"^24.0.0","@ai-sdk/gateway":"^4.0.0","@ai-sdk/provider":"^4.0.0","@dbos-inc/dbos-sdk":"^4.23.6","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"ai":"^7.0.0","@dbos-inc/dbos-sdk":"^4.21.0"},"_npmOperationalInternal":{"tmp":"tmp/vercel-ai_0.1.5_1783454344902_0.530431422518213","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@dbos-inc/vercel-ai","version":"0.2.5","keywords":["dbos","ai","vercel","ai-sdk","durable-execution","workflow","llm","agent"],"license":"MIT","_id":"@dbos-inc/vercel-ai@0.2.5","maintainers":[{"name":"qianli.cs","email":"liqian.cs@gmail.com"},{"name":"kraftp","email":"peter.kraft@dbos.dev"},{"name":"chuck-dbos","email":"chuck.bear@dbos.dev"}],"homepage":"https://docs.dbos.dev/","bugs":{"url":"https://github.com/dbos-inc/dbos-vercel-ai/issues"},"dist":{"shasum":"6cb061646082ccfdcd90df9f1f4742a14267a8c0","tarball":"https://registry.npmjs.org/@dbos-inc/vercel-ai/-/vercel-ai-0.2.5.tgz","fileCount":23,"integrity":"sha512-8z9UIoa+foE4C58F/uZyckna1WxYyKsSl8h8VEp9QYq1aWLZDQUwOhffudJ7e1XfgapZQxHEC78N6jGGj6QGOg==","signatures":[{"sig":"MEUCIQCwZvU3PlNvoeyyIWyNVjOxBQI3h6NVYEhHsOdGrq+sDAIgI3GdXPLcO9GGQjQK0e7C3l6+VcQqGBt2e/jjA9dwa3I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFEGoP0hHXDI5o1eZcOY+JOS/+ZaO3oF+ssfMsQWaCsZAiBhYxevETp1FzVi0fWljTNNKkLoZGt/pHF0GJQXPfTRww==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":108704},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=22"},"gitHead":"3c695712c13351815c8c5f9b7e1e571a9a61e76a","scripts":{"lint":"tsc --noEmit","test":"tsx --test tests/*.test.mts","build":"tsc --project tsconfig.build.json","clean":"rm -rf dist","pretest":"npm run build","check:package":"npm run build && publint && attw --pack .","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"kraftp","email":"peter.kraft@dbos.dev"},"repository":{"url":"git+https://github.com/dbos-inc/dbos-vercel-ai.git","type":"git"},"_npmVersion":"10.9.8","description":"DBOS durable execution integration for the Vercel AI SDK","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.0","pg":"^8.22.0","tsx":"^4.20.0","zod":"^4.0.0","publint":"^0.3.0","@types/pg":"^8.20.0","typescript":"^5.8.0","@types/node":"^24.0.0","@ai-sdk/gateway":"^4.0.0","@ai-sdk/provider":"^4.0.0","@dbos-inc/dbos-sdk":"^5.0.2","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"ai":"^7.0.0","@dbos-inc/dbos-sdk":"^4.21.0 || ^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vercel-ai_0.2.5_1789582282617_0.23070331316986836","host":"s3://npm-registry-packages-npm-production"}},"0.3.7":{"name":"@dbos-inc/vercel-ai","version":"0.3.7","keywords":["dbos","ai","vercel","ai-sdk","durable-execution","workflow","llm","agent"],"license":"MIT","_id":"@dbos-inc/vercel-ai@0.3.7","maintainers":[{"name":"qianli.cs","email":"liqian.cs@gmail.com"},{"name":"kraftp","email":"peter.kraft@dbos.dev"},{"name":"chuck-dbos","email":"chuck.bear@dbos.dev"}],"homepage":"https://docs.dbos.dev/","bugs":{"url":"https://github.com/dbos-inc/dbos-vercel-ai/issues"},"dist":{"shasum":"11f51e6f25c148fe6e75088220c76692cbb40ad7","tarball":"https://registry.npmjs.org/@dbos-inc/vercel-ai/-/vercel-ai-0.3.7.tgz","fileCount":38,"integrity":"sha512-c21i9twpH5MEI1iNC6jZKmizGrjJXnSMpfNVicwvx6UUNq/Mm/MF73nRB2LSl3QcSUCl3PDd+r1DJN2PngDi9g==","signatures":[{"sig":"MEYCIQDzXVfBG9o/VjSR7hcJwrVn4y72Gp7SlugWNdxXBBfCQgIhAP3h3fU6ULD8OtpnqkhUP6sRtagAb5mwHVEJW23w91nG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDRVlC8Cpupps1MXTUMikKndK2XKE58hmLYBW0WRx7cngIhAPiY/1/ubCv5UiA/T69S98u5ljkC4bMMELipvoDGXxSF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":205859},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=22"},"gitHead":"986a1028ee9c3872a96d06cfe9c735aea2e110c3","scripts":{"lint":"tsc --noEmit","test":"tsx --test tests/*.test.mts","build":"tsc --project tsconfig.build.json","clean":"rm -rf dist","pretest":"npm run build","check:package":"npm run build && publint && attw --pack .","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"kraftp","email":"peter.kraft@dbos.dev"},"repository":{"url":"git+https://github.com/dbos-inc/dbos-vercel-ai.git","type":"git"},"_npmVersion":"10.9.8","description":"DBOS durable execution integration for the Vercel AI SDK","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.0","pg":"^8.22.0","tsx":"^4.20.0","zod":"^4.0.0","publint":"^0.3.0","@types/pg":"^8.20.0","typescript":"^5.8.0","@types/node":"^24.0.0","@ai-sdk/gateway":"^4.0.0","@ai-sdk/provider":"^4.0.0","@dbos-inc/dbos-sdk":"^5.0.2","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"ai":"^7.0.0","@dbos-inc/dbos-sdk":"^4.21.0 || ^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vercel-ai_0.3.7_1789776424238_0.24451344070217318","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"_id":"@dbos-inc/vercel-ai@0.4.4","bugs":{"url":"https://github.com/dbos-inc/dbos-vercel-ai/issues"},"dist":{"shasum":"2365d4ffd014eb96413383952c5a933c634a1dab","tarball":"https://registry.npmjs.org/@dbos-inc/vercel-ai/-/vercel-ai-0.4.4.tgz","fileCount":38,"integrity":"sha512-/Oyru6ml5CfmftyTvwgIJ/48WDjrCUdEK9vHEyFHDEYcmRc1zOafT0lEyK3f6yRcFHlhDMbaW56GSKJLUUP3EQ==","signatures":[{"sig":"MEUCID4q1izFoxJJY1YyG0yvsh5JZPBUhanqw1tDubhCF91ZAiEAh+4dDDP8CXMNtvDl5MBifMlpL7mSOQiHOBmflHRyC0g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHT0OMIjClA8kQ/mx2lzShlObyvzuM3BooyscZqCKX7LAiEAmvW5hCAc09yy8qf/+37hjnz0Ew3qngKgVvmzeHafvzE="}],"unpackedSize":208498},"main":"dist/index.js","name":"@dbos-inc/vercel-ai","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=22"},"gitHead":"5650da2a9b23c948ff354422ae6c19a995764f56","license":"MIT","scripts":{"lint":"tsc --noEmit","test":"tsx --test tests/*.test.mts","build":"tsc --project tsconfig.build.json","clean":"rm -rf dist","pretest":"npm run build","check:package":"npm run build && publint && attw --pack .","prepublishOnly":"npm run clean && npm run build"},"version":"0.4.4","_npmUser":{"name":"kraftp","email":"peter.kraft@dbos.dev"},"homepage":"https://docs.dbos.dev/","keywords":["dbos","ai","vercel","ai-sdk","durable-execution","workflow","llm","agent"],"repository":{"url":"git+https://github.com/dbos-inc/dbos-vercel-ai.git","type":"git"},"_npmVersion":"10.9.8","description":"DBOS durable execution integration for the Vercel AI SDK","directories":{},"maintainers":[{"name":"qianli.cs","email":"liqian.cs@gmail.com"},{"name":"kraftp","email":"peter.kraft@dbos.dev"},{"name":"chuck-dbos","email":"chuck.bear@dbos.dev"}],"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.0","pg":"^8.22.0","tsx":"^4.20.0","zod":"^4.0.0","publint":"^0.3.0","@types/pg":"^8.20.0","typescript":"^5.8.0","@types/node":"^24.0.0","@ai-sdk/gateway":"^4.0.0","@ai-sdk/provider":"^4.0.0","@dbos-inc/dbos-sdk":"^5.0.2","@arethetypeswrong/cli":"^0.18.0"},"peerDependencies":{"ai":"^7.0.0","@dbos-inc/dbos-sdk":"^4.21.0 || ^5.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vercel-ai_0.4.4_1790272916583_0.7575826848447222"}}},"time":{"created":"2026-07-07T19:59:04.750Z","modified":"2026-09-24T18:01:56.903Z","0.1.5":"2026-07-07T19:59:05.043Z","0.2.5":"2026-09-16T18:11:22.706Z","0.3.7":"2026-09-19T00:07:04.337Z","0.4.4":"2026-09-24T18:01:56.670Z"},"bugs":{"url":"https://github.com/dbos-inc/dbos-vercel-ai/issues"},"license":"MIT","homepage":"https://docs.dbos.dev/","keywords":["dbos","ai","vercel","ai-sdk","durable-execution","workflow","llm","agent"],"repository":{"url":"git+https://github.com/dbos-inc/dbos-vercel-ai.git","type":"git"},"description":"DBOS durable execution integration for the Vercel AI SDK","maintainers":[{"name":"qianli.cs","email":"liqian.cs@gmail.com"},{"name":"kraftp","email":"peter.kraft@dbos.dev"},{"name":"chuck-dbos","email":"chuck.bear@dbos.dev"}],"readme":"# @dbos-inc/vercel-ai\n\n[DBOS](https://docs.dbos.dev/) durable execution for the [Vercel AI SDK](https://ai-sdk.dev/).\n\nThis package makes AI SDK agents durable, backed by your Postgres database.\nAll you have to do is wrap your model with `durableCalls` and your tools with `durableTools` and run your agents inside a DBOS workflow.\nThen, this integration automatically checkpoints every action your agents take in Postgres.\nIf your process is interrupted, DBOS replays your agent from its checkpoints so it resumes from where it left off.\n\n```ts\nimport { DBOS } from '@dbos-inc/dbos-sdk';\nimport { generateText, wrapLanguageModel } from 'ai';\nimport { openai } from '@ai-sdk/openai';\nimport { durableCalls } from '@dbos-inc/vercel-ai';\n\nconst model = wrapLanguageModel({\n  model: openai('gpt-5'),\n  middleware: durableCalls({ retriesAllowed: true, maxAttempts: 5 }),\n});\n\nconst researchAgent = DBOS.registerWorkflow(\n  async (question: string) => {\n    const { text } = await generateText({\n      model,\n      prompt: question,\n      system: 'You are a helpful research assistant.',\n    });\n    return text;\n  },\n  { name: 'researchAgent' },\n);\n\nDBOS.setConfig({ name: 'my-agent', systemDatabaseUrl: process.env.DBOS_SYSTEM_DATABASE_URL });\nawait DBOS.launch();\n\nconsole.log(await researchAgent('Why did the agent cross the road?'));\n```\n\n## Installation\n\n```sh\nnpm install @dbos-inc/vercel-ai @dbos-inc/dbos-sdk ai\n```\n\nRequires DBOS v4.21+ or v5, AI SDK v7+, and a Postgres database for DBOS.\n\n## Durable Model Calls\n\nTo durably checkpoint each call you make to a model, wrap your model in `durableCalls`.\nThen, call your model or agent from a workflow:\n\n```ts\nimport { DBOS } from '@dbos-inc/dbos-sdk';\nimport { ToolLoopAgent, wrapLanguageModel } from 'ai';\nimport { openai } from '@ai-sdk/openai';\nimport { durableCalls } from '@dbos-inc/vercel-ai';\n\nconst model = wrapLanguageModel({ model: openai('gpt-5'), middleware: durableCalls() });\nconst agent = new ToolLoopAgent({ model, instructions: 'You are a helpful research assistant.', tools });\n\nconst researchAgent = DBOS.registerWorkflow(\n  async (question: string) => {\n    const result = await agent.stream({ prompt: question });\n    for await (const delta of result.textStream) process.stdout.write(delta);\n    return await result.text;\n  },\n  { name: 'researchAgent' },\n);\n```\n\nYou can parameterize `durableCalls` to configure model call retries and timeouts:\n\n```ts\ndurableCalls({\n  name?: string;              // step name (default: \"<provider>.<modelId>.<operation>\")\n  retriesAllowed?: boolean;   // retry failed model calls (default: true)\n  maxAttempts?: number;       // total attempts when retries are allowed (default: 3)\n  intervalSeconds?: number;   // delay before first retry (default: 1)\n  backoffRate?: number;       // exponential backoff multiplier (default: 2)\n  shouldRetry?: (error: unknown) => boolean;  // default: skip provider-declared non-retryable errors and aborts\n  timeoutMS?: number;         // per-attempt timeout\n  durableStream?: string;     // stream each call's output to this durable stream\n  include?: { requestBody?: boolean; responseBody?: boolean };  // checkpoint raw provider bodies; match generateText's `include` (default: false)\n});\n```\n\n## Durable Streams\n\nYou can **durably stream** agent or model output so it can be read by an external client or UI.\nTo do this, configure `durableCalls` or `durableTools`/`durableMCPTools` with a durable stream name:\n\n```ts\nimport { createUIMessageStreamResponse, streamText } from 'ai';\nimport { durableCalls, durableTools, readDurableStream } from '@dbos-inc/vercel-ai';\n\nconst model = wrapLanguageModel({ model: openai('gpt-5'), middleware: durableCalls({ durableStream: 'ui' }) });\nconst tools = durableTools(myTools, { durableStream: 'ui' });\n\nconst chatTurn = DBOS.registerWorkflow(async (messages: ModelMessage[]) => {\n  const result = streamText({ model, messages, tools, stopWhen: stepCountIs(10) });\n  return await result.text;\n}, { name: 'chatTurn' });\n\nconst handle = await DBOS.startWorkflow(chatTurn)(messages);\nreturn createUIMessageStreamResponse({\n  stream: readDurableStream({ workflowID: handle.workflowID, key: 'ui', messageId }),\n});\n```\n\nYou can read from a durable stream using `readDurableStream`, for example to stream it to a UI.\nIt emits a stream of AI SDK `UIMessageChunk`.\nYou can also pass a `DBOSClient` into `readDurableStream` to read it from a different process.\n\nYou can write your own data to a stream with `writeDurableStream(key, chunks)`.\nYour streams are closed when your workflow finishes; you can also close a stream early using `closeDurableStream`.\n\nIf a workflow is interrupted during a model call, when the workflow recovers, it restarts the model call and streams its output again.\nReaders that connect afterwards see the model's output once; live readers receive a transient `data-dbos-superseded` chunk indicating the model call has been restarted.\n\n## Durable Tools\n\nTo durably checkpoint your agents' tool calls, wrap them in `durableTools`:\n\n```ts\nimport { tool, stepCountIs } from 'ai';\nimport { durableTools } from '@dbos-inc/vercel-ai';\nimport { z } from 'zod';\n\nconst tools = durableTools({\n  getWeather: tool({\n    description: 'Get the weather for a city',\n    inputSchema: z.object({ city: z.string() }),\n    execute: ({ city }) => fetchWeather(city),\n  }),\n});\n\nconst agent = DBOS.registerWorkflow(async (question: string) => {\n  const result = await generateText({ model, prompt: question, tools, stopWhen: stepCountIs(10) });\n  return result.text;\n}, { name: 'weatherAgent' });\n```\n\nYou can pass step configuration (such as timeouts or retries) to `durableTools`.\nYou can set defaults for all tools or configure tools individually.\nRetries are off by default.\n\n```ts\nconst tools = durableTools(myTools, {\n  timeoutMS: 30_000,\n  tools: {\n    getWeather: { retriesAllowed: true, maxAttempts: 3 },\n  },\n});\n```\n\nWhen using durable tools, to ensure the ordering of parallel tool calls is consistent during recovery, do not await I/O in callbacks that run before a tool executes, such as `onToolExecutionStart`.\n\n### Durable MCP Tools\n\n`durableMCPTools` wraps an [MCP](https://modelcontextprotocol.io/) client (for example, from [`@ai-sdk/mcp`](https://www.npmjs.com/package/@ai-sdk/mcp)) so both the tool listing and every tool call run as durable steps:\n\n```ts\nimport { createMCPClient } from '@ai-sdk/mcp';\nimport { durableMCPTools } from '@dbos-inc/vercel-ai';\n\nconst agent = DBOS.registerWorkflow(async (question: string) => {\n  const mcpClient = await createMCPClient({ transport: { type: 'http', url: MCP_URL } });\n  const tools = await durableMCPTools(mcpClient);\n  const result = await generateText({ model, prompt: question, tools, stopWhen: stepCountIs(10) });\n  return result.text;\n}, { name: 'mcpAgent' });\n```\n\nTo use the client's explicit-schema mode (tool subsetting, typed inputs, output schemas), pass `toolOptions`; it is forwarded to `client.tools()` for both the listing and each tool call:\n\n```ts\nconst tools = await durableMCPTools(mcpClient, {\n  toolOptions: { schemas: { 'get-weather': { inputSchema: z.object({ city: z.string() }) } } },\n});\n```\n\n## Durable Subagents\n\nYou can delegate complex tasks to **subagents**, which act as tools for their \"parent\" agent.\nTo create a durable subagent, wrap your agent in `agentTool`, then pass it into `durableTools` just like any other tool:\n\n```ts\nimport { ToolLoopAgent } from 'ai';\nimport { agentTool, durableTools } from '@dbos-inc/vercel-ai';\n\nconst researcher = new ToolLoopAgent({ model, instructions: 'Research thoroughly.', tools: researchTools });\n\nconst research = agentTool({\n  name: 'research',                          // subagent name\n  description: 'Research a question in depth',\n  inputSchema: z.object({ question: z.string() }),\n  agent: researcher,\n  prompt: ({ question }) => question,        // tool input → prompt (or ModelMessage[])\n});\n\nconst tools = durableTools({ research, getWeather }, { durableStream: 'ui' });\nconst orchestrator = new ToolLoopAgent({ model, tools });\n```\n\nInternally, subagents are implemented as child workflows of the parent agent workflow, so each call has its own checkpoints and parallel calls are safe.\nCall `agentTool` before `DBOS.launch()`, since it registers that workflow.\nBy default, the tool returns the subagent's final text; you can configure this with the `output` parameter.\n\n## Durable Embedding Models\n\n`durableEmbeddingCalls` enables durable calls to embedding models:\n\n```ts\nimport { embedMany, wrapEmbeddingModel } from 'ai';\nimport { durableEmbeddingCalls } from '@dbos-inc/vercel-ai';\n\nconst embeddingModel = wrapEmbeddingModel({\n  model: openai.textEmbeddingModel('text-embedding-3-small'),\n  middleware: durableEmbeddingCalls({ retriesAllowed: true }),\n});\n\nconst { embeddings } = await embedMany({ model: embeddingModel, values: chunks });\n```\n\n## Durable Image Models\n\n`durableImageCalls` makes image generation durable:\n\n```ts\nimport { generateImage, wrapImageModel } from 'ai';\nimport { durableImageCalls } from '@dbos-inc/vercel-ai';\n\nconst imageModel = wrapImageModel({ model: openai.imageModel('gpt-image-1'), middleware: durableImageCalls() });\n\nconst { images } = await generateImage({ model: imageModel, prompt: 'a durable cat' });\n```\n\n","readmeFilename":"README.md"}