@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.
- package/README.cn.md +103 -237
- package/README.md +101 -186
- package/dist/chunk-LNTIQQNN.mjs +1 -0
- package/dist/chunk-VIG2GB47.mjs +1 -1
- package/dist/funcs.d.mts +1 -1
- package/dist/funcs.d.ts +1 -1
- package/dist/funcs.js +1 -1
- package/dist/funcs.mjs +1 -1
- package/dist/index-BCco-g_I.d.mts +1781 -0
- package/dist/index-BCco-g_I.d.ts +1781 -0
- package/dist/index.d.mts +1083 -650
- package/dist/index.d.ts +1083 -650
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/test/util.js +1 -1
- package/docs/api/README.md +165 -0
- package/docs/{_media → api/_media}/CONTRIBUTING.md +3 -3
- package/docs/api/_media/pubsub.md +326 -0
- package/docs/api/_media/server_client_tools.md +88 -0
- package/docs/api/_media/toolFunc.md +183 -0
- package/docs/api/_media/transport.md +137 -0
- package/docs/{classes → api/classes}/AbortError.md +139 -54
- package/docs/api/classes/AlreadyExistsError.md +431 -0
- package/docs/api/classes/BaseError.md +440 -0
- package/docs/{classes → api/classes}/BinarySemaphore.md +25 -25
- package/docs/{classes → api/classes}/CancelableAbility.md +25 -25
- package/docs/api/classes/ClientToolTransport.md +310 -0
- package/docs/{classes → api/classes}/ClientTools.md +642 -180
- package/docs/{classes → api/classes}/CommonError.md +139 -54
- package/docs/api/classes/ConfigFile.md +218 -0
- package/docs/{classes → api/classes}/EnvPromptTemplate.md +308 -65
- package/docs/{classes → api/classes}/EventClient.md +725 -232
- package/docs/{classes → api/classes}/EventEmitter.md +12 -12
- package/docs/{classes → api/classes}/EventServer.md +658 -205
- package/docs/{classes → api/classes}/EventToolFunc.md +561 -109
- package/docs/{classes → api/classes}/FStringPromptTemplate.md +309 -66
- package/docs/{classes → api/classes}/FewShotPromptTemplate.md +290 -63
- package/docs/{classes → api/classes}/GolangPromptTemplate.md +308 -65
- package/docs/api/classes/HttpClientToolTransport.md +324 -0
- package/docs/api/classes/HttpServerToolTransport.md +324 -0
- package/docs/{classes → api/classes}/IntSet.md +12 -12
- package/docs/{classes → api/classes}/LRUCache.md +26 -26
- package/docs/api/classes/NotFoundError.md +431 -0
- package/docs/api/classes/NotImplementationError.md +431 -0
- package/docs/{classes → api/classes}/PromptExampleSelector.md +9 -9
- package/docs/{classes → api/classes}/PromptTemplate.md +303 -63
- package/docs/api/classes/ReadableStreamError.md +451 -0
- package/docs/api/classes/ResClientTools.md +2878 -0
- package/docs/api/classes/ResServerTools.md +2856 -0
- package/docs/api/classes/SSEChannel.md +272 -0
- package/docs/{classes → api/classes}/Semaphore.md +26 -26
- package/docs/api/classes/ServerToolTransport.md +323 -0
- package/docs/{classes → api/classes}/ServerTools.md +579 -120
- package/docs/{classes → api/classes}/SignalGate.md +9 -9
- package/docs/api/classes/SseClientPubSubTransport.md +92 -0
- package/docs/api/classes/SseServerPubSubTransport.md +234 -0
- package/docs/{classes → api/classes}/TaskAbortController.md +9 -9
- package/docs/api/classes/ToolFunc.md +2665 -0
- package/docs/api/classes/ToolTransport.md +143 -0
- package/docs/api/classes/YamlTypeBaseObject.md +31 -0
- package/docs/api/enumerations/AsyncFeatureBits.md +33 -0
- package/docs/api/enumerations/AsyncFeatures.md +33 -0
- package/docs/api/enumerations/ErrorCode.md +177 -0
- package/docs/api/enumerations/HashAlgorithm.md +97 -0
- package/docs/{functions → api/functions}/AIArgProcessor.md +1 -1
- package/docs/{functions → api/functions}/AIStream.md +1 -1
- package/docs/{functions → api/functions}/ChoiceArgProcessor.md +1 -1
- package/docs/api/functions/DefaultDateFormat.md +21 -0
- package/docs/{functions → api/functions}/ObjectArgsToArgsInfo.md +1 -1
- package/docs/{functions → api/functions}/RateLimit.md +1 -1
- package/docs/{functions → api/functions}/TemplateArgProcessor.md +1 -1
- package/docs/api/functions/addDate.md +71 -0
- package/docs/{functions → api/functions}/assignDirs.md +1 -1
- package/docs/{functions → api/functions}/backendEventable.md +1 -1
- package/docs/{functions → api/functions}/beforeShutdown.md +1 -1
- package/docs/api/functions/calcPerplexity.md +60 -0
- package/docs/api/functions/calcPerplexitySimple.md +42 -0
- package/docs/api/functions/canonicalize.md +33 -0
- package/docs/{functions → api/functions}/completeSentences.md +1 -1
- package/docs/{functions → api/functions}/concatText.md +1 -1
- package/docs/{functions → api/functions}/countLLMTokens.md +1 -1
- package/docs/{functions → api/functions}/countRegexMatches.md +1 -1
- package/docs/{functions → api/functions}/createAbilityInjector.md +4 -4
- package/docs/{functions → api/functions}/createCallbacksTransformer.md +1 -1
- package/docs/{functions → api/functions}/createEmptyReadableStream.md +1 -1
- package/docs/{functions → api/functions}/createEndWithRepetitionDetector.md +1 -1
- package/docs/{functions → api/functions}/createError.md +1 -1
- package/docs/{functions → api/functions}/createEventStreamTransformer.md +1 -1
- package/docs/{functions → api/functions}/createHfValueFunc.md +1 -1
- package/docs/{functions → api/functions}/createLRUCache.md +1 -1
- package/docs/{functions → api/functions}/createYamlObjectTag.md +1 -1
- package/docs/{functions → api/functions}/dateToText.md +1 -1
- package/docs/{functions → api/functions}/decodeCharset.md +1 -1
- package/docs/api/functions/defaultsWithConcat.md +74 -0
- package/docs/{functions → api/functions}/detectCharset.md +1 -1
- package/docs/{functions → api/functions}/encodeLLMTokens.md +1 -1
- package/docs/{functions → api/functions}/ensureQuoted.md +1 -1
- package/docs/{functions → api/functions}/eventable.md +1 -1
- package/docs/api/functions/expandConfig.md +25 -0
- package/docs/{functions → api/functions}/expandEnv.md +4 -4
- package/docs/{functions → api/functions}/expandObjEnv.md +4 -4
- package/docs/{functions → api/functions}/expandPath.md +1 -1
- package/docs/api/functions/expandPathInObject.md +29 -0
- package/docs/api/functions/expandPaths.md +25 -0
- package/docs/{functions → api/functions}/extNameLevel.md +1 -1
- package/docs/{functions → api/functions}/fileIsExists.md +1 -1
- package/docs/{functions → api/functions}/filterValidFnScope.md +1 -1
- package/docs/{functions → api/functions}/findIndexNonEmptyFrom.md +1 -1
- package/docs/{functions → api/functions}/findPort.md +1 -1
- package/docs/{functions → api/functions}/formatISO.md +1 -1
- package/docs/{functions → api/functions}/formatTextWithSpace.md +1 -1
- package/docs/api/functions/funcGetMeta.md +27 -0
- package/docs/api/functions/funcWithMeta.md +41 -0
- package/docs/api/functions/genUrlParamsStr.md +27 -0
- package/docs/{functions → api/functions}/getAllEnumKeys.md +1 -1
- package/docs/{functions → api/functions}/getConfigFileNames.md +1 -1
- package/docs/{functions → api/functions}/getConfigs.md +1 -1
- package/docs/{functions → api/functions}/getEnvVairables.md +1 -1
- package/docs/{functions → api/functions}/getFileMetaInfo.md +1 -1
- package/docs/{functions → api/functions}/getHashAlgoBySize.md +1 -1
- package/docs/{functions → api/functions}/getKeysPath.md +1 -1
- package/docs/{functions → api/functions}/getLLMTokenizer.md +1 -1
- package/docs/{functions → api/functions}/getMultiLevelExtname.md +4 -4
- package/docs/{functions → api/functions}/getPackageDir.md +1 -1
- package/docs/{functions → api/functions}/getRealFilepath.md +1 -1
- package/docs/{functions → api/functions}/getResponseErrorReadableStream.md +1 -1
- package/docs/{functions → api/functions}/getXDGConfigs.md +1 -1
- package/docs/{functions → api/functions}/hasDirectoryIn.md +1 -1
- package/docs/{functions → api/functions}/hash.md +1 -1
- package/docs/{functions → api/functions}/hashFile.md +1 -1
- package/docs/api/functions/hashObject.md +25 -0
- package/docs/{functions → api/functions}/hashStream.md +1 -1
- package/docs/api/functions/initShutdown.md +15 -0
- package/docs/{functions → api/functions}/isLangUsingSpaces.md +1 -1
- package/docs/{functions → api/functions}/isListItemString.md +1 -1
- package/docs/{functions → api/functions}/isModelNameMatched.md +1 -1
- package/docs/{functions → api/functions}/isPunctuationChar.md +1 -1
- package/docs/{functions → api/functions}/isQuoted.md +1 -1
- package/docs/{functions → api/functions}/isRegExp.md +1 -1
- package/docs/{functions → api/functions}/isSameString.md +1 -1
- package/docs/{functions → api/functions}/isSectionString.md +1 -1
- package/docs/{functions → api/functions}/isSentenceEnding.md +1 -1
- package/docs/{functions → api/functions}/isSepLineString.md +1 -1
- package/docs/{functions → api/functions}/isStrWrapped.md +1 -1
- package/docs/{functions → api/functions}/isSubdirectory.md +2 -2
- package/docs/{functions → api/functions}/isTitleString.md +1 -1
- package/docs/{functions → api/functions}/isValidFilename.md +1 -1
- package/docs/{functions → api/functions}/isValidFilepath.md +1 -1
- package/docs/{functions → api/functions}/isWebStream.md +1 -1
- package/docs/api/functions/joinSplitWords.md +46 -0
- package/docs/{functions → api/functions}/jsonFilterToWhere.md +1 -1
- package/docs/{functions → api/functions}/jsonToMarkdownStr.md +9 -1
- package/docs/{functions → api/functions}/loadAIConfig.md +1 -1
- package/docs/{functions → api/functions}/loadConfig.md +1 -1
- package/docs/{functions → api/functions}/loadConfigFile.md +1 -1
- package/docs/{functions → api/functions}/loadFileFromPaths.md +1 -1
- package/docs/{functions → api/functions}/loadTextFromPaths.md +1 -1
- package/docs/{functions → api/functions}/lrucache.md +1 -1
- package/docs/{functions → api/functions}/makeToolFuncCancelable.md +1 -1
- package/docs/{functions → api/functions}/matchUrlProtocol.md +1 -1
- package/docs/{functions → api/functions}/memoize.md +1 -1
- package/docs/api/functions/mergeArray.md +57 -0
- package/docs/{functions → api/functions}/messagesToText.md +1 -1
- package/docs/api/functions/normalizePath.md +21 -0
- package/docs/{functions → api/functions}/paramsSizeToScaleStr.md +1 -1
- package/docs/{functions → api/functions}/parseCommand.md +1 -1
- package/docs/{functions → api/functions}/parseDateFormat.md +1 -1
- package/docs/{functions → api/functions}/parseISO.md +1 -1
- package/docs/{functions → api/functions}/parseJsJson.md +1 -1
- package/docs/{functions → api/functions}/parseJsJsonSimpleSync.md +1 -1
- package/docs/{functions → api/functions}/parseObjectArgInfo.md +1 -1
- package/docs/{functions → api/functions}/parseObjectArgumentInfos.md +1 -1
- package/docs/{functions → api/functions}/parseObjectArguments.md +1 -1
- package/docs/{functions → api/functions}/parseObjectArgumentsAsArgInfos.md +1 -1
- package/docs/api/functions/parseYaml.md +45 -0
- package/docs/api/functions/pruneSubdirectories.md +35 -0
- package/docs/api/functions/pruneSubdirectoriesInPlace.md +38 -0
- package/docs/{functions → api/functions}/quoteStr.md +1 -1
- package/docs/{functions → api/functions}/readFilenamesRecursiveSync.md +7 -1
- package/docs/{functions → api/functions}/readTextFileChunks.md +1 -1
- package/docs/{functions → api/functions}/readTextFileChunksEx.md +1 -1
- package/docs/{functions → api/functions}/readableFromAsyncIterable.md +1 -1
- package/docs/{functions → api/functions}/registerCoreTools.md +1 -1
- package/docs/api/functions/registerYamlTag.md +37 -0
- package/docs/{functions → api/functions}/removeMarkdownBold.md +1 -1
- package/docs/{functions → api/functions}/removeMarkdownBoldAndItalic.md +1 -1
- package/docs/{functions → api/functions}/removeMarkdownItalic.md +1 -1
- package/docs/{functions → api/functions}/replaceWithPlaceholder.md +1 -1
- package/docs/{functions → api/functions}/restoreFromPlacehoders.md +1 -1
- package/docs/{functions → api/functions}/sanitizeFilename.md +4 -4
- package/docs/{functions → api/functions}/sanitizeFilepath.md +4 -4
- package/docs/{functions → api/functions}/saveConfigFile.md +1 -1
- package/docs/{functions → api/functions}/scaleStrToParamsSize.md +1 -1
- package/docs/{functions → api/functions}/shutdown.md +1 -1
- package/docs/{functions → api/functions}/simplifyObjectArguments.md +1 -1
- package/docs/api/functions/sleep.md +36 -0
- package/docs/{functions → api/functions}/sortedValues.md +1 -1
- package/docs/{functions → api/functions}/splitChunks.md +1 -1
- package/docs/{functions → api/functions}/splitParagraph.md +1 -1
- package/docs/{functions → api/functions}/splitSentence.md +1 -1
- package/docs/api/functions/splitWords.md +42 -0
- package/docs/api/functions/stringifyYaml.md +45 -0
- package/docs/{functions → api/functions}/stripConsoleColor.md +1 -1
- package/docs/{functions → api/functions}/textToDate.md +1 -1
- package/docs/{functions → api/functions}/throwError.md +3 -3
- package/docs/{functions → api/functions}/toDate.md +1 -1
- package/docs/{functions → api/functions}/toDateTime.md +1 -1
- package/docs/{functions → api/functions}/toRegExp.md +1 -1
- package/docs/{functions → api/functions}/trimStartOfStreamHelper.md +1 -1
- package/docs/{functions → api/functions}/truncTo.md +1 -1
- package/docs/{functions → api/functions}/truncateByToken.md +1 -1
- package/docs/{functions → api/functions}/truncateToTokenLimit.md +1 -1
- package/docs/{functions → api/functions}/truncateToTokenLimitEx.md +1 -1
- package/docs/{functions → api/functions}/uuid.md +1 -1
- package/docs/{functions → api/functions}/uuidParse.md +1 -1
- package/docs/{functions → api/functions}/uuidStringify.md +1 -1
- package/docs/{functions → api/functions}/uuidValidate.md +1 -1
- package/docs/{functions → api/functions}/uuidVersion.md +1 -1
- package/docs/{functions → api/functions}/uuidv1.md +9 -5
- package/docs/{functions → api/functions}/uuidv4.md +9 -5
- package/docs/{functions → api/functions}/uuidv5.md +9 -5
- package/docs/api/functions/wait.md +45 -0
- package/docs/{functions → api/functions}/wrapEventEmitter.md +1 -1
- package/docs/{functions → api/functions}/xxhash.md +1 -1
- package/docs/{functions → api/functions}/xxhash32.md +1 -1
- package/docs/{functions → api/functions}/xxhash64.md +1 -1
- package/docs/{functions → api/functions}/xxhashAsStr.md +1 -1
- package/docs/api/functions/yieldExec.md +27 -0
- package/docs/{globals.md → api/globals.md} +44 -24
- package/docs/api/interfaces/AIChatAssistantMessageParam.md +129 -0
- package/docs/api/interfaces/AIChatContentPartImage.md +29 -0
- package/docs/api/interfaces/AIChatContentPartText.md +25 -0
- package/docs/api/interfaces/AIChatMessageParamBase.md +68 -0
- package/docs/api/interfaces/AIChatMessageToolCall.md +41 -0
- package/docs/{interfaces → api/interfaces}/AIChatSystemMessageParam.md +9 -9
- package/docs/api/interfaces/AIChatToolChoiceFuncObject.md +37 -0
- package/docs/api/interfaces/AIChatToolChoiceObject.md +25 -0
- package/docs/api/interfaces/AIChatToolFunc.md +41 -0
- package/docs/api/interfaces/AIChatToolFuncParam.md +37 -0
- package/docs/api/interfaces/AIChatToolMessageParam.md +113 -0
- package/docs/api/interfaces/AIChatToolParam.md +25 -0
- package/docs/api/interfaces/AIChatToolTypeObject.md +17 -0
- package/docs/api/interfaces/AIChatUserMessageParam.md +137 -0
- package/docs/api/interfaces/AIChoiceConfig.md +65 -0
- package/docs/api/interfaces/AIResult.md +65 -0
- package/docs/{interfaces → api/interfaces}/AIStreamParser.md +2 -2
- package/docs/api/interfaces/AIStreamParserOptions.md +21 -0
- package/docs/api/interfaces/BaseFunc.md +299 -0
- package/docs/api/interfaces/BaseFuncItem.md +221 -0
- package/docs/api/interfaces/BinarySemaphoreAcquireOptions.md +25 -0
- package/docs/api/interfaces/BinarySemaphoreOptions.md +57 -0
- package/docs/api/interfaces/BinarySemaphoreReleaseOptions.md +25 -0
- package/docs/api/interfaces/BinarySemaphoreReleaserFunc.md +37 -0
- package/docs/api/interfaces/CancelableAbilityOptions.md +113 -0
- package/docs/api/interfaces/ClientFuncItem.md +326 -0
- package/docs/api/interfaces/EventClientFuncParams.md +51 -0
- package/docs/api/interfaces/EventServerFuncParams.md +73 -0
- package/docs/api/interfaces/FewShotPromptTemplateOptions.md +159 -0
- package/docs/api/interfaces/FuncItem.md +281 -0
- package/docs/api/interfaces/FuncParam.md +51 -0
- package/docs/api/interfaces/FuncParams.md +28 -0
- package/docs/api/interfaces/Funcs.md +15 -0
- package/docs/api/interfaces/HashAlgoParams.md +33 -0
- package/docs/api/interfaces/IClientToolTransport.md +155 -0
- package/docs/api/interfaces/IFileMetaInfo.md +65 -0
- package/docs/api/interfaces/IPubSubClientTransport.md +70 -0
- package/docs/api/interfaces/IPubSubServerTransport.md +241 -0
- package/docs/{interfaces → api/interfaces}/IReadTextFileChunksOptions.md +12 -12
- package/docs/api/interfaces/IServerToolTransport.md +159 -0
- package/docs/api/interfaces/IToolTransport.md +73 -0
- package/docs/api/interfaces/ITruncateToTokenLimitOptions.md +99 -0
- package/docs/api/interfaces/JsonFilter.md +13 -0
- package/docs/api/interfaces/ParseObjectArgumentOptions.md +89 -0
- package/docs/api/interfaces/ProbabilityItem.md +41 -0
- package/docs/api/interfaces/PromptExampleSelectorOptions.md +34 -0
- package/docs/api/interfaces/PromptTemplateOptions.md +73 -0
- package/docs/api/interfaces/PubSubClient.md +27 -0
- package/docs/api/interfaces/PubSubClientStream.md +196 -0
- package/docs/api/interfaces/PubSubServerSession.md +103 -0
- package/docs/api/interfaces/RemoteFuncItem.md +316 -0
- package/docs/api/interfaces/ReplacePlacehoderOptions.md +41 -0
- package/docs/api/interfaces/ResClientFuncParams.md +37 -0
- package/docs/api/interfaces/ResServerFuncParams.md +73 -0
- package/docs/api/interfaces/SanitizeFilenameOptions.md +25 -0
- package/docs/api/interfaces/SectionStringOptions.md +25 -0
- package/docs/api/interfaces/SemaphoreOptions.md +89 -0
- package/docs/api/interfaces/SemaphoreTaskItem.md +73 -0
- package/docs/api/interfaces/ServerFuncItem.md +339 -0
- package/docs/api/interfaces/ServerFuncParams.md +41 -0
- package/docs/api/interfaces/SplitSentenceOptions.md +41 -0
- package/docs/{interfaces → api/interfaces}/StreamCallbacksAndOptions.md +5 -5
- package/docs/{interfaces → api/interfaces}/TaskAbortControllers.md +1 -1
- package/docs/{interfaces → api/interfaces}/TaskPromise.md +6 -6
- package/docs/api/interfaces/ToolFuncPackage.md +57 -0
- package/docs/{namespaces → api/namespaces}/EventStates/variables/ABORT.md +1 -1
- package/docs/{namespaces → api/namespaces}/EventStates/variables/CONTINUE.md +1 -1
- package/docs/{namespaces → api/namespaces}/EventStates/variables/DONE.md +1 -1
- package/docs/{namespaces → api/namespaces}/EventStates/variables/STOPPED.md +1 -1
- package/docs/{namespaces → api/namespaces}/uuidv5/variables/DNS.md +1 -1
- package/docs/{namespaces → api/namespaces}/uuidv5/variables/URL.md +1 -1
- package/docs/{type-aliases → api/type-aliases}/AIChatContentPart.md +1 -1
- package/docs/{type-aliases → api/type-aliases}/AIChatMessageParam.md +1 -1
- package/docs/{type-aliases → api/type-aliases}/AIChatRole.md +1 -1
- package/docs/{type-aliases → api/type-aliases}/AIChatToolChoiceParam.md +1 -1
- package/docs/{type-aliases → api/type-aliases}/AIMessageType.md +1 -1
- package/docs/api/type-aliases/AIModelNameRule.md +14 -0
- package/docs/api/type-aliases/AIModelNameRuleFn.md +28 -0
- package/docs/api/type-aliases/AIModelNameRules.md +13 -0
- package/docs/{type-aliases → api/type-aliases}/AITextGenerationFinishReason.md +1 -1
- package/docs/api/type-aliases/ActionName.md +13 -0
- package/docs/api/type-aliases/ArrayMergeWay.md +11 -0
- package/docs/api/type-aliases/AsyncTaskId.md +11 -0
- package/docs/{type-aliases → api/type-aliases}/BeforeShutdownListener.md +1 -1
- package/docs/{type-aliases → api/type-aliases}/EventErrorListenerFn.md +1 -1
- package/docs/{type-aliases → api/type-aliases}/EventListenerFn.md +1 -1
- package/docs/api/type-aliases/FuncParamType.md +13 -0
- package/docs/{type-aliases → api/type-aliases}/PromptExamples.md +1 -1
- package/docs/api/type-aliases/PubSubClientId.md +14 -0
- package/docs/api/type-aliases/PubSubCtx.md +37 -0
- package/docs/api/type-aliases/RpcMethodHandler.md +34 -0
- package/docs/{type-aliases → api/type-aliases}/SemaphoreIsReadyFuncType.md +1 -1
- package/docs/api/type-aliases/TFunc.md +33 -0
- package/docs/{variables → api/variables}/AIChatRoles.md +1 -1
- package/docs/{variables → api/variables}/AIMessageTypes.md +1 -1
- package/docs/{variables → api/variables}/AITextGenerationFinishReasons.md +1 -1
- package/docs/{variables → api/variables}/AbortErrorCode.md +1 -1
- package/docs/api/variables/ActionNames.md +13 -0
- package/docs/{variables → api/variables}/AlreadyExistsErrorCode.md +1 -1
- package/docs/api/variables/ArrayMergeWay.md +25 -0
- package/docs/api/variables/ArrayMergeWaySymbol.md +11 -0
- package/docs/api/variables/ClientToolFuncSchema.md +83 -0
- package/docs/{variables → api/variables}/DEFAULT_CONFIG_NAME.md +1 -1
- package/docs/{variables → api/variables}/DefaultAsyncSemaphoreCapacity.md +1 -1
- package/docs/api/variables/EventBusName.md +11 -0
- package/docs/api/variables/EventName.md +11 -0
- package/docs/{variables → api/variables}/FilenameReservedRegex.md +1 -1
- package/docs/api/variables/FuncMetaSymbol.md +15 -0
- package/docs/{variables → api/variables}/InternalErrorCode.md +1 -1
- package/docs/{variables → api/variables}/LLM_TOKENIZER_NAMES.md +1 -1
- package/docs/{variables → api/variables}/LLM_TOKENIZER_NAMES_MAP.md +1 -1
- package/docs/{variables → api/variables}/NotFoundErrorCode.md +1 -1
- package/docs/{variables → api/variables}/NotImplementedErrorCode.md +1 -1
- package/docs/api/variables/PASSING_SCORE.md +13 -0
- package/docs/api/variables/RStreamErrCode.md +11 -0
- package/docs/api/variables/RemoteToolFuncSchema.md +84 -0
- package/docs/api/variables/ResponseRStreamErrCode.md +11 -0
- package/docs/{variables → api/variables}/SHUTDOWN_SIGNALS.md +1 -1
- package/docs/{variables → api/variables}/SSEChannelAlreadyClosedErrCode.md +1 -1
- package/docs/api/variables/SecondaryCache.md +11 -0
- package/docs/api/variables/ServerToolFuncSchema.md +83 -0
- package/docs/api/variables/StrangeHumanName.md +11 -0
- package/docs/api/variables/ToolAsyncCancelableBit.md +11 -0
- package/docs/api/variables/ToolAsyncMultiTaskBit.md +11 -0
- package/docs/api/variables/ToolAsyncPriorityBit.md +11 -0
- package/docs/{variables → api/variables}/ToolFuncSchema.md +14 -1
- package/docs/{variables → api/variables}/WindowsReservedNameRegex.md +1 -1
- package/docs/api/variables/base32768.md +11 -0
- package/docs/api/variables/defaultTemplateFormat.md +11 -0
- package/docs/api/variables/event.md +11 -0
- package/docs/api/variables/eventClient.md +11 -0
- package/docs/api/variables/eventServer.md +11 -0
- package/docs/api/variables/lrucache.md +11 -0
- package/docs/{variables → api/variables}/mimeType.md +1 -1
- package/docs/{variables → api/variables}/uuidNIL.md +1 -1
- package/docs/pubsub.md +326 -0
- package/docs/server_client_tools.md +88 -0
- package/docs/toolFunc.md +183 -0
- package/docs/transport.md +137 -0
- package/package.json +38 -38
- package/dist/chunk-YVFGQB4L.mjs +0 -1
- package/dist/index-BkwhCK1q.d.mts +0 -899
- package/dist/index-BkwhCK1q.d.ts +0 -899
- package/docs/README.md +0 -250
- package/docs/classes/AlreadyExistsError.md +0 -346
- package/docs/classes/BaseError.md +0 -359
- package/docs/classes/ConfigFile.md +0 -353
- package/docs/classes/HFEnvironment.md +0 -184
- package/docs/classes/HFInterpreter.md +0 -77
- package/docs/classes/HFTemplate.md +0 -67
- package/docs/classes/HfPromptTemplate.md +0 -1158
- package/docs/classes/NotFoundError.md +0 -346
- package/docs/classes/NotImplementationError.md +0 -346
- package/docs/classes/ReadableStreamError.md +0 -366
- package/docs/classes/ResClientTools.md +0 -2451
- package/docs/classes/ResServerTools.md +0 -2427
- package/docs/classes/SSEChannel.md +0 -270
- package/docs/classes/ToolFunc.md +0 -2201
- package/docs/classes/YamlTypeBaseObject.md +0 -31
- package/docs/enumerations/AsyncFeatureBits.md +0 -33
- package/docs/enumerations/AsyncFeatures.md +0 -33
- package/docs/enumerations/ErrorCode.md +0 -177
- package/docs/enumerations/HashAlgorithm.md +0 -97
- package/docs/functions/canonicalize.md +0 -21
- package/docs/functions/expandConfig.md +0 -25
- package/docs/functions/filenameReservedRegex.md +0 -20
- package/docs/functions/hfParse.md +0 -24
- package/docs/functions/hfTokenize.md +0 -27
- package/docs/functions/initShutdown.md +0 -15
- package/docs/functions/interpolateEnv.md +0 -29
- package/docs/functions/interpolateFString.md +0 -29
- package/docs/functions/interpolateGolangTemplate.md +0 -35
- package/docs/functions/parseFString.md +0 -26
- package/docs/functions/parseYaml.md +0 -25
- package/docs/functions/reControlCharsRegex.md +0 -19
- package/docs/functions/registerYamlTag.md +0 -21
- package/docs/functions/stringifyYaml.md +0 -25
- package/docs/functions/wait.md +0 -21
- package/docs/interfaces/AIChatAssistantMessageParam.md +0 -129
- package/docs/interfaces/AIChatContentPartImage.md +0 -29
- package/docs/interfaces/AIChatContentPartText.md +0 -25
- package/docs/interfaces/AIChatMessageParamBase.md +0 -68
- package/docs/interfaces/AIChatMessageToolCall.md +0 -41
- package/docs/interfaces/AIChatToolChoiceFuncObject.md +0 -37
- package/docs/interfaces/AIChatToolChoiceObject.md +0 -25
- package/docs/interfaces/AIChatToolFunc.md +0 -41
- package/docs/interfaces/AIChatToolFuncParam.md +0 -37
- package/docs/interfaces/AIChatToolMessageParam.md +0 -113
- package/docs/interfaces/AIChatToolParam.md +0 -25
- package/docs/interfaces/AIChatToolTypeObject.md +0 -17
- package/docs/interfaces/AIChatUserMessageParam.md +0 -137
- package/docs/interfaces/AIChoiceConfig.md +0 -65
- package/docs/interfaces/AIResult.md +0 -65
- package/docs/interfaces/AIStreamParserOptions.md +0 -21
- package/docs/interfaces/BaseFunc.md +0 -157
- package/docs/interfaces/BaseFuncItem.md +0 -101
- package/docs/interfaces/BinarySemaphoreAcquireOptions.md +0 -25
- package/docs/interfaces/BinarySemaphoreOptions.md +0 -57
- package/docs/interfaces/BinarySemaphoreReleaseOptions.md +0 -25
- package/docs/interfaces/BinarySemaphoreReleaserFunc.md +0 -37
- package/docs/interfaces/CancelableAbilityOptions.md +0 -113
- package/docs/interfaces/ClientFuncItem.md +0 -175
- package/docs/interfaces/DotenvExpandOptions.md +0 -43
- package/docs/interfaces/DotenvExpandOutput.md +0 -25
- package/docs/interfaces/DotenvParseInput.md +0 -13
- package/docs/interfaces/DotenvParseOutput.md +0 -13
- package/docs/interfaces/DotenvPopulateInput.md +0 -13
- package/docs/interfaces/EventClientFuncParams.md +0 -51
- package/docs/interfaces/EventServerFuncParams.md +0 -67
- package/docs/interfaces/FewShotPromptTemplateOptions.md +0 -147
- package/docs/interfaces/FuncItem.md +0 -143
- package/docs/interfaces/FuncParam.md +0 -61
- package/docs/interfaces/FuncParams.md +0 -13
- package/docs/interfaces/Funcs.md +0 -13
- package/docs/interfaces/HashAlgoParams.md +0 -33
- package/docs/interfaces/IFileMetaInfo.md +0 -65
- package/docs/interfaces/ITruncateToTokenLimitOptions.md +0 -99
- package/docs/interfaces/JsonFilter.md +0 -13
- package/docs/interfaces/ParseObjectArgumentOptions.md +0 -89
- package/docs/interfaces/PromptExampleSelectorOptions.md +0 -34
- package/docs/interfaces/PromptTemplateOptions.md +0 -65
- package/docs/interfaces/RemoteFuncItem.md +0 -164
- package/docs/interfaces/ReplacePlacehoderOptions.md +0 -41
- package/docs/interfaces/ResClientFuncParams.md +0 -37
- package/docs/interfaces/ResServerFuncParams.md +0 -69
- package/docs/interfaces/SanitizeFilenameOptions.md +0 -25
- package/docs/interfaces/SectionStringOptions.md +0 -25
- package/docs/interfaces/SemaphoreOptions.md +0 -89
- package/docs/interfaces/SemaphoreTaskItem.md +0 -73
- package/docs/interfaces/ServerFuncItem.md +0 -183
- package/docs/interfaces/ServerFuncParams.md +0 -35
- package/docs/interfaces/SplitSentenceOptions.md +0 -41
- package/docs/interfaces/ToolFuncPackage.md +0 -47
- package/docs/type-aliases/AIModelNameRule.md +0 -11
- package/docs/type-aliases/AIModelNameRuleFn.md +0 -21
- package/docs/type-aliases/AIModelNameRules.md +0 -11
- package/docs/type-aliases/ActionName.md +0 -11
- package/docs/type-aliases/AsyncTaskId.md +0 -11
- package/docs/type-aliases/FStringPromptTemplateNode.md +0 -14
- package/docs/type-aliases/FuncParamType.md +0 -11
- package/docs/type-aliases/PromptTemplateType.md +0 -11
- package/docs/type-aliases/PromptType.md +0 -11
- package/docs/type-aliases/TFunc.md +0 -25
- package/docs/variables/ActionNames.md +0 -11
- package/docs/variables/ClientToolFuncSchema.md +0 -101
- package/docs/variables/EventBusName.md +0 -11
- package/docs/variables/EventName.md +0 -11
- package/docs/variables/HFBuiltins.md +0 -122
- package/docs/variables/PASSING_SCORE.md +0 -11
- package/docs/variables/PromptTemplateTypes.md +0 -11
- package/docs/variables/PromptTypes.md +0 -14
- package/docs/variables/RStreamErrCode.md +0 -11
- package/docs/variables/RemoteToolFuncSchema.md +0 -101
- package/docs/variables/ResponseRStreamErrCode.md +0 -11
- package/docs/variables/SecondaryCache.md +0 -11
- package/docs/variables/ServerToolFuncSchema.md +0 -101
- package/docs/variables/ToolAsyncCancelableBit.md +0 -11
- package/docs/variables/ToolAsyncMultiTaskBit.md +0 -11
- package/docs/variables/ToolAsyncPriorityBit.md +0 -11
- package/docs/variables/base32768.md +0 -11
- package/docs/variables/defaultTemplateFormat.md +0 -11
- package/docs/variables/event.md +0 -11
- package/docs/variables/eventClient.md +0 -11
- package/docs/variables/eventServer.md +0 -11
- package/docs/variables/lrucache.md +0 -11
- /package/docs/{_media → api/_media}/LICENSE-MIT +0 -0
- /package/docs/{namespaces → api/namespaces}/EventStates/README.md +0 -0
- /package/docs/{namespaces → api/namespaces}/uuidv5/README.md +0 -0
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{AIArgProcessor as s,AIChatRoles as a,AIMessageTypes as u,AIStream as i,AITextGenerationFinishReasons as e,AbortError as r,AbortErrorCode as t,ActionNames as n,AlreadyExistsError as d,AlreadyExistsErrorCode as m,AsyncFeatureBits as o,AsyncFeatures as f,BaseError as p,BinarySemaphore as v,CancelableAbility as F,ChoiceArgProcessor as h,ClientToolFuncSchema as H,ClientTools as V,CommonError as k,ConfigFile as l,DEFAULT_CONFIG_NAME as B,DefaultAsyncSemaphoreCapacity as G,EnvPromptTemplate as I,EnvironmentEx as c,ErrorCode as j,EventBusName as E,EventClient as L,EventEmitter as P,EventName as S,EventServer as T,EventToolFunc as g,FStringPromptTemplate as x,FewShotPromptTemplate as y,FilenameReservedRegex as z,GolangPromptTemplate as N,HashAlgorithm as Q,HfPromptTemplate as Y,IntSet as b,InternalErrorCode as q,Interpreter as w,LLM_TOKENIZER_NAMES as A,LLM_TOKENIZER_NAMES_MAP as C,LRUCache as D,NIL as J,NotFoundError as K,NotFoundErrorCode as M,NotImplementationError as O,NotImplementedErrorCode as R,ObjectArgsToArgsInfo as U,PASSING_SCORE as W,PromptExampleSelector as X,PromptTemplate as Z,PromptTemplateTypes as $,PromptTypes as _,RStreamErrCode as ss,RateLimit as as,ReadableStreamError as us,RemoteToolFuncSchema as is,ResClientTools as es,ResServerTools as rs,ResponseRStreamErrCode as ts,SHUTDOWN_SIGNALS as ns,SSEChannel as ds,SSEChannelAlreadyClosedErrCode as ms,SecondaryCache as os,Semaphore as fs,ServerToolFuncSchema as ps,ServerTools as vs,SignalGate as Fs,TaskAbortController as hs,Template as Hs,TemplateArgProcessor as Vs,ToolAsyncCancelableBit as ks,ToolAsyncMultiTaskBit as ls,ToolAsyncPriorityBit as Bs,ToolFunc as Gs,ToolFuncSchema as Is,WindowsReservedNameRegex as cs,YamlTypeBaseObject as js,_lrucache as Es,assignDirs as Ls,backendEventable as Ps,base32768 as Ss,beforeShutdown as Ts,builtins as gs,canonicalize as xs,completeSentences as ys,concatText as zs,countLLMTokens as Ns,countRegexMatches as Qs,createAbilityInjector as Ys,createCallbacksTransformer as bs,createEmptyReadableStream as qs,createEndWithRepetitionDetector as ws,createError as As,createEventStreamTransformer as Cs,createHfValueFunc as Ds,createLRUCache as Js,createYamlObjectTag as Ks,dateToText as Ms,decodeCharset as Os,defaultTemplateFormat as Rs,detectCharset as Us,encodeLLMTokens as Ws,ensureQuoted as Xs,event as Zs,eventClient as $s,eventServer as _s,eventable as sa,expandConfig as aa,expandEnv as ua,expandObjEnv as ia,expandPath as ea,extNameLevel as ra,fileIsExists as ta,filenameReservedRegex as na,filterValidFnScope as da,findIndexNonEmptyFrom as ma,formatISO as oa,formatTextWithSpace as fa,getAllEnumKeys as pa,getConfigFileNames as va,getConfigs as Fa,getEnvVairables as ha,getFileMetaInfo as Ha,getHashAlgoBySize as Va,getKeysPath as ka,getLLMTokenizer as la,getMultiLevelExtname as Ba,getPackageDir as Ga,getRealFilepath as Ia,getResponseErrorReadableStream as ca,getXDGConfigs as ja,hasDirectoryIn as Ea,hash as La,hashFile as Pa,hashStream as Sa,initShutdown as Ta,interpolateEnv as ga,interpolateFString as xa,interpolateGolangTemplate as ya,isLangUsingSpaces as za,isListItemString as Na,isModelNameMatched as Qa,isPunctuationChar as Ya,isQuoted as ba,isRegExp as qa,isSameString as wa,isSectionString as Aa,isSentenceEnding as Ca,isSepLineString as Da,isStrWrapped as Ja,isSubdirectory as Ka,isTitleString as Ma,isValidFilename as Oa,isValidFilepath as Ra,isWebStream as Ua,jsonFilterToWhere as Wa,jsonToMarkdownStr as Xa,loadAIConfig as Za,loadConfig as $a,loadConfigFile as _a,loadFileFromPaths as su,loadTextFromPaths as au,lrucache as uu,makeToolFuncCancelable as iu,matchUrlProtocol as eu,memoize as ru,messagesToText as tu,mimeType as nu,paramsSizeToScaleStr as du,parse as mu,parse2 as ou,parseCommand as fu,parseDateFormat as pu,parseFString as vu,parseISO as Fu,parseJsJson as hu,parseJsJsonSimpleSync as Hu,parseObjectArgInfo as Vu,parseObjectArgumentInfos as ku,parseObjectArguments as lu,parseObjectArgumentsAsArgInfos as Bu,parseYaml as Gu,quoteStr as Iu,reControlCharsRegex as cu,readFilenamesRecursiveSync as ju,readTextFileChunks as Eu,readTextFileChunksEx as Lu,readableFromAsyncIterable as Pu,registerCoreTools as Su,registerYamlTag as Tu,removeMarkdownBold as gu,removeMarkdownBoldAndItalic as xu,removeMarkdownItalic as yu,replaceWithPlaceholder as zu,restoreFromPlacehoders as Nu,sanitizeFilename as Qu,sanitizeFilepath as Yu,saveConfigFile as bu,scaleStrToParamsSize as qu,shutdown as wu,simplifyObjectArguments as Au,sortedValues as Cu,splitChunks as Du,splitParagraph as Ju,splitSentence as Ku,states as Mu,stringify as Ou,stringifyYaml as Ru,stripConsoleColor as Uu,textToDate as Wu,throwError as Xu,toDate as Zu,toDateTime as $u,toRegExp as _u,tokenize as si,trimStartOfStreamHelper as ai,truncTo as ui,truncateByToken as ii,truncateToTokenLimit as ei,truncateToTokenLimitEx as ri,uuid as ti,v1 as ni,v4 as di,v5 as mi,validate as oi,version as fi,wait as pi,wrapEventEmitter as vi,xxhash as Fi,xxhash32 as hi,xxhash64 as Hi,xxhashAsStr as Vi}from"./chunk-YVFGQB4L.mjs";import{findPort as ki}from"./chunk-VIG2GB47.mjs";export{s as AIArgProcessor,a as AIChatRoles,u as AIMessageTypes,i as AIStream,e as AITextGenerationFinishReasons,r as AbortError,t as AbortErrorCode,n as ActionNames,d as AlreadyExistsError,m as AlreadyExistsErrorCode,o as AsyncFeatureBits,f as AsyncFeatures,p as BaseError,v as BinarySemaphore,F as CancelableAbility,h as ChoiceArgProcessor,H as ClientToolFuncSchema,V as ClientTools,k as CommonError,l as ConfigFile,B as DEFAULT_CONFIG_NAME,G as DefaultAsyncSemaphoreCapacity,I as EnvPromptTemplate,j as ErrorCode,E as EventBusName,L as EventClient,P as EventEmitter,S as EventName,T as EventServer,Mu as EventStates,g as EventToolFunc,x as FStringPromptTemplate,y as FewShotPromptTemplate,z as FilenameReservedRegex,N as GolangPromptTemplate,gs as HFBuiltins,c as HFEnvironment,w as HFInterpreter,Hs as HFTemplate,Q as HashAlgorithm,Y as HfPromptTemplate,b as IntSet,q as InternalErrorCode,A as LLM_TOKENIZER_NAMES,C as LLM_TOKENIZER_NAMES_MAP,D as LRUCache,K as NotFoundError,M as NotFoundErrorCode,O as NotImplementationError,R as NotImplementedErrorCode,U as ObjectArgsToArgsInfo,W as PASSING_SCORE,X as PromptExampleSelector,Z as PromptTemplate,$ as PromptTemplateTypes,_ as PromptTypes,ss as RStreamErrCode,as as RateLimit,us as ReadableStreamError,is as RemoteToolFuncSchema,es as ResClientTools,rs as ResServerTools,ts as ResponseRStreamErrCode,ns as SHUTDOWN_SIGNALS,ds as SSEChannel,ms as SSEChannelAlreadyClosedErrCode,os as SecondaryCache,fs as Semaphore,ps as ServerToolFuncSchema,vs as ServerTools,Fs as SignalGate,hs as TaskAbortController,Vs as TemplateArgProcessor,ks as ToolAsyncCancelableBit,ls as ToolAsyncMultiTaskBit,Bs as ToolAsyncPriorityBit,Gs as ToolFunc,Is as ToolFuncSchema,cs as WindowsReservedNameRegex,js as YamlTypeBaseObject,Es as _lrucache,Ls as assignDirs,Ps as backendEventable,Ss as base32768,Ts as beforeShutdown,xs as canonicalize,ys as completeSentences,zs as concatText,Ns as countLLMTokens,Qs as countRegexMatches,Ys as createAbilityInjector,bs as createCallbacksTransformer,qs as createEmptyReadableStream,ws as createEndWithRepetitionDetector,As as createError,Cs as createEventStreamTransformer,Ds as createHfValueFunc,Js as createLRUCache,Ks as createYamlObjectTag,Ms as dateToText,Os as decodeCharset,Rs as defaultTemplateFormat,Us as detectCharset,Ws as encodeLLMTokens,Xs as ensureQuoted,Zs as event,$s as eventClient,_s as eventServer,sa as eventable,aa as expandConfig,ua as expandEnv,ia as expandObjEnv,ea as expandPath,ra as extNameLevel,ta as fileIsExists,na as filenameReservedRegex,da as filterValidFnScope,ma as findIndexNonEmptyFrom,ki as findPort,oa as formatISO,fa as formatTextWithSpace,pa as getAllEnumKeys,va as getConfigFileNames,Fa as getConfigs,ha as getEnvVairables,Ha as getFileMetaInfo,Va as getHashAlgoBySize,ka as getKeysPath,la as getLLMTokenizer,Ba as getMultiLevelExtname,Ga as getPackageDir,Ia as getRealFilepath,ca as getResponseErrorReadableStream,ja as getXDGConfigs,Ea as hasDirectoryIn,La as hash,Pa as hashFile,Sa as hashStream,mu as hfParse,si as hfTokenize,Ta as initShutdown,ga as interpolateEnv,xa as interpolateFString,ya as interpolateGolangTemplate,za as isLangUsingSpaces,Na as isListItemString,Qa as isModelNameMatched,Ya as isPunctuationChar,ba as isQuoted,qa as isRegExp,wa as isSameString,Aa as isSectionString,Ca as isSentenceEnding,Da as isSepLineString,Ja as isStrWrapped,Ka as isSubdirectory,Ma as isTitleString,Oa as isValidFilename,Ra as isValidFilepath,Ua as isWebStream,Wa as jsonFilterToWhere,Xa as jsonToMarkdownStr,Za as loadAIConfig,$a as loadConfig,_a as loadConfigFile,su as loadFileFromPaths,au as loadTextFromPaths,uu as lrucache,iu as makeToolFuncCancelable,eu as matchUrlProtocol,ru as memoize,tu as messagesToText,nu as mimeType,du as paramsSizeToScaleStr,fu as parseCommand,pu as parseDateFormat,vu as parseFString,Fu as parseISO,hu as parseJsJson,Hu as parseJsJsonSimpleSync,Vu as parseObjectArgInfo,ku as parseObjectArgumentInfos,lu as parseObjectArguments,Bu as parseObjectArgumentsAsArgInfos,Gu as parseYaml,Iu as quoteStr,cu as reControlCharsRegex,ju as readFilenamesRecursiveSync,Eu as readTextFileChunks,Lu as readTextFileChunksEx,Pu as readableFromAsyncIterable,Su as registerCoreTools,Tu as registerYamlTag,gu as removeMarkdownBold,xu as removeMarkdownBoldAndItalic,yu as removeMarkdownItalic,zu as replaceWithPlaceholder,Nu as restoreFromPlacehoders,Qu as sanitizeFilename,Yu as sanitizeFilepath,bu as saveConfigFile,qu as scaleStrToParamsSize,wu as shutdown,Au as simplifyObjectArguments,Cu as sortedValues,Du as splitChunks,Ju as splitParagraph,Ku as splitSentence,Ru as stringifyYaml,Uu as stripConsoleColor,Wu as textToDate,Xu as throwError,Zu as toDate,$u as toDateTime,_u as toRegExp,ai as trimStartOfStreamHelper,ui as truncTo,ii as truncateByToken,ei as truncateToTokenLimit,ri as truncateToTokenLimitEx,ti as uuid,J as uuidNIL,ou as uuidParse,Ou as uuidStringify,oi as uuidValidate,fi as uuidVersion,ni as uuidv1,di as uuidv4,mi as uuidv5,pi as wait,vi as wrapEventEmitter,Fi as xxhash,hi as xxhash32,Hi as xxhash64,Vi as xxhashAsStr};
|
|
1
|
+
import{AIArgProcessor as t,AIChatRoles as e,AIMessageTypes as r,AIStream as s,AITextGenerationFinishReasons as o,AbortError as n,AbortErrorCode as i,ActionNames as a,AlreadyExistsError as c,AlreadyExistsErrorCode as p,ArrayMergeWay as h,ArrayMergeWaySymbol as l,AsyncFeatureBits as u,AsyncFeatures as d,BaseError as f,BinarySemaphore as v,CancelableAbility as y,ChoiceArgProcessor as m,ClientToolFuncSchema as S,ClientTools as w,CommonError as T,ConfigFile as N,DEFAULT_CONFIG_NAME as E,DefaultAsyncSemaphoreCapacity as $,DefaultDateFormat as O,EnvStringTemplate as C,ErrorCode as J,EventBusName as g,EventClient as j,EventEmitter as R,EventName as P,EventServer as x,EventToolFunc as q,FStringTemplate as H,FewShotPromptTemplate as b,FilenameReservedRegex as G,FuncMetaSymbol as I,GolangStringTemplate as L,HashAlgorithm as D,IntSet as F,InternalErrorCode as M,LLM_TOKENIZER_NAMES as _,LLM_TOKENIZER_NAMES_MAP as k,LRUCache as A,NIL as B,NotFoundError as V,NotFoundErrorCode as Q,NotImplementationError as U,NotImplementedErrorCode as z,ObjectArgsToArgsInfo as K,PASSING_SCORE as W,PromptExampleSelector as X,RStreamErrCode as Y,RateLimit as Z,ReadableStreamError as tt,RemoteToolFuncSchema as et,ResClientTools as rt,ResServerTools as st,ResponseRStreamErrCode as ot,SHUTDOWN_SIGNALS as nt,SSEChannel as it,SSEChannelAlreadyClosedErrCode as at,SecondaryCache as ct,Semaphore as pt,ServerToolFuncSchema as ht,ServerTools as lt,SignalGate as ut,StrangeHumanName as dt,StringTemplate as ft,TaskAbortController as vt,TemplateArgProcessor as yt,ToolAsyncCancelableBit as mt,ToolAsyncMultiTaskBit as St,ToolAsyncPriorityBit as wt,ToolFunc as Tt,ToolFuncSchema as Nt,WindowsReservedNameRegex as Et,YamlTypeBaseObject as $t,_lrucache as Ot,add as Ct,assignDirs as Jt,backendEventable as gt,base32768 as jt,beforeShutdown as Rt,calcPerplexity as Pt,calcPerplexitySimple as xt,canonicalize as qt,completeSentences as Ht,concatText as bt,countLLMTokens as Gt,countRegexMatches as It,createAbilityInjector as Lt,createCallbacksTransformer as Dt,createEmptyReadableStream as Ft,createEndWithRepetitionDetector as Mt,createError as _t,createEventStreamTransformer as kt,createHfValueFunc as At,createLRUCache as Bt,createYamlObjectTag as Vt,dateToText as Qt,decodeCharset as Ut,defaultTemplateFormat as zt,defaultsWithConcat as Kt,detectCharset as Wt,encodeLLMTokens as Xt,ensureQuoted as Yt,event as Zt,eventClient as te,eventServer as ee,eventable as re,expandConfig as se,expandEnv as oe,expandObjEnv as ne,expandPath as ie,expandPathInObject as ae,expandPaths as ce,extNameLevel as pe,fileIsExists as he,filterValidFnScope as le,findIndexNonEmptyFrom as ue,formatISO as de,formatTextWithSpace as fe,funcGetMeta as ve,funcWithMeta as ye,genUrlParamsStr as me,getAllEnumKeys as Se,getConfigFileNames as we,getConfigs as Te,getEnvVairables as Ne,getFileMetaInfo as Ee,getHashAlgoBySize as $e,getKeysPath as Oe,getLLMTokenizer as Ce,getMultiLevelExtname as Je,getPackageDir as ge,getRealFilepath as je,getResponseErrorReadableStream as Re,getXDGConfigs as Pe,hasDirectoryIn as xe,hash as qe,hashFile as He,hashObject as be,hashStream as Ge,initShutdown as Ie,isLangUsingSpaces as Le,isListItemString as De,isModelNameMatched as Fe,isPunctuationChar as Me,isQuoted as _e,isRegExp as ke,isSameString as Ae,isSectionString as Be,isSentenceEnding as Ve,isSepLineString as Qe,isStrWrapped as Ue,isSubdirectory as ze,isTitleString as Ke,isValidFilename as We,isValidFilepath as Xe,isWebStream as Ye,joinSplitWords as Ze,jsonFilterToWhere as tr,jsonToMarkdownStr as er,loadAIConfig as rr,loadConfig as sr,loadConfigFile as or,loadFileFromPaths as nr,loadTextFromPaths as ir,lrucache as ar,makeToolFuncCancelable as cr,matchUrlProtocol as pr,memoize as hr,mergeArray as lr,messagesToText as ur,mimeType as dr,normalizePath as fr,paramsSizeToScaleStr as vr,parse as yr,parseCommand as mr,parseDateFormat as Sr,parseISO as wr,parseJsJson as Tr,parseJsJsonSimpleSync as Nr,parseObjectArgInfo as Er,parseObjectArgumentInfos as $r,parseObjectArguments as Or,parseObjectArgumentsAsArgInfos as Cr,parseYaml as Jr,pruneSubdirectories as gr,pruneSubdirectoriesInPlace as jr,quoteStr as Rr,readFilenamesRecursiveSync as Pr,readTextFileChunks as xr,readTextFileChunksEx as qr,readableFromAsyncIterable as Hr,registerCoreTools as br,registerYamlTag as Gr,removeMarkdownBold as Ir,removeMarkdownBoldAndItalic as Lr,removeMarkdownItalic as Dr,replaceWithPlaceholder as Fr,restoreFromPlacehoders as Mr,sanitizeFilename as _r,sanitizeFilepath as kr,saveConfigFile as Ar,scaleStrToParamsSize as Br,shutdown as Vr,simplifyObjectArguments as Qr,sleep as Ur,sortedValues as zr,splitChunks as Kr,splitParagraph as Wr,splitSentence as Xr,splitWords as Yr,states as Zr,stringify as ts,stringifyYaml as es,stripConsoleColor as rs,textToDate as ss,throwError as os,toDate as ns,toDateTime as is,toRegExp as as,trimStartOfStreamHelper as cs,truncTo as ps,truncateByToken as hs,truncateToTokenLimit as ls,truncateToTokenLimitEx as us,uuid as ds,v1 as fs,v4 as vs,v5 as ys,validate as ms,version as Ss,wait as ws,wrapEventEmitter as Ts,xxhash as Ns,xxhash32 as Es,xxhash64 as $s,xxhashAsStr as Os,yieldExec as Cs}from"./chunk-LNTIQQNN.mjs";import{findPort as Js}from"./chunk-VIG2GB47.mjs";var gs=class{setApiRoot(t){this.apiRoot=t}mount(t,e,r){if(e)this.setApiRoot(e);else if(!(e=this.apiRoot))throw new Error("apiRoot is required");return this.Tools=t,this.options=r,this._mount(t,e,r)}},js=class extends gs{constructor(t){if(!t)throw new Error("apiRoot is required for HttpClientTransport");super(),this.setApiRoot(t)}async _mount(t,e,r){return t.setTransport(this),t.loadFrom()}async loadApis(){return this.fetch("",void 0,"get",void 0,{headers:{"Content-Type":"application/json"}})}async fetch(t,e,r,s,o){o={...this.options,...o};const n=await this._fetch(t,e,r,s,o);if(e?.stream)return n;return await this.toObject(n,e)}};import{defaultsDeep as Rs}from"lodash-es";var Ps=class extends gs{_mount(t,e,r){this.addDiscoveryHandler(e,()=>t),this.addRpcHandler(t,e,r)}start(t){return this.options&&(t=Rs(t,this.options)),this._start(t)}};import xs from"http";import{URL as qs}from"url";import{defaultsDeep as Hs}from"lodash-es";var bs=class extends Ps{constructor(t){super(),this.discoveryHandlerInfo=null,this.rpcHandlerInfo=null,this.server=t?xs.createServer(t,this.requestListener.bind(this)):xs.createServer(this.requestListener.bind(this))}async requestListener(t,e){const{url:r,method:s}=t;if(!r)return e.statusCode=400,e.setHeader("Content-Type","application/json"),void e.end(JSON.stringify({error:"Bad Request"}));if(this.discoveryHandlerInfo&&"GET"===s&&r===this.discoveryHandlerInfo.prefix)try{const t=this.discoveryHandlerInfo.handler();e.setHeader("Content-Type","application/json"),e.statusCode=200,e.end(JSON.stringify(t)),console.log(`[HttpServerTransport] Handled GET ${r} for discovery`)}catch(t){e.statusCode=500,e.setHeader("Content-Type","application/json"),e.end(JSON.stringify({error:t.message||"Internal Server Error"}))}else this.rpcHandlerInfo&&r.startsWith(this.rpcHandlerInfo.prefix)?await this.handleRpcRequest(t,e):(e.statusCode=404,e.setHeader("Content-Type","application/json"),e.end(JSON.stringify({error:"Not Found"})))}addDiscoveryHandler(t,e){this.discoveryHandlerInfo={prefix:t,handler:e},console.log(`[HttpServerTransport] Mapped GET ${t} for discovery`)}addRpcHandler(t,e,r){e.endsWith("/")||(e+="/"),this.rpcHandlerInfo={prefix:e,serverTools:t,options:r},console.log(`[HttpServerTransport] Mapped RPC calls for prefix ${e}`)}async handleRpcRequest(t,e){if(!this.rpcHandlerInfo||!t.url)return e.statusCode=500,e.setHeader("Content-Type","application/json"),void e.end(JSON.stringify({error:"RPC handler not configured"}));const{serverTools:r,prefix:s}=this.rpcHandlerInfo,o=t.url.split("?")[0].substring(s.length),[n,i]=o.split("/"),a=r.get(n);if(!a)return e.statusCode=404,e.setHeader("Content-Type","application/json"),void e.end(JSON.stringify({error:`${n} Not Found`,data:{what:n}}));let c;const p=t.method;try{if("GET"===p||"DELETE"===p){const e=new qs(t.url,`http://${t.headers.host}`).searchParams.get("p");c=e?JSON.parse(e):{}}else{const e=await this.getRequestBody(t);c=e?JSON.parse(e):{}}c._req=t,c._res=e,void 0!==i&&(c.id=i);let r=await a.run(c);a.isStream(c)?r&&"function"==typeof r.pipe?r.pipe(e):e.writableEnded||e.end():(e.setHeader("Content-Type","application/json"),e.statusCode=200,e.end(JSON.stringify(r)))}catch(t){if(console.error("Error during RPC execution:",t),e.headersSent)return;e.setHeader("Content-Type","application/json"),t.code&&"number"==typeof t.code?(e.statusCode=t.code,t.stack&&(t.stack=void 0),e.end(JSON.stringify(t))):(e.statusCode=500,e.end(JSON.stringify({error:t.message||"Internal Server Error"})))}}getRequestBody(t){return new Promise((e,r)=>{let s="";t.on("data",t=>{s+=t.toString()}),t.on("end",()=>{e(s)}),t.on("error",t=>{r(t)})})}async _start(t){const{port:e,host:r="0.0.0.0"}=Hs(t,{port:3e3});return new Promise((t,s)=>{this.server.on("error",t=>{console.error("[HttpServerTransport] Server error:",t),s(t)}),this.server.listen(e,r,()=>{const e=this.server.address(),r="string"==typeof e?e:`${e?.address}:${e?.port}`;console.log(`[HttpServerTransport] Server listening on ${r}`),t()})})}async stop(){return new Promise((t,e)=>{if(!this.server.listening)return t();this.server.close(r=>{if(r)return e(r);t()})})}getRaw(){return this.server}},Gs=class extends js{async loadApis(){const t=await fetch(this.apiRoot,{headers:{"Content-Type":"application/json"}});if(!t.ok)throw new Error(`Failed to load tools from ${this.apiRoot}: ${t.statusText}`);return await t.json()}async _fetch(t,e,r,s,o){const n=["post","put","patch"];let i;r||(r=this.Tools.action||"post"),"res"===r&&(r="get"),o.headers&&o.headers["Content-Type"]||!n.includes(r)||(o.headers={"Content-Type":"application/json",...o.headers}),e?.stream&&!o.headers.Connection&&(o.headers.Connection="keep-alive"),s?("string"!=typeof s&&(s=JSON.stringify(s)),t&&(s=t+"/"+s)):s=t,o.method=r.toUpperCase(),"get"===r||"delete"===r?i=s+me(e):(o.body=JSON.stringify(e),i=s),o.headers&&!n.includes(r)&&delete o.headers["Content-Type"];const a=await fetch(`${this.apiRoot}/${i}`,o);if(!a.ok){throw await this.errorFrom(t,a)}return a}async errorFrom(t,e){let r,s=e.status,o=e.statusText;if(e.body){const s=await e.text();try{const e=JSON.parse(s);e&&(e.error&&(o=e.error),e.name&&(t=e.name),e.data&&(r=e.data,r.name=t,r.what&&(r.msg=o,o=r.what)),e.message&&(o=o+":"+e.message))}catch(t){console.warn("🚀 ~ parse error body to json:",t)}}return _t(o,t,s)}async toObject(t,e){return await t.json()}},Is=class{constructor(){this.name="sse",this.protocol="sse",this.channel=new it}mount(){}subscribe(t,e){const{req:r,res:s,clientId:o}=e??{};if(!r||!s)throw new Error("SSE subscribe requires options.req and options.res");const n=this.channel.subscribe(r,s,t,o),i={id:`${Date.now()}-${Math.random().toString(36).slice(2)}`,clientId:n.clientId,protocol:"sse",send:(t,e)=>{s.write(`event: ${t}\n`),s.write(`data: ${JSON.stringify(e)}\n\n`)},close:()=>s.end?.(),raw:s};return this.onConn?.(i),r.on("close",()=>this.onDis?.(i)),n}publish(t,e,r){this.channel.publish(e,t,r)}onConnection(t){this.onConn=t}onDisconnect(t){this.onDis=t}},Ls=class{connect(t,e){const r=e?`?${new URLSearchParams(e).toString()}`:"",s=new EventSource(`${t}${r}`),o=new Map,n=(t,e)=>{const r=r=>{const s=r.data,o=s?"string"==typeof s?JSON.parse(s):s:void 0;e(o,{...r,event:t})};let n=o.get(t);n||(n=new Map,o.set(t,n)),n.set(e,r),s.addEventListener(t,r)},i=(t,e)=>{const r=o.get(t),n=r?.get(e);n&&(s.removeEventListener(t,n),r.delete(e))};return{protocol:"sse",get readyState(){return s.readyState},on:n,off:i,addEventListener:n,removeEventListener:i,close:()=>s.close()}}disconnect(t){return t.close()}};export{t as AIArgProcessor,e as AIChatRoles,r as AIMessageTypes,s as AIStream,o as AITextGenerationFinishReasons,n as AbortError,i as AbortErrorCode,a as ActionNames,c as AlreadyExistsError,p as AlreadyExistsErrorCode,h as ArrayMergeWay,l as ArrayMergeWaySymbol,u as AsyncFeatureBits,d as AsyncFeatures,f as BaseError,v as BinarySemaphore,y as CancelableAbility,m as ChoiceArgProcessor,S as ClientToolFuncSchema,js as ClientToolTransport,w as ClientTools,T as CommonError,N as ConfigFile,E as DEFAULT_CONFIG_NAME,$ as DefaultAsyncSemaphoreCapacity,O as DefaultDateFormat,C as EnvPromptTemplate,J as ErrorCode,g as EventBusName,j as EventClient,R as EventEmitter,P as EventName,x as EventServer,Zr as EventStates,q as EventToolFunc,H as FStringPromptTemplate,b as FewShotPromptTemplate,G as FilenameReservedRegex,I as FuncMetaSymbol,L as GolangPromptTemplate,D as HashAlgorithm,Gs as HttpClientToolTransport,bs as HttpServerToolTransport,F as IntSet,M as InternalErrorCode,_ as LLM_TOKENIZER_NAMES,k as LLM_TOKENIZER_NAMES_MAP,A as LRUCache,V as NotFoundError,Q as NotFoundErrorCode,U as NotImplementationError,z as NotImplementedErrorCode,K as ObjectArgsToArgsInfo,W as PASSING_SCORE,X as PromptExampleSelector,ft as PromptTemplate,Y as RStreamErrCode,Z as RateLimit,tt as ReadableStreamError,et as RemoteToolFuncSchema,rt as ResClientTools,st as ResServerTools,ot as ResponseRStreamErrCode,nt as SHUTDOWN_SIGNALS,it as SSEChannel,at as SSEChannelAlreadyClosedErrCode,ct as SecondaryCache,pt as Semaphore,ht as ServerToolFuncSchema,Ps as ServerToolTransport,lt as ServerTools,ut as SignalGate,Ls as SseClientPubSubTransport,Is as SseServerPubSubTransport,dt as StrangeHumanName,vt as TaskAbortController,yt as TemplateArgProcessor,mt as ToolAsyncCancelableBit,St as ToolAsyncMultiTaskBit,wt as ToolAsyncPriorityBit,Tt as ToolFunc,Nt as ToolFuncSchema,gs as ToolTransport,Et as WindowsReservedNameRegex,$t as YamlTypeBaseObject,Ot as _lrucache,Ct as addDate,Jt as assignDirs,gt as backendEventable,jt as base32768,Rt as beforeShutdown,Pt as calcPerplexity,xt as calcPerplexitySimple,qt as canonicalize,Ht as completeSentences,bt as concatText,Gt as countLLMTokens,It as countRegexMatches,Lt as createAbilityInjector,Dt as createCallbacksTransformer,Ft as createEmptyReadableStream,Mt as createEndWithRepetitionDetector,_t as createError,kt as createEventStreamTransformer,At as createHfValueFunc,Bt as createLRUCache,Vt as createYamlObjectTag,Qt as dateToText,Ut as decodeCharset,zt as defaultTemplateFormat,Kt as defaultsWithConcat,Wt as detectCharset,Xt as encodeLLMTokens,Yt as ensureQuoted,Zt as event,te as eventClient,ee as eventServer,re as eventable,se as expandConfig,oe as expandEnv,ne as expandObjEnv,ie as expandPath,ae as expandPathInObject,ce as expandPaths,pe as extNameLevel,he as fileIsExists,le as filterValidFnScope,ue as findIndexNonEmptyFrom,Js as findPort,de as formatISO,fe as formatTextWithSpace,ve as funcGetMeta,ye as funcWithMeta,me as genUrlParamsStr,Se as getAllEnumKeys,we as getConfigFileNames,Te as getConfigs,Ne as getEnvVairables,Ee as getFileMetaInfo,$e as getHashAlgoBySize,Oe as getKeysPath,Ce as getLLMTokenizer,Je as getMultiLevelExtname,ge as getPackageDir,je as getRealFilepath,Re as getResponseErrorReadableStream,Pe as getXDGConfigs,xe as hasDirectoryIn,qe as hash,He as hashFile,be as hashObject,Ge as hashStream,Ie as initShutdown,Le as isLangUsingSpaces,De as isListItemString,Fe as isModelNameMatched,Me as isPunctuationChar,_e as isQuoted,ke as isRegExp,Ae as isSameString,Be as isSectionString,Ve as isSentenceEnding,Qe as isSepLineString,Ue as isStrWrapped,ze as isSubdirectory,Ke as isTitleString,We as isValidFilename,Xe as isValidFilepath,Ye as isWebStream,Ze as joinSplitWords,tr as jsonFilterToWhere,er as jsonToMarkdownStr,rr as loadAIConfig,sr as loadConfig,or as loadConfigFile,nr as loadFileFromPaths,ir as loadTextFromPaths,ar as lrucache,cr as makeToolFuncCancelable,pr as matchUrlProtocol,hr as memoize,lr as mergeArray,ur as messagesToText,dr as mimeType,fr as normalizePath,vr as paramsSizeToScaleStr,mr as parseCommand,Sr as parseDateFormat,wr as parseISO,Tr as parseJsJson,Nr as parseJsJsonSimpleSync,Er as parseObjectArgInfo,$r as parseObjectArgumentInfos,Or as parseObjectArguments,Cr as parseObjectArgumentsAsArgInfos,Jr as parseYaml,gr as pruneSubdirectories,jr as pruneSubdirectoriesInPlace,Rr as quoteStr,Pr as readFilenamesRecursiveSync,xr as readTextFileChunks,qr as readTextFileChunksEx,Hr as readableFromAsyncIterable,br as registerCoreTools,Gr as registerYamlTag,Ir as removeMarkdownBold,Lr as removeMarkdownBoldAndItalic,Dr as removeMarkdownItalic,Fr as replaceWithPlaceholder,Mr as restoreFromPlacehoders,_r as sanitizeFilename,kr as sanitizeFilepath,Ar as saveConfigFile,Br as scaleStrToParamsSize,Vr as shutdown,Qr as simplifyObjectArguments,Ur as sleep,zr as sortedValues,Kr as splitChunks,Wr as splitParagraph,Xr as splitSentence,Yr as splitWords,es as stringifyYaml,rs as stripConsoleColor,ss as textToDate,os as throwError,ns as toDate,is as toDateTime,as as toRegExp,cs as trimStartOfStreamHelper,ps as truncTo,hs as truncateByToken,ls as truncateToTokenLimit,us as truncateToTokenLimitEx,ds as uuid,B as uuidNIL,yr as uuidParse,ts as uuidStringify,ms as uuidValidate,Ss as uuidVersion,fs as uuidv1,vs as uuidv4,ys as uuidv5,ws as wait,Ts as wrapEventEmitter,Ns as xxhash,Es as xxhash32,$s as xxhash64,Os as xxhashAsStr,Cs as yieldExec};
|
package/dist/test/util.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e,r=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,u=Object.getOwnPropertyNames,o=Object.getPrototypeOf,c=Object.prototype.hasOwnProperty,i=(e,r,o,i)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let f of u(r))c.call(e,f)||f===o||t(e,f,{get:()=>r[f],enumerable:!(i=n(r,f))||i.enumerable});return e},f={};function a(e,r){expect(e.length).toBeGreaterThanOrEqual(r.length);for(let t=0;t<r.length;t++)if(e[t]!==r[t])return!1;return!0}((e,r)=>{for(var n in r)t(e,n,{get:r[n],enumerable:!0})})(f,{compareStr:()=>a,findPort:()=>s,rmFile:()=>m}),module.exports=(e=f,i(t({},"__esModule",{value:!0}),e));var l=((e,n,u)=>(u=null!=e?r(o(e)):{},i(!n&&e&&e.__esModule?u:t(u,"default",{value:e,enumerable:!0}),e)))(require("net"));async function s(e,r=10){return new Promise((
|
|
1
|
+
"use strict";var e,r=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,u=Object.getOwnPropertyNames,o=Object.getPrototypeOf,c=Object.prototype.hasOwnProperty,i=(e,r,o,i)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let f of u(r))c.call(e,f)||f===o||t(e,f,{get:()=>r[f],enumerable:!(i=n(r,f))||i.enumerable});return e},f={};function a(e,r){expect(e.length).toBeGreaterThanOrEqual(r.length);for(let t=0;t<r.length;t++)if(e[t]!==r[t])return!1;return!0}((e,r)=>{for(var n in r)t(e,n,{get:r[n],enumerable:!0})})(f,{compareStr:()=>a,findPort:()=>s,rmFile:()=>m}),module.exports=(e=f,i(t({},"__esModule",{value:!0}),e));var l=((e,n,u)=>(u=null!=e?r(o(e)):{},i(!n&&e&&e.__esModule?u:t(u,"default",{value:e,enumerable:!0}),e)))(require("net"));async function s(e,r=10){return new Promise((t,n)=>{void 0===e?e=0:("string"==typeof e&&(e=parseInt(e)),e>=0||(e=0));const u=l.default.createServer();u.on("error",t=>{"EADDRINUSE"===t.code&&(e++,--r>0)?u.listen(e):n(t)}),u.on("listening",async()=>{const e=u.address().port;u.close(),t(e)}),u.listen(e)})}var b=require("fs");function m(e){(0,b.existsSync)(e)&&(0,b.rmSync)(e,{recursive:!0}),(0,b.existsSync)(e+".temp")&&(0,b.rmSync)(e+".temp",{recursive:!0})}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
**@isdk/ai-tool**
|
|
2
|
+
|
|
3
|
+
***
|
|
4
|
+
|
|
5
|
+
# @isdk/ai-tool
|
|
6
|
+
|
|
7
|
+
A powerful TypeScript framework for creating, managing, and communicating with modular functions. It's perfect for building AI agent tools, backend services, and extensible plugin systems with a clean, decoupled architecture.
|
|
8
|
+
|
|
9
|
+
## Core Features
|
|
10
|
+
|
|
11
|
+
- **Modular & Inheritable Tools:** Define functions in a structured way with a clear class hierarchy (`ToolFunc` -> `ServerTools` -> `ResServerTools`).
|
|
12
|
+
- **Pluggable RPC Transport:** Decouple your business logic from the network layer. Communicate between client and server using HTTP, IPC, or any custom protocol.
|
|
13
|
+
- **Pluggable PubSub Transport:** Create real-time, bidirectional event buses for features like notifications and live updates. Implementations for SSE (Server-Sent Events) and Electron IPC are included.
|
|
14
|
+
- **Global Registry:** Easily access any registered function from anywhere in your application.
|
|
15
|
+
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install @isdk/ai-tool
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Core Architecture: Tool Inheritance
|
|
23
|
+
|
|
24
|
+
`@isdk/ai-tool` is built on a foundation of extensible classes. Understanding their hierarchy and design is key to using the library effectively.
|
|
25
|
+
|
|
26
|
+
### Design Philosophy: Static vs. Instance
|
|
27
|
+
|
|
28
|
+
A key design principle in `ToolFunc` is the separation of roles between the static class and its instances:
|
|
29
|
+
|
|
30
|
+
- **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.
|
|
31
|
+
|
|
32
|
+
- **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.
|
|
33
|
+
|
|
34
|
+
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.
|
|
35
|
+
|
|
36
|
+
### Tool Inheritance Hierarchy
|
|
37
|
+
|
|
38
|
+
The library follows a clear inheritance path, adding specialized features at each level. For a detailed breakdown of each type and how they separate business logic from communication, see the [**Guide to Server & Client Tools**](_media/server_client_tools.md).
|
|
39
|
+
|
|
40
|
+
**Server-Side Inheritance:**
|
|
41
|
+
`ToolFunc` -> `ServerTools` -> `RpcMethodsServerTool` -> `ResServerTools`
|
|
42
|
+
|
|
43
|
+
- **`ToolFunc`**: The base for any function, containing core logic and metadata. For more details, see the [ToolFunc Guide](_media/toolFunc.md).
|
|
44
|
+
- **`ServerTools`**: Extends `ToolFunc` to be discoverable and callable by remote clients.
|
|
45
|
+
- **`RpcMethodsServerTool`**: Extends `ServerTools` to allow a single tool to expose multiple methods (e.g., a `Math` tool with `add` and `subtract` methods).
|
|
46
|
+
- **`ResServerTools`**: Extends `RpcMethodsServerTool` to automatically provide a resource-oriented (CRUD) interface.
|
|
47
|
+
|
|
48
|
+
**Client-Side Inheritance:**
|
|
49
|
+
A parallel hierarchy exists for the client, designed to seamlessly call the server-side tools.
|
|
50
|
+
`ToolFunc` -> `ClientTools` -> `RpcMethodsClientTool` -> `ResClientTools`
|
|
51
|
+
|
|
52
|
+
## Client-Server RPC with Transports
|
|
53
|
+
|
|
54
|
+
The framework shines in a client-server setup, allowing you to call backend functions as if they were local.
|
|
55
|
+
|
|
56
|
+
### Server-Side Example
|
|
57
|
+
|
|
58
|
+
Use `ServerTools` to define a backend function and `FastifyServerToolTransport` to expose it over HTTP.
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
// server.ts
|
|
62
|
+
import { ServerTools, FastifyServerToolTransport } from '@isdk/ai-tool';
|
|
63
|
+
|
|
64
|
+
// Define a tool that can be called remotely
|
|
65
|
+
ServerTools.register({
|
|
66
|
+
name: 'getUserProfile',
|
|
67
|
+
params: { id: { type: 'string' } },
|
|
68
|
+
func: async ({ id }: { id: string }) => {
|
|
69
|
+
return { id, name: 'Jane Doe', email: 'jane.doe@example.com' };
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
// Create a transport and mount the tools under the '/api' prefix
|
|
74
|
+
const serverTransport = new FastifyServerToolTransport();
|
|
75
|
+
serverTransport.mount(ServerTools, '/api');
|
|
76
|
+
|
|
77
|
+
// Start the server
|
|
78
|
+
serverTransport.start({ port: 3000 });
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Client-Side Example
|
|
82
|
+
|
|
83
|
+
The `mount` method handles both setting the transport and loading tool definitions from the server in one step.
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
// client.ts
|
|
87
|
+
import { ClientTools, HttpClientToolTransport } from '@isdk/ai-tool';
|
|
88
|
+
|
|
89
|
+
async function main() {
|
|
90
|
+
const apiRoot = 'http://localhost:3000/api';
|
|
91
|
+
|
|
92
|
+
// 1. Setup the client transport and mount the tools
|
|
93
|
+
const clientTransport = new HttpClientToolTransport(apiRoot);
|
|
94
|
+
await clientTransport.mount(ClientTools);
|
|
95
|
+
|
|
96
|
+
// 2. Get the remote tool and run it
|
|
97
|
+
const getUserProfile = ClientTools.get('getUserProfile');
|
|
98
|
+
const profile = await getUserProfile.run({ id: '123' });
|
|
99
|
+
|
|
100
|
+
console.log(profile);
|
|
101
|
+
}
|
|
102
|
+
main();
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
> For a deeper dive into how transports work, see the [Transport Layer Guide](_media/transport.md).
|
|
106
|
+
|
|
107
|
+
## Real-Time Events with PubSub
|
|
108
|
+
|
|
109
|
+
`@isdk/ai-tool` includes a powerful event system for real-time communication, built on a pluggable PubSub transport layer.
|
|
110
|
+
|
|
111
|
+
### Quick Example: SSE (Server-Sent Events)
|
|
112
|
+
|
|
113
|
+
**Server-Side:**
|
|
114
|
+
```typescript
|
|
115
|
+
// server.ts (additions)
|
|
116
|
+
import { EventServer, SseServerPubSubTransport, eventServer } from '@isdk/ai-tool';
|
|
117
|
+
|
|
118
|
+
// Set the PubSub transport for the EventServer
|
|
119
|
+
EventServer.setPubSubTransport(new SseServerPubSubTransport());
|
|
120
|
+
eventServer.register(); // Register the default event tool
|
|
121
|
+
|
|
122
|
+
// Now you can publish events from anywhere in your backend
|
|
123
|
+
setInterval(() => {
|
|
124
|
+
EventServer.publish('server-time', { time: new Date().toISOString() });
|
|
125
|
+
}, 2000);
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
**Client-Side:**
|
|
129
|
+
```typescript
|
|
130
|
+
// client.ts (additions)
|
|
131
|
+
import { EventClient, SseClientPubSubTransport, eventClient, backendEventable } from '@isdk/ai-tool';
|
|
132
|
+
|
|
133
|
+
// Set the PubSub transport for the EventClient
|
|
134
|
+
EventClient.setPubSubTransport(new SseClientPubSubTransport());
|
|
135
|
+
|
|
136
|
+
// Make the client event-aware and register it
|
|
137
|
+
backendEventable(EventClient);
|
|
138
|
+
eventClient.setApiRoot('http://localhost:3000/api'); // Your API root
|
|
139
|
+
eventClient.register();
|
|
140
|
+
|
|
141
|
+
// Subscribe to and listen for server events
|
|
142
|
+
await eventClient.subscribe('server-time');
|
|
143
|
+
eventClient.on('server-time', (data) => {
|
|
144
|
+
console.log('Live time from server:', data.time);
|
|
145
|
+
});
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
> For more detailed examples, including the Electron IPC transport, see the [**Real-time Events (PubSub) Guide**](_media/pubsub.md).
|
|
149
|
+
|
|
150
|
+
## Contribution
|
|
151
|
+
|
|
152
|
+
If you would like to contribute to the project, please read the [CONTRIBUTING.md](_media/CONTRIBUTING.md) file for guidelines on how to get started.
|
|
153
|
+
|
|
154
|
+
## License
|
|
155
|
+
|
|
156
|
+
The project is licensed under the MIT License. See the [LICENSE-MIT](_media/LICENSE-MIT) file for more details.
|
|
157
|
+
|
|
158
|
+
## Credit
|
|
159
|
+
|
|
160
|
+
This project is inspired by and uses code from several excellent open-source projects:
|
|
161
|
+
|
|
162
|
+
* [@huggingface/jinja](https://github.com/huggingface/huggingface.js)
|
|
163
|
+
* [eventsource-parser](https://github.com/rexxars/eventsource-parser)
|
|
164
|
+
* [async-sema](https://github.com/vercel/async-sema)
|
|
165
|
+
* [modelfusion](https://github.com/vercel/modelfusion)
|
|
@@ -5,7 +5,7 @@ Please feel free to file GitHub Issues or propose Pull Requests. We're always ha
|
|
|
5
5
|
## Testing
|
|
6
6
|
|
|
7
7
|
```shell
|
|
8
|
-
|
|
8
|
+
pnpm test
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
## Releasing
|
|
@@ -13,6 +13,6 @@ npm test
|
|
|
13
13
|
Releases are supposed to be done from master, version bumping is automated through [`standard-version`](https://github.com/absolute-version/commit-and-tag-version):
|
|
14
14
|
|
|
15
15
|
```shell
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
pnpm run release -- --dry-run # verify output manually
|
|
17
|
+
pnpm run release # follow the instructions from the output of this command
|
|
18
18
|
```
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
# Developer's Guide: Real-time Events with EventServer & EventClient
|
|
2
|
+
|
|
3
|
+
This guide provides a comprehensive overview of the `EventServer` and `EventClient` tools, a powerful system for real-time, bidirectional communication. It is built on a **pluggable PubSub transport layer**, making it independent of the underlying communication protocol. You can use Server-Sent Events (SSE), WebSockets, IPC, or any other protocol by providing a corresponding transport implementation.
|
|
4
|
+
|
|
5
|
+
**Prerequisite:** This document assumes you understand the base transport layer. If not, please review the [`transport_readme.md`](./transport_readme.md) first.
|
|
6
|
+
|
|
7
|
+
## Core Concept: The Unified Event Bus
|
|
8
|
+
|
|
9
|
+
The primary goal of this system is to create a seamless event bus that spans both the server and the client. It uses an abstract, pluggable PubSub transport for server-to-client messages and standard RPC calls for client-to-server messages.
|
|
10
|
+
|
|
11
|
+
The key feature is the ability to **"forward"** events. You can configure the server to automatically listen for events on its internal, global `eventBus` and relay them to clients. Likewise, you can configure the client to forward its local events to the server. This creates a powerful, decoupled architecture where different parts of your application can communicate without direct dependencies.
|
|
12
|
+
|
|
13
|
+
### Aspect-Oriented Programming (AoP) and Event Emitters
|
|
14
|
+
|
|
15
|
+
A crucial concept is that `EventClient` (and `ClientTools` in general) can be enhanced with event emitter capabilities. By using a library like `events-ex`, you can give your client-side tool instances standard `on`, `off`, and `emit` methods. This allows `EventClient` to act as a local event bus that is transparently synchronized with the server.
|
|
16
|
+
|
|
17
|
+
## Example 1: HTTP and Server-Sent Events (SSE)
|
|
18
|
+
|
|
19
|
+
### Architecture (SSE)
|
|
20
|
+
|
|
21
|
+
The following diagram illustrates how the components interact when using the provided SSE-based transport. Other transports (like WebSockets or IPC) would follow a similar pattern.
|
|
22
|
+
|
|
23
|
+
```mermaid
|
|
24
|
+
graph TD
|
|
25
|
+
subgraph Client-Side
|
|
26
|
+
C_App[Client Application]
|
|
27
|
+
C_EventBus(Local Event Emitter)
|
|
28
|
+
EC[EventClient] -- "uses" --> C_PubSub[SseClientPubSubTransport]
|
|
29
|
+
C_Transport[HttpClientToolTransport]
|
|
30
|
+
|
|
31
|
+
C_App -- "emit/on" --> C_EventBus
|
|
32
|
+
EC -- "decorated with" --> C_EventBus
|
|
33
|
+
C_PubSub -- "HTTP GET (SSE)" --> S_PubSub
|
|
34
|
+
EC -- "RPC calls" --> C_Transport
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
subgraph Server-Side
|
|
38
|
+
S_Transport[FastifyServerToolTransport] -- "receives RPC" --> ES[EventServer]
|
|
39
|
+
ES -- "uses" --> S_PubSub[SseServerPubSubTransport]
|
|
40
|
+
S_PubSub -- "handles SSE connections" --> ES
|
|
41
|
+
ES -- "interacts with" --> S_EventBus[Global Server EventBus]
|
|
42
|
+
OtherServices[Other Server Logic] -- "emit/on" --> S_EventBus
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
subgraph "Network (HTTP)"
|
|
46
|
+
C_Transport -- "RPC: POST /api/event" --> S_Transport
|
|
47
|
+
end
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Server-Side Setup (SSE)
|
|
51
|
+
|
|
52
|
+
In your server setup, you must first tell `EventServer` which transport to use, then register the `eventServer` instance.
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
// In your server entry file (e.g., server.ts)
|
|
56
|
+
import {
|
|
57
|
+
eventServer,
|
|
58
|
+
FastifyServerToolTransport,
|
|
59
|
+
ResServerTools,
|
|
60
|
+
EventServer, // Import EventServer class
|
|
61
|
+
SseServerPubSubTransport // Import the SSE transport
|
|
62
|
+
} from '@isdk/ai-tool';
|
|
63
|
+
|
|
64
|
+
async function main() {
|
|
65
|
+
// **Crucial Step: Set the PubSub transport for the server**
|
|
66
|
+
EventServer.setPubSubTransport(new SseServerPubSubTransport());
|
|
67
|
+
|
|
68
|
+
// Register the eventServer tool instance
|
|
69
|
+
eventServer.register();
|
|
70
|
+
|
|
71
|
+
const serverTransport = new FastifyServerToolTransport();
|
|
72
|
+
// Mount the base class; the transport finds all registered tools
|
|
73
|
+
serverTransport.mount(ResServerTools, '/api');
|
|
74
|
+
|
|
75
|
+
// ... start server
|
|
76
|
+
await serverTransport.start({port: 3000})
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Client-Side Setup (SSE)
|
|
81
|
+
|
|
82
|
+
On the client, you must set the appropriate PubSub transport (matching the server's), enhance the `EventClient` with `EventEmitter` capabilities, and register the instance.
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
// In your client-side code
|
|
86
|
+
import {
|
|
87
|
+
backendEventable,
|
|
88
|
+
EventClient,
|
|
89
|
+
eventClient,
|
|
90
|
+
HttpClientToolTransport,
|
|
91
|
+
ResClientTools,
|
|
92
|
+
SseClientPubSubTransport // Import the SSE transport
|
|
93
|
+
} from '@isdk/ai-tool';
|
|
94
|
+
|
|
95
|
+
async function main() {
|
|
96
|
+
const apiRoot = 'http://localhost:3003/api';
|
|
97
|
+
const clientTransport = new HttpClientToolTransport(apiRoot);
|
|
98
|
+
await clientTransport.mount(ResClientTools);
|
|
99
|
+
|
|
100
|
+
// **Crucial Step 1: Set the PubSub transport for the client**
|
|
101
|
+
EventClient.setPubSubTransport(new SseClientPubSubTransport());
|
|
102
|
+
|
|
103
|
+
// **Crucial Step 2: Make the client eventable**
|
|
104
|
+
backendEventable(EventClient);
|
|
105
|
+
eventClient.register();
|
|
106
|
+
|
|
107
|
+
// Now you can use eventClient.on, .off, .emit
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Example 2: Electron IPC Transport
|
|
114
|
+
|
|
115
|
+
This transport uses Electron's Inter-Process Communication (IPC) to create an event bus between the main process (server) and renderer processes (clients).
|
|
116
|
+
|
|
117
|
+
### Server-Side Setup (Electron Main Process)
|
|
118
|
+
|
|
119
|
+
In your Electron main process, you instantiate an `ElectronServerPubSubTransport` with a unique namespace. This namespace acts like an `apiRoot` and ensures that different event buses don't conflict.
|
|
120
|
+
|
|
121
|
+
```typescript
|
|
122
|
+
// In your Electron main process (e.g., main.ts)
|
|
123
|
+
import {
|
|
124
|
+
EventServer,
|
|
125
|
+
eventServer,
|
|
126
|
+
ElectronServerPubSubTransport,
|
|
127
|
+
} from '@isdk/ai-tool';
|
|
128
|
+
|
|
129
|
+
// 1. Define a unique namespace for this event bus
|
|
130
|
+
const electronApiRoot = '/electron/events';
|
|
131
|
+
|
|
132
|
+
// 2. Create a transport instance for this specific namespace
|
|
133
|
+
const electronTransport = new ElectronServerPubSubTransport(electronApiRoot);
|
|
134
|
+
|
|
135
|
+
// 3. Set the transport on the EventServer
|
|
136
|
+
// Note: This is a static property. For multiple, different event servers
|
|
137
|
+
// (e.g., one for SSE, one for Electron), you would create subclasses of EventServer
|
|
138
|
+
// to hold each static transport instance separately.
|
|
139
|
+
EventServer.setPubSubTransport(electronTransport);
|
|
140
|
+
|
|
141
|
+
// 4. Register the eventServer tool instance. It will now use the Electron transport.
|
|
142
|
+
eventServer.register();
|
|
143
|
+
|
|
144
|
+
// Now you can use the global eventBus to emit events, and the EventServer
|
|
145
|
+
// will forward them to any connected renderer process.
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Client-Side Setup (Electron Renderer Process)
|
|
149
|
+
|
|
150
|
+
In the renderer process, you must use the same namespace (`apiRoot`) to connect to the correct event bus in the main process.
|
|
151
|
+
|
|
152
|
+
**Important:** The `EventClient` still relies on an RPC mechanism for actions like `subscribe` and `unsubscribe`. You must have a corresponding RPC transport set up between the renderer and main process for the full functionality to work. The example below focuses only on setting up the PubSub portion.
|
|
153
|
+
|
|
154
|
+
```typescript
|
|
155
|
+
// In your Electron renderer process (e.g., preload.ts or renderer.ts)
|
|
156
|
+
import {
|
|
157
|
+
EventClient,
|
|
158
|
+
eventClient,
|
|
159
|
+
ElectronClientPubSubTransport,
|
|
160
|
+
backendEventable,
|
|
161
|
+
} from '@isdk/ai-tool';
|
|
162
|
+
|
|
163
|
+
// 1. The apiRoot MUST match the namespace used in the main process
|
|
164
|
+
const electronApiRoot = '/electron/events';
|
|
165
|
+
|
|
166
|
+
// 2. Set the PubSub transport on the EventClient class
|
|
167
|
+
EventClient.setPubSubTransport(new ElectronClientPubSubTransport());
|
|
168
|
+
|
|
169
|
+
// 3. Make the EventClient class event-aware
|
|
170
|
+
backendEventable(EventClient);
|
|
171
|
+
|
|
172
|
+
// 4. Configure the eventClient INSTANCE
|
|
173
|
+
// This tells the client which event bus to connect to.
|
|
174
|
+
eventClient.setApiRoot(electronApiRoot);
|
|
175
|
+
eventClient.register();
|
|
176
|
+
|
|
177
|
+
// 5. Now you can use the event client
|
|
178
|
+
async function setupEvents() {
|
|
179
|
+
await eventClient.subscribe('some-event-from-main');
|
|
180
|
+
|
|
181
|
+
eventClient.on('some-event-from-main', (data) => {
|
|
182
|
+
console.log('Received event from main process:', data);
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
// Forward a local event to the main process
|
|
186
|
+
eventClient.forwardEvent('event-from-renderer');
|
|
187
|
+
eventClient.emit('event-from-renderer', { my: 'data' });
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
setupEvents();
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## General Usage (Transport-Agnostic)
|
|
196
|
+
|
|
197
|
+
Once the setup is complete, the API for using the event bus is the same regardless of the underlying transport.
|
|
198
|
+
|
|
199
|
+
### Forwarding and Publishing Events (Server-Side)
|
|
200
|
+
|
|
201
|
+
The server can push events to clients either by forwarding them from a central event bus or by publishing them directly. With the latest updates, the `publish` method now supports targeted delivery to specific clients, in addition to broadcasting.
|
|
202
|
+
|
|
203
|
+
**Note:** The availability of targeted publishing depends on the underlying transport implementation. While the `EventServer` API supports it, some transports (like the current SSE transport) may only be capable of broadcasting.
|
|
204
|
+
|
|
205
|
+
```typescript
|
|
206
|
+
import { eventServer, EventServer } from '@isdk/ai-tool';
|
|
207
|
+
import { event } from '@isdk/ai-tool/funcs/event'; // The global eventBus
|
|
208
|
+
|
|
209
|
+
const eventBus = event.runSync();
|
|
210
|
+
|
|
211
|
+
// **Forwarding (Recommended)**
|
|
212
|
+
// Automatically relay events from the global eventBus to subscribed clients.
|
|
213
|
+
eventServer.forward(['user-updated', 'item-added']);
|
|
214
|
+
|
|
215
|
+
// Now, any other part of your server can simply emit events on the bus:
|
|
216
|
+
function updateUser(user: any) {
|
|
217
|
+
eventBus.emit('user-updated', { userId: user.id, status: 'active' });
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// **Direct Publishing**
|
|
221
|
+
// The `EventServer.publish` method allows sending an event directly to clients.
|
|
222
|
+
// Its signature is: `publish(event: string, data: any, target?: { clientId: string | string[] })`.
|
|
223
|
+
|
|
224
|
+
// 1. Broadcast to all clients subscribed to 'broadcast-message'.
|
|
225
|
+
// This is the default behavior when `target` is omitted.
|
|
226
|
+
function sendBroadcast() {
|
|
227
|
+
EventServer.publish('broadcast-message', { message: 'Server is restarting soon!' });
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// 2. Send a targeted event to a specific client.
|
|
231
|
+
// This requires knowing the `clientId` of the recipient.
|
|
232
|
+
function sendDirectMessage(clientId: string, message: string) {
|
|
233
|
+
const target = { clientId };
|
|
234
|
+
EventServer.publish('private-message', { text: message }, target);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// 3. Send an event to a group of specific clients.
|
|
238
|
+
function sendToGroup(clientIds: string[], message: string) {
|
|
239
|
+
const target = { clientId: clientIds };
|
|
240
|
+
EventServer.publish('group-message', { text: message }, target);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// **Receiving Client Events**
|
|
244
|
+
// Listen for events that were published or forwarded from a client.
|
|
245
|
+
eventBus.on('client-action', (data: any, event: any) => {
|
|
246
|
+
console.log(`Received event "$\{event.type\}" from a client:`, data);
|
|
247
|
+
});
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### Subscribing, Listening, and Publishing (Client-Side)
|
|
251
|
+
|
|
252
|
+
```typescript
|
|
253
|
+
// **Subscribe and Listen**
|
|
254
|
+
await eventClient.subscribe(['user-updated', 'broadcast-message']);
|
|
255
|
+
|
|
256
|
+
eventClient.on('user-updated', (data: any) => {
|
|
257
|
+
console.log('User updated on server!', data);
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
// **Publish an Event to the Server**
|
|
261
|
+
eventClient.publish({
|
|
262
|
+
event: 'client-action',
|
|
263
|
+
data: { action: 'button-click', value: 123 }
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
// **Forwarding Client Events (Recommended)**
|
|
267
|
+
eventClient.forwardEvent(['user-settings-changed']);
|
|
268
|
+
|
|
269
|
+
function onSettingsSave(newSettings: any) {
|
|
270
|
+
eventClient.emit('user-settings-changed', newSettings);
|
|
271
|
+
}
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
This transport-agnostic architecture provides a clean, powerful, and decoupled way to build real-time, interactive applications. By separating the event logic from the communication protocol, you can choose the best transport for your needs while maintaining a consistent, unified event model.
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## Implementing a Custom PubSub Transport
|
|
279
|
+
|
|
280
|
+
For developers who need to integrate a different messaging protocol (e.g., WebSockets, MQTT), you can create your own transport by implementing the `IPubSubServerTransport` interface from `@isdk/ai-tool/transports/pubsub/server`.
|
|
281
|
+
|
|
282
|
+
The core interface is defined as follows:
|
|
283
|
+
|
|
284
|
+
```typescript
|
|
285
|
+
export interface IPubSubServerTransport {
|
|
286
|
+
readonly name: string;
|
|
287
|
+
readonly protocol: string;
|
|
288
|
+
|
|
289
|
+
// Optional: For transports that need to hook into an HTTP server
|
|
290
|
+
mount?: (path: string, options?: Record<string, any>) => void;
|
|
291
|
+
|
|
292
|
+
// Establish a connection with a client and subscribe them to events.
|
|
293
|
+
// The `options` object is a generic container for transport-specific
|
|
294
|
+
// parameters, like HTTP request/response objects for SSE.
|
|
295
|
+
subscribe: (
|
|
296
|
+
events?: string[],
|
|
297
|
+
options?: {
|
|
298
|
+
req?: any;
|
|
299
|
+
res?: any;
|
|
300
|
+
clientId?: string;
|
|
301
|
+
[k: string]: any;
|
|
302
|
+
}
|
|
303
|
+
) => PubSubClient; // Return a client object, minimally with a `clientId`.
|
|
304
|
+
|
|
305
|
+
// Publish an event from the server to clients.
|
|
306
|
+
// The `target` parameter allows for broadcasting (default) or
|
|
307
|
+
// targeted delivery to specific client IDs.
|
|
308
|
+
publish: (
|
|
309
|
+
event: string,
|
|
310
|
+
data: any,
|
|
311
|
+
target?: { clientId?: string | string[] }
|
|
312
|
+
) => void;
|
|
313
|
+
|
|
314
|
+
// Lifecycle hooks to let the EventServer know about connections.
|
|
315
|
+
onConnection: (cb: (session: PubSubServerSession) => void) => void;
|
|
316
|
+
onDisconnect: (cb: (session: PubSubServerSession) => void) => void;
|
|
317
|
+
|
|
318
|
+
// Optional: For bidirectional transports (e.g., WebSockets)
|
|
319
|
+
// to handle messages received from the client.
|
|
320
|
+
onMessage?: (
|
|
321
|
+
cb: (session: PubSubServerSession, event: string, data: any) => void
|
|
322
|
+
) => void;
|
|
323
|
+
}
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
By implementing this interface, your custom transport can be plugged directly into the `EventServer` using `EventServer.setPubSubTransport(new YourCustomTransport())`, enabling the entire real-time event system over your chosen protocol.
|