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,565 @@
|
|
|
1
|
+
# PostProcessor
|
|
2
|
+
|
|
3
|
+
The `PostProcessor` class allows you to modify, format, or enrich agent responses before they reach the user. Use postprocessors for response formatting, branding, translation, and content enhancement.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
import { PostProcessor } from 'lua-cli';
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
PostProcessors enable:
|
|
14
|
+
- Format and style agent responses
|
|
15
|
+
- Add branding and signatures
|
|
16
|
+
- Translate responses to user's language
|
|
17
|
+
- Inject dynamic content (links, images, CTAs)
|
|
18
|
+
- Apply channel-specific formatting
|
|
19
|
+
- Sanitize or filter responses
|
|
20
|
+
- Add disclaimers and legal notices
|
|
21
|
+
- Track and log responses
|
|
22
|
+
|
|
23
|
+
## Class Definition
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
class PostProcessor {
|
|
27
|
+
constructor(config: PostProcessorConfig);
|
|
28
|
+
getName(): string;
|
|
29
|
+
getDescription(): string;
|
|
30
|
+
execute(user: UserDataInstance, message: string, response: string, channel: string): Promise<PostProcessorResponse>;
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Configuration
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
interface PostProcessorConfig {
|
|
38
|
+
/** PostProcessor name (optional, defaults to 'unnamed-postprocessor') */
|
|
39
|
+
name?: string;
|
|
40
|
+
|
|
41
|
+
/** Short description of the postprocessor */
|
|
42
|
+
description: string;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Function that processes the agent's response before sending to user.
|
|
46
|
+
* MUST return { modifiedResponse: string } - the formatted response text.
|
|
47
|
+
*/
|
|
48
|
+
execute: (
|
|
49
|
+
user: UserDataInstance,
|
|
50
|
+
message: string, // Original user message
|
|
51
|
+
response: string, // Agent's response
|
|
52
|
+
channel: string // Channel (whatsapp, web, etc.)
|
|
53
|
+
) => Promise<PostProcessorResponse>;
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Response Type
|
|
58
|
+
|
|
59
|
+
PostProcessors must return:
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
interface PostProcessorResponse {
|
|
63
|
+
modifiedResponse: string; // The formatted response text
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Complete Examples
|
|
68
|
+
|
|
69
|
+
### Branding Footer
|
|
70
|
+
|
|
71
|
+
```typescript
|
|
72
|
+
import { PostProcessor } from 'lua-cli';
|
|
73
|
+
|
|
74
|
+
export const brandingFooter = new PostProcessor({
|
|
75
|
+
name: 'branding-footer',
|
|
76
|
+
description: 'Adds company branding to responses',
|
|
77
|
+
|
|
78
|
+
execute: async (user, message, response, channel) => {
|
|
79
|
+
const footer = '\n\n---\n💼 Powered by Acme Corp\n🌐 www.acme.com | 📧 support@acme.com';
|
|
80
|
+
|
|
81
|
+
return {
|
|
82
|
+
modifiedResponse: response + footer
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Markdown Formatter
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
import { PostProcessor } from 'lua-cli';
|
|
92
|
+
|
|
93
|
+
export const markdownFormatter = new PostProcessor({
|
|
94
|
+
name: 'markdown-formatter',
|
|
95
|
+
description: 'Formats responses with markdown',
|
|
96
|
+
|
|
97
|
+
execute: async (user, message, response, channel) => {
|
|
98
|
+
// Only apply to web channel
|
|
99
|
+
if (channel !== 'web') {
|
|
100
|
+
return { modifiedResponse: response };
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Apply markdown formatting
|
|
104
|
+
let formatted = response;
|
|
105
|
+
|
|
106
|
+
// Bold for **text**
|
|
107
|
+
formatted = formatted.replace(/\*\*(.*?)\*\*/g, '<strong>$1</strong>');
|
|
108
|
+
|
|
109
|
+
// Italic for *text*
|
|
110
|
+
formatted = formatted.replace(/\*(.*?)\*/g, '<em>$1</em>');
|
|
111
|
+
|
|
112
|
+
// Code blocks for ```code```
|
|
113
|
+
formatted = formatted.replace(/```(.*?)```/gs, '<pre><code>$1</code></pre>');
|
|
114
|
+
|
|
115
|
+
// Line breaks
|
|
116
|
+
formatted = formatted.replace(/\n/g, '<br>');
|
|
117
|
+
|
|
118
|
+
return { modifiedResponse: formatted };
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### WhatsApp Formatter
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
import { PostProcessor } from 'lua-cli';
|
|
127
|
+
|
|
128
|
+
export const whatsappFormatter = new PostProcessor({
|
|
129
|
+
name: 'whatsapp-formatter',
|
|
130
|
+
description: 'Formats responses for WhatsApp',
|
|
131
|
+
|
|
132
|
+
execute: async (user, message, response, channel) => {
|
|
133
|
+
if (channel !== 'whatsapp') {
|
|
134
|
+
return { modifiedResponse: response };
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
let formatted = response;
|
|
138
|
+
|
|
139
|
+
// Apply WhatsApp-specific formatting
|
|
140
|
+
// Bold: *text*
|
|
141
|
+
formatted = formatted.replace(/\*\*(.*?)\*\*/g, '*$1*');
|
|
142
|
+
|
|
143
|
+
// Italic: _text_
|
|
144
|
+
formatted = formatted.replace(/_(.*?)_/g, '_$1_');
|
|
145
|
+
|
|
146
|
+
// Strikethrough: ~text~
|
|
147
|
+
formatted = formatted.replace(/~~(.*?)~~/g, '~$1~');
|
|
148
|
+
|
|
149
|
+
// Monospace: ```text```
|
|
150
|
+
formatted = formatted.replace(/`(.*?)`/g, '```$1```');
|
|
151
|
+
|
|
152
|
+
// Add emojis based on content
|
|
153
|
+
if (formatted.includes('error') || formatted.includes('failed')) {
|
|
154
|
+
formatted = '⚠️ ' + formatted;
|
|
155
|
+
} else if (formatted.includes('success') || formatted.includes('completed')) {
|
|
156
|
+
formatted = '✅ ' + formatted;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
return { modifiedResponse: formatted };
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Response Translator
|
|
165
|
+
|
|
166
|
+
```typescript
|
|
167
|
+
import { PostProcessor, AI } from 'lua-cli';
|
|
168
|
+
|
|
169
|
+
export const responseTranslator = new PostProcessor({
|
|
170
|
+
name: 'response-translator',
|
|
171
|
+
description: 'Translates responses to user language',
|
|
172
|
+
|
|
173
|
+
execute: async (user, message, response, channel) => {
|
|
174
|
+
const userData = await user.get();
|
|
175
|
+
const userLanguage = userData.data?.language || 'en';
|
|
176
|
+
|
|
177
|
+
// Skip if already in user's language (English)
|
|
178
|
+
if (userLanguage === 'en') {
|
|
179
|
+
return { modifiedResponse: response };
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Translate response
|
|
183
|
+
const languageNames: Record<string, string> = {
|
|
184
|
+
es: 'Spanish',
|
|
185
|
+
fr: 'French',
|
|
186
|
+
de: 'German',
|
|
187
|
+
it: 'Italian',
|
|
188
|
+
pt: 'Portuguese',
|
|
189
|
+
ja: 'Japanese',
|
|
190
|
+
ko: 'Korean',
|
|
191
|
+
zh: 'Chinese'
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
const targetLanguage = languageNames[userLanguage] || userLanguage;
|
|
195
|
+
|
|
196
|
+
const translatedResponse = await AI.generate(
|
|
197
|
+
`Translate this text to ${targetLanguage}. Return only the translation, preserving formatting and structure.`,
|
|
198
|
+
[{ type: 'text', text: response }]
|
|
199
|
+
);
|
|
200
|
+
|
|
201
|
+
return { modifiedResponse: translatedResponse };
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
### Link Injector
|
|
207
|
+
|
|
208
|
+
```typescript
|
|
209
|
+
import { PostProcessor } from 'lua-cli';
|
|
210
|
+
|
|
211
|
+
export const linkInjector = new PostProcessor({
|
|
212
|
+
name: 'link-injector',
|
|
213
|
+
description: 'Adds helpful links to responses',
|
|
214
|
+
|
|
215
|
+
execute: async (user, message, response, channel) => {
|
|
216
|
+
// Detect topics and add relevant links
|
|
217
|
+
const links: Record<string, string> = {
|
|
218
|
+
pricing: 'View pricing: https://example.com/pricing',
|
|
219
|
+
support: 'Get support: https://example.com/support',
|
|
220
|
+
documentation: 'Read docs: https://example.com/docs',
|
|
221
|
+
account: 'Manage account: https://example.com/account'
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
let modified = response;
|
|
225
|
+
const lowerResponse = response.toLowerCase();
|
|
226
|
+
|
|
227
|
+
// Add relevant links based on content
|
|
228
|
+
const relevantLinks: string[] = [];
|
|
229
|
+
for (const [keyword, link] of Object.entries(links)) {
|
|
230
|
+
if (lowerResponse.includes(keyword)) {
|
|
231
|
+
relevantLinks.push(link);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
if (relevantLinks.length > 0) {
|
|
236
|
+
modified += '\n\n📎 Helpful Links:\n' + relevantLinks.join('\n');
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
return { modifiedResponse: modified };
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### Sentiment Analyzer
|
|
245
|
+
|
|
246
|
+
```typescript
|
|
247
|
+
import { PostProcessor, Data, AI } from 'lua-cli';
|
|
248
|
+
|
|
249
|
+
export const sentimentAnalyzer = new PostProcessor({
|
|
250
|
+
name: 'sentiment-analyzer',
|
|
251
|
+
description: 'Analyzes and logs response sentiment',
|
|
252
|
+
|
|
253
|
+
execute: async (user, message, response, channel) => {
|
|
254
|
+
// Analyze sentiment of agent's response
|
|
255
|
+
const analysis = await AI.generate(
|
|
256
|
+
'Analyze the sentiment of this response. Reply with JSON: { "sentiment": "positive|negative|neutral", "score": 0-1 }',
|
|
257
|
+
[{ type: 'text', text: response }]
|
|
258
|
+
);
|
|
259
|
+
|
|
260
|
+
try {
|
|
261
|
+
const result = JSON.parse(analysis);
|
|
262
|
+
|
|
263
|
+
// Log sentiment data
|
|
264
|
+
await Data.create('response_sentiment', {
|
|
265
|
+
userId: user.id,
|
|
266
|
+
userMessage: message,
|
|
267
|
+
agentResponse: response,
|
|
268
|
+
sentiment: result.sentiment,
|
|
269
|
+
score: result.score,
|
|
270
|
+
channel,
|
|
271
|
+
timestamp: new Date().toISOString()
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
// Add positive emoji for positive sentiments
|
|
275
|
+
if (result.sentiment === 'positive' && result.score > 0.7) {
|
|
276
|
+
return { modifiedResponse: response + ' 😊' };
|
|
277
|
+
}
|
|
278
|
+
} catch (error) {
|
|
279
|
+
console.error('Sentiment analysis error:', error);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
return { modifiedResponse: response };
|
|
283
|
+
}
|
|
284
|
+
});
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
### Legal Disclaimer
|
|
288
|
+
|
|
289
|
+
```typescript
|
|
290
|
+
import { PostProcessor } from 'lua-cli';
|
|
291
|
+
|
|
292
|
+
export const legalDisclaimer = new PostProcessor({
|
|
293
|
+
name: 'legal-disclaimer',
|
|
294
|
+
description: 'Adds legal disclaimers to financial advice',
|
|
295
|
+
|
|
296
|
+
execute: async (user, message, response, channel) => {
|
|
297
|
+
const financialKeywords = [
|
|
298
|
+
'invest', 'stock', 'trading', 'financial', 'money',
|
|
299
|
+
'portfolio', 'crypto', 'bitcoin', 'tax', 'retirement'
|
|
300
|
+
];
|
|
301
|
+
|
|
302
|
+
const lowerResponse = response.toLowerCase();
|
|
303
|
+
const containsFinancialContent = financialKeywords.some(
|
|
304
|
+
keyword => lowerResponse.includes(keyword)
|
|
305
|
+
);
|
|
306
|
+
|
|
307
|
+
if (containsFinancialContent) {
|
|
308
|
+
const disclaimer = '\n\n⚠️ Disclaimer: This information is for educational purposes only and should not be considered financial advice. Please consult with a licensed financial advisor before making investment decisions.';
|
|
309
|
+
|
|
310
|
+
return { modifiedResponse: response + disclaimer };
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
return { modifiedResponse: response };
|
|
314
|
+
}
|
|
315
|
+
});
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
### Response Summarizer
|
|
319
|
+
|
|
320
|
+
```typescript
|
|
321
|
+
import { PostProcessor, AI } from 'lua-cli';
|
|
322
|
+
|
|
323
|
+
export const responseSummarizer = new PostProcessor({
|
|
324
|
+
name: 'response-summarizer',
|
|
325
|
+
description: 'Adds TL;DR for long responses',
|
|
326
|
+
|
|
327
|
+
execute: async (user, message, response, channel) => {
|
|
328
|
+
// Only summarize long responses
|
|
329
|
+
if (response.length < 500) {
|
|
330
|
+
return { modifiedResponse: response };
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
// Generate summary
|
|
334
|
+
const summary = await AI.generate(
|
|
335
|
+
'Create a 1-sentence summary (TL;DR) of this response.',
|
|
336
|
+
[{ type: 'text', text: response }]
|
|
337
|
+
);
|
|
338
|
+
|
|
339
|
+
const modified = `**TL;DR:** ${summary}\n\n---\n\n${response}`;
|
|
340
|
+
|
|
341
|
+
return { modifiedResponse: modified };
|
|
342
|
+
}
|
|
343
|
+
});
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
### CTA Injector
|
|
347
|
+
|
|
348
|
+
```typescript
|
|
349
|
+
import { PostProcessor } from 'lua-cli';
|
|
350
|
+
|
|
351
|
+
export const ctaInjector = new PostProcessor({
|
|
352
|
+
name: 'cta-injector',
|
|
353
|
+
description: 'Adds call-to-action buttons',
|
|
354
|
+
|
|
355
|
+
execute: async (user, message, response, channel) => {
|
|
356
|
+
// Only for web channel
|
|
357
|
+
if (channel !== 'web') {
|
|
358
|
+
return { modifiedResponse: response };
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
const userData = await user.get();
|
|
362
|
+
const hasPremium = userData.data?.plan === 'premium';
|
|
363
|
+
|
|
364
|
+
// Add appropriate CTA based on user status
|
|
365
|
+
let cta = '';
|
|
366
|
+
|
|
367
|
+
if (!hasPremium) {
|
|
368
|
+
cta = '\n\n[Upgrade to Premium](https://example.com/upgrade) for advanced features! 🚀';
|
|
369
|
+
} else {
|
|
370
|
+
cta = '\n\n[Explore More Features](https://example.com/features) | [Get Help](https://example.com/support)';
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
return { modifiedResponse: response + cta };
|
|
374
|
+
}
|
|
375
|
+
});
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
### Profanity Filter
|
|
379
|
+
|
|
380
|
+
```typescript
|
|
381
|
+
import { PostProcessor } from 'lua-cli';
|
|
382
|
+
|
|
383
|
+
export const profanityFilter = new PostProcessor({
|
|
384
|
+
name: 'profanity-filter',
|
|
385
|
+
description: 'Filters inappropriate content from responses',
|
|
386
|
+
|
|
387
|
+
execute: async (user, message, response, channel) => {
|
|
388
|
+
// List of words to filter (abbreviated for example)
|
|
389
|
+
const blockedWords = ['damn', 'hell', 'crap'];
|
|
390
|
+
|
|
391
|
+
let filtered = response;
|
|
392
|
+
|
|
393
|
+
// Replace blocked words with asterisks
|
|
394
|
+
for (const word of blockedWords) {
|
|
395
|
+
const regex = new RegExp(`\\b${word}\\b`, 'gi');
|
|
396
|
+
const replacement = '*'.repeat(word.length);
|
|
397
|
+
filtered = filtered.replace(regex, replacement);
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
return { modifiedResponse: filtered };
|
|
401
|
+
}
|
|
402
|
+
});
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
### Response Logger
|
|
406
|
+
|
|
407
|
+
```typescript
|
|
408
|
+
import { PostProcessor, Data } from 'lua-cli';
|
|
409
|
+
|
|
410
|
+
export const responseLogger = new PostProcessor({
|
|
411
|
+
name: 'response-logger',
|
|
412
|
+
description: 'Logs all agent responses',
|
|
413
|
+
|
|
414
|
+
execute: async (user, message, response, channel) => {
|
|
415
|
+
// Log response for analytics
|
|
416
|
+
await Data.create('response_logs', {
|
|
417
|
+
userId: user.id,
|
|
418
|
+
userMessage: message,
|
|
419
|
+
agentResponse: response,
|
|
420
|
+
responseLength: response.length,
|
|
421
|
+
channel,
|
|
422
|
+
timestamp: new Date().toISOString()
|
|
423
|
+
});
|
|
424
|
+
|
|
425
|
+
// Return response unchanged
|
|
426
|
+
return { modifiedResponse: response };
|
|
427
|
+
}
|
|
428
|
+
});
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
## Channel-Specific Formatting
|
|
432
|
+
|
|
433
|
+
```typescript
|
|
434
|
+
export const channelFormatter = new PostProcessor({
|
|
435
|
+
name: 'channel-formatter',
|
|
436
|
+
description: 'Formats responses for different channels',
|
|
437
|
+
|
|
438
|
+
execute: async (user, message, response, channel) => {
|
|
439
|
+
switch (channel) {
|
|
440
|
+
case 'whatsapp':
|
|
441
|
+
// WhatsApp: Use emojis, short paragraphs
|
|
442
|
+
return { modifiedResponse: formatForWhatsApp(response) };
|
|
443
|
+
|
|
444
|
+
case 'sms':
|
|
445
|
+
// SMS: Keep short, no formatting
|
|
446
|
+
return { modifiedResponse: truncate(response, 160) };
|
|
447
|
+
|
|
448
|
+
case 'web':
|
|
449
|
+
// Web: Use HTML, rich formatting
|
|
450
|
+
return { modifiedResponse: formatForWeb(response) };
|
|
451
|
+
|
|
452
|
+
case 'slack':
|
|
453
|
+
// Slack: Use slack markdown
|
|
454
|
+
return { modifiedResponse: formatForSlack(response) };
|
|
455
|
+
|
|
456
|
+
default:
|
|
457
|
+
return { modifiedResponse: response };
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
});
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
## Best Practices
|
|
464
|
+
|
|
465
|
+
### ✅ DO
|
|
466
|
+
|
|
467
|
+
- Keep processing fast (< 100ms when possible)
|
|
468
|
+
- Return the full response (don't truncate accidentally)
|
|
469
|
+
- Test with different response lengths
|
|
470
|
+
- Handle edge cases (empty responses, special characters)
|
|
471
|
+
- Use channel detection for platform-specific formatting
|
|
472
|
+
- Log important transformations
|
|
473
|
+
- Preserve response meaning
|
|
474
|
+
- Add value to the user experience
|
|
475
|
+
|
|
476
|
+
### ❌ DON'T
|
|
477
|
+
|
|
478
|
+
- Don't remove important information
|
|
479
|
+
- Don't add excessive fluff
|
|
480
|
+
- Don't perform slow operations synchronously
|
|
481
|
+
- Don't forget to handle errors
|
|
482
|
+
- Don't modify responses without clear benefit
|
|
483
|
+
- Don't add confusing formatting
|
|
484
|
+
- Don't break response structure
|
|
485
|
+
- Don't ignore channel context
|
|
486
|
+
|
|
487
|
+
## Error Handling
|
|
488
|
+
|
|
489
|
+
```typescript
|
|
490
|
+
export const safePostProcessor = new PostProcessor({
|
|
491
|
+
name: 'safe-postprocessor',
|
|
492
|
+
description: 'PostProcessor with error handling',
|
|
493
|
+
|
|
494
|
+
execute: async (user, message, response, channel) => {
|
|
495
|
+
try {
|
|
496
|
+
// Your post-processing logic
|
|
497
|
+
const modified = await processResponse(response);
|
|
498
|
+
|
|
499
|
+
return { modifiedResponse: modified };
|
|
500
|
+
} catch (error) {
|
|
501
|
+
console.error('PostProcessor error:', error);
|
|
502
|
+
|
|
503
|
+
// Log error
|
|
504
|
+
await Data.create('postprocessor_errors', {
|
|
505
|
+
error: error.message,
|
|
506
|
+
userId: user.id,
|
|
507
|
+
originalResponse: response,
|
|
508
|
+
timestamp: new Date().toISOString()
|
|
509
|
+
});
|
|
510
|
+
|
|
511
|
+
// Return original response on error
|
|
512
|
+
return { modifiedResponse: response };
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
});
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
## Common Patterns
|
|
519
|
+
|
|
520
|
+
### Conditional Formatting
|
|
521
|
+
|
|
522
|
+
```typescript
|
|
523
|
+
if (condition) {
|
|
524
|
+
return { modifiedResponse: format(response) };
|
|
525
|
+
}
|
|
526
|
+
return { modifiedResponse: response };
|
|
527
|
+
```
|
|
528
|
+
|
|
529
|
+
### String Manipulation
|
|
530
|
+
|
|
531
|
+
```typescript
|
|
532
|
+
const modified = response
|
|
533
|
+
.replace(/old/g, 'new')
|
|
534
|
+
.trim()
|
|
535
|
+
.toUpperCase();
|
|
536
|
+
|
|
537
|
+
return { modifiedResponse: modified };
|
|
538
|
+
```
|
|
539
|
+
|
|
540
|
+
### Appending Content
|
|
541
|
+
|
|
542
|
+
```typescript
|
|
543
|
+
const footer = '\n\n---\nAdditional info';
|
|
544
|
+
return { modifiedResponse: response + footer };
|
|
545
|
+
```
|
|
546
|
+
|
|
547
|
+
### Prepending Content
|
|
548
|
+
|
|
549
|
+
```typescript
|
|
550
|
+
const header = 'Important Notice:\n\n';
|
|
551
|
+
return { modifiedResponse: header + response };
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
## Related APIs
|
|
555
|
+
|
|
556
|
+
- [PreProcessor](./PreProcessor.md) - Process user messages
|
|
557
|
+
- [User API](./User.md) - Access user preferences
|
|
558
|
+
- [Data API](./Data.md) - Log responses
|
|
559
|
+
- [AI API](./AI.md) - Enhance responses with AI
|
|
560
|
+
|
|
561
|
+
## See Also
|
|
562
|
+
|
|
563
|
+
- [Response Formatting Guide](../guides/ResponseFormatting.md)
|
|
564
|
+
- [Channel Integration](../guides/Channels.md)
|
|
565
|
+
- [Localization Guide](../guides/Localization.md)
|