diff --git a/src/ai/agent-code-references.spec.ts b/src/ai/agent-code-references.spec.ts index be1542b..dad22b9 100644 --- a/src/ai/agent-code-references.spec.ts +++ b/src/ai/agent-code-references.spec.ts @@ -18,7 +18,8 @@ describe('Agent code references', () => { expect(grounded.changes).toEqual([]); expect(grounded.commands).toEqual([]); expect(s.systemPrompt()).toContain('codeReferences'); - expect(s.systemPrompt()).toContain('사용자가 승인하기 전에는 파일을 열지 않는다'); + expect(s.systemPrompt()).toContain('사용자가 누르기 전에는 파일을 열지 않는다'); + expect(s.systemPrompt()).toContain('코드 위치 보기에는 취소 버튼이 없으며'); }); it('can ground references in supplied full files without requiring a new read', () => { diff --git a/src/ai/agent.service.ts b/src/ai/agent.service.ts index 28b2c26..9309840 100644 --- a/src/ai/agent.service.ts +++ b/src/ai/agent.service.ts @@ -1063,7 +1063,7 @@ export class AgentService { '런타임 로그가 제공되면 오류 원인을 로그의 실제 문구와 관련 소스에 근거해 설명한다. 로그가 비어 있거나 제공되지 않았으면 로그를 확인했다고 말하지 않는다.', '제공되지 않은 파일 내용은 추측하지 말고 필요한 최소 변경만 제안한다.', '학생이 정보 확인이나 설명만 요청하면 제공된 입력만 근거로 답하고 changes는 빈 배열, createModule은 null로 반환한다.', - '학생이 구현 위치, 코드가 있는 파일이나 줄을 물으면 실제 파일을 files.read로 조회한 뒤 codeReferences:[{id:"code-1",moduleName:"정확한 모듈명",path:"모듈 루트 기준 상대경로",startLine:1,endLine:3,reason:"관련 코드 설명"}]를 반환해 편집기에서 볼 수 있도록 제안한다. 앱은 취소/코드에서 보기 버튼을 표시하며 사용자가 승인하기 전에는 파일을 열지 않는다. 위치 안내만으로 코드 수정·명령 실행을 제안하지 않고 actionPlan은 비운다.', + '학생이 구현 위치, 코드가 있는 파일이나 줄을 물으면 실제 파일을 files.read로 조회한 뒤 codeReferences:[{id:"code-1",moduleName:"정확한 모듈명",path:"모듈 루트 기준 상대경로",startLine:1,endLine:3,reason:"관련 코드 설명"}]를 반환해 편집기에서 볼 수 있도록 제안한다. 앱은 코드에서 보기 버튼을 표시하며 사용자가 누르기 전에는 파일을 열지 않는다. 코드 위치 보기에는 취소 버튼이 없으며 위치 안내만으로 코드 수정·명령 실행을 제안하지 않고 actionPlan은 비운다.', 'codeReferences는 실제로 읽은 코드 범위에 한해 최대 5개, 항목별 200줄 이하로 작성한다. 줄 번호는 파일 전체 기준 1부터 시작하며 부분 조회의 startLine을 반영한다. 아직 파일을 읽지 않았으면 toolRequests만 먼저 반환하고 codeReferences는 비운다. 경로나 줄 번호, snippet, expectedHash를 추측하지 않는다. snippet과 expectedHash는 서버가 조회 결과로 채운다.', '작업이 여러 단계라면 actionPlan에 학생이 이해할 수 있는 짧은 단계 목록을 순서대로 작성한다.', '빌드, 테스트, 진단 명령 실행이 필요하면 commands에 현재 단계에서 실행할 다음 승인 명령만 넣는다. 명령은 해당 모듈 루트에서 실행된다.', diff --git a/src/ai/docs/lms-user-guide.ko.md b/src/ai/docs/lms-user-guide.ko.md index b0033fc..d02ab11 100644 --- a/src/ai/docs/lms-user-guide.ko.md +++ b/src/ai/docs/lms-user-guide.ko.md @@ -324,7 +324,7 @@ AI·에이전트 답변은 제목, 번호·불릿 목록, 표, 코드 블록으 ### 14.7 코드 위치 열기 1. 에이전트에 "최대 속도 설정이 코드 어디에 있어?"처럼 구현 위치를 질문한다. 에이전트는 실제로 조회한 파일 경로와 관련 줄 범위를 답변에 표시할 수 있다. -2. 답변의 파일 경로, 줄 번호와 설명을 확인하고 오른쪽 `코드에서 보기`(View in editor)를 누르면 코드 편집 화면에서 해당 모듈과 파일이 열리고 관련 줄이 화면 중앙에 강조된다. 왼쪽 `취소`를 누르면 열지 않는다. +2. 답변의 파일 경로, 줄 번호와 설명을 확인하고 오른쪽 `코드에서 보기`(View in editor)를 누르면 코드 편집 화면에서 해당 모듈과 파일이 열리고 관련 줄이 화면 중앙에 강조된다. 버튼을 누르지 않으면 파일은 열리지 않으며 코드 위치 보기에는 별도 취소 버튼이 없다. 3. 파일을 여는 동작은 파일 수정, 저장, 빌드, 모듈 실행을 수행하지 않는다. 저장하지 않은 편집 내용도 유지한다. 4. 편집 때문에 줄이 이동한 경우 확인했던 코드가 한 곳에 정확히 남아 있어야 새 위치를 강조할 수 있다. 코드가 없어졌거나 여러 위치에 있어 특정할 수 없으면 다시 분석을 요청한다. 이전 대화의 파일이 삭제되었거나 모듈이 제거된 경우에도 새 분석이 필요하다.