@isdk/ai-tool 0.5.8 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (497) hide show
  1. package/README.cn.md +103 -237
  2. package/README.md +101 -186
  3. package/dist/chunk-LNTIQQNN.mjs +1 -0
  4. package/dist/chunk-VIG2GB47.mjs +1 -1
  5. package/dist/funcs.d.mts +1 -1
  6. package/dist/funcs.d.ts +1 -1
  7. package/dist/funcs.js +1 -1
  8. package/dist/funcs.mjs +1 -1
  9. package/dist/index-BCco-g_I.d.mts +1781 -0
  10. package/dist/index-BCco-g_I.d.ts +1781 -0
  11. package/dist/index.d.mts +1083 -650
  12. package/dist/index.d.ts +1083 -650
  13. package/dist/index.js +1 -1
  14. package/dist/index.mjs +1 -1
  15. package/dist/test/util.js +1 -1
  16. package/docs/api/README.md +165 -0
  17. package/docs/{_media → api/_media}/CONTRIBUTING.md +3 -3
  18. package/docs/api/_media/pubsub.md +326 -0
  19. package/docs/api/_media/server_client_tools.md +88 -0
  20. package/docs/api/_media/toolFunc.md +183 -0
  21. package/docs/api/_media/transport.md +137 -0
  22. package/docs/{classes → api/classes}/AbortError.md +139 -54
  23. package/docs/api/classes/AlreadyExistsError.md +431 -0
  24. package/docs/api/classes/BaseError.md +440 -0
  25. package/docs/{classes → api/classes}/BinarySemaphore.md +25 -25
  26. package/docs/{classes → api/classes}/CancelableAbility.md +25 -25
  27. package/docs/api/classes/ClientToolTransport.md +310 -0
  28. package/docs/{classes → api/classes}/ClientTools.md +642 -180
  29. package/docs/{classes → api/classes}/CommonError.md +139 -54
  30. package/docs/api/classes/ConfigFile.md +218 -0
  31. package/docs/{classes → api/classes}/EnvPromptTemplate.md +308 -65
  32. package/docs/{classes → api/classes}/EventClient.md +725 -232
  33. package/docs/{classes → api/classes}/EventEmitter.md +12 -12
  34. package/docs/{classes → api/classes}/EventServer.md +658 -205
  35. package/docs/{classes → api/classes}/EventToolFunc.md +561 -109
  36. package/docs/{classes → api/classes}/FStringPromptTemplate.md +309 -66
  37. package/docs/{classes → api/classes}/FewShotPromptTemplate.md +290 -63
  38. package/docs/{classes → api/classes}/GolangPromptTemplate.md +308 -65
  39. package/docs/api/classes/HttpClientToolTransport.md +324 -0
  40. package/docs/api/classes/HttpServerToolTransport.md +324 -0
  41. package/docs/{classes → api/classes}/IntSet.md +12 -12
  42. package/docs/{classes → api/classes}/LRUCache.md +26 -26
  43. package/docs/api/classes/NotFoundError.md +431 -0
  44. package/docs/api/classes/NotImplementationError.md +431 -0
  45. package/docs/{classes → api/classes}/PromptExampleSelector.md +9 -9
  46. package/docs/{classes → api/classes}/PromptTemplate.md +303 -63
  47. package/docs/api/classes/ReadableStreamError.md +451 -0
  48. package/docs/api/classes/ResClientTools.md +2878 -0
  49. package/docs/api/classes/ResServerTools.md +2856 -0
  50. package/docs/api/classes/SSEChannel.md +272 -0
  51. package/docs/{classes → api/classes}/Semaphore.md +26 -26
  52. package/docs/api/classes/ServerToolTransport.md +323 -0
  53. package/docs/{classes → api/classes}/ServerTools.md +579 -120
  54. package/docs/{classes → api/classes}/SignalGate.md +9 -9
  55. package/docs/api/classes/SseClientPubSubTransport.md +92 -0
  56. package/docs/api/classes/SseServerPubSubTransport.md +234 -0
  57. package/docs/{classes → api/classes}/TaskAbortController.md +9 -9
  58. package/docs/api/classes/ToolFunc.md +2665 -0
  59. package/docs/api/classes/ToolTransport.md +143 -0
  60. package/docs/api/classes/YamlTypeBaseObject.md +31 -0
  61. package/docs/api/enumerations/AsyncFeatureBits.md +33 -0
  62. package/docs/api/enumerations/AsyncFeatures.md +33 -0
  63. package/docs/api/enumerations/ErrorCode.md +177 -0
  64. package/docs/api/enumerations/HashAlgorithm.md +97 -0
  65. package/docs/{functions → api/functions}/AIArgProcessor.md +1 -1
  66. package/docs/{functions → api/functions}/AIStream.md +1 -1
  67. package/docs/{functions → api/functions}/ChoiceArgProcessor.md +1 -1
  68. package/docs/api/functions/DefaultDateFormat.md +21 -0
  69. package/docs/{functions → api/functions}/ObjectArgsToArgsInfo.md +1 -1
  70. package/docs/{functions → api/functions}/RateLimit.md +1 -1
  71. package/docs/{functions → api/functions}/TemplateArgProcessor.md +1 -1
  72. package/docs/api/functions/addDate.md +71 -0
  73. package/docs/{functions → api/functions}/assignDirs.md +1 -1
  74. package/docs/{functions → api/functions}/backendEventable.md +1 -1
  75. package/docs/{functions → api/functions}/beforeShutdown.md +1 -1
  76. package/docs/api/functions/calcPerplexity.md +60 -0
  77. package/docs/api/functions/calcPerplexitySimple.md +42 -0
  78. package/docs/api/functions/canonicalize.md +33 -0
  79. package/docs/{functions → api/functions}/completeSentences.md +1 -1
  80. package/docs/{functions → api/functions}/concatText.md +1 -1
  81. package/docs/{functions → api/functions}/countLLMTokens.md +1 -1
  82. package/docs/{functions → api/functions}/countRegexMatches.md +1 -1
  83. package/docs/{functions → api/functions}/createAbilityInjector.md +4 -4
  84. package/docs/{functions → api/functions}/createCallbacksTransformer.md +1 -1
  85. package/docs/{functions → api/functions}/createEmptyReadableStream.md +1 -1
  86. package/docs/{functions → api/functions}/createEndWithRepetitionDetector.md +1 -1
  87. package/docs/{functions → api/functions}/createError.md +1 -1
  88. package/docs/{functions → api/functions}/createEventStreamTransformer.md +1 -1
  89. package/docs/{functions → api/functions}/createHfValueFunc.md +1 -1
  90. package/docs/{functions → api/functions}/createLRUCache.md +1 -1
  91. package/docs/{functions → api/functions}/createYamlObjectTag.md +1 -1
  92. package/docs/{functions → api/functions}/dateToText.md +1 -1
  93. package/docs/{functions → api/functions}/decodeCharset.md +1 -1
  94. package/docs/api/functions/defaultsWithConcat.md +74 -0
  95. package/docs/{functions → api/functions}/detectCharset.md +1 -1
  96. package/docs/{functions → api/functions}/encodeLLMTokens.md +1 -1
  97. package/docs/{functions → api/functions}/ensureQuoted.md +1 -1
  98. package/docs/{functions → api/functions}/eventable.md +1 -1
  99. package/docs/api/functions/expandConfig.md +25 -0
  100. package/docs/{functions → api/functions}/expandEnv.md +4 -4
  101. package/docs/{functions → api/functions}/expandObjEnv.md +4 -4
  102. package/docs/{functions → api/functions}/expandPath.md +1 -1
  103. package/docs/api/functions/expandPathInObject.md +29 -0
  104. package/docs/api/functions/expandPaths.md +25 -0
  105. package/docs/{functions → api/functions}/extNameLevel.md +1 -1
  106. package/docs/{functions → api/functions}/fileIsExists.md +1 -1
  107. package/docs/{functions → api/functions}/filterValidFnScope.md +1 -1
  108. package/docs/{functions → api/functions}/findIndexNonEmptyFrom.md +1 -1
  109. package/docs/{functions → api/functions}/findPort.md +1 -1
  110. package/docs/{functions → api/functions}/formatISO.md +1 -1
  111. package/docs/{functions → api/functions}/formatTextWithSpace.md +1 -1
  112. package/docs/api/functions/funcGetMeta.md +27 -0
  113. package/docs/api/functions/funcWithMeta.md +41 -0
  114. package/docs/api/functions/genUrlParamsStr.md +27 -0
  115. package/docs/{functions → api/functions}/getAllEnumKeys.md +1 -1
  116. package/docs/{functions → api/functions}/getConfigFileNames.md +1 -1
  117. package/docs/{functions → api/functions}/getConfigs.md +1 -1
  118. package/docs/{functions → api/functions}/getEnvVairables.md +1 -1
  119. package/docs/{functions → api/functions}/getFileMetaInfo.md +1 -1
  120. package/docs/{functions → api/functions}/getHashAlgoBySize.md +1 -1
  121. package/docs/{functions → api/functions}/getKeysPath.md +1 -1
  122. package/docs/{functions → api/functions}/getLLMTokenizer.md +1 -1
  123. package/docs/{functions → api/functions}/getMultiLevelExtname.md +4 -4
  124. package/docs/{functions → api/functions}/getPackageDir.md +1 -1
  125. package/docs/{functions → api/functions}/getRealFilepath.md +1 -1
  126. package/docs/{functions → api/functions}/getResponseErrorReadableStream.md +1 -1
  127. package/docs/{functions → api/functions}/getXDGConfigs.md +1 -1
  128. package/docs/{functions → api/functions}/hasDirectoryIn.md +1 -1
  129. package/docs/{functions → api/functions}/hash.md +1 -1
  130. package/docs/{functions → api/functions}/hashFile.md +1 -1
  131. package/docs/api/functions/hashObject.md +25 -0
  132. package/docs/{functions → api/functions}/hashStream.md +1 -1
  133. package/docs/api/functions/initShutdown.md +15 -0
  134. package/docs/{functions → api/functions}/isLangUsingSpaces.md +1 -1
  135. package/docs/{functions → api/functions}/isListItemString.md +1 -1
  136. package/docs/{functions → api/functions}/isModelNameMatched.md +1 -1
  137. package/docs/{functions → api/functions}/isPunctuationChar.md +1 -1
  138. package/docs/{functions → api/functions}/isQuoted.md +1 -1
  139. package/docs/{functions → api/functions}/isRegExp.md +1 -1
  140. package/docs/{functions → api/functions}/isSameString.md +1 -1
  141. package/docs/{functions → api/functions}/isSectionString.md +1 -1
  142. package/docs/{functions → api/functions}/isSentenceEnding.md +1 -1
  143. package/docs/{functions → api/functions}/isSepLineString.md +1 -1
  144. package/docs/{functions → api/functions}/isStrWrapped.md +1 -1
  145. package/docs/{functions → api/functions}/isSubdirectory.md +2 -2
  146. package/docs/{functions → api/functions}/isTitleString.md +1 -1
  147. package/docs/{functions → api/functions}/isValidFilename.md +1 -1
  148. package/docs/{functions → api/functions}/isValidFilepath.md +1 -1
  149. package/docs/{functions → api/functions}/isWebStream.md +1 -1
  150. package/docs/api/functions/joinSplitWords.md +46 -0
  151. package/docs/{functions → api/functions}/jsonFilterToWhere.md +1 -1
  152. package/docs/{functions → api/functions}/jsonToMarkdownStr.md +9 -1
  153. package/docs/{functions → api/functions}/loadAIConfig.md +1 -1
  154. package/docs/{functions → api/functions}/loadConfig.md +1 -1
  155. package/docs/{functions → api/functions}/loadConfigFile.md +1 -1
  156. package/docs/{functions → api/functions}/loadFileFromPaths.md +1 -1
  157. package/docs/{functions → api/functions}/loadTextFromPaths.md +1 -1
  158. package/docs/{functions → api/functions}/lrucache.md +1 -1
  159. package/docs/{functions → api/functions}/makeToolFuncCancelable.md +1 -1
  160. package/docs/{functions → api/functions}/matchUrlProtocol.md +1 -1
  161. package/docs/{functions → api/functions}/memoize.md +1 -1
  162. package/docs/api/functions/mergeArray.md +57 -0
  163. package/docs/{functions → api/functions}/messagesToText.md +1 -1
  164. package/docs/api/functions/normalizePath.md +21 -0
  165. package/docs/{functions → api/functions}/paramsSizeToScaleStr.md +1 -1
  166. package/docs/{functions → api/functions}/parseCommand.md +1 -1
  167. package/docs/{functions → api/functions}/parseDateFormat.md +1 -1
  168. package/docs/{functions → api/functions}/parseISO.md +1 -1
  169. package/docs/{functions → api/functions}/parseJsJson.md +1 -1
  170. package/docs/{functions → api/functions}/parseJsJsonSimpleSync.md +1 -1
  171. package/docs/{functions → api/functions}/parseObjectArgInfo.md +1 -1
  172. package/docs/{functions → api/functions}/parseObjectArgumentInfos.md +1 -1
  173. package/docs/{functions → api/functions}/parseObjectArguments.md +1 -1
  174. package/docs/{functions → api/functions}/parseObjectArgumentsAsArgInfos.md +1 -1
  175. package/docs/api/functions/parseYaml.md +45 -0
  176. package/docs/api/functions/pruneSubdirectories.md +35 -0
  177. package/docs/api/functions/pruneSubdirectoriesInPlace.md +38 -0
  178. package/docs/{functions → api/functions}/quoteStr.md +1 -1
  179. package/docs/{functions → api/functions}/readFilenamesRecursiveSync.md +7 -1
  180. package/docs/{functions → api/functions}/readTextFileChunks.md +1 -1
  181. package/docs/{functions → api/functions}/readTextFileChunksEx.md +1 -1
  182. package/docs/{functions → api/functions}/readableFromAsyncIterable.md +1 -1
  183. package/docs/{functions → api/functions}/registerCoreTools.md +1 -1
  184. package/docs/api/functions/registerYamlTag.md +37 -0
  185. package/docs/{functions → api/functions}/removeMarkdownBold.md +1 -1
  186. package/docs/{functions → api/functions}/removeMarkdownBoldAndItalic.md +1 -1
  187. package/docs/{functions → api/functions}/removeMarkdownItalic.md +1 -1
  188. package/docs/{functions → api/functions}/replaceWithPlaceholder.md +1 -1
  189. package/docs/{functions → api/functions}/restoreFromPlacehoders.md +1 -1
  190. package/docs/{functions → api/functions}/sanitizeFilename.md +4 -4
  191. package/docs/{functions → api/functions}/sanitizeFilepath.md +4 -4
  192. package/docs/{functions → api/functions}/saveConfigFile.md +1 -1
  193. package/docs/{functions → api/functions}/scaleStrToParamsSize.md +1 -1
  194. package/docs/{functions → api/functions}/shutdown.md +1 -1
  195. package/docs/{functions → api/functions}/simplifyObjectArguments.md +1 -1
  196. package/docs/api/functions/sleep.md +36 -0
  197. package/docs/{functions → api/functions}/sortedValues.md +1 -1
  198. package/docs/{functions → api/functions}/splitChunks.md +1 -1
  199. package/docs/{functions → api/functions}/splitParagraph.md +1 -1
  200. package/docs/{functions → api/functions}/splitSentence.md +1 -1
  201. package/docs/api/functions/splitWords.md +42 -0
  202. package/docs/api/functions/stringifyYaml.md +45 -0
  203. package/docs/{functions → api/functions}/stripConsoleColor.md +1 -1
  204. package/docs/{functions → api/functions}/textToDate.md +1 -1
  205. package/docs/{functions → api/functions}/throwError.md +3 -3
  206. package/docs/{functions → api/functions}/toDate.md +1 -1
  207. package/docs/{functions → api/functions}/toDateTime.md +1 -1
  208. package/docs/{functions → api/functions}/toRegExp.md +1 -1
  209. package/docs/{functions → api/functions}/trimStartOfStreamHelper.md +1 -1
  210. package/docs/{functions → api/functions}/truncTo.md +1 -1
  211. package/docs/{functions → api/functions}/truncateByToken.md +1 -1
  212. package/docs/{functions → api/functions}/truncateToTokenLimit.md +1 -1
  213. package/docs/{functions → api/functions}/truncateToTokenLimitEx.md +1 -1
  214. package/docs/{functions → api/functions}/uuid.md +1 -1
  215. package/docs/{functions → api/functions}/uuidParse.md +1 -1
  216. package/docs/{functions → api/functions}/uuidStringify.md +1 -1
  217. package/docs/{functions → api/functions}/uuidValidate.md +1 -1
  218. package/docs/{functions → api/functions}/uuidVersion.md +1 -1
  219. package/docs/{functions → api/functions}/uuidv1.md +9 -5
  220. package/docs/{functions → api/functions}/uuidv4.md +9 -5
  221. package/docs/{functions → api/functions}/uuidv5.md +9 -5
  222. package/docs/api/functions/wait.md +45 -0
  223. package/docs/{functions → api/functions}/wrapEventEmitter.md +1 -1
  224. package/docs/{functions → api/functions}/xxhash.md +1 -1
  225. package/docs/{functions → api/functions}/xxhash32.md +1 -1
  226. package/docs/{functions → api/functions}/xxhash64.md +1 -1
  227. package/docs/{functions → api/functions}/xxhashAsStr.md +1 -1
  228. package/docs/api/functions/yieldExec.md +27 -0
  229. package/docs/{globals.md → api/globals.md} +44 -24
  230. package/docs/api/interfaces/AIChatAssistantMessageParam.md +129 -0
  231. package/docs/api/interfaces/AIChatContentPartImage.md +29 -0
  232. package/docs/api/interfaces/AIChatContentPartText.md +25 -0
  233. package/docs/api/interfaces/AIChatMessageParamBase.md +68 -0
  234. package/docs/api/interfaces/AIChatMessageToolCall.md +41 -0
  235. package/docs/{interfaces → api/interfaces}/AIChatSystemMessageParam.md +9 -9
  236. package/docs/api/interfaces/AIChatToolChoiceFuncObject.md +37 -0
  237. package/docs/api/interfaces/AIChatToolChoiceObject.md +25 -0
  238. package/docs/api/interfaces/AIChatToolFunc.md +41 -0
  239. package/docs/api/interfaces/AIChatToolFuncParam.md +37 -0
  240. package/docs/api/interfaces/AIChatToolMessageParam.md +113 -0
  241. package/docs/api/interfaces/AIChatToolParam.md +25 -0
  242. package/docs/api/interfaces/AIChatToolTypeObject.md +17 -0
  243. package/docs/api/interfaces/AIChatUserMessageParam.md +137 -0
  244. package/docs/api/interfaces/AIChoiceConfig.md +65 -0
  245. package/docs/api/interfaces/AIResult.md +65 -0
  246. package/docs/{interfaces → api/interfaces}/AIStreamParser.md +2 -2
  247. package/docs/api/interfaces/AIStreamParserOptions.md +21 -0
  248. package/docs/api/interfaces/BaseFunc.md +299 -0
  249. package/docs/api/interfaces/BaseFuncItem.md +221 -0
  250. package/docs/api/interfaces/BinarySemaphoreAcquireOptions.md +25 -0
  251. package/docs/api/interfaces/BinarySemaphoreOptions.md +57 -0
  252. package/docs/api/interfaces/BinarySemaphoreReleaseOptions.md +25 -0
  253. package/docs/api/interfaces/BinarySemaphoreReleaserFunc.md +37 -0
  254. package/docs/api/interfaces/CancelableAbilityOptions.md +113 -0
  255. package/docs/api/interfaces/ClientFuncItem.md +326 -0
  256. package/docs/api/interfaces/EventClientFuncParams.md +51 -0
  257. package/docs/api/interfaces/EventServerFuncParams.md +73 -0
  258. package/docs/api/interfaces/FewShotPromptTemplateOptions.md +159 -0
  259. package/docs/api/interfaces/FuncItem.md +281 -0
  260. package/docs/api/interfaces/FuncParam.md +51 -0
  261. package/docs/api/interfaces/FuncParams.md +28 -0
  262. package/docs/api/interfaces/Funcs.md +15 -0
  263. package/docs/api/interfaces/HashAlgoParams.md +33 -0
  264. package/docs/api/interfaces/IClientToolTransport.md +155 -0
  265. package/docs/api/interfaces/IFileMetaInfo.md +65 -0
  266. package/docs/api/interfaces/IPubSubClientTransport.md +70 -0
  267. package/docs/api/interfaces/IPubSubServerTransport.md +241 -0
  268. package/docs/{interfaces → api/interfaces}/IReadTextFileChunksOptions.md +12 -12
  269. package/docs/api/interfaces/IServerToolTransport.md +159 -0
  270. package/docs/api/interfaces/IToolTransport.md +73 -0
  271. package/docs/api/interfaces/ITruncateToTokenLimitOptions.md +99 -0
  272. package/docs/api/interfaces/JsonFilter.md +13 -0
  273. package/docs/api/interfaces/ParseObjectArgumentOptions.md +89 -0
  274. package/docs/api/interfaces/ProbabilityItem.md +41 -0
  275. package/docs/api/interfaces/PromptExampleSelectorOptions.md +34 -0
  276. package/docs/api/interfaces/PromptTemplateOptions.md +73 -0
  277. package/docs/api/interfaces/PubSubClient.md +27 -0
  278. package/docs/api/interfaces/PubSubClientStream.md +196 -0
  279. package/docs/api/interfaces/PubSubServerSession.md +103 -0
  280. package/docs/api/interfaces/RemoteFuncItem.md +316 -0
  281. package/docs/api/interfaces/ReplacePlacehoderOptions.md +41 -0
  282. package/docs/api/interfaces/ResClientFuncParams.md +37 -0
  283. package/docs/api/interfaces/ResServerFuncParams.md +73 -0
  284. package/docs/api/interfaces/SanitizeFilenameOptions.md +25 -0
  285. package/docs/api/interfaces/SectionStringOptions.md +25 -0
  286. package/docs/api/interfaces/SemaphoreOptions.md +89 -0
  287. package/docs/api/interfaces/SemaphoreTaskItem.md +73 -0
  288. package/docs/api/interfaces/ServerFuncItem.md +339 -0
  289. package/docs/api/interfaces/ServerFuncParams.md +41 -0
  290. package/docs/api/interfaces/SplitSentenceOptions.md +41 -0
  291. package/docs/{interfaces → api/interfaces}/StreamCallbacksAndOptions.md +5 -5
  292. package/docs/{interfaces → api/interfaces}/TaskAbortControllers.md +1 -1
  293. package/docs/{interfaces → api/interfaces}/TaskPromise.md +6 -6
  294. package/docs/api/interfaces/ToolFuncPackage.md +57 -0
  295. package/docs/{namespaces → api/namespaces}/EventStates/variables/ABORT.md +1 -1
  296. package/docs/{namespaces → api/namespaces}/EventStates/variables/CONTINUE.md +1 -1
  297. package/docs/{namespaces → api/namespaces}/EventStates/variables/DONE.md +1 -1
  298. package/docs/{namespaces → api/namespaces}/EventStates/variables/STOPPED.md +1 -1
  299. package/docs/{namespaces → api/namespaces}/uuidv5/variables/DNS.md +1 -1
  300. package/docs/{namespaces → api/namespaces}/uuidv5/variables/URL.md +1 -1
  301. package/docs/{type-aliases → api/type-aliases}/AIChatContentPart.md +1 -1
  302. package/docs/{type-aliases → api/type-aliases}/AIChatMessageParam.md +1 -1
  303. package/docs/{type-aliases → api/type-aliases}/AIChatRole.md +1 -1
  304. package/docs/{type-aliases → api/type-aliases}/AIChatToolChoiceParam.md +1 -1
  305. package/docs/{type-aliases → api/type-aliases}/AIMessageType.md +1 -1
  306. package/docs/api/type-aliases/AIModelNameRule.md +14 -0
  307. package/docs/api/type-aliases/AIModelNameRuleFn.md +28 -0
  308. package/docs/api/type-aliases/AIModelNameRules.md +13 -0
  309. package/docs/{type-aliases → api/type-aliases}/AITextGenerationFinishReason.md +1 -1
  310. package/docs/api/type-aliases/ActionName.md +13 -0
  311. package/docs/api/type-aliases/ArrayMergeWay.md +11 -0
  312. package/docs/api/type-aliases/AsyncTaskId.md +11 -0
  313. package/docs/{type-aliases → api/type-aliases}/BeforeShutdownListener.md +1 -1
  314. package/docs/{type-aliases → api/type-aliases}/EventErrorListenerFn.md +1 -1
  315. package/docs/{type-aliases → api/type-aliases}/EventListenerFn.md +1 -1
  316. package/docs/api/type-aliases/FuncParamType.md +13 -0
  317. package/docs/{type-aliases → api/type-aliases}/PromptExamples.md +1 -1
  318. package/docs/api/type-aliases/PubSubClientId.md +14 -0
  319. package/docs/api/type-aliases/PubSubCtx.md +37 -0
  320. package/docs/api/type-aliases/RpcMethodHandler.md +34 -0
  321. package/docs/{type-aliases → api/type-aliases}/SemaphoreIsReadyFuncType.md +1 -1
  322. package/docs/api/type-aliases/TFunc.md +33 -0
  323. package/docs/{variables → api/variables}/AIChatRoles.md +1 -1
  324. package/docs/{variables → api/variables}/AIMessageTypes.md +1 -1
  325. package/docs/{variables → api/variables}/AITextGenerationFinishReasons.md +1 -1
  326. package/docs/{variables → api/variables}/AbortErrorCode.md +1 -1
  327. package/docs/api/variables/ActionNames.md +13 -0
  328. package/docs/{variables → api/variables}/AlreadyExistsErrorCode.md +1 -1
  329. package/docs/api/variables/ArrayMergeWay.md +25 -0
  330. package/docs/api/variables/ArrayMergeWaySymbol.md +11 -0
  331. package/docs/api/variables/ClientToolFuncSchema.md +83 -0
  332. package/docs/{variables → api/variables}/DEFAULT_CONFIG_NAME.md +1 -1
  333. package/docs/{variables → api/variables}/DefaultAsyncSemaphoreCapacity.md +1 -1
  334. package/docs/api/variables/EventBusName.md +11 -0
  335. package/docs/api/variables/EventName.md +11 -0
  336. package/docs/{variables → api/variables}/FilenameReservedRegex.md +1 -1
  337. package/docs/api/variables/FuncMetaSymbol.md +15 -0
  338. package/docs/{variables → api/variables}/InternalErrorCode.md +1 -1
  339. package/docs/{variables → api/variables}/LLM_TOKENIZER_NAMES.md +1 -1
  340. package/docs/{variables → api/variables}/LLM_TOKENIZER_NAMES_MAP.md +1 -1
  341. package/docs/{variables → api/variables}/NotFoundErrorCode.md +1 -1
  342. package/docs/{variables → api/variables}/NotImplementedErrorCode.md +1 -1
  343. package/docs/api/variables/PASSING_SCORE.md +13 -0
  344. package/docs/api/variables/RStreamErrCode.md +11 -0
  345. package/docs/api/variables/RemoteToolFuncSchema.md +84 -0
  346. package/docs/api/variables/ResponseRStreamErrCode.md +11 -0
  347. package/docs/{variables → api/variables}/SHUTDOWN_SIGNALS.md +1 -1
  348. package/docs/{variables → api/variables}/SSEChannelAlreadyClosedErrCode.md +1 -1
  349. package/docs/api/variables/SecondaryCache.md +11 -0
  350. package/docs/api/variables/ServerToolFuncSchema.md +83 -0
  351. package/docs/api/variables/StrangeHumanName.md +11 -0
  352. package/docs/api/variables/ToolAsyncCancelableBit.md +11 -0
  353. package/docs/api/variables/ToolAsyncMultiTaskBit.md +11 -0
  354. package/docs/api/variables/ToolAsyncPriorityBit.md +11 -0
  355. package/docs/{variables → api/variables}/ToolFuncSchema.md +14 -1
  356. package/docs/{variables → api/variables}/WindowsReservedNameRegex.md +1 -1
  357. package/docs/api/variables/base32768.md +11 -0
  358. package/docs/api/variables/defaultTemplateFormat.md +11 -0
  359. package/docs/api/variables/event.md +11 -0
  360. package/docs/api/variables/eventClient.md +11 -0
  361. package/docs/api/variables/eventServer.md +11 -0
  362. package/docs/api/variables/lrucache.md +11 -0
  363. package/docs/{variables → api/variables}/mimeType.md +1 -1
  364. package/docs/{variables → api/variables}/uuidNIL.md +1 -1
  365. package/docs/pubsub.md +326 -0
  366. package/docs/server_client_tools.md +88 -0
  367. package/docs/toolFunc.md +183 -0
  368. package/docs/transport.md +137 -0
  369. package/package.json +38 -38
  370. package/dist/chunk-YVFGQB4L.mjs +0 -1
  371. package/dist/index-BkwhCK1q.d.mts +0 -899
  372. package/dist/index-BkwhCK1q.d.ts +0 -899
  373. package/docs/README.md +0 -250
  374. package/docs/classes/AlreadyExistsError.md +0 -346
  375. package/docs/classes/BaseError.md +0 -359
  376. package/docs/classes/ConfigFile.md +0 -353
  377. package/docs/classes/HFEnvironment.md +0 -184
  378. package/docs/classes/HFInterpreter.md +0 -77
  379. package/docs/classes/HFTemplate.md +0 -67
  380. package/docs/classes/HfPromptTemplate.md +0 -1158
  381. package/docs/classes/NotFoundError.md +0 -346
  382. package/docs/classes/NotImplementationError.md +0 -346
  383. package/docs/classes/ReadableStreamError.md +0 -366
  384. package/docs/classes/ResClientTools.md +0 -2451
  385. package/docs/classes/ResServerTools.md +0 -2427
  386. package/docs/classes/SSEChannel.md +0 -270
  387. package/docs/classes/ToolFunc.md +0 -2201
  388. package/docs/classes/YamlTypeBaseObject.md +0 -31
  389. package/docs/enumerations/AsyncFeatureBits.md +0 -33
  390. package/docs/enumerations/AsyncFeatures.md +0 -33
  391. package/docs/enumerations/ErrorCode.md +0 -177
  392. package/docs/enumerations/HashAlgorithm.md +0 -97
  393. package/docs/functions/canonicalize.md +0 -21
  394. package/docs/functions/expandConfig.md +0 -25
  395. package/docs/functions/filenameReservedRegex.md +0 -20
  396. package/docs/functions/hfParse.md +0 -24
  397. package/docs/functions/hfTokenize.md +0 -27
  398. package/docs/functions/initShutdown.md +0 -15
  399. package/docs/functions/interpolateEnv.md +0 -29
  400. package/docs/functions/interpolateFString.md +0 -29
  401. package/docs/functions/interpolateGolangTemplate.md +0 -35
  402. package/docs/functions/parseFString.md +0 -26
  403. package/docs/functions/parseYaml.md +0 -25
  404. package/docs/functions/reControlCharsRegex.md +0 -19
  405. package/docs/functions/registerYamlTag.md +0 -21
  406. package/docs/functions/stringifyYaml.md +0 -25
  407. package/docs/functions/wait.md +0 -21
  408. package/docs/interfaces/AIChatAssistantMessageParam.md +0 -129
  409. package/docs/interfaces/AIChatContentPartImage.md +0 -29
  410. package/docs/interfaces/AIChatContentPartText.md +0 -25
  411. package/docs/interfaces/AIChatMessageParamBase.md +0 -68
  412. package/docs/interfaces/AIChatMessageToolCall.md +0 -41
  413. package/docs/interfaces/AIChatToolChoiceFuncObject.md +0 -37
  414. package/docs/interfaces/AIChatToolChoiceObject.md +0 -25
  415. package/docs/interfaces/AIChatToolFunc.md +0 -41
  416. package/docs/interfaces/AIChatToolFuncParam.md +0 -37
  417. package/docs/interfaces/AIChatToolMessageParam.md +0 -113
  418. package/docs/interfaces/AIChatToolParam.md +0 -25
  419. package/docs/interfaces/AIChatToolTypeObject.md +0 -17
  420. package/docs/interfaces/AIChatUserMessageParam.md +0 -137
  421. package/docs/interfaces/AIChoiceConfig.md +0 -65
  422. package/docs/interfaces/AIResult.md +0 -65
  423. package/docs/interfaces/AIStreamParserOptions.md +0 -21
  424. package/docs/interfaces/BaseFunc.md +0 -157
  425. package/docs/interfaces/BaseFuncItem.md +0 -101
  426. package/docs/interfaces/BinarySemaphoreAcquireOptions.md +0 -25
  427. package/docs/interfaces/BinarySemaphoreOptions.md +0 -57
  428. package/docs/interfaces/BinarySemaphoreReleaseOptions.md +0 -25
  429. package/docs/interfaces/BinarySemaphoreReleaserFunc.md +0 -37
  430. package/docs/interfaces/CancelableAbilityOptions.md +0 -113
  431. package/docs/interfaces/ClientFuncItem.md +0 -175
  432. package/docs/interfaces/DotenvExpandOptions.md +0 -43
  433. package/docs/interfaces/DotenvExpandOutput.md +0 -25
  434. package/docs/interfaces/DotenvParseInput.md +0 -13
  435. package/docs/interfaces/DotenvParseOutput.md +0 -13
  436. package/docs/interfaces/DotenvPopulateInput.md +0 -13
  437. package/docs/interfaces/EventClientFuncParams.md +0 -51
  438. package/docs/interfaces/EventServerFuncParams.md +0 -67
  439. package/docs/interfaces/FewShotPromptTemplateOptions.md +0 -147
  440. package/docs/interfaces/FuncItem.md +0 -143
  441. package/docs/interfaces/FuncParam.md +0 -61
  442. package/docs/interfaces/FuncParams.md +0 -13
  443. package/docs/interfaces/Funcs.md +0 -13
  444. package/docs/interfaces/HashAlgoParams.md +0 -33
  445. package/docs/interfaces/IFileMetaInfo.md +0 -65
  446. package/docs/interfaces/ITruncateToTokenLimitOptions.md +0 -99
  447. package/docs/interfaces/JsonFilter.md +0 -13
  448. package/docs/interfaces/ParseObjectArgumentOptions.md +0 -89
  449. package/docs/interfaces/PromptExampleSelectorOptions.md +0 -34
  450. package/docs/interfaces/PromptTemplateOptions.md +0 -65
  451. package/docs/interfaces/RemoteFuncItem.md +0 -164
  452. package/docs/interfaces/ReplacePlacehoderOptions.md +0 -41
  453. package/docs/interfaces/ResClientFuncParams.md +0 -37
  454. package/docs/interfaces/ResServerFuncParams.md +0 -69
  455. package/docs/interfaces/SanitizeFilenameOptions.md +0 -25
  456. package/docs/interfaces/SectionStringOptions.md +0 -25
  457. package/docs/interfaces/SemaphoreOptions.md +0 -89
  458. package/docs/interfaces/SemaphoreTaskItem.md +0 -73
  459. package/docs/interfaces/ServerFuncItem.md +0 -183
  460. package/docs/interfaces/ServerFuncParams.md +0 -35
  461. package/docs/interfaces/SplitSentenceOptions.md +0 -41
  462. package/docs/interfaces/ToolFuncPackage.md +0 -47
  463. package/docs/type-aliases/AIModelNameRule.md +0 -11
  464. package/docs/type-aliases/AIModelNameRuleFn.md +0 -21
  465. package/docs/type-aliases/AIModelNameRules.md +0 -11
  466. package/docs/type-aliases/ActionName.md +0 -11
  467. package/docs/type-aliases/AsyncTaskId.md +0 -11
  468. package/docs/type-aliases/FStringPromptTemplateNode.md +0 -14
  469. package/docs/type-aliases/FuncParamType.md +0 -11
  470. package/docs/type-aliases/PromptTemplateType.md +0 -11
  471. package/docs/type-aliases/PromptType.md +0 -11
  472. package/docs/type-aliases/TFunc.md +0 -25
  473. package/docs/variables/ActionNames.md +0 -11
  474. package/docs/variables/ClientToolFuncSchema.md +0 -101
  475. package/docs/variables/EventBusName.md +0 -11
  476. package/docs/variables/EventName.md +0 -11
  477. package/docs/variables/HFBuiltins.md +0 -122
  478. package/docs/variables/PASSING_SCORE.md +0 -11
  479. package/docs/variables/PromptTemplateTypes.md +0 -11
  480. package/docs/variables/PromptTypes.md +0 -14
  481. package/docs/variables/RStreamErrCode.md +0 -11
  482. package/docs/variables/RemoteToolFuncSchema.md +0 -101
  483. package/docs/variables/ResponseRStreamErrCode.md +0 -11
  484. package/docs/variables/SecondaryCache.md +0 -11
  485. package/docs/variables/ServerToolFuncSchema.md +0 -101
  486. package/docs/variables/ToolAsyncCancelableBit.md +0 -11
  487. package/docs/variables/ToolAsyncMultiTaskBit.md +0 -11
  488. package/docs/variables/ToolAsyncPriorityBit.md +0 -11
  489. package/docs/variables/base32768.md +0 -11
  490. package/docs/variables/defaultTemplateFormat.md +0 -11
  491. package/docs/variables/event.md +0 -11
  492. package/docs/variables/eventClient.md +0 -11
  493. package/docs/variables/eventServer.md +0 -11
  494. package/docs/variables/lrucache.md +0 -11
  495. /package/docs/{_media → api/_media}/LICENSE-MIT +0 -0
  496. /package/docs/{namespaces → api/namespaces}/EventStates/README.md +0 -0
  497. /package/docs/{namespaces → api/namespaces}/uuidv5/README.md +0 -0
