From 78e8950656a6129baa81e2a6ef4f3848a58130b4 Mon Sep 17 00:00:00 2001 From: nrslib <38722970+nrslib@users.noreply.github.com> Date: Wed, 18 Feb 2026 11:05:24 +0900 Subject: [PATCH 1/2] Release v0.18.1 --- CHANGELOG.md | 7 +++ docs/CHANGELOG.ja.md | 7 +++ package-lock.json | 139 ++++++++++++++++++++++++++++++++++++++++--- package.json | 4 +- 4 files changed, 148 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e60cf0b..4779cc5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,13 @@ 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.18.1] - 2026-02-18 + +### Added + +- Added multi-tenant data isolation section and authorization-resolver consistency code examples to security knowledge +- Added "prefer project scripts" rule to coding policy — detects direct tool invocation (e.g., `npx vitest`) when equivalent npm scripts exist + ## [0.18.0] - 2026-02-17 ### Added diff --git a/docs/CHANGELOG.ja.md b/docs/CHANGELOG.ja.md index 4e63aa4..dda378d 100644 --- a/docs/CHANGELOG.ja.md +++ b/docs/CHANGELOG.ja.md @@ -6,6 +6,13 @@ フォーマットは [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) に基づいています。 +## [0.18.1] - 2026-02-18 + +### Added + +- セキュリティナレッジにマルチテナントデータ分離セクションと認可・リゾルバー整合性のコード例を追加 +- コーディングポリシーに「プロジェクトスクリプト優先」ルールを追加 — npm スクリプトが存在するのに直接ツール呼び出し(例: `npx vitest`)を検出 + ## [0.18.0] - 2026-02-17 ### Added diff --git a/package-lock.json b/package-lock.json index 855e0a1..839a403 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,16 @@ { "name": "takt", - "version": "0.18.0", + "version": "0.18.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "takt", - "version": "0.18.0", + "version": "0.18.1", "license": "MIT", "dependencies": { "@anthropic-ai/claude-agent-sdk": "^0.2.37", - "@openai/codex-sdk": "^0.98.0", + "@openai/codex-sdk": "^0.103.0", "@opencode-ai/sdk": "^1.1.53", "chalk": "^5.3.0", "commander": "^12.1.0", @@ -928,15 +928,140 @@ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "dev": true }, - "node_modules/@openai/codex-sdk": { - "version": "0.98.0", - "resolved": "https://registry.npmjs.org/@openai/codex-sdk/-/codex-sdk-0.98.0.tgz", - "integrity": "sha512-TbPgrBpuSNMJyOXys0HNsh6UoP5VIHu1fVh2KDdACi5XyB0vuPtzBZC+qOsxHz7WXEQPFlomPLyxS6JnE5Okmg==", + "node_modules/@openai/codex": { + "version": "0.103.0", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.103.0.tgz", + "integrity": "sha512-kf7sytd/2mMUKYK8eKgNrwujgNjWrfWFMFfRCOVIFBeByQXmtxe2giVEo44paKDapaS7dQnxqwcUY2OOYrdfWA==", "license": "Apache-2.0", + "bin": { + "codex": "bin/codex.js" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "@openai/codex-darwin-arm64": "npm:@openai/codex@0.103.0-darwin-arm64", + "@openai/codex-darwin-x64": "npm:@openai/codex@0.103.0-darwin-x64", + "@openai/codex-linux-arm64": "npm:@openai/codex@0.103.0-linux-arm64", + "@openai/codex-linux-x64": "npm:@openai/codex@0.103.0-linux-x64", + "@openai/codex-win32-arm64": "npm:@openai/codex@0.103.0-win32-arm64", + "@openai/codex-win32-x64": "npm:@openai/codex@0.103.0-win32-x64" + } + }, + "node_modules/@openai/codex-darwin-arm64": { + "name": "@openai/codex", + "version": "0.103.0-darwin-arm64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.103.0-darwin-arm64.tgz", + "integrity": "sha512-TGMMiB/A8CxG7ghhimEBUCk8nTEXef9cCSh+wUuq3dizAS/PuuHHf6m8LUeZCtkl/XMUxxDqEv3+i/jcB0Jo4A==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@openai/codex-darwin-x64": { + "name": "@openai/codex", + "version": "0.103.0-darwin-x64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.103.0-darwin-x64.tgz", + "integrity": "sha512-1aJnXu6dYsu25fBX+76I150gh1BaKoni9wq6QWEPQ3x+FDqsCgGWG5G6G0v4uVMvTgXB0A6IhwPj88ZYi0BsWw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@openai/codex-linux-arm64": { + "name": "@openai/codex", + "version": "0.103.0-linux-arm64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.103.0-linux-arm64.tgz", + "integrity": "sha512-LdrBhfhV2ZiJBof5h1zxKgmEdt2vm5m8/xEtZShiqSDkgfsTUHNoOAb0WmgITF8+4kyWZtpMjBLw3XjkmNYQJw==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@openai/codex-linux-x64": { + "name": "@openai/codex", + "version": "0.103.0-linux-x64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.103.0-linux-x64.tgz", + "integrity": "sha512-wRjcldkssdCUFQ/YoHRAbgQhszhGyt14Qa/V5ouQp4i3j5dPItVwl/y64u2Fe6fc3OAJkw6W3MJCSO1F323y3g==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@openai/codex-sdk": { + "version": "0.103.0", + "resolved": "https://registry.npmjs.org/@openai/codex-sdk/-/codex-sdk-0.103.0.tgz", + "integrity": "sha512-wMuYUIs5ajZsE2mnacYQKubt61cykMCAyNhPHBINpf9AJkiuvpAHtuz7npXzk9z4wmfqXPMXIQ3x/v1QMmd0cQ==", + "license": "Apache-2.0", + "dependencies": { + "@openai/codex": "0.103.0" + }, "engines": { "node": ">=18" } }, + "node_modules/@openai/codex-win32-arm64": { + "name": "@openai/codex", + "version": "0.103.0-win32-arm64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.103.0-win32-arm64.tgz", + "integrity": "sha512-d5yXLt9m4/3Wf3hiUcygr7voPXgLrvTgbtoYiAqZl/rtoNVRhChjt09EJKRlFQusq3aUGyQduqTLND2uF5dwBA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@openai/codex-win32-x64": { + "name": "@openai/codex", + "version": "0.103.0-win32-x64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.103.0-win32-x64.tgz", + "integrity": "sha512-WtR5y3KeaGjLeYWQnRhMYBptm+eRMvwVlHJpIlFSw7DzD1idvL6ALZ4+kBL1rXBZMJzzpXomax7vMNTlXFjCOg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16" + } + }, "node_modules/@opencode-ai/sdk": { "version": "1.1.53", "resolved": "https://registry.npmjs.org/@opencode-ai/sdk/-/sdk-1.1.53.tgz", diff --git a/package.json b/package.json index dcb67cf..4692a91 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "takt", - "version": "0.18.0", + "version": "0.18.1", "description": "TAKT: TAKT Agent Koordination Topology - AI Agent Piece Orchestration", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -60,7 +60,7 @@ ], "dependencies": { "@anthropic-ai/claude-agent-sdk": "^0.2.37", - "@openai/codex-sdk": "^0.98.0", + "@openai/codex-sdk": "^0.103.0", "@opencode-ai/sdk": "^1.1.53", "chalk": "^5.3.0", "commander": "^12.1.0", From bede582362e68c1881b2d307793b85542ee6dc26 Mon Sep 17 00:00:00 2001 From: nrslib <38722970+nrslib@users.noreply.github.com> Date: Wed, 18 Feb 2026 22:43:14 +0900 Subject: [PATCH 2/2] Release v0.19.0 --- CHANGELOG.md | 28 ++++++++++++++++++++++++++++ docs/CHANGELOG.ja.md | 28 ++++++++++++++++++++++++++++ docs/README.ja.md | 7 ++----- package-lock.json | 4 ++-- package.json | 2 +- 5 files changed, 61 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0be2a54..58c561b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,34 @@ 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.19.0] - 2026-02-18 + +### Added + +- Dedicated retry mode for failed tasks — conversation loop with failure context (error details, failed movement, last message), run session data, and piece structure injected into the system prompt +- Dedicated instruct system prompt for completed/failed task re-instruction — injects task name, content, branch changes, and retry notes directly into the prompt instead of using the generic interactive prompt +- Direct re-execution from `takt list` — "execute" action now runs the task immediately in the existing worktree instead of only requeuing to pending +- `startReExecution` atomic task transition — moves a completed/failed task directly to running status, avoiding the requeue → claim race condition +- Worktree reuse in task execution — reuses existing clone directory when it's still on disk, skipping branch name generation and clone creation +- Task history injection into interactive and summary system prompts — completed/failed/interrupted task summaries are included for context +- Previous run reference support in interactive and instruct system prompts — users can reference logs and reports from prior runs +- `findRunForTask` and `getRunPaths` helpers for automatic run session lookup by task content +- `isStaleRunningTask` process helper extracted from TaskLifecycleService for reuse + +### Changed + +- Interactive module split: `interactive.ts` refactored into `interactive-summary.ts`, `runSelector.ts`, `runSessionReader.ts`, and `selectorUtils.ts` for better cohesion +- `requeueTask` now accepts generic `allowedStatuses` parameter instead of only accepting `failed` tasks +- Instruct/retry actions in `takt list` use the worktree path for conversation and run data lookup instead of the project root +- `save_task` action now requeues the task (saves for later execution), while `execute` action runs immediately + +### Internal + +- Removed `DebugConfig` from models, schemas, and global config — simplified to verbose mode only +- Added stdin simulation test helpers (`stdinSimulator.ts`) for E2E conversation loop testing +- Added comprehensive E2E tests for retry mode, interactive routes, and run session injection +- Added `check:release` npm script for pre-release validation + ## [0.18.2] - 2026-02-18 ### Added diff --git a/docs/CHANGELOG.ja.md b/docs/CHANGELOG.ja.md index 5536fd8..47c7b1e 100644 --- a/docs/CHANGELOG.ja.md +++ b/docs/CHANGELOG.ja.md @@ -6,6 +6,34 @@ フォーマットは [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) に基づいています。 +## [0.19.0] - 2026-02-18 + +### Added + +- 失敗タスク専用のリトライモードを追加 — 失敗コンテキスト(エラー詳細、失敗ムーブメント、最終メッセージ)、実行セッションデータ、ピース構成をシステムプロンプトに注入する対話ループ +- 完了/失敗タスクの再指示用に専用 instruct システムプロンプトを追加 — タスク名・内容・ブランチ変更・リトライノートを汎用の対話プロンプトではなく直接プロンプトに注入 +- `takt list` からの直接再実行 — "execute" アクションで既存ワークツリー内で即座にタスクを実行(pending への再キューだけでなく) +- `startReExecution` によるアトミックなタスクステータス遷移 — completed/failed から直接 running に遷移し、requeue → claim のレースコンディションを回避 +- タスク実行時のワークツリー再利用 — 既存のクローンディレクトリがディスク上に残っていればそのまま再利用(ブランチ名生成やクローン作成をスキップ) +- 対話モードおよびサマリーシステムプロンプトにタスク履歴を注入 — completed/failed/interrupted タスクのサマリーをコンテキストとして提供 +- 対話モードおよび instruct システムプロンプトに前回実行の参照機能 — ログとレポートを参照可能に +- `findRunForTask` / `getRunPaths` ヘルパー — タスク内容による実行セッションの自動検索 +- `isStaleRunningTask` プロセスヘルパーを TaskLifecycleService から抽出し再利用可能に + +### Changed + +- interactive モジュール分割: `interactive.ts` を `interactive-summary.ts`、`runSelector.ts`、`runSessionReader.ts`、`selectorUtils.ts` にリファクタリング +- `requeueTask` が汎用の `allowedStatuses` パラメータを受け取るように変更(`failed` のみだった制約を解除) +- `takt list` の instruct/retry アクションがプロジェクトルートではなくワークツリーパスを使用して対話と実行データの参照を行うように変更 +- `save_task` アクションはタスクを再キュー(後で実行用に保存)、`execute` アクションは即座に実行 + +### Internal + +- `DebugConfig` をモデル・スキーマ・グローバル設定から削除 — verbose モードのみに簡素化 +- stdin シミュレーションテストヘルパー(`stdinSimulator.ts`)を追加し、E2E 対話ループテストを実現 +- リトライモード、対話ルーティング、実行セッション注入の包括的な E2E テストを追加 +- `check:release` npm スクリプトを追加(リリース前検証用) + ## [0.18.2] - 2026-02-18 ### Added diff --git a/docs/README.ja.md b/docs/README.ja.md index a202680..c99c158 100644 --- a/docs/README.ja.md +++ b/docs/README.ja.md @@ -76,10 +76,6 @@ takt --pipeline --task "バグを修正して" --auto-pr ## 使い方 -## 実装メモ - -- failed タスクの retry とセッション再開: [`docs/implements/retry-and-session.ja.md`](./implements/retry-and-session.ja.md) - ### 対話モード AI との会話でタスク内容を詰めてから実行するモード。タスクの要件が曖昧な場合や、AI と相談しながら内容を整理したい場合に便利です。 @@ -453,7 +449,7 @@ movements: | 種類 | 構文 | 説明 | |------|------|------| -| タグベース | `"条件テキスト"` | エージェントが `[STEP:N]` タグを出力し、インデックスでマッチ | +| タグベース | `"条件テキスト"` | エージェントが `[MOVEMENTNAME:N]` タグを出力し、インデックスでマッチ | | AI判定 | `ai("条件テキスト")` | AIが条件をエージェント出力に対して評価 | | 集約 | `all("X")` / `any("X")` | パラレルサブムーブメントの結果を集約 | @@ -945,6 +941,7 @@ export TAKT_OPENCODE_API_KEY=... - [Faceted Prompting](./faceted-prompting.ja.md) - AIプロンプトへの関心の分離(Persona, Policy, Instruction, Knowledge, Output Contract) - [Piece Guide](./pieces.md) - ピースの作成とカスタマイズ - [Agent Guide](./agents.md) - カスタムエージェントの設定 +- [Retry and Session](./implements/retry-and-session.ja.md) - failed タスクの retry とセッション再開 - [Changelog](../CHANGELOG.md) ([日本語](./CHANGELOG.ja.md)) - バージョン履歴 - [Security Policy](../SECURITY.md) - 脆弱性報告 - [ブログ: TAKT - AIエージェントオーケストレーション](https://zenn.dev/nrs/articles/c6842288a526d7) - 設計思想と実践的な使い方ガイド diff --git a/package-lock.json b/package-lock.json index eeb69f0..960e5f9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "takt", - "version": "0.18.2", + "version": "0.19.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "takt", - "version": "0.18.2", + "version": "0.19.0", "license": "MIT", "dependencies": { "@anthropic-ai/claude-agent-sdk": "^0.2.37", diff --git a/package.json b/package.json index 4c02de3..d6d786e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "takt", - "version": "0.18.2", + "version": "0.19.0", "description": "TAKT: TAKT Agent Koordination Topology - AI Agent Piece Orchestration", "main": "dist/index.js", "types": "dist/index.d.ts",