fix: workshop_project set_description — 파라미터 이름 혼동 실측 수정
모델이 액션 이름을 그대로 파라미터 이름으로 씀(set_description=텍스트) → description undefined → 기본 '' 로 개요가 조용히 지워짐(테스트 프로젝트 실측, ws_proj_h70rk5i5). - 별칭 수용: description ?? set_description ?? overview - 어떤 파라미터도 안 오면 ''로 덮지 말고 에러로 끝냄(덮어쓰기 방지) - 스키마 설명에서 "(set_description 필수)"가 파라미터 이름처럼 읽히는 문제 정정 — "(set_description 액션에서 필수 — 파라미터 이름은 description이다)" - 지워진 테스트 프로젝트 개요는 세션 이력에서 복구해 백필 Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -1162,9 +1162,9 @@ export function createBuildTools(isOrchestrationSkillEnabled: () => boolean) {
|
||||
parameters: {
|
||||
type: 'object', required: ['action'],
|
||||
properties: {
|
||||
action: { type: 'string', enum: ['list_projects', 'create_project', 'set_active_project', 'get', 'set_description', 'add_part', 'update_part', 'delete_part', 'add_task', 'set_task_done', 'add_phase', 'add_note', 'add_link', 'delete_link'], description: 'list_projects: 전체 프로젝트 목록. create_project: 새 프로젝트 생성(+활성화). set_active_project: 대시보드에서 볼 프로젝트 전환. get: 프로젝트 조회(개요+예산 요약+부품+작업+메모). set_description: 프로젝트 서술형 개요 설정(대시보드 개요 탭에 반영). add_part/update_part/delete_part: 부품 추가/수정/삭제. add_task: 단계에 작업 추가. set_task_done: 작업 완료/미완료. add_phase: 새 단계 추가. add_note: 메모 한 줄 추가. add_link/delete_link: 부품에 참고링크(구매처/대체품/업그레이드/레포 등) 추가/삭제.' },
|
||||
action: { type: 'string', enum: ['list_projects', 'create_project', 'set_active_project', 'get', 'set_description', 'add_part', 'update_part', 'delete_part', 'add_task', 'set_task_done', 'add_phase', 'add_note', 'add_link', 'delete_link'], description: 'list_projects: 전체 프로젝트 목록. create_project: 새 프로젝트 생성(+활성화). set_active_project: 대시보드에서 볼 프로젝트 전환. get: 프로젝트 조회(개요+예산 요약+부품+작업+메모). set_description: 프로젝트 서술형 개요 설정(텍스트는 description 파라미터로 전달). add_part/update_part/delete_part: 부품 추가/수정/삭제. add_task: 단계에 작업 추가. set_task_done: 작업 완료/미완료. add_phase: 새 단계 추가. add_note: 메모 한 줄 추가. add_link/delete_link: 부품에 참고링크(구매처/대체품/업그레이드/레포 등) 추가/삭제.' },
|
||||
project_name: { type: 'string', description: '(create_project/set_active_project 필수, 그 외 모든 액션 선택) 대상 프로젝트 이름(일부만 일치해도 됨). 생략하면 현재 활성 프로젝트를 대상으로 함.' },
|
||||
description: { type: 'string', description: '(set_description 필수) 프로젝트 개요 문단 — 무엇을 만드는지/목표/구성 등을 자유 서술. 대시보드의 "개요" 탭에 표시된다.' },
|
||||
description: { type: 'string', description: '(set_description 액션에서 필수 — 파라미터 이름은 description이다) 프로젝트 개요 문단 — 무엇을 만드는지/목표/구성 등을 자유 서술. 대시보드의 "개요" 탭에 표시된다.' },
|
||||
part_name: { type: 'string', description: '(update_part/delete_part/add_link/delete_link 필수) 대상 부품 이름(일부만 일치해도 됨, 예: "메카넘휠")' },
|
||||
name: { type: 'string', description: '(add_part 필수, update_part 선택) 부품 이름' },
|
||||
qty: { type: 'number', description: '(add_part/update_part 선택) 수량. 기본 1' },
|
||||
|
||||
@@ -82,10 +82,10 @@ export const workshopProjectTool = {
|
||||
action: {
|
||||
type: 'string',
|
||||
enum: ['list_projects', 'create_project', 'set_active_project', 'get', 'set_description', 'add_part', 'update_part', 'delete_part', 'add_task', 'set_task_done', 'add_phase', 'add_note', 'add_link', 'delete_link'],
|
||||
description: 'list_projects: 전체 프로젝트 목록. create_project: 새 프로젝트 생성(+활성화). set_active_project: 대시보드에서 볼 프로젝트 전환. get: 프로젝트 조회(개요+예산 요약+부품+작업+메모). set_description: 프로젝트 서술형 개요 설정(대시보드 개요 탭에 반영). add_part/update_part/delete_part: 부품 추가/수정/삭제. add_task: 단계에 작업 추가. set_task_done: 작업 완료/미완료. add_phase: 새 단계 추가. add_note: 메모 한 줄 추가. add_link/delete_link: 부품에 참고링크(구매처/대체품/업그레이드/레포 등) 추가/삭제.',
|
||||
description: 'list_projects: 전체 프로젝트 목록. create_project: 새 프로젝트 생성(+활성화). set_active_project: 대시보드에서 볼 프로젝트 전환. get: 프로젝트 조회(개요+예산 요약+부품+작업+메모). set_description: 프로젝트 서술형 개요 설정(텍스트는 description 파라미터로 전달). add_part/update_part/delete_part: 부품 추가/수정/삭제. add_task: 단계에 작업 추가. set_task_done: 작업 완료/미완료. add_phase: 새 단계 추가. add_note: 메모 한 줄 추가. add_link/delete_link: 부품에 참고링크(구매처/대체품/업그레이드/레포 등) 추가/삭제.',
|
||||
},
|
||||
project_name: { type: 'string', description: '(create_project/set_active_project 필수, 그 외 모든 액션 선택) 대상 프로젝트 이름(일부만 일치해도 됨). 생략하면 현재 활성 프로젝트를 대상으로 함.' },
|
||||
description: { type: 'string', description: '(set_description 필수) 프로젝트 개요 문단 — 무엇을 만드는지/목표/구성 등을 자유 서술. 대시보드의 "개요" 탭에 표시된다.' },
|
||||
description: { type: 'string', description: '(set_description 액션에서 필수 — 파라미터 이름은 description이다) 프로젝트 개요 문단 — 무엇을 만드는지/목표/구성 등을 자유 서술. 대시보드의 "개요" 탭에 표시된다.' },
|
||||
part_name: { type: 'string', description: '(update_part/delete_part/add_link/delete_link 필수) 대상 부품 이름(일부만 일치해도 됨, 예: "메카넘휠")' },
|
||||
name: { type: 'string', description: '(add_part 필수, update_part 선택) 부품 이름' },
|
||||
qty: { type: 'number', description: '(add_part/update_part 선택) 수량. 기본 1' },
|
||||
@@ -142,7 +142,14 @@ export const workshopProjectTool = {
|
||||
}
|
||||
|
||||
if (action === 'set_description') {
|
||||
const desc = String(args?.description || '').trim();
|
||||
// 모델이 action 이름을 그대로 파라미터 이름으로 쓰는 실측 사례(ws_proj_h70rk5i5,
|
||||
// 09-23)가 있어 별칭도 받는다. 어떤 파라미터도 안 왔으면 에러로 끝낸다 — 기본값 ''
|
||||
// 로 덮으면 턴 하나 날린 개요가 조용히 지워진다.
|
||||
const descArg = args?.description ?? args?.set_description ?? args?.overview;
|
||||
if (descArg == null) {
|
||||
return { success: false, error: 'description 파라미터에 개요 문단을 넣어 호출할 것. (주의: 파라미터 이름은 set_description이 아니라 description이다)' };
|
||||
}
|
||||
const desc = String(descArg).trim();
|
||||
project.description = desc;
|
||||
saveWorkshop(workspaceRoot, data);
|
||||
return { success: true, stdout: `[${project.name}] 개요 ${desc ? '업데이트됨' : '비움'} — 대시보드 개요 탭에 반영됨` };
|
||||
|
||||
Reference in New Issue
Block a user