@5ss/ai-tools 3.7.2 → 3.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/CHANGELOG.md +18 -1
  2. package/README.md +3 -2
  3. package/dist/{bedrock-agentcore-browser-yrEY9cUi.js → bedrock-agentcore-browser-DINOmO6a.js} +2 -2
  4. package/dist/{bedrock-agentcore-browser-yrEY9cUi.js.map → bedrock-agentcore-browser-DINOmO6a.js.map} +1 -1
  5. package/dist/{bedrock-agentcore-code-interpreter-BnJnDxCp.js → bedrock-agentcore-code-interpreter-Doon_lrN.js} +2 -2
  6. package/dist/{bedrock-agentcore-code-interpreter-BnJnDxCp.js.map → bedrock-agentcore-code-interpreter-Doon_lrN.js.map} +1 -1
  7. package/dist/{cloudflare-browser-D9pG4RTj.js → cloudflare-browser-Ct8U4_Ru.js} +3 -3
  8. package/dist/{cloudflare-browser-D9pG4RTj.js.map → cloudflare-browser-Ct8U4_Ru.js.map} +1 -1
  9. package/dist/{cloudflare-email-bsq902dg.js → cloudflare-email-oS9Ku8a6.js} +2 -2
  10. package/dist/{cloudflare-email-bsq902dg.js.map → cloudflare-email-oS9Ku8a6.js.map} +1 -1
  11. package/dist/{cloudflare-sandbox-DHE4fmiq.js → cloudflare-sandbox-kpfw9aT6.js} +3 -3
  12. package/dist/{cloudflare-sandbox-DHE4fmiq.js.map → cloudflare-sandbox-kpfw9aT6.js.map} +1 -1
  13. package/dist/core/index.js +1 -1
  14. package/dist/core/index.js.map +1 -1
  15. package/dist/{define-DdFALdNf.js → define-CbQI8dAN.js} +2 -1
  16. package/dist/{define-DdFALdNf.js.map → define-CbQI8dAN.js.map} +1 -1
  17. package/dist/{eventbridge-scheduler-ICepMPWG.js → eventbridge-scheduler-CTgSZgZZ.js} +2 -2
  18. package/dist/{eventbridge-scheduler-ICepMPWG.js.map → eventbridge-scheduler-CTgSZgZZ.js.map} +1 -1
  19. package/dist/{imessage-B-0DZfMa.js → imessage-u90N3KVq.js} +2 -2
  20. package/dist/{imessage-B-0DZfMa.js.map → imessage-u90N3KVq.js.map} +1 -1
  21. package/dist/index-ByHp3nZm.d.ts.map +1 -1
  22. package/dist/index-CZX5OeOF.d.ts.map +1 -1
  23. package/dist/{mastra-vector-qKG3L-Rw.js → mastra-vector-BillORtZ.js} +2 -2
  24. package/dist/{mastra-vector-qKG3L-Rw.js.map → mastra-vector-BillORtZ.js.map} +1 -1
  25. package/dist/modules/artifacts/index.js +2 -2
  26. package/dist/modules/browser/index.js +3 -3
  27. package/dist/modules/calendar/index.js +1 -1
  28. package/dist/modules/code-sandbox/index.js +3 -3
  29. package/dist/modules/content-type/index.js +1 -1
  30. package/dist/modules/crypto/index.js +1 -1
  31. package/dist/modules/document-extract/index.js +2 -2
  32. package/dist/modules/document-render/index.js +2 -2
  33. package/dist/modules/email/index.js +3 -3
  34. package/dist/modules/email-message/index.js +1 -1
  35. package/dist/modules/files/index.js +2 -2
  36. package/dist/modules/image/index.js +2 -2
  37. package/dist/modules/messaging/index.js +6 -6
  38. package/dist/modules/queue/index.js +2 -2
  39. package/dist/modules/rag/index.js +2 -2
  40. package/dist/modules/scheduler/index.js +2 -2
  41. package/dist/modules/skills/index.js +1 -1
  42. package/dist/modules/tasks/index.js +1 -1
  43. package/dist/modules/vector-store/index.js +1 -1
  44. package/dist/modules/web-fetch/index.js +1 -1
  45. package/dist/{pinecone-tmtu3ZS5.js → pinecone-CLetgKeA.js} +2 -2
  46. package/dist/{pinecone-tmtu3ZS5.js.map → pinecone-CLetgKeA.js.map} +1 -1
  47. package/dist/{qdrant-zbCHUsnv.js → qdrant-DhnitNEu.js} +2 -2
  48. package/dist/{qdrant-zbCHUsnv.js.map → qdrant-DhnitNEu.js.map} +1 -1
  49. package/dist/{resend-Cfgm4HuV.js → resend-BBrjcYvB.js} +2 -2
  50. package/dist/{resend-Cfgm4HuV.js.map → resend-BBrjcYvB.js.map} +1 -1
  51. package/dist/{s3-TKCIZZ2q.js → s3-BpivS7pv.js} +36 -21
  52. package/dist/s3-BpivS7pv.js.map +1 -0
  53. package/dist/{slack-D6XzBS3b.js → slack-D9OmRfO9.js} +2 -2
  54. package/dist/{slack-D6XzBS3b.js.map → slack-D9OmRfO9.js.map} +1 -1
  55. package/dist/{sqs-B50DWyTf.js → sqs-BPNYdTpw.js} +2 -2
  56. package/dist/{sqs-B50DWyTf.js.map → sqs-BPNYdTpw.js.map} +1 -1
  57. package/dist/{supabase-vector-CDKOyvj1.js → supabase-vector-wRNCS3GC.js} +2 -2
  58. package/dist/{supabase-vector-CDKOyvj1.js.map → supabase-vector-wRNCS3GC.js.map} +1 -1
  59. package/dist/{teams-bGfle6pU.js → teams-SteU8V5H.js} +2 -2
  60. package/dist/{teams-bGfle6pU.js.map → teams-SteU8V5H.js.map} +1 -1
  61. package/dist/{telegram-B-TZi9fM.js → telegram-Buo2ZFGj.js} +2 -2
  62. package/dist/{telegram-B-TZi9fM.js.map → telegram-Buo2ZFGj.js.map} +1 -1
  63. package/dist/{textract-CthgcP6w.js → textract-BCNadrCr.js} +3 -3
  64. package/dist/{textract-CthgcP6w.js.map → textract-BCNadrCr.js.map} +1 -1
  65. package/dist/{vector-store-DrwuMOne.js → vector-store-DvqvDSLb.js} +6 -6
  66. package/dist/{vector-store-DrwuMOne.js.map → vector-store-DvqvDSLb.js.map} +1 -1
  67. package/dist/vendors/amazon-sp-api/index.js +1 -1
  68. package/dist/vendors/bedrock-agentcore-browser/index.js +1 -1
  69. package/dist/vendors/bedrock-agentcore-code-interpreter/index.js +1 -1
  70. package/dist/vendors/cloudflare-browser/index.js +1 -1
  71. package/dist/vendors/cloudflare-email/index.js +1 -1
  72. package/dist/vendors/cloudflare-sandbox/index.js +1 -1
  73. package/dist/vendors/eventbridge-scheduler/index.js +1 -1
  74. package/dist/vendors/imessage/index.js +1 -1
  75. package/dist/vendors/katana/index.js +1 -1
  76. package/dist/vendors/mastra-vector/index.js +1 -1
  77. package/dist/vendors/pinecone/index.js +1 -1
  78. package/dist/vendors/qdrant/index.js +1 -1
  79. package/dist/vendors/resend/index.js +1 -1
  80. package/dist/vendors/s3/index.js +1 -1
  81. package/dist/vendors/shipstation/index.js +1 -1
  82. package/dist/vendors/slack/index.js +1 -1
  83. package/dist/vendors/sqs/index.js +1 -1
  84. package/dist/vendors/supabase-vector/index.js +1 -1
  85. package/dist/vendors/teams/index.js +1 -1
  86. package/dist/vendors/telegram/index.js +1 -1
  87. package/dist/vendors/textract/index.js +1 -1
  88. package/dist/vendors/walmart/index.d.ts +421 -0
  89. package/dist/vendors/walmart/index.d.ts.map +1 -0
  90. package/dist/vendors/walmart/index.js +517 -0
  91. package/dist/vendors/walmart/index.js.map +1 -0
  92. package/dist/vendors/woocommerce/index.js +1 -1
  93. package/logos/README.md +1 -0
  94. package/logos/pack-logos.json +1 -0
  95. package/logos/walmart.svg +8 -0
  96. package/package.json +6 -2
  97. package/dist/s3-TKCIZZ2q.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/core/bind.ts","../../src/generated/module-keys.ts","../../src/core/contracts.ts","../../src/core/catalog.ts"],"sourcesContent":["/**\n * Per-invocation auth/context bind for multi-tenant hosts.\n */\n\nimport { mergeToolContext } from './context'\nimport type { ToolSelection } from './filter-tools'\nimport { filterModuleTools } from './filter-tools'\nimport type { ToolHooks } from './hooks'\nimport { ToolError } from './errors'\nimport type { AuthDefinition, ModuleDefinition, ToolContext, ToolDefinition, ToolExecution } from './types'\n\nfunction assertAuth<TAuth>(auth: AuthDefinition<TAuth>, value: unknown): TAuth | undefined {\n\tif (auth.type === 'none') {\n\t\tif (value !== undefined) throw new ToolError('This tool does not accept auth', { code: 'bad_auth' })\n\t\treturn undefined\n\t}\n\tconst parsed = auth.schema.safeParse(value)\n\tif (!parsed.success) {\n\t\tthrow new ToolError('Invalid auth credentials', {\n\t\t\tcode: 'bad_auth',\n\t\t\tdetails: { issues: parsed.error.issues.map((i) => i.message) }\n\t\t})\n\t}\n\treturn parsed.data\n}\n\nexport type BindModuleOptions<TAuth = unknown> = {\n\tresolveAuth?: (ctx: ToolContext) => TAuth | Promise<TAuth>\n\tresolveContext?: (ctx: ToolContext) => ToolContext | Promise<ToolContext>\n\thooks?: ToolHooks\n\t/**\n\t * Restrict the tool surface after bind.\n\t * Prefer composable `onlyTools` / `exceptTools` when filtering outside bind.\n\t */\n\ttools?: ToolSelection\n}\n\nasync function resolveBoundContext<TAuth>(\n\tmoduleAuth: AuthDefinition<TAuth>,\n\tincoming: ToolContext,\n\toptions: BindModuleOptions<TAuth>\n): Promise<ToolContext> {\n\tconst base = options.resolveContext\n\t\t? mergeToolContext(incoming, await options.resolveContext(incoming))\n\t\t: { ...incoming }\n\tif (moduleAuth.type === 'none') return base\n\tif (!options.resolveAuth) {\n\t\tthrow new ToolError('resolveAuth is required for modules that declare auth', { code: 'bad_auth' })\n\t}\n\tconst auth = assertAuth(moduleAuth, await options.resolveAuth(base))\n\treturn {\n\t\t...base,\n\t\t...(auth !== undefined && { auth })\n\t}\n}\n\nexport function bindTool<TInput, TOutput, TAuth = unknown>(\n\ttool: ToolDefinition<TInput, TOutput>,\n\tmoduleAuth: AuthDefinition<TAuth>,\n\toptions: BindModuleOptions<TAuth>\n): ToolDefinition<TInput, TOutput> {\n\tconst previous = tool.execution ?? { run: tool.execute }\n\tconst bindContext = async (ctx: ToolContext): Promise<ToolContext> => {\n\t\tconst base = previous.bindContext ? await previous.bindContext(ctx) : ctx\n\t\treturn resolveBoundContext(moduleAuth, base, options)\n\t}\n\tconst execution: ToolExecution = {\n\t\t...previous,\n\t\tbindContext,\n\t\t...(options.hooks && { hooks: options.hooks })\n\t}\n\treturn {\n\t\t...tool,\n\t\texecution,\n\t\texecute: async (input, ctx) => execution.run(input, await bindContext(ctx))\n\t}\n}\n\nexport function bindModule<TAuth>(\n\tmodule: ModuleDefinition<TAuth>,\n\toptions: BindModuleOptions<TAuth>\n): ModuleDefinition<TAuth> {\n\tif (module.auth.type !== 'none' && !options.resolveAuth) {\n\t\tthrow new ToolError(`Module ${module.id} requires resolveAuth`, { code: 'bad_auth' })\n\t}\n\tconst scoped = options.tools !== undefined ? filterModuleTools(module, options.tools) : module\n\treturn {\n\t\t...scoped,\n\t\ttools: scoped.tools.map((tool) => bindTool(tool, scoped.auth, options))\n\t}\n}\n","// AUTO-GENERATED by `bun run codegen`. Do not edit by hand.\n/** Flat public export keys under src/{modules,vendors}. */\nexport const moduleKeys = [\n\t'amazon-sp-api',\n\t'artifacts',\n\t'bedrock-agentcore-browser',\n\t'bedrock-agentcore-code-interpreter',\n\t'browser',\n\t'calendar',\n\t'cloudflare-browser',\n\t'cloudflare-email',\n\t'cloudflare-sandbox',\n\t'code-sandbox',\n\t'content-type',\n\t'crypto',\n\t'document-extract',\n\t'document-render',\n\t'email',\n\t'email-message',\n\t'eventbridge-scheduler',\n\t'files',\n\t'image',\n\t'imessage',\n\t'katana',\n\t'mastra-vector',\n\t'messaging',\n\t'pinecone',\n\t'qdrant',\n\t'queue',\n\t'rag',\n\t'resend',\n\t's3',\n\t'scheduler',\n\t'shipstation',\n\t'skills',\n\t'slack',\n\t'sqs',\n\t'supabase-vector',\n\t'tasks',\n\t'teams',\n\t'telegram',\n\t'textract',\n\t'vector-store',\n\t'web-fetch',\n\t'woocommerce'\n] as const\n\nexport type ModuleKey = (typeof moduleKeys)[number]\n\n/** Capability seams under src/modules (brand-neutral model copy). */\nexport const moduleSeamKeys = [\n\t'artifacts',\n\t'browser',\n\t'calendar',\n\t'code-sandbox',\n\t'content-type',\n\t'crypto',\n\t'document-extract',\n\t'document-render',\n\t'email',\n\t'email-message',\n\t'files',\n\t'image',\n\t'messaging',\n\t'queue',\n\t'rag',\n\t'scheduler',\n\t'skills',\n\t'tasks',\n\t'vector-store',\n\t'web-fetch'\n] as const\n\nexport type ModuleSeamKey = (typeof moduleSeamKeys)[number]\n","import { flatMap, isPlainObject, isString } from 'es-toolkit'\nimport { isArray } from 'es-toolkit/compat'\nimport { toJSONSchema } from 'zod'\n\nimport { moduleSeamKeys } from '../generated/module-keys'\nimport type { ModuleDefinition, ToolDefinition } from './types'\nimport { duplicatesBy } from './unique'\n\nconst FORBIDDEN_MODEL_COPY =\n\t/\\b(api[_ ]?key|apiKey|bearer token|process\\.env|vault|secret key|authorization header|withAuth)\\b/i\n\n/**\n * Brand / vendor product names banned on **capability seam** model-facing copy\n * (module + tool description and input .describe()). Vendors may name their product.\n * Keep list brand-focused; avoid bare words like \"teams\" that appear in normal English.\n */\nconst FORBIDDEN_SEAM_BRAND_COPY =\n\t/\\b(Telegram|Slack|iMessage|Resend|Cloudflare|Textract|Pinecone|Qdrant|Supabase|WooCommerce|Katana|Amazon|Bot Framework|Microsoft Teams|Photon|Spectrum|Mastra|PgVector|OpenAI)\\b|\\bS3\\b|\\bR2\\b/\n\n/** Seam module ids from codegen (`src/modules/*` only — not hand-maintained). */\nconst SEAM_MODULE_IDS = new Set<string>(moduleSeamKeys)\n\nconst KEBAB_ID = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/\n\nexport type ContractIssue = {\n\tcode:\n\t\t| 'duplicate_tool_id'\n\t\t| 'empty_description'\n\t\t| 'empty_field_description'\n\t\t| 'forbidden_model_copy'\n\t\t| 'invalid_tool_id'\n\t\t| 'missing_name'\n\tmessage: string\n\tpath: string\n}\n\nexport type ContractResult = {\n\tok: boolean\n\tissues: ContractIssue[]\n}\n\nexport type CheckModelCopyOptions = {\n\t/** When true, also ban vendor brand names (capability seams). */\n\tseam?: boolean\n}\n\nfunction issue(path: string, code: ContractIssue['code'], message: string): ContractIssue {\n\treturn { path, code, message }\n}\n\nfunction checkModelCopy(\n\tpath: string,\n\ttext: string,\n\tissues: ContractIssue[],\n\toptions: CheckModelCopyOptions = {}\n): void {\n\tconst trimmed = text.trim()\n\tif (!trimmed) {\n\t\tissues.push(issue(path, 'empty_description', 'Model-facing description is empty'))\n\t\treturn\n\t}\n\tif (FORBIDDEN_MODEL_COPY.test(trimmed)) {\n\t\tissues.push(\n\t\t\tissue(\n\t\t\t\tpath,\n\t\t\t\t'forbidden_model_copy',\n\t\t\t\t'Model-facing copy must not mention credentials, env vars, vaults, or host wiring'\n\t\t\t)\n\t\t)\n\t}\n\tif (options.seam && FORBIDDEN_SEAM_BRAND_COPY.test(trimmed)) {\n\t\tissues.push(\n\t\t\tissue(\n\t\t\t\tpath,\n\t\t\t\t'forbidden_model_copy',\n\t\t\t\t'Seam model-facing copy must not name vendors or products (use channel / bound store / provider-neutral language)'\n\t\t\t)\n\t\t)\n\t}\n}\n\nfunction fieldDescribes(\n\tschema: ToolDefinition['inputSchema'],\n\tpath: string,\n\tissues: ContractIssue[],\n\toptions: CheckModelCopyOptions = {}\n): void {\n\tcheckFieldDescriptions(toJSONSchema(schema), `${path}.input`, issues, options)\n}\n\nfunction checkFieldDescriptions(\n\tschema: unknown,\n\tpath: string,\n\tissues: ContractIssue[],\n\toptions: CheckModelCopyOptions\n): void {\n\tif (!isPlainObject(schema)) return\n\tconst properties = schema['properties']\n\tif (isPlainObject(properties)) {\n\t\tfor (const [key, value] of Object.entries(properties)) {\n\t\t\tif (!isPlainObject(value)) continue\n\t\t\tconst fieldPath = `${path}.${key}`\n\t\t\tconst description = value['description']\n\t\t\tif (!isString(description) || description.trim().length === 0) {\n\t\t\t\tissues.push(\n\t\t\t\t\tissue(fieldPath, 'empty_field_description', `Input field \"${key}\" is missing a .describe() for the model`)\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\tcheckModelCopy(fieldPath, description, issues, options)\n\t\t\t}\n\t\t\tcheckFieldDescriptions(value, fieldPath, issues, options)\n\t\t}\n\t}\n\n\tfor (const [key, value] of Object.entries(schema)) {\n\t\tif (key === 'properties') continue\n\t\tif (isArray(value)) {\n\t\t\tfor (const [index, item] of value.entries()) {\n\t\t\t\tcheckFieldDescriptions(item, `${path}.${key}[${index}]`, issues, options)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tcheckFieldDescriptions(value, `${path}.${key}`, issues, options)\n\t}\n}\n\nexport function validateTool(\n\ttool: ToolDefinition,\n\tpathPrefix = tool.id,\n\toptions: CheckModelCopyOptions = {}\n): ContractResult {\n\tconst issues: ContractIssue[] = []\n\n\tif (!tool.id.trim() || !KEBAB_ID.test(tool.id)) {\n\t\tissues.push(issue(`${pathPrefix}.id`, 'invalid_tool_id', `Tool id must be kebab-case (got \"${tool.id}\")`))\n\t}\n\tif (!tool.name.trim()) {\n\t\tissues.push(issue(`${pathPrefix}.name`, 'missing_name', 'Tool name is required'))\n\t}\n\tcheckModelCopy(`${pathPrefix}.description`, tool.description, issues, options)\n\tfieldDescribes(tool.inputSchema, pathPrefix, issues, options)\n\n\treturn { ok: issues.length === 0, issues }\n}\n\nexport function validateModule(module: ModuleDefinition): ContractResult {\n\tconst issues: ContractIssue[] = []\n\tconst seam = SEAM_MODULE_IDS.has(module.id)\n\tconst copyOpts: CheckModelCopyOptions = seam ? { seam: true } : {}\n\n\tcheckModelCopy(`module.${module.id}.description`, module.description, issues, copyOpts)\n\n\tfor (const id of duplicatesBy(module.tools, (tool) => tool.id)) {\n\t\tissues.push(issue(`module.${module.id}.tools.${id}`, 'duplicate_tool_id', `Duplicate tool id \"${id}\"`))\n\t}\n\n\tissues.push(\n\t\t...flatMap(module.tools, (tool) => validateTool(tool, `module.${module.id}.tools.${tool.id}`, copyOpts).issues)\n\t)\n\n\treturn { ok: issues.length === 0, issues }\n}\n\nexport function assertContracts(result: ContractResult, label = 'contract'): void {\n\tif (result.ok) return\n\tconst detail = result.issues.map((i) => `${i.path}: ${i.message}`).join('\\n')\n\tthrow new Error(`${label} failed:\\n${detail}`)\n}\n","import { toJSONSchema } from 'zod'\n\nimport type { AuthDefinition, ModuleDefinition, ToolDefinition } from './types'\n\nexport type ToolCatalogEntry = {\n\tdescription: string\n\tid: string\n\tinputJsonSchema: Record<string, unknown>\n\tname: string\n\toutputJsonSchema: Record<string, unknown>\n\truntime: ToolDefinition['meta']['runtime']\n\tsideEffect: ToolDefinition['meta']['sideEffect']\n\ttags: readonly string[]\n\tidempotent?: boolean | undefined\n\tlongRunning?: boolean | undefined\n\trequiresConfirmation?: boolean | undefined\n\tsupportsCancel?: boolean | undefined\n\tsupportsProgress?: boolean | undefined\n\tnetwork?: boolean | undefined\n\tartifacts?: boolean | undefined\n}\n\nexport type ModuleCatalogEntry = {\n\tauthType: AuthDefinition<unknown>['type']\n\tdescription: string\n\tid: string\n\truntime: ModuleDefinition['runtime']\n\ttitle: string\n\ttools: ToolCatalogEntry[]\n\t/** Inline SVG when the pack has a logo. */\n\tlogo?: string | undefined\n\tcategories: readonly string[]\n\tclassification?: ModuleDefinition['classification']\n\ttags: readonly string[]\n}\n\nexport function toToolCatalogEntry(tool: ToolDefinition): ToolCatalogEntry {\n\treturn {\n\t\tid: tool.id,\n\t\tname: tool.name,\n\t\tdescription: tool.description,\n\t\truntime: tool.meta.runtime,\n\t\tsideEffect: tool.meta.sideEffect,\n\t\ttags: tool.meta.tags ?? [],\n\t\tidempotent: tool.meta.idempotent,\n\t\tlongRunning: tool.meta.longRunning,\n\t\trequiresConfirmation: tool.meta.requiresConfirmation,\n\t\tsupportsCancel: tool.meta.supportsCancel,\n\t\tsupportsProgress: tool.meta.supportsProgress,\n\t\tnetwork: tool.meta.network,\n\t\tartifacts: tool.meta.artifacts,\n\t\tinputJsonSchema: toJSONSchema(tool.inputSchema),\n\t\toutputJsonSchema: toJSONSchema(tool.outputSchema)\n\t}\n}\n\nexport function toModuleCatalogEntry(module: ModuleDefinition): ModuleCatalogEntry {\n\treturn {\n\t\tid: module.id,\n\t\ttitle: module.title,\n\t\tdescription: module.description,\n\t\truntime: module.runtime,\n\t\tauthType: module.auth.type,\n\t\ttools: module.tools.map(toToolCatalogEntry),\n\t\tcategories: module.categories,\n\t\ttags: module.tags ?? [],\n\t\t...(module.classification !== undefined && { classification: module.classification }),\n\t\t...(module.logo !== undefined && { logo: module.logo })\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/core/bind.ts","../../src/generated/module-keys.ts","../../src/core/contracts.ts","../../src/core/catalog.ts"],"sourcesContent":["/**\n * Per-invocation auth/context bind for multi-tenant hosts.\n */\n\nimport { mergeToolContext } from './context'\nimport type { ToolSelection } from './filter-tools'\nimport { filterModuleTools } from './filter-tools'\nimport type { ToolHooks } from './hooks'\nimport { ToolError } from './errors'\nimport type { AuthDefinition, ModuleDefinition, ToolContext, ToolDefinition, ToolExecution } from './types'\n\nfunction assertAuth<TAuth>(auth: AuthDefinition<TAuth>, value: unknown): TAuth | undefined {\n\tif (auth.type === 'none') {\n\t\tif (value !== undefined) throw new ToolError('This tool does not accept auth', { code: 'bad_auth' })\n\t\treturn undefined\n\t}\n\tconst parsed = auth.schema.safeParse(value)\n\tif (!parsed.success) {\n\t\tthrow new ToolError('Invalid auth credentials', {\n\t\t\tcode: 'bad_auth',\n\t\t\tdetails: { issues: parsed.error.issues.map((i) => i.message) }\n\t\t})\n\t}\n\treturn parsed.data\n}\n\nexport type BindModuleOptions<TAuth = unknown> = {\n\tresolveAuth?: (ctx: ToolContext) => TAuth | Promise<TAuth>\n\tresolveContext?: (ctx: ToolContext) => ToolContext | Promise<ToolContext>\n\thooks?: ToolHooks\n\t/**\n\t * Restrict the tool surface after bind.\n\t * Prefer composable `onlyTools` / `exceptTools` when filtering outside bind.\n\t */\n\ttools?: ToolSelection\n}\n\nasync function resolveBoundContext<TAuth>(\n\tmoduleAuth: AuthDefinition<TAuth>,\n\tincoming: ToolContext,\n\toptions: BindModuleOptions<TAuth>\n): Promise<ToolContext> {\n\tconst base = options.resolveContext\n\t\t? mergeToolContext(incoming, await options.resolveContext(incoming))\n\t\t: { ...incoming }\n\tif (moduleAuth.type === 'none') return base\n\tif (!options.resolveAuth) {\n\t\tthrow new ToolError('resolveAuth is required for modules that declare auth', { code: 'bad_auth' })\n\t}\n\tconst auth = assertAuth(moduleAuth, await options.resolveAuth(base))\n\treturn {\n\t\t...base,\n\t\t...(auth !== undefined && { auth })\n\t}\n}\n\nexport function bindTool<TInput, TOutput, TAuth = unknown>(\n\ttool: ToolDefinition<TInput, TOutput>,\n\tmoduleAuth: AuthDefinition<TAuth>,\n\toptions: BindModuleOptions<TAuth>\n): ToolDefinition<TInput, TOutput> {\n\tconst previous = tool.execution ?? { run: tool.execute }\n\tconst bindContext = async (ctx: ToolContext): Promise<ToolContext> => {\n\t\tconst base = previous.bindContext ? await previous.bindContext(ctx) : ctx\n\t\treturn resolveBoundContext(moduleAuth, base, options)\n\t}\n\tconst execution: ToolExecution = {\n\t\t...previous,\n\t\tbindContext,\n\t\t...(options.hooks && { hooks: options.hooks })\n\t}\n\treturn {\n\t\t...tool,\n\t\texecution,\n\t\texecute: async (input, ctx) => execution.run(input, await bindContext(ctx))\n\t}\n}\n\nexport function bindModule<TAuth>(\n\tmodule: ModuleDefinition<TAuth>,\n\toptions: BindModuleOptions<TAuth>\n): ModuleDefinition<TAuth> {\n\tif (module.auth.type !== 'none' && !options.resolveAuth) {\n\t\tthrow new ToolError(`Module ${module.id} requires resolveAuth`, { code: 'bad_auth' })\n\t}\n\tconst scoped = options.tools !== undefined ? filterModuleTools(module, options.tools) : module\n\treturn {\n\t\t...scoped,\n\t\ttools: scoped.tools.map((tool) => bindTool(tool, scoped.auth, options))\n\t}\n}\n","// AUTO-GENERATED by `bun run codegen`. Do not edit by hand.\n/** Flat public export keys under src/{modules,vendors}. */\nexport const moduleKeys = [\n\t'amazon-sp-api',\n\t'artifacts',\n\t'bedrock-agentcore-browser',\n\t'bedrock-agentcore-code-interpreter',\n\t'browser',\n\t'calendar',\n\t'cloudflare-browser',\n\t'cloudflare-email',\n\t'cloudflare-sandbox',\n\t'code-sandbox',\n\t'content-type',\n\t'crypto',\n\t'document-extract',\n\t'document-render',\n\t'email',\n\t'email-message',\n\t'eventbridge-scheduler',\n\t'files',\n\t'image',\n\t'imessage',\n\t'katana',\n\t'mastra-vector',\n\t'messaging',\n\t'pinecone',\n\t'qdrant',\n\t'queue',\n\t'rag',\n\t'resend',\n\t's3',\n\t'scheduler',\n\t'shipstation',\n\t'skills',\n\t'slack',\n\t'sqs',\n\t'supabase-vector',\n\t'tasks',\n\t'teams',\n\t'telegram',\n\t'textract',\n\t'vector-store',\n\t'walmart',\n\t'web-fetch',\n\t'woocommerce'\n] as const\n\nexport type ModuleKey = (typeof moduleKeys)[number]\n\n/** Capability seams under src/modules (brand-neutral model copy). */\nexport const moduleSeamKeys = [\n\t'artifacts',\n\t'browser',\n\t'calendar',\n\t'code-sandbox',\n\t'content-type',\n\t'crypto',\n\t'document-extract',\n\t'document-render',\n\t'email',\n\t'email-message',\n\t'files',\n\t'image',\n\t'messaging',\n\t'queue',\n\t'rag',\n\t'scheduler',\n\t'skills',\n\t'tasks',\n\t'vector-store',\n\t'web-fetch'\n] as const\n\nexport type ModuleSeamKey = (typeof moduleSeamKeys)[number]\n","import { flatMap, isPlainObject, isString } from 'es-toolkit'\nimport { isArray } from 'es-toolkit/compat'\nimport { toJSONSchema } from 'zod'\n\nimport { moduleSeamKeys } from '../generated/module-keys'\nimport type { ModuleDefinition, ToolDefinition } from './types'\nimport { duplicatesBy } from './unique'\n\nconst FORBIDDEN_MODEL_COPY =\n\t/\\b(api[_ ]?key|apiKey|bearer token|process\\.env|vault|secret key|authorization header|withAuth)\\b/i\n\n/**\n * Brand / vendor product names banned on **capability seam** model-facing copy\n * (module + tool description and input .describe()). Vendors may name their product.\n * Keep list brand-focused; avoid bare words like \"teams\" that appear in normal English.\n */\nconst FORBIDDEN_SEAM_BRAND_COPY =\n\t/\\b(Telegram|Slack|iMessage|Resend|Cloudflare|Textract|Pinecone|Qdrant|Supabase|WooCommerce|Katana|Amazon|Bot Framework|Microsoft Teams|Photon|Spectrum|Mastra|PgVector|OpenAI)\\b|\\bS3\\b|\\bR2\\b/\n\n/** Seam module ids from codegen (`src/modules/*` only — not hand-maintained). */\nconst SEAM_MODULE_IDS = new Set<string>(moduleSeamKeys)\n\nconst KEBAB_ID = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/\n\nexport type ContractIssue = {\n\tcode:\n\t\t| 'duplicate_tool_id'\n\t\t| 'empty_description'\n\t\t| 'empty_field_description'\n\t\t| 'forbidden_model_copy'\n\t\t| 'invalid_tool_id'\n\t\t| 'missing_name'\n\tmessage: string\n\tpath: string\n}\n\nexport type ContractResult = {\n\tok: boolean\n\tissues: ContractIssue[]\n}\n\nexport type CheckModelCopyOptions = {\n\t/** When true, also ban vendor brand names (capability seams). */\n\tseam?: boolean\n}\n\nfunction issue(path: string, code: ContractIssue['code'], message: string): ContractIssue {\n\treturn { path, code, message }\n}\n\nfunction checkModelCopy(\n\tpath: string,\n\ttext: string,\n\tissues: ContractIssue[],\n\toptions: CheckModelCopyOptions = {}\n): void {\n\tconst trimmed = text.trim()\n\tif (!trimmed) {\n\t\tissues.push(issue(path, 'empty_description', 'Model-facing description is empty'))\n\t\treturn\n\t}\n\tif (FORBIDDEN_MODEL_COPY.test(trimmed)) {\n\t\tissues.push(\n\t\t\tissue(\n\t\t\t\tpath,\n\t\t\t\t'forbidden_model_copy',\n\t\t\t\t'Model-facing copy must not mention credentials, env vars, vaults, or host wiring'\n\t\t\t)\n\t\t)\n\t}\n\tif (options.seam && FORBIDDEN_SEAM_BRAND_COPY.test(trimmed)) {\n\t\tissues.push(\n\t\t\tissue(\n\t\t\t\tpath,\n\t\t\t\t'forbidden_model_copy',\n\t\t\t\t'Seam model-facing copy must not name vendors or products (use channel / bound store / provider-neutral language)'\n\t\t\t)\n\t\t)\n\t}\n}\n\nfunction fieldDescribes(\n\tschema: ToolDefinition['inputSchema'],\n\tpath: string,\n\tissues: ContractIssue[],\n\toptions: CheckModelCopyOptions = {}\n): void {\n\tcheckFieldDescriptions(toJSONSchema(schema), `${path}.input`, issues, options)\n}\n\nfunction checkFieldDescriptions(\n\tschema: unknown,\n\tpath: string,\n\tissues: ContractIssue[],\n\toptions: CheckModelCopyOptions\n): void {\n\tif (!isPlainObject(schema)) return\n\tconst properties = schema['properties']\n\tif (isPlainObject(properties)) {\n\t\tfor (const [key, value] of Object.entries(properties)) {\n\t\t\tif (!isPlainObject(value)) continue\n\t\t\tconst fieldPath = `${path}.${key}`\n\t\t\tconst description = value['description']\n\t\t\tif (!isString(description) || description.trim().length === 0) {\n\t\t\t\tissues.push(\n\t\t\t\t\tissue(fieldPath, 'empty_field_description', `Input field \"${key}\" is missing a .describe() for the model`)\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\tcheckModelCopy(fieldPath, description, issues, options)\n\t\t\t}\n\t\t\tcheckFieldDescriptions(value, fieldPath, issues, options)\n\t\t}\n\t}\n\n\tfor (const [key, value] of Object.entries(schema)) {\n\t\tif (key === 'properties') continue\n\t\tif (isArray(value)) {\n\t\t\tfor (const [index, item] of value.entries()) {\n\t\t\t\tcheckFieldDescriptions(item, `${path}.${key}[${index}]`, issues, options)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tcheckFieldDescriptions(value, `${path}.${key}`, issues, options)\n\t}\n}\n\nexport function validateTool(\n\ttool: ToolDefinition,\n\tpathPrefix = tool.id,\n\toptions: CheckModelCopyOptions = {}\n): ContractResult {\n\tconst issues: ContractIssue[] = []\n\n\tif (!tool.id.trim() || !KEBAB_ID.test(tool.id)) {\n\t\tissues.push(issue(`${pathPrefix}.id`, 'invalid_tool_id', `Tool id must be kebab-case (got \"${tool.id}\")`))\n\t}\n\tif (!tool.name.trim()) {\n\t\tissues.push(issue(`${pathPrefix}.name`, 'missing_name', 'Tool name is required'))\n\t}\n\tcheckModelCopy(`${pathPrefix}.description`, tool.description, issues, options)\n\tfieldDescribes(tool.inputSchema, pathPrefix, issues, options)\n\n\treturn { ok: issues.length === 0, issues }\n}\n\nexport function validateModule(module: ModuleDefinition): ContractResult {\n\tconst issues: ContractIssue[] = []\n\tconst seam = SEAM_MODULE_IDS.has(module.id)\n\tconst copyOpts: CheckModelCopyOptions = seam ? { seam: true } : {}\n\n\tcheckModelCopy(`module.${module.id}.description`, module.description, issues, copyOpts)\n\n\tfor (const id of duplicatesBy(module.tools, (tool) => tool.id)) {\n\t\tissues.push(issue(`module.${module.id}.tools.${id}`, 'duplicate_tool_id', `Duplicate tool id \"${id}\"`))\n\t}\n\n\tissues.push(\n\t\t...flatMap(module.tools, (tool) => validateTool(tool, `module.${module.id}.tools.${tool.id}`, copyOpts).issues)\n\t)\n\n\treturn { ok: issues.length === 0, issues }\n}\n\nexport function assertContracts(result: ContractResult, label = 'contract'): void {\n\tif (result.ok) return\n\tconst detail = result.issues.map((i) => `${i.path}: ${i.message}`).join('\\n')\n\tthrow new Error(`${label} failed:\\n${detail}`)\n}\n","import { toJSONSchema } from 'zod'\n\nimport type { AuthDefinition, ModuleDefinition, ToolDefinition } from './types'\n\nexport type ToolCatalogEntry = {\n\tdescription: string\n\tid: string\n\tinputJsonSchema: Record<string, unknown>\n\tname: string\n\toutputJsonSchema: Record<string, unknown>\n\truntime: ToolDefinition['meta']['runtime']\n\tsideEffect: ToolDefinition['meta']['sideEffect']\n\ttags: readonly string[]\n\tidempotent?: boolean | undefined\n\tlongRunning?: boolean | undefined\n\trequiresConfirmation?: boolean | undefined\n\tsupportsCancel?: boolean | undefined\n\tsupportsProgress?: boolean | undefined\n\tnetwork?: boolean | undefined\n\tartifacts?: boolean | undefined\n}\n\nexport type ModuleCatalogEntry = {\n\tauthType: AuthDefinition<unknown>['type']\n\tdescription: string\n\tid: string\n\truntime: ModuleDefinition['runtime']\n\ttitle: string\n\ttools: ToolCatalogEntry[]\n\t/** Inline SVG when the pack has a logo. */\n\tlogo?: string | undefined\n\tcategories: readonly string[]\n\tclassification?: ModuleDefinition['classification']\n\ttags: readonly string[]\n}\n\nexport function toToolCatalogEntry(tool: ToolDefinition): ToolCatalogEntry {\n\treturn {\n\t\tid: tool.id,\n\t\tname: tool.name,\n\t\tdescription: tool.description,\n\t\truntime: tool.meta.runtime,\n\t\tsideEffect: tool.meta.sideEffect,\n\t\ttags: tool.meta.tags ?? [],\n\t\tidempotent: tool.meta.idempotent,\n\t\tlongRunning: tool.meta.longRunning,\n\t\trequiresConfirmation: tool.meta.requiresConfirmation,\n\t\tsupportsCancel: tool.meta.supportsCancel,\n\t\tsupportsProgress: tool.meta.supportsProgress,\n\t\tnetwork: tool.meta.network,\n\t\tartifacts: tool.meta.artifacts,\n\t\tinputJsonSchema: toJSONSchema(tool.inputSchema),\n\t\toutputJsonSchema: toJSONSchema(tool.outputSchema)\n\t}\n}\n\nexport function toModuleCatalogEntry(module: ModuleDefinition): ModuleCatalogEntry {\n\treturn {\n\t\tid: module.id,\n\t\ttitle: module.title,\n\t\tdescription: module.description,\n\t\truntime: module.runtime,\n\t\tauthType: module.auth.type,\n\t\ttools: module.tools.map(toToolCatalogEntry),\n\t\tcategories: module.categories,\n\t\ttags: module.tags ?? [],\n\t\t...(module.classification !== undefined && { classification: module.classification }),\n\t\t...(module.logo !== undefined && { logo: module.logo })\n\t}\n}\n"],"mappings":"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"}
