Add testing_triangle and repo_scan_context workflow packages:

- Introduce `testing_triangle.json` for executing lint, unit, and UI tests with conditional gating.
- Include `repo_scan_context.json` for reducing repository files into context before AI requests.
- Update localization files with new package labels and descriptions.
This commit is contained in:
2026-01-09 21:19:10 +00:00
parent adcf8f2e3b
commit e425cfc413
7 changed files with 180 additions and 5 deletions

View File

@@ -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."
}

View File

@@ -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."
}

View File

@@ -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."
}

View File

@@ -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."
}

View File

@@ -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."
}

View File

@@ -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"}
}
]
}
}

View File

@@ -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"
}
}
]
}
}