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,604 @@
|
|
|
1
|
+
# LuaJob
|
|
2
|
+
|
|
3
|
+
The `LuaJob` class defines scheduled tasks that execute automatically at specific times or intervals. Use jobs for recurring operations, one-time tasks, and automated workflows.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
import { LuaJob } from 'lua-cli';
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
Jobs enable:
|
|
14
|
+
- Schedule tasks with cron expressions
|
|
15
|
+
- Run one-time tasks at specific times
|
|
16
|
+
- Execute tasks at fixed intervals
|
|
17
|
+
- Access metadata and user context
|
|
18
|
+
- Configure timeouts and retries
|
|
19
|
+
- Automate recurring operations
|
|
20
|
+
|
|
21
|
+
## Class Definition
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
class LuaJob {
|
|
25
|
+
constructor(config: LuaJobConfig);
|
|
26
|
+
getName(): string;
|
|
27
|
+
getDescription(): string;
|
|
28
|
+
getSchedule(): JobSchedule;
|
|
29
|
+
getTimeout(): number;
|
|
30
|
+
getRetry(): { maxAttempts: number; backoffSeconds?: number } | undefined;
|
|
31
|
+
getMetadata(): Record<string, any> | undefined;
|
|
32
|
+
execute(job: JobInstance): Promise<any>;
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Configuration
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
interface LuaJobConfig {
|
|
40
|
+
/** Job name (optional, defaults to 'unnamed-job') */
|
|
41
|
+
name?: string;
|
|
42
|
+
|
|
43
|
+
/** Short description of the job (1-2 sentences) */
|
|
44
|
+
description: string;
|
|
45
|
+
|
|
46
|
+
/** Schedule configuration - cron, once, or interval */
|
|
47
|
+
schedule: JobSchedule;
|
|
48
|
+
|
|
49
|
+
/** Function that executes the job logic */
|
|
50
|
+
execute: (job: JobInstance) => Promise<any>;
|
|
51
|
+
|
|
52
|
+
/** Optional timeout in seconds (default: 300) */
|
|
53
|
+
timeout?: number;
|
|
54
|
+
|
|
55
|
+
/** Optional retry configuration */
|
|
56
|
+
retry?: {
|
|
57
|
+
maxAttempts: number;
|
|
58
|
+
backoffSeconds?: number;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/** Optional metadata for the job */
|
|
62
|
+
metadata?: Record<string, any>;
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Schedule Types
|
|
67
|
+
|
|
68
|
+
### Cron Schedule
|
|
69
|
+
|
|
70
|
+
```typescript
|
|
71
|
+
{
|
|
72
|
+
type: 'cron',
|
|
73
|
+
expression: string, // Cron expression
|
|
74
|
+
timezone?: string // IANA timezone (default: UTC)
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Cron Expression Format:**
|
|
79
|
+
```
|
|
80
|
+
āāāāāāāāāāāāāā minute (0 - 59)
|
|
81
|
+
ā āāāāāāāāāāāāāā hour (0 - 23)
|
|
82
|
+
ā ā āāāāāāāāāāāāāā day of month (1 - 31)
|
|
83
|
+
ā ā ā āāāāāāāāāāāāāā month (1 - 12)
|
|
84
|
+
ā ā ā ā āāāāāāāāāāāāāā day of week (0 - 6) (Sunday = 0)
|
|
85
|
+
ā ā ā ā ā
|
|
86
|
+
* * * * *
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**Examples:**
|
|
90
|
+
- `'0 9 * * *'` - Every day at 9:00 AM
|
|
91
|
+
- `'0 */6 * * *'` - Every 6 hours
|
|
92
|
+
- `'0 9 * * 1'` - Every Monday at 9:00 AM
|
|
93
|
+
- `'*/15 * * * *'` - Every 15 minutes
|
|
94
|
+
- `'0 0 1 * *'` - First day of every month at midnight
|
|
95
|
+
|
|
96
|
+
### Once Schedule
|
|
97
|
+
|
|
98
|
+
```typescript
|
|
99
|
+
{
|
|
100
|
+
type: 'once',
|
|
101
|
+
executeAt: Date | string // When to run (ISO string or Date)
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Interval Schedule
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
{
|
|
109
|
+
type: 'interval',
|
|
110
|
+
seconds: number // Seconds between executions
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## JobInstance
|
|
115
|
+
|
|
116
|
+
The `execute` function receives a `JobInstance`:
|
|
117
|
+
|
|
118
|
+
```typescript
|
|
119
|
+
interface JobInstance {
|
|
120
|
+
/** Get the user who triggered the job */
|
|
121
|
+
user(): Promise<UserDataInstance>;
|
|
122
|
+
|
|
123
|
+
/** Access job metadata */
|
|
124
|
+
metadata: Record<string, any>;
|
|
125
|
+
|
|
126
|
+
/** Update job metadata */
|
|
127
|
+
updateMetadata(data: Record<string, any>): Promise<void>;
|
|
128
|
+
|
|
129
|
+
/** Delete the job */
|
|
130
|
+
delete(): Promise<void>;
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Complete Examples
|
|
135
|
+
|
|
136
|
+
### Daily Cleanup Job
|
|
137
|
+
|
|
138
|
+
```typescript
|
|
139
|
+
import { LuaJob, Data } from 'lua-cli';
|
|
140
|
+
|
|
141
|
+
export const dailyCleanup = new LuaJob({
|
|
142
|
+
name: 'daily-cleanup',
|
|
143
|
+
description: 'Daily cleanup of old data',
|
|
144
|
+
|
|
145
|
+
schedule: {
|
|
146
|
+
type: 'cron',
|
|
147
|
+
expression: '0 2 * * *', // 2 AM every day
|
|
148
|
+
timezone: 'America/New_York'
|
|
149
|
+
},
|
|
150
|
+
|
|
151
|
+
timeout: 600, // 10 minutes
|
|
152
|
+
|
|
153
|
+
retry: {
|
|
154
|
+
maxAttempts: 3,
|
|
155
|
+
backoffSeconds: 60
|
|
156
|
+
},
|
|
157
|
+
|
|
158
|
+
metadata: {
|
|
159
|
+
retentionDays: 30
|
|
160
|
+
},
|
|
161
|
+
|
|
162
|
+
execute: async (job) => {
|
|
163
|
+
const retentionDays = job.metadata.retentionDays || 30;
|
|
164
|
+
const cutoffDate = new Date();
|
|
165
|
+
cutoffDate.setDate(cutoffDate.getDate() - retentionDays);
|
|
166
|
+
|
|
167
|
+
// Clean up old temporary data
|
|
168
|
+
const oldEntries = await Data.get('temp_data');
|
|
169
|
+
let deletedCount = 0;
|
|
170
|
+
|
|
171
|
+
for (const entry of oldEntries) {
|
|
172
|
+
const createdAt = new Date(entry.data.createdAt);
|
|
173
|
+
if (createdAt < cutoffDate) {
|
|
174
|
+
await Data.delete('temp_data', entry.id);
|
|
175
|
+
deletedCount++;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// Update job metadata with stats
|
|
180
|
+
await job.updateMetadata({
|
|
181
|
+
lastRun: new Date().toISOString(),
|
|
182
|
+
deletedCount,
|
|
183
|
+
nextRetentionCheck: new Date(cutoffDate).toISOString()
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
return {
|
|
187
|
+
success: true,
|
|
188
|
+
deletedCount,
|
|
189
|
+
retentionDays
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### Weekly Report Job
|
|
196
|
+
|
|
197
|
+
```typescript
|
|
198
|
+
import { LuaJob, User, Data, AI } from 'lua-cli';
|
|
199
|
+
|
|
200
|
+
export const weeklyReport = new LuaJob({
|
|
201
|
+
name: 'weekly-report',
|
|
202
|
+
description: 'Generate and send weekly activity report',
|
|
203
|
+
|
|
204
|
+
schedule: {
|
|
205
|
+
type: 'cron',
|
|
206
|
+
expression: '0 9 * * 1', // Every Monday at 9 AM
|
|
207
|
+
timezone: 'UTC'
|
|
208
|
+
},
|
|
209
|
+
|
|
210
|
+
execute: async (job) => {
|
|
211
|
+
const user = await job.user();
|
|
212
|
+
|
|
213
|
+
// Get activity data for the past week
|
|
214
|
+
const activities = await Data.get('user_activities');
|
|
215
|
+
const weekAgo = new Date();
|
|
216
|
+
weekAgo.setDate(weekAgo.getDate() - 7);
|
|
217
|
+
|
|
218
|
+
const recentActivities = activities.filter(a =>
|
|
219
|
+
new Date(a.data.timestamp) > weekAgo
|
|
220
|
+
);
|
|
221
|
+
|
|
222
|
+
// Generate AI summary
|
|
223
|
+
const summary = await AI.generate(
|
|
224
|
+
'Summarize this week\'s activity in 2-3 bullet points.',
|
|
225
|
+
[{
|
|
226
|
+
type: 'text',
|
|
227
|
+
text: JSON.stringify(recentActivities.map(a => a.data))
|
|
228
|
+
}]
|
|
229
|
+
);
|
|
230
|
+
|
|
231
|
+
// Send report to user
|
|
232
|
+
await user.send([{
|
|
233
|
+
type: 'text',
|
|
234
|
+
text: `š Weekly Activity Report\n\n${summary}\n\nTotal activities: ${recentActivities.length}`
|
|
235
|
+
}]);
|
|
236
|
+
|
|
237
|
+
return {
|
|
238
|
+
success: true,
|
|
239
|
+
activitiesCount: recentActivities.length
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### System Health Check
|
|
246
|
+
|
|
247
|
+
```typescript
|
|
248
|
+
import { LuaJob, Data } from 'lua-cli';
|
|
249
|
+
|
|
250
|
+
export const healthCheck = new LuaJob({
|
|
251
|
+
name: 'health-check',
|
|
252
|
+
description: 'System health monitoring',
|
|
253
|
+
|
|
254
|
+
schedule: {
|
|
255
|
+
type: 'interval',
|
|
256
|
+
seconds: 300 // Every 5 minutes
|
|
257
|
+
},
|
|
258
|
+
|
|
259
|
+
timeout: 30, // 30 seconds
|
|
260
|
+
|
|
261
|
+
execute: async (job) => {
|
|
262
|
+
const checks = {
|
|
263
|
+
database: false,
|
|
264
|
+
api: false,
|
|
265
|
+
storage: false
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
// Check database
|
|
269
|
+
try {
|
|
270
|
+
await Data.get('health_check');
|
|
271
|
+
checks.database = true;
|
|
272
|
+
} catch (error) {
|
|
273
|
+
console.error('Database check failed:', error);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
// Check external API
|
|
277
|
+
try {
|
|
278
|
+
const response = await fetch(process.env.API_URL!);
|
|
279
|
+
checks.api = response.ok;
|
|
280
|
+
} catch (error) {
|
|
281
|
+
console.error('API check failed:', error);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
// Check storage
|
|
285
|
+
try {
|
|
286
|
+
await Data.create('health_check', {
|
|
287
|
+
timestamp: new Date().toISOString(),
|
|
288
|
+
status: 'ok'
|
|
289
|
+
});
|
|
290
|
+
checks.storage = true;
|
|
291
|
+
} catch (error) {
|
|
292
|
+
console.error('Storage check failed:', error);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
const allHealthy = Object.values(checks).every(c => c);
|
|
296
|
+
|
|
297
|
+
// Log health status
|
|
298
|
+
await Data.create('health_logs', {
|
|
299
|
+
timestamp: new Date().toISOString(),
|
|
300
|
+
checks,
|
|
301
|
+
healthy: allHealthy
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
// Alert if unhealthy
|
|
305
|
+
if (!allHealthy) {
|
|
306
|
+
const user = await job.user();
|
|
307
|
+
await user.send([{
|
|
308
|
+
type: 'text',
|
|
309
|
+
text: `ā ļø System health check failed!\n${JSON.stringify(checks, null, 2)}`
|
|
310
|
+
}]);
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
return {
|
|
314
|
+
success: true,
|
|
315
|
+
healthy: allHealthy,
|
|
316
|
+
checks
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
});
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### Birthday Reminder Job
|
|
323
|
+
|
|
324
|
+
```typescript
|
|
325
|
+
import { LuaJob, Data, User } from 'lua-cli';
|
|
326
|
+
|
|
327
|
+
export const birthdayReminder = new LuaJob({
|
|
328
|
+
name: 'birthday-reminder',
|
|
329
|
+
description: 'Send birthday reminders',
|
|
330
|
+
|
|
331
|
+
schedule: {
|
|
332
|
+
type: 'cron',
|
|
333
|
+
expression: '0 9 * * *', // Every day at 9 AM
|
|
334
|
+
},
|
|
335
|
+
|
|
336
|
+
execute: async (job) => {
|
|
337
|
+
const today = new Date();
|
|
338
|
+
const todayStr = `${today.getMonth() + 1}-${today.getDate()}`;
|
|
339
|
+
|
|
340
|
+
// Get all users with birthdays
|
|
341
|
+
const users = await Data.get('users');
|
|
342
|
+
let remindersSent = 0;
|
|
343
|
+
|
|
344
|
+
for (const userEntry of users) {
|
|
345
|
+
const birthday = userEntry.data.birthday;
|
|
346
|
+
if (!birthday) continue;
|
|
347
|
+
|
|
348
|
+
// Check if birthday is today
|
|
349
|
+
const birthdayDate = new Date(birthday);
|
|
350
|
+
const birthdayStr = `${birthdayDate.getMonth() + 1}-${birthdayDate.getDate()}`;
|
|
351
|
+
|
|
352
|
+
if (birthdayStr === todayStr) {
|
|
353
|
+
// Send birthday message
|
|
354
|
+
const user = await User.get(userEntry.data.userId);
|
|
355
|
+
await user.send([{
|
|
356
|
+
type: 'text',
|
|
357
|
+
text: `š Happy Birthday, ${userEntry.data.name}! Wishing you an amazing day!`
|
|
358
|
+
}]);
|
|
359
|
+
|
|
360
|
+
remindersSent++;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
return {
|
|
365
|
+
success: true,
|
|
366
|
+
remindersSent,
|
|
367
|
+
date: today.toISOString()
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
});
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
### Data Sync Job
|
|
374
|
+
|
|
375
|
+
```typescript
|
|
376
|
+
import { LuaJob, Data } from 'lua-cli';
|
|
377
|
+
import axios from 'axios';
|
|
378
|
+
|
|
379
|
+
export const dataSyncJob = new LuaJob({
|
|
380
|
+
name: 'data-sync',
|
|
381
|
+
description: 'Sync data with external system',
|
|
382
|
+
|
|
383
|
+
schedule: {
|
|
384
|
+
type: 'interval',
|
|
385
|
+
seconds: 3600 // Every hour
|
|
386
|
+
},
|
|
387
|
+
|
|
388
|
+
retry: {
|
|
389
|
+
maxAttempts: 5,
|
|
390
|
+
backoffSeconds: 300 // 5 minutes
|
|
391
|
+
},
|
|
392
|
+
|
|
393
|
+
metadata: {
|
|
394
|
+
lastSyncId: null,
|
|
395
|
+
totalSynced: 0
|
|
396
|
+
},
|
|
397
|
+
|
|
398
|
+
execute: async (job) => {
|
|
399
|
+
const apiUrl = process.env.EXTERNAL_API_URL!;
|
|
400
|
+
const apiKey = process.env.EXTERNAL_API_KEY!;
|
|
401
|
+
|
|
402
|
+
try {
|
|
403
|
+
// Fetch updates since last sync
|
|
404
|
+
const response = await axios.get(`${apiUrl}/updates`, {
|
|
405
|
+
headers: { 'Authorization': `Bearer ${apiKey}` },
|
|
406
|
+
params: { since: job.metadata.lastSyncId }
|
|
407
|
+
});
|
|
408
|
+
|
|
409
|
+
const updates = response.data;
|
|
410
|
+
let syncedCount = 0;
|
|
411
|
+
|
|
412
|
+
// Process each update
|
|
413
|
+
for (const update of updates) {
|
|
414
|
+
await Data.create('synced_data', {
|
|
415
|
+
externalId: update.id,
|
|
416
|
+
data: update.data,
|
|
417
|
+
syncedAt: new Date().toISOString()
|
|
418
|
+
});
|
|
419
|
+
syncedCount++;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
// Update job metadata
|
|
423
|
+
const lastId = updates.length > 0 ? updates[updates.length - 1].id : job.metadata.lastSyncId;
|
|
424
|
+
await job.updateMetadata({
|
|
425
|
+
lastSyncId: lastId,
|
|
426
|
+
totalSynced: job.metadata.totalSynced + syncedCount,
|
|
427
|
+
lastSyncAt: new Date().toISOString()
|
|
428
|
+
});
|
|
429
|
+
|
|
430
|
+
return {
|
|
431
|
+
success: true,
|
|
432
|
+
syncedCount,
|
|
433
|
+
lastId
|
|
434
|
+
};
|
|
435
|
+
} catch (error) {
|
|
436
|
+
console.error('Sync failed:', error);
|
|
437
|
+
throw error; // Will trigger retry
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
});
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
### One-Time Welcome Email
|
|
444
|
+
|
|
445
|
+
```typescript
|
|
446
|
+
import { LuaJob, User } from 'lua-cli';
|
|
447
|
+
|
|
448
|
+
export const sendWelcomeEmail = new LuaJob({
|
|
449
|
+
name: 'welcome-email',
|
|
450
|
+
description: 'Send welcome email to new user',
|
|
451
|
+
|
|
452
|
+
schedule: {
|
|
453
|
+
type: 'once',
|
|
454
|
+
executeAt: new Date(Date.now() + 3600000) // 1 hour from now
|
|
455
|
+
},
|
|
456
|
+
|
|
457
|
+
metadata: {
|
|
458
|
+
userId: 'user_123',
|
|
459
|
+
userName: 'John Doe'
|
|
460
|
+
},
|
|
461
|
+
|
|
462
|
+
execute: async (job) => {
|
|
463
|
+
const user = await User.get(job.metadata.userId);
|
|
464
|
+
|
|
465
|
+
await user.send([{
|
|
466
|
+
type: 'text',
|
|
467
|
+
text: `Welcome to our platform, ${job.metadata.userName}! š\n\nWe're excited to have you here. Here are some things you can do:\n\n⢠Explore our features\n⢠Complete your profile\n⢠Connect with the community\n\nIf you have any questions, just ask!`
|
|
468
|
+
}]);
|
|
469
|
+
|
|
470
|
+
// Delete job after execution (one-time only)
|
|
471
|
+
await job.delete();
|
|
472
|
+
|
|
473
|
+
return {
|
|
474
|
+
success: true,
|
|
475
|
+
userId: job.metadata.userId
|
|
476
|
+
};
|
|
477
|
+
}
|
|
478
|
+
});
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
## Best Practices
|
|
482
|
+
|
|
483
|
+
### ā
DO
|
|
484
|
+
|
|
485
|
+
- Use appropriate schedule types for your use case
|
|
486
|
+
- Set reasonable timeouts for long-running jobs
|
|
487
|
+
- Configure retries for critical jobs
|
|
488
|
+
- Store important data in job metadata
|
|
489
|
+
- Log job execution results
|
|
490
|
+
- Handle errors gracefully
|
|
491
|
+
- Use timezones for user-facing scheduled jobs
|
|
492
|
+
- Clean up one-time jobs after execution
|
|
493
|
+
|
|
494
|
+
### ā DON'T
|
|
495
|
+
|
|
496
|
+
- Don't use very short intervals (< 1 minute) without good reason
|
|
497
|
+
- Don't perform blocking operations
|
|
498
|
+
- Don't forget to handle timezone differences
|
|
499
|
+
- Don't ignore job execution failures
|
|
500
|
+
- Don't store large data in metadata
|
|
501
|
+
- Don't create jobs without timeout limits
|
|
502
|
+
- Don't skip error logging
|
|
503
|
+
|
|
504
|
+
## Cron Expression Examples
|
|
505
|
+
|
|
506
|
+
```typescript
|
|
507
|
+
// Every minute
|
|
508
|
+
'* * * * *'
|
|
509
|
+
|
|
510
|
+
// Every 5 minutes
|
|
511
|
+
'*/5 * * * *'
|
|
512
|
+
|
|
513
|
+
// Every hour at minute 0
|
|
514
|
+
'0 * * * *'
|
|
515
|
+
|
|
516
|
+
// Every day at midnight
|
|
517
|
+
'0 0 * * *'
|
|
518
|
+
|
|
519
|
+
// Every day at 3:30 PM
|
|
520
|
+
'30 15 * * *'
|
|
521
|
+
|
|
522
|
+
// Every Monday at 9 AM
|
|
523
|
+
'0 9 * * 1'
|
|
524
|
+
|
|
525
|
+
// Every weekday at 6 PM
|
|
526
|
+
'0 18 * * 1-5'
|
|
527
|
+
|
|
528
|
+
// First day of every month
|
|
529
|
+
'0 0 1 * *'
|
|
530
|
+
|
|
531
|
+
// Last day of every month (not directly supported, use workaround)
|
|
532
|
+
'0 0 28-31 * *'
|
|
533
|
+
|
|
534
|
+
// Every 6 hours
|
|
535
|
+
'0 */6 * * *'
|
|
536
|
+
```
|
|
537
|
+
|
|
538
|
+
## Error Handling
|
|
539
|
+
|
|
540
|
+
```typescript
|
|
541
|
+
export const robustJob = new LuaJob({
|
|
542
|
+
name: 'robust-job',
|
|
543
|
+
description: 'Job with comprehensive error handling',
|
|
544
|
+
|
|
545
|
+
schedule: {
|
|
546
|
+
type: 'cron',
|
|
547
|
+
expression: '0 * * * *' // Every hour
|
|
548
|
+
},
|
|
549
|
+
|
|
550
|
+
retry: {
|
|
551
|
+
maxAttempts: 3,
|
|
552
|
+
backoffSeconds: 60
|
|
553
|
+
},
|
|
554
|
+
|
|
555
|
+
execute: async (job) => {
|
|
556
|
+
try {
|
|
557
|
+
// Perform job logic
|
|
558
|
+
const result = await performTask();
|
|
559
|
+
|
|
560
|
+
// Update success metadata
|
|
561
|
+
await job.updateMetadata({
|
|
562
|
+
lastSuccess: new Date().toISOString(),
|
|
563
|
+
consecutiveFailures: 0
|
|
564
|
+
});
|
|
565
|
+
|
|
566
|
+
return {
|
|
567
|
+
success: true,
|
|
568
|
+
result
|
|
569
|
+
};
|
|
570
|
+
} catch (error) {
|
|
571
|
+
// Track failures
|
|
572
|
+
const failures = (job.metadata.consecutiveFailures || 0) + 1;
|
|
573
|
+
await job.updateMetadata({
|
|
574
|
+
lastFailure: new Date().toISOString(),
|
|
575
|
+
lastError: error.message,
|
|
576
|
+
consecutiveFailures: failures
|
|
577
|
+
});
|
|
578
|
+
|
|
579
|
+
// Alert after 3 consecutive failures
|
|
580
|
+
if (failures >= 3) {
|
|
581
|
+
const user = await job.user();
|
|
582
|
+
await user.send([{
|
|
583
|
+
type: 'text',
|
|
584
|
+
text: `ā ļø Job "${job.metadata.name}" has failed 3 times in a row. Last error: ${error.message}`
|
|
585
|
+
}]);
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
throw error; // Re-throw to trigger retry
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
});
|
|
592
|
+
```
|
|
593
|
+
|
|
594
|
+
## Related APIs
|
|
595
|
+
|
|
596
|
+
- [Jobs API](./Jobs.md) - Dynamic job creation from tools
|
|
597
|
+
- [User API](./User.md) - Access user context in jobs
|
|
598
|
+
- [Data API](./Data.md) - Store job results and logs
|
|
599
|
+
|
|
600
|
+
## See Also
|
|
601
|
+
|
|
602
|
+
- [Cron Expression Reference](https://crontab.guru/)
|
|
603
|
+
- [Job Scheduling Guide](../guides/JobScheduling.md)
|
|
604
|
+
- [Automation Patterns](../guides/Automation.md)
|