@@ -43,6 +43,7 @@ const packLogosByModuleId = {
43
43
  telegram: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 1000 1000\">\n <defs>\n <linearGradient id=\"g\" x1=\"50%\" x2=\"50%\" y1=\"0%\" y2=\"99.2583404%\">\n <stop offset=\"0%\" stop-color=\"#2AABEE\" />\n <stop offset=\"100%\" stop-color=\"#229ED9\" />\n </linearGradient>\n </defs>\n <circle cx=\"500\" cy=\"500\" r=\"500\" fill=\"url(#g)\" />\n <path fill=\"#FFF\" fill-rule=\"evenodd\" d=\"M226.328419,494.722069 C372.088573,431.216685 469.284839,389.350049 517.917216,369.122161 C656.772535,311.36743 685.625481,301.334815 704.431427,301.003532 C708.567621,300.93067 717.815839,301.955743 723.806446,306.816707 C728.864797,310.92121 730.256552,316.46581 730.922551,320.357329 C731.588551,324.248848 732.417879,333.113828 731.758626,340.040666 C724.234007,419.102486 691.675104,610.964674 675.110982,699.515267 C668.10208,736.984342 654.301336,749.547532 640.940618,750.777006 C611.904684,753.448938 589.856115,731.588035 561.733393,713.153237 C517.726886,684.306416 492.866009,666.349181 450.150074,638.200013 C400.78442,605.66878 432.786119,587.789048 460.919462,558.568563 C468.282091,550.921423 596.21508,434.556479 598.691227,424.000355 C599.00091,422.680135 599.288312,417.758981 596.36474,415.160431 C593.441168,412.561881 589.126229,413.450484 586.012448,414.157198 C581.598758,415.158943 511.297793,461.625274 375.109553,553.556189 C355.154858,567.258623 337.080515,573.934908 320.886524,573.585046 C303.033948,573.199351 268.692754,563.490928 243.163606,555.192408 C211.851067,545.013936 186.964484,539.632504 189.131547,522.346309 C190.260287,513.342589 202.659244,504.134509 226.328419,494.722069 Z\" />\n</svg>",
44
44
  textract: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <title>Amazon Textract</title>\n <rect width=\"24\" height=\"24\" fill=\"#01A88D\"/>\n <path fill=\"#FFFFFF\" d=\"M10.4958528,9.80844542 C11.9822217,9.80844542 13.19215,11.017579 13.19215,12.5029715 C13.19215,13.9883641 11.9822217,15.1974977 10.4958528,15.1974977 C9.00948386,15.1974977 7.80055714,13.9883641 7.80055714,12.5029715 C7.80055714,11.017579 9.00948386,9.80844542 10.4958528,9.80844542 L10.4958528,9.80844542 Z M10.4958528,16.198436 C12.3638299,16.198436 13.8962722,14.8031279 14.1436665,13.0034407 L18.0288585,13.0034407 L18.0288585,12.0025023 L14.1436665,12.0025023 C13.8962722,10.2028151 12.3638299,8.80750704 10.4958528,8.80750704 C8.62887727,8.80750704 7.09543335,10.2028151 6.84904066,12.0025023 L5.38270368,12.0025023 L6.42536543,10.2568658 L5.56399261,9.74438536 L4.07061254,12.2467313 C3.97646249,12.4048796 3.97646249,12.6010635 4.07061254,12.7592118 L5.56399261,15.2615577 L6.42536543,14.7490773 L5.38270368,13.0034407 L6.84904066,13.0034407 C7.09543335,14.8031279 8.62887727,16.198436 10.4958528,16.198436 L10.4958528,16.198436 Z M9.99505462,12.0355333 L8.9994679,12.0355333 L8.9994679,11.0345949 L12.0042568,11.0345949 L12.0042568,12.0355333 L10.9966509,12.0355333 L10.9966509,14.5819206 L9.99505462,14.5819206 L9.99505462,12.0355333 Z M15.9946164,5.70359712 L18.2842655,7.97772912 L15.9946164,7.97772912 L15.9946164,5.70359712 Z M19.8527653,8.12286519 L15.8473818,4.146137 C15.7532317,4.05304973 15.626029,4 15.4938183,4 L9.46921656,4 C9.19177439,4 8.96841842,4.2242102 8.96841842,4.50046919 L8.96841842,7.26305912 L9.97001471,7.26305912 L9.97001471,5.00093838 L14.9930201,5.00093838 L14.9930201,8.47819831 C14.9930201,8.7544573 15.2173777,8.9786675 15.4938183,8.9786675 L18.9984037,8.9786675 L18.9984037,18.9990616 L9.97001471,18.9990616 L9.97001471,17.4796372 L8.96841842,17.4796372 L8.96841842,19.4995308 C8.96841842,19.7757898 9.19177439,20 9.46921656,20 L19.4992019,20 C19.776644,20 20,19.7757898 20,19.4995308 L20,8.47819831 C20,8.34507351 19.947917,8.21695339 19.8527653,8.12286519 L19.8527653,8.12286519 Z\"/>\n</svg>",
45
45
  "vector-store": "<!-- Lucide icon \"layers\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\n <title>Vector store</title>\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\n <path d=\"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z\" />\n <path d=\"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12\" />\n <path d=\"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17\" />\n</svg>",
46
+ walmart: "<svg width=\"24\" height=\"24\" viewBox=\"0 0 371 418\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M261.164 190.042C269.861 188.256 346.779 153.009 353.64 149.046C369.317 139.994 374.684 119.951 365.633 104.281C356.581 88.6112 336.538 83.2373 320.868 92.2889C314 96.2516 245.021 145.243 239.125 151.875C232.368 159.481 231.2 170.354 236.199 179.009C241.197 187.665 251.201 192.093 261.164 190.042Z\" fill=\"#FFC220\"/>\n <path d=\"M353.64 268.08C346.772 264.117 269.854 228.87 261.164 227.083C251.201 225.032 241.197 229.454 236.199 238.116C231.2 246.771 232.368 257.651 239.125 265.25C245.021 271.882 314.007 320.874 320.868 324.837C336.545 333.888 356.588 328.514 365.633 312.844C374.684 297.167 369.311 277.124 353.64 268.08Z\" fill=\"#FFC220\"/>\n <path d=\"M185.017 267.663C175.02 267.663 166.184 274.115 162.979 283.764C160.184 292.19 152.245 376.422 152.245 384.347C152.245 402.444 166.914 417.119 185.017 417.119C203.121 417.119 217.79 402.451 217.79 384.347C217.79 376.422 209.85 292.183 207.056 283.764C203.851 274.108 195.014 267.663 185.017 267.663Z\" fill=\"#FFC220\"/>\n <path d=\"M108.872 227.084C100.182 228.871 23.2572 264.118 16.3955 268.08C0.718485 277.132 -4.64854 297.175 4.4031 312.845C13.4547 328.522 33.4977 333.889 49.1677 324.837C56.0364 320.875 125.015 271.883 130.911 265.251C137.668 257.645 138.836 246.772 133.837 238.117C128.839 229.461 118.835 225.033 108.872 227.084Z\" fill=\"#FFC220\"/>\n <path d=\"M49.1662 92.2889C33.4892 83.2373 13.4463 88.6112 4.40158 104.281C-4.65006 119.958 0.723919 140.001 16.394 149.046C23.2626 153.009 100.181 188.256 108.871 190.042C118.833 192.093 128.837 187.672 133.836 179.009C138.834 170.354 137.667 159.474 130.909 151.875C125.014 145.243 56.0349 96.2516 49.1662 92.2889Z\" fill=\"#FFC220\"/>\n <path d=\"M185.017 0C166.921 0 152.245 14.6689 152.245 32.7722C152.245 40.6976 160.184 124.936 162.979 133.362C166.184 143.019 175.02 149.463 185.017 149.463C195.014 149.463 203.851 143.012 207.056 133.362C209.85 124.936 217.79 40.7046 217.79 32.7722C217.79 14.6759 203.121 0 185.017 0Z\" fill=\"#FFC220\"/>\n</svg>",
46
47
  "web-fetch": "<!-- Lucide icon \"globe\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\n <title>Web fetch</title>\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\" />\n <path d=\"M2 12h20\" />\n</svg>",
47
48
  woocommerce: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 183.6 47.5\" fill=\"#873EFF\" fill-rule=\"evenodd\">\n <path d=\"M77.4 0c-4.3 0-7.1 1.4-9.6 6.1L56.4 27.6V8.5c0-5.7-2.7-8.5-7.7-8.5s-7.1 1.7-9.6 6.5L28.3 27.6V8.7C28.3 2.6 25.8 0 19.7 0H7.3C2.6 0 0 2.2 0 6.2s2.5 6.4 7.1 6.4h5.1v24.1c0 6.8 4.6 10.8 11.2 10.8s9.6-2.6 12.9-8.7l7.2-13.5v11.4c0 6.7 4.4 10.8 11.1 10.8s9.2-2.3 13-8.7l16.6-28C87.8 4.7 85.3 0 77.3 0h.1Z\"/>\n <path d=\"M108.6 0C95 0 84.7 10.1 84.7 23.8s10.4 23.7 23.9 23.7 23.8-10.1 23.9-23.7C132.5 10.1 122.1 0 108.6 0Zm0 32.9c-5.1 0-8.6-3.8-8.6-9.1s3.5-9.2 8.6-9.2 8.6 3.9 8.6 9.2-3.4 9.1-8.6 9.1ZM159.7 0c-13.5 0-23.9 10.1-23.9 23.8s10.4 23.7 23.9 23.7 23.9-10.1 23.9-23.7S173.2 0 159.7 0Zm0 32.9c-5.2 0-8.5-3.8-8.5-9.1s3.4-9.2 8.5-9.2 8.6 3.9 8.6 9.2-3.4 9.1-8.6 9.1Z\"/>\n</svg>"
48
49
  };
