jaz-clio 5.13.6 → 5.13.7

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.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: jaz-api
3
- version: 5.13.6
3
+ version: 5.13.7
4
4
  description: >-
5
5
  Use this skill whenever you call, debug, or review code that touches the Jaz
6
6
  REST API. Covers field names, response shapes, 141 production gotchas, error
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: jaz-cli
3
- version: 5.13.6
3
+ version: 5.13.7
4
4
  description: >-
5
5
  Use this skill when running Clio CLI commands, building shell scripts with
6
6
  Clio, debugging auth issues, understanding --json output, paginating results,
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: jaz-conversion
3
- version: 5.13.6
3
+ version: 5.13.7
4
4
  description: >-
5
5
  Use this skill when migrating accounting data into Jaz — importing from Xero,
6
6
  QuickBooks, Sage, MYOB, or Excel exports. Covers the full conversion pipeline:
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: jaz-pseudo-sql
3
- version: 5.13.6
3
+ version: 5.13.7
4
4
  description: >-
5
5
  Use this skill when answering ad-hoc data questions that aren't covered by
6
6
  download_export (canonical reports — anomaly, audit, aging, P&L, BS, GL,
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: jaz-jobs
3
- version: 5.13.6
3
+ version: 5.13.7
4
4
  description: >-
5
5
  Use this skill for recurring accounting workflows — month/quarter/year-end
6
6
  close, bank reconciliation, GST/VAT filing, payment runs, credit control,
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: jaz-practice
3
- version: 5.13.6
3
+ version: 5.13.7
4
4
  description: >-
5
5
  Use this skill whenever an accounting practitioner is doing client work in
6
6
  Jaz — closing the books, filing GST, year-end statutory, onboarding a new
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: jaz-recipes
3
- version: 5.13.6
3
+ version: 5.13.7
4
4
  description: >-
5
5
  Use this skill when modeling complex multi-step accounting transactions —
6
6
  anything that spans multiple periods, involves changing amounts, or requires
package/cli.mjs CHANGED
@@ -862,7 +862,7 @@ btType enum: SALE = invoice, PURCHASE = bill, SALE_CREDIT_NOTE = customer CN, PU
862
862
 
863
863
  Each result carries contactSignals (Mid-7: cadence, outliers, severity, divergences from contact's modal pattern; null if no contact / no history) and breakdown (Balance-panel payload: line items + subtotal/tax/total/balance/exchange rate). Top-level contactSignalsMeta.unavailable=true \u2192 freshness layer offline for whole batch.
864
864
 
865
- USE THIS to score a specific draft against contact history. For stand-alone "what does this contact normally look like?" without a draft \u2192 use get_contact_signals.`,params:{items:{type:"array",description:"Draft business transaction references (max 500). Mix any btType freely.",items:{type:"object",properties:{btResourceId:{type:"string",description:"Draft BT resource ID (UUID) \u2014 required"},btType:{type:"string",enum:["SALE","PURCHASE","SALE_CREDIT_NOTE","PURCHASE_CREDIT_NOTE"],description:"Required"}}}}},required:["items"],group:"drafts",readOnly:!0,isConcurrencySafe:!0,searchHint:"validate drafts eligibility check before convert promote",execute:async(t,e)=>(lv(e.items),rz(t.client,e.items))},{name:"convert_drafts_to_active",description:`BULK promote \u2014 finalize up to 500 draft business transactions to ACTIVE in ONE call, mixing any combination of invoices, bills, and credit notes (no per-type tools needed). ${Ru} NOT idempotent: a second call on already-promoted drafts returns 422. Filter the draft list by status: DRAFT before submitting. Pair with validate_drafts for a pre-flight check on large batches.`,params:{items:{type:"array",description:"Draft BT references (max 500). Mix any btType.",items:{type:"object",properties:{btResourceId:{type:"string",description:"Draft BT resource ID (UUID) \u2014 required"},btType:{type:"string",enum:["SALE","PURCHASE","SALE_CREDIT_NOTE","PURCHASE_CREDIT_NOTE"],description:"Required"}}}}},required:["items"],group:"drafts",readOnly:!1,searchHint:"convert drafts to active promote finalize bulk",execute:async(t,e)=>(lv(e.items),nz(t.client,e.items))},{name:"submit_drafts_for_approval",description:`BULK submit \u2014 route up to 500 draft business transactions into the approval workflow in ONE call, mixing any combination of invoices, bills, and credit notes. ${Ru} NOT idempotent on drafts that already have an in-flight approval request.`,params:{items:{type:"array",description:"Draft BT references (max 500). Mix any btType.",items:{type:"object",properties:{btResourceId:{type:"string",description:"Draft BT resource ID (UUID) \u2014 required"},btType:{type:"string",enum:["SALE","PURCHASE","SALE_CREDIT_NOTE","PURCHASE_CREDIT_NOTE"],description:"Required"}}}}},required:["items"],group:"drafts",readOnly:!1,searchHint:"submit drafts for approval workflow review bulk",execute:async(t,e)=>(lv(e.items),iz(t.client,e.items))},{name:"search_help_center",description:'Search the Jaz help center for how-to articles, feature guides, and accounting concepts. Use this for "how do I..." or "what is..." questions about Jaz: bank reconciliation, GST/VAT filing, multi-currency, fixed assets, custom fields, integrations, and so on. Returns top matching articles with title, section, content, and source URL.',params:{query:{type:"string",description:'Natural-language question or keywords (e.g. "how do I reconcile a bank statement", "set up GST", "multi-currency invoice").'},limit:{type:"number",description:"Maximum number of articles to return (default 3, max 10)."},section:{type:"string",description:'Optional: restrict to a single help-center section slug (e.g. "bank-reconciliations", "invoices").'}},required:["query"],group:"help_center",readOnly:!0,searchHint:"help center docs how to guide article search question",isConcurrencySafe:!0,maxResultSizeChars:2e4,execute:async(t,e)=>{let r=String(e.query??"").trim();if(!r)return{error:"Query is required.",hint:"Pass a natural-language question or keywords."};let n=typeof e.limit=="number"&&!Number.isNaN(e.limit)?e.limit:3,i=Math.max(1,Math.min(10,Math.floor(n))),s=typeof e.section=="string"?e.section:void 0;try{let o=ox();if(s&&!o.sections.some(u=>u.slug===s))return{error:`Unknown section: "${s}".`,available:o.sections.map(u=>u.slug),hint:"Omit the section parameter to search every section, or pick a slug from the available list."};let a=ax(),c=await cx(o,a,r,{mode:"hybrid",limit:i,section:s});return c.length===0?{results:[],hint:"No matching articles. Try broader keywords or rephrase the question."}:{results:c.map(u=>{let f=(Lce(u.article)??u.article.snippet).slice(0,1500);return{title:u.article.title,section:u.section.name,sectionSlug:u.section.slug,content:f,url:u.article.sourceUrl,score:Math.round(u.score*1e3)/1e3,scoreKind:u.scoreKind,matchedTerms:u.matchedTerms}}),totalArticles:o.articleCount,searchedSections:s?[s]:void 0}}catch(o){return{error:"Help center search failed.",detail:o instanceof Error?o.message:String(o),hint:"The bundled help-center index may be missing or corrupt."}}}},{name:"practice_init",description:"Offline. Scaffold the practitioner workspace at ~/Documents/Jaz Practice (or PRACTICE_HOME env override). Creates clients/, templates/, and a starter PRACTICE.md from the firm name. Idempotent on re-run. Filesystem-only. Run once before practice_onboard_client.",params:{firmName:{type:"string",description:"Display name shown on outputs."},defaultBaseCurrency:{type:"string",description:'Default currency for new clients (e.g., "SGD"). Defaults to SGD.'},defaultJurisdiction:{type:"string",description:'ISO-3166 alpha-2 (e.g., "SG"). Defaults to SG.'},defaultJazApiKey:{type:"string",description:"Optional default JAZ_API_KEY for all clients (last in resolution chain after CLIENT.md override and env)."},practiceHome:{type:"string",description:"Optional override for the practice home dir. Defaults to ~/Documents/Jaz Practice or PRACTICE_HOME env."}},required:["firmName"],group:"practice",readOnly:!1,searchHint:"practice init firm setup workspace scaffold",isConcurrencySafe:!1,maxResultSizeChars:5e3,execute:async(t,e)=>{let r=mo(e.practiceHome);eA(r);let n=tA(r),i=n??{v:1,firm_name:String(e.firmName),default_jaz_api_key:e.defaultJazApiKey,default_base_currency:e.defaultBaseCurrency??"SGD",default_jurisdiction:e.defaultJurisdiction??"SG",materiality_default:1e3,body:"Firm-level defaults that flow into every new client. Changes here apply to NEW clients only."};return n&&(e.firmName&&(i.firm_name=String(e.firmName)),e.defaultBaseCurrency&&(i.default_base_currency=String(e.defaultBaseCurrency)),e.defaultJurisdiction&&(i.default_jurisdiction=String(e.defaultJurisdiction)),e.defaultJazApiKey&&(i.default_jaz_api_key=String(e.defaultJazApiKey))),e_(r,i),{practiceHome:r,firmName:i.firm_name,defaultBaseCurrency:i.default_base_currency,defaultJurisdiction:i.default_jurisdiction,clientsDir:`${r}/clients`,wasExisting:n!==null}}},{name:"practice_list_clients",description:"Offline. List all clients in the practitioner workspace. Returns slugs and last-active engagement per client. Filesystem-only. Use as a dashboard entry point before practice_load_client.",params:{practiceHome:{type:"string",description:"Optional override; defaults to ~/Documents/Jaz Practice."}},required:[],group:"practice",readOnly:!0,searchHint:"practice list clients dashboard",isConcurrencySafe:!0,maxResultSizeChars:2e4,execute:async(t,e)=>{let r=mo(e.practiceHome),i=i_(r).map(s=>{let o=uf(r,s),a=iA(r,s);return{slug:s,legalEntityName:o?.legal_entity_name??s,fyEnd:o?.fy_end,baseCurrency:o?.base_currency,gstScheme:o?.gst_scheme,hasJazApiKeyOverride:!!o?.jaz_api_key_override,activeEngagements:a}});return{practiceHome:r,total:i.length,clients:i}}},{name:"practice_load_client",description:"Offline. Read a client's CLIENT.md master file. Returns the full record (legal entity, FY, COA mapping notes, banks, recurring accruals, recurring engagements, etc.) plus the list of active engagements. Filesystem-only. Use this to give the agent client context before invoking jaz-jobs blueprints or jaz-recipes recipes.",params:{slug:{type:"string",description:'Client slug (lowercase, hyphenated; e.g., "acme-pte-ltd").'},practiceHome:{type:"string",description:"Optional override."}},required:["slug"],group:"practice",readOnly:!0,searchHint:"practice load client read context CLIENT.md",isConcurrencySafe:!0,maxResultSizeChars:3e4,execute:async(t,e)=>{let r=mo(e.practiceHome),n=String(e.slug);try{Mo(n,"client slug")}catch(o){return{error:o instanceof Error?o.message:String(o)}}let i=uf(r,n);if(!i)return{error:`Client not found: ${n}`,hint:"Run practice_list_clients to see available slugs, or practice_onboard_client to create a new one."};let s=iA(r,n).map(o=>{let a=sA(r,n,o);return a?{slug:o,type:a.type,period:a.period,status:a.status,scope:a.scope_summary}:null}).filter(Boolean);return{client:r_(i),engagements:s}}},{name:"practice_onboard_client",description:"Offline. Scaffold a new client folder and write the initial CLIENT.md. Captures legal entity, FY end, GST scheme, banks, recurring accruals, recurring engagements. Optionally sets a per-client JAZ_API_KEY override for multi-org agencies. Filesystem-only. After this, call practice_create_engagement for the first period.",params:{legalEntityName:{type:"string",description:"Legal name (ACRA / equivalent)."},uen:{type:"string",description:"Singapore UEN."},registeredAddress:{type:"string",description:"Registered address."},country:{type:"string",description:"ISO-3166 alpha-2 (default: PRACTICE.md.default_jurisdiction)."},baseCurrency:{type:"string",description:"ISO-4217 (default: PRACTICE.md.default_base_currency)."},fyEnd:{type:"string",description:'MM-DD (e.g. "12-31"). Drives annual-statutory period boundaries.'},gstScheme:{type:"string",enum:["quarterly","monthly","not-registered"],description:"GST registration cadence."},gstRegistrationNumber:{type:"string",description:"Required if gstScheme != not-registered."},corporateTaxBracket:{type:"string",enum:["standard","startup_exemption","partial_exemption"],description:"Drives Form C-S path."},jazApiKeyOverride:{type:"string",description:"Per-client API key (precedence: this > PRACTICE.md.default_jaz_api_key > JAZ_API_KEY env)."},jazOrgId:{type:"string",description:"Pinned Jaz org UUID."},materialityThreshold:{type:"number",description:"In base currency (default: PRACTICE.md.materiality_default)."},bankAccounts:{type:"array",description:"{name, currency, account_number_ref?, jaz_resource_id?}[]. Read by monthly-close.",items:{type:"object"}},recurringAccruals:{type:"array",description:"{name, gl_account, vendor?, estimation_method?, fixed_amount?}[]. Drives plan_recipe(accrued-expense).",items:{type:"object"}},recurringEngagements:{type:"array",description:'{type, cadence}[]. e.g. [{type: "monthly-close", cadence: "monthly"}].',items:{type:"object"}},keyContacts:{type:"array",description:"{name, role, email?}[].",items:{type:"object"}},practiceHome:{type:"string",description:"Override PRACTICE_HOME."}},required:["legalEntityName","fyEnd","gstScheme"],group:"practice",readOnly:!1,searchHint:"practice onboard new client setup CLIENT.md",isConcurrencySafe:!1,maxResultSizeChars:5e3,execute:async(t,e)=>{let r=mo(e.practiceHome);eA(r);let n=tA(r);try{let i=s_(r,{legal_entity_name:String(e.legalEntityName),uen:e.uen,registered_address:e.registeredAddress,country:e.country,base_currency:e.baseCurrency,fy_end:String(e.fyEnd),gst_scheme:e.gstScheme,gst_registration_number:e.gstRegistrationNumber,corporate_tax_bracket:e.corporateTaxBracket,jaz_api_key_override:e.jazApiKeyOverride,jaz_org_id:e.jazOrgId,materiality_threshold:e.materialityThreshold,bank_accounts:e.bankAccounts,recurring_accruals:e.recurringAccruals,recurring_engagements:e.recurringEngagements,key_contacts:e.keyContacts},n);return{slug:i.slug,path:i.path,nextStep:"Call practice_create_engagement to scaffold the first engagement (e.g., type: monthly-close for the current period)."}}catch(i){return{error:i instanceof Error?i.message:String(i),hint:"If the slug already exists, choose a different legal_entity_name or remove the existing folder."}}}},{name:"practice_create_engagement",description:"Offline. Scaffold a new engagement folder under a client. Creates ENGAGEMENT.md from the type-specific template plus inputs/, workpapers/, deliverables/ subdirs. Filesystem-only. Engagement type drives which jaz-jobs blueprint and jaz-recipes recipes the agent should invoke. period is REQUIRED for monthly-close (YYYY-MM), quarterly-gst (YYYY-QN), and annual-statutory (YYYY) \u2014 only onboarding and adhoc accept free-text or omitted period.",params:{clientSlug:{type:"string",description:"Existing client slug."},type:{type:"string",enum:["monthly-close","quarterly-gst","annual-statutory","onboarding","adhoc"],description:"Engagement type \u2192 blueprint: monthly-close\u2192month_end; quarterly-gst\u2192gst_vat; annual-statutory\u2192year_end + audit_prep + statutory_filing."},period:{type:"string",description:"Format per type: monthly-close YYYY-MM, quarterly-gst YYYY-QN, annual-statutory YYYY. REQUIRED for those three; free-text only for onboarding/adhoc. Malformed \u2192 422."},scopeSummary:{type:"string",description:"One sentence on what this engagement produces."},targetCompletionDate:{type:"string",description:"YYYY-MM-DD. Used by practice_list_clients to flag overdue work."},practiceHome:{type:"string",description:"Override PRACTICE_HOME."}},required:["clientSlug","type"],group:"practice",readOnly:!1,searchHint:"practice create engagement scaffold ENGAGEMENT.md monthly close gst statutory",isConcurrencySafe:!1,maxResultSizeChars:5e3,execute:async(t,e)=>{let r=mo(e.practiceHome),n=String(e.clientSlug);try{Mo(n,"client slug")}catch(o){return{error:o instanceof Error?o.message:String(o)}}let i=uf(r,n);if(!i)return{error:`Client not found: ${n}`,hint:"Run practice_list_clients or practice_onboard_client first."};let s=e.type;try{HE(s,e.period)}catch(o){return{error:o instanceof Error?o.message:String(o),hint:"Recurring/statutory engagements require a period: monthly-close=YYYY-MM, quarterly-gst=YYYY-QN, annual-statutory=YYYY."}}try{let o=a_(r,n,{type:s,period:e.period,scope_summary:e.scopeSummary,target_completion_date:e.targetCompletionDate},i.jaz_org_id);return{slug:o.slug,path:o.path,nextStep:"Open ENGAGEMENT.md and follow the type-specific playbook in jaz-practice/references/<type>.md."}}catch(o){return{error:o instanceof Error?o.message:String(o),hint:"If the engagement folder already exists, pick a different period or load the existing one with practice_load_engagement."}}}},{name:"practice_load_engagement",description:"Offline. Read an engagement's ENGAGEMENT.md file. Returns scope, status, period, queries, decisions log. Pair with practice_load_client to get full context before driving jaz-jobs / jaz-recipes work.",params:{clientSlug:{type:"string",description:"Client slug."},engagementSlug:{type:"string",description:'Engagement slug (e.g., "monthly-close-2026-03").'},practiceHome:{type:"string",description:"Optional override."}},required:["clientSlug","engagementSlug"],group:"practice",readOnly:!0,searchHint:"practice load engagement read ENGAGEMENT.md context",isConcurrencySafe:!0,maxResultSizeChars:2e4,execute:async(t,e)=>{let r=mo(e.practiceHome),n=String(e.clientSlug),i=String(e.engagementSlug);try{Mo(n,"client slug"),Mo(i,"engagement slug")}catch(o){return{error:o instanceof Error?o.message:String(o)}}let s=sA(r,n,i);return s?{engagement:s}:{error:`Engagement not found: ${n}/${i}`,hint:"Run practice_load_client to see active engagement slugs."}}}]});function tst(t,e=5){let r=t.trim().toLowerCase();if(!r)return[];let n=r.split(/[\s_-]+/).filter(s=>s.length>=2);return n.length===0?[]:Uh.map(s=>{let o=0,a=s.name.toLowerCase(),c=s.description.toLowerCase();(a===r||a===r.replace(/\s+/g,"_"))&&(o+=5),a.includes(r)&&(o+=3),c.includes(r)&&(o+=1);for(let u of n)a.includes(u)&&(o+=2),c.includes(u)&&(o+=1);return{ns:s,score:o}}).filter(s=>s.score>0).sort((s,o)=>o.score-s.score).slice(0,e).map(s=>s.ns)}var Uh,r8=re(()=>{"use strict";Uh=[{name:"invoices",description:"Sales invoices (INV/SI). Create, search, get, update, delete, pay, finalize, apply credits, download PDF. Also: receivables, AR, AR aging, billing, overdue invoices, dunning, recurring invoices.",groups:["invoices"]},{name:"customer_credit_notes",description:"Customer credit notes (CN). Create, search, update, delete, finalize, refund, download PDF. Also: sales returns, customer CN.",groups:["customer_credit_notes"]},{name:"bills",description:"Purchase bills (PO/PI). Create, search, get, update, delete, pay, finalize, apply credits. Also: payables, AP, vendor invoices, supplier bills.",groups:["bills"]},{name:"supplier_credit_notes",description:"Supplier credit notes. Create, search, update, delete, finalize, refund. Also: purchase returns, debit notes, supplier CN.",groups:["supplier_credit_notes"]},{name:"sale_orders",description:"Sales order documents: Sale Quotes (estimates/quotations) and Sale Orders. Create, get, search, update, and transition (accept a quote, confirm an order, void, delete). A Sale Order links to its quote via saleQuoteResourceId; the quote must be accepted first. Tracks fulfillment via orderState. Pipeline: quote \u2192 order \u2192 invoice (raise the invoice separately).",groups:["sale_orders"]},{name:"purchase_orders",description:"Purchase order documents: Purchase Requests (requisitions) and Purchase Orders (POs). Create, get, search, update, and transition (accept a request, confirm an order, void, delete). A Purchase Order links to its request via purchaseRequestResourceId; the request must be accepted first. Tracks fulfillment via orderState. Pipeline: request \u2192 order \u2192 bill (raise the bill separately).",groups:["purchase_orders"]},{name:"journals",description:"Journal entries (JE). Create, search, update, delete manual journals. Also: adjusting entries, accruals, reclassifications, corrections.",groups:["journals"]},{name:"cash_entries",description:"Cash-in receipts and cash-out disbursements for external cash movements. WHEN TO USE: money received from customers/external \u2192 cash-in. Money paid to suppliers/external \u2192 cash-out. For internal account-to-account transfers, use cash_transfers namespace.",groups:["cash_entries"]},{name:"cash_transfers",description:"Cash transfers between your own bank/cash accounts and cashflow transaction search. WHEN TO USE: moving funds between own accounts (main bank \u2192 petty cash, USD \u2192 SGD). For external receipts/payments, use cash_entries namespace.",groups:["cash_transfers"]},{name:"bank_accounts",description:"Bank accounts, bank statement imports (CSV/OFX), bank records search, auto-reconciliation. For unreconciled queries: ALWAYS search bank records with status UNRECONCILED after listing accounts. Also: bank feeds, bank balance.",groups:["bank"]},{name:"bank_rules",description:"Bank reconciliation rules (action shortcuts). Create, search, update, delete bank rules. Configure auto-matching rules for bank records.",groups:["bank_rules"]},{name:"reconciliations",description:"Apply a reconciliation decision to a bank statement entry \u2014 write side. Match bank records to EXISTING open bills/invoices/payments (reconcile_with_payments \u2014 the primary path, creates the payment for you), or to journals, cash entries, or transfers, or CREATE new bills/invoices (invoice_receipt/bill_receipt). Distinct from bank_accounts/bank_rules (which configure auto-reconciliation) and view_auto_reconciliation (which queries suggestions). Eleven endpoints: quick_reconcile + apply_bank_rule + magic_match (bulk), and direct_cash_entry / cash_journal / manual_journal / cash_transfer / invoice_receipt / bill_receipt / with_payments / learned_prediction (per-entry). Match-to-existing is preferred over create-new to avoid duplicates. Most fields prefill from the bank entry when omitted; FX is resolved server-side.",groups:["reconciliations"]},{name:"financial_reports",description:"Core financial statements: trial balance (TB), balance sheet (BS/B/S), profit & loss (PnL/P&L/income statement), cash flow, general ledger (GL), cash balance/position, equity movement, VAT/GST ledger. Also: how profitable, what is the balance. XLSX/PDF file exports of any of these statements are produced via download_export (lives in operational_reports namespace \u2014 switch there or call by name).",groups:["financial_reports"]},{name:"operational_reports",description:"Aging and operational reports: aged receivables (AR aging), aged payables (AP aging), AR report, bank balance summary, bank reconciliation reports, fixed asset (FA) summary, FA reconciliation. Data exports (CSV/Excel/XLSX). Anomaly detection and audit analysis: anomalous invoices, anomalous bills, cashflow anomalies, GL journal audit, exchange rate audit, receivables customer risk, cash expense health. Also: overdue analysis, how much owed, suspicious transactions, audit trail.",groups:["operational_reports","exports"]},{name:"pseudo_sql",description:"Pseudo-SQL ad-hoc read-only queries against the curated reporting schema (custom select, custom report, query data, run sql). Includes live schema introspection (get_pseudo_sql_schema) + sync preview (\u2264100 rows) + async CSV export. Use when search_* / download_export canonical reports don't cover the question.",groups:["pseudo_sql"]},{name:"contacts",description:"Contacts (customers/suppliers/vendors), contact groups, customer segmentation. Create, search, get, update, delete contacts. Bulk upsert contacts from CSV / spreadsheet imports \u2014 async, returns jobId, poll background_jobs. List/create contact groups.",groups:["contacts","contact_groups"]},{name:"items_and_inventory",description:"Products, services, inventory items. Create, search, get, update, delete items. Check inventory balance. Also: SKU, catalog, stock.",groups:["items","inventory"]},{name:"tags_and_custom_fields",description:"Tags for categorizing transactions. Custom fields for adding metadata (text, date, dropdown). Create, search, delete tags and custom fields.",groups:["tags","custom_fields"]},{name:"nano_classifiers",description:"Nano classifiers (tracking categories/dimensions). List, search, create, update, delete classifiers and their classes. Used for line-item tagging and dimensional reporting. Also: tracking categories, cost centers, departments, projects.",groups:["nano_classifiers"]},{name:"chart_of_accounts",description:"Chart of accounts (COA/GL accounts). Create, search, update accounts. Bookmarks (favorites/shortcuts). Also: ledger codes, account types.",groups:["accounts","bookmarks"]},{name:"currencies",description:"Currencies, exchange rates (FX/forex). List/add org currencies. Set, update, import currency rates. Also: multi-currency, FX rates.",groups:["currencies"]},{name:"tax_profiles",description:"Tax profiles (GST/VAT/sales tax), withholding tax codes (WHT/ATC). Search, create, update tax profiles. List WHT codes.",groups:["tax_profiles"]},{name:"capsules_and_recipes",description:"Capsules (transaction groupings/capsule types). Financial recipes: amortization, depreciation, deferred revenue, IFRS 16 leases, hire purchase, fixed deposits, FX revaluation, loan schedules, ECL/expected credit loss, IAS 37 provisions, asset disposal. Two recipe execution paths: offline (plan_recipe + execute_recipe \u2014 client-side calculators, no API key) and server-side (list/get/preview/resume/rollback_capsule_recipe \u2014 produce real capsule entities via Jaz API). Plus capsuleRecipe payload on trigger mutations (create_bill, create_journal, create_cash_in, etc.) to create and trigger a recipe in one shot, with optional templateOverrides to customize the generated text (Customize Recipe). Keywords: calculate, provision, schedule, expected credit loss, revaluation, amortize, rollback recipe, customize template overrides slots.",groups:["capsules","recipes","capsule_recipes"]},{name:"scheduled_transactions",description:"Scheduled/recurring invoices, bills, journals. Create scheduled invoices/bills/journals, search scheduled transactions. Also: recurring, auto-generate.",groups:["schedulers"]},{name:"subscriptions",description:"Subscriptions (recurring billing/payment plans). Create, update, cancel, search subscriptions. Also: recurring charges, subscription schedules.",groups:["subscriptions"]},{name:"organization",description:"Organization info (name, currency, country, fiscal year). User management: invite, update, remove, search org users. Bulk invite.",groups:["organization","org_users"]},{name:"document_ai",description:"File attachments, AI document extraction (magic/OCR). Upload/list attachments. Create transactions from PDFs/images (invoice scanning, bill extraction). Track extraction workflows.",groups:["attachments","magic"]},{name:"fixed_assets",description:"Fixed assets (PP&E/property, plant, equipment). Search, create, update, discard, sell, transfer, undo disposal. Also: depreciation, asset register.",groups:["fixed_assets"]},{name:"payments_and_search",description:"Payment records: get, update, delete individual payments. List payments/credits on invoices and bills. Reverse credit applications. Cashflow transaction search. Universal cross-entity search. Also: payment run, batch payment, payment matching, void payment, payment history, credit note applications.",groups:["payments","cashflow","search"]},{name:"quick_fix",description:"Quick Fix: bulk-update multiple transactions or line items in one call. Change dates, contacts, tags, accounts, tax profiles, custom fields across many invoices/bills/journals/credit-notes/cash-entries/schedulers at once. Also: batch update, mass edit.",groups:["quick_fix"]},{name:"export_records",description:"Export records to XLSX. List available columns, preview export scope (row count + sample), generate export file with pre-signed download URL. Supports any entity type: invoices, bills, contacts, items, journals, bank records, cashflow, fixed assets, etc. Pass query (structured search syntax) or filter (JSON), never both.",groups:["export_records"]},{name:"background_jobs",description:"Background job tracking. Poll any async operation by jobId (contacts bulk-upsert, items bulk-upsert, bank import, magic file processing, etc.). Filter by resourceId field to look up a specific job. Poll until status is SUCCESS, FAILED, or PARTIAL_SUCCESS.",groups:["background_jobs"]},{name:"drafts",description:"Draft business transactions \u2014 both local payload validation (invoices, bills, journals, credit notes) AND BULK-FRIENDLY server-side lifecycle: validate_drafts (sync eligibility check), convert_drafts_to_active (async promote to ACTIVE), submit_drafts_for_approval (async route to approval). The lifecycle tools are GENERIC and BULK \u2014 one call accepts up to 500 items mixing any combination of {btResourceId, btType: SALE|PURCHASE|SALE_CREDIT_NOTE|PURCHASE_CREDIT_NOTE}. No need for per-entity tools when promoting/submitting drafts at scale. NOT idempotent on already-promoted drafts.",groups:["drafts"]},{name:"close_procedures",description:"Period-end close checklists: month-end, quarter-end, year-end close. Bank reconciliation job. GST/VAT filing job. Audit preparation. Returns structured blueprints.",groups:["close_jobs"]},{name:"operational_jobs",description:"Operational job checklists: payment runs (incl. batch payment, batch supplier disbursement), credit control/collections, supplier reconciliation, fixed asset review, document collection, statutory filing. Returns structured blueprints.",groups:["operational_jobs"]},{name:"help_center",description:"Search the Jaz help center for how-to articles, feature guides, accounting concepts, and troubleshooting. Returns top matches with title, section, snippet, and source URL. Works without an API key.",groups:["help_center"]},{name:"practice",description:"Practitioner workspace scaffolding: per-client folders, per-engagement files, schemas. Use to onboard new clients (capture legal entity / FY / GST scheme / banks / recurring accruals into CLIENT.md), list active engagements, scaffold a monthly-close / quarterly-gst / annual-statutory engagement, and load client/engagement context before driving accounting work via jaz-jobs blueprints + jaz-recipes. All filesystem-only, offline. Pair with jaz-practice skill for the canonical playbooks.",groups:["practice"]}]});function Zbr(){if(!n8){n8=new Map;for(let t of Nc)n8.set(t.name,t)}return n8}function bv(t){return Zbr().get(t)}function Xx(){return Nc}function Cv(t){return Xx().filter(e=>e.group===t)}var n8,eT=re(()=>{"use strict";dv();n8=null});function i8(t){let e={type:t.type};if(t.description&&(e.description=t.description),t.enum&&(e.enum=t.enum),t.type==="array"&&t.items&&(e.items=i8(t.items)),t.type==="object"&&t.properties){let r={};for(let[n,i]of Object.entries(t.properties))r[n]=i8(i);e.properties=r,t.required?.length&&(e.required=t.required)}return e}function od(t,e){let r={};for(let[n,i]of Object.entries(t))r[n]=i8(i);return{type:"object",properties:r,...e.length>0?{required:e}:{}}}function ly(t){return{name:t.name,description:t.description,input_schema:od(t.params,t.required),...t.searchHint?{searchHint:t.searchHint}:{}}}var tT=re(()=>{"use strict"});function rst(t){if(typeof t!="string")return t.isDestructive??!1;let e=t;return e.startsWith("delete_")||e.startsWith("pay_")||e.startsWith("finalize_")||e.includes("refund")||e==="remove_org_user"}function s8(t){return{readOnlyHint:t.readOnly,destructiveHint:!t.readOnly&&rst(t),idempotentHint:t.readOnly,openWorldHint:!0}}function nst(t){if(!t.trim())return{namespaces:Uh.map(i=>{let s=i.groups.flatMap(o=>Cv(o));return{name:i.name,description:i.description,toolCount:s.length,tools:s.map(o=>o.name)}}),hint:"Call describe_tools with specific tool names to get full schemas before executing."};let e=tst(t,5);if(e.length===0)return{matches:[],hint:`No tools match "${t}". Try broader terms or call search_tools with empty query to see all namespaces.`};let n=t.toLowerCase().split(/\s+/).filter(Boolean);return{matches:e.map(i=>{let o=i.groups.flatMap(a=>Cv(a)).map(a=>{let c=`${a.name} ${a.searchHint??""} ${a.description}`.toLowerCase(),u=n.filter(f=>c.includes(f)).length;return{tool:a,score:u}}).sort((a,c)=>c.score-a.score);return{namespace:i.name,description:i.description,tools:o.map(a=>({name:a.tool.name,description:a.tool.description.split(`
865
+ USE THIS to score a specific draft against contact history. For stand-alone "what does this contact normally look like?" without a draft \u2192 use get_contact_signals.`,params:{items:{type:"array",description:"Draft business transaction references (max 500). Mix any btType freely.",items:{type:"object",properties:{btResourceId:{type:"string",description:"Draft BT resource ID (UUID) \u2014 required"},btType:{type:"string",enum:["SALE","PURCHASE","SALE_CREDIT_NOTE","PURCHASE_CREDIT_NOTE"],description:"Required"}}}}},required:["items"],group:"drafts",readOnly:!0,isConcurrencySafe:!0,searchHint:"validate drafts eligibility check before convert promote",execute:async(t,e)=>(lv(e.items),rz(t.client,e.items))},{name:"convert_drafts_to_active",description:`BULK promote \u2014 finalize up to 500 draft business transactions to ACTIVE in ONE call, mixing any combination of invoices, bills, and credit notes (no per-type tools needed). ${Ru} NOT idempotent: a second call on already-promoted drafts returns 422. Filter the draft list by status: DRAFT before submitting. Pair with validate_drafts for a pre-flight check on large batches.`,params:{items:{type:"array",description:"Draft BT references (max 500). Mix any btType.",items:{type:"object",properties:{btResourceId:{type:"string",description:"Draft BT resource ID (UUID) \u2014 required"},btType:{type:"string",enum:["SALE","PURCHASE","SALE_CREDIT_NOTE","PURCHASE_CREDIT_NOTE"],description:"Required"}}}}},required:["items"],group:"drafts",readOnly:!1,searchHint:"convert drafts to active promote finalize bulk",execute:async(t,e)=>(lv(e.items),nz(t.client,e.items))},{name:"submit_drafts_for_approval",description:`BULK submit \u2014 route up to 500 draft business transactions into the approval workflow in ONE call, mixing any combination of invoices, bills, and credit notes. ${Ru} NOT idempotent on drafts that already have an in-flight approval request.`,params:{items:{type:"array",description:"Draft BT references (max 500). Mix any btType.",items:{type:"object",properties:{btResourceId:{type:"string",description:"Draft BT resource ID (UUID) \u2014 required"},btType:{type:"string",enum:["SALE","PURCHASE","SALE_CREDIT_NOTE","PURCHASE_CREDIT_NOTE"],description:"Required"}}}}},required:["items"],group:"drafts",readOnly:!1,searchHint:"submit drafts for approval workflow review bulk",execute:async(t,e)=>(lv(e.items),iz(t.client,e.items))},{name:"search_help_center",description:'Search the Jaz help center for how-to articles, feature guides, and accounting concepts. Use this for "how do I..." or "what is..." questions about Jaz: bank reconciliation, GST/VAT filing, multi-currency, fixed assets, custom fields, integrations, and so on. Returns top matching articles with title, section, content, and source URL.',params:{query:{type:"string",description:'Natural-language question or keywords (e.g. "how do I reconcile a bank statement", "set up GST", "multi-currency invoice").'},limit:{type:"number",description:"Maximum number of articles to return (default 3, max 10)."},section:{type:"string",description:'Optional: restrict to a single help-center section slug (e.g. "bank-reconciliations", "invoices").'}},required:["query"],group:"help_center",readOnly:!0,searchHint:"help center docs how to guide article search question",isConcurrencySafe:!0,maxResultSizeChars:2e4,execute:async(t,e)=>{let r=String(e.query??"").trim();if(!r)return{error:"Query is required.",hint:"Pass a natural-language question or keywords."};let n=typeof e.limit=="number"&&!Number.isNaN(e.limit)?e.limit:3,i=Math.max(1,Math.min(10,Math.floor(n))),s=typeof e.section=="string"?e.section:void 0;try{let o=ox();if(s&&!o.sections.some(u=>u.slug===s))return{error:`Unknown section: "${s}".`,available:o.sections.map(u=>u.slug),hint:"Omit the section parameter to search every section, or pick a slug from the available list."};let a=ax(),c=await cx(o,a,r,{mode:"hybrid",limit:i,section:s});return c.length===0?{results:[],hint:"No matching articles. Try broader keywords or rephrase the question."}:{results:c.map(u=>{let f=(Lce(u.article)??u.article.snippet).slice(0,1500);return{title:u.article.title,section:u.section.name,sectionSlug:u.section.slug,content:f,url:u.article.sourceUrl,score:Math.round(u.score*1e3)/1e3,scoreKind:u.scoreKind,matchedTerms:u.matchedTerms}}),totalArticles:o.articleCount,searchedSections:s?[s]:void 0}}catch(o){return{error:"Help center search failed.",detail:o instanceof Error?o.message:String(o),hint:"The bundled help-center index may be missing or corrupt."}}}},{name:"practice_init",description:"Offline. Scaffold the practitioner workspace at ~/Documents/Jaz Practice (or PRACTICE_HOME env override). Creates clients/, templates/, and a starter PRACTICE.md from the firm name. Idempotent on re-run. Filesystem-only. Run once before practice_onboard_client.",params:{firmName:{type:"string",description:"Display name shown on outputs."},defaultBaseCurrency:{type:"string",description:'Default currency for new clients (e.g., "SGD"). Defaults to SGD.'},defaultJurisdiction:{type:"string",description:'ISO-3166 alpha-2 (e.g., "SG"). Defaults to SG.'},defaultJazApiKey:{type:"string",description:"Optional default JAZ_API_KEY for all clients (last in resolution chain after CLIENT.md override and env)."},practiceHome:{type:"string",description:"Optional override for the practice home dir. Defaults to ~/Documents/Jaz Practice or PRACTICE_HOME env."}},required:["firmName"],group:"practice",readOnly:!1,searchHint:"practice init firm setup workspace scaffold",isConcurrencySafe:!1,maxResultSizeChars:5e3,execute:async(t,e)=>{let r=mo(e.practiceHome);eA(r);let n=tA(r),i=n??{v:1,firm_name:String(e.firmName),default_jaz_api_key:e.defaultJazApiKey,default_base_currency:e.defaultBaseCurrency??"SGD",default_jurisdiction:e.defaultJurisdiction??"SG",materiality_default:1e3,body:"Firm-level defaults that flow into every new client. Changes here apply to NEW clients only."};return n&&(e.firmName&&(i.firm_name=String(e.firmName)),e.defaultBaseCurrency&&(i.default_base_currency=String(e.defaultBaseCurrency)),e.defaultJurisdiction&&(i.default_jurisdiction=String(e.defaultJurisdiction)),e.defaultJazApiKey&&(i.default_jaz_api_key=String(e.defaultJazApiKey))),e_(r,i),{practiceHome:r,firmName:i.firm_name,defaultBaseCurrency:i.default_base_currency,defaultJurisdiction:i.default_jurisdiction,clientsDir:`${r}/clients`,wasExisting:n!==null}}},{name:"practice_list_clients",description:"Offline. List all clients in the practitioner workspace. Returns slugs and last-active engagement per client. Filesystem-only. Use as a dashboard entry point before practice_load_client.",params:{practiceHome:{type:"string",description:"Optional override; defaults to ~/Documents/Jaz Practice."}},required:[],group:"practice",readOnly:!0,searchHint:"practice list clients dashboard",isConcurrencySafe:!0,maxResultSizeChars:2e4,execute:async(t,e)=>{let r=mo(e.practiceHome),i=i_(r).map(s=>{let o=uf(r,s),a=iA(r,s);return{slug:s,legalEntityName:o?.legal_entity_name??s,fyEnd:o?.fy_end,baseCurrency:o?.base_currency,gstScheme:o?.gst_scheme,hasJazApiKeyOverride:!!o?.jaz_api_key_override,activeEngagements:a}});return{practiceHome:r,total:i.length,clients:i}}},{name:"practice_load_client",description:"Offline. Read a client's CLIENT.md master file. Returns the full record (legal entity, FY, COA mapping notes, banks, recurring accruals, recurring engagements, etc.) plus the list of active engagements. Filesystem-only. Use this to give the agent client context before invoking jaz-jobs blueprints or jaz-recipes recipes.",params:{slug:{type:"string",description:'Client slug (lowercase, hyphenated; e.g., "acme-pte-ltd").'},practiceHome:{type:"string",description:"Optional override."}},required:["slug"],group:"practice",readOnly:!0,searchHint:"practice load client read context CLIENT.md",isConcurrencySafe:!0,maxResultSizeChars:3e4,execute:async(t,e)=>{let r=mo(e.practiceHome),n=String(e.slug);try{Mo(n,"client slug")}catch(o){return{error:o instanceof Error?o.message:String(o)}}let i=uf(r,n);if(!i)return{error:`Client not found: ${n}`,hint:"Run practice_list_clients to see available slugs, or practice_onboard_client to create a new one."};let s=iA(r,n).map(o=>{let a=sA(r,n,o);return a?{slug:o,type:a.type,period:a.period,status:a.status,scope:a.scope_summary}:null}).filter(Boolean);return{client:r_(i),engagements:s}}},{name:"practice_onboard_client",description:"Offline. Scaffold a new client folder and write the initial CLIENT.md. Captures legal entity, FY end, GST scheme, banks, recurring accruals, recurring engagements. Optionally sets a per-client JAZ_API_KEY override for multi-org agencies. Filesystem-only. After this, call practice_create_engagement for the first period.",params:{legalEntityName:{type:"string",description:"Legal name (ACRA / equivalent)."},uen:{type:"string",description:"Singapore UEN."},registeredAddress:{type:"string",description:"Registered address."},country:{type:"string",description:"ISO-3166 alpha-2 (default: PRACTICE.md.default_jurisdiction)."},baseCurrency:{type:"string",description:"ISO-4217 (default: PRACTICE.md.default_base_currency)."},fyEnd:{type:"string",description:'MM-DD (e.g. "12-31"). Drives annual-statutory period boundaries.'},gstScheme:{type:"string",enum:["quarterly","monthly","not-registered"],description:"GST registration cadence."},gstRegistrationNumber:{type:"string",description:"Required if gstScheme != not-registered."},corporateTaxBracket:{type:"string",enum:["standard","startup_exemption","partial_exemption"],description:"Drives Form C-S path."},jazApiKeyOverride:{type:"string",description:"Per-client API key (precedence: this > PRACTICE.md.default_jaz_api_key > JAZ_API_KEY env)."},jazOrgId:{type:"string",description:"Pinned Jaz org UUID."},materialityThreshold:{type:"number",description:"In base currency (default: PRACTICE.md.materiality_default)."},bankAccounts:{type:"array",description:"{name, currency, account_number_ref?, jaz_resource_id?}[]. Read by monthly-close.",items:{type:"object"}},recurringAccruals:{type:"array",description:"{name, gl_account, vendor?, estimation_method?, fixed_amount?}[]. Drives plan_recipe(accrued-expense).",items:{type:"object"}},recurringEngagements:{type:"array",description:'{type, cadence}[]. e.g. [{type: "monthly-close", cadence: "monthly"}].',items:{type:"object"}},keyContacts:{type:"array",description:"{name, role, email?}[].",items:{type:"object"}},practiceHome:{type:"string",description:"Override PRACTICE_HOME."}},required:["legalEntityName","fyEnd","gstScheme"],group:"practice",readOnly:!1,searchHint:"practice onboard new client setup CLIENT.md",isConcurrencySafe:!1,maxResultSizeChars:5e3,execute:async(t,e)=>{let r=mo(e.practiceHome);eA(r);let n=tA(r);try{let i=s_(r,{legal_entity_name:String(e.legalEntityName),uen:e.uen,registered_address:e.registeredAddress,country:e.country,base_currency:e.baseCurrency,fy_end:String(e.fyEnd),gst_scheme:e.gstScheme,gst_registration_number:e.gstRegistrationNumber,corporate_tax_bracket:e.corporateTaxBracket,jaz_api_key_override:e.jazApiKeyOverride,jaz_org_id:e.jazOrgId,materiality_threshold:e.materialityThreshold,bank_accounts:e.bankAccounts,recurring_accruals:e.recurringAccruals,recurring_engagements:e.recurringEngagements,key_contacts:e.keyContacts},n);return{slug:i.slug,path:i.path,nextStep:"Call practice_create_engagement to scaffold the first engagement (e.g., type: monthly-close for the current period)."}}catch(i){return{error:i instanceof Error?i.message:String(i),hint:"If the slug already exists, choose a different legal_entity_name or remove the existing folder."}}}},{name:"practice_create_engagement",description:"Offline. Scaffold a new engagement folder under a client. Creates ENGAGEMENT.md from the type-specific template plus inputs/, workpapers/, deliverables/ subdirs. Filesystem-only. Engagement type drives which jaz-jobs blueprint and jaz-recipes recipes the agent should invoke. period is REQUIRED for monthly-close (YYYY-MM), quarterly-gst (YYYY-QN), and annual-statutory (YYYY) \u2014 only onboarding and adhoc accept free-text or omitted period.",params:{clientSlug:{type:"string",description:"Existing client slug."},type:{type:"string",enum:["monthly-close","quarterly-gst","annual-statutory","onboarding","adhoc"],description:"Engagement type \u2192 blueprint: monthly-close\u2192month_end; quarterly-gst\u2192gst_vat; annual-statutory\u2192year_end + audit_prep + statutory_filing."},period:{type:"string",description:"Format per type: monthly-close YYYY-MM, quarterly-gst YYYY-QN, annual-statutory YYYY. REQUIRED for those three; free-text only for onboarding/adhoc. Malformed \u2192 422."},scopeSummary:{type:"string",description:"One sentence on what this engagement produces."},targetCompletionDate:{type:"string",description:"YYYY-MM-DD. Used by practice_list_clients to flag overdue work."},practiceHome:{type:"string",description:"Override PRACTICE_HOME."}},required:["clientSlug","type"],group:"practice",readOnly:!1,searchHint:"practice create engagement scaffold ENGAGEMENT.md monthly close gst statutory",isConcurrencySafe:!1,maxResultSizeChars:5e3,execute:async(t,e)=>{let r=mo(e.practiceHome),n=String(e.clientSlug);try{Mo(n,"client slug")}catch(o){return{error:o instanceof Error?o.message:String(o)}}let i=uf(r,n);if(!i)return{error:`Client not found: ${n}`,hint:"Run practice_list_clients or practice_onboard_client first."};let s=e.type;try{HE(s,e.period)}catch(o){return{error:o instanceof Error?o.message:String(o),hint:"Recurring/statutory engagements require a period: monthly-close=YYYY-MM, quarterly-gst=YYYY-QN, annual-statutory=YYYY."}}try{let o=a_(r,n,{type:s,period:e.period,scope_summary:e.scopeSummary,target_completion_date:e.targetCompletionDate},i.jaz_org_id);return{slug:o.slug,path:o.path,nextStep:"Open ENGAGEMENT.md and follow the type-specific playbook in jaz-practice/references/<type>.md."}}catch(o){return{error:o instanceof Error?o.message:String(o),hint:"If the engagement folder already exists, pick a different period or load the existing one with practice_load_engagement."}}}},{name:"practice_load_engagement",description:"Offline. Read an engagement's ENGAGEMENT.md file. Returns scope, status, period, queries, decisions log. Pair with practice_load_client to get full context before driving jaz-jobs / jaz-recipes work.",params:{clientSlug:{type:"string",description:"Client slug."},engagementSlug:{type:"string",description:'Engagement slug (e.g., "monthly-close-2026-03").'},practiceHome:{type:"string",description:"Optional override."}},required:["clientSlug","engagementSlug"],group:"practice",readOnly:!0,searchHint:"practice load engagement read ENGAGEMENT.md context",isConcurrencySafe:!0,maxResultSizeChars:2e4,execute:async(t,e)=>{let r=mo(e.practiceHome),n=String(e.clientSlug),i=String(e.engagementSlug);try{Mo(n,"client slug"),Mo(i,"engagement slug")}catch(o){return{error:o instanceof Error?o.message:String(o)}}let s=sA(r,n,i);return s?{engagement:s}:{error:`Engagement not found: ${n}/${i}`,hint:"Run practice_load_client to see active engagement slugs."}}}]});function tst(t,e=5){let r=t.trim().toLowerCase();if(!r)return[];let n=r.split(/[\s_-]+/).filter(s=>s.length>=2);return n.length===0?[]:Uh.map(s=>{let o=0,a=s.name.toLowerCase(),c=s.description.toLowerCase();(a===r||a===r.replace(/\s+/g,"_"))&&(o+=5),a.includes(r)&&(o+=3),c.includes(r)&&(o+=1);for(let u of n)a.includes(u)&&(o+=2),c.includes(u)&&(o+=1);return{ns:s,score:o}}).filter(s=>s.score>0).sort((s,o)=>o.score-s.score).slice(0,e).map(s=>s.ns)}var Uh,r8=re(()=>{"use strict";Uh=[{name:"invoices",description:"Sales invoices (INV/SI). Create, search, get, update, delete, pay, finalize, apply credits, download PDF. Also: receivables, AR, AR aging, billing, overdue invoices, dunning, recurring invoices.",groups:["invoices"]},{name:"customer_credit_notes",description:"Customer credit notes (CN). Create, search, update, delete, finalize, refund, download PDF. Also: sales returns, customer CN.",groups:["customer_credit_notes"]},{name:"bills",description:"Purchase bills (PO/PI). Create, search, get, update, delete, pay, finalize, apply credits. Also: payables, AP, vendor invoices, supplier bills.",groups:["bills"]},{name:"supplier_credit_notes",description:"Supplier credit notes. Create, search, update, delete, finalize, refund. Also: purchase returns, debit notes, supplier CN.",groups:["supplier_credit_notes"]},{name:"sale_orders",description:"Sales order documents: Sale Quotes (estimates/quotations) and Sale Orders. Create, get, search, update, and transition (accept a quote, confirm an order, void, delete). A Sale Order links to its quote via saleQuoteResourceId; the quote must be accepted first. Tracks fulfillment via orderState. Pipeline: quote \u2192 order \u2192 invoice (raise the invoice separately).",groups:["sale_orders"]},{name:"purchase_orders",description:"Purchase order documents: Purchase Requests (requisitions) and Purchase Orders (POs). Create, get, search, update, and transition (accept a request, confirm an order, void, delete). A Purchase Order links to its request via purchaseRequestResourceId; the request must be accepted first. Tracks fulfillment via orderState. Pipeline: request \u2192 order \u2192 bill (raise the bill separately).",groups:["purchase_orders"]},{name:"journals",description:"Journal entries (JE). Create, search, update, delete manual journals. Also: adjusting entries, accruals, reclassifications, corrections.",groups:["journals"]},{name:"cash_entries",description:"Cash-in receipts and cash-out disbursements for external cash movements. WHEN TO USE: money received from customers/external \u2192 cash-in. Money paid to suppliers/external \u2192 cash-out. For internal account-to-account transfers, use cash_transfers namespace.",groups:["cash_entries"]},{name:"cash_transfers",description:"Cash transfers between your own bank/cash accounts and cashflow transaction search. WHEN TO USE: moving funds between own accounts (main bank \u2192 petty cash, USD \u2192 SGD). For external receipts/payments, use cash_entries namespace.",groups:["cash_transfers"]},{name:"bank_accounts",description:"Bank accounts, bank statement imports (CSV/OFX), bank records search, auto-reconciliation. For unreconciled queries: ALWAYS search bank records with status UNRECONCILED after listing accounts. Also: bank feeds, bank balance.",groups:["bank"]},{name:"bank_rules",description:"Bank reconciliation rules (action shortcuts). Create, search, update, delete bank rules. Configure auto-matching rules for bank records.",groups:["bank_rules"]},{name:"reconciliations",description:"Apply a reconciliation decision to a bank statement entry \u2014 write side. Match bank records to EXISTING open bills/invoices/payments (reconcile_with_payments \u2014 the primary path, creates the payment for you), or to journals, cash entries, or transfers, or CREATE new bills/invoices (invoice_receipt/bill_receipt). Distinct from bank_accounts/bank_rules (which configure auto-reconciliation) and view_auto_reconciliation (which queries suggestions). Eleven endpoints: quick_reconcile + apply_bank_rule + magic_match (bulk), and direct_cash_entry / cash_journal / manual_journal / cash_transfer / invoice_receipt / bill_receipt / with_payments / learned_prediction (per-entry). Match-to-existing is preferred over create-new to avoid duplicates. Most fields prefill from the bank entry when omitted; FX is resolved server-side.",groups:["reconciliations"]},{name:"financial_reports",description:"Core financial statements: trial balance (TB), balance sheet (BS/B/S), profit & loss (PnL/P&L/income statement), cash flow, general ledger (GL), cash balance/position, equity movement, VAT/GST ledger. Also: how profitable, what is the balance. XLSX/PDF file exports of any of these statements are produced via download_export (lives in operational_reports namespace \u2014 switch there or call by name).",groups:["financial_reports"]},{name:"operational_reports",description:"Aging and operational reports: aged receivables (AR aging), aged payables (AP aging), AR report, bank balance summary, bank reconciliation reports, fixed asset (FA) summary, FA reconciliation. Data exports (CSV/Excel/XLSX). Anomaly detection and audit analysis: anomalous invoices, anomalous bills, cashflow anomalies, GL journal audit, exchange rate audit, receivables customer risk, cash expense health. Also: overdue analysis, how much owed, suspicious transactions, audit trail.",groups:["operational_reports","exports"]},{name:"pseudo_sql",description:"Pseudo-SQL ad-hoc read-only queries against the curated reporting schema (custom select, custom report, query data, run sql). Includes live schema introspection (get_pseudo_sql_schema) + sync preview (\u2264100 rows) + async CSV export. Use when search_* / download_export canonical reports don't cover the question.",groups:["pseudo_sql"]},{name:"contacts",description:"Contacts (customers/suppliers/vendors), contact groups, customer segmentation. Create, search, get, update, delete contacts. Bulk upsert contacts from CSV / spreadsheet imports \u2014 async, returns jobId, poll background_jobs. List/create contact groups.",groups:["contacts","contact_groups"]},{name:"items_and_inventory",description:"Products, services, inventory items. Create, search, get, update, delete items. Check inventory balance. Also: SKU, catalog, stock.",groups:["items","inventory"]},{name:"tags_and_custom_fields",description:"Tags for categorizing transactions. Custom fields for adding metadata (text, date, dropdown). Create, search, delete tags and custom fields.",groups:["tags","custom_fields"]},{name:"nano_classifiers",description:"Nano classifiers (tracking categories/dimensions). List, search, create, update, delete classifiers and their classes. Used for line-item tagging and dimensional reporting. Also: tracking categories, cost centers, departments, projects.",groups:["nano_classifiers"]},{name:"chart_of_accounts",description:"Chart of accounts (COA/GL accounts). Create, search, update accounts. Bookmarks (favorites/shortcuts). Also: ledger codes, account types.",groups:["accounts","bookmarks"]},{name:"currencies",description:"Currencies, exchange rates (FX/forex). List/add org currencies. Set, update, import currency rates. Also: multi-currency, FX rates.",groups:["currencies"]},{name:"tax_profiles",description:"Tax profiles (GST/VAT/sales tax), withholding tax codes (WHT/ATC). Search, create, update tax profiles. List WHT codes.",groups:["tax_profiles"]},{name:"capsules_and_recipes",description:"Capsules (transaction groupings/capsule types). Financial recipes: amortization, depreciation, deferred revenue, IFRS 16 leases, hire purchase, fixed deposits, FX revaluation, loan schedules, ECL/expected credit loss, IAS 37 provisions, asset disposal. Two recipe execution paths: offline (plan_recipe + execute_recipe \u2014 client-side calculators, no API key) and server-side (list/get/preview/resume/rollback_capsule_recipe \u2014 produce real capsule entities via Jaz API). Plus capsuleRecipe payload on trigger mutations (create_bill, create_journal, create_cash_in, etc.) to create and trigger a recipe in one shot, with optional templateOverrides to customize the generated text (Customize Recipe). Keywords: calculate, provision, schedule, expected credit loss, revaluation, amortize, rollback recipe, customize template overrides slots.",groups:["capsules","recipes","capsule_recipes"]},{name:"scheduled_transactions",description:"Scheduled/recurring invoices, bills, journals. Create scheduled invoices/bills/journals, search scheduled transactions. Also: recurring, auto-generate.",groups:["schedulers"]},{name:"subscriptions",description:"Subscriptions (recurring billing/payment plans). Create, update, cancel, search subscriptions. Also: recurring charges, subscription schedules.",groups:["subscriptions"]},{name:"organization",description:"Organization info (name, currency, country, fiscal year). User management: invite, update, remove, search org users. Bulk invite.",groups:["organization","org_users"]},{name:"document_ai",description:"File attachments, AI document extraction (magic/OCR). Upload/list attachments. Create transactions from PDFs/images (invoice scanning, bill extraction). Track extraction workflows.",groups:["attachments","magic"]},{name:"fixed_assets",description:"Fixed assets (PP&E/property, plant, equipment). Search, create, update, discard, sell, transfer, undo disposal. Also: depreciation, asset register.",groups:["fixed_assets"]},{name:"payments_and_search",description:"Payment records: get, update, delete individual payments. List payments/credits on invoices and bills. Reverse credit applications. Cashflow transaction search. Universal cross-entity search. Also: payment run, batch payment, payment matching, void payment, payment history, credit note applications.",groups:["payments","cashflow","search"]},{name:"quick_fix",description:"Quick Fix: bulk-update multiple transactions or line items in one call. Change dates, contacts, tags, accounts, tax profiles, custom fields across many invoices/bills/journals/credit-notes/cash-entries/schedulers at once. Also: batch update, mass edit.",groups:["quick_fix"]},{name:"export_records",description:"Export records to XLSX. List available columns, preview export scope (row count + sample), generate export file with pre-signed download URL. Supports any entity type: invoices, bills, contacts, items, journals, bank records, cashflow, fixed assets, etc. Pass query (structured search syntax) or filter (JSON), never both.",groups:["export_records"]},{name:"background_jobs",description:"Background job tracking. Poll any async operation by jobId (contacts bulk-upsert, items bulk-upsert, bank import, magic file processing, etc.). Filter by resourceId field to look up a specific job. Poll until status is SUCCESS, FAILED, or PARTIAL_SUCCESS.",groups:["background_jobs"]},{name:"drafts",description:"Draft business transactions \u2014 both local payload validation (invoices, bills, journals, credit notes) AND BULK-FRIENDLY server-side lifecycle: validate_drafts (sync eligibility check), convert_drafts_to_active (async promote to ACTIVE), submit_drafts_for_approval (async route to approval). The lifecycle tools are GENERIC and BULK \u2014 one call accepts up to 500 items mixing any combination of {btResourceId, btType: SALE|PURCHASE|SALE_CREDIT_NOTE|PURCHASE_CREDIT_NOTE}. No need for per-entity tools when promoting/submitting drafts at scale. NOT idempotent on already-promoted drafts.",groups:["drafts"]},{name:"close_procedures",description:"Period-end close checklists: month-end, quarter-end, year-end close. Bank reconciliation job. GST/VAT filing job. Audit preparation. Returns structured blueprints.",groups:["close_jobs"]},{name:"operational_jobs",description:"Operational job checklists: payment runs (incl. batch payment, batch supplier disbursement), credit control/collections, supplier reconciliation, fixed asset review, document collection, statutory filing. Returns structured blueprints.",groups:["operational_jobs"]},{name:"help_center",description:"Search the Jaz help center for how-to articles, feature guides, accounting concepts, and troubleshooting. Returns top matches with title, section, snippet, and source URL. Works without an API key.",groups:["help_center"]},{name:"practice",description:"Practitioner workspace scaffolding: per-client folders, per-engagement files, schemas. Use to onboard new clients (capture legal entity / FY / GST scheme / banks / recurring accruals into CLIENT.md), list active engagements, scaffold a monthly-close / quarterly-gst / annual-statutory engagement, and load client/engagement context before driving accounting work via jaz-jobs blueprints + jaz-recipes. All filesystem-only, offline. Pair with jaz-practice skill for the canonical playbooks.",groups:["practice"]}]});function Zbr(){if(!n8){n8=new Map;for(let t of Nc)n8.set(t.name,t)}return n8}function bv(t){return Zbr().get(t)}function Xx(){return Nc}function Cv(t){return Xx().filter(e=>e.group===t)}var n8,eT=re(()=>{"use strict";dv();n8=null});function i8(t){let e={type:t.type};if(t.description&&(e.description=t.description),t.enum&&(e.enum=t.enum),t.type==="array"&&t.items&&(e.items=i8(t.items)),t.type==="object"&&t.properties){let r={};for(let[n,i]of Object.entries(t.properties))r[n]=i8(i);e.properties=r,t.required?.length&&(e.required=t.required)}return e}function od(t,e){let r={};for(let[n,i]of Object.entries(t))r[n]=i8(i);return{type:"object",properties:r,...e.length>0?{required:e}:{}}}function ly(t){return{name:t.name,description:t.description,input_schema:od(t.params,t.required),...t.searchHint?{searchHint:t.searchHint}:{}}}var tT=re(()=>{"use strict"});function rst(t){if(typeof t!="string")return t.isDestructive??!1;let e=t;return e.startsWith("delete_")||e.startsWith("pay_")||e.startsWith("finalize_")||e.includes("refund")||e==="remove_org_user"}function s8(t){return{readOnlyHint:t.readOnly,destructiveHint:!t.readOnly&&rst(t),idempotentHint:t.readOnly,openWorldHint:t.openWorld??!1}}function nst(t){if(!t.trim())return{namespaces:Uh.map(i=>{let s=i.groups.flatMap(o=>Cv(o));return{name:i.name,description:i.description,toolCount:s.length,tools:s.map(o=>o.name)}}),hint:"Call describe_tools with specific tool names to get full schemas before executing."};let e=tst(t,5);if(e.length===0)return{matches:[],hint:`No tools match "${t}". Try broader terms or call search_tools with empty query to see all namespaces.`};let n=t.toLowerCase().split(/\s+/).filter(Boolean);return{matches:e.map(i=>{let o=i.groups.flatMap(a=>Cv(a)).map(a=>{let c=`${a.name} ${a.searchHint??""} ${a.description}`.toLowerCase(),u=n.filter(f=>c.includes(f)).length;return{tool:a,score:u}}).sort((a,c)=>c.score-a.score);return{namespace:i.name,description:i.description,tools:o.map(a=>({name:a.tool.name,description:a.tool.description.split(`
866
866
  `)[0],...a.tool.searchHint?{searchHint:a.tool.searchHint}:{}}))}}),hint:"Call describe_tools with the tool names you need, then execute_tool to run them."}}function ist(t){if(!Array.isArray(t)||!t.every(n=>typeof n=="string"))return{error:"Invalid `tools` parameter. Expected string[]."};if(t.length===0)return{error:"Provide at least one tool name. Use search_tools first to discover tool names."};let e=[],r=[];for(let n of t){let i=bv(n);if(!i){r.push(n);continue}e.push({...ly(i),readOnly:i.readOnly,isDestructive:i.isDestructive??!1,isConcurrencySafe:i.isConcurrencySafe??!1,destructiveHint:!i.readOnly&&rst(i),group:i.group})}return{tools:e,...r.length>0?{notFound:r,hint:`Tools not found: ${r.join(", ")}. Use search_tools to find correct names.`}:{}}}var Kbr,Xbr,e0r,rT,ad,o8=re(()=>{"use strict";r8();eT();tT();Kbr={name:"search_tools",description:"Search for available Jaz accounting tools by keyword. Returns matching tool namespaces with tool names and descriptions. Call with empty query to list all namespaces. ALWAYS call this first to discover what tools are available.",inputSchema:od({query:{type:"string",description:'Search keyword (e.g. "invoice", "bank recon", "depreciation"). Empty string lists all namespaces.'}},[])};Xbr={name:"describe_tools",description:"Get full JSON Schema (parameters, types, required fields) for specific tools. Call this after search_tools to get the exact input format before calling execute_tool.",inputSchema:od({tools:{type:"array",items:{type:"string"},description:'Tool names to describe (e.g. ["create_invoice", "search_contacts"])'}},["tools"])},e0r={name:"execute_tool",description:"Execute a Jaz accounting tool. Call describe_tools first to get the required parameters. Pass the tool name and its arguments.",inputSchema:od({tool:{type:"string",description:'Tool name (e.g. "create_invoice")'},arguments:{type:"object",description:"Tool arguments (see describe_tools for schema)"},org_id:{type:"string",description:"Organization ID (UUID). Required in multi-org mode (PAT or multiple API keys). Call list_organizations to get available IDs."}},["tool"])},rT={name:"list_organizations",description:"List organizations available to the current authentication. Returns org names and resource IDs for use as org_id in execute_tool calls.",inputSchema:od({},[])},ad=[Kbr,Xbr,e0r]});var oT=b(Dr=>{"use strict";Object.defineProperty(Dr,"__esModule",{value:!0});Dr.regexpCode=Dr.getEsmExportName=Dr.getProperty=Dr.safeStringify=Dr.stringify=Dr.strConcat=Dr.addCodeArg=Dr.str=Dr._=Dr.nil=Dr._Code=Dr.Name=Dr.IDENTIFIER=Dr._CodeOrName=void 0;var iT=class{};Dr._CodeOrName=iT;Dr.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;var fy=class extends iT{constructor(e){if(super(),!Dr.IDENTIFIER.test(e))throw new Error("CodeGen: name must be a valid identifier");this.str=e}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}};Dr.Name=fy;var Lc=class extends iT{constructor(e){super(),this._items=typeof e=="string"?[e]:e}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;let e=this._items[0];return e===""||e==='""'}get str(){var e;return(e=this._str)!==null&&e!==void 0?e:this._str=this._items.reduce((r,n)=>`${r}${n}`,"")}get names(){var e;return(e=this._names)!==null&&e!==void 0?e:this._names=this._items.reduce((r,n)=>(n instanceof fy&&(r[n.str]=(r[n.str]||0)+1),r),{})}};Dr._Code=Lc;Dr.nil=new Lc("");function cst(t,...e){let r=[t[0]],n=0;for(;n<e.length;)jle(r,e[n]),r.push(t[++n]);return new Lc(r)}Dr._=cst;var qle=new Lc("+");function ust(t,...e){let r=[sT(t[0])],n=0;for(;n<e.length;)r.push(qle),jle(r,e[n]),r.push(qle,sT(t[++n]));return a0r(r),new Lc(r)}Dr.str=ust;function jle(t,e){e instanceof Lc?t.push(...e._items):e instanceof fy?t.push(e):t.push(l0r(e))}Dr.addCodeArg=jle;function a0r(t){let e=1;for(;e<t.length-1;){if(t[e]===qle){let r=c0r(t[e-1],t[e+1]);if(r!==void 0){t.splice(e-1,3,r);continue}t[e++]="+"}e++}}function c0r(t,e){if(e==='""')return t;if(t==='""')return e;if(typeof t=="string")return e instanceof fy||t[t.length-1]!=='"'?void 0:typeof e!="string"?`${t.slice(0,-1)}${e}"`:e[0]==='"'?t.slice(0,-1)+e.slice(1):void 0;if(typeof e=="string"&&e[0]==='"'&&!(t instanceof fy))return`"${t}${e.slice(1)}`}function u0r(t,e){return e.emptyStr()?t:t.emptyStr()?e:ust`${t}${e}`}Dr.strConcat=u0r;function l0r(t){return typeof t=="number"||typeof t=="boolean"||t===null?t:sT(Array.isArray(t)?t.join(","):t)}function f0r(t){return new Lc(sT(t))}Dr.stringify=f0r;function sT(t){return JSON.stringify(t).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}Dr.safeStringify=sT;function d0r(t){return typeof t=="string"&&Dr.IDENTIFIER.test(t)?new Lc(`.${t}`):cst`[${t}]`}Dr.getProperty=d0r;function p0r(t){if(typeof t=="string"&&Dr.IDENTIFIER.test(t))return new Lc(`${t}`);throw new Error(`CodeGen: invalid export name: ${t}, use explicit $id name mapping`)}Dr.getEsmExportName=p0r;function h0r(t){return new Lc(t.toString())}Dr.regexpCode=h0r});var Hle=b(ia=>{"use strict";Object.defineProperty(ia,"__esModule",{value:!0});ia.ValueScope=ia.ValueScopeName=ia.Scope=ia.varKinds=ia.UsedValueState=void 0;var na=oT(),Yle=class extends Error{constructor(e){super(`CodeGen: "code" for ${e} not defined`),this.value=e.value}},u8;(function(t){t[t.Started=0]="Started",t[t.Completed=1]="Completed"})(u8||(ia.UsedValueState=u8={}));ia.varKinds={const:new na.Name("const"),let:new na.Name("let"),var:new na.Name("var")};var l8=class{constructor({prefixes:e,parent:r}={}){this._names={},this._prefixes=e,this._parent=r}toName(e){return e instanceof na.Name?e:this.name(e)}name(e){return new na.Name(this._newName(e))}_newName(e){let r=this._names[e]||this._nameGroup(e);return`${e}${r.index++}`}_nameGroup(e){var r,n;if(!((n=(r=this._parent)===null||r===void 0?void 0:r._prefixes)===null||n===void 0)&&n.has(e)||this._prefixes&&!this._prefixes.has(e))throw new Error(`CodeGen: prefix "${e}" is not allowed in this scope`);return this._names[e]={prefix:e,index:0}}};ia.Scope=l8;var f8=class extends na.Name{constructor(e,r){super(r),this.prefix=e}setValue(e,{property:r,itemIndex:n}){this.value=e,this.scopePath=(0,na._)`.${new na.Name(r)}[${n}]`}};ia.ValueScopeName=f8;var m0r=(0,na._)`\n`,zle=class extends l8{constructor(e){super(e),this._values={},this._scope=e.scope,this.opts={...e,_n:e.lines?m0r:na.nil}}get(){return this._scope}name(e){return new f8(e,this._newName(e))}value(e,r){var n;if(r.ref===void 0)throw new Error("CodeGen: ref must be passed in value");let i=this.toName(e),{prefix:s}=i,o=(n=r.key)!==null&&n!==void 0?n:r.ref,a=this._values[s];if(a){let f=a.get(o);if(f)return f}else a=this._values[s]=new Map;a.set(o,i);let c=this._scope[s]||(this._scope[s]=[]),u=c.length;return c[u]=r.ref,i.setValue(r,{property:s,itemIndex:u}),i}getValue(e,r){let n=this._values[e];if(n)return n.get(r)}scopeRefs(e,r=this._values){return this._reduceValues(r,n=>{if(n.scopePath===void 0)throw new Error(`CodeGen: name "${n}" has no value`);return(0,na._)`${e}${n.scopePath}`})}scopeCode(e=this._values,r,n){return this._reduceValues(e,i=>{if(i.value===void 0)throw new Error(`CodeGen: name "${i}" has no value`);return i.value.code},r,n)}_reduceValues(e,r,n={},i){let s=na.nil;for(let o in e){let a=e[o];if(!a)continue;let c=n[o]=n[o]||new Map;a.forEach(u=>{if(c.has(u))return;c.set(u,u8.Started);let f=r(u);if(f){let d=this.opts.es5?ia.varKinds.var:ia.varKinds.const;s=(0,na._)`${s}${d} ${u} = ${f};${this.opts._n}`}else if(f=i?.(u))s=(0,na._)`${s}${f}${this.opts._n}`;else throw new Yle(u);c.set(u,u8.Completed)})}return s}};ia.ValueScope=zle});var Pt=b(jt=>{"use strict";Object.defineProperty(jt,"__esModule",{value:!0});jt.or=jt.and=jt.not=jt.CodeGen=jt.operators=jt.varKinds=jt.ValueScopeName=jt.ValueScope=jt.Scope=jt.Name=jt.regexpCode=jt.stringify=jt.getProperty=jt.nil=jt.strConcat=jt.str=jt._=void 0;var ur=oT(),ku=Hle(),Yh=oT();Object.defineProperty(jt,"_",{enumerable:!0,get:function(){return Yh._}});Object.defineProperty(jt,"str",{enumerable:!0,get:function(){return Yh.str}});Object.defineProperty(jt,"strConcat",{enumerable:!0,get:function(){return Yh.strConcat}});Object.defineProperty(jt,"nil",{enumerable:!0,get:function(){return Yh.nil}});Object.defineProperty(jt,"getProperty",{enumerable:!0,get:function(){return Yh.getProperty}});Object.defineProperty(jt,"stringify",{enumerable:!0,get:function(){return Yh.stringify}});Object.defineProperty(jt,"regexpCode",{enumerable:!0,get:function(){return Yh.regexpCode}});Object.defineProperty(jt,"Name",{enumerable:!0,get:function(){return Yh.Name}});var m8=Hle();Object.defineProperty(jt,"Scope",{enumerable:!0,get:function(){return m8.Scope}});Object.defineProperty(jt,"ValueScope",{enumerable:!0,get:function(){return m8.ValueScope}});Object.defineProperty(jt,"ValueScopeName",{enumerable:!0,get:function(){return m8.ValueScopeName}});Object.defineProperty(jt,"varKinds",{enumerable:!0,get:function(){return m8.varKinds}});jt.operators={GT:new ur._Code(">"),GTE:new ur._Code(">="),LT:new ur._Code("<"),LTE:new ur._Code("<="),EQ:new ur._Code("==="),NEQ:new ur._Code("!=="),NOT:new ur._Code("!"),OR:new ur._Code("||"),AND:new ur._Code("&&"),ADD:new ur._Code("+")};var ud=class{optimizeNodes(){return this}optimizeNames(e,r){return this}},Gle=class extends ud{constructor(e,r,n){super(),this.varKind=e,this.name=r,this.rhs=n}render({es5:e,_n:r}){let n=e?ku.varKinds.var:this.varKind,i=this.rhs===void 0?"":` = ${this.rhs}`;return`${n} ${this.name}${i};`+r}optimizeNames(e,r){if(e[this.name.str])return this.rhs&&(this.rhs=wv(this.rhs,e,r)),this}get names(){return this.rhs instanceof ur._CodeOrName?this.rhs.names:{}}},d8=class extends ud{constructor(e,r,n){super(),this.lhs=e,this.rhs=r,this.sideEffects=n}render({_n:e}){return`${this.lhs} = ${this.rhs};`+e}optimizeNames(e,r){if(!(this.lhs instanceof ur.Name&&!e[this.lhs.str]&&!this.sideEffects))return this.rhs=wv(this.rhs,e,r),this}get names(){let e=this.lhs instanceof ur.Name?{}:{...this.lhs.names};return h8(e,this.rhs)}},Vle=class extends d8{constructor(e,r,n,i){super(e,n,i),this.op=r}render({_n:e}){return`${this.lhs} ${this.op}= ${this.rhs};`+e}},Jle=class extends ud{constructor(e){super(),this.label=e,this.names={}}render({_n:e}){return`${this.label}:`+e}},Wle=class extends ud{constructor(e){super(),this.label=e,this.names={}}render({_n:e}){return`break${this.label?` ${this.label}`:""};`+e}},Zle=class extends ud{constructor(e){super(),this.error=e}render({_n:e}){return`throw ${this.error};`+e}get names(){return this.error.names}},Kle=class extends ud{constructor(e){super(),this.code=e}render({_n:e}){return`${this.code};`+e}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(e,r){return this.code=wv(this.code,e,r),this}get names(){return this.code instanceof ur._CodeOrName?this.code.names:{}}},aT=class extends ud{constructor(e=[]){super(),this.nodes=e}render(e){return this.nodes.reduce((r,n)=>r+n.render(e),"")}optimizeNodes(){let{nodes:e}=this,r=e.length;for(;r--;){let n=e[r].optimizeNodes();Array.isArray(n)?e.splice(r,1,...n):n?e[r]=n:e.splice(r,1)}return e.length>0?this:void 0}optimizeNames(e,r){let{nodes:n}=this,i=n.length;for(;i--;){let s=n[i];s.optimizeNames(e,r)||(A0r(e,s.names),n.splice(i,1))}return n.length>0?this:void 0}get names(){return this.nodes.reduce((e,r)=>hy(e,r.names),{})}},ld=class extends aT{render(e){return"{"+e._n+super.render(e)+"}"+e._n}},Xle=class extends aT{},Iv=class extends ld{};Iv.kind="else";var dy=class t extends ld{constructor(e,r){super(r),this.condition=e}render(e){let r=`if(${this.condition})`+super.render(e);return this.else&&(r+="else "+this.else.render(e)),r}optimizeNodes(){super.optimizeNodes();let e=this.condition;if(e===!0)return this.nodes;let r=this.else;if(r){let n=r.optimizeNodes();r=this.else=Array.isArray(n)?new Iv(n):n}if(r)return e===!1?r instanceof t?r:r.nodes:this.nodes.length?this:new t(lst(e),r instanceof t?[r]:r.nodes);if(!(e===!1||!this.nodes.length))return this}optimizeNames(e,r){var n;if(this.else=(n=this.else)===null||n===void 0?void 0:n.optimizeNames(e,r),!!(super.optimizeNames(e,r)||this.else))return this.condition=wv(this.condition,e,r),this}get names(){let e=super.names;return h8(e,this.condition),this.else&&hy(e,this.else.names),e}};dy.kind="if";var py=class extends ld{};py.kind="for";var efe=class extends py{constructor(e){super(),this.iteration=e}render(e){return`for(${this.iteration})`+super.render(e)}optimizeNames(e,r){if(super.optimizeNames(e,r))return this.iteration=wv(this.iteration,e,r),this}get names(){return hy(super.names,this.iteration.names)}},tfe=class extends py{constructor(e,r,n,i){super(),this.varKind=e,this.name=r,this.from=n,this.to=i}render(e){let r=e.es5?ku.varKinds.var:this.varKind,{name:n,from:i,to:s}=this;return`for(${r} ${n}=${i}; ${n}<${s}; ${n}++)`+super.render(e)}get names(){let e=h8(super.names,this.from);return h8(e,this.to)}},p8=class extends py{constructor(e,r,n,i){super(),this.loop=e,this.varKind=r,this.name=n,this.iterable=i}render(e){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(e)}optimizeNames(e,r){if(super.optimizeNames(e,r))return this.iterable=wv(this.iterable,e,r),this}get names(){return hy(super.names,this.iterable.names)}},cT=class extends ld{constructor(e,r,n){super(),this.name=e,this.args=r,this.async=n}render(e){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(e)}};cT.kind="func";var uT=class extends aT{render(e){return"return "+super.render(e)}};uT.kind="return";var rfe=class extends ld{render(e){let r="try"+super.render(e);return this.catch&&(r+=this.catch.render(e)),this.finally&&(r+=this.finally.render(e)),r}optimizeNodes(){var e,r;return super.optimizeNodes(),(e=this.catch)===null||e===void 0||e.optimizeNodes(),(r=this.finally)===null||r===void 0||r.optimizeNodes(),this}optimizeNames(e,r){var n,i;return super.optimizeNames(e,r),(n=this.catch)===null||n===void 0||n.optimizeNames(e,r),(i=this.finally)===null||i===void 0||i.optimizeNames(e,r),this}get names(){let e=super.names;return this.catch&&hy(e,this.catch.names),this.finally&&hy(e,this.finally.names),e}},lT=class extends ld{constructor(e){super(),this.error=e}render(e){return`catch(${this.error})`+super.render(e)}};lT.kind="catch";var fT=class extends ld{render(e){return"finally"+super.render(e)}};fT.kind="finally";var nfe=class{constructor(e,r={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...r,_n:r.lines?`
867
867
  `:""},this._extScope=e,this._scope=new ku.Scope({parent:e}),this._nodes=[new Xle]}toString(){return this._root.render(this.opts)}name(e){return this._scope.name(e)}scopeName(e){return this._extScope.name(e)}scopeValue(e,r){let n=this._extScope.value(e,r);return(this._values[n.prefix]||(this._values[n.prefix]=new Set)).add(n),n}getScopeValue(e,r){return this._extScope.getValue(e,r)}scopeRefs(e){return this._extScope.scopeRefs(e,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(e,r,n,i){let s=this._scope.toName(r);return n!==void 0&&i&&(this._constants[s.str]=n),this._leafNode(new Gle(e,s,n)),s}const(e,r,n){return this._def(ku.varKinds.const,e,r,n)}let(e,r,n){return this._def(ku.varKinds.let,e,r,n)}var(e,r,n){return this._def(ku.varKinds.var,e,r,n)}assign(e,r,n){return this._leafNode(new d8(e,r,n))}add(e,r){return this._leafNode(new Vle(e,jt.operators.ADD,r))}code(e){return typeof e=="function"?e():e!==ur.nil&&this._leafNode(new Kle(e)),this}object(...e){let r=["{"];for(let[n,i]of e)r.length>1&&r.push(","),r.push(n),(n!==i||this.opts.es5)&&(r.push(":"),(0,ur.addCodeArg)(r,i));return r.push("}"),new ur._Code(r)}if(e,r,n){if(this._blockNode(new dy(e)),r&&n)this.code(r).else().code(n).endIf();else if(r)this.code(r).endIf();else if(n)throw new Error('CodeGen: "else" body without "then" body');return this}elseIf(e){return this._elseNode(new dy(e))}else(){return this._elseNode(new Iv)}endIf(){return this._endBlockNode(dy,Iv)}_for(e,r){return this._blockNode(e),r&&this.code(r).endFor(),this}for(e,r){return this._for(new efe(e),r)}forRange(e,r,n,i,s=this.opts.es5?ku.varKinds.var:ku.varKinds.let){let o=this._scope.toName(e);return this._for(new tfe(s,o,r,n),()=>i(o))}forOf(e,r,n,i=ku.varKinds.const){let s=this._scope.toName(e);if(this.opts.es5){let o=r instanceof ur.Name?r:this.var("_arr",r);return this.forRange("_i",0,(0,ur._)`${o}.length`,a=>{this.var(s,(0,ur._)`${o}[${a}]`),n(s)})}return this._for(new p8("of",i,s,r),()=>n(s))}forIn(e,r,n,i=this.opts.es5?ku.varKinds.var:ku.varKinds.const){if(this.opts.ownProperties)return this.forOf(e,(0,ur._)`Object.keys(${r})`,n);let s=this._scope.toName(e);return this._for(new p8("in",i,s,r),()=>n(s))}endFor(){return this._endBlockNode(py)}label(e){return this._leafNode(new Jle(e))}break(e){return this._leafNode(new Wle(e))}return(e){let r=new uT;if(this._blockNode(r),this.code(e),r.nodes.length!==1)throw new Error('CodeGen: "return" should have one node');return this._endBlockNode(uT)}try(e,r,n){if(!r&&!n)throw new Error('CodeGen: "try" without "catch" and "finally"');let i=new rfe;if(this._blockNode(i),this.code(e),r){let s=this.name("e");this._currNode=i.catch=new lT(s),r(s)}return n&&(this._currNode=i.finally=new fT,this.code(n)),this._endBlockNode(lT,fT)}throw(e){return this._leafNode(new Zle(e))}block(e,r){return this._blockStarts.push(this._nodes.length),e&&this.code(e).endBlock(r),this}endBlock(e){let r=this._blockStarts.pop();if(r===void 0)throw new Error("CodeGen: not in self-balancing block");let n=this._nodes.length-r;if(n<0||e!==void 0&&n!==e)throw new Error(`CodeGen: wrong number of nodes: ${n} vs ${e} expected`);return this._nodes.length=r,this}func(e,r=ur.nil,n,i){return this._blockNode(new cT(e,r,n)),i&&this.code(i).endFunc(),this}endFunc(){return this._endBlockNode(cT)}optimize(e=1){for(;e-- >0;)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(e){return this._currNode.nodes.push(e),this}_blockNode(e){this._currNode.nodes.push(e),this._nodes.push(e)}_endBlockNode(e,r){let n=this._currNode;if(n instanceof e||r&&n instanceof r)return this._nodes.pop(),this;throw new Error(`CodeGen: not in block "${r?`${e.kind}/${r.kind}`:e.kind}"`)}_elseNode(e){let r=this._currNode;if(!(r instanceof dy))throw new Error('CodeGen: "else" without "if"');return this._currNode=r.else=e,this}get _root(){return this._nodes[0]}get _currNode(){let e=this._nodes;return e[e.length-1]}set _currNode(e){let r=this._nodes;r[r.length-1]=e}};jt.CodeGen=nfe;function hy(t,e){for(let r in e)t[r]=(t[r]||0)+(e[r]||0);return t}function h8(t,e){return e instanceof ur._CodeOrName?hy(t,e.names):t}function wv(t,e,r){if(t instanceof ur.Name)return n(t);if(!i(t))return t;return new ur._Code(t._items.reduce((s,o)=>(o instanceof ur.Name&&(o=n(o)),o instanceof ur._Code?s.push(...o._items):s.push(o),s),[]));function n(s){let o=r[s.str];return o===void 0||e[s.str]!==1?s:(delete e[s.str],o)}function i(s){return s instanceof ur._Code&&s._items.some(o=>o instanceof ur.Name&&e[o.str]===1&&r[o.str]!==void 0)}}function A0r(t,e){for(let r in e)t[r]=(t[r]||0)-(e[r]||0)}function lst(t){return typeof t=="boolean"||typeof t=="number"||t===null?!t:(0,ur._)`!${ife(t)}`}jt.not=lst;var g0r=fst(jt.operators.AND);function y0r(...t){return t.reduce(g0r)}jt.and=y0r;var E0r=fst(jt.operators.OR);function b0r(...t){return t.reduce(E0r)}jt.or=b0r;function fst(t){return(e,r)=>e===ur.nil?r:r===ur.nil?e:(0,ur._)`${ife(e)} ${t} ${ife(r)}`}function ife(t){return t instanceof ur.Name?t:(0,ur._)`(${t})`}});var mr=b(Xt=>{"use strict";Object.defineProperty(Xt,"__esModule",{value:!0});Xt.checkStrictMode=Xt.getErrorPath=Xt.Type=Xt.useFunc=Xt.setEvaluated=Xt.evaluatedPropsToName=Xt.mergeEvaluated=Xt.eachItem=Xt.unescapeJsonPointer=Xt.escapeJsonPointer=Xt.escapeFragment=Xt.unescapeFragment=Xt.schemaRefOrVal=Xt.schemaHasRulesButRef=Xt.schemaHasRules=Xt.checkUnknownRules=Xt.alwaysValidSchema=Xt.toHash=void 0;var un=Pt(),C0r=oT();function v0r(t){let e={};for(let r of t)e[r]=!0;return e}Xt.toHash=v0r;function I0r(t,e){return typeof e=="boolean"?e:Object.keys(e).length===0?!0:(hst(t,e),!mst(e,t.self.RULES.all))}Xt.alwaysValidSchema=I0r;function hst(t,e=t.schema){let{opts:r,self:n}=t;if(!r.strictSchema||typeof e=="boolean")return;let i=n.RULES.keywords;for(let s in e)i[s]||yst(t,`unknown keyword: "${s}"`)}Xt.checkUnknownRules=hst;function mst(t,e){if(typeof t=="boolean")return!t;for(let r in t)if(e[r])return!0;return!1}Xt.schemaHasRules=mst;function w0r(t,e){if(typeof t=="boolean")return!t;for(let r in t)if(r!=="$ref"&&e.all[r])return!0;return!1}Xt.schemaHasRulesButRef=w0r;function _0r({topSchemaRef:t,schemaPath:e},r,n,i){if(!i){if(typeof r=="number"||typeof r=="boolean")return r;if(typeof r=="string")return(0,un._)`${r}`}return(0,un._)`${t}${e}${(0,un.getProperty)(n)}`}Xt.schemaRefOrVal=_0r;function D0r(t){return Ast(decodeURIComponent(t))}Xt.unescapeFragment=D0r;function S0r(t){return encodeURIComponent(ofe(t))}Xt.escapeFragment=S0r;function ofe(t){return typeof t=="number"?`${t}`:t.replace(/~/g,"~0").replace(/\//g,"~1")}Xt.escapeJsonPointer=ofe;function Ast(t){return t.replace(/~1/g,"/").replace(/~0/g,"~")}Xt.unescapeJsonPointer=Ast;function B0r(t,e){if(Array.isArray(t))for(let r of t)e(r);else e(t)}Xt.eachItem=B0r;function dst({mergeNames:t,mergeToName:e,mergeValues:r,resultToName:n}){return(i,s,o,a)=>{let c=o===void 0?s:o instanceof un.Name?(s instanceof un.Name?t(i,s,o):e(i,s,o),o):s instanceof un.Name?(e(i,o,s),s):r(s,o);return a===un.Name&&!(c instanceof un.Name)?n(i,c):c}}Xt.mergeEvaluated={props:dst({mergeNames:(t,e,r)=>t.if((0,un._)`${r} !== true && ${e} !== undefined`,()=>{t.if((0,un._)`${e} === true`,()=>t.assign(r,!0),()=>t.assign(r,(0,un._)`${r} || {}`).code((0,un._)`Object.assign(${r}, ${e})`))}),mergeToName:(t,e,r)=>t.if((0,un._)`${r} !== true`,()=>{e===!0?t.assign(r,!0):(t.assign(r,(0,un._)`${r} || {}`),afe(t,r,e))}),mergeValues:(t,e)=>t===!0?!0:{...t,...e},resultToName:gst}),items:dst({mergeNames:(t,e,r)=>t.if((0,un._)`${r} !== true && ${e} !== undefined`,()=>t.assign(r,(0,un._)`${e} === true ? true : ${r} > ${e} ? ${r} : ${e}`)),mergeToName:(t,e,r)=>t.if((0,un._)`${r} !== true`,()=>t.assign(r,e===!0?!0:(0,un._)`${r} > ${e} ? ${r} : ${e}`)),mergeValues:(t,e)=>t===!0?!0:Math.max(t,e),resultToName:(t,e)=>t.var("items",e)})};function gst(t,e){if(e===!0)return t.var("props",!0);let r=t.var("props",(0,un._)`{}`);return e!==void 0&&afe(t,r,e),r}Xt.evaluatedPropsToName=gst;function afe(t,e,r){Object.keys(r).forEach(n=>t.assign((0,un._)`${e}${(0,un.getProperty)(n)}`,!0))}Xt.setEvaluated=afe;var pst={};function R0r(t,e){return t.scopeValue("func",{ref:e,code:pst[e.code]||(pst[e.code]=new C0r._Code(e.code))})}Xt.useFunc=R0r;var sfe;(function(t){t[t.Num=0]="Num",t[t.Str=1]="Str"})(sfe||(Xt.Type=sfe={}));function x0r(t,e,r){if(t instanceof un.Name){let n=e===sfe.Num;return r?n?(0,un._)`"[" + ${t} + "]"`:(0,un._)`"['" + ${t} + "']"`:n?(0,un._)`"/" + ${t}`:(0,un._)`"/" + ${t}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return r?(0,un.getProperty)(t).toString():"/"+ofe(t)}Xt.getErrorPath=x0r;function yst(t,e,r=t.opts.strictSchema){if(r){if(e=`strict mode: ${e}`,r===!0)throw new Error(e);t.self.logger.warn(e)}}Xt.checkStrictMode=yst});var fd=b(cfe=>{"use strict";Object.defineProperty(cfe,"__esModule",{value:!0});var eo=Pt(),T0r={data:new eo.Name("data"),valCxt:new eo.Name("valCxt"),instancePath:new eo.Name("instancePath"),parentData:new eo.Name("parentData"),parentDataProperty:new eo.Name("parentDataProperty"),rootData:new eo.Name("rootData"),dynamicAnchors:new eo.Name("dynamicAnchors"),vErrors:new eo.Name("vErrors"),errors:new eo.Name("errors"),this:new eo.Name("this"),self:new eo.Name("self"),scope:new eo.Name("scope"),json:new eo.Name("json"),jsonPos:new eo.Name("jsonPos"),jsonLen:new eo.Name("jsonLen"),jsonPart:new eo.Name("jsonPart")};cfe.default=T0r});var dT=b(to=>{"use strict";Object.defineProperty(to,"__esModule",{value:!0});to.extendErrors=to.resetErrorsCount=to.reportExtraError=to.reportError=to.keyword$DataError=to.keywordError=void 0;var Ar=Pt(),A8=mr(),Ro=fd();to.keywordError={message:({keyword:t})=>(0,Ar.str)`must pass "${t}" keyword validation`};to.keyword$DataError={message:({keyword:t,schemaType:e})=>e?(0,Ar.str)`"${t}" keyword must be ${e} ($data)`:(0,Ar.str)`"${t}" keyword is invalid ($data)`};function k0r(t,e=to.keywordError,r,n){let{it:i}=t,{gen:s,compositeRule:o,allErrors:a}=i,c=Cst(t,e,r);n??(o||a)?Est(s,c):bst(i,(0,Ar._)`[${c}]`)}to.reportError=k0r;function N0r(t,e=to.keywordError,r){let{it:n}=t,{gen:i,compositeRule:s,allErrors:o}=n,a=Cst(t,e,r);Est(i,a),s||o||bst(n,Ro.default.vErrors)}to.reportExtraError=N0r;function F0r(t,e){t.assign(Ro.default.errors,e),t.if((0,Ar._)`${Ro.default.vErrors} !== null`,()=>t.if(e,()=>t.assign((0,Ar._)`${Ro.default.vErrors}.length`,e),()=>t.assign(Ro.default.vErrors,null)))}to.resetErrorsCount=F0r;function O0r({gen:t,keyword:e,schemaValue:r,data:n,errsCount:i,it:s}){if(i===void 0)throw new Error("ajv implementation error");let o=t.name("err");t.forRange("i",i,Ro.default.errors,a=>{t.const(o,(0,Ar._)`${Ro.default.vErrors}[${a}]`),t.if((0,Ar._)`${o}.instancePath === undefined`,()=>t.assign((0,Ar._)`${o}.instancePath`,(0,Ar.strConcat)(Ro.default.instancePath,s.errorPath))),t.assign((0,Ar._)`${o}.schemaPath`,(0,Ar.str)`${s.errSchemaPath}/${e}`),s.opts.verbose&&(t.assign((0,Ar._)`${o}.schema`,r),t.assign((0,Ar._)`${o}.data`,n))})}to.extendErrors=O0r;function Est(t,e){let r=t.const("err",e);t.if((0,Ar._)`${Ro.default.vErrors} === null`,()=>t.assign(Ro.default.vErrors,(0,Ar._)`[${r}]`),(0,Ar._)`${Ro.default.vErrors}.push(${r})`),t.code((0,Ar._)`${Ro.default.errors}++`)}function bst(t,e){let{gen:r,validateName:n,schemaEnv:i}=t;i.$async?r.throw((0,Ar._)`new ${t.ValidationError}(${e})`):(r.assign((0,Ar._)`${n}.errors`,e),r.return(!1))}var my={keyword:new Ar.Name("keyword"),schemaPath:new Ar.Name("schemaPath"),params:new Ar.Name("params"),propertyName:new Ar.Name("propertyName"),message:new Ar.Name("message"),schema:new Ar.Name("schema"),parentSchema:new Ar.Name("parentSchema")};function Cst(t,e,r){let{createErrors:n}=t.it;return n===!1?(0,Ar._)`{}`:Q0r(t,e,r)}function Q0r(t,e,r={}){let{gen:n,it:i}=t,s=[L0r(i,r),M0r(t,r)];return P0r(t,e,s),n.object(...s)}function L0r({errorPath:t},{instancePath:e}){let r=e?(0,Ar.str)`${t}${(0,A8.getErrorPath)(e,A8.Type.Str)}`:t;return[Ro.default.instancePath,(0,Ar.strConcat)(Ro.default.instancePath,r)]}function M0r({keyword:t,it:{errSchemaPath:e}},{schemaPath:r,parentSchema:n}){let i=n?e:(0,Ar.str)`${e}/${t}`;return r&&(i=(0,Ar.str)`${i}${(0,A8.getErrorPath)(r,A8.Type.Str)}`),[my.schemaPath,i]}function P0r(t,{params:e,message:r},n){let{keyword:i,data:s,schemaValue:o,it:a}=t,{opts:c,propertyName:u,topSchemaRef:f,schemaPath:d}=a;n.push([my.keyword,i],[my.params,typeof e=="function"?e(t):e||(0,Ar._)`{}`]),c.messages&&n.push([my.message,typeof r=="function"?r(t):r]),c.verbose&&n.push([my.schema,o],[my.parentSchema,(0,Ar._)`${f}${d}`],[Ro.default.data,s]),u&&n.push([my.propertyName,u])}});var Ist=b(_v=>{"use strict";Object.defineProperty(_v,"__esModule",{value:!0});_v.boolOrEmptySchema=_v.topBoolOrEmptySchema=void 0;var $0r=dT(),U0r=Pt(),q0r=fd(),j0r={message:"boolean schema is false"};function Y0r(t){let{gen:e,schema:r,validateName:n}=t;r===!1?vst(t,!1):typeof r=="object"&&r.$async===!0?e.return(q0r.default.data):(e.assign((0,U0r._)`${n}.errors`,null),e.return(!0))}_v.topBoolOrEmptySchema=Y0r;function z0r(t,e){let{gen:r,schema:n}=t;n===!1?(r.var(e,!1),vst(t)):r.var(e,!0)}_v.boolOrEmptySchema=z0r;function vst(t,e){let{gen:r,data:n}=t,i={gen:r,keyword:"false schema",data:n,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:t};(0,$0r.reportError)(i,j0r,void 0,e)}});var ufe=b(Dv=>{"use strict";Object.defineProperty(Dv,"__esModule",{value:!0});Dv.getRules=Dv.isJSONType=void 0;var H0r=["string","number","integer","boolean","null","object","array"],G0r=new Set(H0r);function V0r(t){return typeof t=="string"&&G0r.has(t)}Dv.isJSONType=V0r;function J0r(){let t={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...t,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},t.number,t.string,t.array,t.object],post:{rules:[]},all:{},keywords:{}}}Dv.getRules=J0r});var lfe=b(zh=>{"use strict";Object.defineProperty(zh,"__esModule",{value:!0});zh.shouldUseRule=zh.shouldUseGroup=zh.schemaHasRulesForType=void 0;function W0r({schema:t,self:e},r){let n=e.RULES.types[r];return n&&n!==!0&&wst(t,n)}zh.schemaHasRulesForType=W0r;function wst(t,e){return e.rules.some(r=>_st(t,r))}zh.shouldUseGroup=wst;function _st(t,e){var r;return t[e.keyword]!==void 0||((r=e.definition.implements)===null||r===void 0?void 0:r.some(n=>t[n]!==void 0))}zh.shouldUseRule=_st});var pT=b(ro=>{"use strict";Object.defineProperty(ro,"__esModule",{value:!0});ro.reportTypeError=ro.checkDataTypes=ro.checkDataType=ro.coerceAndCheckDataType=ro.getJSONTypes=ro.getSchemaTypes=ro.DataType=void 0;var Z0r=ufe(),K0r=lfe(),X0r=dT(),Lt=Pt(),Dst=mr(),Sv;(function(t){t[t.Correct=0]="Correct",t[t.Wrong=1]="Wrong"})(Sv||(ro.DataType=Sv={}));function eCr(t){let e=Sst(t.type);if(e.includes("null")){if(t.nullable===!1)throw new Error("type: null contradicts nullable: false")}else{if(!e.length&&t.nullable!==void 0)throw new Error('"nullable" cannot be used without "type"');t.nullable===!0&&e.push("null")}return e}ro.getSchemaTypes=eCr;function Sst(t){let e=Array.isArray(t)?t:t?[t]:[];if(e.every(Z0r.isJSONType))return e;throw new Error("type must be JSONType or JSONType[]: "+e.join(","))}ro.getJSONTypes=Sst;function tCr(t,e){let{gen:r,data:n,opts:i}=t,s=rCr(e,i.coerceTypes),o=e.length>0&&!(s.length===0&&e.length===1&&(0,K0r.schemaHasRulesForType)(t,e[0]));if(o){let a=dfe(e,n,i.strictNumbers,Sv.Wrong);r.if(a,()=>{s.length?nCr(t,e,s):pfe(t)})}return o}ro.coerceAndCheckDataType=tCr;var Bst=new Set(["string","number","integer","boolean","null"]);function rCr(t,e){return e?t.filter(r=>Bst.has(r)||e==="array"&&r==="array"):[]}function nCr(t,e,r){let{gen:n,data:i,opts:s}=t,o=n.let("dataType",(0,Lt._)`typeof ${i}`),a=n.let("coerced",(0,Lt._)`undefined`);s.coerceTypes==="array"&&n.if((0,Lt._)`${o} == 'object' && Array.isArray(${i}) && ${i}.length == 1`,()=>n.assign(i,(0,Lt._)`${i}[0]`).assign(o,(0,Lt._)`typeof ${i}`).if(dfe(e,i,s.strictNumbers),()=>n.assign(a,i))),n.if((0,Lt._)`${a} !== undefined`);for(let u of r)(Bst.has(u)||u==="array"&&s.coerceTypes==="array")&&c(u);n.else(),pfe(t),n.endIf(),n.if((0,Lt._)`${a} !== undefined`,()=>{n.assign(i,a),iCr(t,a)});function c(u){switch(u){case"string":n.elseIf((0,Lt._)`${o} == "number" || ${o} == "boolean"`).assign(a,(0,Lt._)`"" + ${i}`).elseIf((0,Lt._)`${i} === null`).assign(a,(0,Lt._)`""`);return;case"number":n.elseIf((0,Lt._)`${o} == "boolean" || ${i} === null
868
868
  || (${o} == "string" && ${i} && ${i} == +${i})`).assign(a,(0,Lt._)`+${i}`);return;case"integer":n.elseIf((0,Lt._)`${o} === "boolean" || ${i} === null
@@ -1158,7 +1158,7 @@ Strings are replaced with values relative to the transaction date.`);e.command("
1158
1158
  })));`),p.write(`newResult[${ay(C)}] = ${E}.value`)}p.write("payload.value = newResult;"),p.write("return payload;");let y=p.compile();return(C,E)=>y(d,C,E)},i,s=pv,o=!wz.jitless,c=o&&Lue.value,u=e.catchall,f;t._zod.parse=(d,p)=>{f??(f=r.value);let h=d.value;if(!s(h))return d.issues.push({expected:"object",code:"invalid_type",input:h,inst:t}),d;let m=[];if(o&&c&&p?.async===!1&&p.jitless!==!0)i||(i=n(e.shape)),d=i(d,p);else{d.value={};let E=f.shape;for(let v of f.keys){let I=E[v],T=I._zod.run({value:h[v],issues:[]},p),S=I._zod.optin==="optional"&&I._zod.optout==="optional";T instanceof Promise?m.push(T.then(F=>S?Frt(F,d,v,h):Tz(F,d,v))):S?Frt(T,d,v,h):Tz(T,d,v)}}if(!u)return m.length?Promise.all(m).then(()=>d):d;let A=[],g=f.keySet,y=u._zod,C=y.def.type;for(let E of Object.keys(h)){if(g.has(E))continue;if(C==="never"){A.push(E);continue}let v=y.run({value:h[E],issues:[]},p);v instanceof Promise?m.push(v.then(I=>Tz(I,d,E))):Tz(v,d,E)}return A.length&&d.issues.push({code:"unrecognized_keys",keys:A,input:h,inst:t}),m.length?Promise.all(m).then(()=>d):d}});function Ort(t,e,r,n){for(let i of t)if(i.issues.length===0)return e.value=i.value,e;return e.issues.push({code:"invalid_union",input:e.value,inst:r,errors:t.map(i=>i.issues.map(s=>Tu(s,n,Fc())))}),e}var Kue=ge("$ZodUnion",(t,e)=>{yn.init(t,e),gn(t._zod,"optin",()=>e.options.some(r=>r._zod.optin==="optional")?"optional":void 0),gn(t._zod,"optout",()=>e.options.some(r=>r._zod.optout==="optional")?"optional":void 0),gn(t._zod,"values",()=>{if(e.options.every(r=>r._zod.values))return new Set(e.options.flatMap(r=>Array.from(r._zod.values)))}),gn(t._zod,"pattern",()=>{if(e.options.every(r=>r._zod.pattern)){let r=e.options.map(n=>n._zod.pattern);return new RegExp(`^(${r.map(n=>kx(n.source)).join("|")})$`)}}),t._zod.parse=(r,n)=>{let i=!1,s=[];for(let o of e.options){let a=o._zod.run({value:r.value,issues:[]},n);if(a instanceof Promise)s.push(a),i=!0;else{if(a.issues.length===0)return a;s.push(a)}}return i?Promise.all(s).then(o=>Ort(o,r,t,n)):Ort(s,r,t,n)}}),Ent=ge("$ZodDiscriminatedUnion",(t,e)=>{Kue.init(t,e);let r=t._zod.parse;gn(t._zod,"propValues",()=>{let i={};for(let s of e.options){let o=s._zod.propValues;if(!o||Object.keys(o).length===0)throw new Error(`Invalid discriminated union option at index "${e.options.indexOf(s)}"`);for(let[a,c]of Object.entries(o)){i[a]||(i[a]=new Set);for(let u of c)i[a].add(u)}}return i});let n=xx(()=>{let i=e.options,s=new Map;for(let o of i){let a=o._zod.propValues[e.discriminator];if(!a||a.size===0)throw new Error(`Invalid discriminated union option at index "${e.options.indexOf(o)}"`);for(let c of a){if(s.has(c))throw new Error(`Duplicate discriminator value "${String(c)}"`);s.set(c,o)}}return s});t._zod.parse=(i,s)=>{let o=i.value;if(!pv(o))return i.issues.push({code:"invalid_type",expected:"object",input:o,inst:t}),i;let a=n.value.get(o?.[e.discriminator]);return a?a._zod.run(i,s):e.unionFallback?r(i,s):(i.issues.push({code:"invalid_union",errors:[],note:"No matching discriminator",input:o,path:[e.discriminator],inst:t}),i)}}),bnt=ge("$ZodIntersection",(t,e)=>{yn.init(t,e),t._zod.parse=(r,n)=>{let i=r.value,s=e.left._zod.run({value:i,issues:[]},n),o=e.right._zod.run({value:i,issues:[]},n);return s instanceof Promise||o instanceof Promise?Promise.all([s,o]).then(([c,u])=>Qrt(r,c,u)):Qrt(r,s,o)}});function Wue(t,e){if(t===e)return{valid:!0,data:t};if(t instanceof Date&&e instanceof Date&&+t==+e)return{valid:!0,data:t};if(hv(t)&&hv(e)){let r=Object.keys(e),n=Object.keys(t).filter(s=>r.indexOf(s)!==-1),i={...t,...e};for(let s of n){let o=Wue(t[s],e[s]);if(!o.valid)return{valid:!1,mergeErrorPath:[s,...o.mergeErrorPath]};i[s]=o.data}return{valid:!0,data:i}}if(Array.isArray(t)&&Array.isArray(e)){if(t.length!==e.length)return{valid:!1,mergeErrorPath:[]};let r=[];for(let n=0;n<t.length;n++){let i=t[n],s=e[n],o=Wue(i,s);if(!o.valid)return{valid:!1,mergeErrorPath:[n,...o.mergeErrorPath]};r.push(o.data)}return{valid:!0,data:r}}return{valid:!1,mergeErrorPath:[]}}function Qrt(t,e,r){if(e.issues.length&&t.issues.push(...e.issues),r.issues.length&&t.issues.push(...r.issues),cy(t))return t;let n=Wue(e.value,r.value);if(!n.valid)throw new Error(`Unmergable intersection. Error path: ${JSON.stringify(n.mergeErrorPath)}`);return t.value=n.data,t}var Cnt=ge("$ZodRecord",(t,e)=>{yn.init(t,e),t._zod.parse=(r,n)=>{let i=r.value;if(!hv(i))return r.issues.push({expected:"record",code:"invalid_type",input:i,inst:t}),r;let s=[];if(e.keyType._zod.values){let o=e.keyType._zod.values;r.value={};for(let c of o)if(typeof c=="string"||typeof c=="number"||typeof c=="symbol"){let u=e.valueType._zod.run({value:i[c],issues:[]},n);u instanceof Promise?s.push(u.then(f=>{f.issues.length&&r.issues.push(...Pl(c,f.issues)),r.value[c]=f.value})):(u.issues.length&&r.issues.push(...Pl(c,u.issues)),r.value[c]=u.value)}let a;for(let c in i)o.has(c)||(a=a??[],a.push(c));a&&a.length>0&&r.issues.push({code:"unrecognized_keys",input:i,inst:t,keys:a})}else{r.value={};for(let o of Reflect.ownKeys(i)){if(o==="__proto__")continue;let a=e.keyType._zod.run({value:o,issues:[]},n);if(a instanceof Promise)throw new Error("Async schemas not supported in object keys currently");if(a.issues.length){r.issues.push({origin:"record",code:"invalid_key",issues:a.issues.map(u=>Tu(u,n,Fc())),input:o,path:[o],inst:t}),r.value[a.value]=a.value;continue}let c=e.valueType._zod.run({value:i[o],issues:[]},n);c instanceof Promise?s.push(c.then(u=>{u.issues.length&&r.issues.push(...Pl(o,u.issues)),r.value[a.value]=u.value})):(c.issues.length&&r.issues.push(...Pl(o,c.issues)),r.value[a.value]=c.value)}}return s.length?Promise.all(s).then(()=>r):r}});var vnt=ge("$ZodEnum",(t,e)=>{yn.init(t,e);let r=Nue(e.entries);t._zod.values=new Set(r),t._zod.pattern=new RegExp(`^(${r.filter(n=>Mue.has(typeof n)).map(n=>typeof n=="string"?Ph(n):n.toString()).join("|")})$`),t._zod.parse=(n,i)=>{let s=n.value;return t._zod.values.has(s)||n.issues.push({code:"invalid_value",values:r,input:s,inst:t}),n}}),Int=ge("$ZodLiteral",(t,e)=>{yn.init(t,e),t._zod.values=new Set(e.values),t._zod.pattern=new RegExp(`^(${e.values.map(r=>typeof r=="string"?Ph(r):r?r.toString():String(r)).join("|")})$`),t._zod.parse=(r,n)=>{let i=r.value;return t._zod.values.has(i)||r.issues.push({code:"invalid_value",values:e.values,input:i,inst:t}),r}});var wnt=ge("$ZodTransform",(t,e)=>{yn.init(t,e),t._zod.parse=(r,n)=>{let i=e.transform(r.value,r);if(n.async)return(i instanceof Promise?i:Promise.resolve(i)).then(o=>(r.value=o,r));if(i instanceof Promise)throw new sd;return r.value=i,r}}),_nt=ge("$ZodOptional",(t,e)=>{yn.init(t,e),t._zod.optin="optional",t._zod.optout="optional",gn(t._zod,"values",()=>e.innerType._zod.values?new Set([...e.innerType._zod.values,void 0]):void 0),gn(t._zod,"pattern",()=>{let r=e.innerType._zod.pattern;return r?new RegExp(`^(${kx(r.source)})?$`):void 0}),t._zod.parse=(r,n)=>e.innerType._zod.optin==="optional"?e.innerType._zod.run(r,n):r.value===void 0?r:e.innerType._zod.run(r,n)}),Dnt=ge("$ZodNullable",(t,e)=>{yn.init(t,e),gn(t._zod,"optin",()=>e.innerType._zod.optin),gn(t._zod,"optout",()=>e.innerType._zod.optout),gn(t._zod,"pattern",()=>{let r=e.innerType._zod.pattern;return r?new RegExp(`^(${kx(r.source)}|null)$`):void 0}),gn(t._zod,"values",()=>e.innerType._zod.values?new Set([...e.innerType._zod.values,null]):void 0),t._zod.parse=(r,n)=>r.value===null?r:e.innerType._zod.run(r,n)}),Snt=ge("$ZodDefault",(t,e)=>{yn.init(t,e),t._zod.optin="optional",gn(t._zod,"values",()=>e.innerType._zod.values),t._zod.parse=(r,n)=>{if(r.value===void 0)return r.value=e.defaultValue,r;let i=e.innerType._zod.run(r,n);return i instanceof Promise?i.then(s=>Lrt(s,e)):Lrt(i,e)}});function Lrt(t,e){return t.value===void 0&&(t.value=e.defaultValue),t}var Bnt=ge("$ZodPrefault",(t,e)=>{yn.init(t,e),t._zod.optin="optional",gn(t._zod,"values",()=>e.innerType._zod.values),t._zod.parse=(r,n)=>(r.value===void 0&&(r.value=e.defaultValue),e.innerType._zod.run(r,n))}),Rnt=ge("$ZodNonOptional",(t,e)=>{yn.init(t,e),gn(t._zod,"values",()=>{let r=e.innerType._zod.values;return r?new Set([...r].filter(n=>n!==void 0)):void 0}),t._zod.parse=(r,n)=>{let i=e.innerType._zod.run(r,n);return i instanceof Promise?i.then(s=>Mrt(s,t)):Mrt(i,t)}});function Mrt(t,e){return!t.issues.length&&t.value===void 0&&t.issues.push({code:"invalid_type",expected:"nonoptional",input:t.value,inst:e}),t}var xnt=ge("$ZodCatch",(t,e)=>{yn.init(t,e),t._zod.optin="optional",gn(t._zod,"optout",()=>e.innerType._zod.optout),gn(t._zod,"values",()=>e.innerType._zod.values),t._zod.parse=(r,n)=>{let i=e.innerType._zod.run(r,n);return i instanceof Promise?i.then(s=>(r.value=s.value,s.issues.length&&(r.value=e.catchValue({...r,error:{issues:s.issues.map(o=>Tu(o,n,Fc()))},input:r.value}),r.issues=[]),r)):(r.value=i.value,i.issues.length&&(r.value=e.catchValue({...r,error:{issues:i.issues.map(s=>Tu(s,n,Fc()))},input:r.value}),r.issues=[]),r)}});var Tnt=ge("$ZodPipe",(t,e)=>{yn.init(t,e),gn(t._zod,"values",()=>e.in._zod.values),gn(t._zod,"optin",()=>e.in._zod.optin),gn(t._zod,"optout",()=>e.out._zod.optout),t._zod.parse=(r,n)=>{let i=e.in._zod.run(r,n);return i instanceof Promise?i.then(s=>Prt(s,e,n)):Prt(i,e,n)}});function Prt(t,e,r){return cy(t)?t:e.out._zod.run({value:t.value,issues:t.issues},r)}var knt=ge("$ZodReadonly",(t,e)=>{yn.init(t,e),gn(t._zod,"propValues",()=>e.innerType._zod.propValues),gn(t._zod,"values",()=>e.innerType._zod.values),gn(t._zod,"optin",()=>e.innerType._zod.optin),gn(t._zod,"optout",()=>e.innerType._zod.optout),t._zod.parse=(r,n)=>{let i=e.innerType._zod.run(r,n);return i instanceof Promise?i.then($rt):$rt(i)}});function $rt(t){return t.value=Object.freeze(t.value),t}var Nnt=ge("$ZodCustom",(t,e)=>{Xs.init(t,e),yn.init(t,e),t._zod.parse=(r,n)=>r,t._zod.check=r=>{let n=r.value,i=e.fn(n);if(i instanceof Promise)return i.then(s=>Urt(s,r,n,t));Urt(i,r,n,t)}});function Urt(t,e,r,n){if(!t){let i={code:"custom",input:r,inst:n,path:[...n._zod.def.path??[]],continue:!n._zod.def.abort};n._zod.def.params&&(i.params=n._zod.def.params),e.issues.push(Uue(i))}}var Eyr=t=>{let e=typeof t;switch(e){case"number":return Number.isNaN(t)?"NaN":"number";case"object":{if(Array.isArray(t))return"array";if(t===null)return"null";if(Object.getPrototypeOf(t)!==Object.prototype&&t.constructor)return t.constructor.name}}return e},byr=()=>{let t={string:{unit:"characters",verb:"to have"},file:{unit:"bytes",verb:"to have"},array:{unit:"items",verb:"to have"},set:{unit:"items",verb:"to have"}};function e(n){return t[n]??null}let r={regex:"input",email:"email address",url:"URL",emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO datetime",date:"ISO date",time:"ISO time",duration:"ISO duration",ipv4:"IPv4 address",ipv6:"IPv6 address",cidrv4:"IPv4 range",cidrv6:"IPv6 range",base64:"base64-encoded string",base64url:"base64url-encoded string",json_string:"JSON string",e164:"E.164 number",jwt:"JWT",template_literal:"input"};return n=>{switch(n.code){case"invalid_type":return`Invalid input: expected ${n.expected}, received ${Eyr(n.input)}`;case"invalid_value":return n.values.length===1?`Invalid input: expected ${Sz(n.values[0])}`:`Invalid option: expected one of ${_z(n.values,"|")}`;case"too_big":{let i=n.inclusive?"<=":"<",s=e(n.origin);return s?`Too big: expected ${n.origin??"value"} to have ${i}${n.maximum.toString()} ${s.unit??"elements"}`:`Too big: expected ${n.origin??"value"} to be ${i}${n.maximum.toString()}`}case"too_small":{let i=n.inclusive?">=":">",s=e(n.origin);return s?`Too small: expected ${n.origin} to have ${i}${n.minimum.toString()} ${s.unit}`:`Too small: expected ${n.origin} to be ${i}${n.minimum.toString()}`}case"invalid_format":{let i=n;return i.format==="starts_with"?`Invalid string: must start with "${i.prefix}"`:i.format==="ends_with"?`Invalid string: must end with "${i.suffix}"`:i.format==="includes"?`Invalid string: must include "${i.includes}"`:i.format==="regex"?`Invalid string: must match pattern ${i.pattern}`:`Invalid ${r[i.format]??n.format}`}case"not_multiple_of":return`Invalid number: must be a multiple of ${n.divisor}`;case"unrecognized_keys":return`Unrecognized key${n.keys.length>1?"s":""}: ${_z(n.keys,", ")}`;case"invalid_key":return`Invalid key in ${n.origin}`;case"invalid_union":return"Invalid input";case"invalid_element":return`Invalid value in ${n.origin}`;default:return"Invalid input"}}};function Fnt(){return{localeError:byr()}}var Xue=class{constructor(){this._map=new Map,this._idmap=new Map}add(e,...r){let n=r[0];if(this._map.set(e,n),n&&typeof n=="object"&&"id"in n){if(this._idmap.has(n.id))throw new Error(`ID ${n.id} already exists in the registry`);this._idmap.set(n.id,e)}return this}clear(){return this._map=new Map,this._idmap=new Map,this}remove(e){let r=this._map.get(e);return r&&typeof r=="object"&&"id"in r&&this._idmap.delete(r.id),this._map.delete(e),this}get(e){let r=e._zod.parent;if(r){let n={...this.get(r)??{}};return delete n.id,{...n,...this._map.get(e)}}return this._map.get(e)}has(e){return this._map.has(e)}};function Cyr(){return new Xue}var Qx=Cyr();function Ont(t,e){return new t({type:"string",...Et(e)})}function Qnt(t,e){return new t({type:"string",format:"email",check:"string_format",abort:!1,...Et(e)})}function ele(t,e){return new t({type:"string",format:"guid",check:"string_format",abort:!1,...Et(e)})}function Lnt(t,e){return new t({type:"string",format:"uuid",check:"string_format",abort:!1,...Et(e)})}function Mnt(t,e){return new t({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v4",...Et(e)})}function Pnt(t,e){return new t({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v6",...Et(e)})}function $nt(t,e){return new t({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v7",...Et(e)})}function Unt(t,e){return new t({type:"string",format:"url",check:"string_format",abort:!1,...Et(e)})}function qnt(t,e){return new t({type:"string",format:"emoji",check:"string_format",abort:!1,...Et(e)})}function jnt(t,e){return new t({type:"string",format:"nanoid",check:"string_format",abort:!1,...Et(e)})}function Ynt(t,e){return new t({type:"string",format:"cuid",check:"string_format",abort:!1,...Et(e)})}function znt(t,e){return new t({type:"string",format:"cuid2",check:"string_format",abort:!1,...Et(e)})}function Hnt(t,e){return new t({type:"string",format:"ulid",check:"string_format",abort:!1,...Et(e)})}function Gnt(t,e){return new t({type:"string",format:"xid",check:"string_format",abort:!1,...Et(e)})}function Vnt(t,e){return new t({type:"string",format:"ksuid",check:"string_format",abort:!1,...Et(e)})}function Jnt(t,e){return new t({type:"string",format:"ipv4",check:"string_format",abort:!1,...Et(e)})}function Wnt(t,e){return new t({type:"string",format:"ipv6",check:"string_format",abort:!1,...Et(e)})}function Znt(t,e){return new t({type:"string",format:"cidrv4",check:"string_format",abort:!1,...Et(e)})}function Knt(t,e){return new t({type:"string",format:"cidrv6",check:"string_format",abort:!1,...Et(e)})}function Xnt(t,e){return new t({type:"string",format:"base64",check:"string_format",abort:!1,...Et(e)})}function eit(t,e){return new t({type:"string",format:"base64url",check:"string_format",abort:!1,...Et(e)})}function tit(t,e){return new t({type:"string",format:"e164",check:"string_format",abort:!1,...Et(e)})}function rit(t,e){return new t({type:"string",format:"jwt",check:"string_format",abort:!1,...Et(e)})}function nit(t,e){return new t({type:"string",format:"datetime",check:"string_format",offset:!1,local:!1,precision:null,...Et(e)})}function iit(t,e){return new t({type:"string",format:"date",check:"string_format",...Et(e)})}function sit(t,e){return new t({type:"string",format:"time",check:"string_format",precision:null,...Et(e)})}function oit(t,e){return new t({type:"string",format:"duration",check:"string_format",...Et(e)})}function ait(t,e){return new t({type:"number",checks:[],...Et(e)})}function cit(t,e){return new t({type:"number",check:"number_format",abort:!1,format:"safeint",...Et(e)})}function uit(t,e){return new t({type:"boolean",...Et(e)})}function lit(t,e){return new t({type:"null",...Et(e)})}function fit(t){return new t({type:"unknown"})}function dit(t,e){return new t({type:"never",...Et(e)})}function Nz(t,e){return new Vue({check:"less_than",...Et(e),value:t,inclusive:!1})}function Lx(t,e){return new Vue({check:"less_than",...Et(e),value:t,inclusive:!0})}function Fz(t,e){return new Jue({check:"greater_than",...Et(e),value:t,inclusive:!1})}function Mx(t,e){return new Jue({check:"greater_than",...Et(e),value:t,inclusive:!0})}function Oz(t,e){return new Ert({check:"multiple_of",...Et(e),value:t})}function Qz(t,e){return new Crt({check:"max_length",...Et(e),maximum:t})}function mv(t,e){return new vrt({check:"min_length",...Et(e),minimum:t})}function Lz(t,e){return new Irt({check:"length_equals",...Et(e),length:t})}function tle(t,e){return new wrt({check:"string_format",format:"regex",...Et(e),pattern:t})}function rle(t){return new _rt({check:"string_format",format:"lowercase",...Et(t)})}function nle(t){return new Drt({check:"string_format",format:"uppercase",...Et(t)})}function ile(t,e){return new Srt({check:"string_format",format:"includes",...Et(e),includes:t})}function sle(t,e){return new Brt({check:"string_format",format:"starts_with",...Et(e),prefix:t})}function ole(t,e){return new Rrt({check:"string_format",format:"ends_with",...Et(e),suffix:t})}function uy(t){return new xrt({check:"overwrite",tx:t})}function ale(t){return uy(e=>e.normalize(t))}function cle(){return uy(t=>t.trim())}function ule(){return uy(t=>t.toLowerCase())}function lle(){return uy(t=>t.toUpperCase())}function pit(t,e,r){return new t({type:"array",element:e,...Et(r)})}function hit(t,e,r){let n=Et(r);return n.abort??(n.abort=!0),new t({type:"custom",check:"custom",fn:e,...n})}function mit(t,e,r){return new t({type:"custom",check:"custom",fn:e,...Et(r)})}var $x={};qc($x,{ZodISODate:()=>git,ZodISODateTime:()=>Ait,ZodISODuration:()=>Eit,ZodISOTime:()=>yit,date:()=>dle,datetime:()=>fle,duration:()=>hle,time:()=>ple});var Ait=ge("ZodISODateTime",(t,e)=>{Xrt.init(t,e),Yn.init(t,e)});function fle(t){return nit(Ait,t)}var git=ge("ZodISODate",(t,e)=>{ent.init(t,e),Yn.init(t,e)});function dle(t){return iit(git,t)}var yit=ge("ZodISOTime",(t,e)=>{tnt.init(t,e),Yn.init(t,e)});function ple(t){return sit(yit,t)}var Eit=ge("ZodISODuration",(t,e)=>{rnt.init(t,e),Yn.init(t,e)});function hle(t){return oit(Eit,t)}var bit=(t,e)=>{Bz.init(t,e),t.name="ZodError",Object.defineProperties(t,{format:{value:r=>$tt(t,r)},flatten:{value:r=>Ptt(t,r)},addIssue:{value:r=>t.issues.push(r)},addIssues:{value:r=>t.issues.push(...r)},isEmpty:{get(){return t.issues.length===0}}})},Jrn=ge("ZodError",bit),Ux=ge("ZodError",bit,{Parent:Error});var Cit=Utt(Ux),vit=qtt(Ux),Iit=jue(Ux),wit=Yue(Ux);var ii=ge("ZodType",(t,e)=>(yn.init(t,e),t.def=e,Object.defineProperty(t,"_def",{value:e}),t.check=(...r)=>t.clone({...e,checks:[...e.checks??[],...r.map(n=>typeof n=="function"?{_zod:{check:n,def:{check:"custom"},onattach:[]}}:n)]}),t.clone=(r,n)=>Ml(t,r,n),t.brand=()=>t,t.register=((r,n)=>(r.add(t,n),t)),t.parse=(r,n)=>Cit(t,r,n,{callee:t.parse}),t.safeParse=(r,n)=>Iit(t,r,n),t.parseAsync=async(r,n)=>vit(t,r,n,{callee:t.parseAsync}),t.safeParseAsync=async(r,n)=>wit(t,r,n),t.spa=t.safeParseAsync,t.refine=(r,n)=>t.check(yEr(r,n)),t.superRefine=r=>t.check(EEr(r)),t.overwrite=r=>t.check(uy(r)),t.optional=()=>ni(t),t.nullable=()=>Sit(t),t.nullish=()=>ni(Sit(t)),t.nonoptional=r=>fEr(t,r),t.array=()=>cr(t),t.or=r=>En([t,r]),t.and=r=>Pz(t,r),t.transform=r=>Ale(t,kit(r)),t.default=r=>cEr(t,r),t.prefault=r=>lEr(t,r),t.catch=r=>pEr(t,r),t.pipe=r=>Ale(t,r),t.readonly=()=>AEr(t),t.describe=r=>{let n=t.clone();return Qx.add(n,{description:r}),n},Object.defineProperty(t,"description",{get(){return Qx.get(t)?.description},configurable:!0}),t.meta=(...r)=>{if(r.length===0)return Qx.get(t);let n=t.clone();return Qx.add(n,r[0]),n},t.isOptional=()=>t.safeParse(void 0).success,t.isNullable=()=>t.safeParse(null).success,t)),Bit=ge("_ZodString",(t,e)=>{kz.init(t,e),ii.init(t,e);let r=t._zod.bag;t.format=r.format??null,t.minLength=r.minimum??null,t.maxLength=r.maximum??null,t.regex=(...n)=>t.check(tle(...n)),t.includes=(...n)=>t.check(ile(...n)),t.startsWith=(...n)=>t.check(sle(...n)),t.endsWith=(...n)=>t.check(ole(...n)),t.min=(...n)=>t.check(mv(...n)),t.max=(...n)=>t.check(Qz(...n)),t.length=(...n)=>t.check(Lz(...n)),t.nonempty=(...n)=>t.check(mv(1,...n)),t.lowercase=n=>t.check(rle(n)),t.uppercase=n=>t.check(nle(n)),t.trim=()=>t.check(cle()),t.normalize=(...n)=>t.check(ale(...n)),t.toLowerCase=()=>t.check(ule()),t.toUpperCase=()=>t.check(lle())}),xyr=ge("ZodString",(t,e)=>{kz.init(t,e),Bit.init(t,e),t.email=r=>t.check(Qnt(Tyr,r)),t.url=r=>t.check(Unt(kyr,r)),t.jwt=r=>t.check(rit(Gyr,r)),t.emoji=r=>t.check(qnt(Nyr,r)),t.guid=r=>t.check(ele(_it,r)),t.uuid=r=>t.check(Lnt(Mz,r)),t.uuidv4=r=>t.check(Mnt(Mz,r)),t.uuidv6=r=>t.check(Pnt(Mz,r)),t.uuidv7=r=>t.check($nt(Mz,r)),t.nanoid=r=>t.check(jnt(Fyr,r)),t.guid=r=>t.check(ele(_it,r)),t.cuid=r=>t.check(Ynt(Oyr,r)),t.cuid2=r=>t.check(znt(Qyr,r)),t.ulid=r=>t.check(Hnt(Lyr,r)),t.base64=r=>t.check(Xnt(Yyr,r)),t.base64url=r=>t.check(eit(zyr,r)),t.xid=r=>t.check(Gnt(Myr,r)),t.ksuid=r=>t.check(Vnt(Pyr,r)),t.ipv4=r=>t.check(Jnt($yr,r)),t.ipv6=r=>t.check(Wnt(Uyr,r)),t.cidrv4=r=>t.check(Znt(qyr,r)),t.cidrv6=r=>t.check(Knt(jyr,r)),t.e164=r=>t.check(tit(Hyr,r)),t.datetime=r=>t.check(fle(r)),t.date=r=>t.check(dle(r)),t.time=r=>t.check(ple(r)),t.duration=r=>t.check(hle(r))});function me(t){return Ont(xyr,t)}var Yn=ge("ZodStringFormat",(t,e)=>{Sn.init(t,e),Bit.init(t,e)}),Tyr=ge("ZodEmail",(t,e)=>{Yrt.init(t,e),Yn.init(t,e)});var _it=ge("ZodGUID",(t,e)=>{qrt.init(t,e),Yn.init(t,e)});var Mz=ge("ZodUUID",(t,e)=>{jrt.init(t,e),Yn.init(t,e)});var kyr=ge("ZodURL",(t,e)=>{zrt.init(t,e),Yn.init(t,e)});var Nyr=ge("ZodEmoji",(t,e)=>{Hrt.init(t,e),Yn.init(t,e)});var Fyr=ge("ZodNanoID",(t,e)=>{Grt.init(t,e),Yn.init(t,e)});var Oyr=ge("ZodCUID",(t,e)=>{Vrt.init(t,e),Yn.init(t,e)});var Qyr=ge("ZodCUID2",(t,e)=>{Jrt.init(t,e),Yn.init(t,e)});var Lyr=ge("ZodULID",(t,e)=>{Wrt.init(t,e),Yn.init(t,e)});var Myr=ge("ZodXID",(t,e)=>{Zrt.init(t,e),Yn.init(t,e)});var Pyr=ge("ZodKSUID",(t,e)=>{Krt.init(t,e),Yn.init(t,e)});var $yr=ge("ZodIPv4",(t,e)=>{nnt.init(t,e),Yn.init(t,e)});var Uyr=ge("ZodIPv6",(t,e)=>{int.init(t,e),Yn.init(t,e)});var qyr=ge("ZodCIDRv4",(t,e)=>{snt.init(t,e),Yn.init(t,e)});var jyr=ge("ZodCIDRv6",(t,e)=>{ont.init(t,e),Yn.init(t,e)});var Yyr=ge("ZodBase64",(t,e)=>{cnt.init(t,e),Yn.init(t,e)});var zyr=ge("ZodBase64URL",(t,e)=>{unt.init(t,e),Yn.init(t,e)});var Hyr=ge("ZodE164",(t,e)=>{lnt.init(t,e),Yn.init(t,e)});var Gyr=ge("ZodJWT",(t,e)=>{fnt.init(t,e),Yn.init(t,e)});var Rit=ge("ZodNumber",(t,e)=>{Zue.init(t,e),ii.init(t,e),t.gt=(n,i)=>t.check(Fz(n,i)),t.gte=(n,i)=>t.check(Mx(n,i)),t.min=(n,i)=>t.check(Mx(n,i)),t.lt=(n,i)=>t.check(Nz(n,i)),t.lte=(n,i)=>t.check(Lx(n,i)),t.max=(n,i)=>t.check(Lx(n,i)),t.int=n=>t.check(Dit(n)),t.safe=n=>t.check(Dit(n)),t.positive=n=>t.check(Fz(0,n)),t.nonnegative=n=>t.check(Mx(0,n)),t.negative=n=>t.check(Nz(0,n)),t.nonpositive=n=>t.check(Lx(0,n)),t.multipleOf=(n,i)=>t.check(Oz(n,i)),t.step=(n,i)=>t.check(Oz(n,i)),t.finite=()=>t;let r=t._zod.bag;t.minValue=Math.max(r.minimum??Number.NEGATIVE_INFINITY,r.exclusiveMinimum??Number.NEGATIVE_INFINITY)??null,t.maxValue=Math.min(r.maximum??Number.POSITIVE_INFINITY,r.exclusiveMaximum??Number.POSITIVE_INFINITY)??null,t.isInt=(r.format??"").includes("int")||Number.isSafeInteger(r.multipleOf??.5),t.isFinite=!0,t.format=r.format??null});function Zr(t){return ait(Rit,t)}var Vyr=ge("ZodNumberFormat",(t,e)=>{dnt.init(t,e),Rit.init(t,e)});function Dit(t){return cit(Vyr,t)}var Jyr=ge("ZodBoolean",(t,e)=>{pnt.init(t,e),ii.init(t,e)});function cs(t){return uit(Jyr,t)}var Wyr=ge("ZodNull",(t,e)=>{hnt.init(t,e),ii.init(t,e)});function gle(t){return lit(Wyr,t)}var Zyr=ge("ZodUnknown",(t,e)=>{mnt.init(t,e),ii.init(t,e)});function zn(){return fit(Zyr)}var Kyr=ge("ZodNever",(t,e)=>{Ant.init(t,e),ii.init(t,e)});function Xyr(t){return dit(Kyr,t)}var eEr=ge("ZodArray",(t,e)=>{gnt.init(t,e),ii.init(t,e),t.element=e.element,t.min=(r,n)=>t.check(mv(r,n)),t.nonempty=r=>t.check(mv(1,r)),t.max=(r,n)=>t.check(Qz(r,n)),t.length=(r,n)=>t.check(Lz(r,n)),t.unwrap=()=>t.element});function cr(t,e){return pit(eEr,t,e)}var xit=ge("ZodObject",(t,e)=>{ynt.init(t,e),ii.init(t,e),kr.defineLazy(t,"shape",()=>e.shape),t.keyof=()=>ra(Object.keys(t._zod.def.shape)),t.catchall=r=>t.clone({...t._zod.def,catchall:r}),t.passthrough=()=>t.clone({...t._zod.def,catchall:zn()}),t.loose=()=>t.clone({...t._zod.def,catchall:zn()}),t.strict=()=>t.clone({...t._zod.def,catchall:Xyr()}),t.strip=()=>t.clone({...t._zod.def,catchall:void 0}),t.extend=r=>kr.extend(t,r),t.merge=r=>kr.merge(t,r),t.pick=r=>kr.pick(t,r),t.omit=r=>kr.omit(t,r),t.partial=(...r)=>kr.partial(Nit,t,r[0]),t.required=(...r)=>kr.required(Fit,t,r[0])});function je(t,e){let r={type:"object",get shape(){return kr.assignProp(this,"shape",{...t}),this.shape},...kr.normalizeParams(e)};return new xit(r)}function Bo(t,e){return new xit({type:"object",get shape(){return kr.assignProp(this,"shape",{...t}),this.shape},catchall:zn(),...kr.normalizeParams(e)})}var Tit=ge("ZodUnion",(t,e)=>{Kue.init(t,e),ii.init(t,e),t.options=e.options});function En(t,e){return new Tit({type:"union",options:t,...kr.normalizeParams(e)})}var tEr=ge("ZodDiscriminatedUnion",(t,e)=>{Tit.init(t,e),Ent.init(t,e)});function yle(t,e,r){return new tEr({type:"union",options:e,discriminator:t,...kr.normalizeParams(r)})}var rEr=ge("ZodIntersection",(t,e)=>{bnt.init(t,e),ii.init(t,e)});function Pz(t,e){return new rEr({type:"intersection",left:t,right:e})}var nEr=ge("ZodRecord",(t,e)=>{Cnt.init(t,e),ii.init(t,e),t.keyType=e.keyType,t.valueType=e.valueType});function Hn(t,e,r){return new nEr({type:"record",keyType:t,valueType:e,...kr.normalizeParams(r)})}var mle=ge("ZodEnum",(t,e)=>{vnt.init(t,e),ii.init(t,e),t.enum=e.entries,t.options=Object.values(e.entries);let r=new Set(Object.keys(e.entries));t.extract=(n,i)=>{let s={};for(let o of n)if(r.has(o))s[o]=e.entries[o];else throw new Error(`Key ${o} not found in enum`);return new mle({...e,checks:[],...kr.normalizeParams(i),entries:s})},t.exclude=(n,i)=>{let s={...e.entries};for(let o of n)if(r.has(o))delete s[o];else throw new Error(`Key ${o} not found in enum`);return new mle({...e,checks:[],...kr.normalizeParams(i),entries:s})}});function ra(t,e){let r=Array.isArray(t)?Object.fromEntries(t.map(n=>[n,n])):t;return new mle({type:"enum",entries:r,...kr.normalizeParams(e)})}var iEr=ge("ZodLiteral",(t,e)=>{Int.init(t,e),ii.init(t,e),t.values=new Set(e.values),Object.defineProperty(t,"value",{get(){if(e.values.length>1)throw new Error("This schema contains multiple valid literal values. Use `.values` instead.");return e.values[0]}})});function st(t,e){return new iEr({type:"literal",values:Array.isArray(t)?t:[t],...kr.normalizeParams(e)})}var sEr=ge("ZodTransform",(t,e)=>{wnt.init(t,e),ii.init(t,e),t._zod.parse=(r,n)=>{r.addIssue=s=>{if(typeof s=="string")r.issues.push(kr.issue(s,r.value,e));else{let o=s;o.fatal&&(o.continue=!1),o.code??(o.code="custom"),o.input??(o.input=r.value),o.inst??(o.inst=t),o.continue??(o.continue=!0),r.issues.push(kr.issue(o))}};let i=e.transform(r.value,r);return i instanceof Promise?i.then(s=>(r.value=s,r)):(r.value=i,r)}});function kit(t){return new sEr({type:"transform",transform:t})}var Nit=ge("ZodOptional",(t,e)=>{_nt.init(t,e),ii.init(t,e),t.unwrap=()=>t._zod.def.innerType});function ni(t){return new Nit({type:"optional",innerType:t})}var oEr=ge("ZodNullable",(t,e)=>{Dnt.init(t,e),ii.init(t,e),t.unwrap=()=>t._zod.def.innerType});function Sit(t){return new oEr({type:"nullable",innerType:t})}var aEr=ge("ZodDefault",(t,e)=>{Snt.init(t,e),ii.init(t,e),t.unwrap=()=>t._zod.def.innerType,t.removeDefault=t.unwrap});function cEr(t,e){return new aEr({type:"default",innerType:t,get defaultValue(){return typeof e=="function"?e():e}})}var uEr=ge("ZodPrefault",(t,e)=>{Bnt.init(t,e),ii.init(t,e),t.unwrap=()=>t._zod.def.innerType});function lEr(t,e){return new uEr({type:"prefault",innerType:t,get defaultValue(){return typeof e=="function"?e():e}})}var Fit=ge("ZodNonOptional",(t,e)=>{Rnt.init(t,e),ii.init(t,e),t.unwrap=()=>t._zod.def.innerType});function fEr(t,e){return new Fit({type:"nonoptional",innerType:t,...kr.normalizeParams(e)})}var dEr=ge("ZodCatch",(t,e)=>{xnt.init(t,e),ii.init(t,e),t.unwrap=()=>t._zod.def.innerType,t.removeCatch=t.unwrap});function pEr(t,e){return new dEr({type:"catch",innerType:t,catchValue:typeof e=="function"?e:()=>e})}var hEr=ge("ZodPipe",(t,e)=>{Tnt.init(t,e),ii.init(t,e),t.in=e.in,t.out=e.out});function Ale(t,e){return new hEr({type:"pipe",in:t,out:e})}var mEr=ge("ZodReadonly",(t,e)=>{knt.init(t,e),ii.init(t,e)});function AEr(t){return new mEr({type:"readonly",innerType:t})}var Oit=ge("ZodCustom",(t,e)=>{Nnt.init(t,e),ii.init(t,e)});function gEr(t){let e=new Xs({check:"custom"});return e._zod.check=t,e}function Qit(t,e){return hit(Oit,t??(()=>!0),e)}function yEr(t,e={}){return mit(Oit,t,e)}function EEr(t){let e=gEr(r=>(r.addIssue=n=>{if(typeof n=="string")r.issues.push(kr.issue(n,r.value,e._zod.def));else{let i=n;i.fatal&&(i.continue=!1),i.code??(i.code="custom"),i.input??(i.input=r.value),i.inst??(i.inst=e),i.continue??(i.continue=!e._zod.def.abort),r.issues.push(kr.issue(i))}},t(r.value,r)));return e}function Ele(t,e){return Ale(kit(t),e)}Fc(Fnt());var Cle="2025-11-25";var Lit=[Cle,"2025-06-18","2025-03-26","2024-11-05","2024-10-07"],$h="io.modelcontextprotocol/related-task",Uz="2.0",_s=Qit(t=>t!==null&&(typeof t=="object"||typeof t=="function")),Mit=En([me(),Zr().int()]),Pit=me(),qnn=Bo({ttl:En([Zr(),gle()]).optional(),pollInterval:Zr().optional()}),bEr=je({ttl:Zr().optional()}),CEr=je({taskId:me()}),vle=Bo({progressToken:Mit.optional(),[$h]:CEr.optional()}),qa=je({_meta:vle.optional()}),qx=qa.extend({task:bEr.optional()}),$it=t=>qx.safeParse(t).success,Ds=je({method:me(),params:qa.loose().optional()}),Oc=je({_meta:vle.optional()}),Qc=je({method:me(),params:Oc.loose().optional()}),Ss=Bo({_meta:vle.optional()}),qz=En([me(),Zr().int()]),Uit=je({jsonrpc:st(Uz),id:qz,...Ds.shape}).strict(),Ile=t=>Uit.safeParse(t).success,qit=je({jsonrpc:st(Uz),...Qc.shape}).strict(),jit=t=>qit.safeParse(t).success,wle=je({jsonrpc:st(Uz),id:qz,result:Ss}).strict(),jx=t=>wle.safeParse(t).success;var Mt;(function(t){t[t.ConnectionClosed=-32e3]="ConnectionClosed",t[t.RequestTimeout=-32001]="RequestTimeout",t[t.ParseError=-32700]="ParseError",t[t.InvalidRequest=-32600]="InvalidRequest",t[t.MethodNotFound=-32601]="MethodNotFound",t[t.InvalidParams=-32602]="InvalidParams",t[t.InternalError=-32603]="InternalError",t[t.UrlElicitationRequired=-32042]="UrlElicitationRequired"})(Mt||(Mt={}));var _le=je({jsonrpc:st(Uz),id:qz.optional(),error:je({code:Zr().int(),message:me(),data:zn().optional()})}).strict();var Yit=t=>_le.safeParse(t).success;var zit=En([Uit,qit,wle,_le]),jnn=En([wle,_le]),jz=Ss.strict(),vEr=Oc.extend({requestId:qz.optional(),reason:me().optional()}),Yz=Qc.extend({method:st("notifications/cancelled"),params:vEr}),IEr=je({src:me(),mimeType:me().optional(),sizes:cr(me()).optional(),theme:ra(["light","dark"]).optional()}),Yx=je({icons:cr(IEr).optional()}),Av=je({name:me(),title:me().optional()}),Hit=Av.extend({...Av.shape,...Yx.shape,version:me(),websiteUrl:me().optional(),description:me().optional()}),wEr=Pz(je({applyDefaults:cs().optional()}),Hn(me(),zn())),_Er=Ele(t=>t&&typeof t=="object"&&!Array.isArray(t)&&Object.keys(t).length===0?{form:{}}:t,Pz(je({form:wEr.optional(),url:_s.optional()}),Hn(me(),zn()).optional())),DEr=Bo({list:_s.optional(),cancel:_s.optional(),requests:Bo({sampling:Bo({createMessage:_s.optional()}).optional(),elicitation:Bo({create:_s.optional()}).optional()}).optional()}),SEr=Bo({list:_s.optional(),cancel:_s.optional(),requests:Bo({tools:Bo({call:_s.optional()}).optional()}).optional()}),BEr=je({experimental:Hn(me(),_s).optional(),sampling:je({context:_s.optional(),tools:_s.optional()}).optional(),elicitation:_Er.optional(),roots:je({listChanged:cs().optional()}).optional(),tasks:DEr.optional()}),REr=qa.extend({protocolVersion:me(),capabilities:BEr,clientInfo:Hit}),Dle=Ds.extend({method:st("initialize"),params:REr});var xEr=je({experimental:Hn(me(),_s).optional(),logging:_s.optional(),completions:_s.optional(),prompts:je({listChanged:cs().optional()}).optional(),resources:je({subscribe:cs().optional(),listChanged:cs().optional()}).optional(),tools:je({listChanged:cs().optional()}).optional(),tasks:SEr.optional()}),TEr=Ss.extend({protocolVersion:me(),capabilities:xEr,serverInfo:Hit,instructions:me().optional()}),Sle=Qc.extend({method:st("notifications/initialized"),params:Oc.optional()});var zz=Ds.extend({method:st("ping"),params:qa.optional()}),kEr=je({progress:Zr(),total:ni(Zr()),message:ni(me())}),NEr=je({...Oc.shape,...kEr.shape,progressToken:Mit}),Hz=Qc.extend({method:st("notifications/progress"),params:NEr}),FEr=qa.extend({cursor:Pit.optional()}),zx=Ds.extend({params:FEr.optional()}),Hx=Ss.extend({nextCursor:Pit.optional()}),OEr=ra(["working","input_required","completed","failed","cancelled"]),Gx=je({taskId:me(),status:OEr,ttl:En([Zr(),gle()]),createdAt:me(),lastUpdatedAt:me(),pollInterval:ni(Zr()),statusMessage:ni(me())}),gv=Ss.extend({task:Gx}),QEr=Oc.merge(Gx),Vx=Qc.extend({method:st("notifications/tasks/status"),params:QEr}),Gz=Ds.extend({method:st("tasks/get"),params:qa.extend({taskId:me()})}),Vz=Ss.merge(Gx),Jz=Ds.extend({method:st("tasks/result"),params:qa.extend({taskId:me()})}),Ynn=Ss.loose(),Wz=zx.extend({method:st("tasks/list")}),Zz=Hx.extend({tasks:cr(Gx)}),Kz=Ds.extend({method:st("tasks/cancel"),params:qa.extend({taskId:me()})}),Git=Ss.merge(Gx),Vit=je({uri:me(),mimeType:ni(me()),_meta:Hn(me(),zn()).optional()}),Jit=Vit.extend({text:me()}),Ble=me().refine(t=>{try{return atob(t),!0}catch{return!1}},{message:"Invalid Base64 string"}),Wit=Vit.extend({blob:Ble}),Jx=ra(["user","assistant"]),yv=je({audience:cr(Jx).optional(),priority:Zr().min(0).max(1).optional(),lastModified:$x.datetime({offset:!0}).optional()}),Zit=je({...Av.shape,...Yx.shape,uri:me(),description:ni(me()),mimeType:ni(me()),annotations:yv.optional(),_meta:ni(Bo({}))}),LEr=je({...Av.shape,...Yx.shape,uriTemplate:me(),description:ni(me()),mimeType:ni(me()),annotations:yv.optional(),_meta:ni(Bo({}))}),Rle=zx.extend({method:st("resources/list")}),MEr=Hx.extend({resources:cr(Zit)}),PEr=zx.extend({method:st("resources/templates/list")}),$Er=Hx.extend({resourceTemplates:cr(LEr)}),xle=qa.extend({uri:me()}),UEr=xle,Tle=Ds.extend({method:st("resources/read"),params:UEr}),qEr=Ss.extend({contents:cr(En([Jit,Wit]))}),jEr=Qc.extend({method:st("notifications/resources/list_changed"),params:Oc.optional()}),YEr=xle,zEr=Ds.extend({method:st("resources/subscribe"),params:YEr}),HEr=xle,GEr=Ds.extend({method:st("resources/unsubscribe"),params:HEr}),VEr=Oc.extend({uri:me()}),JEr=Qc.extend({method:st("notifications/resources/updated"),params:VEr}),WEr=je({name:me(),description:ni(me()),required:ni(cs())}),ZEr=je({...Av.shape,...Yx.shape,description:ni(me()),arguments:ni(cr(WEr)),_meta:ni(Bo({}))}),KEr=zx.extend({method:st("prompts/list")}),XEr=Hx.extend({prompts:cr(ZEr)}),ebr=qa.extend({name:me(),arguments:Hn(me(),me()).optional()}),tbr=Ds.extend({method:st("prompts/get"),params:ebr}),kle=je({type:st("text"),text:me(),annotations:yv.optional(),_meta:Hn(me(),zn()).optional()}),Nle=je({type:st("image"),data:Ble,mimeType:me(),annotations:yv.optional(),_meta:Hn(me(),zn()).optional()}),Fle=je({type:st("audio"),data:Ble,mimeType:me(),annotations:yv.optional(),_meta:Hn(me(),zn()).optional()}),rbr=je({type:st("tool_use"),name:me(),id:me(),input:Hn(me(),zn()),_meta:Hn(me(),zn()).optional()}),nbr=je({type:st("resource"),resource:En([Jit,Wit]),annotations:yv.optional(),_meta:Hn(me(),zn()).optional()}),ibr=Zit.extend({type:st("resource_link")}),Ole=En([kle,Nle,Fle,ibr,nbr]),sbr=je({role:Jx,content:Ole}),obr=Ss.extend({description:me().optional(),messages:cr(sbr)}),abr=Qc.extend({method:st("notifications/prompts/list_changed"),params:Oc.optional()}),cbr=je({title:me().optional(),readOnlyHint:cs().optional(),destructiveHint:cs().optional(),idempotentHint:cs().optional(),openWorldHint:cs().optional()}),ubr=je({taskSupport:ra(["required","optional","forbidden"]).optional()}),Kit=je({...Av.shape,...Yx.shape,description:me().optional(),inputSchema:je({type:st("object"),properties:Hn(me(),_s).optional(),required:cr(me()).optional()}).catchall(zn()),outputSchema:je({type:st("object"),properties:Hn(me(),_s).optional(),required:cr(me()).optional()}).catchall(zn()).optional(),annotations:cbr.optional(),execution:ubr.optional(),_meta:Hn(me(),zn()).optional()}),Qle=zx.extend({method:st("tools/list")}),lbr=Hx.extend({tools:cr(Kit)}),Xz=Ss.extend({content:cr(Ole).default([]),structuredContent:Hn(me(),zn()).optional(),isError:cs().optional()}),znn=Xz.or(Ss.extend({toolResult:zn()})),fbr=qx.extend({name:me(),arguments:Hn(me(),zn()).optional()}),Wx=Ds.extend({method:st("tools/call"),params:fbr}),dbr=Qc.extend({method:st("notifications/tools/list_changed"),params:Oc.optional()}),Hnn=je({autoRefresh:cs().default(!0),debounceMs:Zr().int().nonnegative().default(300)}),Zx=ra(["debug","info","notice","warning","error","critical","alert","emergency"]),pbr=qa.extend({level:Zx}),Lle=Ds.extend({method:st("logging/setLevel"),params:pbr}),hbr=Oc.extend({level:Zx,logger:me().optional(),data:zn()}),mbr=Qc.extend({method:st("notifications/message"),params:hbr}),Abr=je({name:me().optional()}),gbr=je({hints:cr(Abr).optional(),costPriority:Zr().min(0).max(1).optional(),speedPriority:Zr().min(0).max(1).optional(),intelligencePriority:Zr().min(0).max(1).optional()}),ybr=je({mode:ra(["auto","required","none"]).optional()}),Ebr=je({type:st("tool_result"),toolUseId:me().describe("The unique identifier for the corresponding tool call."),content:cr(Ole).default([]),structuredContent:je({}).loose().optional(),isError:cs().optional(),_meta:Hn(me(),zn()).optional()}),bbr=yle("type",[kle,Nle,Fle]),$z=yle("type",[kle,Nle,Fle,rbr,Ebr]),Cbr=je({role:Jx,content:En([$z,cr($z)]),_meta:Hn(me(),zn()).optional()}),vbr=qx.extend({messages:cr(Cbr),modelPreferences:gbr.optional(),systemPrompt:me().optional(),includeContext:ra(["none","thisServer","allServers"]).optional(),temperature:Zr().optional(),maxTokens:Zr().int(),stopSequences:cr(me()).optional(),metadata:_s.optional(),tools:cr(Kit).optional(),toolChoice:ybr.optional()}),Ibr=Ds.extend({method:st("sampling/createMessage"),params:vbr}),Kx=Ss.extend({model:me(),stopReason:ni(ra(["endTurn","stopSequence","maxTokens"]).or(me())),role:Jx,content:bbr}),Mle=Ss.extend({model:me(),stopReason:ni(ra(["endTurn","stopSequence","maxTokens","toolUse"]).or(me())),role:Jx,content:En([$z,cr($z)])}),wbr=je({type:st("boolean"),title:me().optional(),description:me().optional(),default:cs().optional()}),_br=je({type:st("string"),title:me().optional(),description:me().optional(),minLength:Zr().optional(),maxLength:Zr().optional(),format:ra(["email","uri","date","date-time"]).optional(),default:me().optional()}),Dbr=je({type:ra(["number","integer"]),title:me().optional(),description:me().optional(),minimum:Zr().optional(),maximum:Zr().optional(),default:Zr().optional()}),Sbr=je({type:st("string"),title:me().optional(),description:me().optional(),enum:cr(me()),default:me().optional()}),Bbr=je({type:st("string"),title:me().optional(),description:me().optional(),oneOf:cr(je({const:me(),title:me()})),default:me().optional()}),Rbr=je({type:st("string"),title:me().optional(),description:me().optional(),enum:cr(me()),enumNames:cr(me()).optional(),default:me().optional()}),xbr=En([Sbr,Bbr]),Tbr=je({type:st("array"),title:me().optional(),description:me().optional(),minItems:Zr().optional(),maxItems:Zr().optional(),items:je({type:st("string"),enum:cr(me())}),default:cr(me()).optional()}),kbr=je({type:st("array"),title:me().optional(),description:me().optional(),minItems:Zr().optional(),maxItems:Zr().optional(),items:je({anyOf:cr(je({const:me(),title:me()}))}),default:cr(me()).optional()}),Nbr=En([Tbr,kbr]),Fbr=En([Rbr,xbr,Nbr]),Obr=En([Fbr,wbr,_br,Dbr]),Qbr=qx.extend({mode:st("form").optional(),message:me(),requestedSchema:je({type:st("object"),properties:Hn(me(),Obr),required:cr(me()).optional()})}),Lbr=qx.extend({mode:st("url"),message:me(),elicitationId:me(),url:me().url()}),Mbr=En([Qbr,Lbr]),Pbr=Ds.extend({method:st("elicitation/create"),params:Mbr}),$br=Oc.extend({elicitationId:me()}),Ubr=Qc.extend({method:st("notifications/elicitation/complete"),params:$br}),Ev=Ss.extend({action:ra(["accept","decline","cancel"]),content:Ele(t=>t===null?void 0:t,Hn(me(),En([me(),Zr(),cs(),cr(me())])).optional())}),qbr=je({type:st("ref/resource"),uri:me()});var jbr=je({type:st("ref/prompt"),name:me()}),Ybr=qa.extend({ref:En([jbr,qbr]),argument:je({name:me(),value:me()}),context:je({arguments:Hn(me(),me()).optional()}).optional()}),zbr=Ds.extend({method:st("completion/complete"),params:Ybr});var Hbr=Ss.extend({completion:Bo({values:cr(me()).max(100),total:ni(Zr().int()),hasMore:ni(cs())})}),Gbr=je({uri:me().startsWith("file://"),name:me().optional(),_meta:Hn(me(),zn()).optional()}),Vbr=Ds.extend({method:st("roots/list"),params:qa.optional()}),Ple=Ss.extend({roots:cr(Gbr)}),Jbr=Qc.extend({method:st("notifications/roots/list_changed"),params:Oc.optional()}),Gnn=En([zz,Dle,zbr,Lle,tbr,KEr,Rle,PEr,Tle,zEr,GEr,Wx,Qle,Gz,Jz,Wz,Kz]),Vnn=En([Yz,Hz,Sle,Jbr,Vx]),Jnn=En([jz,Kx,Mle,Ev,Ple,Vz,Zz,gv]),Wnn=En([zz,Ibr,Pbr,Vbr,Gz,Jz,Wz,Kz]),Znn=En([Yz,Hz,mbr,JEr,jEr,dbr,abr,Vx,Ubr]),Knn=En([jz,TEr,Hbr,obr,XEr,MEr,$Er,qEr,Xz,lbr,Vz,Zz,gv]),xt=class t extends Error{constructor(e,r,n){super(`MCP error ${e}: ${r}`),this.code=e,this.data=n,this.name="McpError"}static fromError(e,r,n){if(e===Mt.UrlElicitationRequired&&n){let i=n;if(i.elicitations)return new ble(i.elicitations,r)}return new t(e,r,n)}},ble=class extends xt{constructor(e,r=`URL elicitation${e.length>1?"s":""} required`){super(Mt.UrlElicitationRequired,r,{elicitations:e})}get elicitations(){return this.data?.elicitations??[]}};var e8=class{append(e){this._buffer=this._buffer?Buffer.concat([this._buffer,e]):e}readMessage(){if(!this._buffer)return null;let e=this._buffer.indexOf(`
1159
1159
  `);if(e===-1)return null;let r=this._buffer.toString("utf8",0,e).replace(/\r$/,"");return this._buffer=this._buffer.subarray(e+1),Wbr(r)}clear(){this._buffer=void 0}};function Wbr(t){return zit.parse(JSON.parse(t))}function Xit(t){return JSON.stringify(t)+`
1160
1160
  `}var t8=class{constructor(e=est.stdin,r=est.stdout){this._stdin=e,this._stdout=r,this._readBuffer=new e8,this._started=!1,this._ondata=n=>{this._readBuffer.append(n),this.processReadBuffer()},this._onerror=n=>{this.onerror?.(n)}}async start(){if(this._started)throw new Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){for(;;)try{let e=this._readBuffer.readMessage();if(e===null)break;this.onmessage?.(e)}catch(e){this.onerror?.(e)}}async close(){this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._stdin.listenerCount("data")===0&&this._stdin.pause(),this._readBuffer.clear(),this.onclose?.()}send(e){return new Promise(r=>{let n=Xit(e);this._stdout.write(n)?r():this._stdout.once("drain",r)})}};dv();o8();uE();r8();dv();function vv(t){return!!t._zod}function qh(t,e){return vv(t)?Fx(t,e):t.safeParse(e)}function a8(t){if(!t)return;let e;if(vv(t)?e=t._zod?.def?.shape:e=t.shape,!!e){if(typeof e=="function")try{return e()}catch{return}return e}}function sst(t){if(vv(t)){let s=t._zod?.def;if(s){if(s.value!==void 0)return s.value;if(Array.isArray(s.values)&&s.values.length>0)return s.values[0]}}let r=t._def;if(r){if(r.value!==void 0)return r.value;if(Array.isArray(r.values)&&r.values.length>0)return r.values[0]}let n=t.value;if(n!==void 0)return n}function jh(t){return t==="completed"||t==="failed"||t==="cancelled"}var Zin=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");function $le(t){let r=a8(t)?.method;if(!r)throw new Error("Schema is missing a method literal");let n=sst(r);if(typeof n!="string")throw new Error("Schema method literal must be a string");return n}function Ule(t,e){let r=qh(t,e);if(!r.success)throw r.error;return r.data}var o0r=6e4,c8=class{constructor(e){this._options=e,this._requestMessageId=0,this._requestHandlers=new Map,this._requestHandlerAbortControllers=new Map,this._notificationHandlers=new Map,this._responseHandlers=new Map,this._progressHandlers=new Map,this._timeoutInfo=new Map,this._pendingDebouncedNotifications=new Set,this._taskProgressTokens=new Map,this._requestResolvers=new Map,this.setNotificationHandler(Yz,r=>{this._oncancel(r)}),this.setNotificationHandler(Hz,r=>{this._onprogress(r)}),this.setRequestHandler(zz,r=>({})),this._taskStore=e?.taskStore,this._taskMessageQueue=e?.taskMessageQueue,this._taskStore&&(this.setRequestHandler(Gz,async(r,n)=>{let i=await this._taskStore.getTask(r.params.taskId,n.sessionId);if(!i)throw new xt(Mt.InvalidParams,"Failed to retrieve task: Task not found");return{...i}}),this.setRequestHandler(Jz,async(r,n)=>{let i=async()=>{let s=r.params.taskId;if(this._taskMessageQueue){let a;for(;a=await this._taskMessageQueue.dequeue(s,n.sessionId);){if(a.type==="response"||a.type==="error"){let c=a.message,u=c.id,f=this._requestResolvers.get(u);if(f)if(this._requestResolvers.delete(u),a.type==="response")f(c);else{let d=c,p=new xt(d.error.code,d.error.message,d.error.data);f(p)}else{let d=a.type==="response"?"Response":"Error";this._onerror(new Error(`${d} handler missing for request ${u}`))}continue}await this._transport?.send(a.message,{relatedRequestId:n.requestId})}}let o=await this._taskStore.getTask(s,n.sessionId);if(!o)throw new xt(Mt.InvalidParams,`Task not found: ${s}`);if(!jh(o.status))return await this._waitForTaskUpdate(s,n.signal),await i();if(jh(o.status)){let a=await this._taskStore.getTaskResult(s,n.sessionId);return this._clearTaskQueue(s),{...a,_meta:{...a._meta,[$h]:{taskId:s}}}}return await i()};return await i()}),this.setRequestHandler(Wz,async(r,n)=>{try{let{tasks:i,nextCursor:s}=await this._taskStore.listTasks(r.params?.cursor,n.sessionId);return{tasks:i,nextCursor:s,_meta:{}}}catch(i){throw new xt(Mt.InvalidParams,`Failed to list tasks: ${i instanceof Error?i.message:String(i)}`)}}),this.setRequestHandler(Kz,async(r,n)=>{try{let i=await this._taskStore.getTask(r.params.taskId,n.sessionId);if(!i)throw new xt(Mt.InvalidParams,`Task not found: ${r.params.taskId}`);if(jh(i.status))throw new xt(Mt.InvalidParams,`Cannot cancel task in terminal status: ${i.status}`);await this._taskStore.updateTaskStatus(r.params.taskId,"cancelled","Client cancelled task execution.",n.sessionId),this._clearTaskQueue(r.params.taskId);let s=await this._taskStore.getTask(r.params.taskId,n.sessionId);if(!s)throw new xt(Mt.InvalidParams,`Task not found after cancellation: ${r.params.taskId}`);return{_meta:{},...s}}catch(i){throw i instanceof xt?i:new xt(Mt.InvalidRequest,`Failed to cancel task: ${i instanceof Error?i.message:String(i)}`)}}))}async _oncancel(e){if(!e.params.requestId)return;this._requestHandlerAbortControllers.get(e.params.requestId)?.abort(e.params.reason)}_setupTimeout(e,r,n,i,s=!1){this._timeoutInfo.set(e,{timeoutId:setTimeout(i,r),startTime:Date.now(),timeout:r,maxTotalTimeout:n,resetTimeoutOnProgress:s,onTimeout:i})}_resetTimeout(e){let r=this._timeoutInfo.get(e);if(!r)return!1;let n=Date.now()-r.startTime;if(r.maxTotalTimeout&&n>=r.maxTotalTimeout)throw this._timeoutInfo.delete(e),xt.fromError(Mt.RequestTimeout,"Maximum total timeout exceeded",{maxTotalTimeout:r.maxTotalTimeout,totalElapsed:n});return clearTimeout(r.timeoutId),r.timeoutId=setTimeout(r.onTimeout,r.timeout),!0}_cleanupTimeout(e){let r=this._timeoutInfo.get(e);r&&(clearTimeout(r.timeoutId),this._timeoutInfo.delete(e))}async connect(e){if(this._transport)throw new Error("Already connected to a transport. Call close() before connecting to a new transport, or use a separate Protocol instance per connection.");this._transport=e;let r=this.transport?.onclose;this._transport.onclose=()=>{r?.(),this._onclose()};let n=this.transport?.onerror;this._transport.onerror=s=>{n?.(s),this._onerror(s)};let i=this._transport?.onmessage;this._transport.onmessage=(s,o)=>{i?.(s,o),jx(s)||Yit(s)?this._onresponse(s):Ile(s)?this._onrequest(s,o):jit(s)?this._onnotification(s):this._onerror(new Error(`Unknown message type: ${JSON.stringify(s)}`))},await this._transport.start()}_onclose(){let e=this._responseHandlers;this._responseHandlers=new Map,this._progressHandlers.clear(),this._taskProgressTokens.clear(),this._pendingDebouncedNotifications.clear();for(let n of this._requestHandlerAbortControllers.values())n.abort();this._requestHandlerAbortControllers.clear();let r=xt.fromError(Mt.ConnectionClosed,"Connection closed");this._transport=void 0,this.onclose?.();for(let n of e.values())n(r)}_onerror(e){this.onerror?.(e)}_onnotification(e){let r=this._notificationHandlers.get(e.method)??this.fallbackNotificationHandler;r!==void 0&&Promise.resolve().then(()=>r(e)).catch(n=>this._onerror(new Error(`Uncaught error in notification handler: ${n}`)))}_onrequest(e,r){let n=this._requestHandlers.get(e.method)??this.fallbackRequestHandler,i=this._transport,s=e.params?._meta?.[$h]?.taskId;if(n===void 0){let f={jsonrpc:"2.0",id:e.id,error:{code:Mt.MethodNotFound,message:"Method not found"}};s&&this._taskMessageQueue?this._enqueueTaskMessage(s,{type:"error",message:f,timestamp:Date.now()},i?.sessionId).catch(d=>this._onerror(new Error(`Failed to enqueue error response: ${d}`))):i?.send(f).catch(d=>this._onerror(new Error(`Failed to send an error response: ${d}`)));return}let o=new AbortController;this._requestHandlerAbortControllers.set(e.id,o);let a=$it(e.params)?e.params.task:void 0,c=this._taskStore?this.requestTaskStore(e,i?.sessionId):void 0,u={signal:o.signal,sessionId:i?.sessionId,_meta:e.params?._meta,sendNotification:async f=>{if(o.signal.aborted)return;let d={relatedRequestId:e.id};s&&(d.relatedTask={taskId:s}),await this.notification(f,d)},sendRequest:async(f,d,p)=>{if(o.signal.aborted)throw new xt(Mt.ConnectionClosed,"Request was cancelled");let h={...p,relatedRequestId:e.id};s&&!h.relatedTask&&(h.relatedTask={taskId:s});let m=h.relatedTask?.taskId??s;return m&&c&&await c.updateTaskStatus(m,"input_required"),await this.request(f,d,h)},authInfo:r?.authInfo,requestId:e.id,requestInfo:r?.requestInfo,taskId:s,taskStore:c,taskRequestedTtl:a?.ttl,closeSSEStream:r?.closeSSEStream,closeStandaloneSSEStream:r?.closeStandaloneSSEStream};Promise.resolve().then(()=>{a&&this.assertTaskHandlerCapability(e.method)}).then(()=>n(e,u)).then(async f=>{if(o.signal.aborted)return;let d={result:f,jsonrpc:"2.0",id:e.id};s&&this._taskMessageQueue?await this._enqueueTaskMessage(s,{type:"response",message:d,timestamp:Date.now()},i?.sessionId):await i?.send(d)},async f=>{if(o.signal.aborted)return;let d={jsonrpc:"2.0",id:e.id,error:{code:Number.isSafeInteger(f.code)?f.code:Mt.InternalError,message:f.message??"Internal error",...f.data!==void 0&&{data:f.data}}};s&&this._taskMessageQueue?await this._enqueueTaskMessage(s,{type:"error",message:d,timestamp:Date.now()},i?.sessionId):await i?.send(d)}).catch(f=>this._onerror(new Error(`Failed to send response: ${f}`))).finally(()=>{this._requestHandlerAbortControllers.delete(e.id)})}_onprogress(e){let{progressToken:r,...n}=e.params,i=Number(r),s=this._progressHandlers.get(i);if(!s){this._onerror(new Error(`Received a progress notification for an unknown token: ${JSON.stringify(e)}`));return}let o=this._responseHandlers.get(i),a=this._timeoutInfo.get(i);if(a&&o&&a.resetTimeoutOnProgress)try{this._resetTimeout(i)}catch(c){this._responseHandlers.delete(i),this._progressHandlers.delete(i),this._cleanupTimeout(i),o(c);return}s(n)}_onresponse(e){let r=Number(e.id),n=this._requestResolvers.get(r);if(n){if(this._requestResolvers.delete(r),jx(e))n(e);else{let o=new xt(e.error.code,e.error.message,e.error.data);n(o)}return}let i=this._responseHandlers.get(r);if(i===void 0){this._onerror(new Error(`Received a response for an unknown message ID: ${JSON.stringify(e)}`));return}this._responseHandlers.delete(r),this._cleanupTimeout(r);let s=!1;if(jx(e)&&e.result&&typeof e.result=="object"){let o=e.result;if(o.task&&typeof o.task=="object"){let a=o.task;typeof a.taskId=="string"&&(s=!0,this._taskProgressTokens.set(a.taskId,r))}}if(s||this._progressHandlers.delete(r),jx(e))i(e);else{let o=xt.fromError(e.error.code,e.error.message,e.error.data);i(o)}}get transport(){return this._transport}async close(){await this._transport?.close()}async*requestStream(e,r,n){let{task:i}=n??{};if(!i){try{yield{type:"result",result:await this.request(e,r,n)}}catch(o){yield{type:"error",error:o instanceof xt?o:new xt(Mt.InternalError,String(o))}}return}let s;try{let o=await this.request(e,gv,n);if(o.task)s=o.task.taskId,yield{type:"taskCreated",task:o.task};else throw new xt(Mt.InternalError,"Task creation did not return a task");for(;;){let a=await this.getTask({taskId:s},n);if(yield{type:"taskStatus",task:a},jh(a.status)){a.status==="completed"?yield{type:"result",result:await this.getTaskResult({taskId:s},r,n)}:a.status==="failed"?yield{type:"error",error:new xt(Mt.InternalError,`Task ${s} failed`)}:a.status==="cancelled"&&(yield{type:"error",error:new xt(Mt.InternalError,`Task ${s} was cancelled`)});return}if(a.status==="input_required"){yield{type:"result",result:await this.getTaskResult({taskId:s},r,n)};return}let c=a.pollInterval??this._options?.defaultTaskPollInterval??1e3;await new Promise(u=>setTimeout(u,c)),n?.signal?.throwIfAborted()}}catch(o){yield{type:"error",error:o instanceof xt?o:new xt(Mt.InternalError,String(o))}}}request(e,r,n){let{relatedRequestId:i,resumptionToken:s,onresumptiontoken:o,task:a,relatedTask:c}=n??{};return new Promise((u,f)=>{let d=C=>{f(C)};if(!this._transport){d(new Error("Not connected"));return}if(this._options?.enforceStrictCapabilities===!0)try{this.assertCapabilityForMethod(e.method),a&&this.assertTaskCapability(e.method)}catch(C){d(C);return}n?.signal?.throwIfAborted();let p=this._requestMessageId++,h={...e,jsonrpc:"2.0",id:p};n?.onprogress&&(this._progressHandlers.set(p,n.onprogress),h.params={...e.params,_meta:{...e.params?._meta||{},progressToken:p}}),a&&(h.params={...h.params,task:a}),c&&(h.params={...h.params,_meta:{...h.params?._meta||{},[$h]:c}});let m=C=>{this._responseHandlers.delete(p),this._progressHandlers.delete(p),this._cleanupTimeout(p),this._transport?.send({jsonrpc:"2.0",method:"notifications/cancelled",params:{requestId:p,reason:String(C)}},{relatedRequestId:i,resumptionToken:s,onresumptiontoken:o}).catch(v=>this._onerror(new Error(`Failed to send cancellation: ${v}`)));let E=C instanceof xt?C:new xt(Mt.RequestTimeout,String(C));f(E)};this._responseHandlers.set(p,C=>{if(!n?.signal?.aborted){if(C instanceof Error)return f(C);try{let E=qh(r,C.result);E.success?u(E.data):f(E.error)}catch(E){f(E)}}}),n?.signal?.addEventListener("abort",()=>{m(n?.signal?.reason)});let A=n?.timeout??o0r,g=()=>m(xt.fromError(Mt.RequestTimeout,"Request timed out",{timeout:A}));this._setupTimeout(p,A,n?.maxTotalTimeout,g,n?.resetTimeoutOnProgress??!1);let y=c?.taskId;if(y){let C=E=>{let v=this._responseHandlers.get(p);v?v(E):this._onerror(new Error(`Response handler missing for side-channeled request ${p}`))};this._requestResolvers.set(p,C),this._enqueueTaskMessage(y,{type:"request",message:h,timestamp:Date.now()}).catch(E=>{this._cleanupTimeout(p),f(E)})}else this._transport.send(h,{relatedRequestId:i,resumptionToken:s,onresumptiontoken:o}).catch(C=>{this._cleanupTimeout(p),f(C)})})}async getTask(e,r){return this.request({method:"tasks/get",params:e},Vz,r)}async getTaskResult(e,r,n){return this.request({method:"tasks/result",params:e},r,n)}async listTasks(e,r){return this.request({method:"tasks/list",params:e},Zz,r)}async cancelTask(e,r){return this.request({method:"tasks/cancel",params:e},Git,r)}async notification(e,r){if(!this._transport)throw new Error("Not connected");this.assertNotificationCapability(e.method);let n=r?.relatedTask?.taskId;if(n){let a={...e,jsonrpc:"2.0",params:{...e.params,_meta:{...e.params?._meta||{},[$h]:r.relatedTask}}};await this._enqueueTaskMessage(n,{type:"notification",message:a,timestamp:Date.now()});return}if((this._options?.debouncedNotificationMethods??[]).includes(e.method)&&!e.params&&!r?.relatedRequestId&&!r?.relatedTask){if(this._pendingDebouncedNotifications.has(e.method))return;this._pendingDebouncedNotifications.add(e.method),Promise.resolve().then(()=>{if(this._pendingDebouncedNotifications.delete(e.method),!this._transport)return;let a={...e,jsonrpc:"2.0"};r?.relatedTask&&(a={...a,params:{...a.params,_meta:{...a.params?._meta||{},[$h]:r.relatedTask}}}),this._transport?.send(a,r).catch(c=>this._onerror(c))});return}let o={...e,jsonrpc:"2.0"};r?.relatedTask&&(o={...o,params:{...o.params,_meta:{...o.params?._meta||{},[$h]:r.relatedTask}}}),await this._transport.send(o,r)}setRequestHandler(e,r){let n=$le(e);this.assertRequestHandlerCapability(n),this._requestHandlers.set(n,(i,s)=>{let o=Ule(e,i);return Promise.resolve(r(o,s))})}removeRequestHandler(e){this._requestHandlers.delete(e)}assertCanSetRequestHandler(e){if(this._requestHandlers.has(e))throw new Error(`A request handler for ${e} already exists, which would be overridden`)}setNotificationHandler(e,r){let n=$le(e);this._notificationHandlers.set(n,i=>{let s=Ule(e,i);return Promise.resolve(r(s))})}removeNotificationHandler(e){this._notificationHandlers.delete(e)}_cleanupTaskProgressHandler(e){let r=this._taskProgressTokens.get(e);r!==void 0&&(this._progressHandlers.delete(r),this._taskProgressTokens.delete(e))}async _enqueueTaskMessage(e,r,n){if(!this._taskStore||!this._taskMessageQueue)throw new Error("Cannot enqueue task message: taskStore and taskMessageQueue are not configured");let i=this._options?.maxTaskQueueSize;await this._taskMessageQueue.enqueue(e,r,n,i)}async _clearTaskQueue(e,r){if(this._taskMessageQueue){let n=await this._taskMessageQueue.dequeueAll(e,r);for(let i of n)if(i.type==="request"&&Ile(i.message)){let s=i.message.id,o=this._requestResolvers.get(s);o?(o(new xt(Mt.InternalError,"Task cancelled or completed")),this._requestResolvers.delete(s)):this._onerror(new Error(`Resolver missing for request ${s} during task ${e} cleanup`))}}}async _waitForTaskUpdate(e,r){let n=this._options?.defaultTaskPollInterval??1e3;try{let i=await this._taskStore?.getTask(e);i?.pollInterval&&(n=i.pollInterval)}catch{}return new Promise((i,s)=>{if(r.aborted){s(new xt(Mt.InvalidRequest,"Request cancelled"));return}let o=setTimeout(i,n);r.addEventListener("abort",()=>{clearTimeout(o),s(new xt(Mt.InvalidRequest,"Request cancelled"))},{once:!0})})}requestTaskStore(e,r){let n=this._taskStore;if(!n)throw new Error("No task store configured");return{createTask:async i=>{if(!e)throw new Error("No request provided");return await n.createTask(i,e.id,{method:e.method,params:e.params},r)},getTask:async i=>{let s=await n.getTask(i,r);if(!s)throw new xt(Mt.InvalidParams,"Failed to retrieve task: Task not found");return s},storeTaskResult:async(i,s,o)=>{await n.storeTaskResult(i,s,o,r);let a=await n.getTask(i,r);if(a){let c=Vx.parse({method:"notifications/tasks/status",params:a});await this.notification(c),jh(a.status)&&this._cleanupTaskProgressHandler(i)}},getTaskResult:i=>n.getTaskResult(i,r),updateTaskStatus:async(i,s,o)=>{let a=await n.getTask(i,r);if(!a)throw new xt(Mt.InvalidParams,`Task "${i}" not found - it may have been cleaned up`);if(jh(a.status))throw new xt(Mt.InvalidParams,`Cannot update task "${i}" from terminal status "${a.status}" to "${s}". Terminal states (completed, failed, cancelled) cannot transition to other states.`);await n.updateTaskStatus(i,s,o,r);let c=await n.getTask(i,r);if(c){let u=Vx.parse({method:"notifications/tasks/status",params:c});await this.notification(u),jh(c.status)&&this._cleanupTaskProgressHandler(i)}},listTasks:i=>n.listTasks(i,r)}}};function ost(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function ast(t,e){let r={...t};for(let n in e){let i=n,s=e[i];if(s===void 0)continue;let o=r[i];ost(o)&&ost(s)?r[i]={...o,...s}:r[i]=s}return r}var Gat=Yr(Dde(),1),Vat=Yr(Hat(),1);function Z_r(){let t=new Gat.default({strict:!1,validateFormats:!0,validateSchema:!1,allErrors:!0});return(0,Vat.default)(t),t}var Y8=class{constructor(e){this._ajv=e??Z_r()}getValidator(e){let r="$id"in e&&typeof e.$id=="string"?this._ajv.getSchema(e.$id)??this._ajv.compile(e):this._ajv.compile(e);return n=>r(n)?{valid:!0,data:n,errorMessage:void 0}:{valid:!1,data:void 0,errorMessage:this._ajv.errorsText(r.errors)}}};var z8=class{constructor(e){this._server=e}requestStream(e,r,n){return this._server.requestStream(e,r,n)}createMessageStream(e,r){let n=this._server.getClientCapabilities();if((e.tools||e.toolChoice)&&!n?.sampling?.tools)throw new Error("Client does not support sampling tools capability.");if(e.messages.length>0){let i=e.messages[e.messages.length-1],s=Array.isArray(i.content)?i.content:[i.content],o=s.some(f=>f.type==="tool_result"),a=e.messages.length>1?e.messages[e.messages.length-2]:void 0,c=a?Array.isArray(a.content)?a.content:[a.content]:[],u=c.some(f=>f.type==="tool_use");if(o){if(s.some(f=>f.type!=="tool_result"))throw new Error("The last message must contain only tool_result content if any is present");if(!u)throw new Error("tool_result blocks are not matching any tool_use from the previous message")}if(u){let f=new Set(c.filter(p=>p.type==="tool_use").map(p=>p.id)),d=new Set(s.filter(p=>p.type==="tool_result").map(p=>p.toolUseId));if(f.size!==d.size||![...f].every(p=>d.has(p)))throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return this.requestStream({method:"sampling/createMessage",params:e},Kx,r)}elicitInputStream(e,r){let n=this._server.getClientCapabilities(),i=e.mode??"form";switch(i){case"url":{if(!n?.elicitation?.url)throw new Error("Client does not support url elicitation.");break}case"form":{if(!n?.elicitation?.form)throw new Error("Client does not support form elicitation.");break}}let s=i==="form"&&e.mode===void 0?{...e,mode:"form"}:e;return this.requestStream({method:"elicitation/create",params:s},Ev,r)}async getTask(e,r){return this._server.getTask({taskId:e},r)}async getTaskResult(e,r,n){return this._server.getTaskResult({taskId:e},r,n)}async listTasks(e,r){return this._server.listTasks(e?{cursor:e}:void 0,r)}async cancelTask(e,r){return this._server.cancelTask({taskId:e},r)}};function Jat(t,e,r){if(!t)throw new Error(`${r} does not support task creation (required for ${e})`);switch(e){case"tools/call":if(!t.tools?.call)throw new Error(`${r} does not support task creation for tools/call (required for ${e})`);break;default:break}}function Wat(t,e,r){if(!t)throw new Error(`${r} does not support task creation (required for ${e})`);switch(e){case"sampling/createMessage":if(!t.sampling?.createMessage)throw new Error(`${r} does not support task creation for sampling/createMessage (required for ${e})`);break;case"elicitation/create":if(!t.elicitation?.create)throw new Error(`${r} does not support task creation for elicitation/create (required for ${e})`);break;default:break}}var H8=class extends c8{constructor(e,r){super(r),this._serverInfo=e,this._loggingLevels=new Map,this.LOG_LEVEL_SEVERITY=new Map(Zx.options.map((n,i)=>[n,i])),this.isMessageIgnored=(n,i)=>{let s=this._loggingLevels.get(i);return s?this.LOG_LEVEL_SEVERITY.get(n)<this.LOG_LEVEL_SEVERITY.get(s):!1},this._capabilities=r?.capabilities??{},this._instructions=r?.instructions,this._jsonSchemaValidator=r?.jsonSchemaValidator??new Y8,this.setRequestHandler(Dle,n=>this._oninitialize(n)),this.setNotificationHandler(Sle,()=>this.oninitialized?.()),this._capabilities.logging&&this.setRequestHandler(Lle,async(n,i)=>{let s=i.sessionId||i.requestInfo?.headers["mcp-session-id"]||void 0,{level:o}=n.params,a=Zx.safeParse(o);return a.success&&this._loggingLevels.set(s,a.data),{}})}get experimental(){return this._experimental||(this._experimental={tasks:new z8(this)}),this._experimental}registerCapabilities(e){if(this.transport)throw new Error("Cannot register capabilities after connecting to transport");this._capabilities=ast(this._capabilities,e)}setRequestHandler(e,r){let i=a8(e)?.method;if(!i)throw new Error("Schema is missing a method literal");let s;if(vv(i)){let a=i;s=a._zod?.def?.value??a.value}else{let a=i;s=a._def?.value??a.value}if(typeof s!="string")throw new Error("Schema method literal must be a string");if(s==="tools/call"){let a=async(c,u)=>{let f=qh(Wx,c);if(!f.success){let m=f.error instanceof Error?f.error.message:String(f.error);throw new xt(Mt.InvalidParams,`Invalid tools/call request: ${m}`)}let{params:d}=f.data,p=await Promise.resolve(r(c,u));if(d.task){let m=qh(gv,p);if(!m.success){let A=m.error instanceof Error?m.error.message:String(m.error);throw new xt(Mt.InvalidParams,`Invalid task creation result: ${A}`)}return m.data}let h=qh(Xz,p);if(!h.success){let m=h.error instanceof Error?h.error.message:String(h.error);throw new xt(Mt.InvalidParams,`Invalid tools/call result: ${m}`)}return h.data};return super.setRequestHandler(e,a)}return super.setRequestHandler(e,r)}assertCapabilityForMethod(e){switch(e){case"sampling/createMessage":if(!this._clientCapabilities?.sampling)throw new Error(`Client does not support sampling (required for ${e})`);break;case"elicitation/create":if(!this._clientCapabilities?.elicitation)throw new Error(`Client does not support elicitation (required for ${e})`);break;case"roots/list":if(!this._clientCapabilities?.roots)throw new Error(`Client does not support listing roots (required for ${e})`);break;case"ping":break}}assertNotificationCapability(e){switch(e){case"notifications/message":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${e})`);break;case"notifications/resources/updated":case"notifications/resources/list_changed":if(!this._capabilities.resources)throw new Error(`Server does not support notifying about resources (required for ${e})`);break;case"notifications/tools/list_changed":if(!this._capabilities.tools)throw new Error(`Server does not support notifying of tool list changes (required for ${e})`);break;case"notifications/prompts/list_changed":if(!this._capabilities.prompts)throw new Error(`Server does not support notifying of prompt list changes (required for ${e})`);break;case"notifications/elicitation/complete":if(!this._clientCapabilities?.elicitation?.url)throw new Error(`Client does not support URL elicitation (required for ${e})`);break;case"notifications/cancelled":break;case"notifications/progress":break}}assertRequestHandlerCapability(e){if(this._capabilities)switch(e){case"completion/complete":if(!this._capabilities.completions)throw new Error(`Server does not support completions (required for ${e})`);break;case"logging/setLevel":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${e})`);break;case"prompts/get":case"prompts/list":if(!this._capabilities.prompts)throw new Error(`Server does not support prompts (required for ${e})`);break;case"resources/list":case"resources/templates/list":case"resources/read":if(!this._capabilities.resources)throw new Error(`Server does not support resources (required for ${e})`);break;case"tools/call":case"tools/list":if(!this._capabilities.tools)throw new Error(`Server does not support tools (required for ${e})`);break;case"tasks/get":case"tasks/list":case"tasks/result":case"tasks/cancel":if(!this._capabilities.tasks)throw new Error(`Server does not support tasks capability (required for ${e})`);break;case"ping":case"initialize":break}}assertTaskCapability(e){Wat(this._clientCapabilities?.tasks?.requests,e,"Client")}assertTaskHandlerCapability(e){this._capabilities&&Jat(this._capabilities.tasks?.requests,e,"Server")}async _oninitialize(e){let r=e.params.protocolVersion;return this._clientCapabilities=e.params.capabilities,this._clientVersion=e.params.clientInfo,{protocolVersion:Lit.includes(r)?r:Cle,capabilities:this.getCapabilities(),serverInfo:this._serverInfo,...this._instructions&&{instructions:this._instructions}}}getClientCapabilities(){return this._clientCapabilities}getClientVersion(){return this._clientVersion}getCapabilities(){return this._capabilities}async ping(){return this.request({method:"ping"},jz)}async createMessage(e,r){if((e.tools||e.toolChoice)&&!this._clientCapabilities?.sampling?.tools)throw new Error("Client does not support sampling tools capability.");if(e.messages.length>0){let n=e.messages[e.messages.length-1],i=Array.isArray(n.content)?n.content:[n.content],s=i.some(u=>u.type==="tool_result"),o=e.messages.length>1?e.messages[e.messages.length-2]:void 0,a=o?Array.isArray(o.content)?o.content:[o.content]:[],c=a.some(u=>u.type==="tool_use");if(s){if(i.some(u=>u.type!=="tool_result"))throw new Error("The last message must contain only tool_result content if any is present");if(!c)throw new Error("tool_result blocks are not matching any tool_use from the previous message")}if(c){let u=new Set(a.filter(d=>d.type==="tool_use").map(d=>d.id)),f=new Set(i.filter(d=>d.type==="tool_result").map(d=>d.toolUseId));if(u.size!==f.size||![...u].every(d=>f.has(d)))throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return e.tools?this.request({method:"sampling/createMessage",params:e},Mle,r):this.request({method:"sampling/createMessage",params:e},Kx,r)}async elicitInput(e,r){switch(e.mode??"form"){case"url":{if(!this._clientCapabilities?.elicitation?.url)throw new Error("Client does not support url elicitation.");let i=e;return this.request({method:"elicitation/create",params:i},Ev,r)}case"form":{if(!this._clientCapabilities?.elicitation?.form)throw new Error("Client does not support form elicitation.");let i=e.mode==="form"?e:{...e,mode:"form"},s=await this.request({method:"elicitation/create",params:i},Ev,r);if(s.action==="accept"&&s.content&&i.requestedSchema)try{let a=this._jsonSchemaValidator.getValidator(i.requestedSchema)(s.content);if(!a.valid)throw new xt(Mt.InvalidParams,`Elicitation response content does not match requested schema: ${a.errorMessage}`)}catch(o){throw o instanceof xt?o:new xt(Mt.InternalError,`Error validating elicitation response: ${o instanceof Error?o.message:String(o)}`)}return s}}}createElicitationCompletionNotifier(e,r){if(!this._clientCapabilities?.elicitation?.url)throw new Error("Client does not support URL elicitation (required for notifications/elicitation/complete)");return()=>this.notification({method:"notifications/elicitation/complete",params:{elicitationId:e}},r)}async listRoots(e,r){return this.request({method:"roots/list",params:e},Ple,r)}async sendLoggingMessage(e,r){if(this._capabilities.logging&&!this.isMessageIgnored(e.level,r))return this.notification({method:"notifications/message",params:e})}async sendResourceUpdated(e){return this.notification({method:"notifications/resources/updated",params:e})}async sendResourceListChanged(){return this.notification({method:"notifications/resources/list_changed"})}async sendToolListChanged(){return this.notification({method:"notifications/tools/list_changed"})}async sendPromptListChanged(){return this.notification({method:"notifications/prompts/list_changed"})}};eT();Hu();Hu();eT();var K_r=["search_","list_","get_","view_","describe_"];function X_r(t){return K_r.some(e=>t.startsWith(e))}function NT(t){if(X_r(t.tool)&&bv(t.tool))return t}function Zat(t,e,r){if(!(t instanceof Oo))return;let n=t.message.toLowerCase(),i=t.status;if(i===404||n.includes("not found")){if(typeof r.contactResourceId=="string"&&n.includes("contact"))return NT({tool:"search_contacts",arguments:{},reason:`Contact ${r.contactResourceId} not found. Search by name to find the correct resourceId before retrying.`});let o=/^(get|update|delete|finalize|pay)_(.+)$/.exec(e);if(o){let a=o[2],c=`search_${a}s`,u=typeof r.resourceId=="string"?r.resourceId:void 0;return NT({tool:c,arguments:{},reason:`${a} ${u??""} not found. Search to locate the correct resourceId, then retry.`.trim()})}}if(i===422&&(n.includes("accountresourceid")||n.includes("account resource id")))return NT({tool:"search_accounts",arguments:{},reason:"Line item missing accountResourceId. Search for the right GL account first (e.g. by name or accountType), then retry with the resourceId on each line item."});if(i===422&&(n.includes("duplicate")||n.includes("already exists"))){let o=typeof r.reference=="string"?r.reference:void 0;if(o){let a=/^create_(.+)$/.exec(e);if(a){let c=a[1];return NT({tool:`search_${c}s`,arguments:{filter:{reference:{eq:o}}},reason:`Reference "${o}" already exists in ${c}s. Look up the existing record before deciding whether to update it or use a new reference.`})}}}if(i===422&&(n.includes("taxprofileresourceid")||n.includes("tax profile")||n.includes("tax_profile"))&&(n.includes("direction")||n.includes("appliesto")||n.includes("applies to")||n.includes("sale")||n.includes("purchase")))return NT({tool:"search_tax_profiles",arguments:{},reason:'Tax profile rejected \u2014 direction mismatch. Use search_tax_profiles with the correct appliesTo direction ("sale" for invoices, "purchase" for bills) before retrying.'})}function eDr(t){switch(t){case 401:return"Invalid or missing API key. Run `clio auth add` or set JAZ_API_KEY.";case 403:return"Insufficient permissions for this operation.";case 404:return"Resource not found \u2014 check the resourceId. Use a search/list tool to look it up.";case 409:return"Conflict \u2014 resource may have been modified. Re-fetch and retry.";case 422:return"Validation error \u2014 check field values against the tool description.";case 429:return"Rate limited \u2014 wait a moment and retry.";default:return""}}function Kat(t,e={}){if(t instanceof Oo){let n=eDr(t.status),i={error:t.message,status:t.status,endpoint:t.endpoint,...n?{hint:n}:{}};if(e.toolName&&e.input){let s=Zat(t,e.toolName,e.input);s&&(i.repair=s)}return i}return{error:t instanceof Error?t.message:String(t)}}function Xat(t,e){if(t.readOnly)return{valid:!0,errors:[]};let r=[];for(let n of t.required){let i=e[n];if(i==null){r.push(`Missing required field: ${n}`);continue}typeof i=="string"&&i.trim()===""&&r.push(`Required field "${n}" is empty`)}for(let[n,i]of Object.entries(e)){if(i==null)continue;let s=t.params[n];if(!s)continue;let o=tDr(n,i,s);o&&r.push(o),s.enum&&typeof i=="string"&&(s.enum.includes(i)||r.push(`Field "${n}" value "${i}" not in allowed values: ${s.enum.join(", ")}`))}return{valid:r.length===0,errors:r}}function tDr(t,e,r){switch(r.type){case"string":if(typeof e!="string")return`Field "${t}" expected string, got ${typeof e}`;break;case"number":if(typeof e!="number"||!Number.isFinite(e))return`Field "${t}" expected finite number, got ${typeof e=="number"?"non-finite":typeof e}`;break;case"boolean":if(typeof e!="boolean")return`Field "${t}" expected boolean, got ${typeof e}`;break;case"array":if(!Array.isArray(e))return`Field "${t}" expected array, got ${typeof e}`;break;case"object":if(typeof e!="object"||Array.isArray(e))return`Field "${t}" expected object, got ${Array.isArray(e)?"array":typeof e}`;break}return null}tT();o8();Hu();Tm();Oce();import{readFileSync as rDr,readdirSync as nDr,statSync as iDr}from"node:fs";import{dirname as tct,join as Kh,relative as sDr}from"node:path";import{fileURLToPath as rct}from"node:url";function oDr(t,e){let r;try{r=iDr(t)}catch{return[]}if(!r.isDirectory())return[];let n=[],i=20,s=(o,a)=>{if(a>i)return;let c;try{c=nDr(o,{withFileTypes:!0})}catch{return}for(let u of c){let f=Kh(o,u.name);if(u.isDirectory())s(f,a+1);else if(u.isFile()&&u.name.endsWith(".md")){let d=sDr(t,f).split(/[\\/]/).join("/");(!e||!e(d))&&n.push(d)}}};return s(t,0),n.sort()}function ect(t){let e=t.fileFilter??(()=>!0);return oDr(t.rootDir,n=>!e(n)).map(n=>{let i=t.uriPathBuilder?t.uriPathBuilder(n):n.replace(/\.md$/,"");return{uri:`${t.uriPrefix}/${i}`,name:t.nameBuilder(n),description:t.descriptionBuilder?.(n),mimeType:"text/markdown",filePath:Kh(t.rootDir,n)}})}function aDr(){let t=rct(import.meta.url),e=tct(t);return Fce([Kh(e,"..","..","..","assets","skills"),Kh(e,"..","..","..","..","assets","skills"),Kh(e,"skills")])}function cDr(){let t=rct(import.meta.url),e=tct(t);return Fce([Kh(e,"..","..","..","help-center-mirror"),Kh(e,"..","..","..","assets","skills","api","help-center-mirror"),Kh(e,"help-center-mirror")])}var uDr=["api","cli","conversion","jobs","transaction-recipes"],lDr={api:"Jaz REST API rules: every endpoint, field name, error code, production gotchas.",cli:"Jaz CLI commands, auth, calculators, jobs.",conversion:"Migration from Xero, QuickBooks, Sage, MYOB, or Excel exports into Jaz.",jobs:"12 recurring accounting workflow playbooks (close, reconciliation, GST/VAT, etc.).","transaction-recipes":"16 IFRS-compliant transaction recipes plus 13 financial calculators."};function fDr(t){if(t.includes("/help-center-mirror/"))return!1;let e=t.split("/")[0];return uDr.includes(e)}function dDr(t){let e=t.split("/"),r=e[0];if(e.length===2&&e[1]==="SKILL.md")return`Jaz ${r} skill`;if(e[1]==="references"){let n=e.slice(2).join("/").replace(/\.md$/,"");return`Jaz ${r} reference: ${n}`}return`Jaz ${r}: ${t}`}function pDr(t){let e=t.split("/")[0];return lDr[e]}function hDr(t){return!t.includes("/")}function mDr(t){return`Jaz help center: ${t.replace(/\.md$/,"").split("-").map(n=>n[0]?.toUpperCase()+n.slice(1)).join(" ")}`}var Fde=null,Ode=null;function Qde(){if(Fde)return Fde;let t=aDr(),e=cDr(),r=[];return t&&r.push(...ect({rootDir:t,uriPrefix:"jaz://skill",fileFilter:fDr,nameBuilder:dDr,descriptionBuilder:pDr,uriPathBuilder:n=>{let i=n.split("/");return i.length===2&&i[1]==="SKILL.md"?i[0]:n.replace(/\.md$/,"")}})),e&&r.push(...ect({rootDir:e,uriPrefix:"jaz://help-center",fileFilter:hDr,nameBuilder:mDr,descriptionBuilder:()=>"Jaz help center article. Same corpus search_help_center indexes."})),Fde=r,Ode=new Map(r.map(n=>[n.uri,n])),r}function nct(t){Ode||Qde();let e=Ode.get(t);if(!e)throw new Error(`Resource not found: ${t}`);let r=rDr(e.filePath,"utf-8");return{mimeType:e.mimeType,text:r}}var ADr=new Set(["close_jobs","operational_jobs","help_center"]),Mde="Calculators, blueprints, and help center search work without an account.",Pde="Get an API key or token from jaz.ai";function Lde(t,e){return!!(ADr.has(t)||t==="recipes"&&e==="plan_recipe")}function gDr(t,e){return new Qs({mode:"pat",token:t,orgId:e})}async function $de(t,e=5e3){let r=new Map,n=[],i=async a=>{let c,u=new Promise(f=>{c=setTimeout(()=>f(null),e)});try{return await Promise.race([a,u])}finally{c&&clearTimeout(c)}},s=t.map(a=>({auth:a,client:new Qs(a)})),o=s[0]?.client??null;return await Promise.all(s.map(async({auth:a,client:c})=>{try{let u=await i(da(c));if(u)r.set(u.resourceId,{name:u.name,resourceId:u.resourceId,currency:u.currency,client:c});else{let f=a.mode==="direct"?"api-key":a.mode;n.push(`Org lookup returned empty (${f}).`)}}catch(u){let f=a.mode==="direct"?"api-key":a.mode;n.push(`Org lookup failed (${f}): ${u instanceof Error?u.message:"unknown"}`)}})),{orgMap:r,primaryClient:o,errors:n}}function ict(t){let e=new H8({name:"jaz-ai",version:t.version},{capabilities:{tools:{},resources:{}},instructions:t.instructions});return e.setRequestHandler(Qle,async()=>{if(t.flatMode){let n=Xx().reduce((i,s)=>{try{let o=ly(s);i.push({name:o.name,description:o.description,inputSchema:o.input_schema,annotations:s8(s)})}catch(o){let a=o instanceof Error?o.message:String(o);process.stderr.write(`[jaz-mcp] flat-mode: skipping malformed tool '${s.name}': ${a}
1161
- `)}return i},[]);return t.isMultiOrg&&t.orgMap.size>0&&n.unshift({name:rT.name,description:rT.description,inputSchema:rT.inputSchema,annotations:{readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0}}),{tools:n}}return{tools:(t.isMultiOrg&&t.orgMap.size>0?[...ad,rT]:ad).map(n=>({name:n.name,description:n.description,inputSchema:n.inputSchema,annotations:{readOnlyHint:n.name!=="execute_tool",openWorldHint:!0}}))}}),e.setRequestHandler(Rle,async()=>({resources:Qde().map(({uri:r,name:n,description:i,mimeType:s})=>({uri:r,name:n,...i?{description:i}:{},mimeType:s}))})),e.setRequestHandler(Tle,async r=>{let n=r.params.uri;try{let{mimeType:i,text:s}=nct(n);return{contents:[{uri:n,mimeType:i,text:s}]}}catch(i){throw new xt(Mt.InvalidRequest,i instanceof Error?i.message:`Resource not found: ${n}`)}}),e.setRequestHandler(Wx,async r=>{let n=r.params.name,i=r.params.arguments??{};if(n==="search_tools"){let o=i.query;if(o!==void 0&&typeof o!="string")return{content:[{type:"text",text:JSON.stringify({error:"Invalid `query` parameter. Expected string."})}],isError:!0};let a=nst(o??"");return{content:[{type:"text",text:JSON.stringify(a,null,2)}]}}if(n==="describe_tools"){let o=ist(i.tools);return{content:[{type:"text",text:JSON.stringify(o,null,2)}]}}if(n==="list_organizations"){if(!t.isMultiOrg||t.orgMap.size===0)return{content:[{type:"text",text:JSON.stringify({error:"list_organizations is only available in multi-org mode (PAT or multiple API keys)."})}],isError:!0};if(t.authConfigs[0]?.mode==="pat")try{let o=await $de(t.authConfigs,5e3);if(o.orgMap.size>0){t.orgMap.clear();for(let[a,c]of o.orgMap)t.orgMap.set(a,c)}}catch(o){process.stderr.write(`warning: org refresh failed, using cached list: ${o instanceof Error?o.message:"unknown"}
1161
+ `)}return i},[]);return t.isMultiOrg&&t.orgMap.size>0&&n.unshift({name:rT.name,description:rT.description,inputSchema:rT.inputSchema,annotations:{readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1}}),{tools:n}}return{tools:(t.isMultiOrg&&t.orgMap.size>0?[...ad,rT]:ad).map(n=>({name:n.name,description:n.description,inputSchema:n.inputSchema,annotations:{readOnlyHint:n.name!=="execute_tool",openWorldHint:!1}}))}}),e.setRequestHandler(Rle,async()=>({resources:Qde().map(({uri:r,name:n,description:i,mimeType:s})=>({uri:r,name:n,...i?{description:i}:{},mimeType:s}))})),e.setRequestHandler(Tle,async r=>{let n=r.params.uri;try{let{mimeType:i,text:s}=nct(n);return{contents:[{uri:n,mimeType:i,text:s}]}}catch(i){throw new xt(Mt.InvalidRequest,i instanceof Error?i.message:`Resource not found: ${n}`)}}),e.setRequestHandler(Wx,async r=>{let n=r.params.name,i=r.params.arguments??{};if(n==="search_tools"){let o=i.query;if(o!==void 0&&typeof o!="string")return{content:[{type:"text",text:JSON.stringify({error:"Invalid `query` parameter. Expected string."})}],isError:!0};let a=nst(o??"");return{content:[{type:"text",text:JSON.stringify(a,null,2)}]}}if(n==="describe_tools"){let o=ist(i.tools);return{content:[{type:"text",text:JSON.stringify(o,null,2)}]}}if(n==="list_organizations"){if(!t.isMultiOrg||t.orgMap.size===0)return{content:[{type:"text",text:JSON.stringify({error:"list_organizations is only available in multi-org mode (PAT or multiple API keys)."})}],isError:!0};if(t.authConfigs[0]?.mode==="pat")try{let o=await $de(t.authConfigs,5e3);if(o.orgMap.size>0){t.orgMap.clear();for(let[a,c]of o.orgMap)t.orgMap.set(a,c)}}catch(o){process.stderr.write(`warning: org refresh failed, using cached list: ${o instanceof Error?o.message:"unknown"}
1162
1162
  `)}return{content:[{type:"text",text:JSON.stringify({organizations:[...t.orgMap.values()].map(({name:o,resourceId:a,currency:c})=>({name:o,resourceId:a,currency:c}))},null,2)}]}}if(n==="execute_tool"){let o=i.tool,a=i.arguments??{},c=i.org_id;if(!o)return{content:[{type:"text",text:JSON.stringify({error:"Missing `tool` parameter.",hint:'Call search_tools first, then describe_tools, then execute_tool with { tool: "tool_name", arguments: {...} }.'})}],isError:!0};let u=bv(o);if(!u)throw new xt(Mt.MethodNotFound,`Unknown tool: ${o}. Use search_tools to find available tools.`);if(!t.primaryClient&&!Lde(u.group,u.name))return{content:[{type:"text",text:JSON.stringify({error:"No API key configured.",hint:`${Pde} to use API tools. ${Mde}`})}],isError:!0};let f=t.primaryClient;if(t.isMultiOrg&&!Lde(u.group,u.name)){if(t.orgMap.size===0)return{content:[{type:"text",text:JSON.stringify({error:"Organization discovery is unavailable, so this tenant-scoped tool cannot be run safely.",hint:"Retry once organizations resolve, or call list_organizations to refresh."})}],isError:!0};if(!c)return{content:[{type:"text",text:JSON.stringify({error:"Missing org_id. Multi-org mode requires an explicit organization for API tools.",hint:"Call list_organizations to see available orgs, then include org_id in execute_tool.",organizations:[...t.orgMap.values()].map(({name:m,resourceId:A})=>({name:m,resourceId:A}))})}],isError:!0};let p=t.orgMap.get(c);if(!p)return{content:[{type:"text",text:JSON.stringify({error:`Unknown org_id: "${c}".`,hint:"Call list_organizations to refresh the org list.",available:[...t.orgMap.values()].map(({name:m,resourceId:A})=>({name:m,resourceId:A}))})}],isError:!0};let h=t.authConfigs[0];f=h?.mode==="pat"?gDr(h.token,c):p.client}let d=Xat(u,a);if(!d.valid)return{content:[{type:"text",text:JSON.stringify({error:`Validation: ${d.errors.join("; ")}`,hint:"Check required fields and types via describe_tools."})}],isError:!0};try{if(!f&&!Lde(u.group,u.name))return{content:[{type:"text",text:JSON.stringify({error:"No API client available.",hint:"Set JAZ_API_KEY or pass --api-key."})}],isError:!0};let p={client:f},h=await u.execute(p,a);return{content:[{type:"text",text:typeof h=="string"?h:JSON.stringify(h,null,2)}]}}catch(p){return{content:[{type:"text",text:JSON.stringify(Kat(p,{toolName:u.name,input:a}))}],isError:!0}}}let s=t.isMultiOrg&&t.orgMap.size>0?"search_tools, describe_tools, execute_tool, list_organizations":"search_tools, describe_tools, execute_tool";throw new xt(Mt.MethodNotFound,`Unknown tool: ${n}. Available tools: ${s}.`)}),e}function sct(t){let e=Uh.map(i=>i.name).join(", "),r=t.hasAuth?"All API tools hit api.getjaz.com using the configured credentials.":`${Pde} to bring Jaz into Claude for real accounting and finance work. ${Mde}`,n=t.isMultiOrg&&t.orgs.length>0?["","MULTI-ORG MODE:",`You have access to ${t.orgs.length} organization(s):`,...t.orgs.map(i=>` - ${i.name} (org_id: ${i.resourceId}, ${i.currency})`),"","RULES:","1. Every execute_tool call for API tools MUST include org_id.","2. If the user mentions an org by name, match it to the org_id above.",`3. If the user hasn't specified an org, ask: "Which organization?"`,"4. Once the user picks an org, use it for all subsequent calls until they say otherwise.",'5. If the user says "switch to [org]", update the active org for subsequent calls.','6. Always confirm the org on the first tool call: "Using [Org Name]."','7. For cross-org queries (e.g. "compare Acme and Beta"), make separate execute_tool calls with different org_ids.',"8. Call list_organizations to refresh the org list if needed."]:[];return[`Jaz accounting platform \u2014 ${Nc.length} tools across ${Uh.length} namespaces.`,t.orgDisplay,"","WORKFLOW: search_tools \u2192 describe_tools \u2192 execute_tool.","1. Call search_tools with a keyword to find relevant tools.","2. Call describe_tools with tool names to get full parameter schemas.","3. Call execute_tool with the tool name and arguments to run it.","",`Namespaces: ${e}.`,"","Key API rules (apply to all tools):","- All IDs are `resourceId` (never `id`).","- All transaction dates are `valueDate` (not issueDate/invoiceDate/date). Format: YYYY-MM-DD.","- Line item text field is `name` (not `description`).","- `saveAsDraft` defaults to false \u2014 omitting it finalizes the transaction.","- Response dates are epoch milliseconds (convert with new Date(ms)).","- Pagination: `limit`/`offset` (not page/size). `offset` is a 0-indexed PAGE NUMBER, not a row-skip (offset=1 = second page of `limit` rows). Search sort is required when offset present.","- Create responses return only `{ resourceId }` \u2014 GET the full entity after creation.","","Offline tools (no auth needed): close-procedure blueprints (close_procedures, operational_jobs), plan_recipe calculator, and search_help_center for the Jaz help center.",r,...n].filter(i=>i!==void 0).join(`
1163
1163
  `)}function oct(t){let e=(process.env[t]??"").trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}tT();function pct(t){t.command("mcp").description("Start MCP stdio server for Claude Code / Cowork").option("--api-key <key>","API key, PAT, or comma-separated keys (overrides stored/env)").action(async e=>{let r=[];try{r=o4(e.apiKey)}catch(C){let E=C instanceof Error?C.message:String(C);process.stderr.write(`jaz-ai: ${E} (continuing in offline mode)
1164
1164
  `)}let n=t.version()??"0.0.0",i=new Map,s=null,o=r.length>1||r[0]?.mode==="pat";if(r.length>0){let C=await $de(r);i=C.orgMap,s=C.primaryClient;for(let E of C.errors)process.stderr.write(`warning: ${E}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jaz-clio",
3
- "version": "5.13.6",
3
+ "version": "5.13.7",
4
4
  "description": "Clio: Command Line Interface Operator for Jaz AI.",
5
5
  "type": "module",
6
6
  "bin": {