diff --git a/CHANGELOG.md b/CHANGELOG.md index 4321142..14ff812 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,46 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). +## [0.10.0] - 2026-02-09 + +### Added + +- **`structural-reform` builtin piece**: Full project review and structural reform — iterative codebase restructuring with staged file splits, powered by `loop_monitors` +- **`unit-test` builtin piece**: Unit test focused piece — test analysis → test implementation → review → fix, with `loop_monitors` for cycle control +- **`test-planner` persona**: Specialized persona for analyzing codebase and planning comprehensive test strategies +- **Interactive mode variants**: Four selectable modes after piece selection — `assistant` (default: AI-guided requirement refinement), `persona` (conversation with first movement's persona), `quiet` (generate instructions without questions), `passthrough` (user input used as-is) +- **`persona_providers` config**: Per-persona provider overrides (e.g., `{ coder: 'codex' }`) — route specific personas to different providers without creating hybrid pieces +- **`task_poll_interval_ms` config**: Configurable polling interval for `takt run` to detect new tasks during execution (default: 500ms, range: 100–5000ms) +- **`interactive_mode` piece field**: Piece-level default interactive mode override (e.g., set `passthrough` for pieces that don't benefit from AI planning) +- **Task-level output prefixing**: Colored `[taskName]` prefix on all output lines during parallel `takt run` execution, preventing mid-line interleaving between concurrent tasks +- **Review policy facet**: Shared review policy (`builtins/{lang}/policies/review.md`) for consistent review criteria across pieces + +### Changed + +- **BREAKING:** Removed all Hybrid Codex pieces (`*-hybrid-codex`) — replaced by `persona_providers` config which achieves the same result without duplicating piece files +- Removed `tools/generate-hybrid-codex.mjs` (no longer needed with `persona_providers`) +- Improved parallel execution output: movement-level prefix now includes task context and iteration info in concurrent runs +- Codex client now detects stream hangs (10-minute idle timeout) and distinguishes timeout vs external abort in error messages +- Parallel task execution (`takt run`) now polls for newly added tasks during execution instead of only checking between task completions +- Parallel task execution no longer enforces per-task time limits (previously had a timeout) +- Issue references now routed through interactive mode (as initial input) instead of skipping interactive mode entirely +- Builtin `config.yaml` updated to document all GlobalConfig fields +- Extracted `conversationLoop.ts` for shared conversation logic across interactive mode variants +- Line editor improvements: additional key bindings and edge case fixes + +### Fixed + +- Codex processes hanging indefinitely when stream becomes idle — now aborted after 10 minutes of inactivity, releasing worker pool slots + +### Internal + +- New test coverage: engine-persona-providers, interactive-mode (532 lines), task-prefix-writer, workerPool expansion, pieceResolver expansion, lineEditor expansion, parallel-logger expansion, globalConfig-defaults expansion, pieceExecution-debug-prompts expansion, it-piece-loader expansion, runAllTasks-concurrency expansion, engine-parallel +- Extracted `TaskPrefixWriter` for task-level parallel output management +- Extracted `modeSelection.ts`, `passthroughMode.ts`, `personaMode.ts`, `quietMode.ts` from interactive module +- `InteractiveMode` type model added (`src/core/models/interactive-mode.ts`) +- `PieceEngine` validates `taskPrefix`/`taskColorIndex` pair consistency at construction +- Implementation notes document added (`docs/implements/retry-and-session.ja.md`) + ## [0.9.0] - 2026-02-08 ### Added diff --git a/README.md b/README.md index 59c39ba..602309b 100644 --- a/README.md +++ b/README.md @@ -92,13 +92,25 @@ takt takt hello ``` -**Note:** Issue references (`#6`) and `--task` / `--issue` options skip interactive mode and execute the task directly. All other inputs (including text with spaces) enter interactive mode for requirement refinement. +**Note:** `--task` option skips interactive mode and executes the task directly. Issue references (`#6`, `--issue`) are used as initial input in interactive mode. **Flow:** 1. Select piece -2. Refine task content through conversation with AI -3. Finalize task instructions with `/go` (you can also add additional instructions like `/go additional instructions`), or use `/play ` to execute a task immediately -4. Execute (create worktree, run piece, create PR) +2. Select interactive mode (assistant / persona / quiet / passthrough) +3. Refine task content through conversation with AI +4. Finalize task instructions with `/go` (you can also add additional instructions like `/go additional instructions`), or use `/play ` to execute a task immediately +5. Execute (create worktree, run piece, create PR) + +#### Interactive Mode Variants + +| Mode | Description | +|------|-------------| +| `assistant` | Default. AI asks clarifying questions before generating task instructions. | +| `persona` | Conversation with the first movement's persona (uses its system prompt and tools). | +| `quiet` | Generates task instructions without asking questions (best-effort). | +| `passthrough` | Passes user input directly as task text without AI processing. | + +Pieces can set a default mode via the `interactive_mode` field in YAML. #### Execution Example @@ -451,8 +463,10 @@ TAKT includes multiple builtin pieces: | `passthrough` | Thinnest wrapper. Pass task directly to coder as-is. No review. | | `compound-eye` | Multi-model review: sends the same instruction to Claude and Codex simultaneously, then synthesizes both responses. | | `review-only` | Read-only code review piece that makes no changes. | +| `structural-reform` | Full project review and structural reform: iterative codebase restructuring with staged file splits. | +| `unit-test` | Unit test focused piece: test analysis → test implementation → review → fix. | -**Hybrid Codex variants** (`*-hybrid-codex`): Each major piece has a Codex variant where the coder agent runs on Codex while reviewers use Claude. Available for: default, minimal, expert, expert-cqrs, passthrough, review-fix-minimal, coding. +**Per-persona provider overrides:** Use `persona_providers` in config to route specific personas to different providers (e.g., coder on Codex, reviewers on Claude) without duplicating pieces. Use `takt switch` to switch pieces. @@ -475,6 +489,7 @@ Use `takt switch` to switch pieces. | **research-planner** | Research task planning and scope definition | | **research-digger** | Deep investigation and information gathering | | **research-supervisor** | Research quality validation and completeness assessment | +| **test-planner** | Test strategy analysis and comprehensive test planning | | **pr-commenter** | Posts review findings as GitHub PR comments | ## Custom Personas @@ -543,8 +558,15 @@ branch_name_strategy: romaji # Branch name generation: 'romaji' (fast) or 'ai' prevent_sleep: false # Prevent macOS idle sleep during execution (caffeinate) notification_sound: true # Enable/disable notification sounds concurrency: 1 # Parallel task count for takt run (1-10, default: 1 = sequential) +task_poll_interval_ms: 500 # Polling interval for new tasks during takt run (100-5000, default: 500) interactive_preview_movements: 3 # Movement previews in interactive mode (0-10, default: 3) +# Per-persona provider overrides (optional) +# Route specific personas to different providers without duplicating pieces +# persona_providers: +# coder: codex # Run coder on Codex +# ai-antipattern-reviewer: claude # Keep reviewers on Claude + # API Key configuration (optional) # Can be overridden by environment variables TAKT_ANTHROPIC_API_KEY / TAKT_OPENAI_API_KEY anthropic_api_key: sk-ant-... # For Claude (Anthropic) diff --git a/docs/README.ja.md b/docs/README.ja.md index 3395595..e492d77 100644 --- a/docs/README.ja.md +++ b/docs/README.ja.md @@ -92,13 +92,25 @@ takt takt hello ``` -**注意:** Issue 参照(`#6`)や `--task` / `--issue` オプションを指定すると、対話モードをスキップして直接タスク実行されます。それ以外の入力(スペースを含む文字列を含む)はすべて対話モードに入ります。 +**注意:** `--task` オプションを指定すると対話モードをスキップして直接タスク実行されます。Issue 参照(`#6`、`--issue`)は対話モードの初期入力として使用されます。 **フロー:** 1. ピース選択 -2. AI との会話でタスク内容を整理 -3. `/go` でタスク指示を確定(`/go 追加の指示` のように指示を追加することも可能)、または `/play <タスク>` で即座に実行 -4. 実行(worktree 作成、ピース実行、PR 作成) +2. 対話モード選択(assistant / persona / quiet / passthrough) +3. AI との会話でタスク内容を整理 +4. `/go` でタスク指示を確定(`/go 追加の指示` のように指示を追加することも可能)、または `/play <タスク>` で即座に実行 +5. 実行(worktree 作成、ピース実行、PR 作成) + +#### 対話モードの種類 + +| モード | 説明 | +|--------|------| +| `assistant` | デフォルト。AI が質問を通じてタスク要件を明確にしてから指示を生成。 | +| `persona` | 最初のムーブメントのペルソナとの会話(ペルソナのシステムプロンプトとツールを使用)。 | +| `quiet` | 質問なしでタスク指示を生成(ベストエフォート)。 | +| `passthrough` | ユーザー入力をそのままタスクテキストとして使用。AI 処理なし。 | + +ピースの `interactive_mode` フィールドでデフォルトモードを設定可能。 #### 実行例 @@ -451,8 +463,10 @@ TAKTには複数のビルトインピースが同梱されています: | `passthrough` | 最小構成。タスクをそのまま coder に渡す薄いラッパー。レビューなし。 | | `compound-eye` | マルチモデルレビュー: Claude と Codex に同じ指示を同時送信し、両方の回答を統合。 | | `review-only` | 変更を加えない読み取り専用のコードレビューピース。 | +| `structural-reform` | プロジェクト全体の構造改革: 段階的なファイル分割を伴う反復的なコードベース再構成。 | +| `unit-test` | ユニットテスト重視ピース: テスト分析 → テスト実装 → レビュー → 修正。 | -**Hybrid Codex バリアント** (`*-hybrid-codex`): 主要ピースごとに、coder エージェントを Codex で実行しレビュアーは Claude を使うハイブリッド構成が用意されています。対象: default, minimal, expert, expert-cqrs, passthrough, review-fix-minimal, coding。 +**ペルソナ別プロバイダー設定:** 設定ファイルの `persona_providers` で、特定のペルソナを異なるプロバイダーにルーティングできます(例: coder は Codex、レビュアーは Claude)。ピースを複製する必要はありません。 `takt switch` でピースを切り替えられます。 @@ -475,6 +489,7 @@ TAKTには複数のビルトインピースが同梱されています: | **research-planner** | リサーチタスクの計画・スコープ定義 | | **research-digger** | 深掘り調査と情報収集 | | **research-supervisor** | リサーチ品質の検証と網羅性の評価 | +| **test-planner** | テスト戦略分析と包括的なテスト計画 | | **pr-commenter** | レビュー結果を GitHub PR にコメントとして投稿 | ## カスタムペルソナ @@ -543,8 +558,15 @@ branch_name_strategy: romaji # ブランチ名生成: 'romaji'(高速)ま prevent_sleep: false # macOS の実行中スリープ防止(caffeinate) notification_sound: true # 通知音の有効/無効 concurrency: 1 # takt run の並列タスク数(1-10、デフォルト: 1 = 逐次実行) +task_poll_interval_ms: 500 # takt run 中の新タスク検出ポーリング間隔(100-5000、デフォルト: 500) interactive_preview_movements: 3 # 対話モードでのムーブメントプレビュー数(0-10、デフォルト: 3) +# ペルソナ別プロバイダー設定(オプション) +# ピースを複製せずに特定のペルソナを異なるプロバイダーにルーティング +# persona_providers: +# coder: codex # coder を Codex で実行 +# ai-antipattern-reviewer: claude # レビュアーは Claude のまま + # API Key 設定(オプション) # 環境変数 TAKT_ANTHROPIC_API_KEY / TAKT_OPENAI_API_KEY で上書き可能 anthropic_api_key: sk-ant-... # Claude (Anthropic) を使う場合 diff --git a/package-lock.json b/package-lock.json index f0ab485..4e2d30a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "takt", - "version": "0.9.0", + "version": "0.10.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "takt", - "version": "0.9.0", + "version": "0.10.0", "license": "MIT", "dependencies": { "@anthropic-ai/claude-agent-sdk": "^0.2.37", diff --git a/package.json b/package.json index 46bd391..5c03c7b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "takt", - "version": "0.9.0", + "version": "0.10.0", "description": "TAKT: Task Agent Koordination Tool - AI Agent Piece Orchestration", "main": "dist/index.js", "types": "dist/index.d.ts",