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
package/docs/api/User.md
ADDED
|
@@ -0,0 +1,567 @@
|
|
|
1
|
+
# User API
|
|
2
|
+
|
|
3
|
+
The User API provides access to user data, chat history, and communication capabilities within your tools and jobs.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
import { User } from 'lua-cli';
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
The User API allows you to:
|
|
14
|
+
- Retrieve user profile data
|
|
15
|
+
- Update user information
|
|
16
|
+
- Send messages to users
|
|
17
|
+
- Access chat history
|
|
18
|
+
- Manage user preferences
|
|
19
|
+
|
|
20
|
+
## Methods
|
|
21
|
+
|
|
22
|
+
### `User.get()`
|
|
23
|
+
|
|
24
|
+
Retrieves user data by userId, email, or phone.
|
|
25
|
+
|
|
26
|
+
**Signature:**
|
|
27
|
+
```typescript
|
|
28
|
+
async get(identifier?: string | UserLookupOptions): Promise<UserDataInstance | null>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Parameters:**
|
|
32
|
+
- `identifier` (optional) - One of:
|
|
33
|
+
- No parameter: Returns current user's data (in tools with conversation context)
|
|
34
|
+
- `string`: User ID to retrieve
|
|
35
|
+
- `{ email: string }`: Look up user by email address
|
|
36
|
+
- `{ phone: string }`: Look up user by phone number (with or without `+` prefix)
|
|
37
|
+
|
|
38
|
+
**Returns:** `UserDataInstance` with proxy access to user data, or `null` if user not found (for email/phone lookup)
|
|
39
|
+
|
|
40
|
+
**Examples:**
|
|
41
|
+
|
|
42
|
+
```typescript
|
|
43
|
+
// Get current user (in tools with conversation context)
|
|
44
|
+
const user = await User.get();
|
|
45
|
+
|
|
46
|
+
// Access properties directly
|
|
47
|
+
console.log(user.email);
|
|
48
|
+
console.log(user.name);
|
|
49
|
+
|
|
50
|
+
// Or access via .data
|
|
51
|
+
console.log(user.data.email);
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### `User.get(userId)`
|
|
55
|
+
|
|
56
|
+
Retrieves a specific user's data by ID. This allows tools, webhooks, and jobs to access any user's data, not just the current user.
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
// Get current user (existing behavior)
|
|
60
|
+
const currentUser = await User.get();
|
|
61
|
+
|
|
62
|
+
// Get specific user by ID
|
|
63
|
+
const specificUser = await User.get('user_123456');
|
|
64
|
+
console.log(specificUser.email);
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Use Cases:**
|
|
68
|
+
- Fetch data for specific users in admin tools
|
|
69
|
+
- Access user information in webhooks/jobs
|
|
70
|
+
- Multi-user data operations
|
|
71
|
+
- User management features
|
|
72
|
+
|
|
73
|
+
### `User.get({ email })` / `User.get({ phone })`
|
|
74
|
+
|
|
75
|
+
Look up a user by email or phone number. This is particularly useful in webhooks where you don't have the user ID but know the user's contact information.
|
|
76
|
+
|
|
77
|
+
**Signature:**
|
|
78
|
+
```typescript
|
|
79
|
+
async get(options: { email?: string; phone?: string }): Promise<UserDataInstance | null>
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**Returns:** `UserDataInstance` if found, or `null` if no user exists with that email/phone
|
|
83
|
+
|
|
84
|
+
**Examples:**
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
// Look up user by email
|
|
88
|
+
const user = await User.get({ email: 'customer@example.com' });
|
|
89
|
+
if (!user) {
|
|
90
|
+
return { error: 'User not found' };
|
|
91
|
+
}
|
|
92
|
+
console.log(user.name);
|
|
93
|
+
|
|
94
|
+
// Look up user by phone (both formats work)
|
|
95
|
+
const user1 = await User.get({ phone: '+1234567890' });
|
|
96
|
+
const user2 = await User.get({ phone: '1234567890' });
|
|
97
|
+
|
|
98
|
+
// Handle not found gracefully
|
|
99
|
+
const user = await User.get({ email: 'unknown@example.com' });
|
|
100
|
+
if (!user) {
|
|
101
|
+
// User doesn't exist in the system
|
|
102
|
+
return { error: 'User not found' };
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
**Use Cases:**
|
|
107
|
+
- Webhooks that receive user email/phone from external systems
|
|
108
|
+
- Admin tools where operators search by contact info
|
|
109
|
+
- Integration with third-party systems that don't have Lua user IDs
|
|
110
|
+
|
|
111
|
+
### `User.getChatHistory()`
|
|
112
|
+
|
|
113
|
+
Gets the conversation history for the current user.
|
|
114
|
+
|
|
115
|
+
**Signature:**
|
|
116
|
+
```typescript
|
|
117
|
+
async getChatHistory(): Promise<ChatHistoryMessage[]>
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**Returns:** Array of chat messages
|
|
121
|
+
|
|
122
|
+
**Example:**
|
|
123
|
+
```typescript
|
|
124
|
+
const history = await User.getChatHistory();
|
|
125
|
+
|
|
126
|
+
// Each message has:
|
|
127
|
+
// - role: 'user' | 'assistant'
|
|
128
|
+
// - content: Array of content items
|
|
129
|
+
// - createdAt: ISO timestamp
|
|
130
|
+
// - id: Message ID
|
|
131
|
+
// - threadId: Thread ID
|
|
132
|
+
|
|
133
|
+
for (const message of history) {
|
|
134
|
+
console.log(`${message.role}: ${message.content[0].text}`);
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## UserDataInstance
|
|
139
|
+
|
|
140
|
+
The user object returned by `User.get()` uses a Proxy for convenient property access:
|
|
141
|
+
|
|
142
|
+
```typescript
|
|
143
|
+
const user = await User.get();
|
|
144
|
+
|
|
145
|
+
// Direct property access
|
|
146
|
+
user.email = 'new@email.com';
|
|
147
|
+
user.preferences = { theme: 'dark' };
|
|
148
|
+
|
|
149
|
+
// Or explicit data access
|
|
150
|
+
user.data.email = 'new@email.com';
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Immutable User Profile (`user._luaProfile`)
|
|
154
|
+
|
|
155
|
+
Starting in v3.1.0, the user object includes a read-only `_luaProfile` property that provides secure access to core user identity data.
|
|
156
|
+
|
|
157
|
+
**Properties:**
|
|
158
|
+
- `userId` - The unique user identifier
|
|
159
|
+
- `fullName` - User's full name
|
|
160
|
+
- `mobileNumbers` - Array of mobile numbers
|
|
161
|
+
- `emailAddresses` - Array of email addresses
|
|
162
|
+
|
|
163
|
+
**Important:**
|
|
164
|
+
- `_luaProfile` is **read-only** - attempts to modify it are silently ignored
|
|
165
|
+
- Uses the `_lua` prefix to avoid conflicts with custom `user.profile` fields
|
|
166
|
+
- `user.userId` is deprecated in favor of `user._luaProfile.userId`
|
|
167
|
+
|
|
168
|
+
**Example:**
|
|
169
|
+
```typescript
|
|
170
|
+
const user = await User.get();
|
|
171
|
+
|
|
172
|
+
// ✅ Correct way to access user ID
|
|
173
|
+
const userId = user._luaProfile.userId;
|
|
174
|
+
|
|
175
|
+
// ⚠️ Deprecated (still works, but shows as deprecated in IDE)
|
|
176
|
+
const deprecatedId = user.userId;
|
|
177
|
+
|
|
178
|
+
// ✅ Custom profile field remains unaffected
|
|
179
|
+
user.profile = { customData: 'value' }; // Still works for custom data
|
|
180
|
+
|
|
181
|
+
// ❌ Attempts to modify _luaProfile are ignored
|
|
182
|
+
user._luaProfile.userId = 'new-id'; // Silently ignored
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### Methods
|
|
186
|
+
|
|
187
|
+
#### `user.update(data)`
|
|
188
|
+
|
|
189
|
+
Updates user data.
|
|
190
|
+
|
|
191
|
+
**Parameters:**
|
|
192
|
+
- `data` (object) - Data to update
|
|
193
|
+
|
|
194
|
+
**Returns:** Promise<object> - Updated user data
|
|
195
|
+
|
|
196
|
+
**Example:**
|
|
197
|
+
```typescript
|
|
198
|
+
const user = await User.get();
|
|
199
|
+
|
|
200
|
+
await user.update({
|
|
201
|
+
preferences: {
|
|
202
|
+
theme: 'dark',
|
|
203
|
+
language: 'en',
|
|
204
|
+
notifications: true
|
|
205
|
+
},
|
|
206
|
+
metadata: {
|
|
207
|
+
lastActive: new Date().toISOString()
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
#### `user.send(messages)`
|
|
213
|
+
|
|
214
|
+
Sends messages to the user.
|
|
215
|
+
|
|
216
|
+
**Parameters:**
|
|
217
|
+
- `messages` (ChatMessage[]) - Array of messages to send
|
|
218
|
+
|
|
219
|
+
**Returns:** Promise<boolean>
|
|
220
|
+
|
|
221
|
+
**Example:**
|
|
222
|
+
```typescript
|
|
223
|
+
const user = await User.get();
|
|
224
|
+
|
|
225
|
+
// Send text message
|
|
226
|
+
await user.send([{
|
|
227
|
+
type: 'text',
|
|
228
|
+
text: 'Hello! Your order has shipped.'
|
|
229
|
+
}]);
|
|
230
|
+
|
|
231
|
+
// Send image
|
|
232
|
+
await user.send([{
|
|
233
|
+
type: 'image',
|
|
234
|
+
imageUrl: 'https://example.com/product.jpg',
|
|
235
|
+
altText: 'Product image'
|
|
236
|
+
}]);
|
|
237
|
+
|
|
238
|
+
// Send multiple messages
|
|
239
|
+
await user.send([
|
|
240
|
+
{ type: 'text', text: 'Your order summary:' },
|
|
241
|
+
{ type: 'text', text: '- Item 1: $10' },
|
|
242
|
+
{ type: 'text', text: 'Total: $10' }
|
|
243
|
+
]);
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
#### `user.clear()`
|
|
247
|
+
|
|
248
|
+
Clears all user data.
|
|
249
|
+
|
|
250
|
+
**Returns:** Promise<boolean>
|
|
251
|
+
|
|
252
|
+
**Example:**
|
|
253
|
+
```typescript
|
|
254
|
+
const user = await User.get();
|
|
255
|
+
await user.clear();
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
#### `user.save()`
|
|
259
|
+
|
|
260
|
+
Saves current user data state.
|
|
261
|
+
|
|
262
|
+
**Returns:** Promise<boolean>
|
|
263
|
+
|
|
264
|
+
**Example:**
|
|
265
|
+
```typescript
|
|
266
|
+
const user = await User.get();
|
|
267
|
+
user.data.lastLogin = new Date().toISOString();
|
|
268
|
+
await user.save();
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
#### `user.getChatHistory()`
|
|
272
|
+
|
|
273
|
+
Gets chat history for this user.
|
|
274
|
+
|
|
275
|
+
**Returns:** Promise<ChatHistoryMessage[]>
|
|
276
|
+
|
|
277
|
+
**Example:**
|
|
278
|
+
```typescript
|
|
279
|
+
const user = await User.get();
|
|
280
|
+
const history = await user.getChatHistory();
|
|
281
|
+
|
|
282
|
+
// Analyze conversation
|
|
283
|
+
const userMessages = history.filter(m => m.role === 'user');
|
|
284
|
+
console.log(`User sent ${userMessages.length} messages`);
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
## Complete Examples
|
|
288
|
+
|
|
289
|
+
### Update User Preferences
|
|
290
|
+
|
|
291
|
+
```typescript
|
|
292
|
+
import { LuaTool, User } from 'lua-cli/skill';
|
|
293
|
+
import { z } from 'zod';
|
|
294
|
+
|
|
295
|
+
export default class UpdatePreferencesTool implements LuaTool {
|
|
296
|
+
name = 'update_preferences';
|
|
297
|
+
description = 'Update user preferences';
|
|
298
|
+
|
|
299
|
+
inputSchema = z.object({
|
|
300
|
+
theme: z.enum(['light', 'dark']).optional(),
|
|
301
|
+
language: z.string().optional(),
|
|
302
|
+
notifications: z.boolean().optional()
|
|
303
|
+
});
|
|
304
|
+
|
|
305
|
+
async execute(input: z.infer<typeof this.inputSchema>) {
|
|
306
|
+
const user = await User.get();
|
|
307
|
+
|
|
308
|
+
// Get current preferences
|
|
309
|
+
const currentPrefs = user.data.preferences || {};
|
|
310
|
+
|
|
311
|
+
// Merge with new preferences
|
|
312
|
+
const newPrefs = {
|
|
313
|
+
...currentPrefs,
|
|
314
|
+
...input
|
|
315
|
+
};
|
|
316
|
+
|
|
317
|
+
// Update
|
|
318
|
+
await user.update({ preferences: newPrefs });
|
|
319
|
+
|
|
320
|
+
return {
|
|
321
|
+
success: true,
|
|
322
|
+
message: 'Preferences updated',
|
|
323
|
+
preferences: newPrefs
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
### Send Notification
|
|
330
|
+
|
|
331
|
+
```typescript
|
|
332
|
+
import { LuaTool, User } from 'lua-cli/skill';
|
|
333
|
+
import { z } from 'zod';
|
|
334
|
+
|
|
335
|
+
export default class NotifyUserTool implements LuaTool {
|
|
336
|
+
name = 'notify_user';
|
|
337
|
+
description = 'Send a notification to the user';
|
|
338
|
+
|
|
339
|
+
inputSchema = z.object({
|
|
340
|
+
title: z.string(),
|
|
341
|
+
message: z.string(),
|
|
342
|
+
urgent: z.boolean().optional()
|
|
343
|
+
});
|
|
344
|
+
|
|
345
|
+
async execute(input: z.infer<typeof this.inputSchema>) {
|
|
346
|
+
const user = await User.get();
|
|
347
|
+
|
|
348
|
+
const prefix = input.urgent ? '🚨 URGENT: ' : '📬 ';
|
|
349
|
+
const fullMessage = `${prefix}${input.title}\n\n${input.message}`;
|
|
350
|
+
|
|
351
|
+
await user.send([{
|
|
352
|
+
type: 'text',
|
|
353
|
+
text: fullMessage
|
|
354
|
+
}]);
|
|
355
|
+
|
|
356
|
+
// Log the notification
|
|
357
|
+
await user.update({
|
|
358
|
+
lastNotification: {
|
|
359
|
+
title: input.title,
|
|
360
|
+
sentAt: new Date().toISOString(),
|
|
361
|
+
urgent: input.urgent || false
|
|
362
|
+
}
|
|
363
|
+
});
|
|
364
|
+
|
|
365
|
+
return {
|
|
366
|
+
success: true,
|
|
367
|
+
message: 'Notification sent'
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
### Analyze Chat History
|
|
374
|
+
|
|
375
|
+
```typescript
|
|
376
|
+
import { LuaTool, User } from 'lua-cli/skill';
|
|
377
|
+
import { z } from 'zod';
|
|
378
|
+
|
|
379
|
+
export default class ChatAnalyticsTool implements LuaTool {
|
|
380
|
+
name = 'analyze_conversation';
|
|
381
|
+
description = 'Analyze the conversation history';
|
|
382
|
+
|
|
383
|
+
inputSchema = z.object({});
|
|
384
|
+
|
|
385
|
+
async execute(input: z.infer<typeof this.inputSchema>) {
|
|
386
|
+
const history = await User.getChatHistory();
|
|
387
|
+
|
|
388
|
+
const stats = {
|
|
389
|
+
totalMessages: history.length,
|
|
390
|
+
userMessages: history.filter(m => m.role === 'user').length,
|
|
391
|
+
assistantMessages: history.filter(m => m.role === 'assistant').length,
|
|
392
|
+
averageLength: 0,
|
|
393
|
+
topics: [] as string[]
|
|
394
|
+
};
|
|
395
|
+
|
|
396
|
+
// Calculate average message length
|
|
397
|
+
const lengths = history.map(m =>
|
|
398
|
+
m.content.reduce((sum, c) => sum + (c.text?.length || 0), 0)
|
|
399
|
+
);
|
|
400
|
+
stats.averageLength = Math.round(
|
|
401
|
+
lengths.reduce((a, b) => a + b, 0) / lengths.length
|
|
402
|
+
);
|
|
403
|
+
|
|
404
|
+
return {
|
|
405
|
+
success: true,
|
|
406
|
+
analytics: stats,
|
|
407
|
+
recentMessages: history.slice(-5).map(m => ({
|
|
408
|
+
role: m.role,
|
|
409
|
+
preview: m.content[0]?.text?.substring(0, 50) + '...'
|
|
410
|
+
}))
|
|
411
|
+
};
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
## Message Types
|
|
417
|
+
|
|
418
|
+
### Text Message
|
|
419
|
+
```typescript
|
|
420
|
+
{
|
|
421
|
+
type: 'text',
|
|
422
|
+
text: string
|
|
423
|
+
}
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
### Image Message
|
|
427
|
+
```typescript
|
|
428
|
+
{
|
|
429
|
+
type: 'image',
|
|
430
|
+
imageUrl: string,
|
|
431
|
+
altText?: string
|
|
432
|
+
}
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
### File Message
|
|
436
|
+
```typescript
|
|
437
|
+
{
|
|
438
|
+
type: 'file',
|
|
439
|
+
fileUrl: string,
|
|
440
|
+
fileName?: string,
|
|
441
|
+
mimeType?: string
|
|
442
|
+
}
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
## Best Practices
|
|
446
|
+
|
|
447
|
+
### ✅ DO
|
|
448
|
+
- Always handle missing user data gracefully
|
|
449
|
+
- Use `user.update()` instead of modifying and saving separately
|
|
450
|
+
- Check if data exists before accessing nested properties
|
|
451
|
+
- Send clear, actionable messages to users
|
|
452
|
+
|
|
453
|
+
### ❌ DON'T
|
|
454
|
+
- Don't assume user data structure
|
|
455
|
+
- Don't modify user data without validation
|
|
456
|
+
- Don't send empty or malformed messages
|
|
457
|
+
- Don't expose internal IDs to users
|
|
458
|
+
|
|
459
|
+
## Common Patterns
|
|
460
|
+
|
|
461
|
+
### Safe Data Access
|
|
462
|
+
|
|
463
|
+
```typescript
|
|
464
|
+
const user = await User.get();
|
|
465
|
+
|
|
466
|
+
// ✅ Safe access with optional chaining
|
|
467
|
+
const theme = user.data?.preferences?.theme || 'light';
|
|
468
|
+
|
|
469
|
+
// ❌ Unsafe - may throw
|
|
470
|
+
const theme = user.data.preferences.theme;
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
### Batch Updates
|
|
474
|
+
|
|
475
|
+
```typescript
|
|
476
|
+
const user = await User.get();
|
|
477
|
+
|
|
478
|
+
// ✅ Update multiple fields at once
|
|
479
|
+
await user.update({
|
|
480
|
+
name: 'John Doe',
|
|
481
|
+
email: 'john@example.com',
|
|
482
|
+
preferences: { theme: 'dark' }
|
|
483
|
+
});
|
|
484
|
+
|
|
485
|
+
// ❌ Multiple separate updates (slower)
|
|
486
|
+
await user.update({ name: 'John Doe' });
|
|
487
|
+
await user.update({ email: 'john@example.com' });
|
|
488
|
+
await user.update({ preferences: { theme: 'dark' } });
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
### Message Formatting
|
|
492
|
+
|
|
493
|
+
```typescript
|
|
494
|
+
// ✅ Clear, formatted message
|
|
495
|
+
await user.send([{
|
|
496
|
+
type: 'text',
|
|
497
|
+
text: `Order Confirmation\n\nOrder ID: ${orderId}\nTotal: $${total}\n\nThank you for your order!`
|
|
498
|
+
}]);
|
|
499
|
+
|
|
500
|
+
// ❌ Unformatted dump
|
|
501
|
+
await user.send([{
|
|
502
|
+
type: 'text',
|
|
503
|
+
text: JSON.stringify(orderData)
|
|
504
|
+
}]);
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
## Webhook Example: User Lookup by Phone
|
|
508
|
+
|
|
509
|
+
A common use case is building webhooks that allow external systems to modify user data. Here's an example of a webhook that updates user routing preferences:
|
|
510
|
+
|
|
511
|
+
```typescript
|
|
512
|
+
import { LuaWebhook, User } from 'lua-cli';
|
|
513
|
+
|
|
514
|
+
export default new LuaWebhook({
|
|
515
|
+
name: 'update-routing-preference',
|
|
516
|
+
description: 'Update user routing preference by phone number',
|
|
517
|
+
|
|
518
|
+
execute: async (event) => {
|
|
519
|
+
const { phone, routingEnabled } = event.body;
|
|
520
|
+
|
|
521
|
+
if (!phone) {
|
|
522
|
+
return { error: 'Phone number is required' };
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
// Look up user by phone
|
|
526
|
+
const user = await User.get({ phone });
|
|
527
|
+
if (!user) {
|
|
528
|
+
return { error: 'User not found' };
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
// Update routing preference
|
|
532
|
+
user.routingEnabled = routingEnabled;
|
|
533
|
+
await user.save();
|
|
534
|
+
|
|
535
|
+
return {
|
|
536
|
+
success: true,
|
|
537
|
+
userId: user._luaProfile.userId,
|
|
538
|
+
routingEnabled
|
|
539
|
+
};
|
|
540
|
+
}
|
|
541
|
+
});
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
## Types
|
|
545
|
+
|
|
546
|
+
### UserLookupOptions
|
|
547
|
+
|
|
548
|
+
```typescript
|
|
549
|
+
interface UserLookupOptions {
|
|
550
|
+
/** Email address to look up */
|
|
551
|
+
email?: string;
|
|
552
|
+
/** Phone number to look up (with or without + prefix) */
|
|
553
|
+
phone?: string;
|
|
554
|
+
}
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
## Related APIs
|
|
558
|
+
|
|
559
|
+
- [Data API](./Data.md) - Store custom user data
|
|
560
|
+
- [JobInstance](./instances/JobInstance.md) - Access user from jobs
|
|
561
|
+
- [ChatHistoryMessage](./types/ChatHistoryMessage.md) - Message types
|
|
562
|
+
|
|
563
|
+
## See Also
|
|
564
|
+
|
|
565
|
+
- [User Data Tool Example](../../template/src/skills/tools/UserDataTool.ts)
|
|
566
|
+
- [Notification Patterns](../guides/NotificationPatterns.md)
|
|
567
|
+
|