aios-core 2.1.5 → 2.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/.aios-core/core/README.md +229 -229
- package/.aios-core/core/data/agent-config-requirements.yaml +368 -368
- package/.aios-core/core/data/aios-kb.md +923 -923
- package/.aios-core/core/data/workflow-patterns.yaml +267 -267
- package/.aios-core/core/docs/SHARD-TRANSLATION-GUIDE.md +335 -335
- package/.aios-core/core/docs/component-creation-guide.md +457 -457
- package/.aios-core/core/docs/session-update-pattern.md +307 -307
- package/.aios-core/core/docs/template-syntax.md +266 -266
- package/.aios-core/core/docs/troubleshooting-guide.md +624 -624
- package/.aios-core/core/elicitation/elicitation-engine.js +1 -1
- package/.aios-core/core/index.esm.js +42 -42
- package/.aios-core/core/index.js +1 -1
- package/.aios-core/core/migration/migration-config.yaml +83 -83
- package/.aios-core/core/migration/module-mapping.yaml +89 -89
- package/.aios-core/core/quality-gates/layer2-pr-automation.js +1 -1
- package/.aios-core/core/quality-gates/quality-gate-config.yaml +86 -86
- package/.aios-core/core/registry/README.md +179 -179
- package/.aios-core/core/utils/security-utils.js +1 -1
- package/.aios-core/core-config.yaml +391 -382
- package/.aios-core/data/agent-config-requirements.yaml +368 -368
- package/.aios-core/data/aios-kb.md +923 -923
- package/.aios-core/data/technical-preferences.md +3 -3
- package/.aios-core/data/workflow-patterns.yaml +267 -267
- package/.aios-core/development/README.md +142 -142
- package/.aios-core/development/agent-teams/team-all.yaml +15 -15
- package/.aios-core/development/agent-teams/team-fullstack.yaml +18 -18
- package/.aios-core/development/agent-teams/team-ide-minimal.yaml +10 -10
- package/.aios-core/development/agent-teams/team-no-ui.yaml +13 -13
- package/.aios-core/development/agent-teams/team-qa-focused.yaml +155 -155
- package/.aios-core/development/agents/aios-master.md +339 -339
- package/.aios-core/development/agents/analyst.md +195 -195
- package/.aios-core/development/agents/architect.md +359 -359
- package/.aios-core/development/agents/data-engineer.md +468 -468
- package/.aios-core/development/agents/dev.md +390 -390
- package/.aios-core/development/agents/devops.md +398 -398
- package/.aios-core/development/agents/pm.md +198 -198
- package/.aios-core/development/agents/po.md +256 -256
- package/.aios-core/development/agents/qa.md +312 -312
- package/.aios-core/development/agents/sm.md +220 -220
- package/.aios-core/development/agents/ux-design-expert.md +451 -451
- package/.aios-core/development/scripts/greeting-config-cli.js +85 -85
- package/.aios-core/development/tasks/add-mcp.md +319 -319
- package/.aios-core/development/tasks/advanced-elicitation.md +318 -318
- package/.aios-core/development/tasks/analyst-facilitate-brainstorming.md +341 -341
- package/.aios-core/development/tasks/analyze-brownfield.md +456 -0
- package/.aios-core/development/tasks/analyze-framework.md +696 -696
- package/.aios-core/development/tasks/analyze-performance.md +637 -637
- package/.aios-core/development/tasks/apply-qa-fixes.md +340 -340
- package/.aios-core/development/tasks/architect-analyze-impact.md +826 -826
- package/.aios-core/development/tasks/audit-codebase.md +429 -429
- package/.aios-core/development/tasks/audit-tailwind-config.md +270 -270
- package/.aios-core/development/tasks/audit-utilities.md +358 -358
- package/.aios-core/development/tasks/bootstrap-shadcn-library.md +286 -286
- package/.aios-core/development/tasks/brownfield-create-epic.md +485 -485
- package/.aios-core/development/tasks/brownfield-create-story.md +356 -356
- package/.aios-core/development/tasks/build-component.md +478 -478
- package/.aios-core/development/tasks/calculate-roi.md +455 -455
- package/.aios-core/development/tasks/ci-cd-configuration.md +764 -764
- package/.aios-core/development/tasks/cleanup-utilities.md +670 -670
- package/.aios-core/development/tasks/collaborative-edit.md +1108 -1108
- package/.aios-core/development/tasks/compose-molecule.md +284 -284
- package/.aios-core/development/tasks/consolidate-patterns.md +414 -414
- package/.aios-core/development/tasks/correct-course.md +279 -279
- package/.aios-core/development/tasks/create-agent.md +321 -321
- package/.aios-core/development/tasks/create-brownfield-story.md +726 -726
- package/.aios-core/development/tasks/create-deep-research-prompt.md +498 -498
- package/.aios-core/development/tasks/create-doc.md +316 -316
- package/.aios-core/development/tasks/create-next-story.md +774 -774
- package/.aios-core/development/tasks/create-suite.md +283 -283
- package/.aios-core/development/tasks/create-task.md +371 -371
- package/.aios-core/development/tasks/create-workflow.md +370 -370
- package/.aios-core/development/tasks/db-analyze-hotpaths.md +572 -572
- package/.aios-core/development/tasks/db-apply-migration.md +381 -381
- package/.aios-core/development/tasks/db-bootstrap.md +642 -642
- package/.aios-core/development/tasks/db-domain-modeling.md +693 -693
- package/.aios-core/development/tasks/db-dry-run.md +293 -293
- package/.aios-core/development/tasks/db-env-check.md +260 -260
- package/.aios-core/development/tasks/db-expansion-pack-integration.md +663 -663
- package/.aios-core/development/tasks/db-explain.md +631 -631
- package/.aios-core/development/tasks/db-impersonate.md +495 -495
- package/.aios-core/development/tasks/db-load-csv.md +593 -593
- package/.aios-core/development/tasks/db-policy-apply.md +653 -653
- package/.aios-core/development/tasks/db-rls-audit.md +411 -411
- package/.aios-core/development/tasks/db-rollback.md +739 -739
- package/.aios-core/development/tasks/db-run-sql.md +613 -613
- package/.aios-core/development/tasks/db-schema-audit.md +1011 -1011
- package/.aios-core/development/tasks/db-seed.md +390 -390
- package/.aios-core/development/tasks/db-smoke-test.md +351 -351
- package/.aios-core/development/tasks/db-snapshot.md +569 -569
- package/.aios-core/development/tasks/db-supabase-setup.md +712 -712
- package/.aios-core/development/tasks/db-verify-order.md +515 -515
- package/.aios-core/development/tasks/deprecate-component.md +956 -956
- package/.aios-core/development/tasks/dev-apply-qa-fixes.md +318 -318
- package/.aios-core/development/tasks/dev-backlog-debt.md +469 -469
- package/.aios-core/development/tasks/dev-develop-story.md +846 -846
- package/.aios-core/development/tasks/dev-improve-code-quality.md +872 -872
- package/.aios-core/development/tasks/dev-optimize-performance.md +1033 -1033
- package/.aios-core/development/tasks/dev-suggest-refactoring.md +870 -870
- package/.aios-core/development/tasks/dev-validate-next-story.md +348 -348
- package/.aios-core/development/tasks/document-project.md +552 -552
- package/.aios-core/development/tasks/environment-bootstrap.md +1311 -1311
- package/.aios-core/development/tasks/execute-checklist.md +301 -301
- package/.aios-core/development/tasks/export-design-tokens-dtcg.md +274 -274
- package/.aios-core/development/tasks/extend-pattern.md +269 -269
- package/.aios-core/development/tasks/extract-tokens.md +467 -467
- package/.aios-core/development/tasks/facilitate-brainstorming-session.md +518 -518
- package/.aios-core/development/tasks/generate-ai-frontend-prompt.md +260 -260
- package/.aios-core/development/tasks/generate-documentation.md +284 -284
- package/.aios-core/development/tasks/generate-migration-strategy.md +522 -522
- package/.aios-core/development/tasks/generate-shock-report.md +501 -501
- package/.aios-core/development/tasks/github-devops-github-pr-automation.md +427 -427
- package/.aios-core/development/tasks/github-devops-pre-push-quality-gate.md +733 -733
- package/.aios-core/development/tasks/github-devops-repository-cleanup.md +374 -374
- package/.aios-core/development/tasks/github-devops-version-management.md +483 -483
- package/.aios-core/development/tasks/improve-self.md +822 -822
- package/.aios-core/development/tasks/index-docs.md +387 -387
- package/.aios-core/development/tasks/init-project-status.md +506 -506
- package/.aios-core/development/tasks/integrate-expansion-pack.md +314 -314
- package/.aios-core/development/tasks/kb-mode-interaction.md +283 -283
- package/.aios-core/development/tasks/learn-patterns.md +900 -900
- package/.aios-core/development/tasks/mcp-workflow.md +437 -437
- package/.aios-core/development/tasks/modify-agent.md +381 -381
- package/.aios-core/development/tasks/modify-task.md +424 -424
- package/.aios-core/development/tasks/modify-workflow.md +465 -465
- package/.aios-core/development/tasks/po-backlog-add.md +370 -370
- package/.aios-core/development/tasks/po-manage-story-backlog.md +523 -523
- package/.aios-core/development/tasks/po-pull-story-from-clickup.md +540 -540
- package/.aios-core/development/tasks/po-pull-story.md +316 -316
- package/.aios-core/development/tasks/po-stories-index.md +351 -351
- package/.aios-core/development/tasks/po-sync-story-to-clickup.md +457 -457
- package/.aios-core/development/tasks/po-sync-story.md +303 -303
- package/.aios-core/development/tasks/pr-automation.md +701 -701
- package/.aios-core/development/tasks/propose-modification.md +842 -842
- package/.aios-core/development/tasks/qa-backlog-add-followup.md +425 -425
- package/.aios-core/development/tasks/qa-gate.md +373 -373
- package/.aios-core/development/tasks/qa-generate-tests.md +1174 -1174
- package/.aios-core/development/tasks/qa-nfr-assess.md +557 -557
- package/.aios-core/development/tasks/qa-review-proposal.md +1157 -1157
- package/.aios-core/development/tasks/qa-review-story.md +682 -682
- package/.aios-core/development/tasks/qa-risk-profile.md +566 -566
- package/.aios-core/development/tasks/qa-run-tests.md +277 -277
- package/.aios-core/development/tasks/qa-test-design.md +387 -387
- package/.aios-core/development/tasks/qa-trace-requirements.md +476 -476
- package/.aios-core/development/tasks/release-management.md +723 -723
- package/.aios-core/development/tasks/security-audit.md +554 -554
- package/.aios-core/development/tasks/security-scan.md +790 -790
- package/.aios-core/development/tasks/setup-database.md +741 -741
- package/.aios-core/development/tasks/setup-design-system.md +462 -462
- package/.aios-core/development/tasks/setup-github.md +874 -874
- package/.aios-core/development/tasks/setup-llm-routing.md +1 -1
- package/.aios-core/development/tasks/setup-mcp-docker.md +584 -584
- package/.aios-core/development/tasks/setup-project-docs.md +440 -0
- package/.aios-core/development/tasks/shard-doc.md +537 -537
- package/.aios-core/development/tasks/sm-create-next-story.md +480 -480
- package/.aios-core/development/tasks/sync-documentation.md +864 -864
- package/.aios-core/development/tasks/tailwind-upgrade.md +294 -294
- package/.aios-core/development/tasks/test-as-user.md +621 -621
- package/.aios-core/development/tasks/test-validation-task.md +171 -171
- package/.aios-core/development/tasks/undo-last.md +346 -346
- package/.aios-core/development/tasks/update-manifest.md +409 -409
- package/.aios-core/development/tasks/ux-create-wireframe.md +617 -617
- package/.aios-core/development/tasks/ux-ds-scan-artifact.md +672 -672
- package/.aios-core/development/tasks/ux-user-research.md +559 -559
- package/.aios-core/development/tasks/validate-next-story.md +422 -422
- package/.aios-core/development/workflows/README.md +83 -83
- package/.aios-core/development/workflows/brownfield-fullstack.yaml +297 -297
- package/.aios-core/development/workflows/brownfield-service.yaml +187 -187
- package/.aios-core/development/workflows/brownfield-ui.yaml +197 -197
- package/.aios-core/development/workflows/greenfield-fullstack.yaml +333 -333
- package/.aios-core/development/workflows/greenfield-service.yaml +206 -206
- package/.aios-core/development/workflows/greenfield-ui.yaml +235 -235
- package/.aios-core/docs/SHARD-TRANSLATION-GUIDE.md +335 -335
- package/.aios-core/docs/component-creation-guide.md +457 -457
- package/.aios-core/docs/session-update-pattern.md +307 -307
- package/.aios-core/docs/standards/AGENT-PERSONALIZATION-STANDARD-V1.md +572 -572
- package/.aios-core/docs/standards/AIOS-COLOR-PALETTE-QUICK-REFERENCE.md +185 -185
- package/.aios-core/docs/standards/AIOS-COLOR-PALETTE-V2.1.md +354 -354
- package/.aios-core/docs/standards/AIOS-FRAMEWORK-MASTER.md +1963 -1963
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1-COMPLETE.md +821 -821
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1-SUMMARY.md +1190 -1190
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1.md +439 -439
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.2-SUMMARY.md +1339 -1339
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO.md +5398 -5398
- package/.aios-core/docs/standards/EXECUTOR-DECISION-TREE.md +697 -697
- package/.aios-core/docs/standards/OPEN-SOURCE-VS-SERVICE-DIFFERENCES.md +511 -511
- package/.aios-core/docs/standards/QUALITY-GATES-SPECIFICATION.md +556 -556
- package/.aios-core/docs/standards/STANDARDS-INDEX.md +210 -210
- package/.aios-core/docs/standards/STORY-TEMPLATE-V2-SPECIFICATION.md +550 -550
- package/.aios-core/docs/standards/TASK-FORMAT-SPECIFICATION-V1.md +1414 -1414
- package/.aios-core/docs/standards/V3-ARCHITECTURAL-DECISIONS.md +523 -523
- package/.aios-core/docs/template-syntax.md +266 -266
- package/.aios-core/docs/troubleshooting-guide.md +624 -624
- package/.aios-core/index.esm.js +15 -15
- package/.aios-core/index.js +1 -1
- package/.aios-core/infrastructure/README.md +126 -126
- package/.aios-core/infrastructure/integrations/pm-adapters/README.md +59 -59
- package/.aios-core/infrastructure/scripts/approval-workflow.js +1 -1
- package/.aios-core/infrastructure/scripts/batch-creator.js +1 -1
- package/.aios-core/infrastructure/scripts/component-generator.js +3 -3
- package/.aios-core/infrastructure/scripts/component-metadata.js +1 -1
- package/.aios-core/infrastructure/scripts/component-search.js +1 -1
- package/.aios-core/infrastructure/scripts/coverage-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/dependency-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/dependency-impact-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/documentation-integrity/brownfield-analyzer.js +501 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/config-generator.js +368 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/deployment-config-loader.js +308 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/doc-generator.js +331 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/gitignore-generator.js +312 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/index.js +74 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/mode-detector.js +389 -0
- package/.aios-core/infrastructure/scripts/framework-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/improvement-engine.js +1 -1
- package/.aios-core/infrastructure/scripts/llm-routing/install-llm-routing.js +26 -13
- package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-free-tracked.cmd +127 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-free-tracked.sh +108 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-proxy.cmd +71 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-proxy.sh +65 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-usage.cmd +51 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-usage.sh +16 -0
- package/.aios-core/infrastructure/scripts/llm-routing/usage-tracker/index.js +549 -0
- package/.aios-core/infrastructure/scripts/modification-risk-assessment.js +1 -1
- package/.aios-core/infrastructure/scripts/performance-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/pm-adapter.js +134 -134
- package/.aios-core/infrastructure/scripts/repository-detector.js +3 -3
- package/.aios-core/infrastructure/scripts/template-engine.js +1 -1
- package/.aios-core/infrastructure/scripts/template-validator.js +1 -1
- package/.aios-core/infrastructure/scripts/test-generator.js +1 -1
- package/.aios-core/infrastructure/scripts/test-quality-assessment.js +1 -1
- package/.aios-core/infrastructure/scripts/transaction-manager.js +1 -1
- package/.aios-core/infrastructure/scripts/usage-analytics.js +1 -1
- package/.aios-core/infrastructure/scripts/visual-impact-generator.js +2 -2
- package/.aios-core/infrastructure/templates/core-config/core-config-brownfield.tmpl.yaml +176 -0
- package/.aios-core/infrastructure/templates/core-config/core-config-greenfield.tmpl.yaml +127 -0
- package/.aios-core/infrastructure/templates/github-workflows/README.md +109 -109
- package/.aios-core/infrastructure/templates/gitignore/gitignore-aios-base.tmpl +63 -0
- package/.aios-core/infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl +18 -0
- package/.aios-core/infrastructure/templates/gitignore/gitignore-node.tmpl +85 -0
- package/.aios-core/infrastructure/templates/gitignore/gitignore-python.tmpl +145 -0
- package/.aios-core/infrastructure/templates/project-docs/coding-standards-tmpl.md +346 -0
- package/.aios-core/infrastructure/templates/project-docs/source-tree-tmpl.md +177 -0
- package/.aios-core/infrastructure/templates/project-docs/tech-stack-tmpl.md +267 -0
- package/.aios-core/infrastructure/tests/regression-suite-v2.md +621 -621
- package/.aios-core/infrastructure/tools/README.md +222 -222
- package/.aios-core/infrastructure/tools/cli/github-cli.yaml +200 -200
- package/.aios-core/infrastructure/tools/cli/railway-cli.yaml +260 -260
- package/.aios-core/infrastructure/tools/cli/supabase-cli.yaml +224 -224
- package/.aios-core/infrastructure/tools/local/ffmpeg.yaml +261 -261
- package/.aios-core/infrastructure/tools/mcp/21st-dev-magic.yaml +127 -127
- package/.aios-core/infrastructure/tools/mcp/browser.yaml +103 -103
- package/.aios-core/infrastructure/tools/mcp/clickup.yaml +534 -534
- package/.aios-core/infrastructure/tools/mcp/context7.yaml +78 -78
- package/.aios-core/infrastructure/tools/mcp/desktop-commander.yaml +180 -180
- package/.aios-core/infrastructure/tools/mcp/exa.yaml +103 -103
- package/.aios-core/infrastructure/tools/mcp/google-workspace.yaml +930 -930
- package/.aios-core/infrastructure/tools/mcp/n8n.yaml +551 -551
- package/.aios-core/infrastructure/tools/mcp/supabase.yaml +808 -808
- package/.aios-core/install-manifest.yaml +347 -347
- package/.aios-core/product/README.md +56 -56
- package/.aios-core/product/checklists/accessibility-wcag-checklist.md +80 -0
- package/.aios-core/product/checklists/architect-checklist.md +443 -443
- package/.aios-core/product/checklists/change-checklist.md +182 -182
- package/.aios-core/product/checklists/component-quality-checklist.md +74 -0
- package/.aios-core/product/checklists/database-design-checklist.md +119 -119
- package/.aios-core/product/checklists/dba-predeploy-checklist.md +97 -97
- package/.aios-core/product/checklists/dba-rollback-checklist.md +99 -99
- package/.aios-core/product/checklists/migration-readiness-checklist.md +75 -0
- package/.aios-core/product/checklists/pattern-audit-checklist.md +88 -0
- package/.aios-core/product/checklists/pm-checklist.md +375 -375
- package/.aios-core/product/checklists/po-master-checklist.md +441 -441
- package/.aios-core/product/checklists/pre-push-checklist.md +108 -108
- package/.aios-core/product/checklists/release-checklist.md +122 -122
- package/.aios-core/product/checklists/story-dod-checklist.md +101 -101
- package/.aios-core/product/checklists/story-draft-checklist.md +215 -215
- package/.aios-core/product/data/atomic-design-principles.md +108 -0
- package/.aios-core/product/data/brainstorming-techniques.md +36 -36
- package/.aios-core/product/data/consolidation-algorithms.md +142 -0
- package/.aios-core/product/data/database-best-practices.md +182 -0
- package/.aios-core/product/data/design-token-best-practices.md +107 -0
- package/.aios-core/product/data/elicitation-methods.md +134 -134
- package/.aios-core/product/data/integration-patterns.md +207 -0
- package/.aios-core/product/data/migration-safety-guide.md +329 -0
- package/.aios-core/product/data/mode-selection-best-practices.md +471 -471
- package/.aios-core/product/data/postgres-tuning-guide.md +300 -0
- package/.aios-core/product/data/rls-security-patterns.md +333 -0
- package/.aios-core/product/data/roi-calculation-guide.md +142 -0
- package/.aios-core/product/data/supabase-patterns.md +330 -0
- package/.aios-core/product/data/test-levels-framework.md +148 -148
- package/.aios-core/product/data/test-priorities-matrix.md +174 -174
- package/.aios-core/product/data/wcag-compliance-guide.md +267 -0
- package/.aios-core/product/templates/1mcp-config.yaml +225 -225
- package/.aios-core/product/templates/activation-instructions-inline-greeting.yaml +63 -63
- package/.aios-core/product/templates/activation-instructions-template.md +258 -258
- package/.aios-core/product/templates/agent-template.yaml +120 -120
- package/.aios-core/product/templates/architecture-tmpl.yaml +650 -650
- package/.aios-core/product/templates/brainstorming-output-tmpl.yaml +155 -155
- package/.aios-core/product/templates/brownfield-architecture-tmpl.yaml +475 -475
- package/.aios-core/product/templates/brownfield-prd-tmpl.yaml +279 -279
- package/.aios-core/product/templates/changelog-template.md +134 -134
- package/.aios-core/product/templates/command-rationalization-matrix.md +152 -152
- package/.aios-core/product/templates/competitor-analysis-tmpl.yaml +292 -292
- package/.aios-core/product/templates/design-story-tmpl.yaml +587 -587
- package/.aios-core/product/templates/ds-artifact-analysis.md +70 -70
- package/.aios-core/product/templates/front-end-architecture-tmpl.yaml +205 -205
- package/.aios-core/product/templates/front-end-spec-tmpl.yaml +348 -348
- package/.aios-core/product/templates/fullstack-architecture-tmpl.yaml +804 -804
- package/.aios-core/product/templates/github-pr-template.md +67 -67
- package/.aios-core/product/templates/gordon-mcp.yaml +140 -140
- package/.aios-core/product/templates/ide-rules/antigravity-rules.md +115 -115
- package/.aios-core/product/templates/ide-rules/claude-rules.md +221 -221
- package/.aios-core/product/templates/ide-rules/cline-rules.md +84 -84
- package/.aios-core/product/templates/ide-rules/copilot-rules.md +92 -92
- package/.aios-core/product/templates/ide-rules/cursor-rules.md +115 -115
- package/.aios-core/product/templates/ide-rules/gemini-rules.md +85 -85
- package/.aios-core/product/templates/ide-rules/roo-rules.md +86 -86
- package/.aios-core/product/templates/ide-rules/trae-rules.md +104 -104
- package/.aios-core/product/templates/ide-rules/windsurf-rules.md +80 -80
- package/.aios-core/product/templates/index-strategy-tmpl.yaml +53 -53
- package/.aios-core/product/templates/market-research-tmpl.yaml +251 -251
- package/.aios-core/product/templates/mcp-workflow.js +271 -271
- package/.aios-core/product/templates/migration-plan-tmpl.yaml +1022 -1022
- package/.aios-core/product/templates/migration-strategy-tmpl.md +524 -524
- package/.aios-core/product/templates/personalized-agent-template.md +258 -258
- package/.aios-core/product/templates/personalized-checklist-template.md +340 -340
- package/.aios-core/product/templates/personalized-task-template-v2.md +905 -905
- package/.aios-core/product/templates/personalized-task-template.md +344 -344
- package/.aios-core/product/templates/personalized-template-file.yaml +322 -322
- package/.aios-core/product/templates/personalized-workflow-template.yaml +460 -460
- package/.aios-core/product/templates/prd-tmpl.yaml +201 -201
- package/.aios-core/product/templates/project-brief-tmpl.yaml +220 -220
- package/.aios-core/product/templates/qa-gate-tmpl.yaml +240 -240
- package/.aios-core/product/templates/rls-policies-tmpl.yaml +1203 -1203
- package/.aios-core/product/templates/schema-design-tmpl.yaml +428 -428
- package/.aios-core/product/templates/state-persistence-tmpl.yaml +219 -219
- package/.aios-core/product/templates/story-tmpl.yaml +331 -331
- package/.aios-core/product/templates/task-execution-report.md +495 -495
- package/.aios-core/product/templates/task-template.md +122 -122
- package/.aios-core/product/templates/token-exports-tailwind-tmpl.js +395 -395
- package/.aios-core/product/templates/tokens-schema-tmpl.yaml +305 -305
- package/.aios-core/product/templates/workflow-template.yaml +133 -133
- package/.aios-core/scripts/README.md +354 -354
- package/.aios-core/scripts/aios-doc-template.md +325 -325
- package/.aios-core/scripts/elicitation-engine.js +1 -1
- package/.aios-core/scripts/test-template-system.js +1 -1
- package/.aios-core/scripts/workflow-management.md +69 -69
- package/.aios-core/user-guide.md +1413 -1413
- package/.aios-core/working-in-the-brownfield.md +361 -361
- package/LICENSE +1 -1
- package/README.md +702 -703
- package/bin/aios-init-old.js +3 -3
- package/bin/aios-init-v4.js +1 -1
- package/bin/aios-init.backup-v1.1.4.js +1 -1
- package/bin/aios-init.js +3 -3
- package/bin/aios.js +279 -279
- package/bin/utils/install-errors.js +339 -339
- package/bin/utils/install-transaction.js +445 -445
- package/index.d.ts +18 -18
- package/index.esm.js +20 -20
- package/index.js +6 -6
- package/package.json +8 -10
- package/packages/installer/src/config/templates/env-template.js +27 -4
- package/packages/installer/src/detection/detect-project-type.js +81 -81
- package/packages/installer/src/wizard/wizard.js +185 -34
- package/packages/installer/tests/integration/environment-configuration.test.js +2 -1
- package/packages/installer/tests/integration/wizard-detection.test.js +8 -6
- package/packages/installer/tests/unit/env-template.test.js +11 -10
- package/src/config/ide-configs.js +1 -1
- package/src/wizard/feedback.js +2 -2
- package/src/wizard/index.js +1 -1
- package/src/wizard/validation/report-generator.js +1 -1
- package/src/wizard/validation/troubleshooting-system.js +13 -13
- package/.aios-core/development/tasks/validate-structure.md +0 -243
- package/.aios-core/infrastructure/scripts/_archived/final-todo-count.js +0 -122
- package/.aios-core/infrastructure/scripts/_archived/fix-yaml-formatting.js +0 -89
- package/.aios-core/infrastructure/scripts/_archived/migration-generator.js +0 -780
- package/.aios-core/infrastructure/scripts/_archived/migration-path-generator.js +0 -950
- package/.aios-core/infrastructure/scripts/_archived/phase2-entrada-saida-errors.js +0 -425
- package/.aios-core/infrastructure/scripts/_archived/phase2-spot-check.js +0 -132
- package/.aios-core/infrastructure/scripts/_archived/phase3-tools-scripts-validation.js +0 -381
- package/.aios-core/infrastructure/scripts/_archived/phase4-metadata-performance.js +0 -203
- package/.aios-core/infrastructure/scripts/_archived/test-yaml-parsing.js +0 -24
- package/.aios-core/infrastructure/scripts/_archived/verify-yaml-fix.js +0 -51
- package/.aios-core/infrastructure/scripts/source-tree-guardian/index.js +0 -375
- package/.aios-core/infrastructure/scripts/source-tree-guardian/manifest-generator.js +0 -410
- package/.aios-core/infrastructure/scripts/source-tree-guardian/rules/naming-rules.yaml +0 -285
- package/.aios-core/infrastructure/scripts/source-tree-guardian/rules/placement-rules.yaml +0 -262
- package/.aios-core/infrastructure/scripts/source-tree-guardian/validator.js +0 -468
- package/.aios-core/tasks/find-component.md.legacy +0 -391
- package/.aios-core/tasks/generate-commit-message.md.legacy +0 -426
- package/.aios-core/tasks/generate-migration.md.legacy +0 -382
- package/.aios-core/tasks/rollback-modification.md.legacy +0 -307
- package/.aios-core/tasks/update-tests.md.legacy +0 -283
|
@@ -1,551 +1,551 @@
|
|
|
1
|
-
tool:
|
|
2
|
-
schema_version: 2.0
|
|
3
|
-
id: n8n
|
|
4
|
-
type: mcp
|
|
5
|
-
name: n8n Workflow Automation
|
|
6
|
-
version: 1.0.0
|
|
7
|
-
description: n8n workflow management with execution validation and credential handling
|
|
8
|
-
knowledge_strategy: executable
|
|
9
|
-
|
|
10
|
-
executable_knowledge:
|
|
11
|
-
validators:
|
|
12
|
-
# Combined validator for execute_workflow
|
|
13
|
-
- id: validate-execute-workflow
|
|
14
|
-
validates: execute_workflow
|
|
15
|
-
language: javascript
|
|
16
|
-
checks:
|
|
17
|
-
- required_fields: [workflow_id]
|
|
18
|
-
function: |
|
|
19
|
-
(function() {
|
|
20
|
-
const errors = [];
|
|
21
|
-
|
|
22
|
-
// 1. Required workflow_id
|
|
23
|
-
if (!args.args.workflow_id && !args.args.workflowId) {
|
|
24
|
-
errors.push("workflow_id is required");
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// 2. Validate data parameter structure if provided
|
|
28
|
-
if (args.args.data) {
|
|
29
|
-
if (typeof args.args.data !== 'object') {
|
|
30
|
-
errors.push("data must be an object");
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// 3. Validate wait_for_completion is boolean
|
|
35
|
-
if (args.args.wait_for_completion !== undefined &&
|
|
36
|
-
typeof args.args.wait_for_completion !== 'boolean') {
|
|
37
|
-
errors.push("wait_for_completion must be boolean");
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
return {
|
|
41
|
-
valid: errors.length === 0,
|
|
42
|
-
errors: errors
|
|
43
|
-
};
|
|
44
|
-
})();
|
|
45
|
-
|
|
46
|
-
# Validator for create_workflow
|
|
47
|
-
- id: validate-create-workflow
|
|
48
|
-
validates: create_workflow
|
|
49
|
-
language: javascript
|
|
50
|
-
function: |
|
|
51
|
-
(function() {
|
|
52
|
-
const errors = [];
|
|
53
|
-
|
|
54
|
-
// 1. Required name field
|
|
55
|
-
if (!args.args.name) {
|
|
56
|
-
errors.push("name is required");
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// 2. Validate nodes structure if provided
|
|
60
|
-
if (args.args.nodes) {
|
|
61
|
-
if (!Array.isArray(args.args.nodes)) {
|
|
62
|
-
errors.push("nodes must be an array");
|
|
63
|
-
} else {
|
|
64
|
-
args.args.nodes.forEach((node, index) => {
|
|
65
|
-
if (!node.type) {
|
|
66
|
-
errors.push(`nodes[${index}] missing required 'type' field`);
|
|
67
|
-
}
|
|
68
|
-
if (!node.name) {
|
|
69
|
-
errors.push(`nodes[${index}] missing required 'name' field`);
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// 3. Validate connections structure
|
|
76
|
-
if (args.args.connections) {
|
|
77
|
-
if (typeof args.args.connections !== 'object') {
|
|
78
|
-
errors.push("connections must be an object");
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
return {
|
|
83
|
-
valid: errors.length === 0,
|
|
84
|
-
errors: errors
|
|
85
|
-
};
|
|
86
|
-
})();
|
|
87
|
-
|
|
88
|
-
# Validator for create_credential
|
|
89
|
-
- id: validate-create-credential
|
|
90
|
-
validates: create_credential
|
|
91
|
-
language: javascript
|
|
92
|
-
function: |
|
|
93
|
-
(function() {
|
|
94
|
-
const errors = [];
|
|
95
|
-
|
|
96
|
-
if (!args.args.name) {
|
|
97
|
-
errors.push("name is required for create_credential");
|
|
98
|
-
}
|
|
99
|
-
if (!args.args.type) {
|
|
100
|
-
errors.push("type is required for create_credential");
|
|
101
|
-
}
|
|
102
|
-
if (!args.args.data) {
|
|
103
|
-
errors.push("data is required for create_credential");
|
|
104
|
-
} else if (typeof args.args.data !== 'object') {
|
|
105
|
-
errors.push("data must be an object");
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
return {
|
|
109
|
-
valid: errors.length === 0,
|
|
110
|
-
errors: errors
|
|
111
|
-
};
|
|
112
|
-
})();
|
|
113
|
-
|
|
114
|
-
# Validator for update_credential
|
|
115
|
-
- id: validate-update-credential
|
|
116
|
-
validates: update_credential
|
|
117
|
-
language: javascript
|
|
118
|
-
function: |
|
|
119
|
-
(function() {
|
|
120
|
-
const errors = [];
|
|
121
|
-
|
|
122
|
-
if (!args.args.credential_id && !args.args.credentialId) {
|
|
123
|
-
errors.push("credential_id is required for update_credential");
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
return {
|
|
127
|
-
valid: errors.length === 0,
|
|
128
|
-
errors: errors
|
|
129
|
-
};
|
|
130
|
-
})();
|
|
131
|
-
|
|
132
|
-
# Validator for delete_credential
|
|
133
|
-
- id: validate-delete-credential
|
|
134
|
-
validates: delete_credential
|
|
135
|
-
language: javascript
|
|
136
|
-
function: |
|
|
137
|
-
(function() {
|
|
138
|
-
const errors = [];
|
|
139
|
-
|
|
140
|
-
if (!args.args.credential_id && !args.args.credentialId) {
|
|
141
|
-
errors.push("credential_id is required for delete_credential");
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
return {
|
|
145
|
-
valid: errors.length === 0,
|
|
146
|
-
errors: errors
|
|
147
|
-
};
|
|
148
|
-
})();
|
|
149
|
-
|
|
150
|
-
helpers:
|
|
151
|
-
- id: extract-workflow-state
|
|
152
|
-
language: javascript
|
|
153
|
-
runtime: isolated_vm
|
|
154
|
-
description: "Extract current state from workflow execution"
|
|
155
|
-
function: |
|
|
156
|
-
(function() {
|
|
157
|
-
const { execution } = args;
|
|
158
|
-
if (!execution) return null;
|
|
159
|
-
|
|
160
|
-
return {
|
|
161
|
-
id: execution.id,
|
|
162
|
-
status: execution.finished ? 'finished' : execution.stoppedAt ? 'stopped' : 'running',
|
|
163
|
-
startedAt: execution.startedAt,
|
|
164
|
-
finishedAt: execution.finishedAt,
|
|
165
|
-
mode: execution.mode
|
|
166
|
-
};
|
|
167
|
-
})();
|
|
168
|
-
|
|
169
|
-
- id: validate-node-connections
|
|
170
|
-
language: javascript
|
|
171
|
-
runtime: isolated_vm
|
|
172
|
-
description: "Validate node connections in workflow"
|
|
173
|
-
function: |
|
|
174
|
-
(function() {
|
|
175
|
-
const { nodes, connections } = args;
|
|
176
|
-
if (!nodes || !connections) {
|
|
177
|
-
return { valid: false, errors: ['Missing nodes or connections'] };
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
const errors = [];
|
|
181
|
-
const nodeNames = new Set(nodes.map(n => n.name));
|
|
182
|
-
|
|
183
|
-
// Check all connection sources exist
|
|
184
|
-
for (const [sourceName, outputs] of Object.entries(connections)) {
|
|
185
|
-
if (!nodeNames.has(sourceName)) {
|
|
186
|
-
errors.push(`Connection source '${sourceName}' not found in nodes`);
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
// Check all connection targets exist
|
|
190
|
-
// n8n structure: outputs = { main: [[{node, type, index}]], error: [[...]] }
|
|
191
|
-
for (const outputConnections of Object.values(outputs || {})) {
|
|
192
|
-
if (Array.isArray(outputConnections)) {
|
|
193
|
-
// outputConnections is an array of arrays
|
|
194
|
-
outputConnections.forEach(connectionGroup => {
|
|
195
|
-
if (Array.isArray(connectionGroup)) {
|
|
196
|
-
connectionGroup.forEach(conn => {
|
|
197
|
-
if (conn.node && !nodeNames.has(conn.node)) {
|
|
198
|
-
errors.push(`Connection target '${conn.node}' not found in nodes`);
|
|
199
|
-
}
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
});
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
return {
|
|
208
|
-
valid: errors.length === 0,
|
|
209
|
-
errors: errors
|
|
210
|
-
};
|
|
211
|
-
})();
|
|
212
|
-
|
|
213
|
-
- id: format-workflow-data
|
|
214
|
-
language: javascript
|
|
215
|
-
runtime: isolated_vm
|
|
216
|
-
description: "Format input data for workflow execution"
|
|
217
|
-
function: |
|
|
218
|
-
(function() {
|
|
219
|
-
const { data, workflowData } = args;
|
|
220
|
-
|
|
221
|
-
// If workflow expects specific input format, validate it
|
|
222
|
-
if (workflowData && workflowData.nodes) {
|
|
223
|
-
const triggerNode = workflowData.nodes.find(n =>
|
|
224
|
-
n.type.includes('trigger') ||
|
|
225
|
-
n.type.includes('webhook') ||
|
|
226
|
-
n.type === 'n8n-nodes-base.start'
|
|
227
|
-
);
|
|
228
|
-
|
|
229
|
-
if (triggerNode && triggerNode.parameters !== undefined) {
|
|
230
|
-
// Format data according to trigger expectations
|
|
231
|
-
return {
|
|
232
|
-
formatted: true,
|
|
233
|
-
data: data || {},
|
|
234
|
-
triggerNode: triggerNode.name
|
|
235
|
-
};
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
return {
|
|
240
|
-
formatted: false,
|
|
241
|
-
data: data || {}
|
|
242
|
-
};
|
|
243
|
-
})();
|
|
244
|
-
|
|
245
|
-
- id: parse-execution-error
|
|
246
|
-
language: javascript
|
|
247
|
-
runtime: isolated_vm
|
|
248
|
-
description: "Parse and format execution errors"
|
|
249
|
-
function: |
|
|
250
|
-
(function() {
|
|
251
|
-
const { error, execution } = args;
|
|
252
|
-
if (!error) return null;
|
|
253
|
-
|
|
254
|
-
return {
|
|
255
|
-
message: error.message || 'Unknown error',
|
|
256
|
-
node: error.node || 'unknown',
|
|
257
|
-
timestamp: error.timestamp || execution?.stoppedAt,
|
|
258
|
-
stack: error.stack || null
|
|
259
|
-
};
|
|
260
|
-
})();
|
|
261
|
-
|
|
262
|
-
- id: validate-credential-type
|
|
263
|
-
language: javascript
|
|
264
|
-
runtime: isolated_vm
|
|
265
|
-
description: "Validate credential type is supported"
|
|
266
|
-
function: |
|
|
267
|
-
(function() {
|
|
268
|
-
const { type } = args;
|
|
269
|
-
|
|
270
|
-
// Common n8n credential types
|
|
271
|
-
const validTypes = [
|
|
272
|
-
'httpBasicAuth',
|
|
273
|
-
'httpHeaderAuth',
|
|
274
|
-
'oAuth2Api',
|
|
275
|
-
'apiKey',
|
|
276
|
-
'postgres',
|
|
277
|
-
'mysql',
|
|
278
|
-
'mongodb',
|
|
279
|
-
'redis',
|
|
280
|
-
'aws',
|
|
281
|
-
'googleApi',
|
|
282
|
-
'slackApi',
|
|
283
|
-
'githubApi',
|
|
284
|
-
'jwtAuth'
|
|
285
|
-
];
|
|
286
|
-
|
|
287
|
-
return validTypes.includes(type);
|
|
288
|
-
})();
|
|
289
|
-
|
|
290
|
-
- id: build-workflow-structure
|
|
291
|
-
language: javascript
|
|
292
|
-
runtime: isolated_vm
|
|
293
|
-
description: "Build workflow structure from nodes and connections"
|
|
294
|
-
function: |
|
|
295
|
-
(function() {
|
|
296
|
-
const { name, nodes, connections } = args;
|
|
297
|
-
|
|
298
|
-
if (!name) {
|
|
299
|
-
return { error: 'Workflow name is required' };
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
return {
|
|
303
|
-
name: name,
|
|
304
|
-
nodes: nodes || [],
|
|
305
|
-
connections: connections || {},
|
|
306
|
-
active: false,
|
|
307
|
-
settings: {},
|
|
308
|
-
staticData: null
|
|
309
|
-
};
|
|
310
|
-
})();
|
|
311
|
-
|
|
312
|
-
- id: calculate-workflow-complexity
|
|
313
|
-
language: javascript
|
|
314
|
-
runtime: isolated_vm
|
|
315
|
-
description: "Calculate workflow complexity score"
|
|
316
|
-
function: |
|
|
317
|
-
(function() {
|
|
318
|
-
const { nodes, connections } = args;
|
|
319
|
-
|
|
320
|
-
if (!nodes) return { complexity: 0 };
|
|
321
|
-
|
|
322
|
-
let complexity = nodes.length; // Base complexity from node count
|
|
323
|
-
|
|
324
|
-
// Add complexity for connections
|
|
325
|
-
if (connections) {
|
|
326
|
-
const connectionCount = Object.values(connections).reduce((sum, outputs) => {
|
|
327
|
-
return sum + Object.values(outputs || {}).reduce((s, conns) => {
|
|
328
|
-
return s + (Array.isArray(conns) ? conns.length : 0);
|
|
329
|
-
}, 0);
|
|
330
|
-
}, 0);
|
|
331
|
-
complexity += connectionCount * 0.5;
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
// Add complexity for certain node types
|
|
335
|
-
const complexNodeTypes = ['n8n-nodes-base.if', 'n8n-nodes-base.switch', 'n8n-nodes-base.function'];
|
|
336
|
-
const complexNodes = nodes.filter(n => complexNodeTypes.includes(n.type)).length;
|
|
337
|
-
complexity += complexNodes * 2;
|
|
338
|
-
|
|
339
|
-
return {
|
|
340
|
-
complexity: Math.round(complexity),
|
|
341
|
-
nodeCount: nodes.length,
|
|
342
|
-
connectionCount: Object.keys(connections || {}).length,
|
|
343
|
-
hasComplexLogic: complexNodes > 0
|
|
344
|
-
};
|
|
345
|
-
})();
|
|
346
|
-
|
|
347
|
-
api_complexity:
|
|
348
|
-
workflow_execution_state:
|
|
349
|
-
- state: waiting
|
|
350
|
-
description: "Workflow is queued for execution"
|
|
351
|
-
next_states: [running, failed]
|
|
352
|
-
|
|
353
|
-
- state: running
|
|
354
|
-
description: "Workflow is currently executing"
|
|
355
|
-
next_states: [finished, stopped, error]
|
|
356
|
-
|
|
357
|
-
- state: finished
|
|
358
|
-
description: "Workflow completed successfully"
|
|
359
|
-
terminal: true
|
|
360
|
-
|
|
361
|
-
- state: stopped
|
|
362
|
-
description: "Workflow was manually stopped"
|
|
363
|
-
terminal: true
|
|
364
|
-
|
|
365
|
-
- state: error
|
|
366
|
-
description: "Workflow encountered an error"
|
|
367
|
-
terminal: true
|
|
368
|
-
retry_allowed: true
|
|
369
|
-
|
|
370
|
-
credential_types:
|
|
371
|
-
- type: httpBasicAuth
|
|
372
|
-
fields: [username, password]
|
|
373
|
-
description: "HTTP Basic Authentication"
|
|
374
|
-
|
|
375
|
-
- type: httpHeaderAuth
|
|
376
|
-
fields: [name, value]
|
|
377
|
-
description: "HTTP Header Authentication"
|
|
378
|
-
|
|
379
|
-
- type: oAuth2Api
|
|
380
|
-
fields: [clientId, clientSecret, authUrl, accessTokenUrl]
|
|
381
|
-
description: "OAuth 2.0 Authentication"
|
|
382
|
-
|
|
383
|
-
- type: apiKey
|
|
384
|
-
fields: [apiKey]
|
|
385
|
-
description: "API Key Authentication"
|
|
386
|
-
|
|
387
|
-
node_execution_patterns:
|
|
388
|
-
- pattern: sequential
|
|
389
|
-
description: "Nodes execute in order, one after another"
|
|
390
|
-
use_case: "Simple linear workflows"
|
|
391
|
-
|
|
392
|
-
- pattern: parallel
|
|
393
|
-
description: "Multiple nodes execute simultaneously"
|
|
394
|
-
use_case: "Independent data processing"
|
|
395
|
-
|
|
396
|
-
- pattern: conditional
|
|
397
|
-
description: "Execution path depends on node conditions"
|
|
398
|
-
nodes: [n8n-nodes-base.if, n8n-nodes-base.switch]
|
|
399
|
-
|
|
400
|
-
- pattern: loop
|
|
401
|
-
description: "Repeated execution over data items"
|
|
402
|
-
nodes: [n8n-nodes-base.splitInBatches]
|
|
403
|
-
|
|
404
|
-
anti_patterns:
|
|
405
|
-
- pattern: missing_error_handling
|
|
406
|
-
description: "Not handling node execution errors"
|
|
407
|
-
category: reliability
|
|
408
|
-
severity: high
|
|
409
|
-
wrong: |
|
|
410
|
-
execute_workflow({
|
|
411
|
-
workflow_id: "123"
|
|
412
|
-
// ❌ No error handling for failed execution
|
|
413
|
-
})
|
|
414
|
-
correct: |
|
|
415
|
-
const result = execute_workflow({
|
|
416
|
-
workflow_id: "123",
|
|
417
|
-
wait_for_completion: true
|
|
418
|
-
})
|
|
419
|
-
|
|
420
|
-
if (result.status === 'error') {
|
|
421
|
-
// ✅ Handle error appropriately
|
|
422
|
-
handle_execution_error(result)
|
|
423
|
-
}
|
|
424
|
-
rationale: "Always check execution status and handle errors gracefully."
|
|
425
|
-
|
|
426
|
-
- pattern: invalid_node_connections
|
|
427
|
-
description: "Creating workflows with disconnected or invalid nodes"
|
|
428
|
-
category: workflow_structure
|
|
429
|
-
severity: medium
|
|
430
|
-
wrong: |
|
|
431
|
-
create_workflow({
|
|
432
|
-
name: "Test",
|
|
433
|
-
nodes: [{name: "Start", type: "trigger"}, {name: "End", type: "action"}],
|
|
434
|
-
connections: {
|
|
435
|
-
"NonExistent": { // ❌ Node doesn't exist
|
|
436
|
-
main: [[{node: "End"}]]
|
|
437
|
-
}
|
|
438
|
-
}
|
|
439
|
-
})
|
|
440
|
-
correct: |
|
|
441
|
-
create_workflow({
|
|
442
|
-
name: "Test",
|
|
443
|
-
nodes: [{name: "Start", type: "trigger"}, {name: "End", type: "action"}],
|
|
444
|
-
connections: {
|
|
445
|
-
"Start": { // ✅ Correct node name
|
|
446
|
-
main: [[{node: "End", type: "main", index: 0}]]
|
|
447
|
-
}
|
|
448
|
-
}
|
|
449
|
-
})
|
|
450
|
-
rationale: "Use validate-node-connections helper to verify connections before workflow creation."
|
|
451
|
-
|
|
452
|
-
- pattern: missing_credentials
|
|
453
|
-
description: "Referencing credentials that don't exist"
|
|
454
|
-
category: authentication
|
|
455
|
-
severity: high
|
|
456
|
-
wrong: |
|
|
457
|
-
create_workflow({
|
|
458
|
-
nodes: [{
|
|
459
|
-
type: "n8n-nodes-base.httpRequest",
|
|
460
|
-
credentials: {
|
|
461
|
-
httpBasicAuth: "nonexistent" // ❌ Credential not created
|
|
462
|
-
}
|
|
463
|
-
}]
|
|
464
|
-
})
|
|
465
|
-
correct: |
|
|
466
|
-
// First create credential
|
|
467
|
-
const cred = create_credential({
|
|
468
|
-
type: "httpBasicAuth",
|
|
469
|
-
name: "My API Auth",
|
|
470
|
-
data: {username: "user", password: "pass"}
|
|
471
|
-
})
|
|
472
|
-
|
|
473
|
-
// Then reference it
|
|
474
|
-
create_workflow({
|
|
475
|
-
nodes: [{
|
|
476
|
-
type: "n8n-nodes-base.httpRequest",
|
|
477
|
-
credentials: {
|
|
478
|
-
httpBasicAuth: cred.id // ✅ Valid credential reference
|
|
479
|
-
}
|
|
480
|
-
}]
|
|
481
|
-
})
|
|
482
|
-
rationale: "Always create and verify credentials before referencing them in workflows."
|
|
483
|
-
|
|
484
|
-
examples:
|
|
485
|
-
execute_workflow:
|
|
486
|
-
- scenario: success
|
|
487
|
-
description: "Execute workflow and wait for completion"
|
|
488
|
-
input:
|
|
489
|
-
workflow_id: "wf_abc123"
|
|
490
|
-
wait_for_completion: true
|
|
491
|
-
data: { key: "value" }
|
|
492
|
-
output:
|
|
493
|
-
execution_id: "exec_xyz789"
|
|
494
|
-
status: "finished"
|
|
495
|
-
data: { result: "success" }
|
|
496
|
-
|
|
497
|
-
- scenario: failure_invalid_param
|
|
498
|
-
description: "Missing required workflow_id"
|
|
499
|
-
input:
|
|
500
|
-
data: { key: "value" }
|
|
501
|
-
error:
|
|
502
|
-
code: VALIDATION_ERROR
|
|
503
|
-
message: "workflow_id is required"
|
|
504
|
-
validator: validate-execute-workflow
|
|
505
|
-
|
|
506
|
-
create_workflow:
|
|
507
|
-
- scenario: success
|
|
508
|
-
description: "Create simple workflow"
|
|
509
|
-
input:
|
|
510
|
-
name: "Data Processor"
|
|
511
|
-
nodes:
|
|
512
|
-
- type: n8n-nodes-base.start
|
|
513
|
-
name: Start
|
|
514
|
-
parameters: {}
|
|
515
|
-
- type: n8n-nodes-base.httpRequest
|
|
516
|
-
name: Fetch Data
|
|
517
|
-
parameters:
|
|
518
|
-
url: "https://api.example.com/data"
|
|
519
|
-
connections:
|
|
520
|
-
Start:
|
|
521
|
-
main: [[{node: "Fetch Data", type: "main", index: 0}]]
|
|
522
|
-
output:
|
|
523
|
-
workflow_id: "wf_new123"
|
|
524
|
-
name: "Data Processor"
|
|
525
|
-
active: false
|
|
526
|
-
|
|
527
|
-
- scenario: failure_invalid_param
|
|
528
|
-
description: "Invalid node structure"
|
|
529
|
-
input:
|
|
530
|
-
name: "Test Workflow"
|
|
531
|
-
nodes: "not an array"
|
|
532
|
-
error:
|
|
533
|
-
code: VALIDATION_ERROR
|
|
534
|
-
message: "nodes must be an array"
|
|
535
|
-
validator: validate-create-workflow
|
|
536
|
-
|
|
537
|
-
mcp_specific:
|
|
538
|
-
server_command: "npx -y @illuminaresolutions/n8n-mcp-server"
|
|
539
|
-
transport: stdio
|
|
540
|
-
environment_variables:
|
|
541
|
-
- name: N8N_HOST
|
|
542
|
-
required: true
|
|
543
|
-
description: "n8n instance URL (e.g., https://your-n8n-instance.com)"
|
|
544
|
-
- name: N8N_API_KEY
|
|
545
|
-
required: true
|
|
546
|
-
description: "n8n API key for authentication"
|
|
547
|
-
health_check:
|
|
548
|
-
method: tool_call
|
|
549
|
-
command: list_workflows
|
|
550
|
-
expected_response: "Array of workflows"
|
|
551
|
-
timeout_ms: 5000
|
|
1
|
+
tool:
|
|
2
|
+
schema_version: 2.0
|
|
3
|
+
id: n8n
|
|
4
|
+
type: mcp
|
|
5
|
+
name: n8n Workflow Automation
|
|
6
|
+
version: 1.0.0
|
|
7
|
+
description: n8n workflow management with execution validation and credential handling
|
|
8
|
+
knowledge_strategy: executable
|
|
9
|
+
|
|
10
|
+
executable_knowledge:
|
|
11
|
+
validators:
|
|
12
|
+
# Combined validator for execute_workflow
|
|
13
|
+
- id: validate-execute-workflow
|
|
14
|
+
validates: execute_workflow
|
|
15
|
+
language: javascript
|
|
16
|
+
checks:
|
|
17
|
+
- required_fields: [workflow_id]
|
|
18
|
+
function: |
|
|
19
|
+
(function() {
|
|
20
|
+
const errors = [];
|
|
21
|
+
|
|
22
|
+
// 1. Required workflow_id
|
|
23
|
+
if (!args.args.workflow_id && !args.args.workflowId) {
|
|
24
|
+
errors.push("workflow_id is required");
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// 2. Validate data parameter structure if provided
|
|
28
|
+
if (args.args.data) {
|
|
29
|
+
if (typeof args.args.data !== 'object') {
|
|
30
|
+
errors.push("data must be an object");
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// 3. Validate wait_for_completion is boolean
|
|
35
|
+
if (args.args.wait_for_completion !== undefined &&
|
|
36
|
+
typeof args.args.wait_for_completion !== 'boolean') {
|
|
37
|
+
errors.push("wait_for_completion must be boolean");
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return {
|
|
41
|
+
valid: errors.length === 0,
|
|
42
|
+
errors: errors
|
|
43
|
+
};
|
|
44
|
+
})();
|
|
45
|
+
|
|
46
|
+
# Validator for create_workflow
|
|
47
|
+
- id: validate-create-workflow
|
|
48
|
+
validates: create_workflow
|
|
49
|
+
language: javascript
|
|
50
|
+
function: |
|
|
51
|
+
(function() {
|
|
52
|
+
const errors = [];
|
|
53
|
+
|
|
54
|
+
// 1. Required name field
|
|
55
|
+
if (!args.args.name) {
|
|
56
|
+
errors.push("name is required");
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// 2. Validate nodes structure if provided
|
|
60
|
+
if (args.args.nodes) {
|
|
61
|
+
if (!Array.isArray(args.args.nodes)) {
|
|
62
|
+
errors.push("nodes must be an array");
|
|
63
|
+
} else {
|
|
64
|
+
args.args.nodes.forEach((node, index) => {
|
|
65
|
+
if (!node.type) {
|
|
66
|
+
errors.push(`nodes[${index}] missing required 'type' field`);
|
|
67
|
+
}
|
|
68
|
+
if (!node.name) {
|
|
69
|
+
errors.push(`nodes[${index}] missing required 'name' field`);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// 3. Validate connections structure
|
|
76
|
+
if (args.args.connections) {
|
|
77
|
+
if (typeof args.args.connections !== 'object') {
|
|
78
|
+
errors.push("connections must be an object");
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return {
|
|
83
|
+
valid: errors.length === 0,
|
|
84
|
+
errors: errors
|
|
85
|
+
};
|
|
86
|
+
})();
|
|
87
|
+
|
|
88
|
+
# Validator for create_credential
|
|
89
|
+
- id: validate-create-credential
|
|
90
|
+
validates: create_credential
|
|
91
|
+
language: javascript
|
|
92
|
+
function: |
|
|
93
|
+
(function() {
|
|
94
|
+
const errors = [];
|
|
95
|
+
|
|
96
|
+
if (!args.args.name) {
|
|
97
|
+
errors.push("name is required for create_credential");
|
|
98
|
+
}
|
|
99
|
+
if (!args.args.type) {
|
|
100
|
+
errors.push("type is required for create_credential");
|
|
101
|
+
}
|
|
102
|
+
if (!args.args.data) {
|
|
103
|
+
errors.push("data is required for create_credential");
|
|
104
|
+
} else if (typeof args.args.data !== 'object') {
|
|
105
|
+
errors.push("data must be an object");
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return {
|
|
109
|
+
valid: errors.length === 0,
|
|
110
|
+
errors: errors
|
|
111
|
+
};
|
|
112
|
+
})();
|
|
113
|
+
|
|
114
|
+
# Validator for update_credential
|
|
115
|
+
- id: validate-update-credential
|
|
116
|
+
validates: update_credential
|
|
117
|
+
language: javascript
|
|
118
|
+
function: |
|
|
119
|
+
(function() {
|
|
120
|
+
const errors = [];
|
|
121
|
+
|
|
122
|
+
if (!args.args.credential_id && !args.args.credentialId) {
|
|
123
|
+
errors.push("credential_id is required for update_credential");
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return {
|
|
127
|
+
valid: errors.length === 0,
|
|
128
|
+
errors: errors
|
|
129
|
+
};
|
|
130
|
+
})();
|
|
131
|
+
|
|
132
|
+
# Validator for delete_credential
|
|
133
|
+
- id: validate-delete-credential
|
|
134
|
+
validates: delete_credential
|
|
135
|
+
language: javascript
|
|
136
|
+
function: |
|
|
137
|
+
(function() {
|
|
138
|
+
const errors = [];
|
|
139
|
+
|
|
140
|
+
if (!args.args.credential_id && !args.args.credentialId) {
|
|
141
|
+
errors.push("credential_id is required for delete_credential");
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return {
|
|
145
|
+
valid: errors.length === 0,
|
|
146
|
+
errors: errors
|
|
147
|
+
};
|
|
148
|
+
})();
|
|
149
|
+
|
|
150
|
+
helpers:
|
|
151
|
+
- id: extract-workflow-state
|
|
152
|
+
language: javascript
|
|
153
|
+
runtime: isolated_vm
|
|
154
|
+
description: "Extract current state from workflow execution"
|
|
155
|
+
function: |
|
|
156
|
+
(function() {
|
|
157
|
+
const { execution } = args;
|
|
158
|
+
if (!execution) return null;
|
|
159
|
+
|
|
160
|
+
return {
|
|
161
|
+
id: execution.id,
|
|
162
|
+
status: execution.finished ? 'finished' : execution.stoppedAt ? 'stopped' : 'running',
|
|
163
|
+
startedAt: execution.startedAt,
|
|
164
|
+
finishedAt: execution.finishedAt,
|
|
165
|
+
mode: execution.mode
|
|
166
|
+
};
|
|
167
|
+
})();
|
|
168
|
+
|
|
169
|
+
- id: validate-node-connections
|
|
170
|
+
language: javascript
|
|
171
|
+
runtime: isolated_vm
|
|
172
|
+
description: "Validate node connections in workflow"
|
|
173
|
+
function: |
|
|
174
|
+
(function() {
|
|
175
|
+
const { nodes, connections } = args;
|
|
176
|
+
if (!nodes || !connections) {
|
|
177
|
+
return { valid: false, errors: ['Missing nodes or connections'] };
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
const errors = [];
|
|
181
|
+
const nodeNames = new Set(nodes.map(n => n.name));
|
|
182
|
+
|
|
183
|
+
// Check all connection sources exist
|
|
184
|
+
for (const [sourceName, outputs] of Object.entries(connections)) {
|
|
185
|
+
if (!nodeNames.has(sourceName)) {
|
|
186
|
+
errors.push(`Connection source '${sourceName}' not found in nodes`);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// Check all connection targets exist
|
|
190
|
+
// n8n structure: outputs = { main: [[{node, type, index}]], error: [[...]] }
|
|
191
|
+
for (const outputConnections of Object.values(outputs || {})) {
|
|
192
|
+
if (Array.isArray(outputConnections)) {
|
|
193
|
+
// outputConnections is an array of arrays
|
|
194
|
+
outputConnections.forEach(connectionGroup => {
|
|
195
|
+
if (Array.isArray(connectionGroup)) {
|
|
196
|
+
connectionGroup.forEach(conn => {
|
|
197
|
+
if (conn.node && !nodeNames.has(conn.node)) {
|
|
198
|
+
errors.push(`Connection target '${conn.node}' not found in nodes`);
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
return {
|
|
208
|
+
valid: errors.length === 0,
|
|
209
|
+
errors: errors
|
|
210
|
+
};
|
|
211
|
+
})();
|
|
212
|
+
|
|
213
|
+
- id: format-workflow-data
|
|
214
|
+
language: javascript
|
|
215
|
+
runtime: isolated_vm
|
|
216
|
+
description: "Format input data for workflow execution"
|
|
217
|
+
function: |
|
|
218
|
+
(function() {
|
|
219
|
+
const { data, workflowData } = args;
|
|
220
|
+
|
|
221
|
+
// If workflow expects specific input format, validate it
|
|
222
|
+
if (workflowData && workflowData.nodes) {
|
|
223
|
+
const triggerNode = workflowData.nodes.find(n =>
|
|
224
|
+
n.type.includes('trigger') ||
|
|
225
|
+
n.type.includes('webhook') ||
|
|
226
|
+
n.type === 'n8n-nodes-base.start'
|
|
227
|
+
);
|
|
228
|
+
|
|
229
|
+
if (triggerNode && triggerNode.parameters !== undefined) {
|
|
230
|
+
// Format data according to trigger expectations
|
|
231
|
+
return {
|
|
232
|
+
formatted: true,
|
|
233
|
+
data: data || {},
|
|
234
|
+
triggerNode: triggerNode.name
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
return {
|
|
240
|
+
formatted: false,
|
|
241
|
+
data: data || {}
|
|
242
|
+
};
|
|
243
|
+
})();
|
|
244
|
+
|
|
245
|
+
- id: parse-execution-error
|
|
246
|
+
language: javascript
|
|
247
|
+
runtime: isolated_vm
|
|
248
|
+
description: "Parse and format execution errors"
|
|
249
|
+
function: |
|
|
250
|
+
(function() {
|
|
251
|
+
const { error, execution } = args;
|
|
252
|
+
if (!error) return null;
|
|
253
|
+
|
|
254
|
+
return {
|
|
255
|
+
message: error.message || 'Unknown error',
|
|
256
|
+
node: error.node || 'unknown',
|
|
257
|
+
timestamp: error.timestamp || execution?.stoppedAt,
|
|
258
|
+
stack: error.stack || null
|
|
259
|
+
};
|
|
260
|
+
})();
|
|
261
|
+
|
|
262
|
+
- id: validate-credential-type
|
|
263
|
+
language: javascript
|
|
264
|
+
runtime: isolated_vm
|
|
265
|
+
description: "Validate credential type is supported"
|
|
266
|
+
function: |
|
|
267
|
+
(function() {
|
|
268
|
+
const { type } = args;
|
|
269
|
+
|
|
270
|
+
// Common n8n credential types
|
|
271
|
+
const validTypes = [
|
|
272
|
+
'httpBasicAuth',
|
|
273
|
+
'httpHeaderAuth',
|
|
274
|
+
'oAuth2Api',
|
|
275
|
+
'apiKey',
|
|
276
|
+
'postgres',
|
|
277
|
+
'mysql',
|
|
278
|
+
'mongodb',
|
|
279
|
+
'redis',
|
|
280
|
+
'aws',
|
|
281
|
+
'googleApi',
|
|
282
|
+
'slackApi',
|
|
283
|
+
'githubApi',
|
|
284
|
+
'jwtAuth'
|
|
285
|
+
];
|
|
286
|
+
|
|
287
|
+
return validTypes.includes(type);
|
|
288
|
+
})();
|
|
289
|
+
|
|
290
|
+
- id: build-workflow-structure
|
|
291
|
+
language: javascript
|
|
292
|
+
runtime: isolated_vm
|
|
293
|
+
description: "Build workflow structure from nodes and connections"
|
|
294
|
+
function: |
|
|
295
|
+
(function() {
|
|
296
|
+
const { name, nodes, connections } = args;
|
|
297
|
+
|
|
298
|
+
if (!name) {
|
|
299
|
+
return { error: 'Workflow name is required' };
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
return {
|
|
303
|
+
name: name,
|
|
304
|
+
nodes: nodes || [],
|
|
305
|
+
connections: connections || {},
|
|
306
|
+
active: false,
|
|
307
|
+
settings: {},
|
|
308
|
+
staticData: null
|
|
309
|
+
};
|
|
310
|
+
})();
|
|
311
|
+
|
|
312
|
+
- id: calculate-workflow-complexity
|
|
313
|
+
language: javascript
|
|
314
|
+
runtime: isolated_vm
|
|
315
|
+
description: "Calculate workflow complexity score"
|
|
316
|
+
function: |
|
|
317
|
+
(function() {
|
|
318
|
+
const { nodes, connections } = args;
|
|
319
|
+
|
|
320
|
+
if (!nodes) return { complexity: 0 };
|
|
321
|
+
|
|
322
|
+
let complexity = nodes.length; // Base complexity from node count
|
|
323
|
+
|
|
324
|
+
// Add complexity for connections
|
|
325
|
+
if (connections) {
|
|
326
|
+
const connectionCount = Object.values(connections).reduce((sum, outputs) => {
|
|
327
|
+
return sum + Object.values(outputs || {}).reduce((s, conns) => {
|
|
328
|
+
return s + (Array.isArray(conns) ? conns.length : 0);
|
|
329
|
+
}, 0);
|
|
330
|
+
}, 0);
|
|
331
|
+
complexity += connectionCount * 0.5;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
// Add complexity for certain node types
|
|
335
|
+
const complexNodeTypes = ['n8n-nodes-base.if', 'n8n-nodes-base.switch', 'n8n-nodes-base.function'];
|
|
336
|
+
const complexNodes = nodes.filter(n => complexNodeTypes.includes(n.type)).length;
|
|
337
|
+
complexity += complexNodes * 2;
|
|
338
|
+
|
|
339
|
+
return {
|
|
340
|
+
complexity: Math.round(complexity),
|
|
341
|
+
nodeCount: nodes.length,
|
|
342
|
+
connectionCount: Object.keys(connections || {}).length,
|
|
343
|
+
hasComplexLogic: complexNodes > 0
|
|
344
|
+
};
|
|
345
|
+
})();
|
|
346
|
+
|
|
347
|
+
api_complexity:
|
|
348
|
+
workflow_execution_state:
|
|
349
|
+
- state: waiting
|
|
350
|
+
description: "Workflow is queued for execution"
|
|
351
|
+
next_states: [running, failed]
|
|
352
|
+
|
|
353
|
+
- state: running
|
|
354
|
+
description: "Workflow is currently executing"
|
|
355
|
+
next_states: [finished, stopped, error]
|
|
356
|
+
|
|
357
|
+
- state: finished
|
|
358
|
+
description: "Workflow completed successfully"
|
|
359
|
+
terminal: true
|
|
360
|
+
|
|
361
|
+
- state: stopped
|
|
362
|
+
description: "Workflow was manually stopped"
|
|
363
|
+
terminal: true
|
|
364
|
+
|
|
365
|
+
- state: error
|
|
366
|
+
description: "Workflow encountered an error"
|
|
367
|
+
terminal: true
|
|
368
|
+
retry_allowed: true
|
|
369
|
+
|
|
370
|
+
credential_types:
|
|
371
|
+
- type: httpBasicAuth
|
|
372
|
+
fields: [username, password]
|
|
373
|
+
description: "HTTP Basic Authentication"
|
|
374
|
+
|
|
375
|
+
- type: httpHeaderAuth
|
|
376
|
+
fields: [name, value]
|
|
377
|
+
description: "HTTP Header Authentication"
|
|
378
|
+
|
|
379
|
+
- type: oAuth2Api
|
|
380
|
+
fields: [clientId, clientSecret, authUrl, accessTokenUrl]
|
|
381
|
+
description: "OAuth 2.0 Authentication"
|
|
382
|
+
|
|
383
|
+
- type: apiKey
|
|
384
|
+
fields: [apiKey]
|
|
385
|
+
description: "API Key Authentication"
|
|
386
|
+
|
|
387
|
+
node_execution_patterns:
|
|
388
|
+
- pattern: sequential
|
|
389
|
+
description: "Nodes execute in order, one after another"
|
|
390
|
+
use_case: "Simple linear workflows"
|
|
391
|
+
|
|
392
|
+
- pattern: parallel
|
|
393
|
+
description: "Multiple nodes execute simultaneously"
|
|
394
|
+
use_case: "Independent data processing"
|
|
395
|
+
|
|
396
|
+
- pattern: conditional
|
|
397
|
+
description: "Execution path depends on node conditions"
|
|
398
|
+
nodes: [n8n-nodes-base.if, n8n-nodes-base.switch]
|
|
399
|
+
|
|
400
|
+
- pattern: loop
|
|
401
|
+
description: "Repeated execution over data items"
|
|
402
|
+
nodes: [n8n-nodes-base.splitInBatches]
|
|
403
|
+
|
|
404
|
+
anti_patterns:
|
|
405
|
+
- pattern: missing_error_handling
|
|
406
|
+
description: "Not handling node execution errors"
|
|
407
|
+
category: reliability
|
|
408
|
+
severity: high
|
|
409
|
+
wrong: |
|
|
410
|
+
execute_workflow({
|
|
411
|
+
workflow_id: "123"
|
|
412
|
+
// ❌ No error handling for failed execution
|
|
413
|
+
})
|
|
414
|
+
correct: |
|
|
415
|
+
const result = execute_workflow({
|
|
416
|
+
workflow_id: "123",
|
|
417
|
+
wait_for_completion: true
|
|
418
|
+
})
|
|
419
|
+
|
|
420
|
+
if (result.status === 'error') {
|
|
421
|
+
// ✅ Handle error appropriately
|
|
422
|
+
handle_execution_error(result)
|
|
423
|
+
}
|
|
424
|
+
rationale: "Always check execution status and handle errors gracefully."
|
|
425
|
+
|
|
426
|
+
- pattern: invalid_node_connections
|
|
427
|
+
description: "Creating workflows with disconnected or invalid nodes"
|
|
428
|
+
category: workflow_structure
|
|
429
|
+
severity: medium
|
|
430
|
+
wrong: |
|
|
431
|
+
create_workflow({
|
|
432
|
+
name: "Test",
|
|
433
|
+
nodes: [{name: "Start", type: "trigger"}, {name: "End", type: "action"}],
|
|
434
|
+
connections: {
|
|
435
|
+
"NonExistent": { // ❌ Node doesn't exist
|
|
436
|
+
main: [[{node: "End"}]]
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
})
|
|
440
|
+
correct: |
|
|
441
|
+
create_workflow({
|
|
442
|
+
name: "Test",
|
|
443
|
+
nodes: [{name: "Start", type: "trigger"}, {name: "End", type: "action"}],
|
|
444
|
+
connections: {
|
|
445
|
+
"Start": { // ✅ Correct node name
|
|
446
|
+
main: [[{node: "End", type: "main", index: 0}]]
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
})
|
|
450
|
+
rationale: "Use validate-node-connections helper to verify connections before workflow creation."
|
|
451
|
+
|
|
452
|
+
- pattern: missing_credentials
|
|
453
|
+
description: "Referencing credentials that don't exist"
|
|
454
|
+
category: authentication
|
|
455
|
+
severity: high
|
|
456
|
+
wrong: |
|
|
457
|
+
create_workflow({
|
|
458
|
+
nodes: [{
|
|
459
|
+
type: "n8n-nodes-base.httpRequest",
|
|
460
|
+
credentials: {
|
|
461
|
+
httpBasicAuth: "nonexistent" // ❌ Credential not created
|
|
462
|
+
}
|
|
463
|
+
}]
|
|
464
|
+
})
|
|
465
|
+
correct: |
|
|
466
|
+
// First create credential
|
|
467
|
+
const cred = create_credential({
|
|
468
|
+
type: "httpBasicAuth",
|
|
469
|
+
name: "My API Auth",
|
|
470
|
+
data: {username: "user", password: "pass"}
|
|
471
|
+
})
|
|
472
|
+
|
|
473
|
+
// Then reference it
|
|
474
|
+
create_workflow({
|
|
475
|
+
nodes: [{
|
|
476
|
+
type: "n8n-nodes-base.httpRequest",
|
|
477
|
+
credentials: {
|
|
478
|
+
httpBasicAuth: cred.id // ✅ Valid credential reference
|
|
479
|
+
}
|
|
480
|
+
}]
|
|
481
|
+
})
|
|
482
|
+
rationale: "Always create and verify credentials before referencing them in workflows."
|
|
483
|
+
|
|
484
|
+
examples:
|
|
485
|
+
execute_workflow:
|
|
486
|
+
- scenario: success
|
|
487
|
+
description: "Execute workflow and wait for completion"
|
|
488
|
+
input:
|
|
489
|
+
workflow_id: "wf_abc123"
|
|
490
|
+
wait_for_completion: true
|
|
491
|
+
data: { key: "value" }
|
|
492
|
+
output:
|
|
493
|
+
execution_id: "exec_xyz789"
|
|
494
|
+
status: "finished"
|
|
495
|
+
data: { result: "success" }
|
|
496
|
+
|
|
497
|
+
- scenario: failure_invalid_param
|
|
498
|
+
description: "Missing required workflow_id"
|
|
499
|
+
input:
|
|
500
|
+
data: { key: "value" }
|
|
501
|
+
error:
|
|
502
|
+
code: VALIDATION_ERROR
|
|
503
|
+
message: "workflow_id is required"
|
|
504
|
+
validator: validate-execute-workflow
|
|
505
|
+
|
|
506
|
+
create_workflow:
|
|
507
|
+
- scenario: success
|
|
508
|
+
description: "Create simple workflow"
|
|
509
|
+
input:
|
|
510
|
+
name: "Data Processor"
|
|
511
|
+
nodes:
|
|
512
|
+
- type: n8n-nodes-base.start
|
|
513
|
+
name: Start
|
|
514
|
+
parameters: {}
|
|
515
|
+
- type: n8n-nodes-base.httpRequest
|
|
516
|
+
name: Fetch Data
|
|
517
|
+
parameters:
|
|
518
|
+
url: "https://api.example.com/data"
|
|
519
|
+
connections:
|
|
520
|
+
Start:
|
|
521
|
+
main: [[{node: "Fetch Data", type: "main", index: 0}]]
|
|
522
|
+
output:
|
|
523
|
+
workflow_id: "wf_new123"
|
|
524
|
+
name: "Data Processor"
|
|
525
|
+
active: false
|
|
526
|
+
|
|
527
|
+
- scenario: failure_invalid_param
|
|
528
|
+
description: "Invalid node structure"
|
|
529
|
+
input:
|
|
530
|
+
name: "Test Workflow"
|
|
531
|
+
nodes: "not an array"
|
|
532
|
+
error:
|
|
533
|
+
code: VALIDATION_ERROR
|
|
534
|
+
message: "nodes must be an array"
|
|
535
|
+
validator: validate-create-workflow
|
|
536
|
+
|
|
537
|
+
mcp_specific:
|
|
538
|
+
server_command: "npx -y @illuminaresolutions/n8n-mcp-server"
|
|
539
|
+
transport: stdio
|
|
540
|
+
environment_variables:
|
|
541
|
+
- name: N8N_HOST
|
|
542
|
+
required: true
|
|
543
|
+
description: "n8n instance URL (e.g., https://your-n8n-instance.com)"
|
|
544
|
+
- name: N8N_API_KEY
|
|
545
|
+
required: true
|
|
546
|
+
description: "n8n API key for authentication"
|
|
547
|
+
health_check:
|
|
548
|
+
method: tool_call
|
|
549
|
+
command: list_workflows
|
|
550
|
+
expected_response: "Array of workflows"
|
|
551
|
+
timeout_ms: 5000
|