- Exécution de commandes shell inline avec `!commande` ou `!`commande args``
- Support dans les prompts directs et les fichiers .claude/commands/**/*.md
- Exécution parallèle de multiples commandes
- Gestion robuste des erreurs et timeouts
- Intégration avec les variables d'environnement de settings.json
Nouveaux fichiers:
- packages/cli/src/user-shell.ts
- packages/core/src/shell.ts et shell.test.ts
- packages/ext-claudecode/src/tools/todowrite.test.ts et webfetch.test.ts
- packages/ui/src/banner.tsx, pixels.ts et pixels.test.ts
Tests: ✅ Tous les tests passent
Breaking Changes: Mineur - SlashCommand.prompt() async
39 lines
1.5 KiB
TypeScript
39 lines
1.5 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { todoWriteTool } from "./todowrite";
|
|
|
|
const run = (todos: unknown) => todoWriteTool.execute({ todos }, { cwd: "/" });
|
|
|
|
describe("TodoWrite", () => {
|
|
it("affiche la liste avec les symboles et le décompte", async () => {
|
|
const out = await run([
|
|
{ content: "Lire le code", status: "completed" },
|
|
{ content: "Implémenter", status: "in_progress", activeForm: "Implémentation du lot 3" },
|
|
{ content: "Écrire les tests", status: "pending" },
|
|
]);
|
|
expect(out.split("\n").slice(0, 4)).toEqual([
|
|
"Liste de tâches mise à jour (1/3 terminée(s)) :",
|
|
"☑ Lire le code",
|
|
"▶ Implémentation du lot 3",
|
|
"☐ Écrire les tests",
|
|
]);
|
|
});
|
|
|
|
it("liste vide : vidée", async () => {
|
|
expect(await run([])).toBe("Liste de tâches vidée.");
|
|
});
|
|
|
|
it("avertit si plusieurs tâches sont en cours", async () => {
|
|
const out = await run([
|
|
{ content: "A", status: "in_progress" },
|
|
{ content: "B", status: "in_progress" },
|
|
]);
|
|
expect(out).toContain("2 tâches sont « in_progress »");
|
|
});
|
|
|
|
it("valide l'entrée", async () => {
|
|
await expect(todoWriteTool.execute({}, { cwd: "/" })).rejects.toThrow("tableau attendu");
|
|
await expect(run([{ content: "", status: "pending" }])).rejects.toThrow("todos[0]");
|
|
await expect(run([{ content: "A", status: "fait" }])).rejects.toThrow("status");
|
|
await expect(run(["A"])).rejects.toThrow("objet attendu");
|
|
});
|
|
});
|