DAY 01작업 1일째
데스크톱 세션에서 압축 버튼을 살렸다
플러그인의 압축 호출이 데스크톱 앱 세션에서 두 번 막혀서, 명령 실행으로 돌리고 압축 직후 게이지도 바로 내려가게 했다.
·2분 읽기
게이지를 누르면 압축되게 하고 싶었다
세션 목록의 컨텍스트 게이지에 압축 기능을 겹쳤다. 게이지에 마우스를 올리면 "▼ 압축"으로 바뀌고, 한 번 누르면 그 세션의 컨텍스트를 압축한다. 되돌릴 수 없는 작업이라 처음에는 두 번 눌러야 압축되게 했는데, 따로 버튼을 두지 않고 게이지가 곧 버튼이 되게 디자인을 합치면서 한 번 누르면 바로 압축되게 바꿨다.
위젯은 압축 요청 파일만 쓰고, 실제 압축은 그 세션의 플러그인이 한다. 세션이 작업 중이면 바로 압축하지 않고 "끝나면 압축" 상태로 기다렸다가 턴이 끝나면 실행한다.
두 번 막혔다
try {
await $.command.run({ command: 'compact' })
} catch (err) {
await failCompact($, describe(err))
return
}
명령이 끝났는지와 압축이 실제로 일어났는지는 따로 확인한다. 압축은 엔진의 session.compact 훅을 지나가므로, 그 훅에서 시작과 끝을 잡아 게이지 아래에 "곧 압축", "압축 중…"을 띄운다. 2분이 지나도 압축으로 이어지지 않으면 실패로 보고 이유를 남긴다.
압축했는데 게이지가 그대로였다
엔진의 컨텍스트 사용량은 다음 모델 응답이 와야 갱신된다. 압축 직후에 사용량을 다시 읽어도 예전 값이 나왔다.
on('session.measure', async ($, e, next) => {
+ if (e.changed.includes('context')) compactedTokens = null
- const now = toUsage(e)
+ const now = withCompacted(toUsage(e))
위젯 버튼으로 한 압축뿐 아니라 직접 입력한 /compact와 자동 압축도 같은 훅을 지나가서, 어느 쪽이든 게이지가 바로 내려간다.
감수한 것
데스크톱 앱 세션에서는 플러그인이 압축을 직접 부를 수 없어서 사람이 명령을 친 것과 같은 길로 돈다. 압축 결과에 압축 후 크기가 비어 있는 경우에는 예전처럼 다음 턴이 돌아야 게이지가 바뀐다.
기록 #03 · 2026.10.03