@adhd/apigen-core-client 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,20 @@
1
+ ## 0.2.2 (2026-07-30)
2
+
3
+
4
+ ### 🚀 Features
5
+
6
+ - **apigen:** generic batch/bulk fan-out operations (FEAT-APIGEN-BULK-OPS-001)
7
+
8
+
9
+ ### 🩹 Fixes
10
+
11
+ - **apigen:** schema extraction required-array + CLI mount/discriminated-union gaps
12
+
13
+
14
+ ### ❤️ Thank You
15
+
16
+ - pseudosky
17
+
1
18
  ## 0.2.1 (2026-07-28)
2
19
 
3
20
  This was a version bump only for apigen-core-client to align it with other projects, there were no code changes.
package/index.d.ts CHANGED
@@ -1,14 +1,16 @@
1
1
  export type { GeneratedSchemas, ComposedSchemas, ExportMode, PluginInput, PluginOutput, RunInput, OutputPlugin, PluginLanguage, } from './lib/types';
2
2
  export type { Operation, OperationKind, Segment, TypeText, JSONSchema, ApigenSchemaHints, } from './lib/descriptor';
3
- export type { Plugin, TargetCapability, LayerCapability, MountCapability, MountedOperation, MountHostBridge, MountHostBridgeInvokeOptions, EnvelopeCapability, Call, Next, Result, Chunk, Transport, Extensions, Descriptor, Harness, Server, File, SyntheticOpFields, } from './lib/plugin';
3
+ export type { Plugin, TargetCapability, LayerCapability, ExtractLayerCapability, MountCapability, MountedOperation, MountHostBridge, MountHostBridgeInvokeOptions, EnvelopeCapability, Call, Next, Result, Chunk, Transport, Extensions, Descriptor, Harness, Server, File, SyntheticOpFields, } from './lib/plugin';
4
4
  export { syntheticOp } from './lib/plugin';
5
5
  export type { Logger } from 'pino';
6
- export { createExtractionSession, clearPersistentProjectCache, } from './lib/extraction-session';
6
+ export { createExtractionSession, clearPersistentProjectCache, collectLocalImportPaths, } from './lib/extraction-session';
7
7
  export type { ExtractionSession, ISessionStats, } from './lib/extraction-session';
8
8
  export { composeSchemas, pluginsToEnvelopeMiddlewares, } from './lib/compose-schemas';
9
9
  export { isPrimitiveOnlyInputSchema } from './lib/get-safety';
10
10
  export { extract, tokenize } from './lib/extract';
11
11
  export type { ExtractOptions } from './lib/extract';
12
+ export { composeOnion, createExtractInvoker, createExtractInvokerFromPlugins, } from './lib/extract-invoker';
13
+ export type { ExtractCall, ExtractResult, ExtractMiddleware, } from './lib/extract-invoker';
12
14
  export { extractClasses } from './lib/extract-classes';
13
15
  export type { ExtractClassesOptions } from './lib/extract-classes';
14
16
  export { languageOfSource, pluginConsumesSource, sourcesForPlugin, effectiveLanguage, } from './lib/source-language';
