{"_id":"@agentkeeper-ai/runtime-sdk","_rev":"3-b87e6105a664219cdcd017f9d9eddaf0","name":"@agentkeeper-ai/runtime-sdk","dist-tags":{"beta":"0.1.0-beta.0","latest":"0.1.0-beta.2"},"versions":{"0.1.0-beta.0":{"name":"@agentkeeper-ai/runtime-sdk","version":"0.1.0-beta.0","keywords":["agentkeeper","ai-agent","runtime","security","monitoring"],"license":"Apache-2.0","_id":"@agentkeeper-ai/runtime-sdk@0.1.0-beta.0","maintainers":[{"name":"agentkeeper-dev","email":"jimmy+npm@rad.security"}],"dist":{"shasum":"483fabde425efe7016e78eec27c315cdf84aec26","tarball":"https://registry.npmjs.org/@agentkeeper-ai/runtime-sdk/-/runtime-sdk-0.1.0-beta.0.tgz","fileCount":4,"integrity":"sha512-vr8SPQaDoADjdA6s5073eu22EGYbttO6KqpJ9dE/F8h1uAKAYJ0r1p9n4Q244N0gULX5CperW9lFgZmisiqjJg==","signatures":[{"sig":"MEUCIBaS5ViUKND9ueI5kieFnn8Hckk75AjDnFw2RbwtM7IJAiEAveCr/7spXaFEplzNxGHb7Ge87VWKEoGstBBwmSFOook=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10084},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"test":"node --test test/*.test.mjs","pack:dry-run":"npm pack --dry-run --json"},"_npmUser":{"name":"agentkeeper-dev","email":"jimmy+npm@rad.security"},"_npmVersion":"10.9.2","description":"AgentKeeper Agent Runtime SDK Beta for app-embedded AI agents.","directories":{},"sideEffects":false,"_nodeVersion":"23.7.0","publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/runtime-sdk_0.1.0-beta.0_1779995622091_0.1729026380450409","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.1":{"name":"@agentkeeper-ai/runtime-sdk","version":"0.1.0-beta.1","keywords":["agentkeeper","ai-agent","runtime","security","monitoring"],"license":"Apache-2.0","_id":"@agentkeeper-ai/runtime-sdk@0.1.0-beta.1","maintainers":[{"name":"agentkeeper-dev","email":"jimmy+npm@rad.security"}],"homepage":"https://github.com/rad-security/agentkeeper-web#readme","bugs":{"url":"https://github.com/rad-security/agentkeeper-web/issues"},"dist":{"shasum":"b5310985be156813e2f90da355f59bcc8e07230f","tarball":"https://registry.npmjs.org/@agentkeeper-ai/runtime-sdk/-/runtime-sdk-0.1.0-beta.1.tgz","fileCount":4,"integrity":"sha512-3VE2yQC1d/T7Rr6Nr7GySMbkg+Rum3qHEkbJnRyzx8dmrMhYk4uFo8Q+j8909Ut5KOT6K8UiZD12F/L0pilHNA==","signatures":[{"sig":"MEUCIF+6jKYuJ3tPJsCzaNYBOrJuXfY4MmTsxje50cQUllgLAiEA8Lq7egiePc6mF3Ss8DO+kdG8PsfRTIGqK7HsbC8wB54=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":94397},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./bedrock":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./anthropic":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./langchain":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./langgraph":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./vercel-ai":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./azure-openai":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./openai-agents":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./claude-managed-agents":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"acd7c9f4ed74b40791d339b57a29c1b09442f7c5","scripts":{"test":"node --test test/*.test.mjs","pack:dry-run":"npm pack --dry-run --json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:29f5f214-f368-4049-a6b6-750c4b85652a"}},"repository":{"url":"git+https://github.com/rad-security/agentkeeper-web.git","type":"git","directory":"packages/runtime-sdk"},"_npmVersion":"11.13.0","description":"AgentKeeper Agent Runtime SDK for app-embedded TypeScript agents.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","publishConfig":{"tag":"beta","access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/runtime-sdk_0.1.0-beta.1_1781565558494_0.994272691328971","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.2":{"name":"@agentkeeper-ai/runtime-sdk","version":"0.1.0-beta.2","description":"AgentKeeper Agent Runtime SDK for app-embedded TypeScript agents.","type":"module","repository":{"type":"git","url":"git+https://github.com/rad-security/agentkeeper-web.git","directory":"packages/runtime-sdk"},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./vercel-ai":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./langchain":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./langgraph":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./bedrock":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./openai-agents":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./azure-openai":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./claude-managed-agents":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./anthropic":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":{"default":"./package.json"}},"sideEffects":false,"scripts":{"test":"node --test test/*.test.mjs","pack:dry-run":"npm pack --dry-run --json"},"keywords":["agentkeeper","ai-agent","runtime","security","monitoring"],"license":"Apache-2.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","tag":"beta"},"engines":{"node":">=18"},"gitHead":"253b4cba25a1d020a2ea9d3bd74abf442d6b2473","_id":"@agentkeeper-ai/runtime-sdk@0.1.0-beta.2","bugs":{"url":"https://github.com/rad-security/agentkeeper-web/issues"},"homepage":"https://github.com/rad-security/agentkeeper-web#readme","_nodeVersion":"24.16.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-M7fOVZLOFp53knEGQ45v05TcKEHp2uE3tnzD1KS6Y4uxd5QeIH/3UC+0tse39FLZSzjkQFBuF+tZE+p80VSYmA==","shasum":"0c0eadb3072b3e7d17ab69ef828f67d42d600f6c","tarball":"https://registry.npmjs.org/@agentkeeper-ai/runtime-sdk/-/runtime-sdk-0.1.0-beta.2.tgz","fileCount":4,"unpackedSize":96963,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHv2pgB/5Dg0Hx55nUSr20E3lFFfBj2ydeFv7QO/Mo8oAiBvYNHWv5oOt5jUY20RK5RVouOnhh9vtMAlO3/y1qc2Kw=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:29f5f214-f368-4049-a6b6-750c4b85652a"}},"directories":{},"maintainers":[{"name":"agentkeeper-dev","email":"jimmy+npm@rad.security"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/runtime-sdk_0.1.0-beta.2_1781591765491_0.783554372808507"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-28T19:13:41.932Z","modified":"2026-06-16T06:36:05.799Z","0.1.0-beta.0":"2026-05-28T19:13:42.252Z","0.1.0-beta.1":"2026-06-15T23:19:18.627Z","0.1.0-beta.2":"2026-06-16T06:36:05.635Z"},"bugs":{"url":"https://github.com/rad-security/agentkeeper-web/issues"},"license":"Apache-2.0","homepage":"https://github.com/rad-security/agentkeeper-web#readme","keywords":["agentkeeper","ai-agent","runtime","security","monitoring"],"repository":{"type":"git","url":"git+https://github.com/rad-security/agentkeeper-web.git","directory":"packages/runtime-sdk"},"description":"AgentKeeper Agent Runtime SDK for app-embedded TypeScript agents.","maintainers":[{"name":"agentkeeper-dev","email":"jimmy+npm@rad.security"}],"readme":"# AgentKeeper Agent Runtime SDK\n\nPackage for sending promptless TypeScript AI agent runtime events to AgentKeeper.\n\n```bash\nnpm install @agentkeeper-ai/runtime-sdk\n```\n\n> This pre-release package is published under the `@agentkeeper-ai` npm org. Use the normal install command so npm resolves the current `latest` build. It supports TypeScript integrations for Vercel AI SDK, LangChain, LangGraph, AWS Bedrock Runtime, OpenAI Agents SDK, Azure OpenAI, Claude Managed Agents, Anthropic SDK, and custom agents. Python support lives in the sibling `agentkeeper-runtime-sdk` package for custom agents, LangChain, LangGraph, boto3 Bedrock Runtime clients, OpenAI Agents SDK, Azure OpenAI, Claude Managed Agents, and Anthropic SDK. Vercel AI SDK remains TypeScript-only.\n\n## Usage\n\n```ts\nimport { createAgentKeeperRuntimeClient } from \"@agentkeeper-ai/runtime-sdk\";\n\nconst ak = createAgentKeeperRuntimeClient({\n  endpoint: \"https://agentkeeper.dev\",\n  apiKey: process.env.AGENTKEEPER_RUNTIME_SDK_KEY,\n  runtimeService: \"support-agent\",\n  runtimeEnvironment: process.env.VERCEL_ENV ?? \"local\",\n  runtimeIntegration: \"vercel_ai_sdk\",\n});\n\nak.track({\n  event_kind: \"runtime_heartbeat\",\n  capability: \"observe\",\n  evidence_summary: \"AI agent runtime connected\",\n});\n\nawait ak.flush();\n```\n\n## Vercel AI SDK\n\n`wrapVercelAISDK` injects AgentKeeper telemetry metadata, wraps tool `execute` functions, and keeps raw prompt, message, tool argument, and model output fields out of AgentKeeper events.\n\n```ts\nimport * as ai from \"ai\";\nimport { z } from \"zod\";\nimport {\n  createAgentKeeperRuntimeClient,\n  wrapVercelAISDK,\n} from \"@agentkeeper-ai/runtime-sdk/vercel-ai\";\n\nconst ak = createAgentKeeperRuntimeClient({\n  apiKey: process.env.AGENTKEEPER_RUNTIME_SDK_KEY,\n  runtimeService: \"support-agent\",\n  runtimeIntegration: \"vercel_ai_sdk\",\n});\n\nconst guardedAi = wrapVercelAISDK(ai, ak, {\n  evaluateTool: async () => ({ verdict: \"passed\" }),\n});\n\nconst lookupCustomer = ai.tool({\n  description: \"Look up a customer by id\",\n  inputSchema: z.object({ customerId: z.string() }),\n  execute: async ({ customerId }) => ({ customerId, tier: \"enterprise\" }),\n});\n\nawait guardedAi.generateText({\n  model: process.env.AI_MODEL ?? \"openai/gpt-5.5\",\n  tools: { lookupCustomer },\n  prompt: \"Check customer risk.\",\n});\n\nawait ak.flush();\n```\n\nYou can also pass `createVercelAITelemetry(ak)` in `experimental_telemetry.integrations` if you already manage your own AI SDK calls.\n\n## OpenAI Agents SDK\n\n`wrapOpenAIAgentsRun` observes run lifecycle without storing the input or final output. `wrapOpenAIAgentsTool` guards function tools before their `execute`/`invoke` boundary.\n\n```ts\nimport { Agent, run, tool } from \"@openai/agents\";\nimport { z } from \"zod\";\nimport {\n  createAgentKeeperRuntimeClient,\n  wrapOpenAIAgentsRun,\n  wrapOpenAIAgentsTool,\n} from \"@agentkeeper-ai/runtime-sdk/openai-agents\";\n\nconst ak = createAgentKeeperRuntimeClient({\n  apiKey: process.env.AGENTKEEPER_RUNTIME_SDK_KEY,\n  runtimeService: \"support-agent\",\n  runtimeIntegration: \"openai_agents\",\n});\n\nconst guardedRun = wrapOpenAIAgentsRun(run, ak);\nconst lookupCustomer = tool(wrapOpenAIAgentsTool({\n  name: \"lookup_customer\",\n  description: \"Look up a customer before support actions.\",\n  parameters: z.object({ customerId: z.string() }),\n  async execute({ customerId }) {\n    return { customerId, tier: \"enterprise\" };\n  },\n}, ak, {\n  evaluateTool: async () => ({ verdict: \"passed\" }),\n}));\n\nawait guardedRun(new Agent({\n  name: \"Support triage\",\n  tools: [lookupCustomer],\n}), \"Check customer risk.\");\n\nawait ak.flush();\n```\n\n## Azure OpenAI\n\nAzure OpenAI is model-only observation. The wrapper records safe metadata for `chat.completions.create()`, `responses.create()`, and `embeddings.create()`, including deployment/model name, operation, token counts, message/tool counts, and stream event counts. It does not store prompts, message arrays, inputs, outputs, or provider request/response bodies.\n\n```ts\nimport { AzureOpenAI } from \"openai\";\nimport {\n  createAgentKeeperRuntimeClient,\n  wrapAzureOpenAIClient,\n} from \"@agentkeeper-ai/runtime-sdk/azure-openai\";\n\nconst ak = createAgentKeeperRuntimeClient({\n  apiKey: process.env.AGENTKEEPER_RUNTIME_SDK_KEY,\n  runtimeService: \"support-agent\",\n  runtimeIntegration: \"azure_openai\",\n});\n\nconst deployment = process.env.AZURE_OPENAI_DEPLOYMENT ?? \"gpt-4o-mini\";\nconst azureOpenAI = wrapAzureOpenAIClient(\n  new AzureOpenAI({\n    apiKey: process.env.AZURE_OPENAI_API_KEY,\n    endpoint: process.env.AZURE_OPENAI_ENDPOINT,\n    apiVersion: process.env.AZURE_OPENAI_API_VERSION ?? \"2024-10-21\",\n    deployment,\n  }),\n  ak,\n);\n\nawait azureOpenAI.chat.completions.create({\n  model: deployment,\n  messages: [{ role: \"user\", content: \"Check customer risk.\" }],\n});\n\nawait ak.flush();\n```\n\n## Claude Managed Agents\n\n`wrapClaudeManagedAgentsClient` observes hosted Managed Agents lifecycle calls through Anthropic's SDK: `beta.agents.*`, `beta.environments.*`, `beta.sessions.*`, and `beta.sessions.events.*`. It records safe agent/session/event metadata, token usage when returned, stream event counts, tool names, and stop reasons. Hosted tool execution remains observe/post-run only; use a local guarded tool wrapper when your application executes side effects outside Anthropic's managed sandbox.\n\n```ts\nimport Anthropic from \"@anthropic-ai/sdk\";\nimport {\n  createAgentKeeperRuntimeClient,\n  wrapClaudeManagedAgentsClient,\n} from \"@agentkeeper-ai/runtime-sdk/claude-managed-agents\";\n\nconst ak = createAgentKeeperRuntimeClient({\n  apiKey: process.env.AGENTKEEPER_RUNTIME_SDK_KEY,\n  runtimeService: \"support-agent\",\n  runtimeIntegration: \"claude_managed_agents\",\n});\n\nconst client = wrapClaudeManagedAgentsClient(new Anthropic(), ak);\nconst agent = await client.beta.agents.create({\n  name: \"Support triage\",\n  model: process.env.ANTHROPIC_MANAGED_AGENT_MODEL ?? \"claude-sonnet-4-6\",\n  system: \"Help support engineers without exposing raw payloads.\",\n  tools: [{ type: \"agent_toolset_20260401\" }],\n});\n\nconst session = await client.beta.sessions.create({\n  agent: agent.id,\n  environment_id: process.env.ANTHROPIC_ENVIRONMENT_ID,\n  title: \"Support triage\",\n});\n\nconst stream = await client.beta.sessions.events.stream(session.id);\nawait client.beta.sessions.events.send(session.id, {\n  events: [{\n    type: \"user.message\",\n    content: [{ type: \"text\", text: \"Check customer risk.\" }],\n  }],\n});\n\nfor await (const event of stream) {\n  if (event.type === \"session.status_idle\") break;\n}\n\nawait ak.flush();\n```\n\n## Anthropic SDK\n\n`wrapAnthropicSDK` records model-only evidence for `messages.create()` and `messages.stream()`. It also wraps beta `client.beta.messages.toolRunner()` runnable tools so local `run(input)` functions can be guarded before side effects. Use `wrapAnthropicTool` for lower-level manual loops where your application executes a function after Claude emits a `tool_use` block.\n\n```ts\nimport Anthropic from \"@anthropic-ai/sdk\";\nimport {\n  createAgentKeeperRuntimeClient,\n  wrapAnthropicRunnableTool,\n  wrapAnthropicSDK,\n  wrapAnthropicTool,\n} from \"@agentkeeper-ai/runtime-sdk/anthropic\";\n\nconst ak = createAgentKeeperRuntimeClient({\n  apiKey: process.env.AGENTKEEPER_RUNTIME_SDK_KEY,\n  runtimeService: \"support-agent\",\n  runtimeIntegration: \"anthropic_sdk\",\n});\n\nconst anthropic = wrapAnthropicSDK(new Anthropic(), ak);\nconst lookupCustomer = wrapAnthropicRunnableTool({\n  name: \"lookup_customer\",\n  description: \"Look up a customer before support actions.\",\n  input_schema: {\n    type: \"object\",\n    properties: { customerId: { type: \"string\" } },\n    required: [\"customerId\"],\n  },\n  parse: (content) => content as { customerId: string },\n  async run({ customerId }: { customerId: string }) {\n    return JSON.stringify({ customerId, tier: \"enterprise\" });\n  },\n}, ak, {\n  evaluateTool: async () => ({ verdict: \"passed\" }),\n});\n\nconst finalMessage = await anthropic.beta.messages.toolRunner({\n  model: process.env.ANTHROPIC_MODEL ?? \"claude-sonnet-4-6\",\n  max_tokens: 1024,\n  tools: [lookupCustomer],\n  messages: [{ role: \"user\", content: \"Check customer risk.\" }],\n});\n\n// Manual Messages API loop alternative:\nconst manualLookupCustomer = wrapAnthropicTool(\"lookup_customer\", async ({ customerId }) => {\n  return { customerId, tier: \"enterprise\" };\n}, ak);\n\nconst message = await anthropic.messages.create({\n  model: process.env.ANTHROPIC_MODEL ?? \"claude-sonnet-4-6\",\n  max_tokens: 1024,\n  tools: [{\n    name: \"lookup_customer\",\n    description: \"Look up a customer before support actions.\",\n    input_schema: {\n      type: \"object\",\n      properties: { customerId: { type: \"string\" } },\n      required: [\"customerId\"],\n    },\n  }],\n  messages: [{ role: \"user\", content: \"Check customer risk.\" }],\n});\n\nfor (const block of message.content) {\n  if (block.type === \"tool_use\" && block.name === \"lookup_customer\") {\n    await manualLookupCustomer(block.input as { customerId: string });\n  }\n}\n\nawait ak.flush();\n```\n\n## Guarded Tools\n\n`wrapTool` evaluates before the wrapped function runs. If the evaluator returns `blocked`, the original function is not called.\n\n```ts\nconst getCustomer = ak.wrapTool(\"get_customer\", async ({ customerId }) => {\n  return { customerId, tier: \"enterprise\" };\n}, {\n  evaluate: async () => ({ verdict: \"passed\" }),\n});\n```\n\n## LangChain and LangGraph\n\nCallbacks observe chain/model/tool lifecycle events. Tool blocking requires wrapping the actual tool before it is passed to the agent or graph.\n\n```ts\nimport {\n  createAgentKeeperRuntimeClient,\n  createLangChainCallbackHandler,\n  createLangGraphCallbackHandler,\n  wrapLangChainTool,\n  wrapLangGraphTool,\n} from \"@agentkeeper-ai/runtime-sdk/langchain\";\n\nconst ak = createAgentKeeperRuntimeClient({\n  apiKey: process.env.AGENTKEEPER_RUNTIME_SDK_KEY,\n  runtimeService: \"support-agent\",\n  runtimeIntegration: \"langchain\",\n});\n\nconst callbacks = [createLangChainCallbackHandler(ak)];\nconst guardedTool = wrapLangChainTool(customerLookupTool, ak);\n\nawait chain.invoke({ input: \"Check customer risk.\" }, { callbacks });\nawait ak.flush();\n```\n\n## AWS Bedrock Runtime\n\nBedrock is model-only observation. The wrapper records model metadata and command names for `ConverseCommand` and `InvokeModelCommand`, not raw prompts or response bodies.\n\n```ts\nimport { BedrockRuntimeClient, ConverseCommand, InvokeModelCommand } from \"@aws-sdk/client-bedrock-runtime\";\nimport {\n  createAgentKeeperRuntimeClient,\n  wrapBedrockRuntimeClient,\n} from \"@agentkeeper-ai/runtime-sdk/bedrock\";\n\nconst ak = createAgentKeeperRuntimeClient({\n  apiKey: process.env.AGENTKEEPER_RUNTIME_SDK_KEY,\n  runtimeService: \"support-agent\",\n  runtimeIntegration: \"bedrock\",\n});\n\nconst bedrock = wrapBedrockRuntimeClient(\n  new BedrockRuntimeClient({ region: \"us-east-1\" }),\n  ak,\n);\n\nawait bedrock.send(new ConverseCommand({\n  modelId: \"anthropic.claude-3-5-sonnet-20241022-v2:0\",\n  messages: [{ role: \"user\", content: [{ text: \"Hello\" }] }],\n}));\n\nawait bedrock.send(new InvokeModelCommand({\n  modelId: \"anthropic.claude-3-5-sonnet-20241022-v2:0\",\n  contentType: \"application/json\",\n  body: JSON.stringify({\n    anthropic_version: \"bedrock-2023-05-31\",\n    max_tokens: 64,\n    messages: [{ role: \"user\", content: \"Hello\" }],\n  }),\n}));\n\nawait ak.flush();\n```\n\n## Privacy\n\nRaw prompts, assistant output, tool arguments, provider request bodies, provider response bodies, and file contents are rejected by default. Send redacted summaries, hashes, model names, tool names, token counts, domains, and structured detector evidence instead.\n\n## Verification\n\nFrom the Agentkeeper repo:\n\n```bash\nnpm --prefix packages/runtime-sdk test\nnpm --prefix web run verify:runtime-sdk-integrations\nnpm --prefix web run verify:runtime-sdk-integrations:registry\n```\n\nThe local verifier packs this package, installs it into a clean temporary app, installs real `ai`, LangChain, LangGraph, AWS Bedrock, OpenAI Agents SDK, OpenAI, and Anthropic SDK packages, and runs promptless integration contracts. The registry verifier must pass after publishing the current package.\n","readmeFilename":"README.md"}