diff --git a/src/autometabuilder/messages_en.json b/src/autometabuilder/messages_en.json index 61668a4..ab264d1 100644 --- a/src/autometabuilder/messages_en.json +++ b/src/autometabuilder/messages_en.json @@ -385,5 +385,9 @@ "meta.workflow_packages.single_pass.label": "Single Pass", "meta.workflow_packages.single_pass.description": "Run one AI request and tool execution sequence without looping.", "meta.workflow_packages.plan_execute_summarize.label": "Plan, Execute, Summarize", - "meta.workflow_packages.plan_execute_summarize.description": "Plan with the model, run tools, then ask for a final recap." + "meta.workflow_packages.plan_execute_summarize.description": "Plan with the model, run tools, then ask for a final recap.", + "meta.workflow_packages.testing_triangle.label": "Testing Triangle", + "meta.workflow_packages.testing_triangle.description": "Run lint, unit, then UI tests with conditional gating.", + "meta.workflow_packages.repo_scan_context.label": "Repo Scan Context", + "meta.workflow_packages.repo_scan_context.description": "Map-reduce repo files into context before the AI request." } diff --git a/src/autometabuilder/messages_es.json b/src/autometabuilder/messages_es.json index d1904e9..223e5e0 100644 --- a/src/autometabuilder/messages_es.json +++ b/src/autometabuilder/messages_es.json @@ -381,5 +381,9 @@ "meta.workflow_packages.single_pass.label": "Una sola pasada", "meta.workflow_packages.single_pass.description": "Ejecuta una solicitud de IA y la secuencia de herramientas una vez, sin bucle.", "meta.workflow_packages.plan_execute_summarize.label": "Planear, ejecutar, resumir", - "meta.workflow_packages.plan_execute_summarize.description": "Planifica con el modelo, ejecuta herramientas y luego pide un resumen final." + "meta.workflow_packages.plan_execute_summarize.description": "Planifica con el modelo, ejecuta herramientas y luego pide un resumen final.", + "meta.workflow_packages.testing_triangle.label": "Triángulo de pruebas", + "meta.workflow_packages.testing_triangle.description": "Ejecuta lint, pruebas unitarias y UI con control condicional.", + "meta.workflow_packages.repo_scan_context.label": "Contexto del escaneo del repositorio", + "meta.workflow_packages.repo_scan_context.description": "Reduce el repositorio a contexto antes de la solicitud de IA." } diff --git a/src/autometabuilder/messages_fr.json b/src/autometabuilder/messages_fr.json index 9f6c13f..b7a1608 100644 --- a/src/autometabuilder/messages_fr.json +++ b/src/autometabuilder/messages_fr.json @@ -381,5 +381,9 @@ "meta.workflow_packages.single_pass.label": "Passe unique", "meta.workflow_packages.single_pass.description": "Exécute une requête IA et une séquence d'outils une seule fois, sans boucle.", "meta.workflow_packages.plan_execute_summarize.label": "Planifier, exécuter, résumer", - "meta.workflow_packages.plan_execute_summarize.description": "Planifiez avec le modèle, exécutez les outils, puis demandez un récapitulatif final." + "meta.workflow_packages.plan_execute_summarize.description": "Planifiez avec le modèle, exécutez les outils, puis demandez un récapitulatif final.", + "meta.workflow_packages.testing_triangle.label": "Triangle de tests", + "meta.workflow_packages.testing_triangle.description": "Exécute lint, tests unitaires puis UI avec contrôle conditionnel.", + "meta.workflow_packages.repo_scan_context.label": "Contexte d'exploration du dépôt", + "meta.workflow_packages.repo_scan_context.description": "Réduit les fichiers du dépôt en contexte avant la requête IA." } diff --git a/src/autometabuilder/messages_nl.json b/src/autometabuilder/messages_nl.json index 18c23c0..d1b2b24 100644 --- a/src/autometabuilder/messages_nl.json +++ b/src/autometabuilder/messages_nl.json @@ -381,5 +381,9 @@ "meta.workflow_packages.single_pass.label": "Enkele run", "meta.workflow_packages.single_pass.description": "Voer een AI-aanvraag en toolreeks een keer uit, zonder lus.", "meta.workflow_packages.plan_execute_summarize.label": "Plan, voer uit, vat samen", - "meta.workflow_packages.plan_execute_summarize.description": "Plan met het model, voer tools uit en vraag daarna om een eindoverzicht." + "meta.workflow_packages.plan_execute_summarize.description": "Plan met het model, voer tools uit en vraag daarna om een eindoverzicht.", + "meta.workflow_packages.testing_triangle.label": "Testdriehoek", + "meta.workflow_packages.testing_triangle.description": "Voer lint, unit- en UI-tests uit met voorwaardelijke gating.", + "meta.workflow_packages.repo_scan_context.label": "Repo-scancontext", + "meta.workflow_packages.repo_scan_context.description": "Reduceer repo-bestanden naar context vóór de AI-aanvraag." } diff --git a/src/autometabuilder/messages_pirate.json b/src/autometabuilder/messages_pirate.json index 7e701e6..6862c62 100644 --- a/src/autometabuilder/messages_pirate.json +++ b/src/autometabuilder/messages_pirate.json @@ -381,5 +381,9 @@ "meta.workflow_packages.single_pass.label": "Single Pass", "meta.workflow_packages.single_pass.description": "Run one AI request and tool run, no loop.", "meta.workflow_packages.plan_execute_summarize.label": "Plan, Plunder, Summarize", - "meta.workflow_packages.plan_execute_summarize.description": "Plan with the model, run tools, then ask for a final recap." + "meta.workflow_packages.plan_execute_summarize.description": "Plan with the model, run tools, then ask for a final recap.", + "meta.workflow_packages.testing_triangle.label": "Testin' Triangle", + "meta.workflow_packages.testing_triangle.description": "Run lint, unit, then UI tests with conditional gating.", + "meta.workflow_packages.repo_scan_context.label": "Repo Scan Context", + "meta.workflow_packages.repo_scan_context.description": "Map-reduce repo files into context before the AI request." } diff --git a/src/autometabuilder/workflow_packages/repo_scan_context.json b/src/autometabuilder/workflow_packages/repo_scan_context.json new file mode 100644 index 0000000..e02484c --- /dev/null +++ b/src/autometabuilder/workflow_packages/repo_scan_context.json @@ -0,0 +1,67 @@ +{ + "id": "repo_scan_context", + "label": "meta.workflow_packages.repo_scan_context.label", + "description": "meta.workflow_packages.repo_scan_context.description", + "tags": ["map", "reduce", "context"], + "workflow": { + "nodes": [ + { + "id": "list_files", + "type": "tools.list_files", + "inputs": {"path": "."}, + "outputs": {"files": "repo_files"} + }, + { + "id": "filter_python", + "type": "utils.filter_list", + "inputs": {"items": "$repo_files", "mode": "regex", "pattern": "\\.py$"}, + "outputs": {"items": "python_files"} + }, + { + "id": "reduce_python", + "type": "utils.reduce_list", + "inputs": {"items": "$python_files", "separator": "\\n"}, + "outputs": {"result": "python_summary"} + }, + { + "id": "seed_messages", + "type": "core.seed_messages", + "outputs": {"messages": "messages"} + }, + { + "id": "append_repo_summary", + "type": "core.append_context_message", + "inputs": {"messages": "$messages", "context": "$python_summary"}, + "outputs": {"messages": "messages"} + }, + { + "id": "append_user_instruction", + "type": "core.append_user_instruction", + "inputs": {"messages": "$messages"}, + "outputs": {"messages": "messages"} + }, + { + "id": "ai_request", + "type": "core.ai_request", + "inputs": {"messages": "$messages"}, + "outputs": { + "response": "llm_response", + "has_tool_calls": "has_tool_calls", + "tool_calls_count": "tool_calls_count" + } + }, + { + "id": "run_tool_calls", + "type": "core.run_tool_calls", + "inputs": {"response": "$llm_response"}, + "outputs": {"tool_results": "tool_results", "no_tool_calls": "no_tool_calls"} + }, + { + "id": "append_tool_results", + "type": "core.append_tool_results", + "inputs": {"messages": "$messages", "tool_results": "$tool_results"}, + "outputs": {"messages": "messages"} + } + ] + } +} diff --git a/src/autometabuilder/workflow_packages/testing_triangle.json b/src/autometabuilder/workflow_packages/testing_triangle.json new file mode 100644 index 0000000..0d3f737 --- /dev/null +++ b/src/autometabuilder/workflow_packages/testing_triangle.json @@ -0,0 +1,88 @@ +{ + "id": "testing_triangle", + "label": "meta.workflow_packages.testing_triangle.label", + "description": "meta.workflow_packages.testing_triangle.description", + "tags": ["testing", "lint", "e2e"], + "workflow": { + "nodes": [ + { + "id": "lint", + "type": "tools.run_lint", + "inputs": { + "path": "src" + }, + "outputs": { + "results": "lint_results" + } + }, + { + "id": "lint_failed", + "type": "utils.branch_condition", + "inputs": { + "value": "$lint_results", + "mode": "regex", + "compare": "(FAILED|ERROR)" + }, + "outputs": { + "result": "lint_failed" + } + }, + { + "id": "lint_ok", + "type": "utils.not", + "inputs": { + "value": "$lint_failed" + }, + "outputs": { + "result": "lint_ok" + } + }, + { + "id": "unit_tests", + "type": "tools.run_tests", + "when": "$lint_ok", + "inputs": { + "path": "tests" + }, + "outputs": { + "results": "unit_results" + } + }, + { + "id": "unit_failed", + "type": "utils.branch_condition", + "when": "$lint_ok", + "inputs": { + "value": "$unit_results", + "mode": "regex", + "compare": "(FAILED|ERROR)" + }, + "outputs": { + "result": "unit_failed" + } + }, + { + "id": "unit_ok", + "type": "utils.not", + "when": "$lint_ok", + "inputs": { + "value": "$unit_failed" + }, + "outputs": { + "result": "unit_ok" + } + }, + { + "id": "ui_tests", + "type": "tools.run_tests", + "when": "$unit_ok", + "inputs": { + "path": "tests/ui" + }, + "outputs": { + "results": "ui_results" + } + } + ] + } +}