package/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var Re=Object.create;var oe=Object.defineProperty;var _e=Object.getOwnPropertyDescriptor;var Le=Object.getOwnPropertyNames;var Me=Object.getPrototypeOf,Ve=Object.prototype.hasOwnProperty;var qe=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Le(t))!Ve.call(e,r)&&r!==n&&oe(e,r,{get:()=>t[r],enumerable:!(o=_e(t,r))||o.enumerable});return e};var ze=(e,t,n)=>(n=e!=null?Re(Me(e)):{},qe(t||!e||!e.__esModule?oe(n,"default",{value:e,enumerable:!0}):n,e));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const I=require("ts-morph"),Ke=require("node:fs"),D=require("node:path"),E=require("ts-json-schema-generator");function Be(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const o=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,o.get?o:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const De=Be(D);function ie(e){return{raw:e,words:e.split(/(?=[A-Z])|[-_]/).map(t=>t.toLowerCase()).filter(Boolean)}}function de(e,t,n={}){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[r,...i]=o,s=r.replace(/^_+/,""),a=n.kind??"action",c={id:e,host:t.host,namespace:ie(s),path:i.map(ie),kind:a,async:n.async??!1,streaming:n.streaming??!1,safe:n.safe??a==="query",input:n.input??{},output:n.output??{},envelope:n.envelope??{},typeText:n.typeText??null};return n.hasCtx!==void 0&&(c.hasCtx=n.hasCtx),n.transports!==void 0&&(c.transports=n.transports),c}const ye=Symbol.for("adhd.apigen.extraction-session");function he(e,t){const n=[...e.getImportDeclarations().map(o=>o.getModuleSpecifierSourceFile()),...e.getExportDeclarations().map(o=>o.getModuleSpecifierSourceFile())];for(const o of n){if(!o)continue;const r=o.getFilePath();if(!r.includes("/node_modules/")&&!t.has(r)){t.add(r);try{o.refreshFromFileSystemSync()}catch{}he(o,t)}}}function Te(e){try{const t=Ke.statSync(e);return`${t.mtimeMs}:${t.size}`}catch{return"nostat"}}const _=new Map,J=new Map;function We(e,t,n){const o=t??"",r=_.get(o);let i=n;if(r&&r.fileVersions.size>0){const c=[n],l=[...r.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=J.get(s);return(!a||a.version!==i)&&(a={version:i,schemas:new Map},J.set(s,a)),a.schemas}function Ue(){_.clear(),J.clear()}function te(){const e={projectsBuilt:0,generatorsBuilt:0,schemaCacheHits:0,schemaCacheMisses:0},t=new Map;let n=!1;return{[ye]:!0,stats:e,schemaCache:new Map,aliasCache:new WeakMap,zodImportCache:new WeakMap,generatorCache:new Map,projectFor(r){if(n)throw new Error("apigen-core: ExtractionSession used after dispose()");const i=r??"",s=r?this.statVersion(r):"";let a=_.get(i);return a&&a.tsconfigVersion!==s&&(a=void 0),a||(a={project:r?new I.Project({tsConfigFilePath:r,skipAddingFilesFromTsConfig:!0}):new I.Project({skipAddingFilesFromTsConfig:!0}),tsconfigVersion:s,fileVersions:new Map},_.set(i,a),e.projectsBuilt++),a.project},sourceFileFor(r,i){const s=this.projectFor(i),a=_.get(i??""),c=this.statVersion(r);let l=s.getSourceFile(r);if(l===void 0?l=s.addSourceFileAtPath(r):a&&a.fileVersions.get(r)!==c&&l.refreshFromFileSystemSync(),a==null||a.fileVersions.set(r,c),a){const u=new Set([r]);he(l,u);for(const f of u)f!==r&&a.fileVersions.set(f,this.statVersion(f))}return l},statVersion(r){let i=t.get(r);return i===void 0&&(i=Te(r),t.set(r,i)),i},dispose(){n=!0,this.schemaCache.clear(),this.generatorCache.clear(),t.clear()}}}function be(e){const t=e;if(t[ye]!==!0)throw new Error("apigen-core: unknown ExtractionSession implementation — create sessions with createExtractionSession()");return t}const B="x-apigen-logical";function se(e,t){const n=new Set,o=[e];for(;o.length>0;){const r=o.pop();if(!r||n.has(r))continue;n.add(r);const i=r.$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=r.oneOf;if(Array.isArray(s))for(const f of s)typeof f=="object"&&f!==null&&o.push(f);const a=r.properties;if(a)for(const f of Object.values(a))o.push(f);const c=r.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=r.additionalProperties;typeof l=="object"&&l!==null&&o.push(l);const u=r.propertyNames;typeof u=="object"&&u!==null&&o.push(u)}}const ae=new Set(["string","number","boolean","integer"]);function Ge(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:n}=t;return typeof n=="string"?ae.has(n):Array.isArray(n)?n.every(o=>ae.has(o)||o==="null"):Array.isArray(t.enum)&&t.enum.length>0?t.enum.every(o=>["string","number","boolean"].includes(typeof o)):!1}function Se(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(Ge)}function Ze(e){var n,o;const t=[];for(const r of e){const i={...(n=r.capabilities.layer)==null?void 0:n.envelopeFields,...(o=r.capabilities.envelope)==null?void 0:o.request};Object.keys(i).length>0&&t.push({id:r.id,envelope:i})}return t}function He(e){const t={},n=o=>{for(const r of["definitions","$defs"]){const i=o[r];if(i)for(const[s,a]of Object.entries(i)){const c=s.startsWith("#/")?s:`#/${r}/${s}`;t[c]=a}}};for(const o of Object.values(e.schemas))n(o.input),n(o.output);if(Object.keys(t).length!==0)for(const[o,r]of Object.entries(e.schemas))try{se(r.input,t),se(r.output,t)}catch(i){throw new Error(`[apigen-core-client] Schema validation failed for function "${o}": ${i.message}`)}}function Je(e,t){const n=['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&&n.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.`),n.join(" ")}function Qe(e,t,n){He(e);const o={};for(const[r,i]of Object.entries(e.schemas)){const s=(n==null?void 0:n[r])??{},a=i.input.properties??{},c=i.input.required??[],l={},u=[],f={};for(const T of t)if(T.envelope&&s[T.id]!==!1)for(const[d,y]of Object.entries(T.envelope))l[d]=y,f[d]=T.id,u.includes(d)||u.push(d);const p={type:"object",properties:a,additionalProperties:!1,...c.length>0?{required:c}:{}},b=i.safe===!0||Se(i.input),h=i.input.definitions,m=i.input.$defs;o[r]={input:{type:"object",properties:{...l,data:p},required:[...u,...c.length>0?["data"]:[]],additionalProperties:!1,description:Je(Object.keys(l),Object.keys(a).length>0),...h?{definitions:h}:{},...m?{$defs:m}:{}},output:i.output,...i.hasCtx?{hasCtx:!0}:{},"x-apigen-safe":b,...Object.keys(f).length>0?{"x-apigen-envelope":f}:{}}}return o}const Xe=8;function Ye(e,t){try{return t?e.getText(t):e.getText()}catch{try{return e.getText()}catch{return}}}let et=0;async function tt(e,t,n,o){const r=`__ApigenProbe_${process.pid}_${et++}`;let i;try{i=t.addTypeAlias({name:r,type:n});const s=i.getType();return await o(s)}catch{return}finally{try{i==null||i.remove()}catch{}}}async function ve(e,t,n){if(n>Xe)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=>ve(c,t,n+1))),a=W(s);return{oneOf:s,...a?{discriminator:a}:{},[B]:"union"}}if(e.isArray()){const o=e.getArrayElementType();return{type:"array",items:o?await t(o.getText()):{}}}if(e.isTuple()){const o=e.getTupleElements(),r=await Promise.all(o.map(i=>t(i.getText())));return{type:"array",items:r,minItems:r.length,maxItems:r.length}}if(e.isObject()){const o=e.getStringIndexType(),r=e.getNumberIndexType(),i=o??r,s=e.getProperties();if(i&&s.length===0)return{type:"object",additionalProperties:await t(i.getText())};const a={};for(const c of s){const l=c.getName(),f=c.getDeclarations()[0];let p;if(f)try{p=c.getTypeAtLocation(f)}catch{p=void 0}if(p!==void 0&&p.getCallSignatures().length>0)continue;const b=p!==void 0?Ye(p,f):void 0;a[l]=b!==void 0?await t(b):{}}return Object.keys(a).length>0?{type:"object",properties:a}:{}}return{}}function W(e){if(e.length<2)return;const t=[];for(const o of e){if(o.type!=="object")return;const r=o.properties;if(!r||typeof r!="object")return;t.push(r)}const n=Object.keys(t[0]).filter(o=>t.every(r=>Object.prototype.hasOwnProperty.call(r,o)));for(const o of n){const r=[];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}r.push(String(u[0]))}if(!i||new Set(r).size!==r.length)continue;const s={};return r.forEach((a,c)=>{s[a]=`#/oneOf/${c}`}),{propertyName:o,mapping:s}}}function z(e,t,n){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 r=Q[o];if(r!==void 0)return r;if(n!=null&&n.size){const i=n.get(o);if(i!==void 0){const s=Q[i];if(s!==void 0)return s}}if(o.endsWith("[]"))return{type:"array",items:z(o.slice(0,-2),t+1,n)};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=>z(c,t+1,n)),a=W(s);return{oneOf:s,...a?{discriminator:a}:{},[B]:"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("?","")]=z(l,t+1,n))}return{type:"object",properties:s}}return{}}function xe(e){const t=[];let n=0,o=0;for(let i=0;i<e.length;i++){const s=e[i];s==="<"||s==="["||s==="{"||s==="("?n++:s===">"||s==="]"||s==="}"||s===")"?n--:s===","&&n===0&&(t.push(e.slice(o,i).trim()),o=i+1)}const r=e.slice(o).trim();return r.length>0&&t.push(r),t}function nt(e){const t=/^(?:Readonly)?Map<(.+)>$/.exec(e);return t?t[1]:void 0}function rt(e){const t=/^(?:Readonly)?Set<(.+)>$/.exec(e);return t?t[1]:void 0}function ot(e){let t=e.trim();if(t.startsWith("readonly ")&&(t=t.slice(9).trim()),!t.startsWith("[")||!t.endsWith("]"))return;const n=t.slice(1,-1).trim();if(n.length!==0)return xe(n)}async function it(e,t){const n=e.trim(),o=nt(n);if(o!==void 0){const s=xe(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 r=rt(n);if(r!==void 0)return{type:"array",items:await t(r),uniqueItems:!0};const i=ot(n);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 we={"decimal.js":"Decimal"},Q={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"}},ce={Uint8Array:"byte",Buffer:"byte",Decimal:"decimal"};function ue(e){var n;const t=new Map;for(const o of e.getImportDeclarations()){const r=o.getModuleSpecifierValue(),i=we[r];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=((n=a.getAliasNode())==null?void 0:n.getText())??a.getName();c!==i&&t.set(c,i)}}return t}function st(e,t){return n=>{n.addNodeParser({supportsNode(o){var i,s,a;if(o.kind!==t)return!1;const r=((i=o.typeName)==null?void 0:i.escapedText)??((a=(s=o.typeName)==null?void 0:s.right)==null?void 0:a.escapedText);return r!==void 0&&Object.prototype.hasOwnProperty.call(ce,r)},createType(o){var i,s,a;const r=((i=o.typeName)==null?void 0:i.escapedText)??((a=(s=o.typeName)==null?void 0:s.right)==null?void 0:a.escapedText);return new E.AnnotatedType(new E.StringType,{format:ce[r]},!1)}}),n.addNodeParser({supportsNode(o){return o.kind===e},createType(){return new E.AnnotatedType(new E.StringType,{format:"int64"},!1)}})}}let F;function at(){if(F)return F;try{const e=D.dirname(require.resolve("ts-json-schema-generator/package.json"));F=require(require.resolve("typescript",{paths:[e]}))}catch{F=require("typescript")}return F}const k=new Map;function ct(){const e=process.env.APIGEN_PROGRAM_CACHE,t=e===void 0?NaN:Number(e);return Number.isFinite(t)&&t>=0?t:8}function ut(e){const t=k.get(e);return t&&(k.delete(e),k.set(e,t)),t}function lt(e,t){const n=ct();if(n!==0)for(k.delete(e),k.set(e,t);k.size>n;){const o=k.keys().next().value;k.delete(o)}}function ft(e,t){return`${e}\0${t??""}`}const pt=new Set(["zod",/^zod\/./]);function mt(e){for(const t of e.getImportDeclarations()){const n=t.getModuleSpecifierValue();for(const o of pt)if(typeof o=="string"){if(n===o)return!0}else if(o.test(n))return!0}return!1}function gt(e){for(const t of["$defs","definitions"]){const n=e[t];if(!n||typeof n!="object")continue;const o=Object.keys(n);if(o.length===0)continue;const r=new Set(o.filter(i=>/zod/i.test(i)));for(const[i,s]of Object.entries(n)){if(r.has(i)||typeof s!="object"||s===null)continue;const a=s,c=typeof a.$ref=="string"?a.$ref:"";if(c){for(const l of r)if(c.includes(l)){r.add(i);break}}}for(const i of r)delete n[i]}X(e)}function X(e,t){if(!e||typeof e!="object")return;const n=t??new WeakSet;if(!n.has(e)){n.add(e);for(const o of Object.keys(e))if(o==="$ref"&&typeof e[o]=="string"){const r=e[o];/zod/i.test(r)&&delete e[o]}for(const[,o]of Object.entries(e))if(typeof o=="object"&&o!==null)if(Array.isArray(o))for(const r of o)typeof r=="object"&&r!==null&&X(r,n);else X(o,n)}}function dt(e){const t=new Set;for(const o of["$defs","definitions"]){const r=e[o];if(r&&typeof r=="object")for(const i of Object.keys(r))t.add(i)}const n=Y(e,t);if(n.length>0)throw new Error(`[apigen-core-client] Generated schema contains ${n.length} unresolvable $ref(s): ${n.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 Y(e,t){if(!e||typeof e!="object")return[];const n=[];for(const[o,r]of Object.entries(e))if(o==="$ref"&&typeof r=="string"){const i=r.match(/#\/(?:\$defs|definitions)\/(.+)$/);i&&!t.has(i[1])&&n.push(r)}else if(typeof r=="object"&&r!==null)if(Array.isArray(r))for(const i of r)typeof i=="object"&&i!==null&&n.push(...Y(i,t));else n.push(...Y(r,t));return n}function yt(e){const t=e.anyOf;if(!Array.isArray(t)||t.length<2)return e;const n=t,o=W(n),r={...e};return delete r.anyOf,{...r,oneOf:n,...o?{discriminator:o}:{},[B]:r[B]??"union"}}function ht(e,t,n){const{DEFAULT_CONFIG:o}=require("ts-json-schema-generator/dist/src/Config.js"),r={...o,...e},i=r.path,s=ft(i,r.tsconfig);let a;a=n?n.statVersion(i):Te(i);let c;if(s!==void 0){const u=(n==null?void 0:n.generatorCache.get(s))??ut(s);u&&u.version===a&&(c=u.gen)}if(!c){const{createProgram:u}=require("ts-json-schema-generator/dist/factory/program.js"),f=at(),p=st(f.SyntaxKind.BigIntKeyword,f.SyntaxKind.TypeReference),b=u(r),h=E.createParser(b,r,p),m=E.createFormatter(r);if(c=new E.SchemaGenerator(b,h,m,r),n&&n.stats.generatorsBuilt++,s!==void 0&&a!==void 0){const T={version:a,gen:c};lt(s,T),n==null||n.generatorCache.set(s,T)}}const l=c.createSchema(r.type);return gt(l),dt(l),l}function Tt(e,t){let n=e.trim();if(n=Pe(n),t!=null&&t.size){const r=t.get(n);if(r!==void 0)return r}const o=n.match(/^ReadonlyArray<(.+)>$/);for(o&&(n=`${o[1].trim()}[]`);n.startsWith("readonly ");)n=n.slice(9).trim();return n}function je(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}const bt=Object.entries(we).map(([e,t])=>({pattern:new RegExp(`import\\(["'][^"']*${je(e)}[^"']*["']\\)\\.\\w+`,"g"),key:t}));function Pe(e){let t=e;for(const{pattern:n,key:o}of bt)t=t.replace(n,o);return t}function St(e,t){let n=Pe(e);for(const[o,r]of t)n=n.replace(new RegExp(`\\b${je(o)}\\b`,"g"),r);return n}async function $(e,t,n,o,r,i){const s=t.getFilePath(),a=`${s}\0${o??""}\0${n}`,c=i??new Set;if(c.has(a))return{};if(!r){const h=new Set(c);return h.add(a),le(e,t,n,o,void 0,h)}const l=r.schemaCache.get(a);if(l!==void 0)return r.stats.schemaCacheHits++,l;const u=We(s,o,r.statVersion(s)),f=u.get(n);if(f!==void 0)return r.stats.schemaCacheHits++,r.schemaCache.set(a,Promise.resolve(f)),f;r.stats.schemaCacheMisses++;const p=new Set(c);p.add(a);const b=le(e,t,n,o,r,p).then(h=>(u.set(n,h),h)).catch(h=>{throw r.schemaCache.delete(a),h});return r.schemaCache.set(a,b),b}async function le(e,t,n,o,r,i){if(["void","undefined","null","Promise<void>"].includes(n))return{type:"null"};let s;if(r){const p=r.aliasCache.get(t);s=p??ue(t),p||r.aliasCache.set(t,s)}else s=ue(t);const a=Tt(n,s),c=Q[a];if(c!==void 0)return c;const l=await it(a,p=>$(e,t,p,o,r,i));if(l!==void 0)return l;const u=(r==null?void 0:r.zodImportCache.get(t))??mt(t);if(r&&r.zodImportCache.set(t,u),!u)try{const p={path:t.getFilePath(),type:a,skipTypeCheck:!0,tsconfig:o,topRef:!1},b=ht(p,!0,r);return yt(b)}catch{}try{const p=await tt(e,t,a,b=>ve(b,h=>$(e,t,h,o,r,i),0));if(p!==void 0)return p}catch{}const f=St(a,s);return z(f,0,s)}function ne(e,t,n){if(e!=null&&e.hasInitializer()){const o=e.getInitializer();if(o)return o.getText()}return vt(n,t)}function vt(e,t){var s;const n=e,o=((s=n==null?void 0:n.getJsDocs)==null?void 0:s.call(n))??[],r=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),i=new RegExp(`\\[\\s*${r}\\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 xt(e){const t=e.trim(),n=t.match(/^(['"`])([\s\S]*)\1$/);if(n)return n[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 wt(e,t){const n=xt(t);if(n===void 0)return;e.default=n;const o=typeof n=="string"?n:JSON.stringify(n),r=typeof e.description=="string"?e.description:void 0;e.description=r?`${r} (default: ${o})`:`(default: ${o})`}async function jt(e){const t=e.session===void 0,n=be(e.session??te());try{return await Pt(e,n)}finally{t&&n.dispose()}}async function Pt(e,t){const{sourceFile:n,namespace:o="",dropFileSegment:r=!1,tsconfig:i}=e,s=t.projectFor(i),a=t.sourceFileFor(n,i),c=D.basename(n),l=O(Ot(c)),u=r?null:l,f=O(o),p=[];for(const[m,T]of a.getExportedDeclarations()){if(m==="default"||q(m))continue;const d=kt(T);if(d){const S=d.getSignature(),x=fe(S,d),w=S.getReturnType().getText();p.push(await V(s,a,f,u,m,x,w,d.isAsync(),i,t));continue}const y=T.find(S=>S.getKindName()==="VariableDeclaration");if(!y)continue;const g=y.getInitializer(),v=g==null?void 0:g.getKindName();if(g&&["ArrowFunction","FunctionExpression"].includes(v??"")){const x=y.getType().getCallSignatures();if(x.length===0)continue;const w=x[0],P=pe(w,y,y.getVariableStatement()),j=w.getReturnType().getText(),A=g.isAsync();p.push(await V(s,a,f,u,m,P,j,A,i,t))}else if(v==="ObjectLiteralExpression"){const S=y.getType();for(const x of S.getProperties()){const w=x.getName();if(q(w))continue;const j=x.getTypeAtLocation(y).getCallSignatures();if(j.length===0)continue;const A=j[0],U=pe(A,y,y.getVariableStatement()),L=A.getReturnType().getText(),M=[...u?[u]:[],O(m),O(w)];p.push(await K(s,a,f,M,w,U,L,!1,i,t))}}else{const S=y.getType(),x=S.getText();if(C(S,y)){const w=await $(s,a,x,i,t);p.push(At(f,u,m,w))}else console.warn(`[apigen-core] Skipping non-callable, non-serializable export: ${m}`)}}const b=a.getDefaultExportSymbol();if(b){const m=a.getExportAssignment(T=>!T.isExportEquals());if(m){const T=m.getExpression(),d=T.getKindName();if(["ArrowFunction","FunctionExpression"].includes(d)){const g=T.getType().getCallSignatures();if(g.length>0){const v=g[0],S=G(v,m),x=v.getReturnType().getText(),w=T.isAsync();p.push(await V(s,a,f,u,"default",S,x,w,i,t))}}else{const y=T.getType();for(const g of y.getProperties()){const v=g.getName();if(q(v))continue;const x=g.getTypeAtLocation(m).getCallSignatures();if(x.length===0)continue;const w=x[0],P=G(w,m),j=w.getReturnType().getText(),A=[...u?[u]:[],O("default"),O(v)];p.push(await K(s,a,f,A,v,P,j,!1,i,t))}}}else{const T=b.getDeclarations();for(const d of T){if(d.getKindName()!=="FunctionDeclaration")continue;const y=d,g=y.getName(),v=g&&g.length>0?g:"default",S=y.getSignature(),x=fe(S,y),w=S.getReturnType().getText();p.push(await V(s,a,f,u,v,x,w,y.isAsync(),i,t))}}}const h=Nt(a);if(h.length>0)for(const{name:m,sig:T}of h){if(q(m))continue;const d=G(T),y=T.getReturnType().getText(),g=[...u?[u]:[],O(m)];p.push(await K(s,a,f,g,m,d,y,!1,i,t))}return p}function $t(e,t,n,o){const r=new Set,i=s=>{if(Array.isArray(s))return s.map(i);if(!s||typeof s!="object"||r.has(s))return s;r.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[b,h]of Object.entries(u)){const m=i(h),T=p[b];if(T!==void 0&&JSON.stringify(T)!==JSON.stringify(m))throw new Error(`[apigen-core-client] Function "${n}": param "${o}" contributes a "${f}.${b}" 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[b]=m}continue}c[l]=i(u)}return c}finally{r.delete(s)}};return i(e)}async function V(e,t,n,o,r,i,s,a,c,l){const u=O(r);return K(e,t,n,o?[o,u]:[u],r,i,s,a,c,l)}async function K(e,t,n,o,r,i,s,a,c,l){const u=i.length>0&&i[0].name==="ctx",f=i.filter(g=>g.name!=="ctx"),p=f.filter(g=>!g.optional).map(g=>g.name),b={},h={definitions:{},$defs:{}};for(const g of f){const v=await $(e,t,g.type,c,l),S=$t(v,h,r,g.name);g.defaultValue!==void 0&&wt(S,g.defaultValue),b[g.name]=S}const m=s.replace(/^Promise<(.+)>$/,"$1").trim(),T=await $(e,t,m,c,l),d={type:"object",properties:b,required:p,...Object.keys(h.definitions).length>0?{definitions:h.definitions}:{},...Object.keys(h.$defs).length>0?{$defs:h.$defs}:{}};return{id:$e(n,o),host:"ts",namespace:n,path:o,kind:"action",async:a,streaming:!1,safe:!1,input:d,output:T,envelope:{},typeText:{lang:"ts",input:Ct(i),output:m},...u?{hasCtx:!0}:{}}}function At(e,t,n,o){const r=O(n),i=t?[t,r]:[r];return{id:$e(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 $e(e,t){return(e.raw?[e,...t]:t).map(o=>o.words.join("-")).join("/")}function re(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:re(e)}}function Ot(e){return e.replace(/\.[^.]+$/,"").replace(/[._]+/g,"-")}function Nt(e){const t=[];for(const n of e.getStatements()){if(n.getKindName()!=="ExpressionStatement")continue;const o=n.getExpression();if(o.getKindName()!=="BinaryExpression")continue;const r=o;if(r.getLeft().getText().trim()!=="module.exports"||r.getOperatorToken().getKindName()!=="EqualsToken")continue;const s=r.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 kt(e){let t;for(const n of e){if(n.getKindName()!=="FunctionDeclaration")continue;const o=n;if(t||(t=o),o.getBody())return o}return t}function fe(e,t){return e.getParameters().map(n=>{var s;const o=n.getDeclarations(),r=o.length>0&&o[0].getKindName()==="Parameter"?o[0]:null,i=n.isOptional()||((r==null?void 0:r.hasInitializer())??!1)||(((s=r==null?void 0:r.hasQuestionToken)==null?void 0:s.call(r))??!1);return{name:n.getName(),type:n.getTypeAtLocation(e.getDeclaration()).getText(),optional:i,defaultValue:ne(r,n.getName(),t)}})}function pe(e,t,n){return e.getParameters().map(o=>{var a;const r=o.getDeclarations(),i=r.length>0&&r[0].getKindName()==="Parameter"?r[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:ne(i,o.getName(),n??t)}})}function G(e,t){return e.getParameters().map(n=>{var s,a,c;const o=n.getDeclarations(),r=o.length>0&&o[0].getKindName()==="Parameter"?o[0]:null,i=n.isOptional()||((r==null?void 0:r.hasInitializer())??!1)||(((s=r==null?void 0:r.hasQuestionToken)==null?void 0:s.call(r))??!1);return{name:n.getName(),type:r?r.getType().getText():((c=(a=n.getValueDeclaration())==null?void 0:a.getType())==null?void 0:c.getText())??"unknown",optional:i,defaultValue:ne(r,n.getName(),t)}})}function Ct(e){const t=e.filter(n=>n.name!=="ctx");return t.length===0?"()":"("+t.map(n=>`${n.name}${n.optional?"?":""}: ${n.type}`).join(", ")+")"}function q(e){return!!(e==="__samples__"||e.startsWith("__"))}function C(e,t,n=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,n):!1}if(e.isTuple())return e.getTupleElements().every(o=>C(o,t,n));if(e.isUnion())return e.getUnionTypes().every(o=>C(o,t,n));if(e.isIntersection())return e.getIntersectionTypes().every(o=>C(o,t,n));if(e.isObject()){const o=e.getText(t);if(n.has(o))return!0;n.add(o);const r=e.getStringIndexType(),i=e.getNumberIndexType();if(r||i)return[r,i].every(a=>!a||C(a,t,n));const s=e.getProperties();return s.length===0?!0:s.every(a=>{const c=a.getTypeAtLocation(t);return C(c,t,n)})}return!1}async function Et(e){const t=e.session===void 0,n=be(e.session??te());try{return await It(e,n)}finally{t&&n.dispose()}}async function It(e,t){const{sourceFile:n,namespace:o="",tsconfig:r,includeInstances:i=!1}=e,s=t.projectFor(r),a=t.sourceFileFor(n,r),c=D.basename(n),l=R(Rt(c)),u=R(o),f=[];for(const[p,b]of a.getExportedDeclarations()){const h=b.find(d=>d.getKindName()==="ClassDeclaration");if(!h)continue;const m=p==="default"?h.getName():p;if(!m||H(m))continue;const T=R(m);for(const d of h.getStaticMethods()){const y=d.getName();if(H(y))continue;const g=d.getScope();if(g===I.Scope.Private||g===I.Scope.Protected)continue;const v=d.getSignature(),S=Z(v,d),x=v.getReturnType().getText(),w=d.isAsync(),P=[l,T,R(y)];f.push(await Ft(s,a,u,P,S,x,w,r,t))}if(i){{const y=h.getConstructors()[0]??null;let g=[];if(y){const j=y.getSignature();g=Z(j,y)}const v=[l,T],S=ee(u,v),x=g.filter(j=>j.name!=="ctx"),w=x.filter(j=>!j.optional).map(j=>j.name),P={};for(const j of x)P[j.name]=await $(s,a,j.type,r,t);f.push({id:S,host:"ts",namespace:u,path:v,kind:"constructor",async:!1,streaming:!1,safe:!1,input:{type:"object",properties:P,required:w},output:{type:"object",properties:{instanceId:{type:"string"}},required:["instanceId"]},envelope:{},typeText:{lang:"ts",input:_t(g),output:"{ instanceId: string }"}})}for(const d of h.getInstanceMethods()){const y=d.getName();if(H(y))continue;const g=d.getScope();if(g===I.Scope.Private||g===I.Scope.Protected)continue;const v=d.getSignature(),S=Z(v,d),x=v.getReturnType().getText(),w=d.isAsync(),P=[l,T,R(y)],j=ee(u,P),A=S.filter(N=>N.name!=="ctx"),U=A.filter(N=>!N.optional).map(N=>N.name),L={};for(const N of A)L[N.name]=await $(s,a,N.type,r,t);const M=x.replace(/^Promise<(.+)>$/,"$1").trim(),Fe=await $(s,a,M,r,t);f.push({id:j,host:"ts",namespace:u,path:P,kind:"instance-method",async:w,streaming:!1,safe:!1,input:{type:"object",properties:L,required:U},output:Fe,envelope:{type:"object",properties:{instanceId:{type:"string"}},required:["instanceId"]},typeText:{lang:"ts",input:Ae(S),output:M}})}}}return f}async function Ft(e,t,n,o,r,i,s,a,c){const l=r.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(),b=await $(e,t,p,a,c);return{id:ee(n,o),host:"ts",namespace:n,path:o,kind:"action",async:s,streaming:!1,safe:!1,input:{type:"object",properties:f,required:u},output:b,envelope:{},typeText:{lang:"ts",input:Ae(r),output:p}}}function ee(e,t){return(e.raw?[e,...t]:t).map(o=>o.words.join("-")).join("/")}function R(e){return{raw:e,words:re(e)}}function Rt(e){return e.replace(/\.[^.]+$/,"").replace(/[._]+/g,"-")}function Z(e,t){return e.getParameters().map(n=>{var s;const o=n.getDeclarations(),r=o.length>0&&o[0].getKindName()==="Parameter"?o[0]:null,i=n.isOptional()||((r==null?void 0:r.hasInitializer())??!1)||(((s=r==null?void 0:r.hasQuestionToken)==null?void 0:s.call(r))??!1);return{name:n.getName(),type:n.getTypeAtLocation(t).getText(),optional:i}})}function Ae(e){const t=e.filter(n=>n.name!=="ctx");return t.length===0?"()":"("+t.map(n=>`${n.name}${n.optional?"?":""}: ${n.type}`).join(", ")+")"}function _t(e){return e.length===0?"()":"("+e.map(t=>`${t.name}${t.optional?"?":""}: ${t.type}`).join(", ")+")"}function H(e){return!!(e==="__samples__"||e.startsWith("__")||e.startsWith("_"))}const Lt=new Map([[".ts","ts"],[".tsx","ts"],[".mts","ts"],[".cts","ts"],[".py","py"],[".rs","rust"],[".go","go"],[".java","java"]]);function Oe(e){const t=De.extname(e).toLowerCase();return Lt.get(t)}function Ne(e){return e.language??"ts"}function ke(e,t){const n=Oe(t);return n===void 0?!1:n===Ne(e)}function Mt(e,t){return t.filter(n=>ke(e,n))}function Vt(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 Ce(e){return{operationConst:e.id,itemsSchema:e.input,resultSchema:Vt(e.output)}}function Ee(e,t={}){const n=new Set(t.exclude??[]),o=new Map;for(const r of e){if(n.has(r.id))continue;const i=o.get(r.kind);i?i.push(r):o.set(r.kind,[r])}return o}function me(e){return{type:"string",enum:[e]}}function ge(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 Ie(e){if(e.length===0)throw new Error("buildBatchKindSchema: at least one operation is required");const t=e.map(Ce);if(e.length===1){const[r]=e,[i]=t;return{input:ge(i,me(r.id)),output:{type:"array",items:i.resultSchema}}}const n=e.map((r,i)=>ge(t[i],me(r.id))),o=W(n);return{input:{oneOf:n,...o?{discriminator:o}:{}},output:{oneOf:t.map(r=>({type:"array",items:r.resultSchema}))},...o?{discriminator:o}:{}}}function qt(e,t={}){const n=Ee(e.operations,t),o=[];for(const[r,i]of n){const{input:s,output:a}=Ie(i),c=de(`_batch/${r}`,e,{kind:r,safe:r==="query",input:s,output:a});o.push({...c,operationIds:i.map(l=>l.id)})}return o}exports.buildBatchKindSchema=Ie;exports.buildBatchMountedOperations=qt;exports.clearPersistentProjectCache=Ue;exports.composeSchemas=Qe;exports.createExtractionSession=te;exports.deriveBatchOperationBranch=Ce;exports.effectiveLanguage=Ne;exports.extract=jt;exports.extractClasses=Et;exports.groupBatchableOperationsByKind=Ee;exports.isPrimitiveOnlyInputSchema=Se;exports.languageOfSource=Oe;exports.pluginConsumesSource=ke;exports.pluginsToEnvelopeMiddlewares=Ze;exports.sourcesForPlugin=Mt;exports.syntheticOp=de;exports.tokenize=re;
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;