@adhd/apigen-core-client 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,34 @@
1
+ ## 0.3.1 (2026-09-24)
2
+
3
+
4
+ ### 🚀 Features
5
+
6
+ - **apigen:** schema-driven worked examples for MCP tool descriptions + validation errors
7
+
8
+ - **backlog:** INTERFACE_v2 consolidation — six-verb surface, web UI (search/stats/batch/edit), stats API (citationCount, closedAt, summary scope + window)
9
+
10
+
11
+ ### 🩹 Fixes
12
+
13
+ - **apigen-cli:** restore 2768 files mass-deleted by 0117eb22 (BUG-APIGEN-052)
14
+
15
+ - **apigen-core-client:** hoist nested defs for return types and batch schemas
16
+
17
+ - **apigen-core-client:** close Path-2 object schemas with additionalProperties, index-signature aware
18
+
19
+ - **backlog:** unblock backlog:build — author/reporter TS2339 + wire MCP identity
20
+
21
+ - **apigen-cli:** batch nested-input CLI/HTTP wiring, sandbox isolation leaks, morph-walk index-signature regression
22
+
23
+ - **apigen:** audit fixes — S-18/S-19/C-20/C-21/S-20, java mvn race, union-encoder envelope, lazy heavy-dep loading
24
+
25
+
26
+ ### ❤️ Thank You
27
+
28
+ - parity-harness-self-test
29
+ - pseudosky
30
+ - Sky
31
+
1
32
  ## 0.2.2 (2026-07-30)
2
33
 
3
34
 