@@ -108,4 +109,4 @@ function defineModule(options) {
108
109
  //#endregion
109
110
  export { packLogosByModuleId as a, logoForModuleId as i, defineModule as n, defineTool as r, asAnyTool as t };
110
111
 
111
- //# sourceMappingURL=define-DdFALdNf.js.map
112
+ //# sourceMappingURL=define-CbQI8dAN.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"define-DdFALdNf.js","names":[],"sources":["../src/generated/pack-logos.ts","../src/core/define.ts"],"sourcesContent":["// AUTO-GENERATED by `bun run codegen`. Do not edit by hand.\n// Source: logos/*.svg + logos/pack-logos.json — hosts use module.logo from defineModule.\n\nconst svg_amazon =\n\t'<svg width=\"24\" height=\"24\" viewBox=\"0 0 40 40\" xmlns=\"http://www.w3.org/2000/svg\" color=\"#000\">\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M34.4352 32.2938C18.2433 39.9998 8.19438 33.5524 1.76177 29.6364C1.36372 29.3896 0.687182 29.6941 1.27417 30.3684C3.4172 32.9668 10.4403 39.2299 19.6076 39.2299C28.7811 39.2299 34.2386 34.2244 34.9213 33.3512C35.5993 32.4854 35.1204 32.0078 34.435 32.2938H34.4352ZM38.9827 29.7824C38.5478 29.2162 36.3387 29.1107 34.9483 29.2815C33.5559 29.4473 31.4658 30.2983 31.6475 30.8093C31.7407 31.0007 31.9311 30.9149 32.8876 30.8289C33.8468 30.7332 36.5339 30.3941 37.0938 31.126C37.6564 31.863 36.2368 35.3739 35.9775 35.9401C35.727 36.5063 36.0732 36.6523 36.5438 36.2752C37.0078 35.8982 37.8479 34.922 38.4117 33.5404C38.9716 32.1513 39.3132 30.2136 38.9827 29.7824Z\" fill=\"#FF9900\"/>\\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M23.548 16.57C23.548 18.5919 23.599 20.2781 22.5771 22.0737C21.7522 23.5337 20.4456 24.4315 18.9857 24.4315C16.9929 24.4315 15.8323 22.9132 15.8323 20.6723C15.8323 16.2487 19.7958 15.4458 23.548 15.4458V16.57ZM28.7817 29.2201C28.4385 29.5266 27.9422 29.5486 27.5554 29.3441C25.8327 27.9135 25.526 27.2492 24.5772 25.8842C21.7304 28.7894 19.7157 29.658 16.0221 29.658C11.657 29.658 8.25537 26.9644 8.25537 21.5701C8.25537 17.3584 10.5403 14.4896 13.7883 13.0882C16.6061 11.8471 20.5405 11.6282 23.548 11.2852V10.6136C23.548 9.37989 23.6427 7.92002 22.9202 6.85436C22.285 5.89809 21.0734 5.50389 20.0075 5.50389C18.0295 5.50389 16.2629 6.51847 15.8323 8.62072C15.7446 9.08801 15.4016 9.54791 14.9345 9.56976L9.89772 9.02969C9.47444 8.9346 9.00731 8.59164 9.12409 7.94187C10.2847 1.8396 15.7957 0 20.7301 0C23.2558 0 26.5551 0.671619 28.5479 2.58415C31.0736 4.94182 30.8327 8.08789 30.8327 11.5114V19.5993C30.8327 22.03 31.84 23.0957 32.7889 24.4097C33.1246 24.8768 33.1977 25.439 32.7743 25.7892C31.7159 26.6724 29.8326 28.3149 28.7961 29.2347L28.7815 29.2201\" fill=\"currentColor\"/>\\n</svg>'\nconst svg_artifacts =\n\t'<!-- Lucide icon \"package\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Artifacts</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z\" />\\n <path d=\"M12 22V12\" />\\n <path d=\"m3.3 7 7.703 4.734a2 2 0 0 0 1.994 0L20.7 7\" />\\n <path d=\"m7.5 4.27 9 5.15\" />\\n</svg>'\nconst svg_browser =\n\t'<!-- Lucide icon \"app-window\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Browser</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\" />\\n <path d=\"M10 4v4\" />\\n <path d=\"M2 8h20\" />\\n <path d=\"M6 4v4\" />\\n</svg>'\nconst svg_calendar =\n\t'<!-- Lucide icon \"calendar-days\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Calendar</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M8 2v4\" />\\n <path d=\"M16 2v4\" />\\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"4\" rx=\"2\" />\\n <path d=\"M3 10h18\" />\\n <path d=\"M8 14h.01\" />\\n <path d=\"M12 14h.01\" />\\n <path d=\"M16 14h.01\" />\\n <path d=\"M8 18h.01\" />\\n <path d=\"M12 18h.01\" />\\n <path d=\"M16 18h.01\" />\\n</svg>'\nconst svg_cloudflare =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\\n <title>Cloudflare</title>\\n <path fill=\"#F38020\" d=\"M16.5088 16.8447c.1475-.5068.0908-.9707-.1553-1.3154-.2246-.3164-.6045-.499-1.0615-.5205l-8.6592-.1123a.1559.1559 0 0 1-.1333-.0713c-.0283-.042-.0351-.0986-.021-.1553.0278-.084.1123-.1484.2036-.1562l8.7359-.1123c1.0351-.0489 2.1601-.8868 2.5537-1.9136l.499-1.3013c.0215-.0561.0293-.1128.0147-.168-.5625-2.5463-2.835-4.4453-5.5499-4.4453-2.5039 0-4.6284 1.6177-5.3876 3.8614-.4927-.3658-1.1187-.5625-1.794-.499-1.2026.119-2.1665 1.083-2.2861 2.2856-.0283.31-.0069.6128.0635.894C1.5683 13.171 0 14.7754 0 16.752c0 .1748.0142.3515.0352.5273.0141.083.0844.1475.1689.1475h15.9814c.0909 0 .1758-.0645.2032-.1553l.12-.4268zm2.7568-5.5634c-.0771 0-.1611 0-.2383.0112-.0566 0-.1054.0415-.127.0976l-.3378 1.1744c-.1475.5068-.0918.9707.1543 1.3164.2256.3164.6055.498 1.0625.5195l1.8437.1133c.0557 0 .1055.0263.1329.0703.0283.043.0351.1074.0214.1562-.0283.084-.1132.1485-.204.1553l-1.921.1123c-1.041.0488-2.1582.8867-2.5527 1.914l-.1406.3585c-.0283.0713.0215.1416.0986.1416h6.5977c.0771 0 .1474-.0489.169-.126.1122-.4082.1757-.837.1757-1.2803 0-2.6025-2.125-4.727-4.7344-4.727\"/>\\n</svg>'\nconst svg_cloudflare_browser =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 64 65\" color=\"#000\" fill=\"currentColor\">\\n <title>Cloudflare Browser Run</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M23.3 18.2a2.1 2.1 0 1 1-4.2 0 2.1 2.1 0 0 1 4.2 0m-6.7 0a2.1 2.1 0 1 1-4.2 0 2.1 2.1 0 0 1 4.2 0m13.3-.61a2.1 2.1 0 1 0 0 1.22zm28.1-1.6V12.7l-2-2h-1.39v5.29zm0 9.67v-4.99h-3.39v4.99zm0 9.67v-4.99h-3.39v4.99zM58 45v-4.99h-3.39V45zm-3.39 9.6H56l2-2v-2.93h-3.39zm-17.9-4H41v4h-4.29zm8.96 0h4.29v4h-4.29zm-8.96-29H41v4h-4.29zm8.96 0h4.29v4h-4.29zm4.29-6.9h-4.29v-4h4.29zm-8.96 0h-4.29v-4H41zm-8.96-4h-24l-2 2v39.9l2 2h24v-4h-22v-25h22v-4h-22v-6.9h22z\"/>\\n</svg>'\nconst svg_cloudflare_email =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 48 48\" color=\"#000\" fill=\"currentColor\">\\n <title>Cloudflare Email Service</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M42.038 10.568h-36l-1.5 1.5v23.864l1.5 1.5h36l1.5-1.5V12.068zm-18 15.397L10.005 13.568h28.072l-14.04 12.397ZM17.288 24l-9.75 8.61V15.36zm2.25 2.003 3.494 3.082h1.988l3.48-3.082 9.578 8.43H10.005zM30.788 24l9.75-8.61v17.25z\"/>\\n</svg>'\nconst svg_code_sandbox =\n\t'<!-- Lucide icon \"box\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Code sandbox</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z\" />\\n <path d=\"m3.3 7 8.7 5 8.7-5\" />\\n <path d=\"M12 22V12\" />\\n</svg>'\nconst svg_content_type =\n\t'<!-- Lucide icon \"file-type\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Content type</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\" />\\n <path d=\"M14 2v4a2 2 0 0 0 2 2h4\" />\\n <path d=\"M9 13v-1h6v1\" />\\n <path d=\"M12 12v6\" />\\n <path d=\"M11 18h2\" />\\n</svg>'\nconst svg_crypto =\n\t'<!-- Lucide icon \"key-round\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Crypto</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z\" />\\n <circle cx=\"16.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\" />\\n</svg>'\nconst svg_document_extract =\n\t'<!-- Lucide icon \"scan-text\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Document extract</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M3 7V5a2 2 0 0 1 2-2h2\" />\\n <path d=\"M17 3h2a2 2 0 0 1 2 2v2\" />\\n <path d=\"M21 17v2a2 2 0 0 1-2 2h-2\" />\\n <path d=\"M7 21H5a2 2 0 0 1-2-2v-2\" />\\n <path d=\"M7 8h8\" />\\n <path d=\"M7 12h10\" />\\n <path d=\"M7 16h6\" />\\n</svg>'\nconst svg_document_render =\n\t'<!-- Lucide icon \"printer\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Document render</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2\" />\\n <path d=\"M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6\" />\\n <rect x=\"6\" y=\"14\" width=\"12\" height=\"8\" rx=\"1\" />\\n</svg>'\nconst svg_email =\n\t'<!-- Lucide icon \"mail\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Email</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <rect width=\"20\" height=\"16\" x=\"2\" y=\"4\" rx=\"2\" />\\n <path d=\"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\" />\\n</svg>'\nconst svg_email_message =\n\t'<!-- Lucide icon \"mails\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Email message</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <rect width=\"16\" height=\"13\" x=\"6\" y=\"4\" rx=\"2\" />\\n <path d=\"m22 7-7.1 3.78c-.57.3-1.23.3-1.8 0L6 7\" />\\n <path d=\"M2 8v11c0 1.1.9 2 2 2h14\" />\\n</svg>'\nconst svg_files =\n\t'<!-- Lucide icon \"folder-open\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Files</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2\" />\\n</svg>'\nconst svg_image =\n\t'<!-- Lucide icon \"image\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Image</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\" />\\n <circle cx=\"9\" cy=\"9\" r=\"2\" />\\n <path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\" />\\n</svg>'\nconst svg_imessage =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 41.5 51\" color=\"#000\" fill=\"currentColor\">\\n\\t<style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n\\t<path d=\"M40.2,17.4c-3.4,2.1-5.5,5.7-5.5,9.7c0,4.5,2.7,8.6,6.8,10.3c-0.8,2.6-2,5-3.5,7.2c-2.2,3.1-4.5,6.3-7.9,6.3s-4.4-2-8.4-2\\n\\t\\tc-3.9,0-5.3,2.1-8.5,2.1s-5.4-2.9-7.9-6.5C2,39.5,0.1,33.7,0,27.6c0-9.9,6.4-15.2,12.8-15.2c3.4,0,6.2,2.2,8.3,2.2\\n\\t\\tc2,0,5.2-2.3,9-2.3C34.1,12.2,37.9,14.1,40.2,17.4z M28.3,8.1C30,6.1,30.9,3.6,31,1c0-0.3,0-0.7-0.1-1c-2.9,0.3-5.6,1.7-7.5,3.9\\n\\t\\tc-1.7,1.9-2.7,4.3-2.8,6.9c0,0.3,0,0.6,0.1,0.9c0.2,0,0.5,0.1,0.7,0.1C24.1,11.6,26.6,10.2,28.3,8.1z\" />\\n</svg>'\nconst svg_katana =\n\t'<svg\\n xmlns=\"http://www.w3.org/2000/svg\"\\n width=\"24\"\\n height=\"24\"\\n viewBox=\"0 0 180 180\"\\n>\\n <title>Katana</title>\\n <rect width=\"180\" height=\"180\" fill=\"#EEFF38\" />\\n <g transform=\"matrix(0.59 0 0 0.59 -148.35268 -146.39143)\" fill=\"#092332\">\\n <path d=\"M415.791 359.592H381.3L340.784 400.746V359.592H315.852V453.842H340.784V435.503L358.653 417.378L384.417 454.055H415.583L376.729 399.04L415.791 359.592Z\" />\\n <path d=\"M438.692 359.659V358.588C442.452 356.662 447.095 353.451 451.076 348.742C459.258 339.109 458.595 329.477 458.595 329.477H432.058V344.889V358.588V359.659H419.011V381.279H432.058V419.167C432.058 432.866 432.058 454.058 458.595 454.058C485.131 454.058 490.438 452.346 490.438 452.346V427.515C465.007 428.799 458.595 430.94 458.595 417.026V415.1V381.279H490.438V359.659H458.595H438.692Z\" />\\n </g>\\n</svg>'\nconst svg_mastra =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 400 400\">\\n <title>Mastra</title>\\n <rect width=\"400\" height=\"400\" rx=\"20\" fill=\"#000\"/>\\n <g transform=\"matrix(10 0 0 10 30 30)\">\\n <path fill=\"#fff\" d=\"m 4.99805,17.3481 c 2.48432,0 4.49804,2.0147 4.49804,4.4991 -1.9e-4,2.4841 -2.01384,4.498 -4.49804,4.498 C 2.51394,26.3451 0.500196,24.3313 0.5,21.8472 0.5,19.3629 2.51382,17.3483 4.99805,17.3481 Z M 10.8867,5.65479 c 2.4842,0 4.4979,2.01388 4.4981,4.49801 0,0.3397 -0.0378,0.6704 -0.1093,0.9884 -0.3137,1.395 -0.5802,2.9769 0.2173,4.1636 l 1.2647,1.8819 c 0.0788,0.1172 0.2152,0.1796 0.3562,0.1711 0.1232,-0.0074 0.2388,-0.0687 0.3077,-0.1712 l 1.2662,-1.8846 c 0.7896,-1.1752 0.536,-2.7394 0.2329,-4.1224 -0.0682,-0.3109 -0.1041,-0.6339 -0.1041,-0.9652 3e-4,-2.48416 2.0149,-4.49809 4.499,-4.49809 2.484,2.2e-4 4.4978,2.01407 4.4981,4.49809 0,0.3792 -0.047,0.7475 -0.1355,1.0993 -0.3233,1.2855 -0.5963,2.7204 0.0666,3.8682 l 1.2144,2.1029 c 0.0229,0.0397 0.0655,0.0633 0.1113,0.0633 2.4842,2e-4 4.4981,2.0148 4.4981,4.4991 -2e-4,2.4841 -2.014,4.4979 -4.4981,4.498 -2.4842,0 -4.4978,-2.0139 -4.498,-4.498 0,-0.3875 0.0489,-0.7636 0.141,-1.1223 0.3325,-1.2956 0.6165,-2.745 -0.0524,-3.9033 l -1.1565,-2.003 c -0.0388,-0.0672 -0.1113,-0.1052 -0.189,-0.1052 -0.0171,0 -0.033,0.0075 -0.0426,0.0217 l -1.2832,1.9092 c -0.8036,1.1956 -0.5274,2.7915 -0.2056,4.1956 0.0742,0.3238 0.1135,0.6609 0.1135,1.0073 -2e-4,2.484 -2.0141,4.4978 -4.4981,4.498 -2.4842,0 -4.4988,-2.0139 -4.499,-4.498 0,-0.2604 0.0222,-0.5156 0.0647,-0.7638 0.2208,-1.2886 0.3808,-2.7164 -0.3484,-3.8015 L 11.7419,15.9801 C 11.1829,15.1483 10.2191,14.7141 9.28286,14.3567 7.5906,13.7106 6.38867,12.0721 6.38867,10.1528 6.38886,7.66869 8.40254,5.65482 10.8867,5.65479 Z\"/>\\n </g>\\n</svg>'\nconst svg_messaging =\n\t'<!-- Lucide icon \"messages-square\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Messaging</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M14 9a2 2 0 0 1-2 2H6l-4 4V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2z\" />\\n <path d=\"M18 9h2a2 2 0 0 1 2 2v11l-4-4h-6a2 2 0 0 1-2-2v-1\" />\\n</svg>'\nconst svg_pinecone =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 28 30\" color=\"#000\" fill=\"none\">\\n <title>Pinecone</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <g stroke=\"currentColor\" stroke-linecap=\"square\" fill=\"none\">\\n <path d=\"m14.58 5.24.7-3.89\" stroke-width=\"1.77\"/>\\n <path d=\"m17.8 3.86-2.44-2.98-3.32 1.94\" stroke-linejoin=\"round\" stroke-width=\"1.77\"/>\\n <path d=\"m11.66 21.84.68-3.89\" stroke-width=\"1.77\"/>\\n <path d=\"m14.88 20.45-2.46-2.97-3.31 1.95\" stroke-linejoin=\"round\" stroke-width=\"1.77\"/>\\n <path d=\"m13.07 13.82.68-3.89\" stroke-width=\"1.77\"/>\\n <path d=\"m16.29 12.43-2.45-2.96-3.31 1.94\" stroke-linejoin=\"round\" stroke-width=\"1.77\"/>\\n <circle cx=\"10.77\" cy=\"26.85\" fill=\"currentColor\" stroke=\"none\" r=\"1.63\"/>\\n <path d=\"m6.15 21.5-2.99 2.08\" stroke-width=\"1.68\"/>\\n <path d=\"m6.33 24.87-3.53-1.04.26-3.67\" stroke-linejoin=\"round\" stroke-width=\"1.68\"/>\\n <path d=\"m17.01 23.45 2.08 3\" stroke-width=\"1.68\"/>\\n <path d=\"m15.67 26.55 3.67.25 1.04-3.51\" stroke-linejoin=\"round\" stroke-width=\"1.68\"/>\\n <path d=\"m20.42 17.36 3.66.66\" stroke-width=\"1.72\"/>\\n <path d=\"m21.68 20.57 2.84-2.47-1.79-3.29\" stroke-linejoin=\"round\" stroke-width=\"1.72\"/>\\n <path d=\"m19.35 10.1 3.26-1.8\" stroke-width=\"1.72\"/>\\n <path d=\"m19.53 6.65 3.47 1.44-.65 3.69\" stroke-linejoin=\"round\" stroke-width=\"1.72\"/>\\n <path d=\"m4.97 14.64-3.67-.64\" stroke-width=\"1.72\"/>\\n <path d=\"m2.68 17.22-1.82-3.29 2.81-2.48\" stroke-linejoin=\"round\" stroke-width=\"1.72\"/>\\n <path d=\"m8.45 8.17-2.45-2.8\" stroke-width=\"1.72\"/>\\n <path d=\"m9.46 4.88-3.75.16-.66 3.69\" stroke-linejoin=\"round\" stroke-width=\"1.72\"/>\\n </g>\\n</svg>'\nconst svg_qdrant =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\\n <title>Qdrant</title>\\n <path fill=\"#DC244C\" d=\"m12 16.5 3.897-2.25v-4.5L12 7.5 8.103 9.75v4.5zM1.607 18 12 24l3.897-2.25v-4.5L12 19.5l-6.495-3.75v-7.5L12 4.5l6.495 3.75v15L22.393 21V6L12 0 1.607 6Z\"/>\\n</svg>'\nconst svg_queue =\n\t'<!-- Lucide icon \"list-ordered\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Queue</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M10 12h11\" />\\n <path d=\"M10 18h11\" />\\n <path d=\"M10 6h11\" />\\n <path d=\"M4 10h2\" />\\n <path d=\"M4 6h1v4\" />\\n <path d=\"M6 18H4c0-1 2-2 2-3s-1-1.5-2-1\" />\\n</svg>'\nconst svg_rag =\n\t'<!-- Lucide icon \"brain-circuit\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>RAG</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z\" />\\n <path d=\"M9 13a4.5 4.5 0 0 0 3-4\" />\\n <path d=\"M6.003 5.125A3 3 0 0 0 6.401 6.5\" />\\n <path d=\"M3.477 10.896a4 4 0 0 1 .585-.396\" />\\n <path d=\"M6 18a4 4 0 0 1-1.967-.516\" />\\n <path d=\"M12 13h4\" />\\n <path d=\"M12 18h6a2 2 0 0 1 2 2v1\" />\\n <path d=\"M12 8h8\" />\\n <path d=\"M16 8V5a2 2 0 0 1 2-2\" />\\n <circle cx=\"16\" cy=\"13\" r=\".5\" />\\n <circle cx=\"18\" cy=\"3\" r=\".5\" />\\n <circle cx=\"20\" cy=\"21\" r=\".5\" />\\n <circle cx=\"20\" cy=\"8\" r=\".5\" />\\n</svg>'\nconst svg_resend =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" color=\"#000\" fill=\"currentColor\">\\n <title>Resend</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M14.679 0c4.648 0 7.413 2.765 7.413 6.434s-2.765 6.434-7.413 6.434H12.33L24 24h-8.245l-8.88-8.44c-.636-.588-.93-1.273-.93-1.86 0-.831.587-1.565 1.713-1.883l4.574-1.224c1.737-.465 2.936-1.81 2.936-3.572 0-2.153-1.761-3.4-3.939-3.4H0V0z\"/>\\n</svg>'\nconst svg_scheduler =\n\t'<!-- Lucide icon \"clock\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Scheduler</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\\n <polyline points=\"12 6 12 12 16 14\" />\\n</svg>'\nconst svg_shipstation =\n\t'<svg\\n\\txmlns=\"http://www.w3.org/2000/svg\"\\n\\twidth=\"24\"\\n\\theight=\"24\"\\n\\tviewBox=\"-0.25 -0.25 67.8 67.8\"\\n>\\n\\t<title>ShipStation</title>\\n\\t<path\\n\\t\\tfill=\"#00E664\"\\n\\t\\td=\"M58.61,19.67c0-2.43.99-4.64,2.58-6.23,0,0,0,0,0,0l-7.32-7.33s0,0,0,0c-1.6,1.59-3.8,2.58-6.23,2.58-4.87,0-8.82-3.95-8.82-8.82h0s-5.18,0-5.18,0h-5.18c0,4.87-3.95,8.82-8.82,8.82-2.43,0-4.64-.99-6.23-2.58,0,0,0,0,0,0l-7.32,7.33s0,0,0,0c1.59,1.6,2.58,3.8,2.58,6.23,0,4.87-3.95,8.82-8.82,8.82,0,0,0,0,0,0v10.36s0,0,0,0c4.87,0,8.82,3.95,8.82,8.82,0,2.43-.99,4.64-2.58,6.23,0,0,0,0,0,0l7.32,7.33s0,0,0,0c1.6-1.59,3.8-2.58,6.23-2.58,4.87,0,8.82,3.95,8.82,8.82h0s5.18,0,5.18,0h5.18c0-4.87,3.95-8.82,8.82-8.82,2.43,0,4.64.99,6.23,2.58,0,0,0,0,0,0l7.32-7.33s0,0,0,0c-1.59-1.6-2.58-3.8-2.58-6.23,0-4.87,3.95-8.82,8.82-8.82,0,0,0,0,0,0v-10.36s0,0,0,0c-4.87,0-8.82-3.95-8.82-8.82ZM50.61,43.46l-16.97,9.8-16.97-9.8v-19.6l16.97-9.8,16.97,9.8v19.6Z\"\\n\\t/>\\n</svg>'\nconst svg_skills =\n\t'<!-- Lucide icon \"sparkles\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Skills</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z\" />\\n <path d=\"M20 3v4\" />\\n <path d=\"M22 5h-4\" />\\n <path d=\"M4 17v2\" />\\n <path d=\"M5 18H3\" />\\n</svg>'\nconst svg_slack =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"73.6 73.6 122.8 122.8\">\\n\\t<path fill=\"#E01E5A\" d=\"M99.4,151.2c0,7.1-5.8,12.9-12.9,12.9c-7.1,0-12.9-5.8-12.9-12.9c0-7.1,5.8-12.9,12.9-12.9h12.9V151.2z\" />\\n\\t<path fill=\"#E01E5A\" d=\"M105.9,151.2c0-7.1,5.8-12.9,12.9-12.9s12.9,5.8,12.9,12.9v32.3c0,7.1-5.8,12.9-12.9,12.9\\n\\t\\ts-12.9-5.8-12.9-12.9V151.2z\" />\\n\\t<path fill=\"#36C5F0\" d=\"M118.8,99.4c-7.1,0-12.9-5.8-12.9-12.9c0-7.1,5.8-12.9,12.9-12.9s12.9,5.8,12.9,12.9v12.9H118.8z\" />\\n\\t<path fill=\"#36C5F0\" d=\"M118.8,105.9c7.1,0,12.9,5.8,12.9,12.9s-5.8,12.9-12.9,12.9H86.5c-7.1,0-12.9-5.8-12.9-12.9\\n\\t\\ts5.8-12.9,12.9-12.9H118.8z\" />\\n\\t<path fill=\"#2EB67D\" d=\"M170.6,118.8c0-7.1,5.8-12.9,12.9-12.9c7.1,0,12.9,5.8,12.9,12.9s-5.8,12.9-12.9,12.9h-12.9V118.8z\" />\\n\\t<path fill=\"#2EB67D\" d=\"M164.1,118.8c0,7.1-5.8,12.9-12.9,12.9c-7.1,0-12.9-5.8-12.9-12.9V86.5c0-7.1,5.8-12.9,12.9-12.9\\n\\t\\tc7.1,0,12.9,5.8,12.9,12.9V118.8z\" />\\n\\t<path fill=\"#ECB22E\" d=\"M151.2,170.6c7.1,0,12.9,5.8,12.9,12.9c0,7.1-5.8,12.9-12.9,12.9c-7.1,0-12.9-5.8-12.9-12.9v-12.9H151.2z\" />\\n\\t<path fill=\"#ECB22E\" d=\"M151.2,164.1c-7.1,0-12.9-5.8-12.9-12.9c0-7.1,5.8-12.9,12.9-12.9h32.3c7.1,0,12.9,5.8,12.9,12.9\\n\\t\\tc0,7.1-5.8,12.9-12.9,12.9H151.2z\" />\\n</svg>'\nconst svg_supabase =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\\n <title>Supabase</title>\\n <path fill=\"#3ECF8E\" d=\"M11.9 1.036c-.015-.986-1.26-1.41-1.874-.637L.764 12.05C-.33 13.427.65 15.455 2.409 15.455h9.579l.113 7.51c.014.985 1.259 1.408 1.873.636l9.262-11.653c1.093-1.375.113-3.403-1.645-3.403h-9.642z\"/>\\n</svg>'\nconst svg_tasks =\n\t'<!-- Lucide icon \"list-todo\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Tasks</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <rect x=\"3\" y=\"5\" width=\"6\" height=\"6\" rx=\"1\" />\\n <path d=\"m3 17 2 2 4-4\" />\\n <path d=\"M13 6h8\" />\\n <path d=\"M13 12h8\" />\\n <path d=\"M13 18h8\" />\\n</svg>'\nconst svg_teams =\n\t'<!-- Microsoft Office Teams (2025–present)\\n https://upload.wikimedia.org/wikipedia/commons/0/07/Microsoft_Office_Teams_%282025%E2%80%93present%29.svg\\n Wikimedia Commons\\n-->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"4 4 36 38\" width=\"24\" height=\"24\">\\n <title>Microsoft Teams</title><path fill=\"url(#a)\" d=\"M21.9999 20h12c3.3137 0 6 2.6863 6 6v10c0 3.3137-2.6863 6-6 6s-6-2.6863-6-6V26c0-3.3137-2.6863-6-6-6\"/><path fill=\"url(#b)\" d=\"M7.99988 24c0-3.3137 2.68632-6 6.00002-6h8c3.3137 0 6 2.6863 6 6v12c0 3.3137 2.6863 6 6 6l-16.0001-.0001c-5.5228 0-9.99992-4.4771-9.99992-10z\"/><path fill=\"url(#c)\" fill-opacity=\".7\" d=\"M7.99988 24c0-3.3137 2.68632-6 6.00002-6h8c3.3137 0 6 2.6863 6 6v12c0 3.3137 2.6863 6 6 6l-16.0001-.0001c-5.5228 0-9.99992-4.4771-9.99992-10z\"/><path fill=\"url(#d)\" fill-opacity=\".7\" d=\"M7.99988 24c0-3.3137 2.68632-6 6.00002-6h8c3.3137 0 6 2.6863 6 6v12c0 3.3137 2.6863 6 6 6l-16.0001-.0001c-5.5228 0-9.99992-4.4771-9.99992-10z\"/><path fill=\"url(#e)\" d=\"M32.9999 18c2.7614 0 5-2.2386 5-5s-2.2386-5-5-5-5 2.2386-5 5 2.2386 5 5 5\"/><path fill=\"url(#f)\" fill-opacity=\".46\" d=\"M32.9999 18c2.7614 0 5-2.2386 5-5s-2.2386-5-5-5-5 2.2386-5 5 2.2386 5 5 5\"/><path fill=\"url(#g)\" fill-opacity=\".4\" d=\"M32.9999 18c2.7614 0 5-2.2386 5-5s-2.2386-5-5-5-5 2.2386-5 5 2.2386 5 5 5\"/><path fill=\"url(#h)\" d=\"M17.9999 16c3.3137 0 6-2.6863 6-6 0-3.31371-2.6863-6-6-6s-6 2.68629-6 6c0 3.3137 2.6863 6 6 6\"/><path fill=\"url(#i)\" fill-opacity=\".6\" d=\"M17.9999 16c3.3137 0 6-2.6863 6-6 0-3.31371-2.6863-6-6-6s-6 2.68629-6 6c0 3.3137 2.6863 6 6 6\"/><path fill=\"url(#j)\" fill-opacity=\".5\" d=\"M17.9999 16c3.3137 0 6-2.6863 6-6 0-3.31371-2.6863-6-6-6s-6 2.68629-6 6c0 3.3137 2.6863 6 6 6\"/><rect width=\"16\" height=\"16\" x=\"4\" y=\"23\" fill=\"url(#k)\" rx=\"3.25\"/><rect width=\"16\" height=\"16\" x=\"4\" y=\"23\" fill=\"url(#l)\" fill-opacity=\".7\" rx=\"3.25\"/><path fill=\"#fff\" d=\"M15.4792 28.1054h-2.4471v7.466h-2.0648v-7.466H8.52014v-1.6768h6.95906z\"/><defs><radialGradient id=\"a\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"matrix(13.4784 0 0 33.2694 39.7967 22.1739)\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#a98aff\"/><stop offset=\".14\" stop-color=\"#8c75ff\"/><stop offset=\".565\" stop-color=\"#5f50e2\"/><stop offset=\".9\" stop-color=\"#3c2cb8\"/></radialGradient><radialGradient id=\"b\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"rotate(68.1539 -7.71566095 14.71355834)scale(32.752 33.1231)\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#85c2ff\"/><stop offset=\".69\" stop-color=\"#7588ff\"/><stop offset=\"1\" stop-color=\"#6459fe\"/></radialGradient><radialGradient id=\"d\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"rotate(113.326 8.09285255 17.64474501)scale(19.2186 15.4273)\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#bd96ff\"/><stop offset=\".686685\" stop-color=\"#bd96ff\" stop-opacity=\"0\"/></radialGradient><radialGradient id=\"e\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"matrix(0 -10 12.6216 0 32.9999 11.5714)\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".268201\" stop-color=\"#6868f7\"/><stop offset=\"1\" stop-color=\"#3923b1\"/></radialGradient><radialGradient id=\"f\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"rotate(40.0516 -.03068196 44.8729095)scale(7.14629 10.3363)\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".270711\" stop-color=\"#a1d3ff\"/><stop offset=\".813393\" stop-color=\"#a1d3ff\" stop-opacity=\"0\"/></radialGradient><radialGradient id=\"g\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"rotate(-41.6581 32.11799918 -43.41948423)scale(8.51275 20.8824)\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#e3acfd\"/><stop offset=\".816041\" stop-color=\"#9fa2ff\" stop-opacity=\"0\"/></radialGradient><radialGradient id=\"h\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"matrix(0 -12 15.146 0 17.9999 8.28571)\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".268201\" stop-color=\"#8282ff\"/><stop offset=\"1\" stop-color=\"#3923b1\"/></radialGradient><radialGradient id=\"i\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"rotate(40.0516 -3.15465147 21.41641466)scale(8.57554 12.4035)\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".270711\" stop-color=\"#a1d3ff\"/><stop offset=\".813393\" stop-color=\"#a1d3ff\" stop-opacity=\"0\"/></radialGradient><radialGradient id=\"j\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"rotate(-41.6581 20.38180375 -26.51566158)scale(10.2153 25.0589)\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#e3acfd\"/><stop offset=\".816041\" stop-color=\"#9fa2ff\" stop-opacity=\"0\"/></radialGradient><radialGradient id=\"k\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"rotate(45 -25.76345597 16.32842712)scale(22.6274)\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".046875\" stop-color=\"#688eff\"/><stop offset=\".946875\" stop-color=\"#230f94\"/></radialGradient><radialGradient id=\"l\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"matrix(0 11.2 -13.0702 0 12 32.6)\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".570647\" stop-color=\"#6965f6\" stop-opacity=\"0\"/><stop offset=\"1\" stop-color=\"#8f8fff\"/></radialGradient><linearGradient id=\"c\" x1=\"20.5936\" x2=\"20.5936\" y1=\"18\" y2=\"42\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".801159\" stop-color=\"#6864f6\" stop-opacity=\"0\"/><stop offset=\"1\" stop-color=\"#5149de\"/></linearGradient></defs></svg>'\nconst svg_telegram =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 1000 1000\">\\n\\t<defs>\\n\\t\\t<linearGradient id=\"g\" x1=\"50%\" x2=\"50%\" y1=\"0%\" y2=\"99.2583404%\">\\n\\t\\t\\t<stop offset=\"0%\" stop-color=\"#2AABEE\" />\\n\\t\\t\\t<stop offset=\"100%\" stop-color=\"#229ED9\" />\\n\\t\\t</linearGradient>\\n\\t</defs>\\n\\t<circle cx=\"500\" cy=\"500\" r=\"500\" fill=\"url(#g)\" />\\n\\t<path fill=\"#FFF\" fill-rule=\"evenodd\" d=\"M226.328419,494.722069 C372.088573,431.216685 469.284839,389.350049 517.917216,369.122161 C656.772535,311.36743 685.625481,301.334815 704.431427,301.003532 C708.567621,300.93067 717.815839,301.955743 723.806446,306.816707 C728.864797,310.92121 730.256552,316.46581 730.922551,320.357329 C731.588551,324.248848 732.417879,333.113828 731.758626,340.040666 C724.234007,419.102486 691.675104,610.964674 675.110982,699.515267 C668.10208,736.984342 654.301336,749.547532 640.940618,750.777006 C611.904684,753.448938 589.856115,731.588035 561.733393,713.153237 C517.726886,684.306416 492.866009,666.349181 450.150074,638.200013 C400.78442,605.66878 432.786119,587.789048 460.919462,558.568563 C468.282091,550.921423 596.21508,434.556479 598.691227,424.000355 C599.00091,422.680135 599.288312,417.758981 596.36474,415.160431 C593.441168,412.561881 589.126229,413.450484 586.012448,414.157198 C581.598758,415.158943 511.297793,461.625274 375.109553,553.556189 C355.154858,567.258623 337.080515,573.934908 320.886524,573.585046 C303.033948,573.199351 268.692754,563.490928 243.163606,555.192408 C211.851067,545.013936 186.964484,539.632504 189.131547,522.346309 C190.260287,513.342589 202.659244,504.134509 226.328419,494.722069 Z\" />\\n</svg>'\nconst svg_textract =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\\n <title>Amazon Textract</title>\\n <rect width=\"24\" height=\"24\" fill=\"#01A88D\"/>\\n <path fill=\"#FFFFFF\" d=\"M10.4958528,9.80844542 C11.9822217,9.80844542 13.19215,11.017579 13.19215,12.5029715 C13.19215,13.9883641 11.9822217,15.1974977 10.4958528,15.1974977 C9.00948386,15.1974977 7.80055714,13.9883641 7.80055714,12.5029715 C7.80055714,11.017579 9.00948386,9.80844542 10.4958528,9.80844542 L10.4958528,9.80844542 Z M10.4958528,16.198436 C12.3638299,16.198436 13.8962722,14.8031279 14.1436665,13.0034407 L18.0288585,13.0034407 L18.0288585,12.0025023 L14.1436665,12.0025023 C13.8962722,10.2028151 12.3638299,8.80750704 10.4958528,8.80750704 C8.62887727,8.80750704 7.09543335,10.2028151 6.84904066,12.0025023 L5.38270368,12.0025023 L6.42536543,10.2568658 L5.56399261,9.74438536 L4.07061254,12.2467313 C3.97646249,12.4048796 3.97646249,12.6010635 4.07061254,12.7592118 L5.56399261,15.2615577 L6.42536543,14.7490773 L5.38270368,13.0034407 L6.84904066,13.0034407 C7.09543335,14.8031279 8.62887727,16.198436 10.4958528,16.198436 L10.4958528,16.198436 Z M9.99505462,12.0355333 L8.9994679,12.0355333 L8.9994679,11.0345949 L12.0042568,11.0345949 L12.0042568,12.0355333 L10.9966509,12.0355333 L10.9966509,14.5819206 L9.99505462,14.5819206 L9.99505462,12.0355333 Z M15.9946164,5.70359712 L18.2842655,7.97772912 L15.9946164,7.97772912 L15.9946164,5.70359712 Z M19.8527653,8.12286519 L15.8473818,4.146137 C15.7532317,4.05304973 15.626029,4 15.4938183,4 L9.46921656,4 C9.19177439,4 8.96841842,4.2242102 8.96841842,4.50046919 L8.96841842,7.26305912 L9.97001471,7.26305912 L9.97001471,5.00093838 L14.9930201,5.00093838 L14.9930201,8.47819831 C14.9930201,8.7544573 15.2173777,8.9786675 15.4938183,8.9786675 L18.9984037,8.9786675 L18.9984037,18.9990616 L9.97001471,18.9990616 L9.97001471,17.4796372 L8.96841842,17.4796372 L8.96841842,19.4995308 C8.96841842,19.7757898 9.19177439,20 9.46921656,20 L19.4992019,20 C19.776644,20 20,19.7757898 20,19.4995308 L20,8.47819831 C20,8.34507351 19.947917,8.21695339 19.8527653,8.12286519 L19.8527653,8.12286519 Z\"/>\\n</svg>'\nconst svg_vector_store =\n\t'<!-- Lucide icon \"layers\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Vector store</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z\" />\\n <path d=\"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12\" />\\n <path d=\"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17\" />\\n</svg>'\nconst svg_web_fetch =\n\t'<!-- Lucide icon \"globe\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Web fetch</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\\n <path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\" />\\n <path d=\"M2 12h20\" />\\n</svg>'\nconst svg_woocommerce =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 183.6 47.5\" fill=\"#873EFF\" fill-rule=\"evenodd\">\\n <path d=\"M77.4 0c-4.3 0-7.1 1.4-9.6 6.1L56.4 27.6V8.5c0-5.7-2.7-8.5-7.7-8.5s-7.1 1.7-9.6 6.5L28.3 27.6V8.7C28.3 2.6 25.8 0 19.7 0H7.3C2.6 0 0 2.2 0 6.2s2.5 6.4 7.1 6.4h5.1v24.1c0 6.8 4.6 10.8 11.2 10.8s9.6-2.6 12.9-8.7l7.2-13.5v11.4c0 6.7 4.4 10.8 11.1 10.8s9.2-2.3 13-8.7l16.6-28C87.8 4.7 85.3 0 77.3 0h.1Z\"/>\\n <path d=\"M108.6 0C95 0 84.7 10.1 84.7 23.8s10.4 23.7 23.9 23.7 23.8-10.1 23.9-23.7C132.5 10.1 122.1 0 108.6 0Zm0 32.9c-5.1 0-8.6-3.8-8.6-9.1s3.5-9.2 8.6-9.2 8.6 3.9 8.6 9.2-3.4 9.1-8.6 9.1ZM159.7 0c-13.5 0-23.9 10.1-23.9 23.8s10.4 23.7 23.9 23.7 23.9-10.1 23.9-23.7S173.2 0 159.7 0Zm0 32.9c-5.2 0-8.5-3.8-8.5-9.1s3.4-9.2 8.5-9.2 8.6 3.9 8.6 9.2-3.4 9.1-8.6 9.1Z\"/>\\n</svg>'\n\n/** Inline SVG by module / pack id (shared files referenced many times). */\nexport const packLogosByModuleId: Readonly<Record<string, string>> = {\n\t'amazon-sp-api': svg_amazon,\n\tartifacts: svg_artifacts,\n\t'bedrock-agentcore-browser': svg_amazon,\n\t'bedrock-agentcore-code-interpreter': svg_amazon,\n\tbrowser: svg_browser,\n\tcalendar: svg_calendar,\n\t'cloudflare-browser': svg_cloudflare_browser,\n\t'cloudflare-email': svg_cloudflare_email,\n\t'cloudflare-sandbox': svg_cloudflare,\n\t'code-sandbox': svg_code_sandbox,\n\t'content-type': svg_content_type,\n\tcrypto: svg_crypto,\n\t'document-extract': svg_document_extract,\n\t'document-render': svg_document_render,\n\temail: svg_email,\n\t'email-message': svg_email_message,\n\t'eventbridge-scheduler': svg_amazon,\n\tfiles: svg_files,\n\timage: svg_image,\n\timessage: svg_imessage,\n\tkatana: svg_katana,\n\t'mastra-vector': svg_mastra,\n\tmessaging: svg_messaging,\n\tpinecone: svg_pinecone,\n\tqdrant: svg_qdrant,\n\tqueue: svg_queue,\n\trag: svg_rag,\n\tresend: svg_resend,\n\ts3: svg_amazon,\n\tscheduler: svg_scheduler,\n\tshipstation: svg_shipstation,\n\tskills: svg_skills,\n\tslack: svg_slack,\n\tsqs: svg_amazon,\n\t'supabase-vector': svg_supabase,\n\ttasks: svg_tasks,\n\tteams: svg_teams,\n\ttelegram: svg_telegram,\n\ttextract: svg_textract,\n\t'vector-store': svg_vector_store,\n\t'web-fetch': svg_web_fetch,\n\twoocommerce: svg_woocommerce\n}\n\nexport function logoForModuleId(id: string): string | undefined {\n\treturn packLogosByModuleId[id]\n}\n","import { logoForModuleId } from '../generated/pack-logos'\nimport type {\n\tAuthDefinition,\n\tModuleClassification,\n\tModuleDefinition,\n\tToolContext,\n\tToolDefinition,\n\tToolRuntime,\n\tToolSideEffect\n} from './types'\nimport { assertUniqueBy } from './unique'\n\nexport type DefineToolOptions<TInput, TOutput> = {\n\tdescription: string\n\tid: string\n\tinputSchema: ToolDefinition<TInput, TOutput>['inputSchema']\n\tname: string\n\toutputSchema: ToolDefinition<TInput, TOutput>['outputSchema']\n\truntime?: ToolRuntime\n\tsideEffect?: ToolSideEffect\n\ttags?: readonly string[]\n\t/** Host-facing hints (not enforced by the kernel). */\n\tidempotent?: boolean\n\tlongRunning?: boolean\n\trequiresConfirmation?: boolean\n\tsupportsCancel?: boolean\n\tsupportsProgress?: boolean\n\tnetwork?: boolean\n\tartifacts?: boolean\n\texecute: (input: TInput, ctx: ToolContext) => Promise<TOutput>\n}\n\nexport function defineTool<TInput, TOutput>(\n\toptions: DefineToolOptions<TInput, TOutput>\n): ToolDefinition<TInput, TOutput> {\n\tconst description = options.description.trim()\n\tif (!description) {\n\t\tthrow new Error(`Tool ${options.id} is missing a model-facing description`)\n\t}\n\tif (!options.id.trim()) {\n\t\tthrow new Error('Tool id is required')\n\t}\n\tif (!options.name.trim()) {\n\t\tthrow new Error(`Tool ${options.id} is missing a name`)\n\t}\n\n\treturn {\n\t\tid: options.id,\n\t\tname: options.name,\n\t\tdescription,\n\t\tinputSchema: options.inputSchema,\n\t\toutputSchema: options.outputSchema,\n\t\tmeta: {\n\t\t\truntime: options.runtime ?? 'both',\n\t\t\tsideEffect: options.sideEffect ?? 'read',\n\t\t\ttags: options.tags,\n\t\t\tidempotent: options.idempotent,\n\t\t\tlongRunning: options.longRunning,\n\t\t\trequiresConfirmation: options.requiresConfirmation,\n\t\t\tsupportsCancel: options.supportsCancel,\n\t\t\tsupportsProgress: options.supportsProgress,\n\t\t\tnetwork: options.network,\n\t\t\tartifacts: options.artifacts\n\t\t},\n\t\texecute: async (input, ctx) => {\n\t\t\tconst parsed = options.inputSchema.parse(input)\n\t\t\treturn options.execute(parsed, ctx)\n\t\t}\n\t}\n}\n\n/** @deprecated Prefer defineTool return value directly; kept for call-site clarity in modules. */\nexport function asAnyTool<TInput, TOutput>(tool: ToolDefinition<TInput, TOutput>): ToolDefinition {\n\treturn tool\n}\n\nexport type DefineModuleOptions<TAuth = unknown> = {\n\tauth?: AuthDefinition<TAuth>\n\tdescription: string\n\tid: string\n\truntime?: ToolRuntime\n\ttitle: string\n\ttools: readonly ToolDefinition[]\n\t/** Optional override; default comes from the pack logo map by module id. */\n\tlogo?: string | undefined\n\t/**\n\t * Catalog categories for UI filters / MCP / skill grouping.\n\t * Declared on the pack (`module.ts`) — not a central registry in core.\n\t */\n\tcategories?: readonly string[]\n\t/** Host sensitivity hint (`standard` | `pii` | `phi`). Pack declares; host enforces. */\n\tclassification?: ModuleClassification\n\t/** Module-level search / badge labels. */\n\ttags?: readonly string[]\n}\n\nexport function defineModule<TAuth = unknown>(options: DefineModuleOptions<TAuth>): ModuleDefinition<TAuth> {\n\tconst description = options.description.trim()\n\tif (!description) {\n\t\tthrow new Error(`Module ${options.id} is missing a description`)\n\t}\n\tif (!options.id.trim()) {\n\t\tthrow new Error('Module id is required')\n\t}\n\tif (options.tools.length === 0) {\n\t\tthrow new Error(`Module ${options.id} must declare at least one tool`)\n\t}\n\n\tassertUniqueBy(\n\t\toptions.tools,\n\t\t(tool) => tool.id,\n\t\t(id) => `Module ${options.id} has duplicate tool id: ${id}`\n\t)\n\n\tconst logo = options.logo ?? logoForModuleId(options.id)\n\tconst categories = options.categories ?? []\n\n\treturn {\n\t\tid: options.id,\n\t\ttitle: options.title,\n\t\tdescription,\n\t\truntime: options.runtime ?? 'both',\n\t\tauth: options.auth ?? { type: 'none' },\n\t\ttools: options.tools,\n\t\tcategories,\n\t\t...(options.classification !== undefined && { classification: options.classification }),\n\t\t...(options.tags !== undefined && options.tags.length > 0 && { tags: options.tags }),\n\t\t...(logo !== undefined && { logo })\n\t}\n}\n"],"mappings":";;AAGA,MAAM,aACL;;AA2ED,MAAa,sBAAwD;CACpE,iBAAiB;CACjB,WAAW;CACX,6BAA6B;CAC7B,sCAAsC;CACtC,SAAS;CACT,UAAU;CACV,sBAAsB;CACtB,oBAAoB;CACpB,sBAAsB;CACtB,gBAAgB;CAChB,gBAAgB;CAChB,QAAQ;CACR,oBAAoB;CACpB,mBAAmB;CACnB,OAAO;CACP,iBAAiB;CACjB,yBAAyB;CACzB,OAAO;CACP,OAAO;CACP,UAAU;CACV,QAAQ;CACR,iBAAiB;CACjB,WAAW;CACX,UAAU;CACV,QAAQ;CACR,OAAO;CACP,KAAK;CACL,QAAQ;CACR,IAAI;CACJ,WAAW;CACX,aAAa;CACb,QAAQ;CACR,OAAO;CACP,KAAK;CACL,mBAAmB;CACnB,OAAO;CACP,OAAO;CACP,UAAU;CACV,UAAU;CACV,gBAAgB;CAChB,aAAa;CACb,aAAa;AACd;AAEA,SAAgB,gBAAgB,IAAgC;CAC/D,OAAO,oBAAoB;AAC5B;;;AC9FA,SAAgB,WACf,SACkC;CAClC,MAAM,cAAc,QAAQ,YAAY,KAAK;CAC7C,IAAI,CAAC,aACJ,MAAM,IAAI,MAAM,QAAQ,QAAQ,GAAG,uCAAuC;CAE3E,IAAI,CAAC,QAAQ,GAAG,KAAK,GACpB,MAAM,IAAI,MAAM,qBAAqB;CAEtC,IAAI,CAAC,QAAQ,KAAK,KAAK,GACtB,MAAM,IAAI,MAAM,QAAQ,QAAQ,GAAG,mBAAmB;CAGvD,OAAO;EACN,IAAI,QAAQ;EACZ,MAAM,QAAQ;EACd;EACA,aAAa,QAAQ;EACrB,cAAc,QAAQ;EACtB,MAAM;GACL,SAAS,QAAQ,WAAW;GAC5B,YAAY,QAAQ,cAAc;GAClC,MAAM,QAAQ;GACd,YAAY,QAAQ;GACpB,aAAa,QAAQ;GACrB,sBAAsB,QAAQ;GAC9B,gBAAgB,QAAQ;GACxB,kBAAkB,QAAQ;GAC1B,SAAS,QAAQ;GACjB,WAAW,QAAQ;EACpB;EACA,SAAS,OAAO,OAAO,QAAQ;GAC9B,MAAM,SAAS,QAAQ,YAAY,MAAM,KAAK;GAC9C,OAAO,QAAQ,QAAQ,QAAQ,GAAG;EACnC;CACD;AACD;;AAGA,SAAgB,UAA2B,MAAuD;CACjG,OAAO;AACR;AAsBA,SAAgB,aAA8B,SAA8D;CAC3G,MAAM,cAAc,QAAQ,YAAY,KAAK;CAC7C,IAAI,CAAC,aACJ,MAAM,IAAI,MAAM,UAAU,QAAQ,GAAG,0BAA0B;CAEhE,IAAI,CAAC,QAAQ,GAAG,KAAK,GACpB,MAAM,IAAI,MAAM,uBAAuB;CAExC,IAAI,QAAQ,MAAM,WAAW,GAC5B,MAAM,IAAI,MAAM,UAAU,QAAQ,GAAG,gCAAgC;CAGtE,eACC,QAAQ,QACP,SAAS,KAAK,KACd,OAAO,UAAU,QAAQ,GAAG,0BAA0B,IACxD;CAEA,MAAM,OAAO,QAAQ,QAAQ,gBAAgB,QAAQ,EAAE;CACvD,MAAM,aAAa,QAAQ,cAAc,CAAC;CAE1C,OAAO;EACN,IAAI,QAAQ;EACZ,OAAO,QAAQ;EACf;EACA,SAAS,QAAQ,WAAW;EAC5B,MAAM,QAAQ,QAAQ,EAAE,MAAM,OAAO;EACrC,OAAO,QAAQ;EACf;EACA,GAAI,QAAQ,mBAAmB,KAAA,KAAa,EAAE,gBAAgB,QAAQ,eAAe;EACrF,GAAI,QAAQ,SAAS,KAAA,KAAa,QAAQ,KAAK,SAAS,KAAK,EAAE,MAAM,QAAQ,KAAK;EAClF,GAAI,SAAS,KAAA,KAAa,EAAE,KAAK;CAClC;AACD"}
1
+ {"version":3,"file":"define-CbQI8dAN.js","names":[],"sources":["../src/generated/pack-logos.ts","../src/core/define.ts"],"sourcesContent":["// AUTO-GENERATED by `bun run codegen`. Do not edit by hand.\n// Source: logos/*.svg + logos/pack-logos.json — hosts use module.logo from defineModule.\n\nconst svg_amazon =\n\t'<svg width=\"24\" height=\"24\" viewBox=\"0 0 40 40\" xmlns=\"http://www.w3.org/2000/svg\" color=\"#000\">\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M34.4352 32.2938C18.2433 39.9998 8.19438 33.5524 1.76177 29.6364C1.36372 29.3896 0.687182 29.6941 1.27417 30.3684C3.4172 32.9668 10.4403 39.2299 19.6076 39.2299C28.7811 39.2299 34.2386 34.2244 34.9213 33.3512C35.5993 32.4854 35.1204 32.0078 34.435 32.2938H34.4352ZM38.9827 29.7824C38.5478 29.2162 36.3387 29.1107 34.9483 29.2815C33.5559 29.4473 31.4658 30.2983 31.6475 30.8093C31.7407 31.0007 31.9311 30.9149 32.8876 30.8289C33.8468 30.7332 36.5339 30.3941 37.0938 31.126C37.6564 31.863 36.2368 35.3739 35.9775 35.9401C35.727 36.5063 36.0732 36.6523 36.5438 36.2752C37.0078 35.8982 37.8479 34.922 38.4117 33.5404C38.9716 32.1513 39.3132 30.2136 38.9827 29.7824Z\" fill=\"#FF9900\"/>\\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M23.548 16.57C23.548 18.5919 23.599 20.2781 22.5771 22.0737C21.7522 23.5337 20.4456 24.4315 18.9857 24.4315C16.9929 24.4315 15.8323 22.9132 15.8323 20.6723C15.8323 16.2487 19.7958 15.4458 23.548 15.4458V16.57ZM28.7817 29.2201C28.4385 29.5266 27.9422 29.5486 27.5554 29.3441C25.8327 27.9135 25.526 27.2492 24.5772 25.8842C21.7304 28.7894 19.7157 29.658 16.0221 29.658C11.657 29.658 8.25537 26.9644 8.25537 21.5701C8.25537 17.3584 10.5403 14.4896 13.7883 13.0882C16.6061 11.8471 20.5405 11.6282 23.548 11.2852V10.6136C23.548 9.37989 23.6427 7.92002 22.9202 6.85436C22.285 5.89809 21.0734 5.50389 20.0075 5.50389C18.0295 5.50389 16.2629 6.51847 15.8323 8.62072C15.7446 9.08801 15.4016 9.54791 14.9345 9.56976L9.89772 9.02969C9.47444 8.9346 9.00731 8.59164 9.12409 7.94187C10.2847 1.8396 15.7957 0 20.7301 0C23.2558 0 26.5551 0.671619 28.5479 2.58415C31.0736 4.94182 30.8327 8.08789 30.8327 11.5114V19.5993C30.8327 22.03 31.84 23.0957 32.7889 24.4097C33.1246 24.8768 33.1977 25.439 32.7743 25.7892C31.7159 26.6724 29.8326 28.3149 28.7961 29.2347L28.7815 29.2201\" fill=\"currentColor\"/>\\n</svg>'\nconst svg_artifacts =\n\t'<!-- Lucide icon \"package\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Artifacts</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z\" />\\n <path d=\"M12 22V12\" />\\n <path d=\"m3.3 7 7.703 4.734a2 2 0 0 0 1.994 0L20.7 7\" />\\n <path d=\"m7.5 4.27 9 5.15\" />\\n</svg>'\nconst svg_browser =\n\t'<!-- Lucide icon \"app-window\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Browser</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\" />\\n <path d=\"M10 4v4\" />\\n <path d=\"M2 8h20\" />\\n <path d=\"M6 4v4\" />\\n</svg>'\nconst svg_calendar =\n\t'<!-- Lucide icon \"calendar-days\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Calendar</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M8 2v4\" />\\n <path d=\"M16 2v4\" />\\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"4\" rx=\"2\" />\\n <path d=\"M3 10h18\" />\\n <path d=\"M8 14h.01\" />\\n <path d=\"M12 14h.01\" />\\n <path d=\"M16 14h.01\" />\\n <path d=\"M8 18h.01\" />\\n <path d=\"M12 18h.01\" />\\n <path d=\"M16 18h.01\" />\\n</svg>'\nconst svg_cloudflare =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\\n <title>Cloudflare</title>\\n <path fill=\"#F38020\" d=\"M16.5088 16.8447c.1475-.5068.0908-.9707-.1553-1.3154-.2246-.3164-.6045-.499-1.0615-.5205l-8.6592-.1123a.1559.1559 0 0 1-.1333-.0713c-.0283-.042-.0351-.0986-.021-.1553.0278-.084.1123-.1484.2036-.1562l8.7359-.1123c1.0351-.0489 2.1601-.8868 2.5537-1.9136l.499-1.3013c.0215-.0561.0293-.1128.0147-.168-.5625-2.5463-2.835-4.4453-5.5499-4.4453-2.5039 0-4.6284 1.6177-5.3876 3.8614-.4927-.3658-1.1187-.5625-1.794-.499-1.2026.119-2.1665 1.083-2.2861 2.2856-.0283.31-.0069.6128.0635.894C1.5683 13.171 0 14.7754 0 16.752c0 .1748.0142.3515.0352.5273.0141.083.0844.1475.1689.1475h15.9814c.0909 0 .1758-.0645.2032-.1553l.12-.4268zm2.7568-5.5634c-.0771 0-.1611 0-.2383.0112-.0566 0-.1054.0415-.127.0976l-.3378 1.1744c-.1475.5068-.0918.9707.1543 1.3164.2256.3164.6055.498 1.0625.5195l1.8437.1133c.0557 0 .1055.0263.1329.0703.0283.043.0351.1074.0214.1562-.0283.084-.1132.1485-.204.1553l-1.921.1123c-1.041.0488-2.1582.8867-2.5527 1.914l-.1406.3585c-.0283.0713.0215.1416.0986.1416h6.5977c.0771 0 .1474-.0489.169-.126.1122-.4082.1757-.837.1757-1.2803 0-2.6025-2.125-4.727-4.7344-4.727\"/>\\n</svg>'\nconst svg_cloudflare_browser =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 64 65\" color=\"#000\" fill=\"currentColor\">\\n <title>Cloudflare Browser Run</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M23.3 18.2a2.1 2.1 0 1 1-4.2 0 2.1 2.1 0 0 1 4.2 0m-6.7 0a2.1 2.1 0 1 1-4.2 0 2.1 2.1 0 0 1 4.2 0m13.3-.61a2.1 2.1 0 1 0 0 1.22zm28.1-1.6V12.7l-2-2h-1.39v5.29zm0 9.67v-4.99h-3.39v4.99zm0 9.67v-4.99h-3.39v4.99zM58 45v-4.99h-3.39V45zm-3.39 9.6H56l2-2v-2.93h-3.39zm-17.9-4H41v4h-4.29zm8.96 0h4.29v4h-4.29zm-8.96-29H41v4h-4.29zm8.96 0h4.29v4h-4.29zm4.29-6.9h-4.29v-4h4.29zm-8.96 0h-4.29v-4H41zm-8.96-4h-24l-2 2v39.9l2 2h24v-4h-22v-25h22v-4h-22v-6.9h22z\"/>\\n</svg>'\nconst svg_cloudflare_email =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 48 48\" color=\"#000\" fill=\"currentColor\">\\n <title>Cloudflare Email Service</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M42.038 10.568h-36l-1.5 1.5v23.864l1.5 1.5h36l1.5-1.5V12.068zm-18 15.397L10.005 13.568h28.072l-14.04 12.397ZM17.288 24l-9.75 8.61V15.36zm2.25 2.003 3.494 3.082h1.988l3.48-3.082 9.578 8.43H10.005zM30.788 24l9.75-8.61v17.25z\"/>\\n</svg>'\nconst svg_code_sandbox =\n\t'<!-- Lucide icon \"box\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Code sandbox</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z\" />\\n <path d=\"m3.3 7 8.7 5 8.7-5\" />\\n <path d=\"M12 22V12\" />\\n</svg>'\nconst svg_content_type =\n\t'<!-- Lucide icon \"file-type\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Content type</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\" />\\n <path d=\"M14 2v4a2 2 0 0 0 2 2h4\" />\\n <path d=\"M9 13v-1h6v1\" />\\n <path d=\"M12 12v6\" />\\n <path d=\"M11 18h2\" />\\n</svg>'\nconst svg_crypto =\n\t'<!-- Lucide icon \"key-round\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Crypto</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z\" />\\n <circle cx=\"16.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\" />\\n</svg>'\nconst svg_document_extract =\n\t'<!-- Lucide icon \"scan-text\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Document extract</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M3 7V5a2 2 0 0 1 2-2h2\" />\\n <path d=\"M17 3h2a2 2 0 0 1 2 2v2\" />\\n <path d=\"M21 17v2a2 2 0 0 1-2 2h-2\" />\\n <path d=\"M7 21H5a2 2 0 0 1-2-2v-2\" />\\n <path d=\"M7 8h8\" />\\n <path d=\"M7 12h10\" />\\n <path d=\"M7 16h6\" />\\n</svg>'\nconst svg_document_render =\n\t'<!-- Lucide icon \"printer\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Document render</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2\" />\\n <path d=\"M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6\" />\\n <rect x=\"6\" y=\"14\" width=\"12\" height=\"8\" rx=\"1\" />\\n</svg>'\nconst svg_email =\n\t'<!-- Lucide icon \"mail\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Email</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <rect width=\"20\" height=\"16\" x=\"2\" y=\"4\" rx=\"2\" />\\n <path d=\"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\" />\\n</svg>'\nconst svg_email_message =\n\t'<!-- Lucide icon \"mails\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Email message</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <rect width=\"16\" height=\"13\" x=\"6\" y=\"4\" rx=\"2\" />\\n <path d=\"m22 7-7.1 3.78c-.57.3-1.23.3-1.8 0L6 7\" />\\n <path d=\"M2 8v11c0 1.1.9 2 2 2h14\" />\\n</svg>'\nconst svg_files =\n\t'<!-- Lucide icon \"folder-open\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Files</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2\" />\\n</svg>'\nconst svg_image =\n\t'<!-- Lucide icon \"image\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Image</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\" />\\n <circle cx=\"9\" cy=\"9\" r=\"2\" />\\n <path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\" />\\n</svg>'\nconst svg_imessage =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 41.5 51\" color=\"#000\" fill=\"currentColor\">\\n\\t<style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n\\t<path d=\"M40.2,17.4c-3.4,2.1-5.5,5.7-5.5,9.7c0,4.5,2.7,8.6,6.8,10.3c-0.8,2.6-2,5-3.5,7.2c-2.2,3.1-4.5,6.3-7.9,6.3s-4.4-2-8.4-2\\n\\t\\tc-3.9,0-5.3,2.1-8.5,2.1s-5.4-2.9-7.9-6.5C2,39.5,0.1,33.7,0,27.6c0-9.9,6.4-15.2,12.8-15.2c3.4,0,6.2,2.2,8.3,2.2\\n\\t\\tc2,0,5.2-2.3,9-2.3C34.1,12.2,37.9,14.1,40.2,17.4z M28.3,8.1C30,6.1,30.9,3.6,31,1c0-0.3,0-0.7-0.1-1c-2.9,0.3-5.6,1.7-7.5,3.9\\n\\t\\tc-1.7,1.9-2.7,4.3-2.8,6.9c0,0.3,0,0.6,0.1,0.9c0.2,0,0.5,0.1,0.7,0.1C24.1,11.6,26.6,10.2,28.3,8.1z\" />\\n</svg>'\nconst svg_katana =\n\t'<svg\\n xmlns=\"http://www.w3.org/2000/svg\"\\n width=\"24\"\\n height=\"24\"\\n viewBox=\"0 0 180 180\"\\n>\\n <title>Katana</title>\\n <rect width=\"180\" height=\"180\" fill=\"#EEFF38\" />\\n <g transform=\"matrix(0.59 0 0 0.59 -148.35268 -146.39143)\" fill=\"#092332\">\\n <path d=\"M415.791 359.592H381.3L340.784 400.746V359.592H315.852V453.842H340.784V435.503L358.653 417.378L384.417 454.055H415.583L376.729 399.04L415.791 359.592Z\" />\\n <path d=\"M438.692 359.659V358.588C442.452 356.662 447.095 353.451 451.076 348.742C459.258 339.109 458.595 329.477 458.595 329.477H432.058V344.889V358.588V359.659H419.011V381.279H432.058V419.167C432.058 432.866 432.058 454.058 458.595 454.058C485.131 454.058 490.438 452.346 490.438 452.346V427.515C465.007 428.799 458.595 430.94 458.595 417.026V415.1V381.279H490.438V359.659H458.595H438.692Z\" />\\n </g>\\n</svg>'\nconst svg_mastra =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 400 400\">\\n <title>Mastra</title>\\n <rect width=\"400\" height=\"400\" rx=\"20\" fill=\"#000\"/>\\n <g transform=\"matrix(10 0 0 10 30 30)\">\\n <path fill=\"#fff\" d=\"m 4.99805,17.3481 c 2.48432,0 4.49804,2.0147 4.49804,4.4991 -1.9e-4,2.4841 -2.01384,4.498 -4.49804,4.498 C 2.51394,26.3451 0.500196,24.3313 0.5,21.8472 0.5,19.3629 2.51382,17.3483 4.99805,17.3481 Z M 10.8867,5.65479 c 2.4842,0 4.4979,2.01388 4.4981,4.49801 0,0.3397 -0.0378,0.6704 -0.1093,0.9884 -0.3137,1.395 -0.5802,2.9769 0.2173,4.1636 l 1.2647,1.8819 c 0.0788,0.1172 0.2152,0.1796 0.3562,0.1711 0.1232,-0.0074 0.2388,-0.0687 0.3077,-0.1712 l 1.2662,-1.8846 c 0.7896,-1.1752 0.536,-2.7394 0.2329,-4.1224 -0.0682,-0.3109 -0.1041,-0.6339 -0.1041,-0.9652 3e-4,-2.48416 2.0149,-4.49809 4.499,-4.49809 2.484,2.2e-4 4.4978,2.01407 4.4981,4.49809 0,0.3792 -0.047,0.7475 -0.1355,1.0993 -0.3233,1.2855 -0.5963,2.7204 0.0666,3.8682 l 1.2144,2.1029 c 0.0229,0.0397 0.0655,0.0633 0.1113,0.0633 2.4842,2e-4 4.4981,2.0148 4.4981,4.4991 -2e-4,2.4841 -2.014,4.4979 -4.4981,4.498 -2.4842,0 -4.4978,-2.0139 -4.498,-4.498 0,-0.3875 0.0489,-0.7636 0.141,-1.1223 0.3325,-1.2956 0.6165,-2.745 -0.0524,-3.9033 l -1.1565,-2.003 c -0.0388,-0.0672 -0.1113,-0.1052 -0.189,-0.1052 -0.0171,0 -0.033,0.0075 -0.0426,0.0217 l -1.2832,1.9092 c -0.8036,1.1956 -0.5274,2.7915 -0.2056,4.1956 0.0742,0.3238 0.1135,0.6609 0.1135,1.0073 -2e-4,2.484 -2.0141,4.4978 -4.4981,4.498 -2.4842,0 -4.4988,-2.0139 -4.499,-4.498 0,-0.2604 0.0222,-0.5156 0.0647,-0.7638 0.2208,-1.2886 0.3808,-2.7164 -0.3484,-3.8015 L 11.7419,15.9801 C 11.1829,15.1483 10.2191,14.7141 9.28286,14.3567 7.5906,13.7106 6.38867,12.0721 6.38867,10.1528 6.38886,7.66869 8.40254,5.65482 10.8867,5.65479 Z\"/>\\n </g>\\n</svg>'\nconst svg_messaging =\n\t'<!-- Lucide icon \"messages-square\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Messaging</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M14 9a2 2 0 0 1-2 2H6l-4 4V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2z\" />\\n <path d=\"M18 9h2a2 2 0 0 1 2 2v11l-4-4h-6a2 2 0 0 1-2-2v-1\" />\\n</svg>'\nconst svg_pinecone =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 28 30\" color=\"#000\" fill=\"none\">\\n <title>Pinecone</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <g stroke=\"currentColor\" stroke-linecap=\"square\" fill=\"none\">\\n <path d=\"m14.58 5.24.7-3.89\" stroke-width=\"1.77\"/>\\n <path d=\"m17.8 3.86-2.44-2.98-3.32 1.94\" stroke-linejoin=\"round\" stroke-width=\"1.77\"/>\\n <path d=\"m11.66 21.84.68-3.89\" stroke-width=\"1.77\"/>\\n <path d=\"m14.88 20.45-2.46-2.97-3.31 1.95\" stroke-linejoin=\"round\" stroke-width=\"1.77\"/>\\n <path d=\"m13.07 13.82.68-3.89\" stroke-width=\"1.77\"/>\\n <path d=\"m16.29 12.43-2.45-2.96-3.31 1.94\" stroke-linejoin=\"round\" stroke-width=\"1.77\"/>\\n <circle cx=\"10.77\" cy=\"26.85\" fill=\"currentColor\" stroke=\"none\" r=\"1.63\"/>\\n <path d=\"m6.15 21.5-2.99 2.08\" stroke-width=\"1.68\"/>\\n <path d=\"m6.33 24.87-3.53-1.04.26-3.67\" stroke-linejoin=\"round\" stroke-width=\"1.68\"/>\\n <path d=\"m17.01 23.45 2.08 3\" stroke-width=\"1.68\"/>\\n <path d=\"m15.67 26.55 3.67.25 1.04-3.51\" stroke-linejoin=\"round\" stroke-width=\"1.68\"/>\\n <path d=\"m20.42 17.36 3.66.66\" stroke-width=\"1.72\"/>\\n <path d=\"m21.68 20.57 2.84-2.47-1.79-3.29\" stroke-linejoin=\"round\" stroke-width=\"1.72\"/>\\n <path d=\"m19.35 10.1 3.26-1.8\" stroke-width=\"1.72\"/>\\n <path d=\"m19.53 6.65 3.47 1.44-.65 3.69\" stroke-linejoin=\"round\" stroke-width=\"1.72\"/>\\n <path d=\"m4.97 14.64-3.67-.64\" stroke-width=\"1.72\"/>\\n <path d=\"m2.68 17.22-1.82-3.29 2.81-2.48\" stroke-linejoin=\"round\" stroke-width=\"1.72\"/>\\n <path d=\"m8.45 8.17-2.45-2.8\" stroke-width=\"1.72\"/>\\n <path d=\"m9.46 4.88-3.75.16-.66 3.69\" stroke-linejoin=\"round\" stroke-width=\"1.72\"/>\\n </g>\\n</svg>'\nconst svg_qdrant =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\\n <title>Qdrant</title>\\n <path fill=\"#DC244C\" d=\"m12 16.5 3.897-2.25v-4.5L12 7.5 8.103 9.75v4.5zM1.607 18 12 24l3.897-2.25v-4.5L12 19.5l-6.495-3.75v-7.5L12 4.5l6.495 3.75v15L22.393 21V6L12 0 1.607 6Z\"/>\\n</svg>'\nconst svg_queue =\n\t'<!-- Lucide icon \"list-ordered\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Queue</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M10 12h11\" />\\n <path d=\"M10 18h11\" />\\n <path d=\"M10 6h11\" />\\n <path d=\"M4 10h2\" />\\n <path d=\"M4 6h1v4\" />\\n <path d=\"M6 18H4c0-1 2-2 2-3s-1-1.5-2-1\" />\\n</svg>'\nconst svg_rag =\n\t'<!-- Lucide icon \"brain-circuit\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>RAG</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z\" />\\n <path d=\"M9 13a4.5 4.5 0 0 0 3-4\" />\\n <path d=\"M6.003 5.125A3 3 0 0 0 6.401 6.5\" />\\n <path d=\"M3.477 10.896a4 4 0 0 1 .585-.396\" />\\n <path d=\"M6 18a4 4 0 0 1-1.967-.516\" />\\n <path d=\"M12 13h4\" />\\n <path d=\"M12 18h6a2 2 0 0 1 2 2v1\" />\\n <path d=\"M12 8h8\" />\\n <path d=\"M16 8V5a2 2 0 0 1 2-2\" />\\n <circle cx=\"16\" cy=\"13\" r=\".5\" />\\n <circle cx=\"18\" cy=\"3\" r=\".5\" />\\n <circle cx=\"20\" cy=\"21\" r=\".5\" />\\n <circle cx=\"20\" cy=\"8\" r=\".5\" />\\n</svg>'\nconst svg_resend =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" color=\"#000\" fill=\"currentColor\">\\n <title>Resend</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M14.679 0c4.648 0 7.413 2.765 7.413 6.434s-2.765 6.434-7.413 6.434H12.33L24 24h-8.245l-8.88-8.44c-.636-.588-.93-1.273-.93-1.86 0-.831.587-1.565 1.713-1.883l4.574-1.224c1.737-.465 2.936-1.81 2.936-3.572 0-2.153-1.761-3.4-3.939-3.4H0V0z\"/>\\n</svg>'\nconst svg_scheduler =\n\t'<!-- Lucide icon \"clock\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Scheduler</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\\n <polyline points=\"12 6 12 12 16 14\" />\\n</svg>'\nconst svg_shipstation =\n\t'<svg\\n\\txmlns=\"http://www.w3.org/2000/svg\"\\n\\twidth=\"24\"\\n\\theight=\"24\"\\n\\tviewBox=\"-0.25 -0.25 67.8 67.8\"\\n>\\n\\t<title>ShipStation</title>\\n\\t<path\\n\\t\\tfill=\"#00E664\"\\n\\t\\td=\"M58.61,19.67c0-2.43.99-4.64,2.58-6.23,0,0,0,0,0,0l-7.32-7.33s0,0,0,0c-1.6,1.59-3.8,2.58-6.23,2.58-4.87,0-8.82-3.95-8.82-8.82h0s-5.18,0-5.18,0h-5.18c0,4.87-3.95,8.82-8.82,8.82-2.43,0-4.64-.99-6.23-2.58,0,0,0,0,0,0l-7.32,7.33s0,0,0,0c1.59,1.6,2.58,3.8,2.58,6.23,0,4.87-3.95,8.82-8.82,8.82,0,0,0,0,0,0v10.36s0,0,0,0c4.87,0,8.82,3.95,8.82,8.82,0,2.43-.99,4.64-2.58,6.23,0,0,0,0,0,0l7.32,7.33s0,0,0,0c1.6-1.59,3.8-2.58,6.23-2.58,4.87,0,8.82,3.95,8.82,8.82h0s5.18,0,5.18,0h5.18c0-4.87,3.95-8.82,8.82-8.82,2.43,0,4.64.99,6.23,2.58,0,0,0,0,0,0l7.32-7.33s0,0,0,0c-1.59-1.6-2.58-3.8-2.58-6.23,0-4.87,3.95-8.82,8.82-8.82,0,0,0,0,0,0v-10.36s0,0,0,0c-4.87,0-8.82-3.95-8.82-8.82ZM50.61,43.46l-16.97,9.8-16.97-9.8v-19.6l16.97-9.8,16.97,9.8v19.6Z\"\\n\\t/>\\n</svg>'\nconst svg_skills =\n\t'<!-- Lucide icon \"sparkles\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Skills</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z\" />\\n <path d=\"M20 3v4\" />\\n <path d=\"M22 5h-4\" />\\n <path d=\"M4 17v2\" />\\n <path d=\"M5 18H3\" />\\n</svg>'\nconst svg_slack =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"73.6 73.6 122.8 122.8\">\\n\\t<path fill=\"#E01E5A\" d=\"M99.4,151.2c0,7.1-5.8,12.9-12.9,12.9c-7.1,0-12.9-5.8-12.9-12.9c0-7.1,5.8-12.9,12.9-12.9h12.9V151.2z\" />\\n\\t<path fill=\"#E01E5A\" d=\"M105.9,151.2c0-7.1,5.8-12.9,12.9-12.9s12.9,5.8,12.9,12.9v32.3c0,7.1-5.8,12.9-12.9,12.9\\n\\t\\ts-12.9-5.8-12.9-12.9V151.2z\" />\\n\\t<path fill=\"#36C5F0\" d=\"M118.8,99.4c-7.1,0-12.9-5.8-12.9-12.9c0-7.1,5.8-12.9,12.9-12.9s12.9,5.8,12.9,12.9v12.9H118.8z\" />\\n\\t<path fill=\"#36C5F0\" d=\"M118.8,105.9c7.1,0,12.9,5.8,12.9,12.9s-5.8,12.9-12.9,12.9H86.5c-7.1,0-12.9-5.8-12.9-12.9\\n\\t\\ts5.8-12.9,12.9-12.9H118.8z\" />\\n\\t<path fill=\"#2EB67D\" d=\"M170.6,118.8c0-7.1,5.8-12.9,12.9-12.9c7.1,0,12.9,5.8,12.9,12.9s-5.8,12.9-12.9,12.9h-12.9V118.8z\" />\\n\\t<path fill=\"#2EB67D\" d=\"M164.1,118.8c0,7.1-5.8,12.9-12.9,12.9c-7.1,0-12.9-5.8-12.9-12.9V86.5c0-7.1,5.8-12.9,12.9-12.9\\n\\t\\tc7.1,0,12.9,5.8,12.9,12.9V118.8z\" />\\n\\t<path fill=\"#ECB22E\" d=\"M151.2,170.6c7.1,0,12.9,5.8,12.9,12.9c0,7.1-5.8,12.9-12.9,12.9c-7.1,0-12.9-5.8-12.9-12.9v-12.9H151.2z\" />\\n\\t<path fill=\"#ECB22E\" d=\"M151.2,164.1c-7.1,0-12.9-5.8-12.9-12.9c0-7.1,5.8-12.9,12.9-12.9h32.3c7.1,0,12.9,5.8,12.9,12.9\\n\\t\\tc0,7.1-5.8,12.9-12.9,12.9H151.2z\" />\\n</svg>'\nconst svg_supabase =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\\n <title>Supabase</title>\\n <path fill=\"#3ECF8E\" d=\"M11.9 1.036c-.015-.986-1.26-1.41-1.874-.637L.764 12.05C-.33 13.427.65 15.455 2.409 15.455h9.579l.113 7.51c.014.985 1.259 1.408 1.873.636l9.262-11.653c1.093-1.375.113-3.403-1.645-3.403h-9.642z\"/>\\n</svg>'\nconst svg_tasks =\n\t'<!-- Lucide icon \"list-todo\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Tasks</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <rect x=\"3\" y=\"5\" width=\"6\" height=\"6\" rx=\"1\" />\\n <path d=\"m3 17 2 2 4-4\" />\\n <path d=\"M13 6h8\" />\\n <path d=\"M13 12h8\" />\\n <path d=\"M13 18h8\" />\\n</svg>'\nconst svg_teams =\n\t'<!-- Microsoft Office Teams (2025–present)\\n https://upload.wikimedia.org/wikipedia/commons/0/07/Microsoft_Office_Teams_%282025%E2%80%93present%29.svg\\n Wikimedia Commons\\n-->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"4 4 36 38\" width=\"24\" height=\"24\">\\n <title>Microsoft Teams</title><path fill=\"url(#a)\" d=\"M21.9999 20h12c3.3137 0 6 2.6863 6 6v10c0 3.3137-2.6863 6-6 6s-6-2.6863-6-6V26c0-3.3137-2.6863-6-6-6\"/><path fill=\"url(#b)\" d=\"M7.99988 24c0-3.3137 2.68632-6 6.00002-6h8c3.3137 0 6 2.6863 6 6v12c0 3.3137 2.6863 6 6 6l-16.0001-.0001c-5.5228 0-9.99992-4.4771-9.99992-10z\"/><path fill=\"url(#c)\" fill-opacity=\".7\" d=\"M7.99988 24c0-3.3137 2.68632-6 6.00002-6h8c3.3137 0 6 2.6863 6 6v12c0 3.3137 2.6863 6 6 6l-16.0001-.0001c-5.5228 0-9.99992-4.4771-9.99992-10z\"/><path fill=\"url(#d)\" fill-opacity=\".7\" d=\"M7.99988 24c0-3.3137 2.68632-6 6.00002-6h8c3.3137 0 6 2.6863 6 6v12c0 3.3137 2.6863 6 6 6l-16.0001-.0001c-5.5228 0-9.99992-4.4771-9.99992-10z\"/><path fill=\"url(#e)\" d=\"M32.9999 18c2.7614 0 5-2.2386 5-5s-2.2386-5-5-5-5 2.2386-5 5 2.2386 5 5 5\"/><path fill=\"url(#f)\" fill-opacity=\".46\" d=\"M32.9999 18c2.7614 0 5-2.2386 5-5s-2.2386-5-5-5-5 2.2386-5 5 2.2386 5 5 5\"/><path fill=\"url(#g)\" fill-opacity=\".4\" d=\"M32.9999 18c2.7614 0 5-2.2386 5-5s-2.2386-5-5-5-5 2.2386-5 5 2.2386 5 5 5\"/><path fill=\"url(#h)\" d=\"M17.9999 16c3.3137 0 6-2.6863 6-6 0-3.31371-2.6863-6-6-6s-6 2.68629-6 6c0 3.3137 2.6863 6 6 6\"/><path fill=\"url(#i)\" fill-opacity=\".6\" d=\"M17.9999 16c3.3137 0 6-2.6863 6-6 0-3.31371-2.6863-6-6-6s-6 2.68629-6 6c0 3.3137 2.6863 6 6 6\"/><path fill=\"url(#j)\" fill-opacity=\".5\" d=\"M17.9999 16c3.3137 0 6-2.6863 6-6 0-3.31371-2.6863-6-6-6s-6 2.68629-6 6c0 3.3137 2.6863 6 6 6\"/><rect width=\"16\" height=\"16\" x=\"4\" y=\"23\" fill=\"url(#k)\" rx=\"3.25\"/><rect width=\"16\" height=\"16\" x=\"4\" y=\"23\" fill=\"url(#l)\" fill-opacity=\".7\" rx=\"3.25\"/><path fill=\"#fff\" d=\"M15.4792 28.1054h-2.4471v7.466h-2.0648v-7.466H8.52014v-1.6768h6.95906z\"/><defs><radialGradient id=\"a\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"matrix(13.4784 0 0 33.2694 39.7967 22.1739)\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#a98aff\"/><stop offset=\".14\" stop-color=\"#8c75ff\"/><stop offset=\".565\" stop-color=\"#5f50e2\"/><stop offset=\".9\" stop-color=\"#3c2cb8\"/></radialGradient><radialGradient id=\"b\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"rotate(68.1539 -7.71566095 14.71355834)scale(32.752 33.1231)\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#85c2ff\"/><stop offset=\".69\" stop-color=\"#7588ff\"/><stop offset=\"1\" stop-color=\"#6459fe\"/></radialGradient><radialGradient id=\"d\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"rotate(113.326 8.09285255 17.64474501)scale(19.2186 15.4273)\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#bd96ff\"/><stop offset=\".686685\" stop-color=\"#bd96ff\" stop-opacity=\"0\"/></radialGradient><radialGradient id=\"e\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"matrix(0 -10 12.6216 0 32.9999 11.5714)\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".268201\" stop-color=\"#6868f7\"/><stop offset=\"1\" stop-color=\"#3923b1\"/></radialGradient><radialGradient id=\"f\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"rotate(40.0516 -.03068196 44.8729095)scale(7.14629 10.3363)\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".270711\" stop-color=\"#a1d3ff\"/><stop offset=\".813393\" stop-color=\"#a1d3ff\" stop-opacity=\"0\"/></radialGradient><radialGradient id=\"g\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"rotate(-41.6581 32.11799918 -43.41948423)scale(8.51275 20.8824)\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#e3acfd\"/><stop offset=\".816041\" stop-color=\"#9fa2ff\" stop-opacity=\"0\"/></radialGradient><radialGradient id=\"h\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"matrix(0 -12 15.146 0 17.9999 8.28571)\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".268201\" stop-color=\"#8282ff\"/><stop offset=\"1\" stop-color=\"#3923b1\"/></radialGradient><radialGradient id=\"i\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"rotate(40.0516 -3.15465147 21.41641466)scale(8.57554 12.4035)\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".270711\" stop-color=\"#a1d3ff\"/><stop offset=\".813393\" stop-color=\"#a1d3ff\" stop-opacity=\"0\"/></radialGradient><radialGradient id=\"j\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"rotate(-41.6581 20.38180375 -26.51566158)scale(10.2153 25.0589)\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#e3acfd\"/><stop offset=\".816041\" stop-color=\"#9fa2ff\" stop-opacity=\"0\"/></radialGradient><radialGradient id=\"k\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"rotate(45 -25.76345597 16.32842712)scale(22.6274)\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".046875\" stop-color=\"#688eff\"/><stop offset=\".946875\" stop-color=\"#230f94\"/></radialGradient><radialGradient id=\"l\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"matrix(0 11.2 -13.0702 0 12 32.6)\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".570647\" stop-color=\"#6965f6\" stop-opacity=\"0\"/><stop offset=\"1\" stop-color=\"#8f8fff\"/></radialGradient><linearGradient id=\"c\" x1=\"20.5936\" x2=\"20.5936\" y1=\"18\" y2=\"42\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".801159\" stop-color=\"#6864f6\" stop-opacity=\"0\"/><stop offset=\"1\" stop-color=\"#5149de\"/></linearGradient></defs></svg>'\nconst svg_telegram =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 1000 1000\">\\n\\t<defs>\\n\\t\\t<linearGradient id=\"g\" x1=\"50%\" x2=\"50%\" y1=\"0%\" y2=\"99.2583404%\">\\n\\t\\t\\t<stop offset=\"0%\" stop-color=\"#2AABEE\" />\\n\\t\\t\\t<stop offset=\"100%\" stop-color=\"#229ED9\" />\\n\\t\\t</linearGradient>\\n\\t</defs>\\n\\t<circle cx=\"500\" cy=\"500\" r=\"500\" fill=\"url(#g)\" />\\n\\t<path fill=\"#FFF\" fill-rule=\"evenodd\" d=\"M226.328419,494.722069 C372.088573,431.216685 469.284839,389.350049 517.917216,369.122161 C656.772535,311.36743 685.625481,301.334815 704.431427,301.003532 C708.567621,300.93067 717.815839,301.955743 723.806446,306.816707 C728.864797,310.92121 730.256552,316.46581 730.922551,320.357329 C731.588551,324.248848 732.417879,333.113828 731.758626,340.040666 C724.234007,419.102486 691.675104,610.964674 675.110982,699.515267 C668.10208,736.984342 654.301336,749.547532 640.940618,750.777006 C611.904684,753.448938 589.856115,731.588035 561.733393,713.153237 C517.726886,684.306416 492.866009,666.349181 450.150074,638.200013 C400.78442,605.66878 432.786119,587.789048 460.919462,558.568563 C468.282091,550.921423 596.21508,434.556479 598.691227,424.000355 C599.00091,422.680135 599.288312,417.758981 596.36474,415.160431 C593.441168,412.561881 589.126229,413.450484 586.012448,414.157198 C581.598758,415.158943 511.297793,461.625274 375.109553,553.556189 C355.154858,567.258623 337.080515,573.934908 320.886524,573.585046 C303.033948,573.199351 268.692754,563.490928 243.163606,555.192408 C211.851067,545.013936 186.964484,539.632504 189.131547,522.346309 C190.260287,513.342589 202.659244,504.134509 226.328419,494.722069 Z\" />\\n</svg>'\nconst svg_textract =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\\n <title>Amazon Textract</title>\\n <rect width=\"24\" height=\"24\" fill=\"#01A88D\"/>\\n <path fill=\"#FFFFFF\" d=\"M10.4958528,9.80844542 C11.9822217,9.80844542 13.19215,11.017579 13.19215,12.5029715 C13.19215,13.9883641 11.9822217,15.1974977 10.4958528,15.1974977 C9.00948386,15.1974977 7.80055714,13.9883641 7.80055714,12.5029715 C7.80055714,11.017579 9.00948386,9.80844542 10.4958528,9.80844542 L10.4958528,9.80844542 Z M10.4958528,16.198436 C12.3638299,16.198436 13.8962722,14.8031279 14.1436665,13.0034407 L18.0288585,13.0034407 L18.0288585,12.0025023 L14.1436665,12.0025023 C13.8962722,10.2028151 12.3638299,8.80750704 10.4958528,8.80750704 C8.62887727,8.80750704 7.09543335,10.2028151 6.84904066,12.0025023 L5.38270368,12.0025023 L6.42536543,10.2568658 L5.56399261,9.74438536 L4.07061254,12.2467313 C3.97646249,12.4048796 3.97646249,12.6010635 4.07061254,12.7592118 L5.56399261,15.2615577 L6.42536543,14.7490773 L5.38270368,13.0034407 L6.84904066,13.0034407 C7.09543335,14.8031279 8.62887727,16.198436 10.4958528,16.198436 L10.4958528,16.198436 Z M9.99505462,12.0355333 L8.9994679,12.0355333 L8.9994679,11.0345949 L12.0042568,11.0345949 L12.0042568,12.0355333 L10.9966509,12.0355333 L10.9966509,14.5819206 L9.99505462,14.5819206 L9.99505462,12.0355333 Z M15.9946164,5.70359712 L18.2842655,7.97772912 L15.9946164,7.97772912 L15.9946164,5.70359712 Z M19.8527653,8.12286519 L15.8473818,4.146137 C15.7532317,4.05304973 15.626029,4 15.4938183,4 L9.46921656,4 C9.19177439,4 8.96841842,4.2242102 8.96841842,4.50046919 L8.96841842,7.26305912 L9.97001471,7.26305912 L9.97001471,5.00093838 L14.9930201,5.00093838 L14.9930201,8.47819831 C14.9930201,8.7544573 15.2173777,8.9786675 15.4938183,8.9786675 L18.9984037,8.9786675 L18.9984037,18.9990616 L9.97001471,18.9990616 L9.97001471,17.4796372 L8.96841842,17.4796372 L8.96841842,19.4995308 C8.96841842,19.7757898 9.19177439,20 9.46921656,20 L19.4992019,20 C19.776644,20 20,19.7757898 20,19.4995308 L20,8.47819831 C20,8.34507351 19.947917,8.21695339 19.8527653,8.12286519 L19.8527653,8.12286519 Z\"/>\\n</svg>'\nconst svg_vector_store =\n\t'<!-- Lucide icon \"layers\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Vector store</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <path d=\"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z\" />\\n <path d=\"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12\" />\\n <path d=\"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17\" />\\n</svg>'\nconst svg_walmart =\n\t'<svg width=\"24\" height=\"24\" viewBox=\"0 0 371 418\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\\n <path d=\"M261.164 190.042C269.861 188.256 346.779 153.009 353.64 149.046C369.317 139.994 374.684 119.951 365.633 104.281C356.581 88.6112 336.538 83.2373 320.868 92.2889C314 96.2516 245.021 145.243 239.125 151.875C232.368 159.481 231.2 170.354 236.199 179.009C241.197 187.665 251.201 192.093 261.164 190.042Z\" fill=\"#FFC220\"/>\\n <path d=\"M353.64 268.08C346.772 264.117 269.854 228.87 261.164 227.083C251.201 225.032 241.197 229.454 236.199 238.116C231.2 246.771 232.368 257.651 239.125 265.25C245.021 271.882 314.007 320.874 320.868 324.837C336.545 333.888 356.588 328.514 365.633 312.844C374.684 297.167 369.311 277.124 353.64 268.08Z\" fill=\"#FFC220\"/>\\n <path d=\"M185.017 267.663C175.02 267.663 166.184 274.115 162.979 283.764C160.184 292.19 152.245 376.422 152.245 384.347C152.245 402.444 166.914 417.119 185.017 417.119C203.121 417.119 217.79 402.451 217.79 384.347C217.79 376.422 209.85 292.183 207.056 283.764C203.851 274.108 195.014 267.663 185.017 267.663Z\" fill=\"#FFC220\"/>\\n <path d=\"M108.872 227.084C100.182 228.871 23.2572 264.118 16.3955 268.08C0.718485 277.132 -4.64854 297.175 4.4031 312.845C13.4547 328.522 33.4977 333.889 49.1677 324.837C56.0364 320.875 125.015 271.883 130.911 265.251C137.668 257.645 138.836 246.772 133.837 238.117C128.839 229.461 118.835 225.033 108.872 227.084Z\" fill=\"#FFC220\"/>\\n <path d=\"M49.1662 92.2889C33.4892 83.2373 13.4463 88.6112 4.40158 104.281C-4.65006 119.958 0.723919 140.001 16.394 149.046C23.2626 153.009 100.181 188.256 108.871 190.042C118.833 192.093 128.837 187.672 133.836 179.009C138.834 170.354 137.667 159.474 130.909 151.875C125.014 145.243 56.0349 96.2516 49.1662 92.2889Z\" fill=\"#FFC220\"/>\\n <path d=\"M185.017 0C166.921 0 152.245 14.6689 152.245 32.7722C152.245 40.6976 160.184 124.936 162.979 133.362C166.184 143.019 175.02 149.463 185.017 149.463C195.014 149.463 203.851 143.012 207.056 133.362C209.85 124.936 217.79 40.7046 217.79 32.7722C217.79 14.6759 203.121 0 185.017 0Z\" fill=\"#FFC220\"/>\\n</svg>'\nconst svg_web_fetch =\n\t'<!-- Lucide icon \"globe\" from lucide-static@0.469.0 (ISC) — https://lucide.dev -->\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#000\">\\n <title>Web fetch</title>\\n <style>@media (prefers-color-scheme:dark){:root{color:#fff}}</style>\\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\\n <path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\" />\\n <path d=\"M2 12h20\" />\\n</svg>'\nconst svg_woocommerce =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 183.6 47.5\" fill=\"#873EFF\" fill-rule=\"evenodd\">\\n <path d=\"M77.4 0c-4.3 0-7.1 1.4-9.6 6.1L56.4 27.6V8.5c0-5.7-2.7-8.5-7.7-8.5s-7.1 1.7-9.6 6.5L28.3 27.6V8.7C28.3 2.6 25.8 0 19.7 0H7.3C2.6 0 0 2.2 0 6.2s2.5 6.4 7.1 6.4h5.1v24.1c0 6.8 4.6 10.8 11.2 10.8s9.6-2.6 12.9-8.7l7.2-13.5v11.4c0 6.7 4.4 10.8 11.1 10.8s9.2-2.3 13-8.7l16.6-28C87.8 4.7 85.3 0 77.3 0h.1Z\"/>\\n <path d=\"M108.6 0C95 0 84.7 10.1 84.7 23.8s10.4 23.7 23.9 23.7 23.8-10.1 23.9-23.7C132.5 10.1 122.1 0 108.6 0Zm0 32.9c-5.1 0-8.6-3.8-8.6-9.1s3.5-9.2 8.6-9.2 8.6 3.9 8.6 9.2-3.4 9.1-8.6 9.1ZM159.7 0c-13.5 0-23.9 10.1-23.9 23.8s10.4 23.7 23.9 23.7 23.9-10.1 23.9-23.7S173.2 0 159.7 0Zm0 32.9c-5.2 0-8.5-3.8-8.5-9.1s3.4-9.2 8.5-9.2 8.6 3.9 8.6 9.2-3.4 9.1-8.6 9.1Z\"/>\\n</svg>'\n\n/** Inline SVG by module / pack id (shared files referenced many times). */\nexport const packLogosByModuleId: Readonly<Record<string, string>> = {\n\t'amazon-sp-api': svg_amazon,\n\tartifacts: svg_artifacts,\n\t'bedrock-agentcore-browser': svg_amazon,\n\t'bedrock-agentcore-code-interpreter': svg_amazon,\n\tbrowser: svg_browser,\n\tcalendar: svg_calendar,\n\t'cloudflare-browser': svg_cloudflare_browser,\n\t'cloudflare-email': svg_cloudflare_email,\n\t'cloudflare-sandbox': svg_cloudflare,\n\t'code-sandbox': svg_code_sandbox,\n\t'content-type': svg_content_type,\n\tcrypto: svg_crypto,\n\t'document-extract': svg_document_extract,\n\t'document-render': svg_document_render,\n\temail: svg_email,\n\t'email-message': svg_email_message,\n\t'eventbridge-scheduler': svg_amazon,\n\tfiles: svg_files,\n\timage: svg_image,\n\timessage: svg_imessage,\n\tkatana: svg_katana,\n\t'mastra-vector': svg_mastra,\n\tmessaging: svg_messaging,\n\tpinecone: svg_pinecone,\n\tqdrant: svg_qdrant,\n\tqueue: svg_queue,\n\trag: svg_rag,\n\tresend: svg_resend,\n\ts3: svg_amazon,\n\tscheduler: svg_scheduler,\n\tshipstation: svg_shipstation,\n\tskills: svg_skills,\n\tslack: svg_slack,\n\tsqs: svg_amazon,\n\t'supabase-vector': svg_supabase,\n\ttasks: svg_tasks,\n\tteams: svg_teams,\n\ttelegram: svg_telegram,\n\ttextract: svg_textract,\n\t'vector-store': svg_vector_store,\n\twalmart: svg_walmart,\n\t'web-fetch': svg_web_fetch,\n\twoocommerce: svg_woocommerce\n}\n\nexport function logoForModuleId(id: string): string | undefined {\n\treturn packLogosByModuleId[id]\n}\n","import { logoForModuleId } from '../generated/pack-logos'\nimport type {\n\tAuthDefinition,\n\tModuleClassification,\n\tModuleDefinition,\n\tToolContext,\n\tToolDefinition,\n\tToolRuntime,\n\tToolSideEffect\n} from './types'\nimport { assertUniqueBy } from './unique'\n\nexport type DefineToolOptions<TInput, TOutput> = {\n\tdescription: string\n\tid: string\n\tinputSchema: ToolDefinition<TInput, TOutput>['inputSchema']\n\tname: string\n\toutputSchema: ToolDefinition<TInput, TOutput>['outputSchema']\n\truntime?: ToolRuntime\n\tsideEffect?: ToolSideEffect\n\ttags?: readonly string[]\n\t/** Host-facing hints (not enforced by the kernel). */\n\tidempotent?: boolean\n\tlongRunning?: boolean\n\trequiresConfirmation?: boolean\n\tsupportsCancel?: boolean\n\tsupportsProgress?: boolean\n\tnetwork?: boolean\n\tartifacts?: boolean\n\texecute: (input: TInput, ctx: ToolContext) => Promise<TOutput>\n}\n\nexport function defineTool<TInput, TOutput>(\n\toptions: DefineToolOptions<TInput, TOutput>\n): ToolDefinition<TInput, TOutput> {\n\tconst description = options.description.trim()\n\tif (!description) {\n\t\tthrow new Error(`Tool ${options.id} is missing a model-facing description`)\n\t}\n\tif (!options.id.trim()) {\n\t\tthrow new Error('Tool id is required')\n\t}\n\tif (!options.name.trim()) {\n\t\tthrow new Error(`Tool ${options.id} is missing a name`)\n\t}\n\n\treturn {\n\t\tid: options.id,\n\t\tname: options.name,\n\t\tdescription,\n\t\tinputSchema: options.inputSchema,\n\t\toutputSchema: options.outputSchema,\n\t\tmeta: {\n\t\t\truntime: options.runtime ?? 'both',\n\t\t\tsideEffect: options.sideEffect ?? 'read',\n\t\t\ttags: options.tags,\n\t\t\tidempotent: options.idempotent,\n\t\t\tlongRunning: options.longRunning,\n\t\t\trequiresConfirmation: options.requiresConfirmation,\n\t\t\tsupportsCancel: options.supportsCancel,\n\t\t\tsupportsProgress: options.supportsProgress,\n\t\t\tnetwork: options.network,\n\t\t\tartifacts: options.artifacts\n\t\t},\n\t\texecute: async (input, ctx) => {\n\t\t\tconst parsed = options.inputSchema.parse(input)\n\t\t\treturn options.execute(parsed, ctx)\n\t\t}\n\t}\n}\n\n/** @deprecated Prefer defineTool return value directly; kept for call-site clarity in modules. */\nexport function asAnyTool<TInput, TOutput>(tool: ToolDefinition<TInput, TOutput>): ToolDefinition {\n\treturn tool\n}\n\nexport type DefineModuleOptions<TAuth = unknown> = {\n\tauth?: AuthDefinition<TAuth>\n\tdescription: string\n\tid: string\n\truntime?: ToolRuntime\n\ttitle: string\n\ttools: readonly ToolDefinition[]\n\t/** Optional override; default comes from the pack logo map by module id. */\n\tlogo?: string | undefined\n\t/**\n\t * Catalog categories for UI filters / MCP / skill grouping.\n\t * Declared on the pack (`module.ts`) — not a central registry in core.\n\t */\n\tcategories?: readonly string[]\n\t/** Host sensitivity hint (`standard` | `pii` | `phi`). Pack declares; host enforces. */\n\tclassification?: ModuleClassification\n\t/** Module-level search / badge labels. */\n\ttags?: readonly string[]\n}\n\nexport function defineModule<TAuth = unknown>(options: DefineModuleOptions<TAuth>): ModuleDefinition<TAuth> {\n\tconst description = options.description.trim()\n\tif (!description) {\n\t\tthrow new Error(`Module ${options.id} is missing a description`)\n\t}\n\tif (!options.id.trim()) {\n\t\tthrow new Error('Module id is required')\n\t}\n\tif (options.tools.length === 0) {\n\t\tthrow new Error(`Module ${options.id} must declare at least one tool`)\n\t}\n\n\tassertUniqueBy(\n\t\toptions.tools,\n\t\t(tool) => tool.id,\n\t\t(id) => `Module ${options.id} has duplicate tool id: ${id}`\n\t)\n\n\tconst logo = options.logo ?? logoForModuleId(options.id)\n\tconst categories = options.categories ?? []\n\n\treturn {\n\t\tid: options.id,\n\t\ttitle: options.title,\n\t\tdescription,\n\t\truntime: options.runtime ?? 'both',\n\t\tauth: options.auth ?? { type: 'none' },\n\t\ttools: options.tools,\n\t\tcategories,\n\t\t...(options.classification !== undefined && { classification: options.classification }),\n\t\t...(options.tags !== undefined && options.tags.length > 0 && { tags: options.tags }),\n\t\t...(logo !== undefined && { logo })\n\t}\n}\n"],"mappings":";;AAGA,MAAM,aACL;;AA6ED,MAAa,sBAAwD;CACpE,iBAAiB;CACjB,WAAW;CACX,6BAA6B;CAC7B,sCAAsC;CACtC,SAAS;CACT,UAAU;CACV,sBAAsB;CACtB,oBAAoB;CACpB,sBAAsB;CACtB,gBAAgB;CAChB,gBAAgB;CAChB,QAAQ;CACR,oBAAoB;CACpB,mBAAmB;CACnB,OAAO;CACP,iBAAiB;CACjB,yBAAyB;CACzB,OAAO;CACP,OAAO;CACP,UAAU;CACV,QAAQ;CACR,iBAAiB;CACjB,WAAW;CACX,UAAU;CACV,QAAQ;CACR,OAAO;CACP,KAAK;CACL,QAAQ;CACR,IAAI;CACJ,WAAW;CACX,aAAa;CACb,QAAQ;CACR,OAAO;CACP,KAAK;CACL,mBAAmB;CACnB,OAAO;CACP,OAAO;CACP,UAAU;CACV,UAAU;CACV,gBAAgB;CAChB,SAAS;CACT,aAAa;CACb,aAAa;AACd;AAEA,SAAgB,gBAAgB,IAAgC;CAC/D,OAAO,oBAAoB;AAC5B;;;ACjGA,SAAgB,WACf,SACkC;CAClC,MAAM,cAAc,QAAQ,YAAY,KAAK;CAC7C,IAAI,CAAC,aACJ,MAAM,IAAI,MAAM,QAAQ,QAAQ,GAAG,uCAAuC;CAE3E,IAAI,CAAC,QAAQ,GAAG,KAAK,GACpB,MAAM,IAAI,MAAM,qBAAqB;CAEtC,IAAI,CAAC,QAAQ,KAAK,KAAK,GACtB,MAAM,IAAI,MAAM,QAAQ,QAAQ,GAAG,mBAAmB;CAGvD,OAAO;EACN,IAAI,QAAQ;EACZ,MAAM,QAAQ;EACd;EACA,aAAa,QAAQ;EACrB,cAAc,QAAQ;EACtB,MAAM;GACL,SAAS,QAAQ,WAAW;GAC5B,YAAY,QAAQ,cAAc;GAClC,MAAM,QAAQ;GACd,YAAY,QAAQ;GACpB,aAAa,QAAQ;GACrB,sBAAsB,QAAQ;GAC9B,gBAAgB,QAAQ;GACxB,kBAAkB,QAAQ;GAC1B,SAAS,QAAQ;GACjB,WAAW,QAAQ;EACpB;EACA,SAAS,OAAO,OAAO,QAAQ;GAC9B,MAAM,SAAS,QAAQ,YAAY,MAAM,KAAK;GAC9C,OAAO,QAAQ,QAAQ,QAAQ,GAAG;EACnC;CACD;AACD;;AAGA,SAAgB,UAA2B,MAAuD;CACjG,OAAO;AACR;AAsBA,SAAgB,aAA8B,SAA8D;CAC3G,MAAM,cAAc,QAAQ,YAAY,KAAK;CAC7C,IAAI,CAAC,aACJ,MAAM,IAAI,MAAM,UAAU,QAAQ,GAAG,0BAA0B;CAEhE,IAAI,CAAC,QAAQ,GAAG,KAAK,GACpB,MAAM,IAAI,MAAM,uBAAuB;CAExC,IAAI,QAAQ,MAAM,WAAW,GAC5B,MAAM,IAAI,MAAM,UAAU,QAAQ,GAAG,gCAAgC;CAGtE,eACC,QAAQ,QACP,SAAS,KAAK,KACd,OAAO,UAAU,QAAQ,GAAG,0BAA0B,IACxD;CAEA,MAAM,OAAO,QAAQ,QAAQ,gBAAgB,QAAQ,EAAE;CACvD,MAAM,aAAa,QAAQ,cAAc,CAAC;CAE1C,OAAO;EACN,IAAI,QAAQ;EACZ,OAAO,QAAQ;EACf;EACA,SAAS,QAAQ,WAAW;EAC5B,MAAM,QAAQ,QAAQ,EAAE,MAAM,OAAO;EACrC,OAAO,QAAQ;EACf;EACA,GAAI,QAAQ,mBAAmB,KAAA,KAAa,EAAE,gBAAgB,QAAQ,eAAe;EACrF,GAAI,QAAQ,SAAS,KAAA,KAAa,QAAQ,KAAK,SAAS,KAAK,EAAE,MAAM,QAAQ,KAAK;EAClF,GAAI,SAAS,KAAA,KAAa,EAAE,KAAK;CAClC;AACD"}
@@ -1,5 +1,5 @@
1
1
  import { t as ToolError } from "./errors-DoSpNHvs.js";
2
- import { n as defineModule, r as defineTool } from "./define-DdFALdNf.js";
2
+ import { n as defineModule, r as defineTool } from "./define-CbQI8dAN.js";
3
3
  import { n as requireAuth } from "./provider-CgDAlg6K.js";
4
4
  import { t as AwsService } from "./aws-service-Cn_ozX4X.js";
5
5
  import { isPlainObject, isString } from "es-toolkit";
@@ -346,4 +346,4 @@ const eventBridgeSchedulerModule = defineModule({
346
346
  //#endregion
347
347
  export { scheduleWriteOutputSchema as C, scheduleUpdateInputSchema as S, scheduleListInputSchema as _, eventBridgeSchedulerModule as a, scheduleStateSchema as b, MAX_LIST as c, MAX_TASK_REF as d, eventBridgeSchedulerAuthSchema as f, scheduleGetOutputSchema as g, scheduleDetailSchema as h, eventBridgeSchedulerListTool as i, MAX_PAYLOAD_JSON as l, scheduleDeleteOutputSchema as m, eventBridgeSchedulerDeleteTool as n, eventBridgeSchedulerUpdateTool as o, scheduleCreateInputSchema as p, eventBridgeSchedulerGetTool as r, EventBridgeSchedulerClient as s, eventBridgeSchedulerCreateTool as t, MAX_SCHEDULE_NAME as u, scheduleListOutputSchema as v, scheduleSummarySchema as x, scheduleNameInputSchema as y };
348
348
 
349
- //# sourceMappingURL=eventbridge-scheduler-ICepMPWG.js.map
349
+ //# sourceMappingURL=eventbridge-scheduler-CTgSZgZZ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"eventbridge-scheduler-ICepMPWG.js","names":["#auth","#aws","#writeResult","#scheduleQuery"],"sources":["../src/vendors/eventbridge-scheduler/contracts.ts","../src/vendors/eventbridge-scheduler/domain.ts","../src/vendors/eventbridge-scheduler/client.ts","../src/vendors/eventbridge-scheduler/module.ts"],"sourcesContent":["/**\n * Amazon EventBridge Scheduler vendor contracts.\n * Host auth holds target ARN / role ARN; tools schedule task_ref only.\n */\n\nimport { z } from 'zod'\n\nexport const MAX_SCHEDULE_NAME = 64\nexport const MAX_TASK_REF = 512\nexport const MAX_PAYLOAD_JSON = 8_000\nexport const MAX_LIST = 100\n\nconst scheduleName = z\n\t.string()\n\t.min(1)\n\t.max(MAX_SCHEDULE_NAME)\n\t.regex(/^[0-9a-zA-Z-_.]+$/, 'Schedule name must match [0-9a-zA-Z-_.]+')\n\nexport const eventBridgeSchedulerAuthSchema = z.object({\n\taccess_key_id: z.string().min(1).describe('AWS access key id'),\n\tsecret_access_key: z.string().min(1).describe('AWS secret access key'),\n\tregion: z.string().min(1).describe('AWS region for EventBridge Scheduler'),\n\tsession_token: z.string().min(1).optional().describe('Optional session token'),\n\ttarget_arn: z.string().min(1).describe('Host-bound target ARN (Lambda, SQS, etc.)'),\n\trole_arn: z.string().min(1).describe('Host-bound IAM role ARN for the scheduler target'),\n\tgroup_name: z.string().min(1).max(64).optional().describe('Schedule group name (default group when omitted)'),\n\tflexible_window_minutes: z\n\t\t.int()\n\t\t.min(1)\n\t\t.max(1440)\n\t\t.optional()\n\t\t.describe('When set, FlexibleTimeWindow Mode=FLEXIBLE with this window; otherwise Mode=OFF'),\n\tdead_letter_arn: z.string().min(1).optional().describe('Optional DLQ ARN'),\n\tmax_retry_attempts: z.int().min(0).max(185).optional().describe('Target retry MaximumRetryAttempts'),\n\tmax_event_age_seconds: z.int().min(60).max(86400).optional().describe('Target retry MaximumEventAgeInSeconds')\n})\n\nexport type EventBridgeSchedulerAuth = z.infer<typeof eventBridgeSchedulerAuthSchema>\n\nexport const scheduleStateSchema = z.enum(['ENABLED', 'DISABLED'])\n\nexport type ScheduleState = z.infer<typeof scheduleStateSchema>\n\nexport const scheduleCreateInputSchema = z.object({\n\tname: scheduleName.describe('Schedule name'),\n\tschedule_expression: z.string().min(1).max(256).describe('When to run: at(...), rate(...), or cron(...) expression'),\n\ttask_ref: z\n\t\t.string()\n\t\t.min(1)\n\t\t.max(MAX_TASK_REF)\n\t\t.describe('Opaque task definition reference. Not an ARN or infrastructure id'),\n\tpayload: z\n\t\t.record(z.string(), z.unknown())\n\t\t.optional()\n\t\t.describe('Optional small JSON payload merged into the target input with task_ref'),\n\ttimezone: z.string().min(1).max(50).optional().describe('Timezone for the schedule expression'),\n\tdescription: z.string().max(512).optional().describe('Human description'),\n\tstate: scheduleStateSchema.optional().describe('ENABLED or DISABLED (default ENABLED)'),\n\tstart_at: z.string().min(1).optional().describe('ISO-8601 start time (UTC) when the schedule may begin'),\n\tend_at: z.string().min(1).optional().describe('ISO-8601 end time (UTC) when the schedule may stop'),\n\taction_after_completion: z\n\t\t.enum(['NONE', 'DELETE'])\n\t\t.optional()\n\t\t.describe('What to do after a one-time schedule completes')\n})\n\nexport const scheduleUpdateInputSchema = scheduleCreateInputSchema\n\nexport const scheduleNameInputSchema = z.object({\n\tname: scheduleName.describe('Schedule name')\n})\n\nexport const scheduleListInputSchema = z.object({\n\tname_prefix: z.string().min(1).max(64).optional().describe('Filter by name prefix'),\n\tstate: scheduleStateSchema.optional().describe('Filter by state'),\n\tmax_results: z.int().min(1).max(MAX_LIST).optional().describe('Page size (default 100)'),\n\tnext_token: z.string().min(1).optional().describe('Pagination token from a prior list call')\n})\n\nexport const scheduleSummarySchema = z.object({\n\tname: z.string().describe('Schedule name'),\n\tgroup_name: z.string().optional().describe('Schedule group'),\n\tstate: scheduleStateSchema.optional().describe('ENABLED or DISABLED'),\n\tschedule_expression: z.string().optional().describe('Schedule expression when known'),\n\tarn: z.string().optional().describe('Schedule ARN when returned by the provider')\n})\n\nexport const scheduleDetailSchema = scheduleSummarySchema.extend({\n\tdescription: z.string().optional(),\n\ttimezone: z.string().optional(),\n\ttask_ref: z.string().optional().describe('task_ref parsed from target input when present'),\n\tcreation_date: z.string().optional(),\n\tlast_modification_date: z.string().optional()\n})\n\nexport const scheduleWriteOutputSchema = z.object({\n\tname: z.string().describe('Schedule name'),\n\tarn: z.string().optional().describe('Schedule ARN when returned')\n})\n\nexport const scheduleGetOutputSchema = z.object({\n\tschedule: scheduleDetailSchema\n})\n\nexport const scheduleListOutputSchema = z.object({\n\tschedules: z.array(scheduleSummarySchema),\n\tnext_token: z.string().optional().describe('Pagination token when more results exist')\n})\n\nexport const scheduleDeleteOutputSchema = z.object({\n\tname: z.string().describe('Deleted schedule name'),\n\tdeleted: z.literal(true)\n})\n\nexport type ScheduleCreateInput = z.infer<typeof scheduleCreateInputSchema>\nexport type ScheduleUpdateInput = z.infer<typeof scheduleUpdateInputSchema>\nexport type ScheduleNameInput = z.infer<typeof scheduleNameInputSchema>\nexport type ScheduleListInput = z.infer<typeof scheduleListInputSchema>\nexport type ScheduleSummary = z.infer<typeof scheduleSummarySchema>\nexport type ScheduleDetail = z.infer<typeof scheduleDetailSchema>\nexport type ScheduleWriteOutput = z.infer<typeof scheduleWriteOutputSchema>\nexport type ScheduleGetOutput = z.infer<typeof scheduleGetOutputSchema>\nexport type ScheduleListOutput = z.infer<typeof scheduleListOutputSchema>\nexport type ScheduleDeleteOutput = z.infer<typeof scheduleDeleteOutputSchema>\n","/**\n * EventBridge Scheduler pure helpers (no HTTP).\n */\n\nimport { isPlainObject, isString } from 'es-toolkit'\n\nimport { ToolError } from '../../core/errors'\nimport type { EventBridgeSchedulerAuth, ScheduleCreateInput, ScheduleDetail, ScheduleSummary } from './contracts'\nimport { MAX_PAYLOAD_JSON } from './contracts'\n\nexport function buildTargetInput(taskRef: string, payload?: Record<string, unknown>): string {\n\tconst body: Record<string, unknown> = { task_ref: taskRef }\n\tif (payload !== undefined) {\n\t\tfor (const [key, value] of Object.entries(payload)) {\n\t\t\tif (key === 'task_ref') continue\n\t\t\tbody[key] = value\n\t\t}\n\t}\n\tconst json = JSON.stringify(body)\n\tif (json.length > MAX_PAYLOAD_JSON) {\n\t\tthrow new ToolError('Schedule target payload is too large', {\n\t\t\tcode: 'too_large',\n\t\t\tdetails: { max_chars: MAX_PAYLOAD_JSON, length: json.length }\n\t\t})\n\t}\n\treturn json\n}\n\nexport function parseTaskRefFromInput(input: unknown): string | undefined {\n\tif (!isString(input) || input.length === 0) return undefined\n\ttry {\n\t\tconst parsed: unknown = JSON.parse(input)\n\t\tif (!isPlainObject(parsed)) return undefined\n\t\tconst ref = parsed['task_ref']\n\t\treturn isString(ref) ? ref : undefined\n\t} catch {\n\t\treturn undefined\n\t}\n}\n\nexport function flexibleTimeWindow(auth: EventBridgeSchedulerAuth): {\n\tMode: 'OFF' | 'FLEXIBLE'\n\tMaximumWindowInMinutes?: number\n} {\n\tif (auth.flexible_window_minutes !== undefined) {\n\t\treturn { Mode: 'FLEXIBLE', MaximumWindowInMinutes: auth.flexible_window_minutes }\n\t}\n\treturn { Mode: 'OFF' }\n}\n\nexport function isoToUnixSeconds(iso: string, field: string): number {\n\tconst ms = Date.parse(iso)\n\tif (!Number.isFinite(ms)) {\n\t\tthrow new ToolError(`Invalid ${field} timestamp`, { code: 'bad_input', details: { field, value: iso } })\n\t}\n\treturn Math.floor(ms / 1000)\n}\n\n/**\n * EventBridge Scheduler rejects empty ClientToken on the raw HTTP API even when\n * docs mark it optional (SDKs / CLI always send one).\n * Pattern: [a-zA-Z0-9-_]+, max 64.\n */\nexport function newClientToken(): string {\n\treturn crypto.randomUUID().replaceAll('-', '')\n}\n\nexport function buildCreateBody(auth: EventBridgeSchedulerAuth, input: ScheduleCreateInput): Record<string, unknown> {\n\tconst target: Record<string, unknown> = {\n\t\tArn: auth.target_arn,\n\t\tRoleArn: auth.role_arn,\n\t\tInput: buildTargetInput(input.task_ref, input.payload)\n\t}\n\tif (auth.dead_letter_arn) {\n\t\ttarget['DeadLetterConfig'] = { Arn: auth.dead_letter_arn }\n\t}\n\tif (auth.max_retry_attempts !== undefined || auth.max_event_age_seconds !== undefined) {\n\t\tconst retry: Record<string, number> = {}\n\t\tif (auth.max_retry_attempts !== undefined) retry['MaximumRetryAttempts'] = auth.max_retry_attempts\n\t\tif (auth.max_event_age_seconds !== undefined) retry['MaximumEventAgeInSeconds'] = auth.max_event_age_seconds\n\t\ttarget['RetryPolicy'] = retry\n\t}\n\n\tconst body: Record<string, unknown> = {\n\t\tClientToken: newClientToken(),\n\t\tScheduleExpression: input.schedule_expression,\n\t\tFlexibleTimeWindow: flexibleTimeWindow(auth),\n\t\tTarget: target,\n\t\tState: input.state ?? 'ENABLED'\n\t}\n\tif (auth.group_name) body['GroupName'] = auth.group_name\n\tif (input.timezone) body['ScheduleExpressionTimezone'] = input.timezone\n\tif (input.description) body['Description'] = input.description\n\tif (input.action_after_completion) body['ActionAfterCompletion'] = input.action_after_completion\n\tif (input.start_at) body['StartDate'] = isoToUnixSeconds(input.start_at, 'start_at')\n\tif (input.end_at) body['EndDate'] = isoToUnixSeconds(input.end_at, 'end_at')\n\treturn body\n}\n\nexport function mapScheduleSummary(raw: Record<string, unknown>): ScheduleSummary {\n\tconst out: ScheduleSummary = {\n\t\tname: isString(raw['Name']) ? raw['Name'] : ''\n\t}\n\tif (isString(raw['GroupName'])) out.group_name = raw['GroupName']\n\tif (raw['State'] === 'ENABLED' || raw['State'] === 'DISABLED') out.state = raw['State']\n\tif (isString(raw['ScheduleExpression'])) out.schedule_expression = raw['ScheduleExpression']\n\tif (isString(raw['Arn'])) out.arn = raw['Arn']\n\treturn out\n}\n\nexport function mapScheduleDetail(raw: Record<string, unknown>): ScheduleDetail {\n\tconst base = mapScheduleSummary(raw)\n\tconst target = isPlainObject(raw['Target']) ? raw['Target'] : undefined\n\tconst taskRef = target ? parseTaskRefFromInput(target['Input']) : undefined\n\tconst out: ScheduleDetail = { ...base }\n\tif (isString(raw['Description'])) out.description = raw['Description']\n\tif (isString(raw['ScheduleExpressionTimezone'])) out.timezone = raw['ScheduleExpressionTimezone']\n\tif (taskRef !== undefined) out.task_ref = taskRef\n\tif (isString(raw['CreationDate'])) out.creation_date = raw['CreationDate']\n\tif (isString(raw['LastModificationDate'])) out.last_modification_date = raw['LastModificationDate']\n\t// AWS may return timestamps as numbers\n\tif (typeof raw['CreationDate'] === 'number') out.creation_date = new Date(raw['CreationDate'] * 1000).toISOString()\n\tif (typeof raw['LastModificationDate'] === 'number') {\n\t\tout.last_modification_date = new Date(raw['LastModificationDate'] * 1000).toISOString()\n\t}\n\treturn out\n}\n","/**\n * Amazon EventBridge Scheduler vendor client (AwsService SigV4).\n * Host: `new EventBridgeSchedulerClient(auth)`. Agent: `fromContext(ctx)`.\n */\n\nimport { isPlainObject, isString } from 'es-toolkit'\nimport { isArray } from 'es-toolkit/compat'\n\nimport { ToolError } from '../../core/errors'\nimport { requireAuth } from '../../core/provider'\nimport type { ToolContext } from '../../core/types'\nimport { AwsService } from '../../transport/aws-service'\nimport type { AwsServiceOptions } from '../../transport/aws-service'\nimport type { HttpServiceOptions } from '../../transport/http-service'\nimport type {\n\tEventBridgeSchedulerAuth,\n\tScheduleCreateInput,\n\tScheduleDeleteOutput,\n\tScheduleGetOutput,\n\tScheduleListInput,\n\tScheduleListOutput,\n\tScheduleNameInput,\n\tScheduleUpdateInput,\n\tScheduleWriteOutput\n} from './contracts'\nimport { eventBridgeSchedulerAuthSchema } from './contracts'\nimport { buildCreateBody, mapScheduleDetail, mapScheduleSummary, newClientToken } from './domain'\n\nexport type EventBridgeSchedulerClientOptions = Pick<HttpServiceOptions, 'fetch' | 'signal'>\n\nexport class EventBridgeSchedulerClient {\n\treadonly #auth: EventBridgeSchedulerAuth\n\treadonly #aws: AwsService\n\n\tconstructor(auth: EventBridgeSchedulerAuth, options: EventBridgeSchedulerClientOptions = {}) {\n\t\tconst parsed = eventBridgeSchedulerAuthSchema.safeParse(auth)\n\t\tif (!parsed.success) {\n\t\t\tthrow new ToolError('Invalid EventBridge Scheduler auth credentials', {\n\t\t\t\tcode: 'bad_auth',\n\t\t\t\tdetails: { issues: parsed.error.issues.map((issue) => issue.message) }\n\t\t\t})\n\t\t}\n\t\tthis.#auth = parsed.data\n\t\tconst awsOptions: AwsServiceOptions = {\n\t\t\taccessKeyId: this.#auth.access_key_id,\n\t\t\tsecretAccessKey: this.#auth.secret_access_key,\n\t\t\tregion: this.#auth.region,\n\t\t\tservice: 'scheduler',\n\t\t\tbaseURL: `https://scheduler.${this.#auth.region}.amazonaws.com`,\n\t\t\tlabel: 'EventBridge Scheduler'\n\t\t}\n\t\tif (options.fetch) awsOptions.fetch = options.fetch\n\t\tif (options.signal) awsOptions.signal = options.signal\n\t\tif (this.#auth.session_token) awsOptions.sessionToken = this.#auth.session_token\n\t\tthis.#aws = new AwsService(awsOptions)\n\t}\n\n\tstatic fromContext(ctx: ToolContext): EventBridgeSchedulerClient {\n\t\tconst auth = requireAuth(ctx, eventBridgeSchedulerAuthSchema)\n\t\tconst options: EventBridgeSchedulerClientOptions = {}\n\t\tif (ctx.fetch) options.fetch = ctx.fetch\n\t\tif (ctx.signal) options.signal = ctx.signal\n\t\treturn new EventBridgeSchedulerClient(auth, options)\n\t}\n\n\tasync create(input: ScheduleCreateInput): Promise<ScheduleWriteOutput> {\n\t\tconst body = buildCreateBody(this.#auth, input)\n\t\tconst { data } = await this.#aws.post(`/schedules/${encodeURIComponent(input.name)}`, body)\n\t\treturn this.#writeResult(input.name, data)\n\t}\n\n\tasync update(input: ScheduleUpdateInput): Promise<ScheduleWriteOutput> {\n\t\tconst body = buildCreateBody(this.#auth, input)\n\t\tconst { data } = await this.#aws.put(`/schedules/${encodeURIComponent(input.name)}`, body)\n\t\treturn this.#writeResult(input.name, data)\n\t}\n\n\tasync get(input: ScheduleNameInput): Promise<ScheduleGetOutput> {\n\t\tconst path = `/schedules/${encodeURIComponent(input.name)}${this.#scheduleQuery()}`\n\t\tconst { data } = await this.#aws.get(path)\n\t\tif (!isPlainObject(data)) {\n\t\t\tthrow new ToolError('Unexpected GetSchedule response', { code: 'upstream' })\n\t\t}\n\t\treturn { schedule: mapScheduleDetail(data) }\n\t}\n\n\tasync list(input: ScheduleListInput = {}): Promise<ScheduleListOutput> {\n\t\tconst params = new URLSearchParams()\n\t\tif (input.name_prefix) params.set('NamePrefix', input.name_prefix)\n\t\tif (input.state) params.set('State', input.state)\n\t\tif (input.max_results !== undefined) params.set('MaxResults', String(input.max_results))\n\t\tif (input.next_token) params.set('NextToken', input.next_token)\n\t\tif (this.#auth.group_name) params.set('ScheduleGroup', this.#auth.group_name)\n\t\tconst qs = params.toString()\n\t\tconst { data } = await this.#aws.get(`/schedules${qs ? `?${qs}` : ''}`)\n\t\tif (!isPlainObject(data)) {\n\t\t\tthrow new ToolError('Unexpected ListSchedules response', { code: 'upstream' })\n\t\t}\n\t\tconst items = data['Schedules']\n\t\tconst schedules = isArray(items) ? items.filter(isPlainObject).map((row) => mapScheduleSummary(row)) : []\n\t\tconst out: ScheduleListOutput = { schedules }\n\t\tif (isString(data['NextToken'])) out.next_token = data['NextToken']\n\t\treturn out\n\t}\n\n\tasync delete(input: ScheduleNameInput): Promise<ScheduleDeleteOutput> {\n\t\t// DeleteSchedule takes clientToken as a query param; empty/missing fails live API.\n\t\tconst path = `/schedules/${encodeURIComponent(input.name)}${this.#scheduleQuery({ clientToken: newClientToken() })}`\n\t\tawait this.#aws.delete(path)\n\t\treturn { name: input.name, deleted: true }\n\t}\n\n\t#scheduleQuery(extra: Record<string, string> = {}): string {\n\t\tconst params = new URLSearchParams(extra)\n\t\tif (this.#auth.group_name) params.set('groupName', this.#auth.group_name)\n\t\tconst qs = params.toString()\n\t\treturn qs ? `?${qs}` : ''\n\t}\n\n\t#writeResult(name: string, raw: unknown): ScheduleWriteOutput {\n\t\tconst out: ScheduleWriteOutput = { name }\n\t\tif (isPlainObject(raw) && isString(raw['ScheduleArn'])) out.arn = raw['ScheduleArn']\n\t\treturn out\n\t}\n}\n","import { defineModule, defineTool } from '../../core/define'\nimport { EventBridgeSchedulerClient } from './client'\nimport {\n\teventBridgeSchedulerAuthSchema,\n\tscheduleCreateInputSchema,\n\tscheduleDeleteOutputSchema,\n\tscheduleGetOutputSchema,\n\tscheduleListInputSchema,\n\tscheduleListOutputSchema,\n\tscheduleNameInputSchema,\n\tscheduleUpdateInputSchema,\n\tscheduleWriteOutputSchema\n} from './contracts'\n\nexport const eventBridgeSchedulerCreateTool = defineTool({\n\tid: 'eventbridge-scheduler-create',\n\tname: 'eventBridgeSchedulerCreate',\n\tdescription:\n\t\t'Create an EventBridge Scheduler schedule for the configured target. Provide schedule name, schedule_expression (at/rate/cron), and task_ref (opaque task definition reference).',\n\tinputSchema: scheduleCreateInputSchema,\n\toutputSchema: scheduleWriteOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => EventBridgeSchedulerClient.fromContext(ctx).create(input)\n})\n\nexport const eventBridgeSchedulerUpdateTool = defineTool({\n\tid: 'eventbridge-scheduler-update',\n\tname: 'eventBridgeSchedulerUpdate',\n\tdescription:\n\t\t'Replace an EventBridge Scheduler schedule (AWS full update). Same fields as create: name, schedule_expression, task_ref, optional timezone/state/description.',\n\tinputSchema: scheduleUpdateInputSchema,\n\toutputSchema: scheduleWriteOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => EventBridgeSchedulerClient.fromContext(ctx).update(input)\n})\n\nexport const eventBridgeSchedulerGetTool = defineTool({\n\tid: 'eventbridge-scheduler-get',\n\tname: 'eventBridgeSchedulerGet',\n\tdescription: 'Get one EventBridge Scheduler schedule by name, including task_ref when present in target input.',\n\tinputSchema: scheduleNameInputSchema,\n\toutputSchema: scheduleGetOutputSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\texecute: async (input, ctx) => EventBridgeSchedulerClient.fromContext(ctx).get(input)\n})\n\nexport const eventBridgeSchedulerListTool = defineTool({\n\tid: 'eventbridge-scheduler-list',\n\tname: 'eventBridgeSchedulerList',\n\tdescription: 'List EventBridge Scheduler schedules with optional name prefix, state filter, and pagination token.',\n\tinputSchema: scheduleListInputSchema,\n\toutputSchema: scheduleListOutputSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\texecute: async (input, ctx) => EventBridgeSchedulerClient.fromContext(ctx).list(input)\n})\n\nexport const eventBridgeSchedulerDeleteTool = defineTool({\n\tid: 'eventbridge-scheduler-delete',\n\tname: 'eventBridgeSchedulerDelete',\n\tdescription: 'Delete an EventBridge Scheduler schedule by name.',\n\tinputSchema: scheduleNameInputSchema,\n\toutputSchema: scheduleDeleteOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => EventBridgeSchedulerClient.fromContext(ctx).delete(input)\n})\n\nexport const eventBridgeSchedulerModule = defineModule({\n\tid: 'eventbridge-scheduler',\n\ttitle: 'EventBridge Scheduler',\n\tdescription:\n\t\t'Amazon EventBridge Scheduler vendor pack: create, fully update, get, list, and delete schedules for a configured target.',\n\truntime: 'both',\n\tauth: { type: 'custom', schema: eventBridgeSchedulerAuthSchema },\n\tcategories: ['scheduler', 'aws'],\n\tclassification: 'standard',\n\ttags: ['eventbridge'],\n\ttools: [\n\t\teventBridgeSchedulerCreateTool,\n\t\teventBridgeSchedulerUpdateTool,\n\t\teventBridgeSchedulerGetTool,\n\t\teventBridgeSchedulerListTool,\n\t\teventBridgeSchedulerDeleteTool\n\t]\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"eventbridge-scheduler-CTgSZgZZ.js","names":["#auth","#aws","#writeResult","#scheduleQuery"],"sources":["../src/vendors/eventbridge-scheduler/contracts.ts","../src/vendors/eventbridge-scheduler/domain.ts","../src/vendors/eventbridge-scheduler/client.ts","../src/vendors/eventbridge-scheduler/module.ts"],"sourcesContent":["/**\n * Amazon EventBridge Scheduler vendor contracts.\n * Host auth holds target ARN / role ARN; tools schedule task_ref only.\n */\n\nimport { z } from 'zod'\n\nexport const MAX_SCHEDULE_NAME = 64\nexport const MAX_TASK_REF = 512\nexport const MAX_PAYLOAD_JSON = 8_000\nexport const MAX_LIST = 100\n\nconst scheduleName = z\n\t.string()\n\t.min(1)\n\t.max(MAX_SCHEDULE_NAME)\n\t.regex(/^[0-9a-zA-Z-_.]+$/, 'Schedule name must match [0-9a-zA-Z-_.]+')\n\nexport const eventBridgeSchedulerAuthSchema = z.object({\n\taccess_key_id: z.string().min(1).describe('AWS access key id'),\n\tsecret_access_key: z.string().min(1).describe('AWS secret access key'),\n\tregion: z.string().min(1).describe('AWS region for EventBridge Scheduler'),\n\tsession_token: z.string().min(1).optional().describe('Optional session token'),\n\ttarget_arn: z.string().min(1).describe('Host-bound target ARN (Lambda, SQS, etc.)'),\n\trole_arn: z.string().min(1).describe('Host-bound IAM role ARN for the scheduler target'),\n\tgroup_name: z.string().min(1).max(64).optional().describe('Schedule group name (default group when omitted)'),\n\tflexible_window_minutes: z\n\t\t.int()\n\t\t.min(1)\n\t\t.max(1440)\n\t\t.optional()\n\t\t.describe('When set, FlexibleTimeWindow Mode=FLEXIBLE with this window; otherwise Mode=OFF'),\n\tdead_letter_arn: z.string().min(1).optional().describe('Optional DLQ ARN'),\n\tmax_retry_attempts: z.int().min(0).max(185).optional().describe('Target retry MaximumRetryAttempts'),\n\tmax_event_age_seconds: z.int().min(60).max(86400).optional().describe('Target retry MaximumEventAgeInSeconds')\n})\n\nexport type EventBridgeSchedulerAuth = z.infer<typeof eventBridgeSchedulerAuthSchema>\n\nexport const scheduleStateSchema = z.enum(['ENABLED', 'DISABLED'])\n\nexport type ScheduleState = z.infer<typeof scheduleStateSchema>\n\nexport const scheduleCreateInputSchema = z.object({\n\tname: scheduleName.describe('Schedule name'),\n\tschedule_expression: z.string().min(1).max(256).describe('When to run: at(...), rate(...), or cron(...) expression'),\n\ttask_ref: z\n\t\t.string()\n\t\t.min(1)\n\t\t.max(MAX_TASK_REF)\n\t\t.describe('Opaque task definition reference. Not an ARN or infrastructure id'),\n\tpayload: z\n\t\t.record(z.string(), z.unknown())\n\t\t.optional()\n\t\t.describe('Optional small JSON payload merged into the target input with task_ref'),\n\ttimezone: z.string().min(1).max(50).optional().describe('Timezone for the schedule expression'),\n\tdescription: z.string().max(512).optional().describe('Human description'),\n\tstate: scheduleStateSchema.optional().describe('ENABLED or DISABLED (default ENABLED)'),\n\tstart_at: z.string().min(1).optional().describe('ISO-8601 start time (UTC) when the schedule may begin'),\n\tend_at: z.string().min(1).optional().describe('ISO-8601 end time (UTC) when the schedule may stop'),\n\taction_after_completion: z\n\t\t.enum(['NONE', 'DELETE'])\n\t\t.optional()\n\t\t.describe('What to do after a one-time schedule completes')\n})\n\nexport const scheduleUpdateInputSchema = scheduleCreateInputSchema\n\nexport const scheduleNameInputSchema = z.object({\n\tname: scheduleName.describe('Schedule name')\n})\n\nexport const scheduleListInputSchema = z.object({\n\tname_prefix: z.string().min(1).max(64).optional().describe('Filter by name prefix'),\n\tstate: scheduleStateSchema.optional().describe('Filter by state'),\n\tmax_results: z.int().min(1).max(MAX_LIST).optional().describe('Page size (default 100)'),\n\tnext_token: z.string().min(1).optional().describe('Pagination token from a prior list call')\n})\n\nexport const scheduleSummarySchema = z.object({\n\tname: z.string().describe('Schedule name'),\n\tgroup_name: z.string().optional().describe('Schedule group'),\n\tstate: scheduleStateSchema.optional().describe('ENABLED or DISABLED'),\n\tschedule_expression: z.string().optional().describe('Schedule expression when known'),\n\tarn: z.string().optional().describe('Schedule ARN when returned by the provider')\n})\n\nexport const scheduleDetailSchema = scheduleSummarySchema.extend({\n\tdescription: z.string().optional(),\n\ttimezone: z.string().optional(),\n\ttask_ref: z.string().optional().describe('task_ref parsed from target input when present'),\n\tcreation_date: z.string().optional(),\n\tlast_modification_date: z.string().optional()\n})\n\nexport const scheduleWriteOutputSchema = z.object({\n\tname: z.string().describe('Schedule name'),\n\tarn: z.string().optional().describe('Schedule ARN when returned')\n})\n\nexport const scheduleGetOutputSchema = z.object({\n\tschedule: scheduleDetailSchema\n})\n\nexport const scheduleListOutputSchema = z.object({\n\tschedules: z.array(scheduleSummarySchema),\n\tnext_token: z.string().optional().describe('Pagination token when more results exist')\n})\n\nexport const scheduleDeleteOutputSchema = z.object({\n\tname: z.string().describe('Deleted schedule name'),\n\tdeleted: z.literal(true)\n})\n\nexport type ScheduleCreateInput = z.infer<typeof scheduleCreateInputSchema>\nexport type ScheduleUpdateInput = z.infer<typeof scheduleUpdateInputSchema>\nexport type ScheduleNameInput = z.infer<typeof scheduleNameInputSchema>\nexport type ScheduleListInput = z.infer<typeof scheduleListInputSchema>\nexport type ScheduleSummary = z.infer<typeof scheduleSummarySchema>\nexport type ScheduleDetail = z.infer<typeof scheduleDetailSchema>\nexport type ScheduleWriteOutput = z.infer<typeof scheduleWriteOutputSchema>\nexport type ScheduleGetOutput = z.infer<typeof scheduleGetOutputSchema>\nexport type ScheduleListOutput = z.infer<typeof scheduleListOutputSchema>\nexport type ScheduleDeleteOutput = z.infer<typeof scheduleDeleteOutputSchema>\n","/**\n * EventBridge Scheduler pure helpers (no HTTP).\n */\n\nimport { isPlainObject, isString } from 'es-toolkit'\n\nimport { ToolError } from '../../core/errors'\nimport type { EventBridgeSchedulerAuth, ScheduleCreateInput, ScheduleDetail, ScheduleSummary } from './contracts'\nimport { MAX_PAYLOAD_JSON } from './contracts'\n\nexport function buildTargetInput(taskRef: string, payload?: Record<string, unknown>): string {\n\tconst body: Record<string, unknown> = { task_ref: taskRef }\n\tif (payload !== undefined) {\n\t\tfor (const [key, value] of Object.entries(payload)) {\n\t\t\tif (key === 'task_ref') continue\n\t\t\tbody[key] = value\n\t\t}\n\t}\n\tconst json = JSON.stringify(body)\n\tif (json.length > MAX_PAYLOAD_JSON) {\n\t\tthrow new ToolError('Schedule target payload is too large', {\n\t\t\tcode: 'too_large',\n\t\t\tdetails: { max_chars: MAX_PAYLOAD_JSON, length: json.length }\n\t\t})\n\t}\n\treturn json\n}\n\nexport function parseTaskRefFromInput(input: unknown): string | undefined {\n\tif (!isString(input) || input.length === 0) return undefined\n\ttry {\n\t\tconst parsed: unknown = JSON.parse(input)\n\t\tif (!isPlainObject(parsed)) return undefined\n\t\tconst ref = parsed['task_ref']\n\t\treturn isString(ref) ? ref : undefined\n\t} catch {\n\t\treturn undefined\n\t}\n}\n\nexport function flexibleTimeWindow(auth: EventBridgeSchedulerAuth): {\n\tMode: 'OFF' | 'FLEXIBLE'\n\tMaximumWindowInMinutes?: number\n} {\n\tif (auth.flexible_window_minutes !== undefined) {\n\t\treturn { Mode: 'FLEXIBLE', MaximumWindowInMinutes: auth.flexible_window_minutes }\n\t}\n\treturn { Mode: 'OFF' }\n}\n\nexport function isoToUnixSeconds(iso: string, field: string): number {\n\tconst ms = Date.parse(iso)\n\tif (!Number.isFinite(ms)) {\n\t\tthrow new ToolError(`Invalid ${field} timestamp`, { code: 'bad_input', details: { field, value: iso } })\n\t}\n\treturn Math.floor(ms / 1000)\n}\n\n/**\n * EventBridge Scheduler rejects empty ClientToken on the raw HTTP API even when\n * docs mark it optional (SDKs / CLI always send one).\n * Pattern: [a-zA-Z0-9-_]+, max 64.\n */\nexport function newClientToken(): string {\n\treturn crypto.randomUUID().replaceAll('-', '')\n}\n\nexport function buildCreateBody(auth: EventBridgeSchedulerAuth, input: ScheduleCreateInput): Record<string, unknown> {\n\tconst target: Record<string, unknown> = {\n\t\tArn: auth.target_arn,\n\t\tRoleArn: auth.role_arn,\n\t\tInput: buildTargetInput(input.task_ref, input.payload)\n\t}\n\tif (auth.dead_letter_arn) {\n\t\ttarget['DeadLetterConfig'] = { Arn: auth.dead_letter_arn }\n\t}\n\tif (auth.max_retry_attempts !== undefined || auth.max_event_age_seconds !== undefined) {\n\t\tconst retry: Record<string, number> = {}\n\t\tif (auth.max_retry_attempts !== undefined) retry['MaximumRetryAttempts'] = auth.max_retry_attempts\n\t\tif (auth.max_event_age_seconds !== undefined) retry['MaximumEventAgeInSeconds'] = auth.max_event_age_seconds\n\t\ttarget['RetryPolicy'] = retry\n\t}\n\n\tconst body: Record<string, unknown> = {\n\t\tClientToken: newClientToken(),\n\t\tScheduleExpression: input.schedule_expression,\n\t\tFlexibleTimeWindow: flexibleTimeWindow(auth),\n\t\tTarget: target,\n\t\tState: input.state ?? 'ENABLED'\n\t}\n\tif (auth.group_name) body['GroupName'] = auth.group_name\n\tif (input.timezone) body['ScheduleExpressionTimezone'] = input.timezone\n\tif (input.description) body['Description'] = input.description\n\tif (input.action_after_completion) body['ActionAfterCompletion'] = input.action_after_completion\n\tif (input.start_at) body['StartDate'] = isoToUnixSeconds(input.start_at, 'start_at')\n\tif (input.end_at) body['EndDate'] = isoToUnixSeconds(input.end_at, 'end_at')\n\treturn body\n}\n\nexport function mapScheduleSummary(raw: Record<string, unknown>): ScheduleSummary {\n\tconst out: ScheduleSummary = {\n\t\tname: isString(raw['Name']) ? raw['Name'] : ''\n\t}\n\tif (isString(raw['GroupName'])) out.group_name = raw['GroupName']\n\tif (raw['State'] === 'ENABLED' || raw['State'] === 'DISABLED') out.state = raw['State']\n\tif (isString(raw['ScheduleExpression'])) out.schedule_expression = raw['ScheduleExpression']\n\tif (isString(raw['Arn'])) out.arn = raw['Arn']\n\treturn out\n}\n\nexport function mapScheduleDetail(raw: Record<string, unknown>): ScheduleDetail {\n\tconst base = mapScheduleSummary(raw)\n\tconst target = isPlainObject(raw['Target']) ? raw['Target'] : undefined\n\tconst taskRef = target ? parseTaskRefFromInput(target['Input']) : undefined\n\tconst out: ScheduleDetail = { ...base }\n\tif (isString(raw['Description'])) out.description = raw['Description']\n\tif (isString(raw['ScheduleExpressionTimezone'])) out.timezone = raw['ScheduleExpressionTimezone']\n\tif (taskRef !== undefined) out.task_ref = taskRef\n\tif (isString(raw['CreationDate'])) out.creation_date = raw['CreationDate']\n\tif (isString(raw['LastModificationDate'])) out.last_modification_date = raw['LastModificationDate']\n\t// AWS may return timestamps as numbers\n\tif (typeof raw['CreationDate'] === 'number') out.creation_date = new Date(raw['CreationDate'] * 1000).toISOString()\n\tif (typeof raw['LastModificationDate'] === 'number') {\n\t\tout.last_modification_date = new Date(raw['LastModificationDate'] * 1000).toISOString()\n\t}\n\treturn out\n}\n","/**\n * Amazon EventBridge Scheduler vendor client (AwsService SigV4).\n * Host: `new EventBridgeSchedulerClient(auth)`. Agent: `fromContext(ctx)`.\n */\n\nimport { isPlainObject, isString } from 'es-toolkit'\nimport { isArray } from 'es-toolkit/compat'\n\nimport { ToolError } from '../../core/errors'\nimport { requireAuth } from '../../core/provider'\nimport type { ToolContext } from '../../core/types'\nimport { AwsService } from '../../transport/aws-service'\nimport type { AwsServiceOptions } from '../../transport/aws-service'\nimport type { HttpServiceOptions } from '../../transport/http-service'\nimport type {\n\tEventBridgeSchedulerAuth,\n\tScheduleCreateInput,\n\tScheduleDeleteOutput,\n\tScheduleGetOutput,\n\tScheduleListInput,\n\tScheduleListOutput,\n\tScheduleNameInput,\n\tScheduleUpdateInput,\n\tScheduleWriteOutput\n} from './contracts'\nimport { eventBridgeSchedulerAuthSchema } from './contracts'\nimport { buildCreateBody, mapScheduleDetail, mapScheduleSummary, newClientToken } from './domain'\n\nexport type EventBridgeSchedulerClientOptions = Pick<HttpServiceOptions, 'fetch' | 'signal'>\n\nexport class EventBridgeSchedulerClient {\n\treadonly #auth: EventBridgeSchedulerAuth\n\treadonly #aws: AwsService\n\n\tconstructor(auth: EventBridgeSchedulerAuth, options: EventBridgeSchedulerClientOptions = {}) {\n\t\tconst parsed = eventBridgeSchedulerAuthSchema.safeParse(auth)\n\t\tif (!parsed.success) {\n\t\t\tthrow new ToolError('Invalid EventBridge Scheduler auth credentials', {\n\t\t\t\tcode: 'bad_auth',\n\t\t\t\tdetails: { issues: parsed.error.issues.map((issue) => issue.message) }\n\t\t\t})\n\t\t}\n\t\tthis.#auth = parsed.data\n\t\tconst awsOptions: AwsServiceOptions = {\n\t\t\taccessKeyId: this.#auth.access_key_id,\n\t\t\tsecretAccessKey: this.#auth.secret_access_key,\n\t\t\tregion: this.#auth.region,\n\t\t\tservice: 'scheduler',\n\t\t\tbaseURL: `https://scheduler.${this.#auth.region}.amazonaws.com`,\n\t\t\tlabel: 'EventBridge Scheduler'\n\t\t}\n\t\tif (options.fetch) awsOptions.fetch = options.fetch\n\t\tif (options.signal) awsOptions.signal = options.signal\n\t\tif (this.#auth.session_token) awsOptions.sessionToken = this.#auth.session_token\n\t\tthis.#aws = new AwsService(awsOptions)\n\t}\n\n\tstatic fromContext(ctx: ToolContext): EventBridgeSchedulerClient {\n\t\tconst auth = requireAuth(ctx, eventBridgeSchedulerAuthSchema)\n\t\tconst options: EventBridgeSchedulerClientOptions = {}\n\t\tif (ctx.fetch) options.fetch = ctx.fetch\n\t\tif (ctx.signal) options.signal = ctx.signal\n\t\treturn new EventBridgeSchedulerClient(auth, options)\n\t}\n\n\tasync create(input: ScheduleCreateInput): Promise<ScheduleWriteOutput> {\n\t\tconst body = buildCreateBody(this.#auth, input)\n\t\tconst { data } = await this.#aws.post(`/schedules/${encodeURIComponent(input.name)}`, body)\n\t\treturn this.#writeResult(input.name, data)\n\t}\n\n\tasync update(input: ScheduleUpdateInput): Promise<ScheduleWriteOutput> {\n\t\tconst body = buildCreateBody(this.#auth, input)\n\t\tconst { data } = await this.#aws.put(`/schedules/${encodeURIComponent(input.name)}`, body)\n\t\treturn this.#writeResult(input.name, data)\n\t}\n\n\tasync get(input: ScheduleNameInput): Promise<ScheduleGetOutput> {\n\t\tconst path = `/schedules/${encodeURIComponent(input.name)}${this.#scheduleQuery()}`\n\t\tconst { data } = await this.#aws.get(path)\n\t\tif (!isPlainObject(data)) {\n\t\t\tthrow new ToolError('Unexpected GetSchedule response', { code: 'upstream' })\n\t\t}\n\t\treturn { schedule: mapScheduleDetail(data) }\n\t}\n\n\tasync list(input: ScheduleListInput = {}): Promise<ScheduleListOutput> {\n\t\tconst params = new URLSearchParams()\n\t\tif (input.name_prefix) params.set('NamePrefix', input.name_prefix)\n\t\tif (input.state) params.set('State', input.state)\n\t\tif (input.max_results !== undefined) params.set('MaxResults', String(input.max_results))\n\t\tif (input.next_token) params.set('NextToken', input.next_token)\n\t\tif (this.#auth.group_name) params.set('ScheduleGroup', this.#auth.group_name)\n\t\tconst qs = params.toString()\n\t\tconst { data } = await this.#aws.get(`/schedules${qs ? `?${qs}` : ''}`)\n\t\tif (!isPlainObject(data)) {\n\t\t\tthrow new ToolError('Unexpected ListSchedules response', { code: 'upstream' })\n\t\t}\n\t\tconst items = data['Schedules']\n\t\tconst schedules = isArray(items) ? items.filter(isPlainObject).map((row) => mapScheduleSummary(row)) : []\n\t\tconst out: ScheduleListOutput = { schedules }\n\t\tif (isString(data['NextToken'])) out.next_token = data['NextToken']\n\t\treturn out\n\t}\n\n\tasync delete(input: ScheduleNameInput): Promise<ScheduleDeleteOutput> {\n\t\t// DeleteSchedule takes clientToken as a query param; empty/missing fails live API.\n\t\tconst path = `/schedules/${encodeURIComponent(input.name)}${this.#scheduleQuery({ clientToken: newClientToken() })}`\n\t\tawait this.#aws.delete(path)\n\t\treturn { name: input.name, deleted: true }\n\t}\n\n\t#scheduleQuery(extra: Record<string, string> = {}): string {\n\t\tconst params = new URLSearchParams(extra)\n\t\tif (this.#auth.group_name) params.set('groupName', this.#auth.group_name)\n\t\tconst qs = params.toString()\n\t\treturn qs ? `?${qs}` : ''\n\t}\n\n\t#writeResult(name: string, raw: unknown): ScheduleWriteOutput {\n\t\tconst out: ScheduleWriteOutput = { name }\n\t\tif (isPlainObject(raw) && isString(raw['ScheduleArn'])) out.arn = raw['ScheduleArn']\n\t\treturn out\n\t}\n}\n","import { defineModule, defineTool } from '../../core/define'\nimport { EventBridgeSchedulerClient } from './client'\nimport {\n\teventBridgeSchedulerAuthSchema,\n\tscheduleCreateInputSchema,\n\tscheduleDeleteOutputSchema,\n\tscheduleGetOutputSchema,\n\tscheduleListInputSchema,\n\tscheduleListOutputSchema,\n\tscheduleNameInputSchema,\n\tscheduleUpdateInputSchema,\n\tscheduleWriteOutputSchema\n} from './contracts'\n\nexport const eventBridgeSchedulerCreateTool = defineTool({\n\tid: 'eventbridge-scheduler-create',\n\tname: 'eventBridgeSchedulerCreate',\n\tdescription:\n\t\t'Create an EventBridge Scheduler schedule for the configured target. Provide schedule name, schedule_expression (at/rate/cron), and task_ref (opaque task definition reference).',\n\tinputSchema: scheduleCreateInputSchema,\n\toutputSchema: scheduleWriteOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => EventBridgeSchedulerClient.fromContext(ctx).create(input)\n})\n\nexport const eventBridgeSchedulerUpdateTool = defineTool({\n\tid: 'eventbridge-scheduler-update',\n\tname: 'eventBridgeSchedulerUpdate',\n\tdescription:\n\t\t'Replace an EventBridge Scheduler schedule (AWS full update). Same fields as create: name, schedule_expression, task_ref, optional timezone/state/description.',\n\tinputSchema: scheduleUpdateInputSchema,\n\toutputSchema: scheduleWriteOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => EventBridgeSchedulerClient.fromContext(ctx).update(input)\n})\n\nexport const eventBridgeSchedulerGetTool = defineTool({\n\tid: 'eventbridge-scheduler-get',\n\tname: 'eventBridgeSchedulerGet',\n\tdescription: 'Get one EventBridge Scheduler schedule by name, including task_ref when present in target input.',\n\tinputSchema: scheduleNameInputSchema,\n\toutputSchema: scheduleGetOutputSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\texecute: async (input, ctx) => EventBridgeSchedulerClient.fromContext(ctx).get(input)\n})\n\nexport const eventBridgeSchedulerListTool = defineTool({\n\tid: 'eventbridge-scheduler-list',\n\tname: 'eventBridgeSchedulerList',\n\tdescription: 'List EventBridge Scheduler schedules with optional name prefix, state filter, and pagination token.',\n\tinputSchema: scheduleListInputSchema,\n\toutputSchema: scheduleListOutputSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\texecute: async (input, ctx) => EventBridgeSchedulerClient.fromContext(ctx).list(input)\n})\n\nexport const eventBridgeSchedulerDeleteTool = defineTool({\n\tid: 'eventbridge-scheduler-delete',\n\tname: 'eventBridgeSchedulerDelete',\n\tdescription: 'Delete an EventBridge Scheduler schedule by name.',\n\tinputSchema: scheduleNameInputSchema,\n\toutputSchema: scheduleDeleteOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => EventBridgeSchedulerClient.fromContext(ctx).delete(input)\n})\n\nexport const eventBridgeSchedulerModule = defineModule({\n\tid: 'eventbridge-scheduler',\n\ttitle: 'EventBridge Scheduler',\n\tdescription:\n\t\t'Amazon EventBridge Scheduler vendor pack: create, fully update, get, list, and delete schedules for a configured target.',\n\truntime: 'both',\n\tauth: { type: 'custom', schema: eventBridgeSchedulerAuthSchema },\n\tcategories: ['scheduler', 'aws'],\n\tclassification: 'standard',\n\ttags: ['eventbridge'],\n\ttools: [\n\t\teventBridgeSchedulerCreateTool,\n\t\teventBridgeSchedulerUpdateTool,\n\t\teventBridgeSchedulerGetTool,\n\t\teventBridgeSchedulerListTool,\n\t\teventBridgeSchedulerDeleteTool\n\t]\n})\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { t as ToolError } from "./errors-DoSpNHvs.js";
2
- import { n as defineModule, r as defineTool } from "./define-DdFALdNf.js";
2
+ import { n as defineModule, r as defineTool } from "./define-CbQI8dAN.js";
3
3
  import { n as requireAuth } from "./provider-CgDAlg6K.js";
4
4
  import { t as HttpService } from "./http-service-BMBIryAL.js";
5
5
  import { t as base64ToBytes } from "./bytes-BxpimpQx.js";
@@ -555,4 +555,4 @@ const imessageModule = defineModule({
555
555
  //#endregion
556
556
  export { imessageUnsendInputSchema as A, imessageMessageOutputSchema as C, imessageSendMediaInputSchema as D, imessageSendChatActionInputSchema as E, imessageSendTextInputSchema as O, imessageEnsureChatOutputSchema as S, imessageReadInputSchema as T, imessageClearReactionInputSchema as _, imessageReadTool as a, imessageEditTextInputSchema as b, imessageSendTextTool as c, ImessageClient as d, ImessageClientError as f, imessageAuthSchema as g, MAX_MEDIA_BYTES as h, imessageModule as i, imessageSetReactionInputSchema as k, imessageSetReactionTool as l, isImessageOutcomeUnknown as m, imessageDownloadFileTool as n, imessageSendChatActionTool as o, isImessageDefiniteRejection as p, imessageEditTextTool as r, imessageSendMediaTool as s, imessageClearReactionTool as t, imessageUnsendTool as u, imessageDownloadFileInputSchema as v, imessageOkOutputSchema as w, imessageEnsureChatInputSchema as x, imessageDownloadFileOutputSchema as y };
557
557
 
558
- //# sourceMappingURL=imessage-B-0DZfMa.js.map
558
+ //# sourceMappingURL=imessage-u90N3KVq.js.map