@@ -0,0 +1,88 @@
1
+ # Guide: Server & Client Tool Types
2
+
3
+ This guide provides a detailed description of the different `ServerTools` and `ClientTools` subclasses. It focuses on their specific purpose and how each one separates its business logic from the communication logic handled by the transport layer.
4
+
5
+ ## 1. `ServerTools` / `ClientTools`
6
+
7
+ This is the most fundamental pair for client-server communication.
8
+
9
+ ### `ServerTools`
10
+
11
+ - **Purpose:** To define a single, remotely callable function.
12
+ - **Business Logic:** Your code is placed entirely within the `func` property when the tool is defined. This function contains the logic you want to execute on the server.
13
+ - **Communication Logic:** This class has **no** communication logic. It is a simple container for your business logic. The transport layer is entirely responsible for receiving a network request and invoking the tool's `func`.
14
+
15
+ ```typescript
16
+ // Business logic is self-contained in 'func'.
17
+ ServerTools.register({
18
+ name: 'mySimpleTool',
19
+ func: async (params) => {
20
+ // ... your logic here ...
21
+ return { success: true, ...params };
22
+ },
23
+ });
24
+ ```
25
+
26
+ ### `ClientTools`
27
+
28
+ - **Purpose:** To act as a local proxy for a remote `ServerTools` instance.
29
+ - **Business Logic:** This class contains **no** business logic.
30
+ - **Communication Logic:** When you call `.run()` on a `ClientTools` instance, its only job is to delegate the call to the configured **client transport**. The transport handles all aspects of serialization, network requests, and response handling.
31
+
32
+ ---
33
+
34
+ ## 2. `RpcMethodsServerTool` / `RpcMethodsClientTool`
35
+
36
+ This pair is designed to group multiple related functions into a single, cohesive tool, like methods on a class.
37
+
38
+ ### `RpcMethodsServerTool`
39
+
40
+ - **Purpose:** To serve as a container for multiple, related functions under a single tool name.
41
+ - **Business Logic:** You define your logic in class methods prefixed with a `$` (e.g., `$add`, `$subtract`). Each method represents a distinct operation.
42
+ - **Communication Logic:** This class contains a small amount of **routing logic**. Its main `func` (which is invoked by the transport) acts as a simple dispatcher. It inspects the `act` parameter from the incoming request and calls the corresponding internal `$` method. It does not handle any direct network communication.
43
+
44
+ ```typescript
45
+ // Business logic is in the $add and $subtract methods.
46
+ class CalculatorTool extends RpcMethodsServerTool {
47
+ $add({ a, b }) { return a + b; }
48
+ $subtract({ a, b }) { return a - b; }
49
+ }
50
+
51
+ // The main 'func' inherited from the base class handles the routing.
52
+ new CalculatorTool('calculator').register();
53
+ ```
54
+
55
+ ### `RpcMethodsClientTool`
56
+
57
+ - **Purpose:** To be a user-friendly proxy for a remote `RpcMethodsServerTool`.
58
+ - **Business Logic:** None.
59
+ - **Communication Logic:** This class has more advanced communication logic than a basic `ClientTools` instance. When it's created, it dynamically adds proxy methods to itself (e.g., `.add()`, `.subtract()`). When you call one of these proxy methods, it automatically constructs the correct request body (e.g., `{ act: '$add', a, b }`) before passing it to the client transport for sending.
60
+
61
+ ---
62
+
63
+ ## 3. `ResServerTools` / `ResClientTools`
64
+
65
+ This is the highest-level abstraction, designed for creating resource-oriented APIs that follow RESTful conventions.
66
+
67
+ ### `ResServerTools`
68
+
69
+ - **Purpose:** To provide a conventional, resource-oriented (CRUD) API.
70
+ - **Business Logic:** You place your logic in conventionally-named methods like `get`, `list`, `post`, `put`, and `delete`.
71
+ - **Communication Logic:** This class has the most advanced **routing logic**. It is designed to work with a transport that can provide HTTP context (like the verb and URL parameters). It maps HTTP request details (e.g., `GET /api/users/123`) to the appropriate business logic method (e.g., `get({ id: '123' })`). It still relies on the transport to handle the actual network connection.
72
+
73
+ ```typescript
74
+ // Business logic is in the get, list, etc. methods.
75
+ class UserResource extends ResServerTools {
76
+ get({ id }) { /* ... find user by id ... */ }
77
+ list() { /* ... return all users ... */ }
78
+ }
79
+
80
+ // The tool's internal logic maps HTTP requests to these methods.
81
+ new UserResource('users').register();
82
+ ```
83
+
84
+ ### `ResClientTools`
85
+
86
+ - **Purpose:** To be an intuitive proxy for a remote `ResServerTools` instance.
87
+ - **Business Logic:** None.
88
+ - **Communication Logic:** It provides a conventional client-side API (e.g., `.get()`, `.list()`). Calling one of these methods signals to the client transport *how* to construct the underlying HTTP request. For example, calling `userClient.get({ id: '123' })` instructs the transport to make an `HTTP GET` request to the appropriate URL (`/api/users/123`).
@@ -0,0 +1,183 @@
1
+ # `ToolFunc`: A Framework for Reusable Functions
2
+
3
+ ## Overview
4
+
5
+ `ToolFunc` is a robust framework for creating, managing, and executing reusable functions within a JavaScript/TypeScript application. It provides a structured way to define functions with rich metadata, manage dependencies, and access them globally through a static registry. This system is designed to make functions self-documenting, modular, and easily discoverable, which is ideal for building complex tools, AI agent functions, or extensible plugin systems.
6
+
7
+ ## Key Features
8
+
9
+ - **Rich Metadata**: Define functions with names, descriptions, titles, tags, and detailed parameter information.
10
+ - **Static Registry**: A global registry allows any part of an application to access and execute functions by name without needing a direct instance.
11
+ - **Dependency Management**: Declare dependencies on other `ToolFunc` instances, which are automatically registered when the parent function is registered.
12
+ - **Lifecycle Hooks**: A `setup` hook provides a way to run initialization logic when a `ToolFunc` instance is created.
13
+ - **Flexible Parameter Handling**: Supports both named-parameter objects and positional arguments for function execution.
14
+ - Note: All `ToolFunc` parameters are object-based, not positional.
15
+ - **Aliasing and Tagging**: Assign aliases for alternative naming and tags for grouping and querying related functions.
16
+ - **Streaming & Async Support**: Built-in support for functions that can stream output and declare asynchronous capabilities like cancellation.
17
+
18
+ ---
19
+
20
+ ## Core Concepts
21
+
22
+ ### Design Philosophy: Static vs. Instance
23
+
24
+ A key design principle in `ToolFunc` is the separation of roles between the static class and its instances:
25
+
26
+ - **The Static Class as Manager:** The static side of `ToolFunc` (e.g., `ToolFunc.register`, `ToolFunc.run`, `ToolFunc.get`) acts as a global **registry** and **executor**. It manages all tool definitions, allowing any part of your application to discover and run tools by name without needing a direct reference to the tool's instance.
27
+
28
+ - **The Instance as the Tool:** An instance (`new ToolFunc(...)`) represents a single, concrete **tool**. It holds the actual function logic, all its metadata (name, description, parameters), and any internal state.
29
+
30
+ This separation provides the best of both worlds: the power of object-oriented encapsulation for defining individual tools and the convenience of a globally accessible service for managing and executing them.
31
+
32
+ ### 1. Defining a `ToolFunc`
33
+
34
+ You create a function by instantiating the `ToolFunc` class with a configuration object (`FuncItem`). The only required properties are a `name` and a `func` implementation.
35
+
36
+ ```typescript
37
+ import { ToolFunc } from './src/tool-func';
38
+
39
+ const sayHello = new ToolFunc({
40
+ name: 'sayHello',
41
+ description: 'Prints a greeting to the console.',
42
+ title: 'Say Hello',
43
+ params: {
44
+ personName: { type: 'string', description: 'The name of the person to greet.', required: true }
45
+ },
46
+ func: (params) => {
47
+ console.log(`Hello, ${params.personName}!`);
48
+ return `Greeted ${params.personName}`;
49
+ }
50
+ });
51
+ ```
52
+
53
+ ### 2. Registration
54
+
55
+ For a `ToolFunc` to be globally accessible, it must be registered. Registration adds the function to a static `ToolFunc.items` map.
56
+
57
+ ```typescript
58
+ // Register the instance you created
59
+ sayHello.register();
60
+
61
+ // You can also define and register in one go
62
+ ToolFunc.register({
63
+ name: 'sayGoodbye',
64
+ func: () => console.log('Goodbye!')
65
+ });
66
+ ```
67
+
68
+ Once registered, the function can be accessed from anywhere in the application.
69
+
70
+ ### 3. Execution
71
+
72
+ You can execute registered functions using the static `run` or `runSync` methods. The framework automatically handles passing parameters correctly.
73
+
74
+ ```typescript
75
+ // Execute asynchronously
76
+ async function greet() {
77
+ const result = await ToolFunc.run('sayHello', { personName: 'Alice' });
78
+ console.log(result); // Outputs: "Greeted Alice"
79
+ }
80
+
81
+ // Execute synchronously
82
+ ToolFunc.runSync('sayGoodbye'); // Outputs: "Goodbye!"
83
+ ```
84
+
85
+ ---
86
+
87
+ ## Advanced Usage
88
+
89
+ ### Dependencies (`depends`)
90
+
91
+ Use the `depends` property to ensure that other required `ToolFunc` instances are registered automatically. This is key to building modular tools.
92
+
93
+ ```typescript
94
+ const helperFunc = new ToolFunc({ name: 'helper', func: () => 'world' });
95
+
96
+ const mainFunc = new ToolFunc({
97
+ name: 'main',
98
+ depends: {
99
+ // This ensures helperFunc is registered when mainFunc is.
100
+ h: helperFunc,
101
+ },
102
+ func: function() { // `this` is the ToolFunc instance
103
+ const message = this.runSync('h');
104
+ return `Hello, ${message}`;
105
+ }
106
+ });
107
+
108
+ mainFunc.register(); // Both mainFunc and helperFunc are now registered.
109
+
110
+ ToolFunc.runSync('main'); // Returns "Hello, world"
111
+ ```
112
+
113
+ ### Lifecycle Hook (`setup`)
114
+
115
+ The `setup` method is called during the constructor's execution, allowing you to perform initialization logic on the instance.
116
+
117
+ ```typescript
118
+ const myFunc = new ToolFunc({
119
+ name: 'myFunc',
120
+ customState: 'initial',
121
+ setup() {
122
+ // `this` refers to the ToolFunc instance
123
+ this.customState = 'configured';
124
+ console.log('Instance has been set up!');
125
+ },
126
+ func: function() {
127
+ return this.customState;
128
+ }
129
+ });
130
+
131
+ console.log(myFunc.runSync()); // Outputs: 'configured'
132
+ ```
133
+
134
+ ### Streaming Output (`stream` and `isStream`)
135
+
136
+ To create a function that can optionally stream its output:
137
+
138
+ 1. Set `stream: true` in its definition. This marks it as *capable* of streaming.
139
+ 2. The `isStream(params)` method determines if a *specific call* should be streamed. The default logic checks for a `stream` parameter in the function's declaration and the runtime arguments.
140
+
141
+ ```typescript
142
+ const streamableTask = new ToolFunc({
143
+ name: 'streamableTask',
144
+ stream: true, // 1. Mark as stream-capable
145
+ params: {
146
+ // 2. Declare a 'stream' parameter so the isStream method can check it
147
+ stream: { type: 'boolean', description: 'Whether to stream the output.' }
148
+ },
149
+ func: function(params) {
150
+ if (this.isStream(params)) {
151
+ // Return a ReadableStream for streaming output
152
+ return new ReadableStream(/* ... */);
153
+ } else {
154
+ // Return a regular value
155
+ return 'Completed';
156
+ }
157
+ }
158
+ });
159
+ ```
160
+
161
+ ### Aliases and Tags
162
+
163
+ Use `alias` to provide alternative names and `tags` to categorize functions.
164
+
165
+ ```typescript
166
+ ToolFunc.register({
167
+ name: 'listUsers',
168
+ alias: ['ls', 'getUsers'],
169
+ tags: ['users', 'read'],
170
+ func: () => [/* ... */]
171
+ });
172
+
173
+ // These are now equivalent:
174
+ const users1 = ToolFunc.get('listUsers');
175
+ const users2 = ToolFunc.get('ls');
176
+
177
+ // You can retrieve functions by tag:
178
+ const userReaders = ToolFunc.getAllByTag('users');
179
+ ```
180
+
181
+ ## API Reference
182
+
183
+ This document covers the main concepts and usage patterns. For a detailed API reference, please consult the TSDoc comments within the source code (`src/tool-func.ts`).
@@ -0,0 +1,137 @@
1
+ # ToolFunc: Client-Server Communication
2
+
3
+ This guide provides a comprehensive overview of the `ai-tool` transport layer, a powerful system designed to facilitate communication between server-side functions and client-side applications. It enables seamless Remote Procedure Calls (RPC) by abstracting the underlying network protocol.
4
+
5
+ This system is composed of two main parts:
6
+
7
+ 1. **Tools (`ServerTools`/`ClientTools`):** Classes that define the functions to be executed.
8
+ 2. **The Transport Layer:** The underlying bridge that handles network communication.
9
+
10
+ **Prerequisite:** This document assumes you have a basic understanding of the `ToolFunc` framework. If not, please review the [`toolFunc.md`](./toolFunc.md) first.
11
+
12
+ ## 1. `ServerTools`: Defining Backend Functions
13
+
14
+ `ServerTools` is the base class for any function you want to make available for remote clients. It extends `ToolFunc`, inheriting all its features, but is specifically designed to be discovered and executed via the transport layer.
15
+
16
+ Think of a `ServerTools` instance as a single, network-addressable endpoint for a specific function.
17
+
18
+ ### Basic Example
19
+
20
+ Here is the most basic example of defining a server tool. Note that at this stage, it's just a definition; it can't be reached by a client until a transport is set up.
21
+
22
+ ```typescript
23
+ import { ServerTools } from '@isdk/ai-tool';
24
+
25
+ // Define a tool that can be called remotely
26
+ ServerTools.register({
27
+ name: 'getUserProfile',
28
+ description: 'Fetches a user profile by ID.',
29
+ params: { id: { type: 'string' } },
30
+ func: async ({ id }: { id: string }) => {
31
+ // In a real app, you'd fetch this from a database
32
+ return { id, name: 'Jane Doe', email: 'jane.doe@example.com' };
33
+ },
34
+ });
35
+ ```
36
+
37
+ ## 2. The Transport Layer: Bridging Client and Server
38
+
39
+ The transport layer's primary purpose is to **decouple your tool's business logic from the network protocol**. It acts as a bridge, allowing a client to execute a function on a server as if it were a local method.
40
+
41
+ The transport layer makes `ServerTools` accessible over a network and allows `ClientTools` to call them.
42
+
43
+ - **The Server Transport (`IServerToolServerTransport`)**
44
+ - Its job is to listen for incoming network requests (e.g., over HTTP).
45
+ - It finds the correct registered `ServerTools` instance by its name.
46
+ - It executes the tool and sends the result back in a response.
47
+
48
+ - **The Client Transport (`IClientToolTransport`)**
49
+ - Its job is to connect to a server's `apiRoot`.
50
+ - It uses a `mount()` helper to fetch all available tool definitions from the server and automatically create local proxy `ClientTools` for them.
51
+
52
+ ### End-to-End Transport Example
53
+
54
+ This example shows how to use the `Fastify` (server) and `HttpClient` (client) transports to bring the `getUserProfile` tool online.
55
+
56
+ **Server-Side Setup:**
57
+
58
+ ```typescript
59
+ // server.ts
60
+ import { ServerTools, FastifyServerToolTransport } from '@isdk/ai-tool';
61
+
62
+ // (Your ServerTools.register call from above)
63
+
64
+ // 1. Create a server transport instance.
65
+ const serverTransport = new FastifyServerToolTransport();
66
+
67
+ // 2. Mount the ServerTools class. The transport finds all registered tools
68
+ // and exposes them under the '/api' prefix.
69
+ serverTransport.mount(ServerTools, '/api');
70
+
71
+ // 3. Start the server.
72
+ serverTransport.start({ port: 3000 });
73
+ ```
74
+
75
+ **Client-Side Setup:**
76
+
77
+ ```typescript
78
+ // client.ts
79
+ import { ClientTools, HttpClientToolTransport } from '@isdk/ai-tool';
80
+
81
+ async function main() {
82
+ const apiRoot = 'http://localhost:3000/api';
83
+
84
+ // 1. Create a client transport pointing to the server.
85
+ const clientTransport = new HttpClientToolTransport(apiRoot);
86
+
87
+ // 2. Mount ClientTools. This crucial step connects to the server,
88
+ // fetches the definitions for all available ServerTools (like 'getUserProfile'),
89
+ // and creates the local ClientTools proxies.
90
+ await clientTransport.mount(ClientTools);
91
+
92
+ // 3. Get the proxy tool and run it as if it were local.
93
+ const getUserProfile = ClientTools.get('getUserProfile');
94
+ const profile = await getUserProfile.run({ id: '123' });
95
+
96
+ console.log(profile);
97
+ }
98
+ main();
99
+ ```
100
+
101
+ ## 3. Advanced Tool Types & Transport Interaction
102
+
103
+ The framework provides specialized subclasses of `ServerTools` for common API patterns. A key concept is that the **transport layer remains agnostic** to these types. It always just finds a tool by its name and executes its main `func`. The tool itself is responsible for any internal logic, like routing to sub-methods.
104
+
105
+ ### `RpcMethodsServerTool`
106
+
107
+ This class allows you to group multiple related functions into a single tool, like methods on a class.
108
+
109
+ - **How it works:** You define methods in your class with a `$` prefix (e.g., `$add`, `$subtract`). The tool's main `func` acts as a dispatcher, using an `act` parameter from the client to call the correct internal method.
110
+ - **Transport Interaction:** The transport is unaware of this. It just calls the main `func` of the `calculator` tool. The tool's internal dispatcher does the rest.
111
+
112
+ **Example:**
113
+
114
+ ```typescript
115
+ // tools/CalculatorTool.ts
116
+ import { RpcMethodsServerTool } from '@isdk/ai-tool';
117
+
118
+ export class CalculatorTool extends RpcMethodsServerTool {
119
+ $add({ a, b }: { a: number, b: number }) { return a + b; }
120
+ $subtract({ a, b }: { a: number, b: number }) { return a - b; }
121
+ }
122
+
123
+ // server.ts - You would register this tool:
124
+ // new CalculatorTool('calculator').register();
125
+
126
+ // client.ts - The client-side proxy would have .add() and .subtract() methods:
127
+ // const sum = await calculator.add({ a: 10, b: 5 });
128
+ ```
129
+
130
+ ### `ResServerTools`
131
+
132
+ This class extends `RpcMethodsServerTool` to provide a conventional, resource-oriented (CRUD) API.
133
+
134
+ - **How it works:** It maps standard method names like `get`, `list`, `post`, `put`, and `delete` to different HTTP verbs and URL patterns.
135
+ - **Transport Interaction:** Just like with `RpcMethodsServerTool`, the transport remains agnostic. For example, a `GET /api/myResource/123` request is routed by the `Fastify` transport to the `myResource` tool. The tool's internal logic then identifies the `GET` verb and the `id` parameter and calls its own `get()` method.
136
+
137
+ This architecture provides a clean, powerful, and extensible way to build and consume APIs, clearly separating your business logic from the complexities of network communication.