package/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var Ke=Object.create;var ue=Object.defineProperty;var ze=Object.getOwnPropertyDescriptor;var Be=Object.getOwnPropertyNames;var De=Object.getPrototypeOf,We=Object.prototype.hasOwnProperty;var Ue=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Be(t))!We.call(e,n)&&n!==r&&ue(e,n,{get:()=>t[n],enumerable:!(o=ze(t,n))||o.enumerable});return e};var Ge=(e,t,r)=>(r=e!=null?Ke(De(e)):{},Ue(t||!e||!e.__esModule?ue(r,"default",{value:e,enumerable:!0}):r,e));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const N=require("ts-morph"),Ze=require("node:fs"),G=require("node:path"),R=require("ts-json-schema-generator");function He(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const Je=He(G);function le(e){return{raw:e,words:e.split(/(?=[A-Z])|[-_]/).map(t=>t.toLowerCase()).filter(Boolean)}}function ve(e,t,r={}){const o=e.split("/");if(o.length<2||o.some(l=>l.length===0))throw new Error(`syntheticOp: id "${e}" must be "<namespace>/<path...>" with non-empty segments`);const[n,...i]=o,s=n.replace(/^_+/,""),a=r.kind??"action",c={id:e,host:t.host,namespace:le(s),path:i.map(le),kind:a,async:r.async??!1,streaming:r.streaming??!1,safe:r.safe??a==="query",input:r.input??{},output:r.output??{},envelope:r.envelope??{},typeText:r.typeText??null};return r.hasCtx!==void 0&&(c.hasCtx=r.hasCtx),r.transports!==void 0&&(c.transports=r.transports),c}const xe=Symbol.for("adhd.apigen.extraction-session");function ie(e,t){const r=[...e.getImportDeclarations().map(o=>o.getModuleSpecifierSourceFile()),...e.getExportDeclarations().map(o=>o.getModuleSpecifierSourceFile())];for(const o of r){if(!o)continue;const n=o.getFilePath();if(!n.includes("/node_modules/")&&!t.has(n)){t.add(n);try{o.refreshFromFileSystemSync()}catch{}ie(o,t)}}}function we(e){try{const t=Ze.statSync(e);return`${t.mtimeMs}:${t.size}`}catch{return"nostat"}}const M=new Map,ee=new Map;function Qe(e,t,r){const o=t??"",n=M.get(o);let i=r;if(n&&n.fileVersions.size>0){const c=[r],l=[...n.fileVersions.entries()].sort(([u],[f])=>u.localeCompare(f));for(const[u,f]of l)u!==e&&c.push(`${u}:${f}`);i=c.join("|")}const s=`${e}\0${t??""}`;let a=ee.get(s);return(!a||a.version!==i)&&(a={version:i,schemas:new Map},ee.set(s,a)),a.schemas}function Xe(){M.clear(),ee.clear(),B=void 0}let B;function Ye(){return B||(B=new N.Project({skipAddingFilesFromTsConfig:!0,compilerOptions:{noLib:!0}})),B}function et(e){const t=Ye(),r=t.getSourceFile(e),o=r??t.addSourceFileAtPath(e);if(r)try{r.refreshFromFileSystemSync()}catch{}const n=new Set([e]);return ie(o,n),[...n].sort()}function se(){const e={projectsBuilt:0,generatorsBuilt:0,schemaCacheHits:0,schemaCacheMisses:0},t=new Map;let r=!1;return{[xe]:!0,stats:e,schemaCache:new Map,aliasCache:new WeakMap,zodImportCache:new WeakMap,generatorCache:new Map,projectFor(n){if(r)throw new Error("apigen-core: ExtractionSession used after dispose()");const i=n??"",s=n?this.statVersion(n):"";let a=M.get(i);return a&&a.tsconfigVersion!==s&&(a=void 0),a||(a={project:n?new N.Project({tsConfigFilePath:n,skipAddingFilesFromTsConfig:!0}):new N.Project({skipAddingFilesFromTsConfig:!0}),tsconfigVersion:s,fileVersions:new Map},M.set(i,a),e.projectsBuilt++),a.project},sourceFileFor(n,i){const s=this.projectFor(i),a=M.get(i??""),c=this.statVersion(n);let l=s.getSourceFile(n);if(l===void 0?l=s.addSourceFileAtPath(n):a&&a.fileVersions.get(n)!==c&&l.refreshFromFileSystemSync(),a==null||a.fileVersions.set(n,c),a){const u=new Set([n]);ie(l,u);for(const f of u)f!==n&&a.fileVersions.set(f,this.statVersion(f))}return l},statVersion(n){let i=t.get(n);return i===void 0&&(i=we(n),t.set(n,i)),i},dispose(){r=!0,this.schemaCache.clear(),this.generatorCache.clear(),t.clear()}}}function je(e){const t=e;if(t[xe]!==!0)throw new Error("apigen-core: unknown ExtractionSession implementation — create sessions with createExtractionSession()");return t}const U="x-apigen-logical";function fe(e,t){const r=new Set,o=[e];for(;o.length>0;){const n=o.pop();if(!n||r.has(n))continue;r.add(n);const i=n.$ref;if(typeof i=="string"){if(t){const f=t[i];if(!f){const p=Object.keys(t).join(", ")||"(none)";throw new Error(`[apigen-logical] $ref "${i}" cannot be resolved. Available $defs: ${p}`)}o.push(f)}continue}const s=n.oneOf;if(Array.isArray(s))for(const f of s)typeof f=="object"&&f!==null&&o.push(f);const a=n.properties;if(a)for(const f of Object.values(a))o.push(f);const c=n.items;if(Array.isArray(c))for(const f of c)typeof f=="object"&&f!==null&&o.push(f);else typeof c=="object"&&c!==null&&o.push(c);const l=n.additionalProperties;typeof l=="object"&&l!==null&&o.push(l);const u=n.propertyNames;typeof u=="object"&&u!==null&&o.push(u)}}const pe=new Set(["string","number","boolean","integer"]);function tt(e){if(typeof e!="object"||e===null)return!1;const t=e;if(t.$ref!==void 0||t.oneOf||t.anyOf||t.allOf)return!1;const{type:r}=t;return typeof r=="string"?pe.has(r):Array.isArray(r)?r.every(o=>pe.has(o)||o==="null"):Array.isArray(t.enum)&&t.enum.length>0?t.enum.every(o=>["string","number","boolean"].includes(typeof o)):!1}function Pe(e){if(!e||typeof e!="object")return!1;const t=e.properties;return t===void 0||typeof t!="object"||t===null?!1:Object.values(t).every(tt)}function nt(e){var r,o;const t=[];for(const n of e){const i={...(r=n.capabilities.layer)==null?void 0:r.envelopeFields,...(o=n.capabilities.envelope)==null?void 0:o.request};Object.keys(i).length>0&&t.push({id:n.id,envelope:i})}return t}function rt(e){const t={},r=o=>{for(const n of["definitions","$defs"]){const i=o[n];if(i)for(const[s,a]of Object.entries(i)){const c=s.startsWith("#/")?s:`#/${n}/${s}`;t[c]=a}}};for(const o of Object.values(e.schemas))r(o.input),r(o.output);if(Object.keys(t).length!==0)for(const[o,n]of Object.entries(e.schemas))try{fe(n.input,t),fe(n.output,t)}catch(i){throw new Error(`[apigen-core-client] Schema validation failed for function "${o}": ${i.message}`)}}function ot(e,t){const r=['apigen calling convention: all domain parameters go inside a "data" envelope — e.g. { "data": { ... } }'+(t?".":" (an empty object for this zero-parameter tool).")];return e.length>0&&r.push(`Field(s) ${e.map(o=>`"${o}"`).join(", ")} are transport-level envelope metadata, NOT domain data — do not nest them under "data". Over MCP they are read from arguments._meta["x-<pluginId>-<field>"] (default pluginId "adhd"); see @adhd/apigen-engine-naming's envelopeMetaKey/envelopeCliFlag/envelopeEnvVar for the HTTP-header / CLI-flag / env-var equivalents.`),r.join(" ")}function it(e,t,r){rt(e);const o={};for(const[n,i]of Object.entries(e.schemas)){const s=(r==null?void 0:r[n])??{},a=i.input.properties??{},c=i.input.required??[],l={},u=[],f={};for(const h of t)if(h.envelope&&s[h.id]!==!1)for(const[y,d]of Object.entries(h.envelope))l[y]=d,f[y]=h.id,u.includes(y)||u.push(y);const p={type:"object",properties:a,additionalProperties:!1,...c.length>0?{required:c}:{}},S=i.safe===!0||Pe(i.input),T=i.input.definitions,m=i.input.$defs;o[n]={input:{type:"object",properties:{...l,data:p},required:[...u,...c.length>0?["data"]:[]],additionalProperties:!1,description:ot(Object.keys(l),Object.keys(a).length>0),...T?{definitions:T}:{},...m?{$defs:m}:{}},output:i.output,...i.hasCtx?{hasCtx:!0}:{},"x-apigen-safe":S,...Object.keys(f).length>0?{"x-apigen-envelope":f}:{}}}return o}const st=8;function at(e,t){try{return t?e.getText(t):e.getText()}catch{try{return e.getText()}catch{return}}}let ct=0;async function ut(e,t,r,o){const n=`__ApigenProbe_${process.pid}_${ct++}`;let i;try{i=t.addTypeAlias({name:n,type:r});const s=i.getType();return await o(s)}catch{return}finally{try{i==null||i.remove()}catch{}}}async function Ae(e,t,r){if(r>st)return{};if(e.isString()||e.isStringLiteral())return e.isStringLiteral()?{type:"string",enum:[e.getLiteralValue()]}:{type:"string"};if(e.isNumber()||e.isNumberLiteral())return e.isNumberLiteral()?{type:"number",enum:[e.getLiteralValue()]}:{type:"number"};if(e.isBoolean())return{type:"boolean"};if(e.isBooleanLiteral())return{type:"boolean"};if(e.isNull()||e.isUndefined()||e.isVoid())return{type:"null"};if(e.isUnion()){const o=e.getUnionTypes();if(o.every(c=>c.isStringLiteral())&&o.length>0)return{type:"string",enum:o.map(c=>c.getLiteralValue())};if(o.every(c=>c.isNumberLiteral())&&o.length>0)return{type:"number",enum:o.map(c=>c.getLiteralValue())};const s=await Promise.all(o.map(c=>Ae(c,t,r+1))),a=Z(s);return{oneOf:s,...a?{discriminator:a}:{},[U]:"union"}}if(e.isArray()){const o=e.getArrayElementType();return{type:"array",items:o?await t(o.getText()):{}}}if(e.isTuple()){const o=e.getTupleElements(),n=await Promise.all(o.map(i=>t(i.getText())));return{type:"array",items:n,minItems:n.length,maxItems:n.length}}if(e.isObject()){const o=e.getStringIndexType(),n=e.getNumberIndexType(),i=o??n,s=e.getProperties();if(i&&s.length===0)return{type:"object",additionalProperties:await t(i.getText())};const a={},c=[];for(const l of s){const u=l.getName(),p=l.getDeclarations()[0];let S;if(p)try{S=l.getTypeAtLocation(p)}catch{S=void 0}if(S!==void 0&&S.getCallSignatures().length>0)continue;const T=S!==void 0?at(S,p):void 0;a[u]=T!==void 0?await t(T):{},l.isOptional()||c.push(u)}return Object.keys(a).length>0?{type:"object",properties:a,...c.length>0?{required:c}:{}}:{}}return{}}function Z(e){if(e.length<2)return;const t=[];for(const o of e){if(o.type!=="object")return;const n=o.properties;if(!n||typeof n!="object")return;t.push(n)}const r=Object.keys(t[0]).filter(o=>t.every(n=>Object.prototype.hasOwnProperty.call(n,o)));for(const o of r){const n=[];let i=!0;for(const a of t){const c=a[o],l=c&&(c.type==="string"||c.type==="number"),u=c==null?void 0:c.enum;if(!l||!Array.isArray(u)||u.length!==1){i=!1;break}n.push(String(u[0]))}if(!i||new Set(n).size!==n.length)continue;const s={};return n.forEach((a,c)=>{s[a]=`#/oneOf/${c}`}),{propertyName:o,mapping:s}}}function D(e,t,r){if(t>6)return{};const o=e.trim();if(o==="string")return{type:"string"};if(o==="number")return{type:"number"};if(o==="boolean")return{type:"boolean"};if(o==="null")return{type:"null"};if(o==="undefined")return{type:"null"};const n=te[o];if(n!==void 0)return n;if(r!=null&&r.size){const i=r.get(o);if(i!==void 0){const s=te[i];if(s!==void 0)return s}}if(o.endsWith("[]"))return{type:"array",items:D(o.slice(0,-2),t+1,r)};if(o.includes("|")){const i=o.split("|").map(c=>c.trim());if(i.every(c=>c.startsWith("'")))return{type:"string",enum:i.map(c=>c.replace(/'/g,""))};const s=i.map(c=>D(c,t+1,r)),a=Z(s);return{oneOf:s,...a?{discriminator:a}:{},[U]:"union"}}if(o.startsWith("{")&&o.endsWith("}")){const i=o.slice(1,-1).trim(),s={};for(const a of i.split(";").filter(Boolean)){const[c,l]=a.split(":").map(u=>u.trim());c&&l&&(s[c.replace("?","")]=D(l,t+1,r))}return{type:"object",properties:s}}return{}}function $e(e){const t=[];let r=0,o=0;for(let i=0;i<e.length;i++){const s=e[i];s==="<"||s==="["||s==="{"||s==="("?r++:s===">"||s==="]"||s==="}"||s===")"?r--:s===","&&r===0&&(t.push(e.slice(o,i).trim()),o=i+1)}const n=e.slice(o).trim();return n.length>0&&t.push(n),t}function lt(e){const t=/^(?:Readonly)?Map<(.+)>$/.exec(e);return t?t[1]:void 0}function ft(e){const t=/^(?:Readonly)?Set<(.+)>$/.exec(e);return t?t[1]:void 0}function pt(e){let t=e.trim();if(t.startsWith("readonly ")&&(t=t.slice(9).trim()),!t.startsWith("[")||!t.endsWith("]"))return;const r=t.slice(1,-1).trim();if(r.length!==0)return $e(r)}async function mt(e,t){const r=e.trim(),o=lt(r);if(o!==void 0){const s=$e(o);if(s.length===2){const[a,c]=await Promise.all([t(s[0]),t(s[1])]);return{type:"array",items:{type:"array",items:[a,c],minItems:2,maxItems:2}}}}const n=ft(r);if(n!==void 0)return{type:"array",items:await t(n),uniqueItems:!0};const i=pt(r);if(i!==void 0){const s=await Promise.all(i.map(a=>t(a)));return{type:"array",items:s,minItems:s.length,maxItems:s.length}}}const Oe={"decimal.js":"Decimal"},te={Date:{type:"string",format:"date-time"},bigint:{type:"string",format:"int64"},Uint8Array:{type:"string",format:"byte"},Buffer:{type:"string",format:"byte"},URL:{type:"string",format:"uri"},RegExp:{type:"string",format:"regex"},Decimal:{type:"string",format:"decimal"}},me={Uint8Array:"byte",Buffer:"byte",Decimal:"decimal"};function ge(e){var r;const t=new Map;for(const o of e.getImportDeclarations()){const n=o.getModuleSpecifierValue(),i=Oe[n];if(!i)continue;const s=o.getDefaultImport();if(s){const a=s.getText();a!==i&&t.set(a,i)}for(const a of o.getNamedImports()){const c=((r=a.getAliasNode())==null?void 0:r.getText())??a.getName();c!==i&&t.set(c,i)}}return t}function gt(e,t){return r=>{r.addNodeParser({supportsNode(o){var i,s,a;if(o.kind!==t)return!1;const n=((i=o.typeName)==null?void 0:i.escapedText)??((a=(s=o.typeName)==null?void 0:s.right)==null?void 0:a.escapedText);return n!==void 0&&Object.prototype.hasOwnProperty.call(me,n)},createType(o){var i,s,a;const n=((i=o.typeName)==null?void 0:i.escapedText)??((a=(s=o.typeName)==null?void 0:s.right)==null?void 0:a.escapedText);return new R.AnnotatedType(new R.StringType,{format:me[n]},!1)}}),r.addNodeParser({supportsNode(o){return o.kind===e},createType(){return new R.AnnotatedType(new R.StringType,{format:"int64"},!1)}})}}let L;function dt(){if(L)return L;try{const e=G.dirname(require.resolve("ts-json-schema-generator/package.json"));L=require(require.resolve("typescript",{paths:[e]}))}catch{L=require("typescript")}return L}const I=new Map;function yt(){const e=process.env.APIGEN_PROGRAM_CACHE,t=e===void 0?NaN:Number(e);return Number.isFinite(t)&&t>=0?t:8}function ht(e){const t=I.get(e);return t&&(I.delete(e),I.set(e,t)),t}function Tt(e,t){const r=yt();if(r!==0)for(I.delete(e),I.set(e,t);I.size>r;){const o=I.keys().next().value;I.delete(o)}}function St(e,t){return`${e}\0${t??""}`}const bt=new Set(["zod",/^zod\/./]);function vt(e){for(const t of e.getImportDeclarations()){const r=t.getModuleSpecifierValue();for(const o of bt)if(typeof o=="string"){if(r===o)return!0}else if(o.test(r))return!0}return!1}function xt(e){for(const t of["$defs","definitions"]){const r=e[t];if(!r||typeof r!="object")continue;const o=Object.keys(r);if(o.length===0)continue;const n=new Set(o.filter(i=>/zod/i.test(i)));for(const[i,s]of Object.entries(r)){if(n.has(i)||typeof s!="object"||s===null)continue;const a=s,c=typeof a.$ref=="string"?a.$ref:"";if(c){for(const l of n)if(c.includes(l)){n.add(i);break}}}for(const i of n)delete r[i]}ne(e)}function ne(e,t){if(!e||typeof e!="object")return;const r=t??new WeakSet;if(!r.has(e)){r.add(e);for(const o of Object.keys(e))if(o==="$ref"&&typeof e[o]=="string"){const n=e[o];/zod/i.test(n)&&delete e[o]}for(const[,o]of Object.entries(e))if(typeof o=="object"&&o!==null)if(Array.isArray(o))for(const n of o)typeof n=="object"&&n!==null&&ne(n,r);else ne(o,r)}}function wt(e){const t=new Set;for(const o of["$defs","definitions"]){const n=e[o];if(n&&typeof n=="object")for(const i of Object.keys(n))t.add(i)}const r=re(e,t);if(r.length>0)throw new Error(`[apigen-core-client] Generated schema contains ${r.length} unresolvable $ref(s): ${r.join(", ")}. This usually means zod-internal definitions were stripped but $ref references to them remain. Check the source file's imports or the ts-json-schema-generator output.`)}function re(e,t){if(!e||typeof e!="object")return[];const r=[];for(const[o,n]of Object.entries(e))if(o==="$ref"&&typeof n=="string"){const i=n.match(/#\/(?:\$defs|definitions)\/(.+)$/);i&&!t.has(i[1])&&r.push(n)}else if(typeof n=="object"&&n!==null)if(Array.isArray(n))for(const i of n)typeof i=="object"&&i!==null&&r.push(...re(i,t));else r.push(...re(n,t));return r}function jt(e){const t=e.anyOf;if(!Array.isArray(t)||t.length<2)return e;const r=t,o=Z(r),n={...e};return delete n.anyOf,{...n,oneOf:r,...o?{discriminator:o}:{},[U]:n[U]??"union"}}function Pt(e,t,r){const{DEFAULT_CONFIG:o}=require("ts-json-schema-generator/dist/src/Config.js"),n={...o,...e},i=n.path,s=St(i,n.tsconfig);let a;a=r?r.statVersion(i):we(i);let c;if(s!==void 0){const u=(r==null?void 0:r.generatorCache.get(s))??ht(s);u&&u.version===a&&(c=u.gen)}if(!c){const{createProgram:u}=require("ts-json-schema-generator/dist/factory/program.js"),f=dt(),p=gt(f.SyntaxKind.BigIntKeyword,f.SyntaxKind.TypeReference),S=u(n),T=R.createParser(S,n,p),m=R.createFormatter(n);if(c=new R.SchemaGenerator(S,T,m,n),r&&r.stats.generatorsBuilt++,s!==void 0&&a!==void 0){const h={version:a,gen:c};Tt(s,h),r==null||r.generatorCache.set(s,h)}}const l=c.createSchema(n.type);return xt(l),wt(l),l}function At(e,t){let r=e.trim();if(r=ke(r),t!=null&&t.size){const n=t.get(r);if(n!==void 0)return n}const o=r.match(/^ReadonlyArray<(.+)>$/);for(o&&(r=`${o[1].trim()}[]`);r.startsWith("readonly ");)r=r.slice(9).trim();return r}function Ne(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}const $t=Object.entries(Oe).map(([e,t])=>({pattern:new RegExp(`import\\(["'][^"']*${Ne(e)}[^"']*["']\\)\\.\\w+`,"g"),key:t}));function ke(e){let t=e;for(const{pattern:r,key:o}of $t)t=t.replace(r,o);return t}function Ot(e,t){let r=ke(e);for(const[o,n]of t)r=r.replace(new RegExp(`\\b${Ne(o)}\\b`,"g"),n);return r}async function $(e,t,r,o,n,i){const s=t.getFilePath(),a=`${s}\0${o??""}\0${r}`,c=i??new Set;if(c.has(a))return{};if(!n){const T=new Set(c);return T.add(a),de(e,t,r,o,void 0,T)}const l=n.schemaCache.get(a);if(l!==void 0)return n.stats.schemaCacheHits++,l;const u=Qe(s,o,n.statVersion(s)),f=u.get(r);if(f!==void 0)return n.stats.schemaCacheHits++,n.schemaCache.set(a,Promise.resolve(f)),f;n.stats.schemaCacheMisses++;const p=new Set(c);p.add(a);const S=de(e,t,r,o,n,p).then(T=>(u.set(r,T),T)).catch(T=>{throw n.schemaCache.delete(a),T});return n.schemaCache.set(a,S),S}async function de(e,t,r,o,n,i){if(["void","undefined","null","Promise<void>"].includes(r))return{type:"null"};let s;if(n){const p=n.aliasCache.get(t);s=p??ge(t),p||n.aliasCache.set(t,s)}else s=ge(t);const a=At(r,s),c=te[a];if(c!==void 0)return c;const l=await mt(a,p=>$(e,t,p,o,n,i));if(l!==void 0)return l;const u=(n==null?void 0:n.zodImportCache.get(t))??vt(t);if(n&&n.zodImportCache.set(t,u),!u)try{const p={path:t.getFilePath(),type:a,skipTypeCheck:!0,tsconfig:o,topRef:!1},S=Pt(p,!0,n);return jt(S)}catch{}try{const p=await ut(e,t,a,S=>Ae(S,T=>$(e,t,T,o,n,i),0));if(p!==void 0)return p}catch{}const f=Ot(a,s);return D(f,0,s)}function ae(e,t,r){if(e!=null&&e.hasInitializer()){const o=e.getInitializer();if(o)return o.getText()}return Nt(r,t)}function Nt(e,t){var s;const r=e,o=((s=r==null?void 0:r.getJsDocs)==null?void 0:s.call(r))??[],n=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),i=new RegExp(`\\[\\s*${n}\\s*=\\s*([^\\]]+)\\]`);for(const a of o)for(const c of a.getTags()){if(c.getTagName()!=="param")continue;const l=c.getText().match(i);if(l)return l[1].trim()}}function kt(e){const t=e.trim(),r=t.match(/^(['"`])([\s\S]*)\1$/);if(r)return r[2];if(t==="true")return!0;if(t==="false")return!1;if(t==="null")return null;if(t!=="undefined"){if(/^-?\d+(\.\d+)?$/.test(t))return Number(t);try{return JSON.parse(t)}catch{return t}}}function It(e,t){const r=kt(t);if(r===void 0)return;e.default=r;const o=typeof r=="string"?r:JSON.stringify(r),n=typeof e.description=="string"?e.description:void 0;e.description=n?`${n} (default: ${o})`:`(default: ${o})`}function H(e){try{if(!e||e.getKind()!==N.SyntaxKind.TypeReference)return;const t=e;if(t.getTypeArguments().length>0)return;const r=t.getTypeName();if(r.getKind()!==N.SyntaxKind.Identifier)return;const n=r.getSymbol();if(!n)return;const i=n.getDeclarations().find(u=>u.getKindName()==="TypeAliasDeclaration");if(!i)return;const s=i,a=s.getType();if(!(a.isString()||a.isNumber()||a.isBoolean()))return;const l=s.getJsDocs();for(const u of l)for(const f of u.getTags())if(f.getTagName()==="format"){const p=f.getCommentText();if(p!==void 0)return p.trim()}return}catch{return}}async function Et(e){const t=e.session===void 0,r=je(e.session??se());try{return await Ft(e,r)}finally{t&&r.dispose()}}async function Ft(e,t){const{sourceFile:r,namespace:o="",dropFileSegment:n=!1,tsconfig:i}=e,s=t.projectFor(i),a=t.sourceFileFor(r,i),c=G.basename(r),l=O(Lt(c)),u=n?null:l,f=O(o),p=[];for(const[m,h]of a.getExportedDeclarations()){if(m==="default"||z(m))continue;const y=Mt(h);if(y){const g=y.getSignature(),w=he(g,y),v=g.getReturnType().getText(),P=F(g);p.push(await K(s,a,f,u,m,w,v,y.isAsync(),i,t,P));continue}const d=h.find(g=>g.getKindName()==="VariableDeclaration");if(!d)continue;const b=d.getInitializer(),x=b==null?void 0:b.getKindName();if(b&&["ArrowFunction","FunctionExpression"].includes(x??"")){const w=d.getType().getCallSignatures();if(w.length===0)continue;const v=w[0],P=Te(v,d,d.getVariableStatement()),j=v.getReturnType().getText(),A=F(v),E=b.isAsync();p.push(await K(s,a,f,u,m,P,j,E,i,t,A))}else if(x==="ObjectLiteralExpression"){const g=d.getType();for(const w of g.getProperties()){const v=w.getName();if(z(v))continue;const j=w.getTypeAtLocation(d).getCallSignatures();if(j.length===0)continue;const A=j[0],E=Te(A,d,d.getVariableStatement()),V=A.getReturnType().getText(),q=F(A),J=[...u?[u]:[],O(m),O(v)];p.push(await W(s,a,f,J,v,E,V,!1,i,t,q))}}else{const g=d.getType(),w=g.getText();if(C(g,d)){const v=await $(s,a,w,i,t);p.push(Rt(f,u,m,v))}else console.warn(`[apigen-core] Skipping non-callable, non-serializable export: ${m}`)}}const S=a.getDefaultExportSymbol();if(S){const m=a.getExportAssignment(h=>!h.isExportEquals());if(m){const h=m.getExpression(),y=h.getKindName();if(["ArrowFunction","FunctionExpression"].includes(y)){const b=h.getType().getCallSignatures();if(b.length>0){const x=b[0],g=Q(x,m),w=x.getReturnType().getText(),v=F(x),P=h.isAsync();p.push(await K(s,a,f,u,"default",g,w,P,i,t,v))}}else{const d=h.getType();for(const b of d.getProperties()){const x=b.getName();if(z(x))continue;const w=b.getTypeAtLocation(m).getCallSignatures();if(w.length===0)continue;const v=w[0],P=Q(v,m),j=v.getReturnType().getText(),A=F(v),E=[...u?[u]:[],O("default"),O(x)];p.push(await W(s,a,f,E,x,P,j,!1,i,t,A))}}}else{const h=S.getDeclarations();for(const y of h){if(y.getKindName()!=="FunctionDeclaration")continue;const d=y,b=d.getName(),x=b&&b.length>0?b:"default",g=d.getSignature(),w=he(g,d),v=g.getReturnType().getText(),P=F(g);p.push(await K(s,a,f,u,x,w,v,d.isAsync(),i,t,P))}}}const T=_t(a);if(T.length>0)for(const{name:m,sig:h}of T){if(z(m))continue;const y=Q(h),d=h.getReturnType().getText(),b=F(h),x=[...u?[u]:[],O(m)];p.push(await W(s,a,f,x,m,y,d,!1,i,t,b))}return p}function Ct(e,t,r,o){const n=new Set,i=s=>{if(Array.isArray(s))return s.map(i);if(!s||typeof s!="object"||n.has(s))return s;n.add(s);try{const a=s,c={};for(const[l,u]of Object.entries(a)){if(l==="definitions"||l==="$defs"){const f=l,p=t[f];for(const[S,T]of Object.entries(u)){const m=i(T),h=p[S];if(h!==void 0&&JSON.stringify(h)!==JSON.stringify(m))throw new Error(`[apigen-core-client] Function "${r}": param "${o}" contributes a "${f}.${S}" definition that conflicts with an identically-named definition already hoisted from another param/output in the same function. Two structurally different types share the same generated definition key, so apigen cannot safely merge them into one function-level schema.`);p[S]=m}continue}c[l]=i(u)}return c}finally{n.delete(s)}};return i(e)}function ye(e,t){if(!t||e.format!==void 0||"$ref"in e||"properties"in e||"items"in e)return;const r=e.type;(r==="string"||r==="number"||r==="integer"||r==="boolean")&&(e.format=t)}function F(e){var t;try{return H((t=e.getDeclaration())==null?void 0:t.getReturnTypeNode())}catch{return}}async function K(e,t,r,o,n,i,s,a,c,l,u){const f=O(n);return W(e,t,r,o?[o,f]:[f],n,i,s,a,c,l,u)}async function W(e,t,r,o,n,i,s,a,c,l,u){const f=i.length>0&&i[0].name==="ctx",p=i.filter(g=>g.name!=="ctx"),S=p.filter(g=>!g.optional).map(g=>g.name),T={},m={definitions:{},$defs:{}};for(const g of p){const w=await $(e,t,g.type,c,l),v=Ct(w,m,n,g.name);g.defaultValue!==void 0&&It(v,g.defaultValue),ye(v,g.format),T[g.name]=v}const h=s.replace(/^Promise<(.+)>$/,"$1").trim(),y=await $(e,t,h,c,l),d=u?{...y}:y;ye(d,u);const b={type:"object",properties:T,required:S,...Object.keys(m.definitions).length>0?{definitions:m.definitions}:{},...Object.keys(m.$defs).length>0?{$defs:m.$defs}:{}};return{id:Ie(r,o),host:"ts",namespace:r,path:o,kind:"action",async:a,streaming:!1,safe:!1,input:b,output:d,envelope:{},typeText:{lang:"ts",input:Vt(i),output:h},...f?{hasCtx:!0}:{}}}function Rt(e,t,r,o){const n=O(r),i=t?[t,n]:[n];return{id:Ie(e,i),host:"ts",namespace:e,path:i,kind:"query",async:!1,streaming:!1,safe:!0,input:{type:"object",properties:{},required:[]},output:o,envelope:{},typeText:null}}function Ie(e,t){return(e.raw?[e,...t]:t).map(o=>o.words.join("-")).join("/")}function ce(e){return e.split(/[-_.]+/).flatMap(t=>t.replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").split("_").filter(Boolean)).map(t=>t.toLowerCase()).filter(Boolean)}function O(e){return{raw:e,words:ce(e)}}function Lt(e){return e.replace(/\.[^.]+$/,"").replace(/[._]+/g,"-")}function _t(e){const t=[];for(const r of e.getStatements()){if(r.getKindName()!=="ExpressionStatement")continue;const o=r.getExpression();if(o.getKindName()!=="BinaryExpression")continue;const n=o;if(n.getLeft().getText().trim()!=="module.exports"||n.getOperatorToken().getKindName()!=="EqualsToken")continue;const s=n.getRight(),a=s.getType();for(const c of a.getProperties()){const u=c.getTypeAtLocation(s).getCallSignatures();u.length!==0&&t.push({name:c.getName(),sig:u[0]})}}return t}function Mt(e){let t;for(const r of e){if(r.getKindName()!=="FunctionDeclaration")continue;const o=r;if(t||(t=o),o.getBody())return o}return t}function he(e,t){return e.getParameters().map(r=>{var s;const o=r.getDeclarations(),n=o.length>0&&o[0].getKindName()==="Parameter"?o[0]:null,i=r.isOptional()||((n==null?void 0:n.hasInitializer())??!1)||(((s=n==null?void 0:n.hasQuestionToken)==null?void 0:s.call(n))??!1);return{name:r.getName(),type:r.getTypeAtLocation(e.getDeclaration()).getText(),optional:i,defaultValue:ae(n,r.getName(),t),format:H(n==null?void 0:n.getTypeNode())}})}function Te(e,t,r){return e.getParameters().map(o=>{var a;const n=o.getDeclarations(),i=n.length>0&&n[0].getKindName()==="Parameter"?n[0]:null,s=o.isOptional()||((i==null?void 0:i.hasInitializer())??!1)||(((a=i==null?void 0:i.hasQuestionToken)==null?void 0:a.call(i))??!1);return{name:o.getName(),type:o.getTypeAtLocation(t).getText(),optional:s,defaultValue:ae(i,o.getName(),r??t),format:H(i==null?void 0:i.getTypeNode())}})}function Q(e,t){return e.getParameters().map(r=>{var s,a,c;const o=r.getDeclarations(),n=o.length>0&&o[0].getKindName()==="Parameter"?o[0]:null,i=r.isOptional()||((n==null?void 0:n.hasInitializer())??!1)||(((s=n==null?void 0:n.hasQuestionToken)==null?void 0:s.call(n))??!1);return{name:r.getName(),type:n?n.getType().getText():((c=(a=r.getValueDeclaration())==null?void 0:a.getType())==null?void 0:c.getText())??"unknown",optional:i,defaultValue:ae(n,r.getName(),t),format:H(n==null?void 0:n.getTypeNode())}})}function Vt(e){const t=e.filter(r=>r.name!=="ctx");return t.length===0?"()":"("+t.map(r=>`${r.name}${r.optional?"?":""}: ${r.type}`).join(", ")+")"}function z(e){return!!(e==="__samples__"||e.startsWith("__"))}function C(e,t,r=new Set){if(e.getCallSignatures().length>0||e.getConstructSignatures().length>0)return!1;if(e.isString()||e.isNumber()||e.isBoolean()||e.isNull()||e.isUndefined()||e.isStringLiteral()||e.isNumberLiteral()||e.isBooleanLiteral()||e.isEnumLiteral())return!0;if(e.isArray()||e.isReadonlyArray()){const o=e.getArrayElementType();return o?C(o,t,r):!1}if(e.isTuple())return e.getTupleElements().every(o=>C(o,t,r));if(e.isUnion())return e.getUnionTypes().every(o=>C(o,t,r));if(e.isIntersection())return e.getIntersectionTypes().every(o=>C(o,t,r));if(e.isObject()){const o=e.getText(t);if(r.has(o))return!0;r.add(o);const n=e.getStringIndexType(),i=e.getNumberIndexType();if(n||i)return[n,i].every(a=>!a||C(a,t,r));const s=e.getProperties();return s.length===0?!0:s.every(a=>{const c=a.getTypeAtLocation(t);return C(c,t,r)})}return!1}function Ee(e,t){return async r=>{let o=()=>t(r);for(let n=e.length-1;n>=0;n--){const i=e[n],s=o;o=()=>i(r,s)}return o()}}function Fe(e,t){return Ee(e,t)}function qt(e,t,r={}){const o=e.map(n=>n.capabilities.extractLayer).filter(n=>!!n).map(n=>n.createLayer?n.createLayer(r):n.layer).filter(n=>!!n);return Fe(o,t)}async function Kt(e){const t=e.session===void 0,r=je(e.session??se());try{return await zt(e,r)}finally{t&&r.dispose()}}async function zt(e,t){const{sourceFile:r,namespace:o="",tsconfig:n,includeInstances:i=!1}=e,s=t.projectFor(n),a=t.sourceFileFor(r,n),c=G.basename(r),l=_(Dt(c)),u=_(o),f=[];for(const[p,S]of a.getExportedDeclarations()){const T=S.find(y=>y.getKindName()==="ClassDeclaration");if(!T)continue;const m=p==="default"?T.getName():p;if(!m||Y(m))continue;const h=_(m);for(const y of T.getStaticMethods()){const d=y.getName();if(Y(d))continue;const b=y.getScope();if(b===N.Scope.Private||b===N.Scope.Protected)continue;const x=y.getSignature(),g=X(x,y),w=x.getReturnType().getText(),v=y.isAsync(),P=[l,h,_(d)];f.push(await Bt(s,a,u,P,g,w,v,n,t))}if(i){{const d=T.getConstructors()[0]??null;let b=[];if(d){const j=d.getSignature();b=X(j,d)}const x=[l,h],g=oe(u,x),w=b.filter(j=>j.name!=="ctx"),v=w.filter(j=>!j.optional).map(j=>j.name),P={};for(const j of w)P[j.name]=await $(s,a,j.type,n,t);f.push({id:g,host:"ts",namespace:u,path:x,kind:"constructor",async:!1,streaming:!1,safe:!1,input:{type:"object",properties:P,required:v},output:{type:"object",properties:{instanceId:{type:"string"}},required:["instanceId"]},envelope:{},typeText:{lang:"ts",input:Wt(b),output:"{ instanceId: string }"}})}for(const y of T.getInstanceMethods()){const d=y.getName();if(Y(d))continue;const b=y.getScope();if(b===N.Scope.Private||b===N.Scope.Protected)continue;const x=y.getSignature(),g=X(x,y),w=x.getReturnType().getText(),v=y.isAsync(),P=[l,h,_(d)],j=oe(u,P),A=g.filter(k=>k.name!=="ctx"),E=A.filter(k=>!k.optional).map(k=>k.name),V={};for(const k of A)V[k.name]=await $(s,a,k.type,n,t);const q=w.replace(/^Promise<(.+)>$/,"$1").trim(),J=await $(s,a,q,n,t);f.push({id:j,host:"ts",namespace:u,path:P,kind:"instance-method",async:v,streaming:!1,safe:!1,input:{type:"object",properties:V,required:E},output:J,envelope:{type:"object",properties:{instanceId:{type:"string"}},required:["instanceId"]},typeText:{lang:"ts",input:Ce(g),output:q}})}}}return f}async function Bt(e,t,r,o,n,i,s,a,c){const l=n.filter(m=>m.name!=="ctx"),u=l.filter(m=>!m.optional).map(m=>m.name),f={};for(const m of l)f[m.name]=await $(e,t,m.type,a,c);const p=i.replace(/^Promise<(.+)>$/,"$1").trim(),S=await $(e,t,p,a,c);return{id:oe(r,o),host:"ts",namespace:r,path:o,kind:"action",async:s,streaming:!1,safe:!1,input:{type:"object",properties:f,required:u},output:S,envelope:{},typeText:{lang:"ts",input:Ce(n),output:p}}}function oe(e,t){return(e.raw?[e,...t]:t).map(o=>o.words.join("-")).join("/")}function _(e){return{raw:e,words:ce(e)}}function Dt(e){return e.replace(/\.[^.]+$/,"").replace(/[._]+/g,"-")}function X(e,t){return e.getParameters().map(r=>{var s;const o=r.getDeclarations(),n=o.length>0&&o[0].getKindName()==="Parameter"?o[0]:null,i=r.isOptional()||((n==null?void 0:n.hasInitializer())??!1)||(((s=n==null?void 0:n.hasQuestionToken)==null?void 0:s.call(n))??!1);return{name:r.getName(),type:r.getTypeAtLocation(t).getText(),optional:i}})}function Ce(e){const t=e.filter(r=>r.name!=="ctx");return t.length===0?"()":"("+t.map(r=>`${r.name}${r.optional?"?":""}: ${r.type}`).join(", ")+")"}function Wt(e){return e.length===0?"()":"("+e.map(t=>`${t.name}${t.optional?"?":""}: ${t.type}`).join(", ")+")"}function Y(e){return!!(e==="__samples__"||e.startsWith("__")||e.startsWith("_"))}const Ut=new Map([[".ts","ts"],[".tsx","ts"],[".mts","ts"],[".cts","ts"],[".py","py"],[".rs","rust"],[".go","go"],[".java","java"]]);function Re(e){const t=Je.extname(e).toLowerCase();return Ut.get(t)}function Le(e){return e.language??"ts"}function _e(e,t){const r=Re(t);return r===void 0?!1:r===Le(e)}function Gt(e,t){return t.filter(r=>_e(e,r))}function Zt(e){return{oneOf:[{type:"object",required:["index","status","value"],properties:{index:{type:"integer"},status:{type:"string",enum:["fulfilled"]},value:e}},{type:"object",required:["index","status","chunks"],properties:{index:{type:"integer"},status:{type:"string",enum:["fulfilled"]},chunks:{type:"array"}}},{type:"object",required:["index","status","reason"],properties:{index:{type:"integer"},status:{type:"string",enum:["rejected"]},reason:{},chunksDelivered:{type:"integer"}}}]}}function Me(e){return{operationConst:e.id,itemsSchema:e.input,resultSchema:Zt(e.output)}}function Ve(e,t={}){const r=new Set(t.exclude??[]),o=new Map;for(const n of e){if(r.has(n.id))continue;const i=o.get(n.kind);i?i.push(n):o.set(n.kind,[n])}return o}function Se(e){return{type:"string",enum:[e]}}function be(e,t){return{type:"object",required:["operation","items"],properties:{operation:t,items:{type:"array",items:e.itemsSchema},concurrency:{type:"number"},mode:{type:"string",enum:["parallel","serial","chained"]},onItemError:{type:"string",enum:["continue","abort"]},itemTimeoutMs:{type:"number"}},additionalProperties:!0}}function qe(e){if(e.length===0)throw new Error("buildBatchKindSchema: at least one operation is required");const t=e.map(Me);if(e.length===1){const[n]=e,[i]=t;return{input:be(i,Se(n.id)),output:{type:"array",items:i.resultSchema}}}const r=e.map((n,i)=>be(t[i],Se(n.id))),o=Z(r);return{input:{oneOf:r,...o?{discriminator:o}:{}},output:{oneOf:t.map(n=>({type:"array",items:n.resultSchema}))},...o?{discriminator:o}:{}}}function Ht(e,t={}){const r=Ve(e.operations,t),o=[];for(const[n,i]of r){const{input:s,output:a}=qe(i),c=ve(`_batch/${n}`,e,{kind:n,safe:n==="query",input:s,output:a});o.push({...c,operationIds:i.map(l=>l.id)})}return o}exports.buildBatchKindSchema=qe;exports.buildBatchMountedOperations=Ht;exports.clearPersistentProjectCache=Xe;exports.collectLocalImportPaths=et;exports.composeOnion=Ee;exports.composeSchemas=it;exports.createExtractInvoker=Fe;exports.createExtractInvokerFromPlugins=qt;exports.createExtractionSession=se;exports.deriveBatchOperationBranch=Me;exports.effectiveLanguage=Le;exports.extract=Et;exports.extractClasses=Kt;exports.groupBatchableOperationsByKind=Ve;exports.isPrimitiveOnlyInputSchema=Pe;exports.languageOfSource=Re;exports.pluginConsumesSource=_e;exports.pluginsToEnvelopeMiddlewares=nt;exports.sourcesForPlugin=Gt;exports.syntheticOp=ve;exports.tokenize=ce;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Ye=require("node:fs"),et=require("node:module"),Q=require("node:path");var ee=typeof document<"u"?document.currentScript:null;function tt(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const nt=tt(Q);function Te(e){return{raw:e,words:e.split(/(?=[A-Z])|[-_]/).map(t=>t.toLowerCase()).filter(Boolean)}}function Ie(e,t,r={}){const o=e.split("/");if(o.length<2||o.some(u=>u.length===0))throw new Error(`syntheticOp: id "${e}" must be "<namespace>/<path...>" with non-empty segments`);const[n,...i]=o,s=n.replace(/^_+/,""),a=r.kind??"action",c={id:e,host:t.host,namespace:Te(s),path:i.map(Te),kind:a,async:r.async??!1,streaming:r.streaming??!1,safe:r.safe??a==="query",input:r.input??{},output:r.output??{},envelope:r.envelope??{},typeText:r.typeText??null};return r.hasCtx!==void 0&&(c.hasCtx=r.hasCtx),r.transports!==void 0&&(c.transports=r.transports),c}const O=et.createRequire(typeof document>"u"?require("url").pathToFileURL(__filename).href:ee&&ee.tagName.toUpperCase()==="SCRIPT"&&ee.src||new URL("index.js",document.baseURI).href);let z;function Ee(){return z||(z=O("ts-morph").Project,z)}const Ce=Symbol.for("adhd.apigen.extraction-session");function le(e,t){const r=[...e.getImportDeclarations().map(o=>o.getModuleSpecifierSourceFile()),...e.getExportDeclarations().map(o=>o.getModuleSpecifierSourceFile())];for(const o of r){if(!o)continue;const n=o.getFilePath();if(!n.includes("/node_modules/")&&!t.has(n)){t.add(n);try{o.refreshFromFileSystemSync()}catch{}le(o,t)}}}function Fe(e){try{const t=Ye.statSync(e);return`${t.mtimeMs}:${t.size}`}catch{return"nostat"}}const M=new Map,oe=new Map;function rt(e,t,r){const o=t??"",n=M.get(o);let i=r;if(n&&n.fileVersions.size>0){const c=[r],u=[...n.fileVersions.entries()].sort(([l],[f])=>l.localeCompare(f));for(const[l,f]of u)l!==e&&c.push(`${l}:${f}`);i=c.join("|")}const s=`${e}\0${t??""}`;let a=oe.get(s);return(!a||a.version!==i)&&(a={version:i,schemas:new Map},oe.set(s,a)),a.schemas}function ot(){M.clear(),oe.clear(),G=void 0}let G;function it(){if(!G){const e=Ee();G=new e({skipAddingFilesFromTsConfig:!0,compilerOptions:{noLib:!0}})}return G}function st(e){const t=it(),r=t.getSourceFile(e),o=r??t.addSourceFileAtPath(e);if(r)try{r.refreshFromFileSystemSync()}catch{}const n=new Set([e]);return le(o,n),[...n].sort()}function fe(){const e={projectsBuilt:0,generatorsBuilt:0,schemaCacheHits:0,schemaCacheMisses:0},t=new Map;let r=!1;return{[Ce]:!0,stats:e,schemaCache:new Map,aliasCache:new WeakMap,zodImportCache:new WeakMap,generatorCache:new Map,projectFor(n){if(r)throw new Error("apigen-core: ExtractionSession used after dispose()");const i=n??"",s=n?this.statVersion(n):"";let a=M.get(i);if(a&&a.tsconfigVersion!==s&&(a=void 0),!a){const c=Ee();a={project:n?new c({tsConfigFilePath:n,skipAddingFilesFromTsConfig:!0}):new c({skipAddingFilesFromTsConfig:!0}),tsconfigVersion:s,fileVersions:new Map},M.set(i,a),e.projectsBuilt++}return a.project},sourceFileFor(n,i){const s=this.projectFor(i),a=M.get(i??""),c=this.statVersion(n);let u=s.getSourceFile(n);if(u===void 0?u=s.addSourceFileAtPath(n):a&&a.fileVersions.get(n)!==c&&u.refreshFromFileSystemSync(),a==null||a.fileVersions.set(n,c),a){const l=new Set([n]);le(u,l);for(const f of l)f!==n&&a.fileVersions.set(f,this.statVersion(f))}return u},statVersion(n){let i=t.get(n);return i===void 0&&(i=Fe(n),t.set(n,i)),i},dispose(){r=!0,this.schemaCache.clear(),this.generatorCache.clear(),t.clear()}}}function Re(e){const t=e;if(t[Ce]!==!0)throw new Error("apigen-core: unknown ExtractionSession implementation — create sessions with createExtractionSession()");return t}const Z="x-apigen-logical";function Se(e,t){const r=new Set,o=[e];for(;o.length>0;){const n=o.pop();if(!n||r.has(n))continue;r.add(n);const i=n.$ref;if(typeof i=="string"){if(t){const f=t[i];if(!f){const m=Object.keys(t).join(", ")||"(none)";throw new Error(`[apigen-logical] $ref "${i}" cannot be resolved. Available $defs: ${m}`)}o.push(f)}continue}const s=n.oneOf;if(Array.isArray(s))for(const f of s)typeof f=="object"&&f!==null&&o.push(f);const a=n.properties;if(a)for(const f of Object.values(a))o.push(f);const c=n.items;if(Array.isArray(c))for(const f of c)typeof f=="object"&&f!==null&&o.push(f);else typeof c=="object"&&c!==null&&o.push(c);const u=n.additionalProperties;typeof u=="object"&&u!==null&&o.push(u);const l=n.propertyNames;typeof l=="object"&&l!==null&&o.push(l)}}const be=new Set(["string","number","boolean","integer"]);function at(e){if(typeof e!="object"||e===null)return!1;const t=e;if(t.$ref!==void 0||t.oneOf||t.anyOf||t.allOf)return!1;const{type:r}=t;return typeof r=="string"?be.has(r):Array.isArray(r)?r.every(o=>be.has(o)||o==="null"):Array.isArray(t.enum)&&t.enum.length>0?t.enum.every(o=>["string","number","boolean"].includes(typeof o)):!1}function _e(e){if(!e||typeof e!="object")return!1;const t=e.properties;return t===void 0||typeof t!="object"||t===null?!1:Object.values(t).every(at)}function ct(e){var r,o;const t=[];for(const n of e){const i={...(r=n.capabilities.layer)==null?void 0:r.envelopeFields,...(o=n.capabilities.envelope)==null?void 0:o.request};Object.keys(i).length>0&&t.push({id:n.id,envelope:i})}return t}function ut(e){const t={},r=o=>{for(const n of["definitions","$defs"]){const i=o[n];if(i)for(const[s,a]of Object.entries(i)){const c=s.startsWith("#/")?s:`#/${n}/${s}`;t[c]=a}}};for(const o of Object.values(e.schemas))r(o.input),r(o.output);if(Object.keys(t).length!==0)for(const[o,n]of Object.entries(e.schemas))try{Se(n.input,t),Se(n.output,t)}catch(i){throw new Error(`[apigen-core-client] Schema validation failed for function "${o}": ${i.message}`)}}function lt(e,t){const r=['apigen calling convention: all domain parameters go inside a "data" envelope — e.g. { "data": { ... } }'+(t?".":" (an empty object for this zero-parameter tool).")];return e.length>0&&r.push(`Field(s) ${e.map(o=>`"${o}"`).join(", ")} are transport-level envelope metadata, NOT domain data — do not nest them under "data". Over MCP they are read from arguments._meta["x-<pluginId>-<field>"] (default pluginId "adhd"); see @adhd/apigen-engine-naming's envelopeMetaKey/envelopeCliFlag/envelopeEnvVar for the HTTP-header / CLI-flag / env-var equivalents.`),r.join(" ")}function ft(e,t,r){ut(e);const o={};for(const[n,i]of Object.entries(e.schemas)){const s=(r==null?void 0:r[n])??{},a=i.input.properties??{},c=i.input.required??[],u={},l=[],f={};for(const g of t)if(g.envelope&&s[g.id]!==!1)for(const[x,p]of Object.entries(g.envelope))u[x]=p,f[x]=g.id,l.includes(x)||l.push(x);const m={type:"object",properties:a,additionalProperties:!1,...c.length>0?{required:c}:{}},h=i.safe===!0||_e(i.input),y=i.input.definitions,d=i.input.$defs;o[n]={input:{type:"object",properties:{...u,data:m},required:[...l,...c.length>0?["data"]:[]],additionalProperties:!1,description:lt(Object.keys(u),Object.keys(a).length>0),...y?{definitions:y}:{},...d?{$defs:d}:{}},output:i.output,...i.hasCtx?{hasCtx:!0}:{},"x-apigen-safe":h,...Object.keys(f).length>0?{"x-apigen-envelope":f}:{}}}return o}const pt=8;function mt(e,t){try{return t?e.getText(t):e.getText()}catch{try{return e.getText()}catch{return}}}let dt=0;async function gt(e,t,r,o){const n=`__ApigenProbe_${process.pid}_${dt++}`;let i;try{i=t.addTypeAlias({name:n,type:r});const s=i.getType();return await o(s)}catch{return}finally{try{i==null||i.remove()}catch{}}}async function Le(e,t,r){if(r>pt)return{};if(e.isString()||e.isStringLiteral())return e.isStringLiteral()?{type:"string",enum:[e.getLiteralValue()]}:{type:"string"};if(e.isNumber()||e.isNumberLiteral())return e.isNumberLiteral()?{type:"number",enum:[e.getLiteralValue()]}:{type:"number"};if(e.isBoolean())return{type:"boolean"};if(e.isBooleanLiteral())return{type:"boolean"};if(e.isNull()||e.isUndefined()||e.isVoid())return{type:"null"};if(e.isUnion()){const o=e.getUnionTypes();if(o.every(c=>c.isStringLiteral())&&o.length>0)return{type:"string",enum:o.map(c=>c.getLiteralValue())};if(o.every(c=>c.isNumberLiteral())&&o.length>0)return{type:"number",enum:o.map(c=>c.getLiteralValue())};const s=await Promise.all(o.map(c=>Le(c,t,r+1))),a=X(s);return{oneOf:s,...a?{discriminator:a}:{},[Z]:"union"}}if(e.isArray()){const o=e.getArrayElementType();return{type:"array",items:o?await t(o.getText()):{}}}if(e.isTuple()){const o=e.getTupleElements(),n=await Promise.all(o.map(i=>t(i.getText())));return{type:"array",items:n,minItems:n.length,maxItems:n.length}}if(e.isObject()){const o=e.getStringIndexType(),n=e.getNumberIndexType(),i=o??n,s=e.getProperties();if(i&&s.length===0)return{type:"object",additionalProperties:await t(i.getText())};const a={},c=[];for(const u of s){const l=u.getName(),m=u.getDeclarations()[0];let h;if(m)try{h=u.getTypeAtLocation(m)}catch{h=void 0}if(h!==void 0&&h.getCallSignatures().length>0)continue;const y=h!==void 0?mt(h,m):void 0;a[l]=y!==void 0?await t(y):{},u.isOptional()||c.push(l)}if(Object.keys(a).length>0){const u=i?await t(i.getText()):!1;return{type:"object",properties:a,...c.length>0?{required:c}:{},additionalProperties:u}}return{}}return{}}function X(e){if(e.length<2)return;const t=[];for(const o of e){if(o.type!=="object")return;const n=o.properties;if(!n||typeof n!="object")return;t.push(n)}const r=Object.keys(t[0]).filter(o=>t.every(n=>Object.prototype.hasOwnProperty.call(n,o)));for(const o of r){const n=[];let i=!0;for(const a of t){const c=a[o],u=c&&(c.type==="string"||c.type==="number"),l=c==null?void 0:c.enum;if(!u||!Array.isArray(l)||l.length!==1){i=!1;break}n.push(String(l[0]))}if(!i||new Set(n).size!==n.length)continue;const s={};return n.forEach((a,c)=>{s[a]=`#/oneOf/${c}`}),{propertyName:o,mapping:s}}}function H(e,t,r){if(t>6)return{};const o=e.trim();if(o==="string")return{type:"string"};if(o==="number")return{type:"number"};if(o==="boolean")return{type:"boolean"};if(o==="null")return{type:"null"};if(o==="undefined")return{type:"null"};const n=ie[o];if(n!==void 0)return n;if(r!=null&&r.size){const i=r.get(o);if(i!==void 0){const s=ie[i];if(s!==void 0)return s}}if(o.endsWith("[]"))return{type:"array",items:H(o.slice(0,-2),t+1,r)};if(o.includes("|")){const i=o.split("|").map(c=>c.trim());if(i.every(c=>c.startsWith("'")))return{type:"string",enum:i.map(c=>c.replace(/'/g,""))};const s=i.map(c=>H(c,t+1,r)),a=X(s);return{oneOf:s,...a?{discriminator:a}:{},[Z]:"union"}}if(o.startsWith("{")&&o.endsWith("}")){const i=o.slice(1,-1).trim(),s={};for(const a of i.split(";").filter(Boolean)){const[c,u]=a.split(":").map(l=>l.trim());c&&u&&(s[c.replace("?","")]=H(u,t+1,r))}return{type:"object",properties:s}}return{}}function Me(e){const t=[];let r=0,o=0;for(let i=0;i<e.length;i++){const s=e[i];s==="<"||s==="["||s==="{"||s==="("?r++:s===">"||s==="]"||s==="}"||s===")"?r--:s===","&&r===0&&(t.push(e.slice(o,i).trim()),o=i+1)}const n=e.slice(o).trim();return n.length>0&&t.push(n),t}function yt(e){const t=/^(?:Readonly)?Map<(.+)>$/.exec(e);return t?t[1]:void 0}function ht(e){const t=/^(?:Readonly)?Set<(.+)>$/.exec(e);return t?t[1]:void 0}function Tt(e){let t=e.trim();if(t.startsWith("readonly ")&&(t=t.slice(9).trim()),!t.startsWith("[")||!t.endsWith("]"))return;const r=t.slice(1,-1).trim();if(r.length!==0)return Me(r)}async function St(e,t){const r=e.trim(),o=yt(r);if(o!==void 0){const s=Me(o);if(s.length===2){const[a,c]=await Promise.all([t(s[0]),t(s[1])]);return{type:"array",items:{type:"array",items:[a,c],minItems:2,maxItems:2}}}}const n=ht(r);if(n!==void 0)return{type:"array",items:await t(n),uniqueItems:!0};const i=Tt(r);if(i!==void 0){const s=await Promise.all(i.map(a=>t(a)));return{type:"array",items:s,minItems:s.length,maxItems:s.length}}}const Ke={"decimal.js":"Decimal"},ie={Date:{type:"string",format:"date-time"},bigint:{type:"string",format:"int64"},Uint8Array:{type:"string",format:"byte"},Buffer:{type:"string",format:"byte"},URL:{type:"string",format:"uri"},RegExp:{type:"string",format:"regex"},Decimal:{type:"string",format:"decimal"}},ve={Uint8Array:"byte",Buffer:"byte",Decimal:"decimal"};function xe(e){var r;const t=new Map;for(const o of e.getImportDeclarations()){const n=o.getModuleSpecifierValue(),i=Ke[n];if(!i)continue;const s=o.getDefaultImport();if(s){const a=s.getText();a!==i&&t.set(a,i)}for(const a of o.getNamedImports()){const c=((r=a.getAliasNode())==null?void 0:r.getText())??a.getName();c!==i&&t.set(c,i)}}return t}function bt(e,t){return r=>{r.addNodeParser({supportsNode(o){var i,s,a;if(o.kind!==t)return!1;const n=((i=o.typeName)==null?void 0:i.escapedText)??((a=(s=o.typeName)==null?void 0:s.right)==null?void 0:a.escapedText);return n!==void 0&&Object.prototype.hasOwnProperty.call(ve,n)},createType(o){var a,c,u;const n=((a=o.typeName)==null?void 0:a.escapedText)??((u=(c=o.typeName)==null?void 0:c.right)==null?void 0:u.escapedText),{AnnotatedType:i,StringType:s}=se();return new i(new s,{format:ve[n]},!1)}}),r.addNodeParser({supportsNode(o){return o.kind===e},createType(){const{AnnotatedType:o,StringType:n}=se();return new o(new n,{format:"int64"},!1)}})}}let q;function se(){return q||(q=O("ts-json-schema-generator"),q)}let _;function vt(){if(_)return _;try{const e=Q.dirname(O.resolve("ts-json-schema-generator/package.json"));_=O(O.resolve("typescript",{paths:[e]}))}catch{_=O("typescript")}return _}const E=new Map;function xt(){const e=process.env.APIGEN_PROGRAM_CACHE,t=e===void 0?NaN:Number(e);return Number.isFinite(t)&&t>=0?t:8}function wt(e){const t=E.get(e);return t&&(E.delete(e),E.set(e,t)),t}function jt(e,t){const r=xt();if(r!==0)for(E.delete(e),E.set(e,t);E.size>r;){const o=E.keys().next().value;E.delete(o)}}function At(e,t){return`${e}\0${t??""}`}const Pt=new Set(["zod",/^zod\/./]);function $t(e){for(const t of e.getImportDeclarations()){const r=t.getModuleSpecifierValue();for(const o of Pt)if(typeof o=="string"){if(r===o)return!0}else if(o.test(r))return!0}return!1}function Ot(e){for(const t of["$defs","definitions"]){const r=e[t];if(!r||typeof r!="object")continue;const o=Object.keys(r);if(o.length===0)continue;const n=new Set(o.filter(i=>/zod/i.test(i)));for(const[i,s]of Object.entries(r)){if(n.has(i)||typeof s!="object"||s===null)continue;const a=s,c=typeof a.$ref=="string"?a.$ref:"";if(c){for(const u of n)if(c.includes(u)){n.add(i);break}}}for(const i of n)delete r[i]}ae(e)}function ae(e,t){if(!e||typeof e!="object")return;const r=t??new WeakSet;if(!r.has(e)){r.add(e);for(const o of Object.keys(e))if(o==="$ref"&&typeof e[o]=="string"){const n=e[o];/zod/i.test(n)&&delete e[o]}for(const[,o]of Object.entries(e))if(typeof o=="object"&&o!==null)if(Array.isArray(o))for(const n of o)typeof n=="object"&&n!==null&&ae(n,r);else ae(o,r)}}function Nt(e){const t=new Set;for(const o of["$defs","definitions"]){const n=e[o];if(n&&typeof n=="object")for(const i of Object.keys(n))t.add(i)}const r=ce(e,t);if(r.length>0)throw new Error(`[apigen-core-client] Generated schema contains ${r.length} unresolvable $ref(s): ${r.join(", ")}. This usually means zod-internal definitions were stripped but $ref references to them remain. Check the source file's imports or the ts-json-schema-generator output.`)}function ce(e,t){if(!e||typeof e!="object")return[];const r=[];for(const[o,n]of Object.entries(e))if(o==="$ref"&&typeof n=="string"){const i=n.match(/#\/(?:\$defs|definitions)\/(.+)$/);i&&!t.has(i[1])&&r.push(n)}else if(typeof n=="object"&&n!==null)if(Array.isArray(n))for(const i of n)typeof i=="object"&&i!==null&&r.push(...ce(i,t));else r.push(...ce(n,t));return r}function kt(e){const t=e.anyOf;if(!Array.isArray(t)||t.length<2)return e;const r=t,o=X(r),n={...e};return delete n.anyOf,{...n,oneOf:r,...o?{discriminator:o}:{},[Z]:n[Z]??"union"}}function It(e,t,r){const{DEFAULT_CONFIG:o}=O("ts-json-schema-generator/dist/src/Config.js"),n={...o,...e},i=n.path,s=At(i,n.tsconfig);let a;a=r?r.statVersion(i):Fe(i);let c;if(s!==void 0){const l=(r==null?void 0:r.generatorCache.get(s))??wt(s);l&&l.version===a&&(c=l.gen)}if(!c){const{createProgram:l}=O("ts-json-schema-generator/dist/factory/program.js"),{createParser:f,createFormatter:m,SchemaGenerator:h}=se(),y=vt(),d=bt(y.SyntaxKind.BigIntKeyword,y.SyntaxKind.TypeReference),g=l(n),x=f(g,n,d),p=m(n);if(c=new h(g,x,p,n),r&&r.stats.generatorsBuilt++,s!==void 0&&a!==void 0){const T={version:a,gen:c};jt(s,T),r==null||r.generatorCache.set(s,T)}}const u=c.createSchema(n.type);return Ot(u),Nt(u),u}function Et(e,t){let r=e.trim();if(r=ze(r),t!=null&&t.size){const n=t.get(r);if(n!==void 0)return n}const o=r.match(/^ReadonlyArray<(.+)>$/);for(o&&(r=`${o[1].trim()}[]`);r.startsWith("readonly ");)r=r.slice(9).trim();return r}function Ve(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}const Ct=Object.entries(Ke).map(([e,t])=>({pattern:new RegExp(`import\\(["'][^"']*${Ve(e)}[^"']*["']\\)\\.\\w+`,"g"),key:t}));function ze(e){let t=e;for(const{pattern:r,key:o}of Ct)t=t.replace(r,o);return t}function Ft(e,t){let r=ze(e);for(const[o,n]of t)r=r.replace(new RegExp(`\\b${Ve(o)}\\b`,"g"),n);return r}async function N(e,t,r,o,n,i){const s=t.getFilePath(),a=`${s}\0${o??""}\0${r}`,c=i??new Set;if(c.has(a))return{};if(!n){const y=new Set(c);return y.add(a),we(e,t,r,o,void 0,y)}const u=n.schemaCache.get(a);if(u!==void 0)return n.stats.schemaCacheHits++,u;const l=rt(s,o,n.statVersion(s)),f=l.get(r);if(f!==void 0)return n.stats.schemaCacheHits++,n.schemaCache.set(a,Promise.resolve(f)),f;n.stats.schemaCacheMisses++;const m=new Set(c);m.add(a);const h=we(e,t,r,o,n,m).then(y=>(l.set(r,y),y)).catch(y=>{throw n.schemaCache.delete(a),y});return n.schemaCache.set(a,h),h}async function we(e,t,r,o,n,i){if(["void","undefined","null","Promise<void>"].includes(r))return{type:"null"};let s;if(n){const m=n.aliasCache.get(t);s=m??xe(t),m||n.aliasCache.set(t,s)}else s=xe(t);const a=Et(r,s),c=ie[a];if(c!==void 0)return c;const u=await St(a,m=>N(e,t,m,o,n,i));if(u!==void 0)return u;const l=(n==null?void 0:n.zodImportCache.get(t))??$t(t);if(n&&n.zodImportCache.set(t,l),!l)try{const m={path:t.getFilePath(),type:a,skipTypeCheck:!0,tsconfig:o,topRef:!1},h=It(m,!0,n);return kt(h)}catch{}try{const m=await gt(e,t,a,h=>Le(h,y=>N(e,t,y,o,n,i),0));if(m!==void 0)return m}catch{}const f=Ft(a,s);return H(f,0,s)}function pe(e,t,r){if(e!=null&&e.hasInitializer()){const o=e.getInitializer();if(o)return o.getText()}return Rt(r,t)}function Rt(e,t){var s;const r=e,o=((s=r==null?void 0:r.getJsDocs)==null?void 0:s.call(r))??[],n=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),i=new RegExp(`\\[\\s*${n}\\s*=\\s*([^\\]]+)\\]`);for(const a of o)for(const c of a.getTags()){if(c.getTagName()!=="param")continue;const u=c.getText().match(i);if(u)return u[1].trim()}}function _t(e){const t=e.trim(),r=t.match(/^(['"`])([\s\S]*)\1$/);if(r)return r[2];if(t==="true")return!0;if(t==="false")return!1;if(t==="null")return null;if(t!=="undefined"){if(/^-?\d+(\.\d+)?$/.test(t))return Number(t);try{return JSON.parse(t)}catch{return t}}}function Lt(e,t){const r=_t(t);if(r===void 0)return;e.default=r;const o=typeof r=="string"?r:JSON.stringify(r),n=typeof e.description=="string"?e.description:void 0;e.description=n?`${n} (default: ${o})`:`(default: ${o})`}let B;function Mt(){return B||(B=O("ts-morph").SyntaxKind,B)}function Y(e){try{if(!e)return;const t=Mt();if(e.getKind()!==t.TypeReference)return;const r=e;if(r.getTypeArguments().length>0)return;const o=r.getTypeName();if(o.getKind()!==t.Identifier)return;const i=o.getSymbol();if(!i)return;const s=i.getDeclarations().find(f=>f.getKindName()==="TypeAliasDeclaration");if(!s)return;const a=s,c=a.getType();if(!(c.isString()||c.isNumber()||c.isBoolean()))return;const l=a.getJsDocs();for(const f of l)for(const m of f.getTags())if(m.getTagName()==="format"){const h=m.getCommentText();if(h!==void 0)return h.trim()}return}catch{return}}const Kt=new Set(["AsyncGenerator","AsyncIterableIterator","AsyncIterable","Generator","IterableIterator","Iterable","ApiStream"]);function Vt(e){const t=[];let r=0,o="";for(const n of e)n==="<"||n==="("||n==="["||n==="{"?r++:(n===">"||n===")"||n==="]"||n==="}")&&r--,n===","&&r===0?(t.push(o.trim()),o=""):o+=n;return o.trim().length>0&&t.push(o.trim()),t}function me(e){const t=e.trim(),r=t.indexOf("<");if(r===-1||!t.endsWith(">"))return null;const o=t.slice(0,r),n=o.includes(".")?o.slice(o.lastIndexOf(".")+1):o;if(!Kt.has(n))return null;let i=0;for(let c=r;c<t.length;c++){const u=t[c];if(u==="<")i++;else if(u===">"&&(i--,i===0&&c!==t.length-1))return null}if(i!==0)return null;const s=t.slice(r+1,-1),a=Vt(s);return a.length>0?a[0]:null}async function zt(e){const t=e.session===void 0,r=Re(e.session??fe());try{return await qt(e,r)}finally{t&&r.dispose()}}async function qt(e,t){const{sourceFile:r,namespace:o="",dropFileSegment:n=!1,tsconfig:i}=e,s=t.projectFor(i),a=t.sourceFileFor(r,i),c=Q.basename(r),u=k(Dt(c)),l=n?null:u,f=k(o),m=[];for(const[d,g]of a.getExportedDeclarations()){if(d==="default"||U(d))continue;const x=Wt(g);if(x){const S=x.getSignature(),j=Pe(S,x),b=S.getReturnType().getText(),A=F(S);m.push(await D(s,a,f,l,d,j,b,x.isAsync(),i,t,A));continue}const p=g.find(S=>S.getKindName()==="VariableDeclaration");if(!p)continue;const T=p.getInitializer(),w=T==null?void 0:T.getKindName();if(T&&["ArrowFunction","FunctionExpression"].includes(w??"")){const j=p.getType().getCallSignatures();if(j.length===0)continue;const b=j[0],A=$e(b,p,p.getVariableStatement()),P=b.getReturnType().getText(),v=F(b),$=T.isAsync();m.push(await D(s,a,f,l,d,A,P,$,i,t,v))}else if(w==="ObjectLiteralExpression"){const S=p.getType();for(const j of S.getProperties()){const b=j.getName();if(U(b))continue;const P=j.getTypeAtLocation(p).getCallSignatures();if(P.length===0)continue;const v=P[0],$=$e(v,p,p.getVariableStatement()),C=v.getReturnType().getText(),K=F(v),V=[...l?[l]:[],k(d),k(b)];m.push(await J(s,a,f,V,b,$,C,!1,i,t,K))}}else{const S=p.getType(),j=S.getText();if(R(S,p)){const b=await N(s,a,j,i,t);m.push(Bt(f,l,d,b))}else console.warn(`[apigen-core] Skipping non-callable, non-serializable export: ${d}`)}}const h=a.getDefaultExportSymbol();if(h){const d=a.getExportAssignment(g=>!g.isExportEquals());if(d){const g=d.getExpression(),x=g.getKindName();if(["ArrowFunction","FunctionExpression"].includes(x)){const T=g.getType().getCallSignatures();if(T.length>0){const w=T[0],S=te(w,d),j=w.getReturnType().getText(),b=F(w),A=g.isAsync();m.push(await D(s,a,f,l,"default",S,j,A,i,t,b))}}else{const p=g.getType();for(const T of p.getProperties()){const w=T.getName();if(U(w))continue;const j=T.getTypeAtLocation(d).getCallSignatures();if(j.length===0)continue;const b=j[0],A=te(b,d),P=b.getReturnType().getText(),v=F(b),$=[...l?[l]:[],k("default"),k(w)];m.push(await J(s,a,f,$,w,A,P,!1,i,t,v))}}}else{const g=h.getDeclarations();for(const x of g){if(x.getKindName()!=="FunctionDeclaration")continue;const p=x,T=p.getName(),w=T&&T.length>0?T:"default",S=p.getSignature(),j=Pe(S,p),b=S.getReturnType().getText(),A=F(S);m.push(await D(s,a,f,l,w,j,b,p.isAsync(),i,t,A))}}}const y=Ut(a);if(y.length>0)for(const{name:d,sig:g}of y){if(U(d))continue;const x=te(g),p=g.getReturnType().getText(),T=F(g),w=[...l?[l]:[],k(d)];m.push(await J(s,a,f,w,d,x,p,!1,i,t,T))}return m}function je(e,t,r,o){const n=new Set,i=s=>{if(Array.isArray(s))return s.map(i);if(!s||typeof s!="object"||n.has(s))return s;n.add(s);try{const a=s,c={};for(const[u,l]of Object.entries(a)){if(u==="definitions"||u==="$defs"){const f=u,m=t[f];for(const[h,y]of Object.entries(l)){const d=i(y),g=m[h];if(g!==void 0&&JSON.stringify(g)!==JSON.stringify(d))throw new Error(`[apigen-core-client] Function "${r}": param "${o}" contributes a "${f}.${h}" definition that conflicts with an identically-named definition already hoisted from another param/output in the same function. Two structurally different types share the same generated definition key, so apigen cannot safely merge them into one function-level schema.`);m[h]=d}continue}c[u]=i(l)}return c}finally{n.delete(s)}};return i(e)}function Ae(e,t){if(!t||e.format!==void 0||"$ref"in e||"properties"in e||"items"in e)return;const r=e.type;(r==="string"||r==="number"||r==="integer"||r==="boolean")&&(e.format=t)}function F(e){var t;try{return Y((t=e.getDeclaration())==null?void 0:t.getReturnTypeNode())}catch{return}}async function D(e,t,r,o,n,i,s,a,c,u,l){const f=k(n);return J(e,t,r,o?[o,f]:[f],n,i,s,a,c,u,l)}async function J(e,t,r,o,n,i,s,a,c,u,l){const f=i.length>0&&i[0].name==="ctx",m=i.filter(v=>v.name!=="ctx"),h=m.filter(v=>!v.optional).map(v=>v.name),y={},d={definitions:{},$defs:{}};for(const v of m){const $=await N(e,t,v.type,c,u),C=je($,d,n,v.name);v.defaultValue!==void 0&&Lt(C,v.defaultValue),Ae(C,v.format),y[v.name]=C}const g=s.replace(/^Promise<(.+)>$/,"$1").trim(),x=me(g),p=x!==null,T=p?x:g,w=await N(e,t,T,c,u),S={definitions:{},$defs:{}},j=je(w,S,n,"<return>"),b=l?{...j}:j;Ae(b,l),Object.keys(S.definitions).length>0&&(b.definitions={...b.definitions,...S.definitions}),Object.keys(S.$defs).length>0&&(b.$defs={...b.$defs,...S.$defs});const A={type:"object",properties:y,required:h,...Object.keys(d.definitions).length>0?{definitions:d.definitions}:{},...Object.keys(d.$defs).length>0?{$defs:d.$defs}:{}};return{id:qe(r,o),host:"ts",namespace:r,path:o,kind:"action",async:a,streaming:p,safe:!1,input:A,output:b,envelope:{},typeText:{lang:"ts",input:Gt(i),output:T},...f?{hasCtx:!0}:{}}}function Bt(e,t,r,o){const n=k(r),i=t?[t,n]:[n];return{id:qe(e,i),host:"ts",namespace:e,path:i,kind:"query",async:!1,streaming:!1,safe:!0,input:{type:"object",properties:{},required:[]},output:o,envelope:{},typeText:null}}function qe(e,t){return(e.raw?[e,...t]:t).map(o=>o.words.join("-")).join("/")}function de(e){return e.split(/[-_.]+/).flatMap(t=>t.replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").split("_").filter(Boolean)).map(t=>t.toLowerCase()).filter(Boolean)}function k(e){return{raw:e,words:de(e)}}function Dt(e){return e.replace(/\.[^.]+$/,"").replace(/[._]+/g,"-")}function Ut(e){const t=[];for(const r of e.getStatements()){if(r.getKindName()!=="ExpressionStatement")continue;const o=r.getExpression();if(o.getKindName()!=="BinaryExpression")continue;const n=o;if(n.getLeft().getText().trim()!=="module.exports"||n.getOperatorToken().getKindName()!=="EqualsToken")continue;const s=n.getRight(),a=s.getType();for(const c of a.getProperties()){const l=c.getTypeAtLocation(s).getCallSignatures();l.length!==0&&t.push({name:c.getName(),sig:l[0]})}}return t}function Wt(e){let t;for(const r of e){if(r.getKindName()!=="FunctionDeclaration")continue;const o=r;if(t||(t=o),o.getBody())return o}return t}function Pe(e,t){return e.getParameters().map(r=>{var s;const o=r.getDeclarations(),n=o.length>0&&o[0].getKindName()==="Parameter"?o[0]:null,i=r.isOptional()||((n==null?void 0:n.hasInitializer())??!1)||(((s=n==null?void 0:n.hasQuestionToken)==null?void 0:s.call(n))??!1);return{name:r.getName(),type:r.getTypeAtLocation(e.getDeclaration()).getText(),optional:i,defaultValue:pe(n,r.getName(),t),format:Y(n==null?void 0:n.getTypeNode())}})}function $e(e,t,r){return e.getParameters().map(o=>{var a;const n=o.getDeclarations(),i=n.length>0&&n[0].getKindName()==="Parameter"?n[0]:null,s=o.isOptional()||((i==null?void 0:i.hasInitializer())??!1)||(((a=i==null?void 0:i.hasQuestionToken)==null?void 0:a.call(i))??!1);return{name:o.getName(),type:o.getTypeAtLocation(t).getText(),optional:s,defaultValue:pe(i,o.getName(),r??t),format:Y(i==null?void 0:i.getTypeNode())}})}function te(e,t){return e.getParameters().map(r=>{var s,a,c;const o=r.getDeclarations(),n=o.length>0&&o[0].getKindName()==="Parameter"?o[0]:null,i=r.isOptional()||((n==null?void 0:n.hasInitializer())??!1)||(((s=n==null?void 0:n.hasQuestionToken)==null?void 0:s.call(n))??!1);return{name:r.getName(),type:n?n.getType().getText():((c=(a=r.getValueDeclaration())==null?void 0:a.getType())==null?void 0:c.getText())??"unknown",optional:i,defaultValue:pe(n,r.getName(),t),format:Y(n==null?void 0:n.getTypeNode())}})}function Gt(e){const t=e.filter(r=>r.name!=="ctx");return t.length===0?"()":"("+t.map(r=>`${r.name}${r.optional?"?":""}: ${r.type}`).join(", ")+")"}function U(e){return!!(e==="__samples__"||e.startsWith("__"))}function R(e,t,r=new Set){if(e.getCallSignatures().length>0||e.getConstructSignatures().length>0)return!1;if(e.isString()||e.isNumber()||e.isBoolean()||e.isNull()||e.isUndefined()||e.isStringLiteral()||e.isNumberLiteral()||e.isBooleanLiteral()||e.isEnumLiteral())return!0;if(e.isArray()||e.isReadonlyArray()){const o=e.getArrayElementType();return o?R(o,t,r):!1}if(e.isTuple())return e.getTupleElements().every(o=>R(o,t,r));if(e.isUnion())return e.getUnionTypes().every(o=>R(o,t,r));if(e.isIntersection())return e.getIntersectionTypes().every(o=>R(o,t,r));if(e.isObject()){const o=e.getText(t);if(r.has(o))return!0;r.add(o);const n=e.getStringIndexType(),i=e.getNumberIndexType();if(n||i)return[n,i].every(a=>!a||R(a,t,r));const s=e.getProperties();return s.length===0?!0:s.every(a=>{const c=a.getTypeAtLocation(t);return R(c,t,r)})}return!1}function Be(e,t){return async r=>{let o=()=>t(r);for(let n=e.length-1;n>=0;n--){const i=e[n],s=o;o=()=>i(r,s)}return o()}}function De(e,t){return Be(e,t)}function Ht(e,t,r={}){const o=e.map(n=>n.capabilities.extractLayer).filter(n=>!!n).map(n=>n.createLayer?n.createLayer(r):n.layer).filter(n=>!!n);return De(o,t)}let W;function Jt(){return W||(W=O("ts-morph").Scope,W)}async function Zt(e){const t=e.session===void 0,r=Re(e.session??fe());try{return await Qt(e,r)}finally{t&&r.dispose()}}async function Qt(e,t){const{sourceFile:r,namespace:o="",tsconfig:n,includeInstances:i=!1}=e,s=t.projectFor(n),a=t.sourceFileFor(r,n),c=Q.basename(r),u=L(Yt(c)),l=L(o),f=[];for(const[m,h]of a.getExportedDeclarations()){const y=h.find(p=>p.getKindName()==="ClassDeclaration");if(!y)continue;const d=m==="default"?y.getName():m;if(!d||re(d))continue;const g=L(d),x=Jt();for(const p of y.getStaticMethods()){const T=p.getName();if(re(T))continue;const w=p.getScope();if(w===x.Private||w===x.Protected)continue;const S=p.getSignature(),j=ne(S,p),b=S.getReturnType().getText(),A=p.isAsync(),P=[u,g,L(T)];f.push(await Xt(s,a,l,P,j,b,A,n,t))}if(i){{const T=y.getConstructors()[0]??null;let w=[];if(T){const v=T.getSignature();w=ne(v,T)}const S=[u,g],j=ue(l,S),b=w.filter(v=>v.name!=="ctx"),A=b.filter(v=>!v.optional).map(v=>v.name),P={};for(const v of b)P[v.name]=await N(s,a,v.type,n,t);f.push({id:j,host:"ts",namespace:l,path:S,kind:"constructor",async:!1,streaming:!1,safe:!1,input:{type:"object",properties:P,required:A},output:{type:"object",properties:{instanceId:{type:"string"}},required:["instanceId"]},envelope:{},typeText:{lang:"ts",input:en(w),output:"{ instanceId: string }"}})}for(const p of y.getInstanceMethods()){const T=p.getName();if(re(T))continue;const w=p.getScope();if(w===x.Private||w===x.Protected)continue;const S=p.getSignature(),j=ne(S,p),b=S.getReturnType().getText(),A=p.isAsync(),P=[u,g,L(T)],v=ue(l,P),$=j.filter(I=>I.name!=="ctx"),C=$.filter(I=>!I.optional).map(I=>I.name),K={};for(const I of $)K[I.name]=await N(s,a,I.type,n,t);const V=b.replace(/^Promise<(.+)>$/,"$1").trim(),ge=me(V),ye=ge!==null,he=ye?ge:V,Xe=await N(s,a,he,n,t);f.push({id:v,host:"ts",namespace:l,path:P,kind:"instance-method",async:A,streaming:ye,safe:!1,input:{type:"object",properties:K,required:C},output:Xe,envelope:{type:"object",properties:{instanceId:{type:"string"}},required:["instanceId"]},typeText:{lang:"ts",input:Ue(j),output:he}})}}}return f}async function Xt(e,t,r,o,n,i,s,a,c){const u=n.filter(p=>p.name!=="ctx"),l=u.filter(p=>!p.optional).map(p=>p.name),f={};for(const p of u)f[p.name]=await N(e,t,p.type,a,c);const m=i.replace(/^Promise<(.+)>$/,"$1").trim(),h=me(m),y=h!==null,d=y?h:m,g=await N(e,t,d,a,c);return{id:ue(r,o),host:"ts",namespace:r,path:o,kind:"action",async:s,streaming:y,safe:!1,input:{type:"object",properties:f,required:l},output:g,envelope:{},typeText:{lang:"ts",input:Ue(n),output:d}}}function ue(e,t){return(e.raw?[e,...t]:t).map(o=>o.words.join("-")).join("/")}function L(e){return{raw:e,words:de(e)}}function Yt(e){return e.replace(/\.[^.]+$/,"").replace(/[._]+/g,"-")}function ne(e,t){return e.getParameters().map(r=>{var s;const o=r.getDeclarations(),n=o.length>0&&o[0].getKindName()==="Parameter"?o[0]:null,i=r.isOptional()||((n==null?void 0:n.hasInitializer())??!1)||(((s=n==null?void 0:n.hasQuestionToken)==null?void 0:s.call(n))??!1);return{name:r.getName(),type:r.getTypeAtLocation(t).getText(),optional:i}})}function Ue(e){const t=e.filter(r=>r.name!=="ctx");return t.length===0?"()":"("+t.map(r=>`${r.name}${r.optional?"?":""}: ${r.type}`).join(", ")+")"}function en(e){return e.length===0?"()":"("+e.map(t=>`${t.name}${t.optional?"?":""}: ${t.type}`).join(", ")+")"}function re(e){return!!(e==="__samples__"||e.startsWith("__")||e.startsWith("_"))}const tn=new Map([[".ts","ts"],[".tsx","ts"],[".mts","ts"],[".cts","ts"],[".py","py"],[".rs","rust"],[".go","go"],[".java","java"]]);function We(e){const t=nt.extname(e).toLowerCase();return tn.get(t)}function Ge(e){return e.language??"ts"}function He(e,t){const r=We(t);return r===void 0?!1:r===Ge(e)}function nn(e,t){return t.filter(r=>He(e,r))}function rn(e){return{oneOf:[{type:"object",required:["index","status","value"],properties:{index:{type:"integer"},status:{type:"string",enum:["fulfilled"]},value:e}},{type:"object",required:["index","status","chunks"],properties:{index:{type:"integer"},status:{type:"string",enum:["fulfilled"]},chunks:{type:"array"}}},{type:"object",required:["index","status","reason"],properties:{index:{type:"integer"},status:{type:"string",enum:["rejected"]},reason:{},chunksDelivered:{type:"integer"}}}]}}function Je(e){return{operationConst:e.id,itemsSchema:e.input,resultSchema:rn(e.output)}}function Ze(e,t={}){const r=new Set(t.exclude??[]),o=new Map;for(const n of e){if(r.has(n.id))continue;const i=o.get(n.kind);i?i.push(n):o.set(n.kind,[n])}return o}function Oe(e){return{type:"string",enum:[e]}}function Ne(e,t){return{type:"object",required:["input"],properties:{input:{type:"object",required:["operation","items"],properties:{operation:t,items:{type:"array",items:e.itemsSchema},concurrency:{type:"number"},mode:{type:"string",enum:["parallel","serial","chained"]},onItemError:{type:"string",enum:["continue","abort"]},itemTimeoutMs:{type:"number"}},additionalProperties:!0}},additionalProperties:!1}}function ke(e,t){const r={},o={},n=[["definitions",r],["$defs",o]];for(const i of e){const s=t(i);for(const[a,c]of n){const u=s[a];if(u)for(const[l,f]of Object.entries(u)){const m=c[l];if(m!==void 0&&JSON.stringify(m)!==JSON.stringify(f))throw new Error(`[apigen-core-client] _batch mount: operation "${i.id}" contributes a "${a}.${l}" definition that conflicts with an identically-named definition already hoisted from another batched operation. Two structurally different types share the same generated definition key, so apigen cannot safely merge them into one _batch/<kind> schema.`);c[l]=f}}}return{...Object.keys(r).length>0?{definitions:r}:{},...Object.keys(o).length>0?{$defs:o}:{}}}function Qe(e){if(e.length===0)throw new Error("buildBatchKindSchema: at least one operation is required");const t=e.map(Je),r=ke(e,s=>s.input),o=ke(e,s=>s.output);if(e.length===1){const[s]=e,[a]=t;return{input:{...Ne(a,Oe(s.id)),...r},output:{type:"array",items:a.resultSchema,...o}}}const n=e.map((s,a)=>Ne(t[a],Oe(s.id))),i=X(n);return{input:{oneOf:n,...i?{discriminator:i}:{},...r},output:{oneOf:t.map(s=>({type:"array",items:s.resultSchema})),...o},...i?{discriminator:i}:{}}}function on(e,t={}){const r=Ze(e.operations,t),o=[];for(const[n,i]of r){const{input:s,output:a}=Qe(i),c=Ie(`_batch/${n}`,e,{kind:n,safe:n==="query",input:s,output:a});o.push({...c,operationIds:i.map(u=>u.id)})}return o}exports.buildBatchKindSchema=Qe;exports.buildBatchMountedOperations=on;exports.clearPersistentProjectCache=ot;exports.collectLocalImportPaths=st;exports.composeOnion=Be;exports.composeSchemas=ft;exports.createExtractInvoker=De;exports.createExtractInvokerFromPlugins=Ht;exports.createExtractionSession=fe;exports.deriveBatchOperationBranch=Je;exports.effectiveLanguage=Ge;exports.extract=zt;exports.extractClasses=Zt;exports.groupBatchableOperationsByKind=Ze;exports.isPrimitiveOnlyInputSchema=_e;exports.languageOfSource=We;exports.pluginConsumesSource=He;exports.pluginsToEnvelopeMiddlewares=ct;exports.sourcesForPlugin=nn;exports.syntheticOp=Ie;exports.tokenize=de;