@atom8n/ai-workflow-builder 1.2.0
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/dist/agents/responder.agent.d.ts +21 -0
- package/dist/agents/responder.agent.js +71 -0
- package/dist/agents/responder.agent.js.map +1 -0
- package/dist/agents/supervisor.agent.d.ts +31 -0
- package/dist/agents/supervisor.agent.js +68 -0
- package/dist/agents/supervisor.agent.js.map +1 -0
- package/dist/ai-workflow-builder-agent.service.d.ts +32 -0
- package/dist/ai-workflow-builder-agent.service.js +236 -0
- package/dist/ai-workflow-builder-agent.service.js.map +1 -0
- package/dist/build.tsbuildinfo +1 -0
- package/dist/chains/conversation-compact.d.ts +7 -0
- package/dist/chains/conversation-compact.js +56 -0
- package/dist/chains/conversation-compact.js.map +1 -0
- package/dist/chains/parameter-updater.d.ts +16 -0
- package/dist/chains/parameter-updater.js +112 -0
- package/dist/chains/parameter-updater.js.map +1 -0
- package/dist/chains/prompt-categorization.d.ts +3 -0
- package/dist/chains/prompt-categorization.js +31 -0
- package/dist/chains/prompt-categorization.js.map +1 -0
- package/dist/chains/test/integration/test-helpers.d.ts +3 -0
- package/dist/chains/test/integration/test-helpers.js +16 -0
- package/dist/chains/test/integration/test-helpers.js.map +1 -0
- package/dist/chains/workflow-name.d.ts +4 -0
- package/dist/chains/workflow-name.js +22 -0
- package/dist/chains/workflow-name.js.map +1 -0
- package/dist/constants.d.ts +14 -0
- package/dist/constants.js +18 -0
- package/dist/constants.js.map +1 -0
- package/dist/errors/index.d.ts +52 -0
- package/dist/errors/index.js +137 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/llm-config.d.ts +11 -0
- package/dist/llm-config.js +126 -0
- package/dist/llm-config.js.map +1 -0
- package/dist/multi-agent-workflow-subgraphs.d.ts +122 -0
- package/dist/multi-agent-workflow-subgraphs.js +159 -0
- package/dist/multi-agent-workflow-subgraphs.js.map +1 -0
- package/dist/parent-graph-state.d.ts +27 -0
- package/dist/parent-graph-state.js +47 -0
- package/dist/parent-graph-state.js.map +1 -0
- package/dist/prompts/agents/builder.prompt.d.ts +1 -0
- package/dist/prompts/agents/builder.prompt.js +320 -0
- package/dist/prompts/agents/builder.prompt.js.map +1 -0
- package/dist/prompts/agents/configurator.prompt.d.ts +2 -0
- package/dist/prompts/agents/configurator.prompt.js +143 -0
- package/dist/prompts/agents/configurator.prompt.js.map +1 -0
- package/dist/prompts/agents/discovery.prompt.d.ts +11 -0
- package/dist/prompts/agents/discovery.prompt.js +260 -0
- package/dist/prompts/agents/discovery.prompt.js.map +1 -0
- package/dist/prompts/agents/responder.prompt.d.ts +1 -0
- package/dist/prompts/agents/responder.prompt.js +41 -0
- package/dist/prompts/agents/responder.prompt.js.map +1 -0
- package/dist/prompts/agents/supervisor.prompt.d.ts +1 -0
- package/dist/prompts/agents/supervisor.prompt.js +43 -0
- package/dist/prompts/agents/supervisor.prompt.js.map +1 -0
- package/dist/prompts/builder/index.d.ts +2 -0
- package/dist/prompts/builder/index.js +7 -0
- package/dist/prompts/builder/index.js.map +1 -0
- package/dist/prompts/builder/prompt-builder.d.ts +17 -0
- package/dist/prompts/builder/prompt-builder.js +147 -0
- package/dist/prompts/builder/prompt-builder.js.map +1 -0
- package/dist/prompts/builder/types.d.ts +22 -0
- package/dist/prompts/builder/types.js +3 -0
- package/dist/prompts/builder/types.js.map +1 -0
- package/dist/prompts/chains/categorization.prompt.d.ts +43 -0
- package/dist/prompts/chains/categorization.prompt.js +86 -0
- package/dist/prompts/chains/categorization.prompt.js.map +1 -0
- package/dist/prompts/chains/compact.prompt.d.ts +2 -0
- package/dist/prompts/chains/compact.prompt.js +16 -0
- package/dist/prompts/chains/compact.prompt.js.map +1 -0
- package/dist/prompts/chains/parameter-updater/examples/if-node.d.ts +2 -0
- package/dist/prompts/chains/parameter-updater/examples/if-node.js +141 -0
- package/dist/prompts/chains/parameter-updater/examples/if-node.js.map +1 -0
- package/dist/prompts/chains/parameter-updater/examples/index.d.ts +6 -0
- package/dist/prompts/chains/parameter-updater/examples/index.js +16 -0
- package/dist/prompts/chains/parameter-updater/examples/index.js.map +1 -0
- package/dist/prompts/chains/parameter-updater/examples/resource-locator.d.ts +2 -0
- package/dist/prompts/chains/parameter-updater/examples/resource-locator.js +83 -0
- package/dist/prompts/chains/parameter-updater/examples/resource-locator.js.map +1 -0
- package/dist/prompts/chains/parameter-updater/examples/set-node.d.ts +2 -0
- package/dist/prompts/chains/parameter-updater/examples/set-node.js +151 -0
- package/dist/prompts/chains/parameter-updater/examples/set-node.js.map +1 -0
- package/dist/prompts/chains/parameter-updater/examples/simple-updates.d.ts +2 -0
- package/dist/prompts/chains/parameter-updater/examples/simple-updates.js +54 -0
- package/dist/prompts/chains/parameter-updater/examples/simple-updates.js.map +1 -0
- package/dist/prompts/chains/parameter-updater/examples/switch-node.d.ts +2 -0
- package/dist/prompts/chains/parameter-updater/examples/switch-node.js +131 -0
- package/dist/prompts/chains/parameter-updater/examples/switch-node.js.map +1 -0
- package/dist/prompts/chains/parameter-updater/examples/tool-nodes.d.ts +2 -0
- package/dist/prompts/chains/parameter-updater/examples/tool-nodes.js +74 -0
- package/dist/prompts/chains/parameter-updater/examples/tool-nodes.js.map +1 -0
- package/dist/prompts/chains/parameter-updater/guides/embedding-nodes.d.ts +2 -0
- package/dist/prompts/chains/parameter-updater/guides/embedding-nodes.js +70 -0
- package/dist/prompts/chains/parameter-updater/guides/embedding-nodes.js.map +1 -0
- package/dist/prompts/chains/parameter-updater/guides/gmail.d.ts +2 -0
- package/dist/prompts/chains/parameter-updater/guides/gmail.js +28 -0
- package/dist/prompts/chains/parameter-updater/guides/gmail.js.map +1 -0
- package/dist/prompts/chains/parameter-updater/guides/http-request.d.ts +2 -0
- package/dist/prompts/chains/parameter-updater/guides/http-request.js +139 -0
- package/dist/prompts/chains/parameter-updater/guides/http-request.js.map +1 -0
- package/dist/prompts/chains/parameter-updater/guides/if-node.d.ts +2 -0
- package/dist/prompts/chains/parameter-updater/guides/if-node.js +159 -0
- package/dist/prompts/chains/parameter-updater/guides/if-node.js.map +1 -0
- package/dist/prompts/chains/parameter-updater/guides/index.d.ts +10 -0
- package/dist/prompts/chains/parameter-updater/guides/index.js +24 -0
- package/dist/prompts/chains/parameter-updater/guides/index.js.map +1 -0
- package/dist/prompts/chains/parameter-updater/guides/resource-locator.d.ts +2 -0
- package/dist/prompts/chains/parameter-updater/guides/resource-locator.js +99 -0
- package/dist/prompts/chains/parameter-updater/guides/resource-locator.js.map +1 -0
- package/dist/prompts/chains/parameter-updater/guides/set-node.d.ts +2 -0
- package/dist/prompts/chains/parameter-updater/guides/set-node.js +94 -0
- package/dist/prompts/chains/parameter-updater/guides/set-node.js.map +1 -0
- package/dist/prompts/chains/parameter-updater/guides/switch-node.d.ts +2 -0
- package/dist/prompts/chains/parameter-updater/guides/switch-node.js +75 -0
- package/dist/prompts/chains/parameter-updater/guides/switch-node.js.map +1 -0
- package/dist/prompts/chains/parameter-updater/guides/system-message.d.ts +2 -0
- package/dist/prompts/chains/parameter-updater/guides/system-message.js +96 -0
- package/dist/prompts/chains/parameter-updater/guides/system-message.js.map +1 -0
- package/dist/prompts/chains/parameter-updater/guides/text-fields.d.ts +2 -0
- package/dist/prompts/chains/parameter-updater/guides/text-fields.js +31 -0
- package/dist/prompts/chains/parameter-updater/guides/text-fields.js.map +1 -0
- package/dist/prompts/chains/parameter-updater/guides/tool-nodes.d.ts +2 -0
- package/dist/prompts/chains/parameter-updater/guides/tool-nodes.js +76 -0
- package/dist/prompts/chains/parameter-updater/guides/tool-nodes.js.map +1 -0
- package/dist/prompts/chains/parameter-updater/index.d.ts +8 -0
- package/dist/prompts/chains/parameter-updater/index.js +35 -0
- package/dist/prompts/chains/parameter-updater/index.js.map +1 -0
- package/dist/prompts/chains/parameter-updater/instance-url.d.ts +1 -0
- package/dist/prompts/chains/parameter-updater/instance-url.js +15 -0
- package/dist/prompts/chains/parameter-updater/instance-url.js.map +1 -0
- package/dist/prompts/chains/parameter-updater/parameter-updater.prompt.d.ts +4 -0
- package/dist/prompts/chains/parameter-updater/parameter-updater.prompt.js +52 -0
- package/dist/prompts/chains/parameter-updater/parameter-updater.prompt.js.map +1 -0
- package/dist/prompts/chains/parameter-updater/registry.d.ts +4 -0
- package/dist/prompts/chains/parameter-updater/registry.js +66 -0
- package/dist/prompts/chains/parameter-updater/registry.js.map +1 -0
- package/dist/prompts/chains/parameter-updater/types.d.ts +18 -0
- package/dist/prompts/chains/parameter-updater/types.js +3 -0
- package/dist/prompts/chains/parameter-updater/types.js.map +1 -0
- package/dist/prompts/chains/parameter-updater/utils.d.ts +2 -0
- package/dist/prompts/chains/parameter-updater/utils.js +16 -0
- package/dist/prompts/chains/parameter-updater/utils.js.map +1 -0
- package/dist/prompts/chains/workflow-name.prompt.d.ts +2 -0
- package/dist/prompts/chains/workflow-name.prompt.js +11 -0
- package/dist/prompts/chains/workflow-name.prompt.js.map +1 -0
- package/dist/prompts/index.d.ts +12 -0
- package/dist/prompts/index.js +50 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/legacy-agent.prompt.d.ts +6 -0
- package/dist/prompts/legacy-agent.prompt.js +594 -0
- package/dist/prompts/legacy-agent.prompt.js.map +1 -0
- package/dist/session-manager.service.d.ts +16 -0
- package/dist/session-manager.service.js +125 -0
- package/dist/session-manager.service.js.map +1 -0
- package/dist/subgraphs/builder.subgraph.d.ts +132 -0
- package/dist/subgraphs/builder.subgraph.js +173 -0
- package/dist/subgraphs/builder.subgraph.js.map +1 -0
- package/dist/subgraphs/configurator.subgraph.d.ts +142 -0
- package/dist/subgraphs/configurator.subgraph.js +173 -0
- package/dist/subgraphs/configurator.subgraph.js.map +1 -0
- package/dist/subgraphs/discovery.subgraph.d.ts +158 -0
- package/dist/subgraphs/discovery.subgraph.js +221 -0
- package/dist/subgraphs/discovery.subgraph.js.map +1 -0
- package/dist/subgraphs/subgraph-interface.d.ts +23 -0
- package/dist/subgraphs/subgraph-interface.js +7 -0
- package/dist/subgraphs/subgraph-interface.js.map +1 -0
- package/dist/tools/add-node.tool.d.ts +54 -0
- package/dist/tools/add-node.tool.js +176 -0
- package/dist/tools/add-node.tool.js.map +1 -0
- package/dist/tools/best-practices/chatbot.d.ts +7 -0
- package/dist/tools/best-practices/chatbot.js +118 -0
- package/dist/tools/best-practices/chatbot.js.map +1 -0
- package/dist/tools/best-practices/content-generation.d.ts +7 -0
- package/dist/tools/best-practices/content-generation.js +115 -0
- package/dist/tools/best-practices/content-generation.js.map +1 -0
- package/dist/tools/best-practices/data-analysis.d.ts +7 -0
- package/dist/tools/best-practices/data-analysis.js +367 -0
- package/dist/tools/best-practices/data-analysis.js.map +1 -0
- package/dist/tools/best-practices/data-extraction.d.ts +7 -0
- package/dist/tools/best-practices/data-extraction.js +122 -0
- package/dist/tools/best-practices/data-extraction.js.map +1 -0
- package/dist/tools/best-practices/data-transformation.d.ts +7 -0
- package/dist/tools/best-practices/data-transformation.js +162 -0
- package/dist/tools/best-practices/data-transformation.js.map +1 -0
- package/dist/tools/best-practices/document-processing.d.ts +7 -0
- package/dist/tools/best-practices/document-processing.js +335 -0
- package/dist/tools/best-practices/document-processing.js.map +1 -0
- package/dist/tools/best-practices/enrichment.d.ts +7 -0
- package/dist/tools/best-practices/enrichment.js +271 -0
- package/dist/tools/best-practices/enrichment.js.map +1 -0
- package/dist/tools/best-practices/form-input.d.ts +7 -0
- package/dist/tools/best-practices/form-input.js +173 -0
- package/dist/tools/best-practices/form-input.js.map +1 -0
- package/dist/tools/best-practices/human-in-the-loop.d.ts +7 -0
- package/dist/tools/best-practices/human-in-the-loop.js +268 -0
- package/dist/tools/best-practices/human-in-the-loop.js.map +1 -0
- package/dist/tools/best-practices/index.d.ts +3 -0
- package/dist/tools/best-practices/index.js +29 -0
- package/dist/tools/best-practices/index.js.map +1 -0
- package/dist/tools/best-practices/knowledge-base.d.ts +7 -0
- package/dist/tools/best-practices/knowledge-base.js +268 -0
- package/dist/tools/best-practices/knowledge-base.js.map +1 -0
- package/dist/tools/best-practices/monitoring.d.ts +7 -0
- package/dist/tools/best-practices/monitoring.js +178 -0
- package/dist/tools/best-practices/monitoring.js.map +1 -0
- package/dist/tools/best-practices/notification.d.ts +7 -0
- package/dist/tools/best-practices/notification.js +229 -0
- package/dist/tools/best-practices/notification.js.map +1 -0
- package/dist/tools/best-practices/scheduling.d.ts +7 -0
- package/dist/tools/best-practices/scheduling.js +281 -0
- package/dist/tools/best-practices/scheduling.js.map +1 -0
- package/dist/tools/best-practices/scraping-and-research.d.ts +7 -0
- package/dist/tools/best-practices/scraping-and-research.js +161 -0
- package/dist/tools/best-practices/scraping-and-research.js.map +1 -0
- package/dist/tools/best-practices/triage.d.ts +7 -0
- package/dist/tools/best-practices/triage.js +211 -0
- package/dist/tools/best-practices/triage.js.map +1 -0
- package/dist/tools/builder-tools.d.ts +16 -0
- package/dist/tools/builder-tools.js +36 -0
- package/dist/tools/builder-tools.js.map +1 -0
- package/dist/tools/categorize-prompt.tool.d.ts +5 -0
- package/dist/tools/categorize-prompt.tool.js +85 -0
- package/dist/tools/categorize-prompt.tool.js.map +1 -0
- package/dist/tools/connect-nodes.tool.d.ts +22 -0
- package/dist/tools/connect-nodes.tool.js +231 -0
- package/dist/tools/connect-nodes.tool.js.map +1 -0
- package/dist/tools/engines/node-search-engine.d.ts +16 -0
- package/dist/tools/engines/node-search-engine.js +123 -0
- package/dist/tools/engines/node-search-engine.js.map +1 -0
- package/dist/tools/get-best-practices.tool.d.ts +33 -0
- package/dist/tools/get-best-practices.tool.js +94 -0
- package/dist/tools/get-best-practices.tool.js.map +1 -0
- package/dist/tools/get-node-examples.tool.d.ts +119 -0
- package/dist/tools/get-node-examples.tool.js +189 -0
- package/dist/tools/get-node-examples.tool.js.map +1 -0
- package/dist/tools/get-node-parameter.tool.d.ts +4 -0
- package/dist/tools/get-node-parameter.tool.js +114 -0
- package/dist/tools/get-node-parameter.tool.js.map +1 -0
- package/dist/tools/get-workflow-examples.tool.d.ts +34 -0
- package/dist/tools/get-workflow-examples.tool.js +138 -0
- package/dist/tools/get-workflow-examples.tool.js.map +1 -0
- package/dist/tools/helpers/index.d.ts +4 -0
- package/dist/tools/helpers/index.js +21 -0
- package/dist/tools/helpers/index.js.map +1 -0
- package/dist/tools/helpers/progress.d.ts +9 -0
- package/dist/tools/helpers/progress.js +126 -0
- package/dist/tools/helpers/progress.js.map +1 -0
- package/dist/tools/helpers/response.d.ts +7 -0
- package/dist/tools/helpers/response.js +33 -0
- package/dist/tools/helpers/response.js.map +1 -0
- package/dist/tools/helpers/state.d.ts +14 -0
- package/dist/tools/helpers/state.js +85 -0
- package/dist/tools/helpers/state.js.map +1 -0
- package/dist/tools/helpers/validation.d.ts +13 -0
- package/dist/tools/helpers/validation.js +83 -0
- package/dist/tools/helpers/validation.js.map +1 -0
- package/dist/tools/node-details.tool.d.ts +31 -0
- package/dist/tools/node-details.tool.js +201 -0
- package/dist/tools/node-details.tool.js.map +1 -0
- package/dist/tools/node-search.tool.d.ts +62 -0
- package/dist/tools/node-search.tool.js +155 -0
- package/dist/tools/node-search.tool.js.map +1 -0
- package/dist/tools/remove-connection.tool.d.ts +24 -0
- package/dist/tools/remove-connection.tool.js +234 -0
- package/dist/tools/remove-connection.tool.js.map +1 -0
- package/dist/tools/remove-node.tool.d.ts +4 -0
- package/dist/tools/remove-node.tool.js +106 -0
- package/dist/tools/remove-node.tool.js.map +1 -0
- package/dist/tools/update-node-parameters.tool.d.ts +5 -0
- package/dist/tools/update-node-parameters.tool.js +156 -0
- package/dist/tools/update-node-parameters.tool.js.map +1 -0
- package/dist/tools/utils/connection-parameters.utils.d.ts +8 -0
- package/dist/tools/utils/connection-parameters.utils.js +47 -0
- package/dist/tools/utils/connection-parameters.utils.js.map +1 -0
- package/dist/tools/utils/connection.utils.d.ts +15 -0
- package/dist/tools/utils/connection.utils.js +321 -0
- package/dist/tools/utils/connection.utils.js.map +1 -0
- package/dist/tools/utils/mermaid.utils.d.ts +13 -0
- package/dist/tools/utils/mermaid.utils.js +647 -0
- package/dist/tools/utils/mermaid.utils.js.map +1 -0
- package/dist/tools/utils/node-configuration.utils.d.ts +13 -0
- package/dist/tools/utils/node-configuration.utils.js +75 -0
- package/dist/tools/utils/node-configuration.utils.js.map +1 -0
- package/dist/tools/utils/node-creation.utils.d.ts +8 -0
- package/dist/tools/utils/node-creation.utils.js +56 -0
- package/dist/tools/utils/node-creation.utils.js.map +1 -0
- package/dist/tools/utils/node-positioning.utils.d.ts +17 -0
- package/dist/tools/utils/node-positioning.utils.js +87 -0
- package/dist/tools/utils/node-positioning.utils.js.map +1 -0
- package/dist/tools/utils/parameter-update.utils.d.ts +6 -0
- package/dist/tools/utils/parameter-update.utils.js +75 -0
- package/dist/tools/utils/parameter-update.utils.js.map +1 -0
- package/dist/tools/utils/test/workflows/ai-assistant.workflow.d.ts +2 -0
- package/dist/tools/utils/test/workflows/ai-assistant.workflow.js +542 -0
- package/dist/tools/utils/test/workflows/ai-assistant.workflow.js.map +1 -0
- package/dist/tools/validate-configuration.tool.d.ts +4 -0
- package/dist/tools/validate-configuration.tool.js +70 -0
- package/dist/tools/validate-configuration.tool.js.map +1 -0
- package/dist/tools/validate-structure.tool.d.ts +4 -0
- package/dist/tools/validate-structure.tool.js +66 -0
- package/dist/tools/validate-structure.tool.js.map +1 -0
- package/dist/tools/validate-workflow.tool.d.ts +5 -0
- package/dist/tools/validate-workflow.tool.js +73 -0
- package/dist/tools/validate-workflow.tool.js.map +1 -0
- package/dist/tools/web/templates.d.ts +23 -0
- package/dist/tools/web/templates.js +106 -0
- package/dist/tools/web/templates.js.map +1 -0
- package/dist/types/best-practices.d.ts +6 -0
- package/dist/types/best-practices.js +3 -0
- package/dist/types/best-practices.js.map +1 -0
- package/dist/types/categorization.d.ts +23 -0
- package/dist/types/categorization.js +38 -0
- package/dist/types/categorization.js.map +1 -0
- package/dist/types/config.d.ts +55 -0
- package/dist/types/config.js +3 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/connections.d.ts +30 -0
- package/dist/types/connections.js +3 -0
- package/dist/types/connections.js.map +1 -0
- package/dist/types/coordination.d.ts +42 -0
- package/dist/types/coordination.js +23 -0
- package/dist/types/coordination.js.map +1 -0
- package/dist/types/discovery-types.d.ts +12 -0
- package/dist/types/discovery-types.js +3 -0
- package/dist/types/discovery-types.js.map +1 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/index.js +18 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/langchain.d.ts +3 -0
- package/dist/types/langchain.js +15 -0
- package/dist/types/langchain.js.map +1 -0
- package/dist/types/messages.d.ts +32 -0
- package/dist/types/messages.js +3 -0
- package/dist/types/messages.js.map +1 -0
- package/dist/types/nodes.d.ts +27 -0
- package/dist/types/nodes.js +3 -0
- package/dist/types/nodes.js.map +1 -0
- package/dist/types/sessions.d.ts +8 -0
- package/dist/types/sessions.js +34 -0
- package/dist/types/sessions.js.map +1 -0
- package/dist/types/streaming.d.ts +33 -0
- package/dist/types/streaming.js +3 -0
- package/dist/types/streaming.js.map +1 -0
- package/dist/types/tools.d.ts +120 -0
- package/dist/types/tools.js +3 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/types/utils.d.ts +2 -0
- package/dist/types/utils.js +3 -0
- package/dist/types/utils.js.map +1 -0
- package/dist/types/web/templates.d.ts +45 -0
- package/dist/types/web/templates.js +37 -0
- package/dist/types/web/templates.js.map +1 -0
- package/dist/types/workflow.d.ts +31 -0
- package/dist/types/workflow.js +3 -0
- package/dist/types/workflow.js.map +1 -0
- package/dist/utils/cache-control/helpers.d.ts +5 -0
- package/dist/utils/cache-control/helpers.js +126 -0
- package/dist/utils/cache-control/helpers.js.map +1 -0
- package/dist/utils/cache-control/index.d.ts +1 -0
- package/dist/utils/cache-control/index.js +9 -0
- package/dist/utils/cache-control/index.js.map +1 -0
- package/dist/utils/cleanup-dangling-tool-call-messages.d.ts +3 -0
- package/dist/utils/cleanup-dangling-tool-call-messages.js +10 -0
- package/dist/utils/cleanup-dangling-tool-call-messages.js.map +1 -0
- package/dist/utils/context-builders.d.ts +10 -0
- package/dist/utils/context-builders.js +71 -0
- package/dist/utils/context-builders.js.map +1 -0
- package/dist/utils/coordination-log.d.ts +15 -0
- package/dist/utils/coordination-log.js +75 -0
- package/dist/utils/coordination-log.js.map +1 -0
- package/dist/utils/http-proxy-agent.d.ts +2 -0
- package/dist/utils/http-proxy-agent.js +16 -0
- package/dist/utils/http-proxy-agent.js.map +1 -0
- package/dist/utils/node-helpers.d.ts +2 -0
- package/dist/utils/node-helpers.js +54 -0
- package/dist/utils/node-helpers.js.map +1 -0
- package/dist/utils/operations-processor.d.ts +14 -0
- package/dist/utils/operations-processor.js +196 -0
- package/dist/utils/operations-processor.js.map +1 -0
- package/dist/utils/state-modifier.d.ts +32 -0
- package/dist/utils/state-modifier.js +112 -0
- package/dist/utils/state-modifier.js.map +1 -0
- package/dist/utils/state-reducers.d.ts +3 -0
- package/dist/utils/state-reducers.js +20 -0
- package/dist/utils/state-reducers.js.map +1 -0
- package/dist/utils/stream-processor.d.ts +20 -0
- package/dist/utils/stream-processor.js +277 -0
- package/dist/utils/stream-processor.js.map +1 -0
- package/dist/utils/subgraph-helpers.d.ts +16 -0
- package/dist/utils/subgraph-helpers.js +117 -0
- package/dist/utils/subgraph-helpers.js.map +1 -0
- package/dist/utils/token-usage.d.ts +21 -0
- package/dist/utils/token-usage.js +45 -0
- package/dist/utils/token-usage.js.map +1 -0
- package/dist/utils/tool-executor.d.ts +3 -0
- package/dist/utils/tool-executor.js +108 -0
- package/dist/utils/tool-executor.js.map +1 -0
- package/dist/utils/trim-workflow-context.d.ts +2 -0
- package/dist/utils/trim-workflow-context.js +53 -0
- package/dist/utils/trim-workflow-context.js.map +1 -0
- package/dist/utils/workflow-validation.d.ts +2 -0
- package/dist/utils/workflow-validation.js +37 -0
- package/dist/utils/workflow-validation.js.map +1 -0
- package/dist/validation/checks/agent-prompt.d.ts +3 -0
- package/dist/validation/checks/agent-prompt.js +47 -0
- package/dist/validation/checks/agent-prompt.js.map +1 -0
- package/dist/validation/checks/connections.d.ts +4 -0
- package/dist/validation/checks/connections.js +163 -0
- package/dist/validation/checks/connections.js.map +1 -0
- package/dist/validation/checks/credentials.d.ts +3 -0
- package/dist/validation/checks/credentials.js +125 -0
- package/dist/validation/checks/credentials.js.map +1 -0
- package/dist/validation/checks/from-ai.d.ts +4 -0
- package/dist/validation/checks/from-ai.js +62 -0
- package/dist/validation/checks/from-ai.js.map +1 -0
- package/dist/validation/checks/index.d.ts +7 -0
- package/dist/validation/checks/index.js +18 -0
- package/dist/validation/checks/index.js.map +1 -0
- package/dist/validation/checks/nodes.d.ts +4 -0
- package/dist/validation/checks/nodes.js +44 -0
- package/dist/validation/checks/nodes.js.map +1 -0
- package/dist/validation/checks/tools.d.ts +4 -0
- package/dist/validation/checks/tools.js +38 -0
- package/dist/validation/checks/tools.js.map +1 -0
- package/dist/validation/checks/trigger.d.ts +8 -0
- package/dist/validation/checks/trigger.js +33 -0
- package/dist/validation/checks/trigger.js.map +1 -0
- package/dist/validation/programmatic.d.ts +3 -0
- package/dist/validation/programmatic.js +24 -0
- package/dist/validation/programmatic.js.map +1 -0
- package/dist/validation/types.d.ts +52 -0
- package/dist/validation/types.js +31 -0
- package/dist/validation/types.js.map +1 -0
- package/dist/validation/utils/expressions.d.ts +3 -0
- package/dist/validation/utils/expressions.js +37 -0
- package/dist/validation/utils/expressions.js.map +1 -0
- package/dist/validation/utils/is-tool.d.ts +2 -0
- package/dist/validation/utils/is-tool.js +7 -0
- package/dist/validation/utils/is-tool.js.map +1 -0
- package/dist/validation/utils/node-type-map.d.ts +8 -0
- package/dist/validation/utils/node-type-map.js +50 -0
- package/dist/validation/utils/node-type-map.js.map +1 -0
- package/dist/validation/utils/resolve-connections.d.ts +8 -0
- package/dist/validation/utils/resolve-connections.js +64 -0
- package/dist/validation/utils/resolve-connections.js.map +1 -0
- package/dist/workflow-builder-agent.d.ts +72 -0
- package/dist/workflow-builder-agent.js +401 -0
- package/dist/workflow-builder-agent.js.map +1 -0
- package/dist/workflow-state.d.ts +26 -0
- package/dist/workflow-state.js +79 -0
- package/dist/workflow-state.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NotificationBestPractices = void 0;
|
|
4
|
+
const categorization_1 = require("../../types/categorization");
|
|
5
|
+
class NotificationBestPractices {
|
|
6
|
+
technique = categorization_1.WorkflowTechnique.NOTIFICATION;
|
|
7
|
+
version = '1.0.0';
|
|
8
|
+
documentation = `# Best Practices: Notification Workflows
|
|
9
|
+
|
|
10
|
+
## Workflow Design
|
|
11
|
+
|
|
12
|
+
Structure notification workflows in a clear sequence: Trigger → Data Retrieval/Processing → Condition Check → Notification Action → Post-Notification (logging/tracking). Keep each part modular with nodes dedicated to specific purposes.
|
|
13
|
+
|
|
14
|
+
Choose between event-based triggers (webhooks, form submissions, CRM events) for immediate notifications or scheduled triggers (Cron) for periodic condition monitoring. Test Cron triggers in manual mode first to avoid unintended executions.
|
|
15
|
+
|
|
16
|
+
CRITICAL: Multi-channel notifications should branch from a single condition check to multiple notification nodes in parallel, not duplicate the entire workflow. This enables easy extension and maintenance.
|
|
17
|
+
|
|
18
|
+
Example pattern:
|
|
19
|
+
- Webhook/Schedule Trigger → Fetch Data → IF (threshold exceeded) → [Email + Slack + SMS nodes in parallel]
|
|
20
|
+
- Result: Single workflow handles all channels efficiently with consistent logic
|
|
21
|
+
|
|
22
|
+
## Condition Logic & Filtering
|
|
23
|
+
|
|
24
|
+
Use IF nodes for simple threshold checks without code. For complex conditions (multiple fields, array filtering), use Function nodes to script the logic and filter items that need alerts.
|
|
25
|
+
|
|
26
|
+
Always include empty notification prevention - check that alert-worthy items exist (items.length > 0) before proceeding to notification nodes. Route the false branch to end the workflow or log "no alert needed".
|
|
27
|
+
|
|
28
|
+
Store threshold values in environment variables or external sources (Google Sheets, database) rather than hardcoding. This enables adjustment without workflow modification.
|
|
29
|
+
|
|
30
|
+
## Message Construction
|
|
31
|
+
|
|
32
|
+
Use expressions to inject dynamic data into messages. The expression \`{{ $json.fieldName }}\` pulls data from input items. For email subjects and bodies, include key details like metric names, values, and timestamps.
|
|
33
|
+
|
|
34
|
+
Format messages appropriately for each channel:
|
|
35
|
+
- Email: Support HTML or plain text, use clear subject lines
|
|
36
|
+
- Slack: Use markdown-like formatting, \\n for newlines
|
|
37
|
+
- SMS: Keep concise due to character limits, plain text only
|
|
38
|
+
|
|
39
|
+
## Authentication & Permissions
|
|
40
|
+
|
|
41
|
+
Configure proper credentials for each service:
|
|
42
|
+
- Email: SMTP settings with correct host/port/auth (use App Passwords for Gmail)
|
|
43
|
+
- Slack: Bot token with chat:write scope, bot must be invited to target channel
|
|
44
|
+
- SMS (Twilio): Account SID, Auth Token, verified phone numbers
|
|
45
|
+
|
|
46
|
+
Store sensitive information in n8n credentials system or environment variables, never hardcode in workflows.
|
|
47
|
+
|
|
48
|
+
## Alert Management
|
|
49
|
+
|
|
50
|
+
Implement cooldown mechanisms to prevent notification floods. Record last alert time and check before sending duplicates. Consider alert aggregation - send one message listing multiple items rather than individual alerts.
|
|
51
|
+
|
|
52
|
+
Add logging nodes to track sent notifications for audit trails and duplicate prevention. Consider using error handling paths with Continue on Fail settings for redundancy.
|
|
53
|
+
|
|
54
|
+
## Recommended Nodes
|
|
55
|
+
|
|
56
|
+
### Trigger Nodes
|
|
57
|
+
|
|
58
|
+
**Webhook** (n8n-nodes-base.webhook):
|
|
59
|
+
- Purpose: Event-based notifications triggered by external systems
|
|
60
|
+
- Use cases: Form submissions, CRM events, API webhooks
|
|
61
|
+
- Best practice: Validate incoming data before processing
|
|
62
|
+
|
|
63
|
+
**Schedule Trigger** (n8n-nodes-base.scheduleTrigger):
|
|
64
|
+
- Purpose: Periodic monitoring and batch notifications
|
|
65
|
+
- Use cases: Daily reports, threshold monitoring, scheduled alerts
|
|
66
|
+
- Best practice: Test in manual mode first to avoid unintended executions
|
|
67
|
+
|
|
68
|
+
**Email Trigger IMAP** (n8n-nodes-base.emailReadImap):
|
|
69
|
+
- Purpose: Email-triggered alerts and auto-responses
|
|
70
|
+
- Use cases: Support ticket creation, email monitoring
|
|
71
|
+
- Best practice: Use filters to avoid processing every email
|
|
72
|
+
|
|
73
|
+
### Notification Nodes
|
|
74
|
+
|
|
75
|
+
**Send Email** (n8n-nodes-base.emailSend):
|
|
76
|
+
- Purpose: Detailed alerts with attachments and HTML formatting
|
|
77
|
+
- Use cases: Reports, detailed notifications, formal communications
|
|
78
|
+
- Configuration: SMTP settings, use App Passwords for Gmail
|
|
79
|
+
- Best practice: Use clear subject lines with key information
|
|
80
|
+
|
|
81
|
+
**Slack** (n8n-nodes-base.slack):
|
|
82
|
+
- Purpose: Team notifications in channels or direct messages
|
|
83
|
+
- Use cases: Team alerts, status updates, incident notifications
|
|
84
|
+
- Configuration: Bot token with chat:write scope, bot must be invited to channel
|
|
85
|
+
- Best practice: Use markdown formatting, channel IDs (starting with C) not names
|
|
86
|
+
|
|
87
|
+
**Telegram** (n8n-nodes-base.telegram):
|
|
88
|
+
- Purpose: Instant messaging alerts to individuals or groups
|
|
89
|
+
- Use cases: Personal notifications, bot interactions
|
|
90
|
+
- Configuration: Bot token from BotFather
|
|
91
|
+
- Best practice: Use chat ID for direct messages
|
|
92
|
+
|
|
93
|
+
**Twilio** (n8n-nodes-base.twilio):
|
|
94
|
+
- Purpose: SMS/WhatsApp critical alerts
|
|
95
|
+
- Use cases: High-priority alerts, two-factor authentication, critical incidents
|
|
96
|
+
- Configuration: Account SID, Auth Token, verified phone numbers
|
|
97
|
+
- Best practice: Keep messages concise, use international format (+1234567890)
|
|
98
|
+
|
|
99
|
+
**HTTP Request** (n8n-nodes-base.httpRequest):
|
|
100
|
+
- Purpose: Custom webhooks (Microsoft Teams, Discord, custom APIs)
|
|
101
|
+
- Use cases: Integration with services without dedicated nodes
|
|
102
|
+
- Best practice: Test webhook URLs before production
|
|
103
|
+
|
|
104
|
+
### Logic & Processing
|
|
105
|
+
|
|
106
|
+
**IF** (n8n-nodes-base.if):
|
|
107
|
+
- Purpose: Simple threshold checks and condition routing
|
|
108
|
+
- Use cases: Check if metric exceeds threshold, validate data
|
|
109
|
+
- Best practice: Include empty notification prevention (items.length > 0)
|
|
110
|
+
|
|
111
|
+
**Switch** (n8n-nodes-base.switch):
|
|
112
|
+
- Purpose: Route notifications based on severity/type
|
|
113
|
+
- Use cases: Different channels for different alert levels
|
|
114
|
+
- Best practice: Always define Default case for unexpected values
|
|
115
|
+
|
|
116
|
+
**Function** (n8n-nodes-base.function):
|
|
117
|
+
- Purpose: Complex filtering and data transformation
|
|
118
|
+
- Use cases: Array filtering, complex conditions, message formatting
|
|
119
|
+
- Best practice: Keep logic focused and well-documented
|
|
120
|
+
|
|
121
|
+
**Merge** (n8n-nodes-base.merge):
|
|
122
|
+
- Purpose: Combine parallel notification branches
|
|
123
|
+
- Use cases: Track all notification attempts, consolidate logs
|
|
124
|
+
- Best practice: Use after parallel notification nodes
|
|
125
|
+
|
|
126
|
+
### Data Sources
|
|
127
|
+
|
|
128
|
+
**Database Nodes**:
|
|
129
|
+
- Postgres (n8n-nodes-base.postgres)
|
|
130
|
+
- MySQL (n8n-nodes-base.mySql)
|
|
131
|
+
- MongoDB (n8n-nodes-base.mongoDb)
|
|
132
|
+
|
|
133
|
+
Purpose: Fetch metrics, thresholds, and historical data
|
|
134
|
+
Best practice: Use queries with proper indexing for performance
|
|
135
|
+
|
|
136
|
+
**Google Sheets** (n8n-nodes-base.googleSheets):
|
|
137
|
+
- Purpose: Configuration storage and logging
|
|
138
|
+
- Use cases: Store thresholds, log notifications, track cooldowns
|
|
139
|
+
- Best practice: Use for non-critical configurations that need easy updates
|
|
140
|
+
|
|
141
|
+
**HTTP Request** (n8n-nodes-base.httpRequest):
|
|
142
|
+
- Purpose: API data retrieval
|
|
143
|
+
- Use cases: Fetch metrics from monitoring APIs, get user preferences
|
|
144
|
+
- Best practice: Handle API errors gracefully
|
|
145
|
+
|
|
146
|
+
### Utility Nodes
|
|
147
|
+
|
|
148
|
+
**Set** (n8n-nodes-base.set):
|
|
149
|
+
- Purpose: Prepare alert messages and structure data
|
|
150
|
+
- Use cases: Format notification content, add metadata
|
|
151
|
+
- Best practice: Use to centralize message construction logic
|
|
152
|
+
|
|
153
|
+
**Wait** (n8n-nodes-base.wait):
|
|
154
|
+
- Purpose: Delays between notifications
|
|
155
|
+
- Use cases: Rate limiting, cooldown periods, retry logic
|
|
156
|
+
- Best practice: Use for preventing notification floods
|
|
157
|
+
|
|
158
|
+
**Split In Batches** (n8n-nodes-base.splitInBatches):
|
|
159
|
+
- Purpose: Handle large datasets without overwhelming recipients
|
|
160
|
+
- Use cases: Bulk notifications with rate limiting
|
|
161
|
+
- Best practice: Combine with Wait node for controlled sending
|
|
162
|
+
|
|
163
|
+
## Common Pitfalls to Avoid
|
|
164
|
+
|
|
165
|
+
### Authentication Failures
|
|
166
|
+
**Problem**: Invalid or expired credentials are the most common cause of failed notifications.
|
|
167
|
+
|
|
168
|
+
**Solution**:
|
|
169
|
+
- Regularly verify API keys, OAuth tokens, and SMTP passwords
|
|
170
|
+
- Ensure bots have proper permissions (Slack bots need channel membership)
|
|
171
|
+
- Use n8n credentials system, never hardcode sensitive data
|
|
172
|
+
- Test authentication in isolation before deploying
|
|
173
|
+
|
|
174
|
+
### Notification Floods
|
|
175
|
+
**Problem**: Without proper controls, a threshold breach can trigger hundreds of identical alerts.
|
|
176
|
+
|
|
177
|
+
**Solution**:
|
|
178
|
+
- Implement cooldown periods using Wait node or tracking last alert time
|
|
179
|
+
- Use alert aggregation - send one message listing multiple items
|
|
180
|
+
- Use deduplication logic to prevent identical alerts
|
|
181
|
+
- Consider exponential backoff for repeated alerts
|
|
182
|
+
- Store last notification timestamp in database/sheets
|
|
183
|
+
|
|
184
|
+
### Incorrect Channel Configuration
|
|
185
|
+
**Problem**: Notifications fail due to misconfigured channels.
|
|
186
|
+
|
|
187
|
+
**Solution**:
|
|
188
|
+
- Slack requires channel IDs (starting with C) not names
|
|
189
|
+
- Email requires verified sender addresses
|
|
190
|
+
- SMS needs international format (+1234567890)
|
|
191
|
+
- Test each channel with sample data before production
|
|
192
|
+
- Validate configuration in node settings
|
|
193
|
+
|
|
194
|
+
### Data Type Mismatches
|
|
195
|
+
**Problem**: String-to-number comparisons fail silently ("5" > "10" is lexicographically true).
|
|
196
|
+
|
|
197
|
+
**Solution**:
|
|
198
|
+
- Always convert data types before comparisons
|
|
199
|
+
- Use Number() or parseInt() for numeric comparisons
|
|
200
|
+
- Escape special characters in messages to prevent formatting breaks
|
|
201
|
+
- Validate data types early in the workflow
|
|
202
|
+
|
|
203
|
+
### Missing Error Handling
|
|
204
|
+
**Problem**: A single failed notification can stop the entire workflow.
|
|
205
|
+
|
|
206
|
+
**Solution**:
|
|
207
|
+
- Configure error workflows using Error Trigger node
|
|
208
|
+
- Use "Continue on Fail" setting for redundancy
|
|
209
|
+
- Implement fallback channels (if Slack fails, send email)
|
|
210
|
+
- Log failed notification attempts for debugging
|
|
211
|
+
- Add retry logic with exponential backoff
|
|
212
|
+
|
|
213
|
+
### Rate Limit Violations
|
|
214
|
+
**Problem**: External services have posting limits that can block notifications.
|
|
215
|
+
|
|
216
|
+
**Solution**:
|
|
217
|
+
- Add delays between bulk sends using Wait node
|
|
218
|
+
- Monitor API quotas and adjust trigger frequency
|
|
219
|
+
- Use BCC for bulk emails when appropriate
|
|
220
|
+
- Implement batch processing with Split In Batches
|
|
221
|
+
- Check service documentation for rate limits
|
|
222
|
+
- Use webhook aggregation where possible
|
|
223
|
+
`;
|
|
224
|
+
getDocumentation() {
|
|
225
|
+
return this.documentation;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
exports.NotificationBestPractices = NotificationBestPractices;
|
|
229
|
+
//# sourceMappingURL=notification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification.js","sourceRoot":"","sources":["../../../src/tools/best-practices/notification.ts"],"names":[],"mappings":";;;AACA,2DAA2D;AAE3D,MAAa,yBAAyB;IAC5B,SAAS,GAAG,kCAAiB,CAAC,YAAY,CAAC;IAC3C,OAAO,GAAG,OAAO,CAAC;IAEV,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuNjC,CAAC;IAED,gBAAgB;QACf,OAAO,IAAI,CAAC,aAAa,CAAC;IAC3B,CAAC;CACD;AAhOD,8DAgOC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { BestPracticesDocument } from '../../types/best-practices';
|
|
2
|
+
export declare class SchedulingBestPractices implements BestPracticesDocument {
|
|
3
|
+
readonly technique: "scheduling";
|
|
4
|
+
readonly version = "1.0.0";
|
|
5
|
+
private readonly documentation;
|
|
6
|
+
getDocumentation(): string;
|
|
7
|
+
}
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SchedulingBestPractices = void 0;
|
|
4
|
+
const categorization_1 = require("../../types/categorization");
|
|
5
|
+
class SchedulingBestPractices {
|
|
6
|
+
technique = categorization_1.WorkflowTechnique.SCHEDULING;
|
|
7
|
+
version = '1.0.0';
|
|
8
|
+
documentation = `# Best Practices: Scheduling Workflows
|
|
9
|
+
|
|
10
|
+
## Workflow Design
|
|
11
|
+
|
|
12
|
+
Structure scheduled workflows to perform focused, well-defined tasks. Use modular sub-workflows via Execute Workflow node for complex operations (database cleanup, report generation) to isolate failures and improve maintainability.
|
|
13
|
+
|
|
14
|
+
For recurring tasks, use Schedule Trigger node with clear naming (e.g., "Daily 08:00 Trigger", "Every 6h Cron"). Document schedule purpose in workflow description.
|
|
15
|
+
|
|
16
|
+
Prevent overlapping executions by ensuring worst-case execution time < schedule interval. For frequent schedules, implement mutex/lock mechanisms using external systems if needed.
|
|
17
|
+
|
|
18
|
+
CRITICAL: Always save and activate workflows with Schedule Trigger nodes - scheduled workflows only run in active mode. Manual execution works during development but activation is required for automatic runs.
|
|
19
|
+
|
|
20
|
+
## Scheduling Patterns
|
|
21
|
+
|
|
22
|
+
### Recurring Schedules
|
|
23
|
+
|
|
24
|
+
Use Schedule Trigger in two modes:
|
|
25
|
+
- **Interval Mode**: User-friendly dropdowns for common schedules (every X minutes, daily at 09:00, weekly on Mondays)
|
|
26
|
+
- **Cron Expression Mode**: Complex patterns using 5-field syntax (m h dom mon dow) with optional seconds field. Example: \`0 9 * * 1\` triggers every Monday at 09:00
|
|
27
|
+
|
|
28
|
+
Multiple schedules can be combined in single Schedule Trigger node using multiple Trigger Rules. Useful when same logic applies to different timings.
|
|
29
|
+
|
|
30
|
+
### One-Time Events
|
|
31
|
+
|
|
32
|
+
For one-time future runs, use cron expression with exact date/time (e.g., \`0 12 22 10 *\` for Oct 22 at 12:00).
|
|
33
|
+
IMPORTANT: Deactivate workflow after execution to prevent yearly recurrence.
|
|
34
|
+
|
|
35
|
+
For event-relative scheduling, use Wait node to pause workflow until specified time/date. Workflow state persists across n8n restarts.
|
|
36
|
+
|
|
37
|
+
### Conditional Scheduling
|
|
38
|
+
|
|
39
|
+
Use IF/Switch nodes after Schedule Trigger for runtime conditions:
|
|
40
|
+
- Check if today is last day of month before running monthly reports
|
|
41
|
+
- Skip execution on holidays or based on external data
|
|
42
|
+
- Route different tasks based on conditions
|
|
43
|
+
|
|
44
|
+
Better than complex cron expressions and provides flexibility for dynamic requirements.
|
|
45
|
+
|
|
46
|
+
## Time Zone Configuration
|
|
47
|
+
|
|
48
|
+
CRITICAL: Explicitly set timezone to avoid scheduling confusion.
|
|
49
|
+
|
|
50
|
+
By default n8n will:
|
|
51
|
+
- Attempts to detect local timezone at signup, defaults to GMT if unsure
|
|
52
|
+
- Set instance timezone via Admin Panel
|
|
53
|
+
- Override per-workflow as needed
|
|
54
|
+
|
|
55
|
+
Schedule Trigger uses workflow timezone if set, otherwise instance timezone. Cron schedules automatically adjust for DST when using region timezones (Europe/London, America/New_York).
|
|
56
|
+
|
|
57
|
+
WARNING: Wait node uses server system time, ignoring workflow timezone settings. Account for this when using Wait with specific clock times.
|
|
58
|
+
|
|
59
|
+
## Error Handling & Monitoring
|
|
60
|
+
|
|
61
|
+
Build robust error handling for unattended execution:
|
|
62
|
+
- Use Error Trigger for global error workflow
|
|
63
|
+
- Implement retry logic with Wait node for transient failures
|
|
64
|
+
- Add email/Slack notifications for failures
|
|
65
|
+
- Log timestamps with Console node to detect timing issues
|
|
66
|
+
|
|
67
|
+
Monitor Executions list regularly for:
|
|
68
|
+
- Expected trigger times
|
|
69
|
+
- Duplicates or gaps
|
|
70
|
+
- Failed executions
|
|
71
|
+
- Long-running workflows
|
|
72
|
+
|
|
73
|
+
## Recommended Nodes
|
|
74
|
+
|
|
75
|
+
### Schedule Trigger (n8n-nodes-base.scheduleTrigger)
|
|
76
|
+
|
|
77
|
+
Purpose: Primary node for running workflows on schedule
|
|
78
|
+
|
|
79
|
+
Modes:
|
|
80
|
+
- Interval: Simple recurring schedules via UI
|
|
81
|
+
- Cron: Complex patterns via expressions
|
|
82
|
+
|
|
83
|
+
Best Practices:
|
|
84
|
+
- Activate workflow for schedule to work
|
|
85
|
+
- Use descriptive names including schedule
|
|
86
|
+
- Test with manual execution during development
|
|
87
|
+
- Consider DST impacts for region timezones
|
|
88
|
+
|
|
89
|
+
### Wait (n8n-nodes-base.wait)
|
|
90
|
+
|
|
91
|
+
Purpose: Pause workflow execution until specified time
|
|
92
|
+
|
|
93
|
+
Use Cases:
|
|
94
|
+
- Delay actions relative to events
|
|
95
|
+
- One-off timers per data item
|
|
96
|
+
- Follow-up actions after specific duration
|
|
97
|
+
|
|
98
|
+
Best Practices:
|
|
99
|
+
- Use external database (PostgreSQL) for long waits
|
|
100
|
+
- Avoid extremely long wait times
|
|
101
|
+
- Remember Wait uses server time, not workflow timezone
|
|
102
|
+
- State persists across n8n restarts
|
|
103
|
+
|
|
104
|
+
### IF (n8n-nodes-base.if)
|
|
105
|
+
|
|
106
|
+
Purpose: Add conditional logic to scheduled workflows
|
|
107
|
+
|
|
108
|
+
Use Cases:
|
|
109
|
+
- Check date conditions (last day of month)
|
|
110
|
+
- Skip execution based on external data
|
|
111
|
+
- Route to different actions conditionally
|
|
112
|
+
|
|
113
|
+
Best Practices:
|
|
114
|
+
- Enable "Convert types where required" for comparisons
|
|
115
|
+
- Document condition logic clearly
|
|
116
|
+
- Prefer IF nodes over complex cron expressions
|
|
117
|
+
|
|
118
|
+
### Switch (n8n-nodes-base.switch)
|
|
119
|
+
|
|
120
|
+
Purpose: Multiple conditional branches for complex routing
|
|
121
|
+
|
|
122
|
+
Use Cases:
|
|
123
|
+
- Different actions based on day of week
|
|
124
|
+
- Time-based routing within workflow
|
|
125
|
+
- Multi-path conditional execution
|
|
126
|
+
|
|
127
|
+
### Error Trigger (n8n-nodes-base.errorTrigger)
|
|
128
|
+
|
|
129
|
+
Purpose: Global error handling for failed scheduled executions
|
|
130
|
+
|
|
131
|
+
Use Cases:
|
|
132
|
+
- Send notifications on workflow failure
|
|
133
|
+
- Log errors to external systems
|
|
134
|
+
- Implement global retry logic
|
|
135
|
+
|
|
136
|
+
Best Practices:
|
|
137
|
+
- Create dedicated error workflow
|
|
138
|
+
- Include workflow name and timestamp in notifications
|
|
139
|
+
- Consider severity levels for different failures
|
|
140
|
+
|
|
141
|
+
### Execute Workflow (n8n-nodes-base.executeWorkflow)
|
|
142
|
+
|
|
143
|
+
Purpose: Call sub-workflows for modular scheduling
|
|
144
|
+
|
|
145
|
+
Use Cases:
|
|
146
|
+
- Break complex scheduled tasks into modules
|
|
147
|
+
- Reuse common scheduled operations
|
|
148
|
+
- Isolate failures to specific components
|
|
149
|
+
|
|
150
|
+
Best Practices:
|
|
151
|
+
- Pass parameters for configuration
|
|
152
|
+
- Handle sub-workflow errors appropriately
|
|
153
|
+
- Use for maintainable, focused workflows
|
|
154
|
+
|
|
155
|
+
### Database Nodes
|
|
156
|
+
|
|
157
|
+
Purpose: Check pending tasks or store execution history
|
|
158
|
+
|
|
159
|
+
- MySQL (n8n-nodes-base.mySql)
|
|
160
|
+
- Postgres (n8n-nodes-base.postgres)
|
|
161
|
+
- MongoDB (n8n-nodes-base.mongoDb)
|
|
162
|
+
|
|
163
|
+
Use Cases:
|
|
164
|
+
- Store list of pending one-time tasks
|
|
165
|
+
- Log execution history
|
|
166
|
+
- Implement custom scheduling queue
|
|
167
|
+
|
|
168
|
+
Best Practices:
|
|
169
|
+
- Query efficiently with proper indexes
|
|
170
|
+
- Clean up old execution logs periodically
|
|
171
|
+
- Use for dynamic scheduling requirements
|
|
172
|
+
|
|
173
|
+
### HTTP Request (n8n-nodes-base.httpRequest)
|
|
174
|
+
|
|
175
|
+
Purpose: Call external APIs or monitoring services
|
|
176
|
+
|
|
177
|
+
Use Cases:
|
|
178
|
+
- Send heartbeat to monitoring service
|
|
179
|
+
- Check external conditions before execution
|
|
180
|
+
- Trigger external scheduled jobs
|
|
181
|
+
|
|
182
|
+
### Email/Slack
|
|
183
|
+
|
|
184
|
+
- Email (n8n-nodes-base.emailSend)
|
|
185
|
+
- Slack (n8n-nodes-base.slack)
|
|
186
|
+
|
|
187
|
+
Purpose: Send notifications for scheduled workflow events
|
|
188
|
+
|
|
189
|
+
Use Cases:
|
|
190
|
+
- Daily report delivery
|
|
191
|
+
- Failure notifications
|
|
192
|
+
- Completion confirmations
|
|
193
|
+
|
|
194
|
+
## Common Pitfalls to Avoid
|
|
195
|
+
|
|
196
|
+
### Time Zone Mismatch
|
|
197
|
+
|
|
198
|
+
**Problem**: Workflows run at wrong time due to incorrect timezone configuration. Schedule set for 08:00 runs at 07:00 or 09:00.
|
|
199
|
+
|
|
200
|
+
**Solution**:
|
|
201
|
+
- Explicitly set workflow or instance timezone
|
|
202
|
+
- Verify timezone after DST changes
|
|
203
|
+
- Use UTC for consistency if timezone complexity is problematic
|
|
204
|
+
- Remember self-hosted defaults to America/New_York
|
|
205
|
+
|
|
206
|
+
### Daylight Saving Time Issues
|
|
207
|
+
|
|
208
|
+
**Problem**: Missed or duplicate executions during DST transitions. Jobs may not run or run twice when clocks change.
|
|
209
|
+
|
|
210
|
+
**Solution**:
|
|
211
|
+
- Use region timezones for automatic DST handling
|
|
212
|
+
- Test critical schedules around DST dates
|
|
213
|
+
- Consider fixed-offset timezone for year-round consistency
|
|
214
|
+
- Update n8n version for latest timezone database
|
|
215
|
+
|
|
216
|
+
### Duplicate Trigger Executions
|
|
217
|
+
|
|
218
|
+
**Problem**: Workflows triggering multiple times at scheduled time, especially in multi-instance setups.
|
|
219
|
+
|
|
220
|
+
**Solution**:
|
|
221
|
+
- Upgrade to n8n ≥1.107.0 (fixes duplicate cron registrations)
|
|
222
|
+
- Configure N8N_MULTI_MAIN_PROCESS=true for multi-instance setups
|
|
223
|
+
- Disable and re-enable workflow if duplicates persist
|
|
224
|
+
- Restart n8n process if issues occur after editing
|
|
225
|
+
|
|
226
|
+
### Missed Schedules During Downtime
|
|
227
|
+
|
|
228
|
+
**Problem**: Scheduled runs missed when n8n instance is down. No automatic catch-up for missed triggers.
|
|
229
|
+
|
|
230
|
+
**Solution**:
|
|
231
|
+
- Ensure high availability for critical schedules
|
|
232
|
+
- Design idempotent workflows that check for missed work
|
|
233
|
+
- Use daily check pattern instead of exact timing when possible
|
|
234
|
+
- Implement external monitoring for uptime
|
|
235
|
+
|
|
236
|
+
### Overlapping Executions
|
|
237
|
+
|
|
238
|
+
**Problem**: Next scheduled run starts before previous completes, causing race conditions or resource conflicts.
|
|
239
|
+
|
|
240
|
+
**Solution**:
|
|
241
|
+
- Increase interval to exceed worst-case execution time
|
|
242
|
+
- Implement mutex/lock using database or external system
|
|
243
|
+
- Add execution check at workflow start
|
|
244
|
+
- Configure single worker for workflow in queue mode
|
|
245
|
+
|
|
246
|
+
### Wait Node Timezone Confusion
|
|
247
|
+
|
|
248
|
+
**Problem**: Wait node uses server system time, ignoring workflow timezone setting. Wait until "10:00" may not match expected timezone.
|
|
249
|
+
|
|
250
|
+
**Solution**:
|
|
251
|
+
- Account for server timezone when setting Wait times
|
|
252
|
+
- Use UTC timestamps for clarity
|
|
253
|
+
- Run server in target timezone if possible
|
|
254
|
+
- Prefer Schedule Trigger for timezone-aware scheduling
|
|
255
|
+
|
|
256
|
+
### First Execution Timing
|
|
257
|
+
|
|
258
|
+
**Problem**: First execution after activation doesn't match expected schedule. Activation time affects next run calculation.
|
|
259
|
+
|
|
260
|
+
**Solution**:
|
|
261
|
+
- Plan activation timing carefully
|
|
262
|
+
- Use manual execution for immediate first run
|
|
263
|
+
- Understand that schedule recalculates from activation moment
|
|
264
|
+
- Document expected first run time
|
|
265
|
+
|
|
266
|
+
### Cron Syntax Errors
|
|
267
|
+
|
|
268
|
+
**Problem**: Invalid cron expression prevents trigger activation. Missing fields or incorrect format causes silent failures.
|
|
269
|
+
|
|
270
|
+
**Solution**:
|
|
271
|
+
- Use crontab.guru to validate expressions
|
|
272
|
+
- Remember n8n supports 5 or 6 field syntax
|
|
273
|
+
- n8n supports both 5-field and 6-field (with seconds) cron syntax; use 6 fields if you want to specify seconds (e.g., prefix with 0 for seconds: \`0 0 * * * *\`)
|
|
274
|
+
- Use interval mode for simple schedules
|
|
275
|
+
`;
|
|
276
|
+
getDocumentation() {
|
|
277
|
+
return this.documentation;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
exports.SchedulingBestPractices = SchedulingBestPractices;
|
|
281
|
+
//# sourceMappingURL=scheduling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduling.js","sourceRoot":"","sources":["../../../src/tools/best-practices/scheduling.ts"],"names":[],"mappings":";;;AACA,2DAA2D;AAE3D,MAAa,uBAAuB;IAC1B,SAAS,GAAG,kCAAiB,CAAC,UAAU,CAAC;IACzC,OAAO,GAAG,OAAO,CAAC;IAEV,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2QjC,CAAC;IAED,gBAAgB;QACf,OAAO,IAAI,CAAC,aAAa,CAAC;IAC3B,CAAC;CACD;AApRD,0DAoRC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { BestPracticesDocument } from '../../types/best-practices';
|
|
2
|
+
export declare class ScrapingAndResearchBestPractices implements BestPracticesDocument {
|
|
3
|
+
readonly technique: "scraping_and_research";
|
|
4
|
+
readonly version = "1.0.0";
|
|
5
|
+
private readonly documentation;
|
|
6
|
+
getDocumentation(): string;
|
|
7
|
+
}
|