@xano/xanoscript-language-server 11.12.1 → 11.12.3
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/lexer/tokens.js +22 -3
- package/package.json +25 -1
- package/.claude/memory/feedback_no_git.md +0 -11
- package/.claude/settings.local.json +0 -21
- package/.github/copilot-instructions.md +0 -190
- package/.github/workflows/ci.yml +0 -31
- package/.husky/pre-commit +0 -1
- package/CLAUDE.md +0 -256
- package/eslint.config.js +0 -24
- package/lexer/comment.spec.js +0 -77
- package/lexer/multiline.spec.js +0 -179
- package/lexer/tests/query/query_lexer.spec.js +0 -36
- package/lexer/tests/query/valid_sources/basic_query.xs +0 -44
- package/lexer/tests/query/valid_sources/db_query.xs +0 -77
- package/lexer/tests/query/valid_sources/empty_query.xs +0 -5
- package/lexer/tests/query/valid_sources/header_query.xs +0 -15
- package/lexer/tests/table/basic_table.xs +0 -17
- package/lexer/tests/table/empty_table.xs +0 -3
- package/lexer/tests/table/table_lexer.spec.js +0 -324
- package/lexer/utils.spec.js +0 -61
- package/onCompletion/contentAssist.spec.js +0 -275
- package/onDefinition/onDefinition.spec.js +0 -313
- package/onHover/FilterMessageProvider.spec.js +0 -85
- package/onHover/FunctionMessageProvider.spec.js +0 -128
- package/onHover/InputFilterMessageProvider.spec.js +0 -329
- package/onHover/QueryFilterMessageProvider.spec.js +0 -164
- package/onHover/onHoverDocument.spec.js +0 -660
- package/parser/addon_parser.spec.js +0 -88
- package/parser/agent_parser.spec.js +0 -599
- package/parser/agent_trigger_parser.spec.js +0 -525
- package/parser/api_group_parser.spec.js +0 -137
- package/parser/attributes/columnDefaultValueAttribute.spec.js +0 -49
- package/parser/attributes/descriptionFieldAttribute.spec.js +0 -39
- package/parser/attributes/disabledFieldAttribute.spec.js +0 -34
- package/parser/attributes/docsFieldAttribute.spec.js +0 -44
- package/parser/attributes/guidFieldAttribute.spec.js +0 -93
- package/parser/attributes/inputFilterFn.spec.js +0 -39
- package/parser/attributes/sensitiveFieldAttribute.spec.js +0 -39
- package/parser/attributes/valueFieldAttribute.spec.js +0 -54
- package/parser/attributes/valuesFieldAttribute.spec.js +0 -44
- package/parser/attributes/visibilityFieldAttribute.spec.js +0 -44
- package/parser/branch_parser.spec.js +0 -34
- package/parser/clauses/agentClause.spec.js +0 -34
- package/parser/clauses/authClause.spec.js +0 -39
- package/parser/clauses/cacheClause.spec.js +0 -103
- package/parser/clauses/canonicalClause.spec.js +0 -34
- package/parser/clauses/channelClause.spec.js +0 -34
- package/parser/clauses/dbTableClause.spec.js +0 -34
- package/parser/clauses/historyClause.spec.js +0 -53
- package/parser/clauses/indexClause.spec.js +0 -47
- package/parser/clauses/inputClause.spec.js +0 -96
- package/parser/clauses/mcpServerClause.spec.js +0 -34
- package/parser/clauses/middlewareClause.spec.js +0 -161
- package/parser/clauses/nakedStackFn.spec.js +0 -73
- package/parser/clauses/responseClause.spec.js +0 -47
- package/parser/clauses/scheduleClause.spec.js +0 -71
- package/parser/clauses/schemaClause.spec.js +0 -102
- package/parser/clauses/testClause.spec.js +0 -69
- package/parser/clauses/viewClause.spec.js +0 -163
- package/parser/definitions/arraySlice.spec.js +0 -49
- package/parser/definitions/columnDefinition.spec.js +0 -199
- package/parser/definitions/dbLinkColumnDefinition.spec.js +0 -45
- package/parser/definitions/enumColumnDefinition.spec.js +0 -108
- package/parser/definitions/filterDefinition.spec.js +0 -43
- package/parser/definitions/objectColumnDefinition.spec.js +0 -118
- package/parser/function_parser.spec.js +0 -131
- package/parser/functions/actionCallFn.spec.js +0 -51
- package/parser/functions/addonCallFn.spec.js +0 -41
- package/parser/functions/ai/aiAgentRunFn.spec.js +0 -94
- package/parser/functions/ai/aiExternalMcpServerDetailsFn.spec.js +0 -85
- package/parser/functions/ai/aiExternalMcpToolListFn.spec.js +0 -85
- package/parser/functions/ai/aiExternalMcpToolRunFn.spec.js +0 -101
- package/parser/functions/aiFn.spec.js +0 -51
- package/parser/functions/api/apiCallFn.spec.js +0 -62
- package/parser/functions/api/apiLambdaFn.spec.js +0 -63
- package/parser/functions/api/apiRealtimeEventFn.spec.js +0 -82
- package/parser/functions/api/apiRequestFn.spec.js +0 -113
- package/parser/functions/api/apiStreamFn.spec.js +0 -44
- package/parser/functions/api/webflowRequestFn.spec.js +0 -114
- package/parser/functions/array/arrayDifferenceFn.spec.js +0 -34
- package/parser/functions/array/arrayFindFn.spec.js +0 -44
- package/parser/functions/array/arrayGroupByFn.spec.js +0 -41
- package/parser/functions/array/arrayIntersectionFn.spec.js +0 -22
- package/parser/functions/array/arrayMapFn.spec.js +0 -37
- package/parser/functions/array/arrayNoValueAs.spec.js +0 -56
- package/parser/functions/array/arrayPartitionFn.spec.js +0 -29
- package/parser/functions/array/arrayUnionFn.spec.js +0 -22
- package/parser/functions/array/arrayValueIfAs.spec.js +0 -54
- package/parser/functions/array/arrayValueOnly.spec.js +0 -61
- package/parser/functions/array/valueAttrOnly.spec.js +0 -61
- package/parser/functions/cloud/cloudAlgoliaRequestFn.spec.js +0 -30
- package/parser/functions/cloud/cloudAwsS3Fn.spec.js +0 -21
- package/parser/functions/cloud/cloudDeleteFileFn.spec.js +0 -25
- package/parser/functions/cloud/cloudGetFileInfoFn.spec.js +0 -25
- package/parser/functions/cloud/cloudListDirectoryFn.spec.js +0 -26
- package/parser/functions/cloud/cloudReadFileFn.spec.js +0 -25
- package/parser/functions/cloud/cloudSearchDocumentFn.spec.js +0 -28
- package/parser/functions/cloud/cloudSearchQueryFn.spec.js +0 -32
- package/parser/functions/cloud/cloudSearchRequestFn.spec.js +0 -32
- package/parser/functions/cloud/cloudSignUrlFn.spec.js +0 -26
- package/parser/functions/cloud/cloudStorageFn.spec.js +0 -21
- package/parser/functions/cloud/cloudUploadFileFn.spec.js +0 -29
- package/parser/functions/controls/awaitFn.spec.js +0 -48
- package/parser/functions/controls/conditionalFn.spec.js +0 -188
- package/parser/functions/controls/forEachFn.spec.js +0 -109
- package/parser/functions/controls/forFn.spec.js +0 -85
- package/parser/functions/controls/functionRunFn.spec.js +0 -77
- package/parser/functions/controls/groupFn.spec.js +0 -63
- package/parser/functions/controls/preconditionFn.spec.js +0 -107
- package/parser/functions/controls/returnFn.spec.js +0 -44
- package/parser/functions/controls/switchFn.spec.js +0 -118
- package/parser/functions/controls/throwFn.spec.js +0 -56
- package/parser/functions/controls/tryCatchFn.spec.js +0 -193
- package/parser/functions/controls/whileFn.spec.js +0 -94
- package/parser/functions/db/dbAddFn.spec.js +0 -72
- package/parser/functions/db/dbAddOrEditFn.spec.js +0 -97
- package/parser/functions/db/dbBulkAddFn.spec.js +0 -94
- package/parser/functions/db/dbBulkDeleteFn.spec.js +0 -28
- package/parser/functions/db/dbBulkPatchFn.spec.js +0 -42
- package/parser/functions/db/dbBulkUpdateFn.spec.js +0 -42
- package/parser/functions/db/dbDelFn.spec.js +0 -67
- package/parser/functions/db/dbDirectQueryFn.spec.js +0 -104
- package/parser/functions/db/dbEditFn.spec.js +0 -122
- package/parser/functions/db/dbExternalDirectQueryFn.spec.js +0 -103
- package/parser/functions/db/dbGetFn.spec.js +0 -117
- package/parser/functions/db/dbHasFn.spec.js +0 -62
- package/parser/functions/db/dbPatchFn.spec.js +0 -88
- package/parser/functions/db/dbQueryFn.spec.js +0 -380
- package/parser/functions/db/dbSchemaFn.spec.js +0 -42
- package/parser/functions/db/dbSetDatasourceFn.spec.js +0 -44
- package/parser/functions/db/dbTransactionFn.spec.js +0 -63
- package/parser/functions/db/dbTruncateFn.spec.js +0 -42
- package/parser/functions/debug/debugLogFn.spec.js +0 -44
- package/parser/functions/debug/debugStopFn.spec.js +0 -44
- package/parser/functions/expect/unitExpectToBeWithinFn.spec.js +0 -63
- package/parser/functions/expect/unitExpectToThrowFn.spec.js +0 -40
- package/parser/functions/expect/unitExpectWithArgumentsFn.spec.js +0 -355
- package/parser/functions/expect/unitExpectWithoutArgumentsFn.spec.js +0 -69
- package/parser/functions/expect/workflowExpectToBeWithinFn.spec.js +0 -70
- package/parser/functions/expect/workflowExpectToThrowFn.spec.js +0 -56
- package/parser/functions/expect/workflowExpectWithArgumentsFn.spec.js +0 -308
- package/parser/functions/expect/workflowExpectWithoutArgumentsFn.spec.js +0 -87
- package/parser/functions/math/allMathFn.spec.js +0 -100
- package/parser/functions/middlewareCallFn.spec.js +0 -44
- package/parser/functions/object/objectEntriesFn.spec.js +0 -44
- package/parser/functions/object/objectKeysFn.spec.js +0 -44
- package/parser/functions/object/objectValuesFn.spec.js +0 -44
- package/parser/functions/redis/redisCountFn.spec.js +0 -58
- package/parser/functions/redis/redisDecrFn.spec.js +0 -47
- package/parser/functions/redis/redisDelFn.spec.js +0 -58
- package/parser/functions/redis/redisGetFn.spec.js +0 -67
- package/parser/functions/redis/redisHasFn.spec.js +0 -58
- package/parser/functions/redis/redisIncrFn.spec.js +0 -74
- package/parser/functions/redis/redisKeysFn.spec.js +0 -67
- package/parser/functions/redis/redisPopFn.spec.js +0 -75
- package/parser/functions/redis/redisPushFn.spec.js +0 -71
- package/parser/functions/redis/redisRangeFn.spec.js +0 -80
- package/parser/functions/redis/redisRateLimitFn.spec.js +0 -87
- package/parser/functions/redis/redisRemoveFn.spec.js +0 -65
- package/parser/functions/redis/redisSetFn.spec.js +0 -89
- package/parser/functions/redis/redisShiftFn.spec.js +0 -75
- package/parser/functions/redis/redisUnshiftFn.spec.js +0 -73
- package/parser/functions/schema/schemaFn.spec.js +0 -92
- package/parser/functions/schema/schemaParseArrayFn.spec.js +0 -134
- package/parser/functions/schema/schemaParseAttributeFn.spec.js +0 -285
- package/parser/functions/schema/schemaParseConstantFn.spec.js +0 -122
- package/parser/functions/schema/schemaParseEnum.spec.js +0 -47
- package/parser/functions/schema/schemaParseImmutableFn.spec.js +0 -99
- package/parser/functions/schema/schemaParseObjectFn.spec.js +0 -223
- package/parser/functions/schema/utils.spec.js +0 -27
- package/parser/functions/security/securityCheckPasswordFn.spec.js +0 -22
- package/parser/functions/security/securityCreateAuthTokenFn.spec.js +0 -51
- package/parser/functions/security/securityCreateCurveKeyFn.spec.js +0 -22
- package/parser/functions/security/securityCreatePasswordFn.spec.js +0 -26
- package/parser/functions/security/securityCreateRsaKeyFn.spec.js +0 -22
- package/parser/functions/security/securityCreateSecretKeyFn.spec.js +0 -22
- package/parser/functions/security/securityCreateUuidFn.spec.js +0 -27
- package/parser/functions/security/securityDecryptFn.spec.js +0 -24
- package/parser/functions/security/securityEncryptFn.spec.js +0 -24
- package/parser/functions/security/securityJweDecodeFn.spec.js +0 -26
- package/parser/functions/security/securityJweDecodeLegacyFn.spec.js +0 -26
- package/parser/functions/security/securityJweEncodeFn.spec.js +0 -26
- package/parser/functions/security/securityJweEncodeLegacyFn.spec.js +0 -25
- package/parser/functions/security/securityJwsDecodeFn.spec.js +0 -25
- package/parser/functions/security/securityJwsEncodeFn.spec.js +0 -25
- package/parser/functions/security/securityRandomBytesFn.spec.js +0 -21
- package/parser/functions/security/securityRandomNumberFn.spec.js +0 -22
- package/parser/functions/storage/storageCreateAttachmentFn.spec.js +0 -87
- package/parser/functions/storage/storageCreateAudioFn.spec.js +0 -98
- package/parser/functions/storage/storageCreateFileResourceFn.spec.js +0 -72
- package/parser/functions/storage/storageCreateImageFn.spec.js +0 -98
- package/parser/functions/storage/storageCreateVideoFn.spec.js +0 -99
- package/parser/functions/storage/storageDeleteFileFn.spec.js +0 -67
- package/parser/functions/storage/storageReadFileResourceFn.spec.js +0 -60
- package/parser/functions/storage/storageSignPrivateUrlFn.spec.js +0 -72
- package/parser/functions/stream/streamFromCsvFn.spec.js +0 -69
- package/parser/functions/stream/streamFromJsonlFn.spec.js +0 -47
- package/parser/functions/stream/streamFromRequestFn.spec.js +0 -103
- package/parser/functions/text/allTextWithReturnValueFn.spec.js +0 -100
- package/parser/functions/text/allTextWithoutReturnValueFn.spec.js +0 -122
- package/parser/functions/toolCallFn.spec.js +0 -28
- package/parser/functions/triggerCallFn.spec.js +0 -51
- package/parser/functions/unitExpectFn.spec.js +0 -21
- package/parser/functions/util/utilGeoDistanceFn.spec.js +0 -79
- package/parser/functions/util/utilGetAllInputFn.spec.js +0 -33
- package/parser/functions/util/utilGetEnvFn.spec.js +0 -33
- package/parser/functions/util/utilGetRawInputFn.spec.js +0 -62
- package/parser/functions/util/utilGetVarsFn.spec.js +0 -33
- package/parser/functions/util/utilIpLookupFn.spec.js +0 -37
- package/parser/functions/util/utilPostProcessFn.spec.js +0 -63
- package/parser/functions/util/utilSendEmailFn.spec.js +0 -62
- package/parser/functions/util/utilSetHeaderFn.spec.js +0 -48
- package/parser/functions/util/utilSleepFn.spec.js +0 -44
- package/parser/functions/util/utilTemplateFn.spec.js +0 -78
- package/parser/functions/varFn.spec.js +0 -332
- package/parser/functions/workflowExpectFn.spec.js +0 -32
- package/parser/functions/zip/zipAddToArchiveFn.spec.js +0 -78
- package/parser/functions/zip/zipCreateArchiveFn.spec.js +0 -53
- package/parser/functions/zip/zipDeleteFromArchiveFn.spec.js +0 -69
- package/parser/functions/zip/zipExtractFn.spec.js +0 -52
- package/parser/functions/zip/zipViewContentsFn.spec.js +0 -52
- package/parser/generic/arrayWithValues.spec.js +0 -72
- package/parser/generic/asVariable.spec.js +0 -117
- package/parser/generic/assignableVariableAs.spec.js +0 -126
- package/parser/generic/assignableVariableProperty.spec.js +0 -138
- package/parser/generic/castedValue.spec.js +0 -29
- package/parser/generic/chainedIdentifier.spec.js +0 -89
- package/parser/generic/completeAuthVariable.spec.js +0 -23
- package/parser/generic/completeEnvVariable.spec.js +0 -99
- package/parser/generic/completeErrorVariable.spec.js +0 -17
- package/parser/generic/completeInputVariable.spec.js +0 -53
- package/parser/generic/expressionFn.spec.js +0 -605
- package/parser/generic/filterFn.spec.js +0 -47
- package/parser/generic/functionAttrReq.spec.js +0 -353
- package/parser/generic/longFormVariable.spec.js +0 -25
- package/parser/generic/minimalFnBody.spec.js +0 -47
- package/parser/generic/mockAttribute.spec.js +0 -57
- package/parser/generic/multilineFilterFn.spec.js +0 -51
- package/parser/generic/objectWithAttributes.spec.js +0 -147
- package/parser/generic/requiredValueFnBody.spec.js +0 -56
- package/parser/generic/shortFormVariable.spec.js +0 -27
- package/parser/generic/stringArray.spec.js +0 -55
- package/parser/generic/tagsAttribute.spec.js +0 -47
- package/parser/generic/variableOnly.spec.js +0 -47
- package/parser/mcp_server_parser.spec.js +0 -478
- package/parser/mcp_server_trigger_parser.spec.js +0 -396
- package/parser/metadata/columnMetadataDefinition.spec.js +0 -47
- package/parser/metadata/enumColumnMetadataDefinition.spec.js +0 -81
- package/parser/middleware_parser.spec.js +0 -230
- package/parser/multidoc.spec.js +0 -946
- package/parser/query_parser.spec.js +0 -202
- package/parser/realtime_channel_parser.spec.js +0 -20
- package/parser/realtime_trigger_parser.spec.js +0 -469
- package/parser/run_parser.spec.js +0 -100
- package/parser/table_parser.spec.js +0 -176
- package/parser/table_trigger_parser.spec.js +0 -478
- package/parser/task_parser.spec.js +0 -94
- package/parser/tests/agent/agent_parser.spec.js +0 -52
- package/parser/tests/agent/valid_sources/customer_servier_agent.xs +0 -45
- package/parser/tests/api_group/api_group_parser.spec.js +0 -52
- package/parser/tests/api_group/valid_sources/api_group_history.xs +0 -4
- package/parser/tests/api_group/valid_sources/basic_api_group.xs +0 -3
- package/parser/tests/api_group/valid_sources/complete_api_group.xs +0 -7
- package/parser/tests/api_group/valid_sources/protected_api_group.xs +0 -7
- package/parser/tests/function/function_parser.spec.js +0 -52
- package/parser/tests/function/valid_sources/all_controls.xs +0 -68
- package/parser/tests/function/valid_sources/all_query_return_types.xs +0 -227
- package/parser/tests/function/valid_sources/all_storage.xs +0 -45
- package/parser/tests/function/valid_sources/discord_poll_send_to_slack.xs +0 -133
- package/parser/tests/function/valid_sources/expression_in_response.xs +0 -22
- package/parser/tests/function/valid_sources/filter_by_value.xs +0 -55
- package/parser/tests/function/valid_sources/filter_query.xs +0 -82
- package/parser/tests/function/valid_sources/large_regex.xs +0 -13
- package/parser/tests/function/valid_sources/ledash_ends_with.xs +0 -90
- package/parser/tests/function/valid_sources/multiline_description.xs +0 -28
- package/parser/tests/function/valid_sources/multiline_expr.xs +0 -41
- package/parser/tests/function/valid_sources/set_theory_fn.xs +0 -129
- package/parser/tests/function/valid_sources/simple_unit_test.xs +0 -33
- package/parser/tests/function/valid_sources/valid_officer.xs +0 -57
- package/parser/tests/function/valid_sources/webflow.xs +0 -18
- package/parser/tests/multidoc/multidoc_parser.spec.js +0 -55
- package/parser/tests/multidoc/valid_sources/function_stack.xs +0 -130603
- package/parser/tests/query/query_parser.spec.js +0 -54
- package/parser/tests/query/valid_sources/all_basics.xs +0 -51
- package/parser/tests/query/valid_sources/all_cloud.xs +0 -141
- package/parser/tests/query/valid_sources/all_db.xs +0 -102
- package/parser/tests/query/valid_sources/all_external_db.xs +0 -43
- package/parser/tests/query/valid_sources/all_keywords.xs +0 -65
- package/parser/tests/query/valid_sources/all_math.xs +0 -53
- package/parser/tests/query/valid_sources/all_object.xs +0 -25
- package/parser/tests/query/valid_sources/all_redis.xs +0 -106
- package/parser/tests/query/valid_sources/all_security.xs +0 -105
- package/parser/tests/query/valid_sources/all_stream.xs +0 -69
- package/parser/tests/query/valid_sources/all_text.xs +0 -54
- package/parser/tests/query/valid_sources/all_util.xs +0 -66
- package/parser/tests/query/valid_sources/all_zip.xs +0 -39
- package/parser/tests/query/valid_sources/arrays.xs +0 -33
- package/parser/tests/query/valid_sources/disabled_response.xs +0 -27
- package/parser/tests/query/valid_sources/multiline_lambda_GET.xs +0 -50
- package/parser/tests/query/valid_sources/mutliline_query.xs +0 -140
- package/parser/tests/query/valid_sources/patch_expression_multiline.xs +0 -27
- package/parser/tests/query/valid_sources/query_cache.xs +0 -34
- package/parser/tests/query/valid_sources/query_example.xs +0 -43
- package/parser/tests/query/valid_sources/query_mini.xs +0 -11
- package/parser/tests/query/valid_sources/query_rich_inputs.xs +0 -32
- package/parser/tests/query/valid_sources/simple_unit_test.xs +0 -33
- package/parser/tests/query/valid_sources/test_with_slashes.xs +0 -22
- package/parser/tests/query/valid_sources/with_unit_test.xs +0 -97
- package/parser/tests/table/table_parser.spec.js +0 -52
- package/parser/tests/table/valid_sources/account.xs +0 -31
- package/parser/tests/table/valid_sources/all_basic_columns.xs +0 -44
- package/parser/tests/table/valid_sources/basic_table.xs +0 -15
- package/parser/tests/table/valid_sources/empty_object.xs +0 -17
- package/parser/tests/table/valid_sources/empty_table.xs +0 -3
- package/parser/tests/table/valid_sources/multiline_index.xs +0 -33
- package/parser/tests/table/valid_sources/relation.xs +0 -44
- package/parser/tests/table/valid_sources/rich_columns.xs +0 -31
- package/parser/tests/table/valid_sources/table_with_comments.xs +0 -17
- package/parser/tests/table/valid_sources/table_with_search_index.xs +0 -31
- package/parser/tests/table/valid_sources/view_table.xs +0 -62
- package/parser/tests/task/task_parser.spec.js +0 -53
- package/parser/tests/task/valid_sources/active_event.xs +0 -11
- package/parser/tests/task/valid_sources/all_events.xs +0 -17
- package/parser/tests/task/valid_sources/create_leak.xs +0 -165
- package/parser/tests/task/valid_sources/daily_sales_report.xs +0 -56
- package/parser/tests/task/valid_sources/inactive_event.xs +0 -11
- package/parser/tests/variable_test/coverage_check.xs +0 -293
- package/parser/tests/workflow_test/valid_sources/basic_workflow_test.xs +0 -13
- package/parser/tests/workflow_test/workflow_test_parser.spec.js +0 -52
- package/parser/tool_parser.spec.js +0 -115
- package/parser/variableValidator.spec.js +0 -179
- package/parser/workflow_test_parser.spec.js +0 -136
- package/parser/workspace_parser.spec.js +0 -142
- package/parser/workspace_trigger_parser.spec.js +0 -332
- package/toTmLanguage.js +0 -75
- package/utils.spec.js +0 -369
- package/workspace/crossFileValidator.spec.js +0 -654
- package/workspace/referenceTracking.spec.js +0 -420
- package/workspace/workspaceIndex.spec.js +0 -189
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { expect } from "chai";
|
|
2
|
-
import { describe, it } from "mocha";
|
|
3
|
-
import { xanoscriptParser } from "./parser.js";
|
|
4
|
-
|
|
5
|
-
describe("addon_parser", () => {
|
|
6
|
-
it("should parse a basic addon", () => {
|
|
7
|
-
const parser = xanoscriptParser(`addon foo {
|
|
8
|
-
input {
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
stack {
|
|
12
|
-
}
|
|
13
|
-
}`);
|
|
14
|
-
expect(parser.errors).to.be.empty;
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
it("should parse a basic a string addon url", () => {
|
|
18
|
-
const parser = xanoscriptParser(`addon "foo/bar" {
|
|
19
|
-
input {
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
stack {
|
|
23
|
-
}
|
|
24
|
-
}`);
|
|
25
|
-
|
|
26
|
-
expect(parser.errors).to.be.empty;
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it("should accept an input and a db.query statement", () => {
|
|
30
|
-
const parser = xanoscriptParser(`addon tweet_liked_by_user {
|
|
31
|
-
input {
|
|
32
|
-
// ID of the tweet to check
|
|
33
|
-
int tweet_id? {
|
|
34
|
-
table = "tweet"
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// ID of the user to check
|
|
38
|
-
int user_id? {
|
|
39
|
-
table = "user"
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
stack {
|
|
44
|
-
db.query like {
|
|
45
|
-
where = $db.like.tweet_id == $input.tweet_id && $db.like.user_id == $input.user_id
|
|
46
|
-
return = {type: "exists"}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}`);
|
|
50
|
-
|
|
51
|
-
expect(parser.warnings).to.be.empty;
|
|
52
|
-
expect(parser.errors).to.be.empty;
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
it("should not accept an input that is not a db.query", () => {
|
|
56
|
-
const parser = xanoscriptParser(`addon post_author {
|
|
57
|
-
input {
|
|
58
|
-
int user_id {
|
|
59
|
-
table = "user"
|
|
60
|
-
description = "The ID of the user/author"
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
stack {
|
|
65
|
-
db.get user {
|
|
66
|
-
field_name = "id"
|
|
67
|
-
field_value = $input.user_id
|
|
68
|
-
output = ["id", "name", "avatar_url"]
|
|
69
|
-
} as $author
|
|
70
|
-
}
|
|
71
|
-
}`);
|
|
72
|
-
|
|
73
|
-
expect(parser.errors).to.not.be.empty;
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
it("addon don't accept dynamic params", () => {
|
|
77
|
-
const parser = xanoscriptParser(`addon foo/{user_id} {
|
|
78
|
-
input {
|
|
79
|
-
text user_id filters=trim
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
stack {
|
|
83
|
-
}
|
|
84
|
-
}`);
|
|
85
|
-
|
|
86
|
-
expect(parser.errors).to.not.be.empty;
|
|
87
|
-
});
|
|
88
|
-
});
|
|
@@ -1,599 +0,0 @@
|
|
|
1
|
-
import { expect } from "chai";
|
|
2
|
-
import { describe, it } from "mocha";
|
|
3
|
-
import { xanoscriptParser } from "./parser.js";
|
|
4
|
-
|
|
5
|
-
describe("agent", () => {
|
|
6
|
-
it("should parse a basic agent", () => {
|
|
7
|
-
const parser = xanoscriptParser(`agent sadf {
|
|
8
|
-
canonical = "blFYWn_e"
|
|
9
|
-
|
|
10
|
-
llm = {
|
|
11
|
-
type : "xano-free"
|
|
12
|
-
system_prompt: "You are a helpful AI Agent that completes tasks accurately. When you need additional information to complete a task, use the available tools. Always explain your reasoning and provide clear responses."
|
|
13
|
-
max_steps : 5
|
|
14
|
-
prompt : "some prompt"
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
tools = []
|
|
18
|
-
}`);
|
|
19
|
-
|
|
20
|
-
expect(parser.errors).to.be.empty;
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
it("should require a type", () => {
|
|
24
|
-
const parser = xanoscriptParser(`agent sadf {
|
|
25
|
-
canonical = "blFYWn_e"
|
|
26
|
-
|
|
27
|
-
llm = {
|
|
28
|
-
system_prompt: "You are a helpful AI Agent that completes tasks accurately. When you need additional information to complete a task, use the available tools. Always explain your reasoning and provide clear responses."
|
|
29
|
-
max_steps : 5
|
|
30
|
-
prompt : "some prompt"
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
tools = []
|
|
34
|
-
}`);
|
|
35
|
-
|
|
36
|
-
expect(parser.errors).to.not.be.empty;
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
it("should fail on invalid agent type", () => {
|
|
40
|
-
const parser = xanoscriptParser(`agent sadf {
|
|
41
|
-
canonical = "blFYWn_e"
|
|
42
|
-
|
|
43
|
-
llm = {
|
|
44
|
-
type : "yoyoyo"
|
|
45
|
-
system_prompt: "You are a helpful AI Agent that completes tasks accurately. When you need additional information to complete a task, use the available tools. Always explain your reasoning and provide clear responses."
|
|
46
|
-
max_steps : 5
|
|
47
|
-
prompt : "some prompt"
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
tools = []
|
|
51
|
-
}`);
|
|
52
|
-
|
|
53
|
-
expect(parser.errors).to.not.be.empty;
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
it("should parse a basic agent with tags", () => {
|
|
57
|
-
const parser = xanoscriptParser(`agent sadf {
|
|
58
|
-
canonical = "blFYWn_e"
|
|
59
|
-
tags = ["a", "b", "c"]
|
|
60
|
-
|
|
61
|
-
llm = {
|
|
62
|
-
type : "xano-free"
|
|
63
|
-
system_prompt: "You are a helpful AI Agent that completes tasks accurately. When you need additional information to complete a task, use the available tools. Always explain your reasoning and provide clear responses."
|
|
64
|
-
max_steps : 5
|
|
65
|
-
prompt : "some prompt"
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
tools = []
|
|
69
|
-
}`);
|
|
70
|
-
|
|
71
|
-
expect(parser.errors).to.be.empty;
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
it("should parse an anthropic agent", () => {
|
|
75
|
-
const parser = xanoscriptParser(`agent sadf {
|
|
76
|
-
canonical = "blFYWn_e"
|
|
77
|
-
llm = {
|
|
78
|
-
type : "anthropic"
|
|
79
|
-
system_prompt: "You are a helpful AI Agent that completes tasks accurately."
|
|
80
|
-
max_steps : 5
|
|
81
|
-
prompt : """
|
|
82
|
-
some multi-line
|
|
83
|
-
prompt
|
|
84
|
-
"""
|
|
85
|
-
model : "claude-4-sonnet-20250514"
|
|
86
|
-
temperature: 3
|
|
87
|
-
reasoning : true
|
|
88
|
-
headers : "[]"
|
|
89
|
-
}
|
|
90
|
-
tools = []
|
|
91
|
-
}`);
|
|
92
|
-
|
|
93
|
-
expect(parser.errors).to.be.empty;
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
it("should parse an anthropic agent with optional fields", () => {
|
|
97
|
-
const parser = xanoscriptParser(`agent sadf {
|
|
98
|
-
canonical = "blFYWn_e"
|
|
99
|
-
llm = {
|
|
100
|
-
type : "anthropic"
|
|
101
|
-
system_prompt: "You are a helpful AI Agent."
|
|
102
|
-
max_steps : 10
|
|
103
|
-
prompt : "some prompt"
|
|
104
|
-
model : "claude-4-sonnet-20250514"
|
|
105
|
-
temperature: 0.7
|
|
106
|
-
reasoning : false
|
|
107
|
-
headers : "{}"
|
|
108
|
-
api_key : "test-key"
|
|
109
|
-
thinking_tokens: 1000
|
|
110
|
-
baseURL : "https://api.anthropic.com"
|
|
111
|
-
}
|
|
112
|
-
tools = []
|
|
113
|
-
}`);
|
|
114
|
-
|
|
115
|
-
expect(parser.errors).to.be.empty;
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
it("should parse a google_genai agent", () => {
|
|
119
|
-
const parser = xanoscriptParser(`agent test_google {
|
|
120
|
-
canonical = "test_123"
|
|
121
|
-
llm = {
|
|
122
|
-
type : "google-genai"
|
|
123
|
-
system_prompt: "You are a Google AI assistant."
|
|
124
|
-
max_steps : 8
|
|
125
|
-
prompt : "some prompt"
|
|
126
|
-
model : "gemini-1.5-pro"
|
|
127
|
-
temperature: 0.5
|
|
128
|
-
reasoning : true
|
|
129
|
-
headers : "[]"
|
|
130
|
-
search_grounding: true
|
|
131
|
-
include_thoughts: false
|
|
132
|
-
}
|
|
133
|
-
tools = []
|
|
134
|
-
}`);
|
|
135
|
-
|
|
136
|
-
expect(parser.errors).to.be.empty;
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
it("should parse a google_genai agent with optional fields", () => {
|
|
140
|
-
const parser = xanoscriptParser(`agent test_google {
|
|
141
|
-
canonical = "test_456"
|
|
142
|
-
llm = {
|
|
143
|
-
type : "google-genai"
|
|
144
|
-
system_prompt: "Advanced Google AI assistant."
|
|
145
|
-
max_steps : 15
|
|
146
|
-
prompt : "some prompt"
|
|
147
|
-
model : "gemini-1.5-flash"
|
|
148
|
-
temperature: 0.8
|
|
149
|
-
reasoning : false
|
|
150
|
-
headers : "{}"
|
|
151
|
-
search_grounding: false
|
|
152
|
-
include_thoughts: true
|
|
153
|
-
api_key : "test-google-key"
|
|
154
|
-
thinking_tokens: 2000
|
|
155
|
-
baseURL : "https://generativelanguage.googleapis.com"
|
|
156
|
-
safety_settings: "strict"
|
|
157
|
-
dynamic_retrival: "enabled"
|
|
158
|
-
}
|
|
159
|
-
tools = []
|
|
160
|
-
}`);
|
|
161
|
-
|
|
162
|
-
expect(parser.errors).to.be.empty;
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
it("should accept a structuredOutput definition", () => {
|
|
166
|
-
const parser = xanoscriptParser(`agent test_google {
|
|
167
|
-
canonical = "test_456"
|
|
168
|
-
llm = {
|
|
169
|
-
type : "google-genai"
|
|
170
|
-
system_prompt: "Advanced Google AI assistant."
|
|
171
|
-
max_steps : 15
|
|
172
|
-
prompt : "some prompt"
|
|
173
|
-
model : "gemini-1.5-flash"
|
|
174
|
-
temperature: 0.8
|
|
175
|
-
reasoning : false
|
|
176
|
-
headers : "{}"
|
|
177
|
-
search_grounding: false
|
|
178
|
-
include_thoughts: true
|
|
179
|
-
api_key : "test-google-key"
|
|
180
|
-
thinking_tokens: 2000
|
|
181
|
-
baseURL : "https://generativelanguage.googleapis.com"
|
|
182
|
-
safety_settings: "strict"
|
|
183
|
-
dynamic_retrival: ""
|
|
184
|
-
}
|
|
185
|
-
tools = []
|
|
186
|
-
|
|
187
|
-
output {
|
|
188
|
-
text text? filters=trim
|
|
189
|
-
bool is_correct?
|
|
190
|
-
int confidence_score? {
|
|
191
|
-
description = "Max 100"
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
}`);
|
|
195
|
-
|
|
196
|
-
expect(parser.errors).to.be.empty;
|
|
197
|
-
});
|
|
198
|
-
|
|
199
|
-
it("should parse an openai agent", () => {
|
|
200
|
-
const parser = xanoscriptParser(`agent test_openai {
|
|
201
|
-
canonical = "openai_123"
|
|
202
|
-
llm = {
|
|
203
|
-
type : "openai"
|
|
204
|
-
system_prompt: "You are an OpenAI assistant."
|
|
205
|
-
max_steps : 6
|
|
206
|
-
prompt : "some prompt"
|
|
207
|
-
model : "gpt-4o"
|
|
208
|
-
temperature : 0.6
|
|
209
|
-
reasoning_effort: "medium"
|
|
210
|
-
}
|
|
211
|
-
tools = []
|
|
212
|
-
}`);
|
|
213
|
-
|
|
214
|
-
expect(parser.errors).to.be.empty;
|
|
215
|
-
});
|
|
216
|
-
|
|
217
|
-
it("should reject openai agent with non-existent fields", () => {
|
|
218
|
-
const parser = xanoscriptParser(`agent test_openai {
|
|
219
|
-
canonical = "openai_123"
|
|
220
|
-
llm = {
|
|
221
|
-
type : "openai"
|
|
222
|
-
system_prompt: "You are an OpenAI assistant."
|
|
223
|
-
max_steps : 6
|
|
224
|
-
prompt : "some prompt"
|
|
225
|
-
model : "gpt-4o"
|
|
226
|
-
temperature : 0.6
|
|
227
|
-
reasoning_effort: "medium"
|
|
228
|
-
search_grounding: true
|
|
229
|
-
}
|
|
230
|
-
tools = []
|
|
231
|
-
}`);
|
|
232
|
-
|
|
233
|
-
expect(parser.errors).to.not.be.empty;
|
|
234
|
-
});
|
|
235
|
-
|
|
236
|
-
it("should reject openai agent with a missing required fields", () => {
|
|
237
|
-
const parser = xanoscriptParser(`agent test_openai {
|
|
238
|
-
canonical = "openai_123"
|
|
239
|
-
llm = {
|
|
240
|
-
type : "openai"
|
|
241
|
-
system_prompt: "You are an OpenAI assistant."
|
|
242
|
-
max_steps : 6
|
|
243
|
-
prompt : "some prompt"
|
|
244
|
-
model : "gpt-4o"
|
|
245
|
-
temperature : 0.6
|
|
246
|
-
}
|
|
247
|
-
tools = []
|
|
248
|
-
}`);
|
|
249
|
-
|
|
250
|
-
expect(parser.errors).to.not.be.empty;
|
|
251
|
-
});
|
|
252
|
-
|
|
253
|
-
it("should parse an openai agent with optional fields", () => {
|
|
254
|
-
const parser = xanoscriptParser(`agent test_openai {
|
|
255
|
-
canonical = "openai_456"
|
|
256
|
-
llm = {
|
|
257
|
-
type : "openai"
|
|
258
|
-
system_prompt: "Advanced OpenAI assistant with custom config."
|
|
259
|
-
max_steps : 12
|
|
260
|
-
prompt : "some prompt"
|
|
261
|
-
model : "gpt-4o-mini"
|
|
262
|
-
temperature: 0.9
|
|
263
|
-
reasoning_effort: "high"
|
|
264
|
-
api_key : "sk-test-key"
|
|
265
|
-
baseURL : "https://api.openai.com"
|
|
266
|
-
headers : "{}"
|
|
267
|
-
organization: "org-123"
|
|
268
|
-
project : "project-456"
|
|
269
|
-
compatibility: "strict"
|
|
270
|
-
}
|
|
271
|
-
tools = []
|
|
272
|
-
}`);
|
|
273
|
-
|
|
274
|
-
expect(parser.errors).to.be.empty;
|
|
275
|
-
});
|
|
276
|
-
|
|
277
|
-
it("should parse a xano_free agent", () => {
|
|
278
|
-
const parser = xanoscriptParser(`agent test_xano {
|
|
279
|
-
canonical = "xano_123"
|
|
280
|
-
llm = {
|
|
281
|
-
type : "xano-free"
|
|
282
|
-
system_prompt: "You are a Xano free tier assistant."
|
|
283
|
-
max_steps : 3
|
|
284
|
-
prompt : "some prompt"
|
|
285
|
-
temperature: 0.4
|
|
286
|
-
search_grounding: true
|
|
287
|
-
}
|
|
288
|
-
tools = []
|
|
289
|
-
}`);
|
|
290
|
-
|
|
291
|
-
expect(parser.errors).to.be.empty;
|
|
292
|
-
});
|
|
293
|
-
|
|
294
|
-
it("should allow a messages field instead of prompt", () => {
|
|
295
|
-
const parser = xanoscriptParser(`agent test_xano {
|
|
296
|
-
canonical = "xano_789"
|
|
297
|
-
llm = {
|
|
298
|
-
type : "xano-free"
|
|
299
|
-
system_prompt: "Advanced Xano free tier assistant."
|
|
300
|
-
max_steps : 7
|
|
301
|
-
messages : "{{ $args.messages|json_encode() }}"
|
|
302
|
-
temperature: 0.7
|
|
303
|
-
search_grounding: false
|
|
304
|
-
baseURL : "https://api.xano.com"
|
|
305
|
-
headers : "{}"
|
|
306
|
-
safety_settings: "moderate"
|
|
307
|
-
dynamic_retrival: "disabled"
|
|
308
|
-
}
|
|
309
|
-
tools = []
|
|
310
|
-
}`);
|
|
311
|
-
|
|
312
|
-
expect(parser.errors).to.be.empty;
|
|
313
|
-
});
|
|
314
|
-
|
|
315
|
-
it("should require having at least a prompt or a messages field", () => {
|
|
316
|
-
const parser = xanoscriptParser(`agent test_xano {
|
|
317
|
-
canonical = "xano_789"
|
|
318
|
-
llm = {
|
|
319
|
-
type : "xano-free"
|
|
320
|
-
system_prompt: "Advanced Xano free tier assistant."
|
|
321
|
-
max_steps : 7
|
|
322
|
-
temperature: 0.7
|
|
323
|
-
search_grounding: false
|
|
324
|
-
baseURL : "https://api.xano.com"
|
|
325
|
-
headers : "{}"
|
|
326
|
-
safety_settings: "moderate"
|
|
327
|
-
dynamic_retrival: "disabled"
|
|
328
|
-
}
|
|
329
|
-
tools = []
|
|
330
|
-
}`);
|
|
331
|
-
|
|
332
|
-
expect(parser.errors).to.not.be.empty;
|
|
333
|
-
});
|
|
334
|
-
|
|
335
|
-
it("should reject having both a prompt and messages field", () => {
|
|
336
|
-
const parser = xanoscriptParser(`agent test_xano {
|
|
337
|
-
canonical = "xano_789"
|
|
338
|
-
llm = {
|
|
339
|
-
type : "xano-free"
|
|
340
|
-
system_prompt: "Advanced Xano free tier assistant."
|
|
341
|
-
max_steps : 7
|
|
342
|
-
messages : "{{ $args.messages|json_encode() }}"
|
|
343
|
-
prompt : "some prompt"
|
|
344
|
-
temperature: 0.7
|
|
345
|
-
search_grounding: false
|
|
346
|
-
baseURL : "https://api.xano.com"
|
|
347
|
-
headers : "{}"
|
|
348
|
-
safety_settings: "moderate"
|
|
349
|
-
dynamic_retrival: "disabled"
|
|
350
|
-
}
|
|
351
|
-
tools = []
|
|
352
|
-
}`);
|
|
353
|
-
|
|
354
|
-
expect(parser.errors).to.not.be.empty;
|
|
355
|
-
});
|
|
356
|
-
|
|
357
|
-
it("should parse a xano_free agent with optional fields", () => {
|
|
358
|
-
const parser = xanoscriptParser(`agent test_xano {
|
|
359
|
-
canonical = "xano_789"
|
|
360
|
-
llm = {
|
|
361
|
-
type : "xano-free"
|
|
362
|
-
system_prompt: "Advanced Xano free tier assistant."
|
|
363
|
-
max_steps : 7
|
|
364
|
-
prompt : "some prompt"
|
|
365
|
-
temperature: 0.7
|
|
366
|
-
search_grounding: false
|
|
367
|
-
baseURL : "https://api.xano.com"
|
|
368
|
-
headers : "{}"
|
|
369
|
-
safety_settings: "moderate"
|
|
370
|
-
dynamic_retrival: "disabled"
|
|
371
|
-
}
|
|
372
|
-
tools = []
|
|
373
|
-
}`);
|
|
374
|
-
|
|
375
|
-
expect(parser.errors).to.be.empty;
|
|
376
|
-
});
|
|
377
|
-
|
|
378
|
-
it("should parse tools with single tool", () => {
|
|
379
|
-
const parser = xanoscriptParser(`agent with_tools {
|
|
380
|
-
canonical = "tools_123"
|
|
381
|
-
llm = {
|
|
382
|
-
type : "xano-free"
|
|
383
|
-
system_prompt: "You are a helpful assistant."
|
|
384
|
-
prompt : "some prompt"
|
|
385
|
-
max_steps : 5
|
|
386
|
-
temperature: 0.5
|
|
387
|
-
search_grounding: true
|
|
388
|
-
}
|
|
389
|
-
tools = [
|
|
390
|
-
{name: "calculator"}
|
|
391
|
-
]
|
|
392
|
-
}`);
|
|
393
|
-
|
|
394
|
-
expect(parser.errors).to.be.empty;
|
|
395
|
-
});
|
|
396
|
-
|
|
397
|
-
it("should parse tools with multiple tools", () => {
|
|
398
|
-
const parser = xanoscriptParser(`agent multi_tools {
|
|
399
|
-
canonical = "multi_tools_123"
|
|
400
|
-
llm = {
|
|
401
|
-
type : "xano-free"
|
|
402
|
-
system_prompt: "You are a helpful assistant."
|
|
403
|
-
max_steps : 5
|
|
404
|
-
prompt : "some prompt"
|
|
405
|
-
temperature: 0.5
|
|
406
|
-
search_grounding: true
|
|
407
|
-
}
|
|
408
|
-
tools = [
|
|
409
|
-
{name: "calculator"},
|
|
410
|
-
{name: "weather_api"},
|
|
411
|
-
{name: "search_tool"}
|
|
412
|
-
]
|
|
413
|
-
}`);
|
|
414
|
-
|
|
415
|
-
expect(parser.errors).to.be.empty;
|
|
416
|
-
});
|
|
417
|
-
|
|
418
|
-
it("should parse tools with active field", () => {
|
|
419
|
-
const parser = xanoscriptParser(`agent tools_active {
|
|
420
|
-
canonical = "active_123"
|
|
421
|
-
llm = {
|
|
422
|
-
type : "xano-free"
|
|
423
|
-
system_prompt: "You are a helpful assistant."
|
|
424
|
-
max_steps : 5
|
|
425
|
-
prompt : "some prompt"
|
|
426
|
-
temperature: 0.5
|
|
427
|
-
search_grounding: true
|
|
428
|
-
}
|
|
429
|
-
tools = [
|
|
430
|
-
{name: "calculator", active: true},
|
|
431
|
-
{name: "weather_api", active: false}
|
|
432
|
-
]
|
|
433
|
-
}`);
|
|
434
|
-
|
|
435
|
-
expect(parser.errors).to.be.empty;
|
|
436
|
-
});
|
|
437
|
-
|
|
438
|
-
it("should parse tools with auth field", () => {
|
|
439
|
-
const parser = xanoscriptParser(`agent tools_auth {
|
|
440
|
-
canonical = "auth_123"
|
|
441
|
-
llm = {
|
|
442
|
-
type : "xano-free"
|
|
443
|
-
system_prompt: "You are a helpful assistant."
|
|
444
|
-
max_steps : 5
|
|
445
|
-
prompt : "some prompt"
|
|
446
|
-
temperature: 0.5
|
|
447
|
-
search_grounding: true
|
|
448
|
-
}
|
|
449
|
-
tools = [
|
|
450
|
-
{name: "api_tool", auth: "bearer_token"},
|
|
451
|
-
{name: "database", auth: "basic_auth"}
|
|
452
|
-
]
|
|
453
|
-
}`);
|
|
454
|
-
|
|
455
|
-
expect(parser.errors).to.be.empty;
|
|
456
|
-
});
|
|
457
|
-
|
|
458
|
-
it("should parse tools with all optional fields", () => {
|
|
459
|
-
const parser = xanoscriptParser(`agent tools_all_fields {
|
|
460
|
-
canonical = "all_fields_123"
|
|
461
|
-
llm = {
|
|
462
|
-
type : "xano-free"
|
|
463
|
-
system_prompt: "You are a helpful assistant."
|
|
464
|
-
max_steps : 5
|
|
465
|
-
prompt : "some prompt"
|
|
466
|
-
temperature: 0.5
|
|
467
|
-
search_grounding: true
|
|
468
|
-
}
|
|
469
|
-
tools = [
|
|
470
|
-
{
|
|
471
|
-
name: "advanced_tool"
|
|
472
|
-
active: true
|
|
473
|
-
auth: "oauth2"
|
|
474
|
-
},
|
|
475
|
-
{
|
|
476
|
-
name: "simple_tool"
|
|
477
|
-
active: false
|
|
478
|
-
},
|
|
479
|
-
{
|
|
480
|
-
name: "auth_only_tool"
|
|
481
|
-
auth: "api_key"
|
|
482
|
-
}
|
|
483
|
-
]
|
|
484
|
-
}`);
|
|
485
|
-
|
|
486
|
-
expect(parser.errors).to.be.empty;
|
|
487
|
-
});
|
|
488
|
-
|
|
489
|
-
it("should parse tools with mixed formatting", () => {
|
|
490
|
-
const parser = xanoscriptParser(`agent tools_formatting {
|
|
491
|
-
canonical = "format_123"
|
|
492
|
-
llm = {
|
|
493
|
-
type : "xano-free"
|
|
494
|
-
system_prompt: "You are a helpful assistant."
|
|
495
|
-
max_steps : 5
|
|
496
|
-
prompt : ""
|
|
497
|
-
temperature: 0.5
|
|
498
|
-
search_grounding: true
|
|
499
|
-
}
|
|
500
|
-
tools = [
|
|
501
|
-
{name: "tool1", active: true, auth: "key1"},
|
|
502
|
-
{
|
|
503
|
-
name: "tool2"
|
|
504
|
-
active: false
|
|
505
|
-
auth: "key2"
|
|
506
|
-
},
|
|
507
|
-
{name: "tool3"}
|
|
508
|
-
]
|
|
509
|
-
}`);
|
|
510
|
-
|
|
511
|
-
expect(parser.errors).to.be.empty;
|
|
512
|
-
});
|
|
513
|
-
|
|
514
|
-
it("should fail when tools missing required name field", () => {
|
|
515
|
-
const parser = xanoscriptParser(`agent tools_missing_name {
|
|
516
|
-
canonical = "missing_123"
|
|
517
|
-
llm = {
|
|
518
|
-
type : "xano-free"
|
|
519
|
-
system_prompt: "You are a helpful assistant."
|
|
520
|
-
max_steps : 5
|
|
521
|
-
prompt : "some prompt"
|
|
522
|
-
temperature: 0.5
|
|
523
|
-
search_grounding: true
|
|
524
|
-
}
|
|
525
|
-
tools = [
|
|
526
|
-
{active: true, auth: "key1"}
|
|
527
|
-
]
|
|
528
|
-
}`);
|
|
529
|
-
|
|
530
|
-
expect(parser.errors).to.not.be.empty;
|
|
531
|
-
});
|
|
532
|
-
|
|
533
|
-
it("should parse agent with description and docs", () => {
|
|
534
|
-
const parser = xanoscriptParser(`agent full_featured {
|
|
535
|
-
canonical = "full_123"
|
|
536
|
-
description = "A fully featured agent with all fields"
|
|
537
|
-
docs = "This is documentation for the agent"
|
|
538
|
-
tags = ["ai", "assistant", "tools"]
|
|
539
|
-
llm = {
|
|
540
|
-
type : "anthropic"
|
|
541
|
-
system_prompt: "You are a helpful assistant."
|
|
542
|
-
max_steps : 10
|
|
543
|
-
prompt : "test"
|
|
544
|
-
model : "claude-4-sonnet-20250514"
|
|
545
|
-
temperature: 0.7
|
|
546
|
-
reasoning : true
|
|
547
|
-
headers : "[]"
|
|
548
|
-
}
|
|
549
|
-
tools = [
|
|
550
|
-
{name: "calculator", active: true},
|
|
551
|
-
{name: "weather", auth: "api_key"}
|
|
552
|
-
]
|
|
553
|
-
}`);
|
|
554
|
-
|
|
555
|
-
expect(parser.errors).to.be.empty;
|
|
556
|
-
});
|
|
557
|
-
|
|
558
|
-
it("should parse agent with history clause", () => {
|
|
559
|
-
const parser = xanoscriptParser(`agent with_history {
|
|
560
|
-
canonical = "history_123"
|
|
561
|
-
history = 100
|
|
562
|
-
llm = {
|
|
563
|
-
type : "xano-free"
|
|
564
|
-
system_prompt: "You are a helpful assistant."
|
|
565
|
-
max_steps : 5
|
|
566
|
-
prompt : "some prompt"
|
|
567
|
-
temperature: 0.5
|
|
568
|
-
search_grounding: true
|
|
569
|
-
}
|
|
570
|
-
tools = [
|
|
571
|
-
{name: "tool1"}
|
|
572
|
-
]
|
|
573
|
-
}`);
|
|
574
|
-
|
|
575
|
-
expect(parser.errors).to.be.empty;
|
|
576
|
-
});
|
|
577
|
-
|
|
578
|
-
it("should allow comments prior to agent declaration", () => {
|
|
579
|
-
const parser = xanoscriptParser(`// This is a comment
|
|
580
|
-
// on multiple lines
|
|
581
|
-
agent with_history {
|
|
582
|
-
canonical = "history_123"
|
|
583
|
-
history = 100
|
|
584
|
-
llm = {
|
|
585
|
-
type : "xano-free"
|
|
586
|
-
system_prompt: "You are a helpful assistant."
|
|
587
|
-
max_steps : 5
|
|
588
|
-
prompt : "some prompt"
|
|
589
|
-
temperature: 0.5
|
|
590
|
-
search_grounding: true
|
|
591
|
-
}
|
|
592
|
-
tools = [
|
|
593
|
-
{name: "tool1"}
|
|
594
|
-
]
|
|
595
|
-
}`);
|
|
596
|
-
|
|
597
|
-
expect(parser.errors).to.be.empty;
|
|
598
|
-
});
|
|
599
|
-
});
|