Hybrid Codex カテゴリ追加、description のYAMLパースエラー修正、サブカテゴリナビゲーション修正
This commit is contained in:
parent
8fab3f0064
commit
6140c6ba02
@ -22,6 +22,20 @@ piece_categories:
|
||||
- expert
|
||||
- expert-cqrs
|
||||
|
||||
"🔀 Hybrid (Codex Coding)":
|
||||
"🚀 Quick Start":
|
||||
pieces:
|
||||
- default-hybrid-codex
|
||||
- passthrough-hybrid-codex
|
||||
- minimal-hybrid-codex
|
||||
"🔍 Review & Fix":
|
||||
pieces:
|
||||
- review-fix-minimal-hybrid-codex
|
||||
"🔧 Expert":
|
||||
pieces:
|
||||
- expert-hybrid-codex
|
||||
- expert-cqrs-hybrid-codex
|
||||
|
||||
"Others":
|
||||
pieces:
|
||||
- research
|
||||
|
||||
@ -20,7 +20,7 @@
|
||||
# - Decisions: 02-coder-decisions.md
|
||||
|
||||
name: default-hybrid-codex
|
||||
description: Standard development piece with planning and specialized reviews (hybrid: coder=codex)
|
||||
description: Standard development piece with planning and specialized reviews
|
||||
|
||||
max_iterations: 30
|
||||
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
# {report_dir} - Report directory name (e.g., "20250126-143052-task-summary")
|
||||
|
||||
name: expert-cqrs-hybrid-codex
|
||||
description: CQRS+ES, Frontend, Security, QA Expert Review (hybrid: coder=codex)
|
||||
description: CQRS+ES, Frontend, Security, QA Expert Review
|
||||
|
||||
max_iterations: 30
|
||||
|
||||
|
||||
@ -31,7 +31,7 @@
|
||||
# - Decisions: 02-coder-decisions.md
|
||||
|
||||
name: expert-hybrid-codex
|
||||
description: Architecture, Frontend, Security, QA Expert Review (hybrid: coder=codex)
|
||||
description: Architecture, Frontend, Security, QA Expert Review
|
||||
|
||||
max_iterations: 30
|
||||
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
# {report_dir} - Report directory name (e.g., "20250126-143052-task-summary")
|
||||
|
||||
name: minimal-hybrid-codex
|
||||
description: Minimal development piece (implement -> parallel review -> fix if needed -> complete) (hybrid: coder=codex)
|
||||
description: Minimal development piece (implement -> parallel review -> fix if needed -> complete)
|
||||
|
||||
max_iterations: 20
|
||||
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
# COMPLETE
|
||||
|
||||
name: passthrough-hybrid-codex
|
||||
description: Single-agent thin wrapper. Pass task directly to coder as-is. (hybrid: coder=codex)
|
||||
description: Single-agent thin wrapper. Pass task directly to coder as-is.
|
||||
|
||||
max_iterations: 10
|
||||
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
# {report_dir} - Report directory name (e.g., "20250126-143052-task-summary")
|
||||
|
||||
name: review-fix-minimal-hybrid-codex
|
||||
description: Review and fix piece for existing code (starts with review, no implementation) (hybrid: coder=codex)
|
||||
description: Review and fix piece for existing code (starts with review, no implementation)
|
||||
|
||||
max_iterations: 20
|
||||
|
||||
|
||||
@ -21,6 +21,21 @@ piece_categories:
|
||||
- expert
|
||||
- expert-cqrs
|
||||
|
||||
"🔀 ハイブリッド (Codex Coding)":
|
||||
"🚀 クイックスタート":
|
||||
pieces:
|
||||
- default-hybrid-codex
|
||||
- passthrough-hybrid-codex
|
||||
- coding-hybrid-codex
|
||||
- minimal-hybrid-codex
|
||||
"🔍 レビュー&修正":
|
||||
pieces:
|
||||
- review-fix-minimal-hybrid-codex
|
||||
"🔧 フルスタック":
|
||||
pieces:
|
||||
- expert-hybrid-codex
|
||||
- expert-cqrs-hybrid-codex
|
||||
|
||||
"その他":
|
||||
pieces:
|
||||
- research
|
||||
|
||||
@ -27,7 +27,7 @@
|
||||
# {report_dir} - Report directory name (e.g., "20250126-143052-task-summary")
|
||||
|
||||
name: coding-hybrid-codex
|
||||
description: Architecture-focused development piece with parallel reviews (architect -> implement -> parallel review -> complete) (hybrid: coder=codex)
|
||||
description: Architecture-focused development piece with parallel reviews (architect -> implement -> parallel review -> complete)
|
||||
|
||||
max_iterations: 20
|
||||
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
# {report_dir} - Report directory name (e.g., "20250126-143052-task-summary")
|
||||
|
||||
name: default-hybrid-codex
|
||||
description: Standard development piece with planning and specialized reviews (hybrid: coder=codex)
|
||||
description: Standard development piece with planning and specialized reviews
|
||||
|
||||
max_iterations: 30
|
||||
|
||||
|
||||
@ -28,7 +28,7 @@
|
||||
# - Decisions: 02-coder-decisions.md
|
||||
|
||||
name: expert-cqrs-hybrid-codex
|
||||
description: CQRS+ES・フロントエンド・セキュリティ・QA専門家レビュー (hybrid: coder=codex)
|
||||
description: CQRS+ES・フロントエンド・セキュリティ・QA専門家レビュー
|
||||
|
||||
max_iterations: 30
|
||||
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
# {report_dir} - レポートディレクトリ名(例: "20250126-143052-task-summary")
|
||||
|
||||
name: expert-hybrid-codex
|
||||
description: アーキテクチャ・フロントエンド・セキュリティ・QA専門家レビュー (hybrid: coder=codex)
|
||||
description: アーキテクチャ・フロントエンド・セキュリティ・QA専門家レビュー
|
||||
|
||||
max_iterations: 30
|
||||
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
# {report_dir} - Report directory name (e.g., "20250126-143052-task-summary")
|
||||
|
||||
name: minimal-hybrid-codex
|
||||
description: Minimal development piece (implement -> parallel review -> fix if needed -> complete) (hybrid: coder=codex)
|
||||
description: Minimal development piece (implement -> parallel review -> fix if needed -> complete)
|
||||
|
||||
max_iterations: 20
|
||||
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
# COMPLETE
|
||||
|
||||
name: passthrough-hybrid-codex
|
||||
description: Single-agent thin wrapper. Pass task directly to coder as-is. (hybrid: coder=codex)
|
||||
description: Single-agent thin wrapper. Pass task directly to coder as-is.
|
||||
|
||||
max_iterations: 10
|
||||
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
# {report_dir} - Report directory name (e.g., "20250126-143052-task-summary")
|
||||
|
||||
name: review-fix-minimal-hybrid-codex
|
||||
description: 既存コードのレビューと修正ピース(レビュー開始、実装なし) (hybrid: coder=codex)
|
||||
description: 既存コードのレビューと修正ピース(レビュー開始、実装なし)
|
||||
|
||||
max_iterations: 20
|
||||
|
||||
|
||||
@ -162,4 +162,72 @@ describe('selectPieceFromCategorizedPieces', () => {
|
||||
const selected = await selectPieceFromCategorizedPieces(categorized, '');
|
||||
expect(selected).toBe('my-piece');
|
||||
});
|
||||
|
||||
it('should navigate into subcategories recursively', async () => {
|
||||
const categorized: CategorizedPieces = {
|
||||
categories: [
|
||||
{
|
||||
name: 'Hybrid',
|
||||
pieces: [],
|
||||
children: [
|
||||
{ name: 'Quick Start', pieces: ['hybrid-default'], children: [] },
|
||||
{ name: 'Full Stack', pieces: ['hybrid-expert'], children: [] },
|
||||
],
|
||||
},
|
||||
],
|
||||
allPieces: createPieceMap([
|
||||
{ name: 'hybrid-default', source: 'builtin' },
|
||||
{ name: 'hybrid-expert', source: 'builtin' },
|
||||
]),
|
||||
missingPieces: [],
|
||||
};
|
||||
|
||||
// Select Hybrid category → Quick Start subcategory → piece
|
||||
selectOptionMock
|
||||
.mockResolvedValueOnce('__custom_category__:Hybrid')
|
||||
.mockResolvedValueOnce('__category__:Quick Start')
|
||||
.mockResolvedValueOnce('hybrid-default');
|
||||
|
||||
const selected = await selectPieceFromCategorizedPieces(categorized, '');
|
||||
expect(selected).toBe('hybrid-default');
|
||||
expect(selectOptionMock).toHaveBeenCalledTimes(3);
|
||||
});
|
||||
|
||||
it('should show subcategories and pieces at the same level within a category', async () => {
|
||||
const categorized: CategorizedPieces = {
|
||||
categories: [
|
||||
{
|
||||
name: 'Dev',
|
||||
pieces: ['base-piece'],
|
||||
children: [
|
||||
{ name: 'Advanced', pieces: ['adv-piece'], children: [] },
|
||||
],
|
||||
},
|
||||
],
|
||||
allPieces: createPieceMap([
|
||||
{ name: 'base-piece', source: 'user' },
|
||||
{ name: 'adv-piece', source: 'user' },
|
||||
]),
|
||||
missingPieces: [],
|
||||
};
|
||||
|
||||
// Select Dev category, then directly select the root-level piece
|
||||
selectOptionMock
|
||||
.mockResolvedValueOnce('__custom_category__:Dev')
|
||||
.mockResolvedValueOnce('base-piece');
|
||||
|
||||
const selected = await selectPieceFromCategorizedPieces(categorized, '');
|
||||
expect(selected).toBe('base-piece');
|
||||
|
||||
// Second call should show Advanced subcategory AND base-piece at same level
|
||||
const secondCallOptions = selectOptionMock.mock.calls[1]![1] as { label: string; value: string }[];
|
||||
const labels = secondCallOptions.map((o) => o.label);
|
||||
|
||||
// Should contain the subcategory folder
|
||||
expect(labels.some((l) => l.includes('Advanced'))).toBe(true);
|
||||
// Should contain the piece
|
||||
expect(labels.some((l) => l.includes('base-piece'))).toBe(true);
|
||||
// Should NOT contain the parent category again
|
||||
expect(labels.some((l) => l.includes('Dev'))).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
@ -377,7 +377,7 @@ export async function selectPieceFromCategorizedPieces(
|
||||
|
||||
if (selection.type === 'category') {
|
||||
const piece = await selectPieceFromCategoryTree(
|
||||
[selection.node],
|
||||
selection.node.children,
|
||||
currentPiece,
|
||||
true,
|
||||
selection.node.pieces,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user