앱 만들기
Tiffy 앱이 무엇인지, 누구를 위한 것인지, 지금 SDK로 무엇을 할 수 있는지.
Tiffy 앱은 매니페스트 하나와 도구·트리거·어댑터·화면 중 일부를 묶은 패키지입니다. 비서가 대신 일을 하게 하려는 개발자, 특히 코딩 에이전트에게 작업을 맡기려는 개발자를 위한 문서입니다.
앱이 제공하는 것
앱은 아래 네 가지 제공 항목(capability)의 조합입니다.
| 종류 | 무엇을 하는가 | 예 |
|---|---|---|
| tool | 에이전트가 부르는 함수. 입력과 출력은 JSON 스키마로 정의 | mail.draftReply, calendar.listEvents |
| trigger | 앱이 주기적으로 이벤트를 만들어 파이프라인에 넣는 폴링 | 메일 도착, 캘린더 알림 |
| adapter | 채널 연동. 상주 프로세스로 돈다 | 텔레그램, 슬랙 |
| surface | 설정 폼과 홈 카드. 선언형 JSON만 | 계정 연결 폼, 오늘 일정 카드 |
메모리(기억 저장소)는 별도 capability가 아니라 노트 도구(notes.*)로 표현됩니다.
지켜야 할 원칙
- 앱 코드는
@tiffy/app-sdk의ctx만 씁니다.@tiffy/core,@tiffy/db, 파일 시스템, 환경 변수에는 직접 닿지 않습니다. - 네트워크는
ctx.fetch로만 나가고, 호스트는 매니페스트의scopes에 미리 선언합니다. - 매니페스트에 없는 권한은 실행 중에 쓸 수 없습니다. 정적 검사는 개발자를 돕는 보조일 뿐이고, 강제는 호스트가 실행 중에 합니다.
- 되돌릴 수 없는 도구(보내기, 결제, 삭제)는 승인이 필요합니다.
지금 상태
워커에 앱을 실제로 실행하는 런타임이 생겼지만, 지금 실행할 수 있는 앱은 이 저장소에 함께 들어 있는 내장(builtIn) 앱뿐입니다. 서드파티 코드 실행, 마켓플레이스 제출과 검수, OAuth 연동은 아직 없습니다.
준비된 것
@tiffy/app-sdk: 매니페스트 스키마,defineApp,ctx타입, RPC 프로토콜 타입, 테스트용 모의ctx.tiffy-appCLI:init으로 앱 폴더를 만들고check로 매니페스트와 코드를 검증합니다.- 워커의 앱 호스트: 앱의
src/index.ts를 tsx 자식 프로세스로 띄우고 프로토콜 v1로 줄 단위 JSON을 주고받습니다.ctx.fetch는 호스트가 매니페스트의network:scope로 허용 호스트를 검사하며 직접 나가고(리다이렉트마다 재검사, 사설·루프백·메타데이터 주소 거부), 나머지ctx호출은 플랫폼으로 대행됩니다. 도구는 60초, 트리거는 120초가 지나면 강제 종료됩니다. - 트리거 스케줄러: 60초마다 due한 트리거를 찾아 실행하고, 연속 5회 실패하면 설치 상태를
error로 내립니다. - 앱 화면(
/assist/apps,/assist/apps/[appId]): 설치 목록과 상태 배지, 켜고 끄기, 권한을 사람 말로 보여 주는 목록,surfaces/settings.json기반의 설정 폼. - 첫 내장 앱
tiffy.notes: 사서 프로필이 쓰는 노트 검색·읽기·만들기·고치기·덧붙이기 도구. - 영역이 생기면 내장 앱을 자동으로 설치하는 절차.
아직 없는 것
- 마켓플레이스 제출 API와
tiffy app publish명령, 샌드박스 실행, 검수 큐. - OAuth 연동과
ctx.oauth.token,ctx.model.complete, 다른 앱 도구를 부르는ctx.tools.call,ctx.files.*의 실제 구현. - 내장이 아닌(서드파티) 앱의 실행과 삭제(uninstall).
- 홈 카드 데이터를 채우는 훅을 주기적으로 불러 주는 스케줄러.