lua-cli 3.5.0-alpha.3 → 3.5.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +137 -689
- package/dist/api/agent.api.service.d.ts +1 -8
- package/dist/api/agent.api.service.js +1 -11
- package/dist/api/agent.api.service.js.map +1 -1
- package/dist/api/auth.api.service.d.ts +1 -1
- package/dist/api/auth.api.service.js +1 -1
- package/dist/api/auth.api.service.js.map +1 -1
- package/dist/api/backup.api.service.d.ts +80 -0
- package/dist/api/backup.api.service.js +101 -0
- package/dist/api/backup.api.service.js.map +1 -0
- package/dist/api/basket.api.service.d.ts +4 -5
- package/dist/api/basket.api.service.js +13 -18
- package/dist/api/basket.api.service.js.map +1 -1
- package/dist/api/cdn.api.service.d.ts +2 -0
- package/dist/api/cdn.api.service.js +2 -0
- package/dist/api/cdn.api.service.js.map +1 -1
- package/dist/api/chat.api.service.d.ts +10 -2
- package/dist/api/chat.api.service.js +21 -2
- package/dist/api/chat.api.service.js.map +1 -1
- package/dist/api/credentials.js +5 -8
- package/dist/api/credentials.js.map +1 -1
- package/dist/api/custom.data.api.service.d.ts +3 -3
- package/dist/api/custom.data.api.service.js +9 -10
- package/dist/api/custom.data.api.service.js.map +1 -1
- package/dist/api/developer.api.service.d.ts +1 -1
- package/dist/api/developer.api.service.js +1 -1
- package/dist/api/developer.api.service.js.map +1 -1
- package/dist/api/http.client.js.map +1 -0
- package/dist/api/job.api.service.d.ts +2 -2
- package/dist/api/job.api.service.js +2 -2
- package/dist/api/job.api.service.js.map +1 -1
- package/dist/api/logs.api.service.d.ts +1 -1
- package/dist/api/logs.api.service.js +1 -1
- package/dist/api/logs.api.service.js.map +1 -1
- package/dist/api/marketplace.api.service.d.ts +6 -6
- package/dist/api/marketplace.api.service.js.map +1 -1
- package/dist/api/order.api.service.d.ts +3 -4
- package/dist/api/order.api.service.js +8 -10
- package/dist/api/order.api.service.js.map +1 -1
- package/dist/api/persona.api.service.d.ts +1 -1
- package/dist/api/persona.api.service.js +1 -1
- package/dist/api/persona.api.service.js.map +1 -1
- package/dist/api/postprocessor.api.service.d.ts +1 -1
- package/dist/api/postprocessor.api.service.js +1 -1
- package/dist/api/postprocessor.api.service.js.map +1 -1
- package/dist/api/preprocessor.api.service.d.ts +1 -1
- package/dist/api/preprocessor.api.service.js +1 -1
- package/dist/api/preprocessor.api.service.js.map +1 -1
- package/dist/api/products.api.service.d.ts +4 -4
- package/dist/api/products.api.service.js +6 -6
- package/dist/api/products.api.service.js.map +1 -1
- package/dist/api/resource.api.service.d.ts +76 -0
- package/dist/api/resource.api.service.js +74 -0
- package/dist/api/resource.api.service.js.map +1 -0
- package/dist/api/skills.api.service.d.ts +7 -15
- package/dist/api/skills.api.service.js +1 -1
- package/dist/api/skills.api.service.js.map +1 -1
- package/dist/api/tool.api.service.d.ts +1 -1
- package/dist/api/tool.api.service.js +1 -1
- package/dist/api/tool.api.service.js.map +1 -1
- package/dist/api/unifiedto.api.service.d.ts +1 -1
- package/dist/api/unifiedto.api.service.js +1 -1
- package/dist/api/unifiedto.api.service.js.map +1 -1
- package/dist/api/user.data.api.service.d.ts +7 -8
- package/dist/api/user.data.api.service.js +2 -3
- package/dist/api/user.data.api.service.js.map +1 -1
- package/dist/api/webhook.api.service.d.ts +1 -1
- package/dist/api/webhook.api.service.js +1 -1
- package/dist/api/webhook.api.service.js.map +1 -1
- package/dist/api/whatsapp-templates.api.service.d.ts +1 -1
- package/dist/api/whatsapp-templates.api.service.js +1 -1
- package/dist/api/whatsapp-templates.api.service.js.map +1 -1
- package/dist/api-exports.d.ts +14 -12
- package/dist/api-exports.js +8 -8
- package/dist/api-exports.js.map +1 -1
- package/dist/cli/command-definitions.js +32 -17
- package/dist/cli/command-definitions.js.map +1 -1
- package/dist/commands/admin.js +3 -24
- package/dist/commands/admin.js.map +1 -1
- package/dist/commands/agents.d.ts +8 -7
- package/dist/commands/agents.js +63 -21
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/channels.js +11 -23
- package/dist/commands/channels.js.map +1 -1
- package/dist/commands/chat.js +33 -47
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/chatClear.js +11 -41
- package/dist/commands/chatClear.js.map +1 -1
- package/dist/commands/compile.d.ts +26 -23
- package/dist/commands/compile.js +98 -403
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/completion.js +1 -1
- package/dist/commands/completion.js.map +1 -1
- package/dist/commands/deploy.js +55 -25
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/dev.js +29 -45
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/env.js +12 -25
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/evals.js +3 -20
- package/dist/commands/evals.js.map +1 -1
- package/dist/commands/features.js +10 -23
- package/dist/commands/features.js.map +1 -1
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.js +1 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.js +135 -19
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/integrations.js +26 -37
- package/dist/commands/integrations.js.map +1 -1
- package/dist/commands/jobs.js +32 -56
- package/dist/commands/jobs.js.map +1 -1
- package/dist/commands/logs.js +9 -20
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/marketplace.js +34 -52
- package/dist/commands/marketplace.js.map +1 -1
- package/dist/commands/mcp.js +10 -23
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/persona.js +43 -74
- package/dist/commands/persona.js.map +1 -1
- package/dist/commands/postprocessors.js +15 -28
- package/dist/commands/postprocessors.js.map +1 -1
- package/dist/commands/preprocessors.js +15 -28
- package/dist/commands/preprocessors.js.map +1 -1
- package/dist/commands/production.js +30 -63
- package/dist/commands/production.js.map +1 -1
- package/dist/commands/push.js +294 -1241
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/pushBackup.d.ts +22 -0
- package/dist/commands/pushBackup.js +133 -0
- package/dist/commands/pushBackup.js.map +1 -0
- package/dist/commands/resources.js +29 -72
- package/dist/commands/resources.js.map +1 -1
- package/dist/commands/skills.d.ts +1 -1
- package/dist/commands/skills.js +58 -70
- package/dist/commands/skills.js.map +1 -1
- package/dist/commands/sync.d.ts +1 -3
- package/dist/commands/sync.js +12 -24
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/test.js +135 -104
- package/dist/commands/test.js.map +1 -1
- package/dist/commands/webhooks.js +15 -28
- package/dist/commands/webhooks.js.map +1 -1
- package/dist/compiler/agent-traverser.d.ts +104 -0
- package/dist/compiler/agent-traverser.js +311 -0
- package/dist/compiler/agent-traverser.js.map +1 -0
- package/dist/compiler/bundler.d.ts +42 -0
- package/dist/compiler/bundler.js +187 -0
- package/dist/compiler/bundler.js.map +1 -0
- package/dist/compiler/compiler.d.ts +177 -0
- package/dist/compiler/compiler.js +580 -0
- package/dist/compiler/compiler.js.map +1 -0
- package/dist/compiler/index.d.ts +36 -0
- package/dist/compiler/index.js +42 -0
- package/dist/compiler/index.js.map +1 -0
- package/dist/compiler/plugins/base.d.ts +264 -0
- package/dist/compiler/plugins/base.js +307 -0
- package/dist/compiler/plugins/base.js.map +1 -0
- package/dist/compiler/plugins/job.plugin.d.ts +33 -0
- package/dist/compiler/plugins/job.plugin.js +143 -0
- package/dist/compiler/plugins/job.plugin.js.map +1 -0
- package/dist/compiler/plugins/mcp-server.plugin.d.ts +50 -0
- package/dist/compiler/plugins/mcp-server.plugin.js +186 -0
- package/dist/compiler/plugins/mcp-server.plugin.js.map +1 -0
- package/dist/compiler/plugins/postprocessor.plugin.d.ts +20 -0
- package/dist/compiler/plugins/postprocessor.plugin.js +39 -0
- package/dist/compiler/plugins/postprocessor.plugin.js.map +1 -0
- package/dist/compiler/plugins/preprocessor.plugin.d.ts +20 -0
- package/dist/compiler/plugins/preprocessor.plugin.js +48 -0
- package/dist/compiler/plugins/preprocessor.plugin.js.map +1 -0
- package/dist/compiler/plugins/processor-base.d.ts +16 -0
- package/dist/compiler/plugins/processor-base.js +34 -0
- package/dist/compiler/plugins/processor-base.js.map +1 -0
- package/dist/compiler/plugins/registry.d.ts +61 -0
- package/dist/compiler/plugins/registry.js +107 -0
- package/dist/compiler/plugins/registry.js.map +1 -0
- package/dist/compiler/plugins/skill.plugin.d.ts +71 -0
- package/dist/compiler/plugins/skill.plugin.js +243 -0
- package/dist/compiler/plugins/skill.plugin.js.map +1 -0
- package/dist/compiler/plugins/tool.plugin.d.ts +67 -0
- package/dist/compiler/plugins/tool.plugin.js +279 -0
- package/dist/compiler/plugins/tool.plugin.js.map +1 -0
- package/dist/compiler/plugins/webhook.plugin.d.ts +37 -0
- package/dist/compiler/plugins/webhook.plugin.js +127 -0
- package/dist/compiler/plugins/webhook.plugin.js.map +1 -0
- package/dist/compiler/source-writer.d.ts +98 -0
- package/dist/compiler/source-writer.js +223 -0
- package/dist/compiler/source-writer.js.map +1 -0
- package/dist/compiler/types.d.ts +289 -0
- package/dist/compiler/types.js +20 -0
- package/dist/compiler/types.js.map +1 -0
- package/dist/compiler/utils/ast-helpers.d.ts +57 -0
- package/dist/compiler/utils/ast-helpers.js +164 -0
- package/dist/compiler/utils/ast-helpers.js.map +1 -0
- package/dist/compiler/utils/common.d.ts +23 -0
- package/dist/compiler/utils/common.js +66 -0
- package/dist/compiler/utils/common.js.map +1 -0
- package/dist/compiler/utils/file-discovery.d.ts +34 -0
- package/dist/compiler/utils/file-discovery.js +68 -0
- package/dist/compiler/utils/file-discovery.js.map +1 -0
- package/dist/compiler/utils/path-resolver.d.ts +25 -0
- package/dist/compiler/utils/path-resolver.js +66 -0
- package/dist/compiler/utils/path-resolver.js.map +1 -0
- package/dist/compiler/utils/schema-converter.d.ts +26 -0
- package/dist/compiler/utils/schema-converter.js +94 -0
- package/dist/compiler/utils/schema-converter.js.map +1 -0
- package/dist/config/compile.constants.d.ts +2 -22
- package/dist/config/compile.constants.js +2 -49
- package/dist/config/compile.constants.js.map +1 -1
- package/dist/config/constants.d.ts +18 -2
- package/dist/config/constants.js +28 -8
- package/dist/config/constants.js.map +1 -1
- package/dist/config/dev.constants.d.ts +0 -10
- package/dist/config/dev.constants.js +0 -10
- package/dist/config/dev.constants.js.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/instances/basket.instance.js.map +1 -0
- package/dist/instances/data.entry.instance.js.map +1 -0
- package/dist/instances/job.instance.js.map +1 -0
- package/dist/instances/order.instance.js.map +1 -0
- package/dist/instances/product.instance.js.map +1 -0
- package/dist/instances/product.pagination.instance.js.map +1 -0
- package/dist/instances/product.search.instance.js.map +1 -0
- package/dist/instances/user.instance.js.map +1 -0
- package/dist/interfaces/admin.d.ts +0 -38
- package/dist/interfaces/backup.d.ts +125 -0
- package/dist/interfaces/backup.js +8 -0
- package/dist/interfaces/backup.js.map +1 -0
- package/dist/interfaces/baskets.d.ts +0 -56
- package/dist/interfaces/common.d.ts +1 -0
- package/dist/interfaces/deploy.d.ts +0 -15
- package/dist/interfaces/index.d.ts +1 -1
- package/dist/interfaces/marketplace.d.ts +51 -0
- package/dist/interfaces/marketplace.js +1 -1
- package/dist/interfaces/marketplace.js.map +1 -1
- package/dist/interfaces/message.d.ts +0 -3
- package/dist/interfaces/orders.d.ts +0 -24
- package/dist/interfaces/postprocessors.d.ts +0 -18
- package/dist/interfaces/preprocessors.d.ts +0 -18
- package/dist/interfaces/skills.d.ts +61 -0
- package/dist/interfaces/user.d.ts +25 -0
- package/dist/interfaces/webhooks.d.ts +0 -9
- package/dist/primitives/base.handler.d.ts +106 -0
- package/dist/primitives/base.handler.js +370 -0
- package/dist/primitives/base.handler.js.map +1 -0
- package/dist/primitives/index.d.ts +47 -0
- package/dist/primitives/index.js +78 -0
- package/dist/primitives/index.js.map +1 -0
- package/dist/primitives/job.handler.d.ts +52 -0
- package/dist/primitives/job.handler.js +118 -0
- package/dist/primitives/job.handler.js.map +1 -0
- package/dist/primitives/mcp-server.handler.d.ts +54 -0
- package/dist/primitives/mcp-server.handler.js +91 -0
- package/dist/primitives/mcp-server.handler.js.map +1 -0
- package/dist/primitives/postprocessor.handler.d.ts +49 -0
- package/dist/primitives/postprocessor.handler.js +81 -0
- package/dist/primitives/postprocessor.handler.js.map +1 -0
- package/dist/primitives/preprocessor.handler.d.ts +54 -0
- package/dist/primitives/preprocessor.handler.js +95 -0
- package/dist/primitives/preprocessor.handler.js.map +1 -0
- package/dist/primitives/skill.handler.d.ts +44 -0
- package/dist/primitives/skill.handler.js +192 -0
- package/dist/primitives/skill.handler.js.map +1 -0
- package/dist/primitives/types.d.ts +72 -0
- package/dist/primitives/types.js +17 -0
- package/dist/primitives/types.js.map +1 -0
- package/dist/primitives/webhook.handler.d.ts +50 -0
- package/dist/primitives/webhook.handler.js +96 -0
- package/dist/primitives/webhook.handler.js.map +1 -0
- package/dist/services/auth.js +1 -2
- package/dist/services/auth.js.map +1 -1
- package/dist/services/sandbox.service.d.ts +103 -0
- package/dist/services/sandbox.service.js +479 -0
- package/dist/services/sandbox.service.js.map +1 -0
- package/dist/types/api-contracts.d.ts +1 -1
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/skill.d.ts +8 -2
- package/dist/types/skill.js +8 -0
- package/dist/types/skill.js.map +1 -1
- package/dist/types/yaml.types.d.ts +69 -0
- package/dist/types/yaml.types.js +6 -0
- package/dist/types/yaml.types.js.map +1 -0
- package/dist/utils/artifact-loader.d.ts +108 -0
- package/dist/utils/artifact-loader.js +188 -0
- package/dist/utils/artifact-loader.js.map +1 -0
- package/dist/utils/backup-helpers.d.ts +122 -0
- package/dist/utils/backup-helpers.js +274 -0
- package/dist/utils/backup-helpers.js.map +1 -0
- package/dist/utils/cli.d.ts +8 -0
- package/dist/utils/cli.js +19 -2
- package/dist/utils/cli.js.map +1 -1
- package/dist/utils/command-utils.d.ts +42 -0
- package/dist/utils/command-utils.js +83 -0
- package/dist/utils/command-utils.js.map +1 -0
- package/dist/utils/deploy-helpers.d.ts +0 -29
- package/dist/utils/deploy-helpers.js +0 -70
- package/dist/utils/deploy-helpers.js.map +1 -1
- package/dist/utils/dev-api.d.ts +3 -99
- package/dist/utils/dev-api.js +3 -430
- package/dist/utils/dev-api.js.map +1 -1
- package/dist/utils/dev-server.d.ts +3 -1
- package/dist/utils/dev-server.js +69 -145
- package/dist/utils/dev-server.js.map +1 -1
- package/dist/utils/dev-watcher.d.ts +0 -1
- package/dist/utils/dev-watcher.js +23 -8
- package/dist/utils/dev-watcher.js.map +1 -1
- package/dist/utils/env-loader.utils.d.ts +10 -1
- package/dist/utils/env-loader.utils.js +39 -31
- package/dist/utils/env-loader.utils.js.map +1 -1
- package/dist/utils/files.d.ts +47 -3
- package/dist/utils/files.js +98 -40
- package/dist/utils/files.js.map +1 -1
- package/dist/utils/init-agent.js +1 -2
- package/dist/utils/init-agent.js.map +1 -1
- package/dist/utils/init-helpers.d.ts +2 -10
- package/dist/utils/init-helpers.js +9 -17
- package/dist/utils/init-helpers.js.map +1 -1
- package/dist/utils/init-prompts.d.ts +0 -8
- package/dist/utils/init-prompts.js +0 -22
- package/dist/utils/init-prompts.js.map +1 -1
- package/dist/utils/prompt-handler.d.ts +3 -0
- package/dist/utils/prompt-handler.js +13 -0
- package/dist/utils/prompt-handler.js.map +1 -1
- package/dist/utils/sandbox-storage.d.ts +6 -5
- package/dist/utils/sandbox-storage.js +12 -12
- package/dist/utils/sandbox-storage.js.map +1 -1
- package/dist/utils/sandbox.d.ts +7 -30
- package/dist/utils/sandbox.js +247 -223
- package/dist/utils/sandbox.js.map +1 -1
- package/dist/utils/semver.d.ts +12 -0
- package/dist/utils/semver.js +23 -0
- package/dist/utils/semver.js.map +1 -1
- package/dist/utils/sync-display.d.ts +9 -0
- package/dist/utils/sync-display.js +67 -0
- package/dist/utils/sync-display.js.map +1 -0
- package/dist/utils/sync-fetch.d.ts +23 -0
- package/dist/utils/sync-fetch.js +64 -0
- package/dist/utils/sync-fetch.js.map +1 -0
- package/dist/utils/sync-helpers.d.ts +4 -59
- package/dist/utils/sync-helpers.js +4 -206
- package/dist/utils/sync-helpers.js.map +1 -1
- package/dist/web/app.css +912 -186
- package/dist/web/app.js +46 -46
- package/docs/API_INDEX.md +100 -0
- package/docs/API_REFERENCE.md +773 -0
- package/docs/CLI_REFERENCE.md +924 -0
- package/docs/GETTING_STARTED.md +862 -0
- package/docs/README.md +270 -0
- package/docs/api/AI.md +882 -0
- package/docs/api/Baskets.md +511 -0
- package/docs/api/CDN.md +524 -0
- package/docs/api/Data.md +446 -0
- package/docs/api/Jobs.md +524 -0
- package/docs/api/LuaAgent.md +454 -0
- package/docs/api/LuaJob.md +604 -0
- package/docs/api/LuaSkill.md +396 -0
- package/docs/api/LuaTool.md +521 -0
- package/docs/api/LuaWebhook.md +601 -0
- package/docs/api/Orders.md +514 -0
- package/docs/api/PostProcessor.md +565 -0
- package/docs/api/PreProcessor.md +630 -0
- package/docs/api/Products.md +507 -0
- package/docs/api/Templates.md +662 -0
- package/docs/api/User.md +567 -0
- package/docs/archive/DEVELOPMENT_GUIDE_V1.md +1294 -0
- package/docs/compiler-v2/ASSESSMENT.md +205 -0
- package/docs/compiler-v2/TEST_PLAN.md +306 -0
- package/package.json +3 -7
- package/template/tsconfig.json +1 -1
- package/dist/common/basket.instance.js.map +0 -1
- package/dist/common/data.entry.instance.js.map +0 -1
- package/dist/common/http.client.js.map +0 -1
- package/dist/common/job.instance.js.map +0 -1
- package/dist/common/order.instance.js.map +0 -1
- package/dist/common/product.instance.js.map +0 -1
- package/dist/common/product.pagination.instance.js.map +0 -1
- package/dist/common/product.search.instance.js.map +0 -1
- package/dist/common/user.instance.js.map +0 -1
- package/dist/config/auth.constants.d.ts +0 -11
- package/dist/config/auth.constants.js +0 -12
- package/dist/config/auth.constants.js.map +0 -1
- package/dist/config/init.constants.d.ts +0 -15
- package/dist/config/init.constants.js +0 -20
- package/dist/config/init.constants.js.map +0 -1
- package/dist/interfaces/compile.d.ts +0 -12
- package/dist/interfaces/compile.js +0 -5
- package/dist/interfaces/compile.js.map +0 -1
- package/dist/types/compile.types.d.ts +0 -131
- package/dist/types/compile.types.js +0 -6
- package/dist/types/compile.types.js.map +0 -1
- package/dist/utils/agent-code-utils.d.ts +0 -25
- package/dist/utils/agent-code-utils.js +0 -107
- package/dist/utils/agent-code-utils.js.map +0 -1
- package/dist/utils/bundling.d.ts +0 -89
- package/dist/utils/bundling.js +0 -1068
- package/dist/utils/bundling.js.map +0 -1
- package/dist/utils/compile.d.ts +0 -116
- package/dist/utils/compile.js +0 -1062
- package/dist/utils/compile.js.map +0 -1
- package/dist/utils/deploy-api.d.ts +0 -26
- package/dist/utils/deploy-api.js +0 -54
- package/dist/utils/deploy-api.js.map +0 -1
- package/dist/utils/deployment.d.ts +0 -26
- package/dist/utils/deployment.js +0 -218
- package/dist/utils/deployment.js.map +0 -1
- package/dist/utils/dev-helpers.d.ts +0 -47
- package/dist/utils/dev-helpers.js +0 -82
- package/dist/utils/dev-helpers.js.map +0 -1
- package/dist/utils/job-management.d.ts +0 -27
- package/dist/utils/job-management.js +0 -248
- package/dist/utils/job-management.js.map +0 -1
- package/dist/utils/mcp-server-management.d.ts +0 -26
- package/dist/utils/mcp-server-management.js +0 -197
- package/dist/utils/mcp-server-management.js.map +0 -1
- package/dist/utils/postprocessor-management.d.ts +0 -9
- package/dist/utils/postprocessor-management.js +0 -117
- package/dist/utils/postprocessor-management.js.map +0 -1
- package/dist/utils/pre-bundle-jobs.d.ts +0 -27
- package/dist/utils/pre-bundle-jobs.js +0 -189
- package/dist/utils/pre-bundle-jobs.js.map +0 -1
- package/dist/utils/preprocessor-management.d.ts +0 -9
- package/dist/utils/preprocessor-management.js +0 -117
- package/dist/utils/preprocessor-management.js.map +0 -1
- package/dist/utils/push-api.d.ts +0 -15
- package/dist/utils/push-api.js +0 -49
- package/dist/utils/push-api.js.map +0 -1
- package/dist/utils/push-helpers.d.ts +0 -82
- package/dist/utils/push-helpers.js +0 -246
- package/dist/utils/push-helpers.js.map +0 -1
- package/dist/utils/skill-management.d.ts +0 -39
- package/dist/utils/skill-management.js +0 -299
- package/dist/utils/skill-management.js.map +0 -1
- package/dist/utils/test-helpers.d.ts +0 -33
- package/dist/utils/test-helpers.js +0 -84
- package/dist/utils/test-helpers.js.map +0 -1
- package/dist/utils/test-prompts.d.ts +0 -23
- package/dist/utils/test-prompts.js +0 -187
- package/dist/utils/test-prompts.js.map +0 -1
- package/dist/utils/tool-detection.d.ts +0 -19
- package/dist/utils/tool-detection.js +0 -125
- package/dist/utils/tool-detection.js.map +0 -1
- package/dist/utils/webhook-management.d.ts +0 -27
- package/dist/utils/webhook-management.js +0 -241
- package/dist/utils/webhook-management.js.map +0 -1
- /package/dist/{common → api}/http.client.d.ts +0 -0
- /package/dist/{common → api}/http.client.js +0 -0
- /package/dist/{common → instances}/basket.instance.d.ts +0 -0
- /package/dist/{common → instances}/basket.instance.js +0 -0
- /package/dist/{common → instances}/data.entry.instance.d.ts +0 -0
- /package/dist/{common → instances}/data.entry.instance.js +0 -0
- /package/dist/{common → instances}/job.instance.d.ts +0 -0
- /package/dist/{common → instances}/job.instance.js +0 -0
- /package/dist/{common → instances}/order.instance.d.ts +0 -0
- /package/dist/{common → instances}/order.instance.js +0 -0
- /package/dist/{common → instances}/product.instance.d.ts +0 -0
- /package/dist/{common → instances}/product.instance.js +0 -0
- /package/dist/{common → instances}/product.pagination.instance.d.ts +0 -0
- /package/dist/{common → instances}/product.pagination.instance.js +0 -0
- /package/dist/{common → instances}/product.search.instance.d.ts +0 -0
- /package/dist/{common → instances}/product.search.instance.js +0 -0
- /package/dist/{common → instances}/user.instance.d.ts +0 -0
- /package/dist/{common → instances}/user.instance.js +0 -0
|
@@ -0,0 +1,521 @@
|
|
|
1
|
+
# LuaTool
|
|
2
|
+
|
|
3
|
+
The `LuaTool` interface defines the structure for creating custom tools that your AI agent can use. Tools are functions with validated inputs and well-defined outputs.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
import { LuaTool } from 'lua-cli/skill';
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
Tools are the building blocks of your agent's capabilities. Each tool:
|
|
14
|
+
- Has a unique name
|
|
15
|
+
- Describes what it does
|
|
16
|
+
- Validates its inputs with Zod schemas
|
|
17
|
+
- Executes custom logic
|
|
18
|
+
- Returns structured data
|
|
19
|
+
|
|
20
|
+
## Interface Definition
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
interface LuaTool<TInput extends ZodType = ZodType> {
|
|
24
|
+
/**
|
|
25
|
+
* Unique tool name (lowercase, underscores only)
|
|
26
|
+
* Example: 'get_weather', 'create_order'
|
|
27
|
+
*/
|
|
28
|
+
name: string;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Human-readable description of what the tool does
|
|
32
|
+
* The AI uses this to understand when to call the tool
|
|
33
|
+
*/
|
|
34
|
+
description: string;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Zod schema defining the input structure
|
|
38
|
+
* Validates and type-checks all inputs
|
|
39
|
+
*/
|
|
40
|
+
inputSchema: TInput;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Optional Zod schema defining the output structure
|
|
44
|
+
* Used for documentation and validation
|
|
45
|
+
*/
|
|
46
|
+
outputSchema?: ZodType;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* The function that executes when the tool is called
|
|
50
|
+
* @param input - Validated input matching inputSchema
|
|
51
|
+
* @returns Promise resolving to the tool's output
|
|
52
|
+
*/
|
|
53
|
+
execute: (input: z.infer<TInput>) => Promise<any>;
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Creating a Tool
|
|
58
|
+
|
|
59
|
+
### Basic Example
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
import { LuaTool } from 'lua-cli/skill';
|
|
63
|
+
import { z } from 'zod';
|
|
64
|
+
|
|
65
|
+
export default class GreetingTool implements LuaTool {
|
|
66
|
+
name = 'greet_user';
|
|
67
|
+
description = 'Generate a personalized greeting';
|
|
68
|
+
|
|
69
|
+
inputSchema = z.object({
|
|
70
|
+
name: z.string().describe('User name'),
|
|
71
|
+
language: z.enum(['en', 'es', 'fr']).optional().describe('Language code')
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
async execute(input: z.infer<typeof this.inputSchema>) {
|
|
75
|
+
const greetings = {
|
|
76
|
+
en: `Hello, ${input.name}!`,
|
|
77
|
+
es: `¡Hola, ${input.name}!`,
|
|
78
|
+
fr: `Bonjour, ${input.name}!`
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
const lang = input.language || 'en';
|
|
82
|
+
return { greeting: greetings[lang] };
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### With Output Schema
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
import { LuaTool } from 'lua-cli/skill';
|
|
91
|
+
import { z } from 'zod';
|
|
92
|
+
|
|
93
|
+
export default class CalculatorTool implements LuaTool {
|
|
94
|
+
name = 'calculator';
|
|
95
|
+
description = 'Perform mathematical calculations';
|
|
96
|
+
|
|
97
|
+
inputSchema = z.object({
|
|
98
|
+
operation: z.enum(['add', 'subtract', 'multiply', 'divide']),
|
|
99
|
+
a: z.number(),
|
|
100
|
+
b: z.number()
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
outputSchema = z.object({
|
|
104
|
+
result: z.number(),
|
|
105
|
+
operation: z.string()
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
async execute(input: z.infer<typeof this.inputSchema>) {
|
|
109
|
+
let result: number;
|
|
110
|
+
|
|
111
|
+
switch (input.operation) {
|
|
112
|
+
case 'add':
|
|
113
|
+
result = input.a + input.b;
|
|
114
|
+
break;
|
|
115
|
+
case 'subtract':
|
|
116
|
+
result = input.a - input.b;
|
|
117
|
+
break;
|
|
118
|
+
case 'multiply':
|
|
119
|
+
result = input.a * input.b;
|
|
120
|
+
break;
|
|
121
|
+
case 'divide':
|
|
122
|
+
if (input.b === 0) {
|
|
123
|
+
throw new Error('Division by zero');
|
|
124
|
+
}
|
|
125
|
+
result = input.a / input.b;
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return {
|
|
130
|
+
result,
|
|
131
|
+
operation: input.operation
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Using Runtime APIs
|
|
138
|
+
|
|
139
|
+
Tools can access Lua platform APIs:
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
import { LuaTool, User, Products, Data } from 'lua-cli/skill';
|
|
143
|
+
import { z } from 'zod';
|
|
144
|
+
|
|
145
|
+
export default class UserPreferencesTool implements LuaTool {
|
|
146
|
+
name = 'save_user_preferences';
|
|
147
|
+
description = 'Save user preferences for personalization';
|
|
148
|
+
|
|
149
|
+
inputSchema = z.object({
|
|
150
|
+
theme: z.enum(['light', 'dark']).optional(),
|
|
151
|
+
language: z.string().optional(),
|
|
152
|
+
notifications: z.boolean().optional()
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
async execute(input: z.infer<typeof this.inputSchema>) {
|
|
156
|
+
// Get current user
|
|
157
|
+
const user = await User.get();
|
|
158
|
+
|
|
159
|
+
// Update user data
|
|
160
|
+
await user.update({
|
|
161
|
+
preferences: {
|
|
162
|
+
theme: input.theme,
|
|
163
|
+
language: input.language,
|
|
164
|
+
notifications: input.notifications
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
return {
|
|
169
|
+
success: true,
|
|
170
|
+
message: 'Preferences saved successfully',
|
|
171
|
+
preferences: input
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## External API Integration
|
|
178
|
+
|
|
179
|
+
```typescript
|
|
180
|
+
import { LuaTool } from 'lua-cli/skill';
|
|
181
|
+
import { z } from 'zod';
|
|
182
|
+
import axios from 'axios';
|
|
183
|
+
import { env } from 'lua-cli/skill';
|
|
184
|
+
|
|
185
|
+
export default class WeatherTool implements LuaTool {
|
|
186
|
+
name = 'get_weather';
|
|
187
|
+
description = 'Get current weather for any city';
|
|
188
|
+
|
|
189
|
+
inputSchema = z.object({
|
|
190
|
+
city: z.string().describe('City name'),
|
|
191
|
+
units: z.enum(['metric', 'imperial']).default('metric')
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
outputSchema = z.object({
|
|
195
|
+
temperature: z.number(),
|
|
196
|
+
condition: z.string(),
|
|
197
|
+
humidity: z.number(),
|
|
198
|
+
city: z.string()
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
async execute(input: z.infer<typeof this.inputSchema>) {
|
|
202
|
+
const apiKey = env('WEATHER_API_KEY');
|
|
203
|
+
|
|
204
|
+
if (!apiKey) {
|
|
205
|
+
throw new Error('WEATHER_API_KEY not configured');
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
try {
|
|
209
|
+
const response = await axios.get('https://api.openweathermap.org/data/2.5/weather', {
|
|
210
|
+
params: {
|
|
211
|
+
q: input.city,
|
|
212
|
+
appid: apiKey,
|
|
213
|
+
units: input.units
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
return {
|
|
218
|
+
temperature: response.data.main.temp,
|
|
219
|
+
condition: response.data.weather[0].main,
|
|
220
|
+
humidity: response.data.main.humidity,
|
|
221
|
+
city: input.city
|
|
222
|
+
};
|
|
223
|
+
} catch (error) {
|
|
224
|
+
if (axios.isAxiosError(error)) {
|
|
225
|
+
throw new Error(`Weather API error: ${error.message}`);
|
|
226
|
+
}
|
|
227
|
+
throw error;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
## Error Handling
|
|
234
|
+
|
|
235
|
+
```typescript
|
|
236
|
+
import { LuaTool, Products } from 'lua-cli/skill';
|
|
237
|
+
import { z } from 'zod';
|
|
238
|
+
|
|
239
|
+
export default class GetProductTool implements LuaTool {
|
|
240
|
+
name = 'get_product';
|
|
241
|
+
description = 'Retrieve a product by ID';
|
|
242
|
+
|
|
243
|
+
inputSchema = z.object({
|
|
244
|
+
productId: z.string()
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
async execute(input: z.infer<typeof this.inputSchema>) {
|
|
248
|
+
try {
|
|
249
|
+
const product = await Products.getById(input.productId);
|
|
250
|
+
|
|
251
|
+
if (!product) {
|
|
252
|
+
return {
|
|
253
|
+
success: false,
|
|
254
|
+
error: 'Product not found',
|
|
255
|
+
productId: input.productId
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
return {
|
|
260
|
+
success: true,
|
|
261
|
+
product: {
|
|
262
|
+
id: product.id,
|
|
263
|
+
name: product.name,
|
|
264
|
+
price: product.price,
|
|
265
|
+
stock: product.stock
|
|
266
|
+
}
|
|
267
|
+
};
|
|
268
|
+
} catch (error) {
|
|
269
|
+
return {
|
|
270
|
+
success: false,
|
|
271
|
+
error: error instanceof Error ? error.message : 'Unknown error'
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
## Complex Tool with State
|
|
279
|
+
|
|
280
|
+
```typescript
|
|
281
|
+
import { LuaTool, Data } from 'lua-cli/skill';
|
|
282
|
+
import { z } from 'zod';
|
|
283
|
+
|
|
284
|
+
export default class GameTool implements LuaTool {
|
|
285
|
+
name = 'play_game';
|
|
286
|
+
description = 'Play a number guessing game';
|
|
287
|
+
|
|
288
|
+
inputSchema = z.object({
|
|
289
|
+
action: z.enum(['start', 'guess', 'status']),
|
|
290
|
+
guess: z.number().min(1).max(100).optional()
|
|
291
|
+
});
|
|
292
|
+
|
|
293
|
+
async execute(input: z.infer<typeof this.inputSchema>) {
|
|
294
|
+
// Use Data API to persist game state
|
|
295
|
+
const games = await Data.get('games');
|
|
296
|
+
let gameState = games.length > 0 ? games[0].data : null;
|
|
297
|
+
|
|
298
|
+
if (input.action === 'start') {
|
|
299
|
+
// Start new game
|
|
300
|
+
const secretNumber = Math.floor(Math.random() * 100) + 1;
|
|
301
|
+
gameState = {
|
|
302
|
+
secretNumber,
|
|
303
|
+
attempts: 0,
|
|
304
|
+
started: new Date()
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
await Data.create('games', gameState);
|
|
308
|
+
|
|
309
|
+
return {
|
|
310
|
+
message: 'Game started! Guess a number between 1 and 100',
|
|
311
|
+
attempts: 0
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
if (input.action === 'guess') {
|
|
316
|
+
if (!gameState) {
|
|
317
|
+
return { error: 'No active game. Use action: "start"' };
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
gameState.attempts++;
|
|
321
|
+
|
|
322
|
+
if (input.guess === gameState.secretNumber) {
|
|
323
|
+
await Data.delete('games', gameState.id);
|
|
324
|
+
return {
|
|
325
|
+
message: '🎉 Correct! You won!',
|
|
326
|
+
attempts: gameState.attempts
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
const hint = input.guess! < gameState.secretNumber ? 'higher' : 'lower';
|
|
331
|
+
await Data.update('games', gameState.id, gameState);
|
|
332
|
+
|
|
333
|
+
return {
|
|
334
|
+
message: `Try ${hint}`,
|
|
335
|
+
attempts: gameState.attempts
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
// Status
|
|
340
|
+
if (!gameState) {
|
|
341
|
+
return { message: 'No active game' };
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
return {
|
|
345
|
+
message: 'Game in progress',
|
|
346
|
+
attempts: gameState.attempts
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
## Tool Composition
|
|
353
|
+
|
|
354
|
+
Tools can call other tools or create jobs:
|
|
355
|
+
|
|
356
|
+
```typescript
|
|
357
|
+
import { LuaTool, Jobs, JobInstance } from 'lua-cli/skill';
|
|
358
|
+
import { z } from 'zod';
|
|
359
|
+
|
|
360
|
+
export default class ReminderTool implements LuaTool {
|
|
361
|
+
name = 'set_reminder';
|
|
362
|
+
description = 'Set a reminder to notify user later';
|
|
363
|
+
|
|
364
|
+
inputSchema = z.object({
|
|
365
|
+
message: z.string(),
|
|
366
|
+
minutes: z.number().min(1).max(1440)
|
|
367
|
+
});
|
|
368
|
+
|
|
369
|
+
async execute(input: z.infer<typeof this.inputSchema>) {
|
|
370
|
+
// Create a job that will notify the user later
|
|
371
|
+
const job = await Jobs.create({
|
|
372
|
+
name: `reminder-${Date.now()}`,
|
|
373
|
+
description: 'User reminder',
|
|
374
|
+
metadata: {
|
|
375
|
+
message: input.message
|
|
376
|
+
},
|
|
377
|
+
schedule: {
|
|
378
|
+
type: 'once',
|
|
379
|
+
executeAt: new Date(Date.now() + input.minutes * 60000)
|
|
380
|
+
},
|
|
381
|
+
execute: async (jobInstance: JobInstance) => {
|
|
382
|
+
const user = await jobInstance.user();
|
|
383
|
+
await user.send([{
|
|
384
|
+
type: 'text',
|
|
385
|
+
text: `⏰ Reminder: ${jobInstance.metadata.message}`
|
|
386
|
+
}]);
|
|
387
|
+
return { success: true };
|
|
388
|
+
}
|
|
389
|
+
});
|
|
390
|
+
|
|
391
|
+
return {
|
|
392
|
+
success: true,
|
|
393
|
+
message: `Reminder set for ${input.minutes} minutes from now`,
|
|
394
|
+
jobId: job.id
|
|
395
|
+
};
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
## Naming Conventions
|
|
401
|
+
|
|
402
|
+
### ✅ Good Names
|
|
403
|
+
- `get_weather` - Action + noun, clear purpose
|
|
404
|
+
- `create_order` - Verb + noun, describes action
|
|
405
|
+
- `search_products` - Clear, specific
|
|
406
|
+
- `calculate_tax` - Action verb, specific
|
|
407
|
+
|
|
408
|
+
### ❌ Bad Names
|
|
409
|
+
- `weather` - Too vague, unclear if getting or setting
|
|
410
|
+
- `doIt` - Meaningless
|
|
411
|
+
- `tool1` - Not descriptive
|
|
412
|
+
- `get-weather` - Use underscores, not hyphens
|
|
413
|
+
|
|
414
|
+
## Best Practices
|
|
415
|
+
|
|
416
|
+
### 1. Single Responsibility
|
|
417
|
+
Each tool should do one thing well:
|
|
418
|
+
|
|
419
|
+
```typescript
|
|
420
|
+
// ✅ Good - Focused purpose
|
|
421
|
+
class GetWeatherTool { }
|
|
422
|
+
class GetForecastTool { }
|
|
423
|
+
|
|
424
|
+
// ❌ Bad - Too many responsibilities
|
|
425
|
+
class WeatherAndNewsAndStocksTool { }
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
### 2. Descriptive Schemas
|
|
429
|
+
|
|
430
|
+
```typescript
|
|
431
|
+
// ✅ Good - With descriptions
|
|
432
|
+
inputSchema = z.object({
|
|
433
|
+
email: z.string().email().describe('User email address'),
|
|
434
|
+
sendCopy: z.boolean().optional().describe('Send copy to user')
|
|
435
|
+
});
|
|
436
|
+
|
|
437
|
+
// ❌ Bad - No context
|
|
438
|
+
inputSchema = z.object({
|
|
439
|
+
email: z.string(),
|
|
440
|
+
sendCopy: z.boolean()
|
|
441
|
+
});
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
### 3. Structured Returns
|
|
445
|
+
|
|
446
|
+
```typescript
|
|
447
|
+
// ✅ Good - Structured object
|
|
448
|
+
return {
|
|
449
|
+
success: true,
|
|
450
|
+
orderId: '123',
|
|
451
|
+
total: 99.99,
|
|
452
|
+
items: [...]
|
|
453
|
+
};
|
|
454
|
+
|
|
455
|
+
// ❌ Bad - Just a string
|
|
456
|
+
return 'Order 123 created for $99.99';
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
### 4. Error Handling
|
|
460
|
+
|
|
461
|
+
```typescript
|
|
462
|
+
// ✅ Good - Graceful error handling
|
|
463
|
+
async execute(input) {
|
|
464
|
+
try {
|
|
465
|
+
const result = await externalAPI.call(input);
|
|
466
|
+
return { success: true, data: result };
|
|
467
|
+
} catch (error) {
|
|
468
|
+
return {
|
|
469
|
+
success: false,
|
|
470
|
+
error: error.message,
|
|
471
|
+
suggestion: 'Please try again later'
|
|
472
|
+
};
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
// ❌ Bad - Uncaught errors
|
|
477
|
+
async execute(input) {
|
|
478
|
+
const result = await externalAPI.call(input); // May throw!
|
|
479
|
+
return result;
|
|
480
|
+
}
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
## Testing
|
|
484
|
+
|
|
485
|
+
Test your tool before adding to agent:
|
|
486
|
+
|
|
487
|
+
```bash
|
|
488
|
+
# Interactive testing
|
|
489
|
+
lua test
|
|
490
|
+
|
|
491
|
+
# Or create a test file
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
```typescript
|
|
495
|
+
// test-tool.ts
|
|
496
|
+
import MyTool from './src/tools/MyTool';
|
|
497
|
+
|
|
498
|
+
async function test() {
|
|
499
|
+
const tool = new MyTool();
|
|
500
|
+
const result = await tool.execute({ param: 'value' });
|
|
501
|
+
console.log(result);
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
test();
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
## Related Documentation
|
|
508
|
+
|
|
509
|
+
- [LuaSkill](./LuaSkill.md) - Organizing tools into skills
|
|
510
|
+
- [LuaAgent](./LuaAgent.md) - Agent configuration
|
|
511
|
+
- [User API](./User.md) - Accessing user data
|
|
512
|
+
- [Products API](./Products.md) - Product operations
|
|
513
|
+
- [Data API](./Data.md) - Custom data storage
|
|
514
|
+
|
|
515
|
+
## Examples
|
|
516
|
+
|
|
517
|
+
- [Weather Tool](../../template/src/skills/tools/GetWeatherTool.ts)
|
|
518
|
+
- [Product Tools](../../template/src/skills/tools/ProductsTool.ts)
|
|
519
|
+
- [Basket Tools](../../template/src/skills/tools/BasketTool.ts)
|
|
520
|
+
- [Game Tracker](../../template/src/skills/tools/GameScoreTrackerTool.ts)
|
|
521
|
+
|