viruagent-cli 0.5.1 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/package.json +1 -1
  2. package/skills/persona-blogger/SKILL.md +47 -0
  3. package/skills/persona-influencer-manager/SKILL.md +40 -0
  4. package/skills/persona-sns-marketer/SKILL.md +38 -0
  5. package/skills/recipe-blog-publish/SKILL.md +59 -0
  6. package/skills/recipe-cross-post/SKILL.md +41 -0
  7. package/skills/recipe-daily-engagement/SKILL.md +57 -0
  8. package/skills/recipe-engage-feed/SKILL.md +56 -0
  9. package/skills/recipe-grow-followers/SKILL.md +52 -0
  10. package/skills/va-insta/SKILL.md +64 -0
  11. package/skills/va-insta-comment/SKILL.md +59 -0
  12. package/skills/va-insta-dm/SKILL.md +51 -0
  13. package/skills/va-insta-feed/SKILL.md +72 -0
  14. package/skills/va-insta-follow/SKILL.md +42 -0
  15. package/skills/va-insta-like/SKILL.md +55 -0
  16. package/skills/va-insta-login/SKILL.md +57 -0
  17. package/skills/va-naver/SKILL.md +43 -0
  18. package/skills/va-naver-categories/SKILL.md +25 -0
  19. package/skills/va-naver-draft/SKILL.md +33 -0
  20. package/skills/va-naver-login/SKILL.md +58 -0
  21. package/skills/va-naver-posts/SKILL.md +38 -0
  22. package/skills/va-naver-publish/SKILL.md +337 -0
  23. package/skills/va-shared/SKILL.md +170 -0
  24. package/skills/va-tistory/SKILL.md +42 -0
  25. package/skills/va-tistory-categories/SKILL.md +37 -0
  26. package/skills/va-tistory-draft/SKILL.md +31 -0
  27. package/skills/va-tistory-login/SKILL.md +54 -0
  28. package/skills/va-tistory-posts/SKILL.md +38 -0
  29. package/skills/va-tistory-publish/SKILL.md +466 -0
  30. package/src/providers/chromeManager.js +186 -0
  31. package/src/providers/insta/index.js +31 -10
  32. package/src/providers/insta/session.js +4 -7
  33. package/src/providers/naver/auth.js +37 -23
  34. package/src/providers/naver/index.js +6 -10
  35. package/src/providers/naver/session.js +22 -28
  36. package/src/providers/tistory/auth.js +129 -105
  37. package/src/providers/tistory/index.js +6 -6
  38. package/src/providers/tistory/session.js +24 -24
  39. package/src/runner.js +28 -17
  40. package/src/services/providerManager.js +7 -5
  41. package/src/storage/sessionStore.js +18 -9
  42. package/skills/viruagent-insta.md +0 -163
  43. package/skills/viruagent-naver.md +0 -122
  44. package/skills/viruagent-tistory.md +0 -117
  45. package/skills/viruagent.md +0 -77
@@ -0,0 +1,170 @@
1
+ ---
2
+ name: viruagent
3
+ version: 1.0.0
4
+ description: "viruagent-cli — 블로그/SNS 자동화 에이전트. 플랫폼 라우팅, 글쓰기 규칙, 에러 처리."
5
+ triggers:
6
+ - viruagent
7
+ - 블로그
8
+ - blog
9
+ - 인스타
10
+ - instagram
11
+ - 티스토리
12
+ - 네이버
13
+ - 좋아요
14
+ - 댓글
15
+ - 팔로우
16
+ metadata:
17
+ category: "router"
18
+ requires:
19
+ bins: ["viruagent-cli"]
20
+ ---
21
+
22
+ # viruagent — 블로그/SNS 자동화 에이전트
23
+
24
+ viruagent-cli를 사용하는 블로그/SNS 자동화 에이전트입니다.
25
+ 사용자 요청에 따라 적절한 스킬 파일을 읽고 실행합니다.
26
+
27
+ ## Platform Router
28
+
29
+ | 트리거 | 스킬 파일 |
30
+ |--------|-----------|
31
+ | 티스토리, tistory | `va-tistory/SKILL.md` |
32
+ | 네이버, naver | `va-naver/SKILL.md` |
33
+ | 인스타, instagram, 좋아요, 댓글, 팔로우 | `va-insta/SKILL.md` |
34
+ | 블로그 써줘 (플랫폼 미지정) | 사용자에게 플랫폼 질문 |
35
+ | 블로거 역할 | `persona-blogger/SKILL.md` |
36
+ | 인플루언서 관리 | `persona-influencer-manager/SKILL.md` |
37
+ | SNS 마케팅 | `persona-sns-marketer/SKILL.md` |
38
+
39
+ ## 스킬 파일 위치
40
+
41
+ 모든 하위 스킬은 viruagent-cli 패키지 내 `skills/` 디렉토리에 있습니다:
42
+
43
+ ```
44
+ SKILLS_DIR: <viruagent-cli 설치 경로>/skills/
45
+ ```
46
+
47
+ 사용자의 요청을 분석한 뒤, 해당 스킬 파일을 Read 도구로 읽어서 지침을 따르세요.
48
+
49
+ ### 단일 명령 스킬
50
+
51
+ | 스킬 | 파일 | 설명 |
52
+ |------|------|------|
53
+ | va-tistory | `va-tistory/SKILL.md` | Tistory 개요 |
54
+ | va-tistory-login | `va-tistory-login/SKILL.md` | 로그인 (2FA) |
55
+ | va-tistory-publish | `va-tistory-publish/SKILL.md` | 글 발행 |
56
+ | va-tistory-draft | `va-tistory-draft/SKILL.md` | 임시저장 |
57
+ | va-tistory-categories | `va-tistory-categories/SKILL.md` | 카테고리 조회 |
58
+ | va-tistory-posts | `va-tistory-posts/SKILL.md` | 글 목록/읽기 |
59
+ | va-naver | `va-naver/SKILL.md` | Naver 개요 |
60
+ | va-naver-login | `va-naver-login/SKILL.md` | 로그인 (manual) |
61
+ | va-naver-publish | `va-naver-publish/SKILL.md` | 글 발행 |
62
+ | va-naver-draft | `va-naver-draft/SKILL.md` | 임시저장 |
63
+ | va-naver-categories | `va-naver-categories/SKILL.md` | 카테고리 조회 |
64
+ | va-naver-posts | `va-naver-posts/SKILL.md` | 글 목록/읽기 |
65
+ | va-insta | `va-insta/SKILL.md` | Instagram 개요 + 레이트리밋 |
66
+ | va-insta-login | `va-insta-login/SKILL.md` | 로그인 + 챌린지 |
67
+ | va-insta-like | `va-insta-like/SKILL.md` | 좋아요 |
68
+ | va-insta-comment | `va-insta-comment/SKILL.md` | 댓글 |
69
+ | va-insta-follow | `va-insta-follow/SKILL.md` | 팔로우/언팔 |
70
+ | va-insta-dm | `va-insta-dm/SKILL.md` | DM |
71
+ | va-insta-feed | `va-insta-feed/SKILL.md` | 피드/프로필/분석 |
72
+
73
+ ### 페르소나 스킬
74
+
75
+ | 스킬 | 파일 | 설명 |
76
+ |------|------|------|
77
+ | persona-blogger | `persona-blogger/SKILL.md` | 블로거 역할 |
78
+ | persona-influencer-manager | `persona-influencer-manager/SKILL.md` | 인플루언서 매니저 |
79
+ | persona-sns-marketer | `persona-sns-marketer/SKILL.md` | SNS 마케터 |
80
+
81
+ ### 레시피 스킬
82
+
83
+ | 스킬 | 파일 | 설명 |
84
+ |------|------|------|
85
+ | recipe-blog-publish | `recipe-blog-publish/SKILL.md` | 블로그 발행 워크플로우 |
86
+ | recipe-cross-post | `recipe-cross-post/SKILL.md` | 블로그 → 인스타 홍보 |
87
+ | recipe-engage-feed | `recipe-engage-feed/SKILL.md` | 피드 인게이지먼트 |
88
+ | recipe-daily-engagement | `recipe-daily-engagement/SKILL.md` | 일일 루틴 |
89
+ | recipe-grow-followers | `recipe-grow-followers/SKILL.md` | 팔로워 성장 |
90
+
91
+ ## Quick Reference
92
+
93
+ ```bash
94
+ npx viruagent-cli list-providers
95
+ npx viruagent-cli --spec
96
+ npx viruagent-cli --spec <command>
97
+ ```
98
+
99
+ 모든 응답은 JSON: `{ "ok": true, "data": {...} }` 성공, `{ "ok": false, "error": "...", "message": "...", "hint": "..." }` 실패.
100
+
101
+ ## 글쓰기 규칙 (블로그 공통)
102
+
103
+ ### 포맷 선택 (글 성격에 따라 결정)
104
+ | 포맷 | 용도 | 체류시간 | AI탐지 위험 |
105
+ |------|------|---------|-----------|
106
+ | **story** | 경험 후기, 사례, 인사이트 | 최고 | 낮음 |
107
+ | **howto** | 설치법, 단계별 가이드 | 높음 | 중간 |
108
+ | **list** | 추천 목록, 비교 정리 | 낮음 | 높음 |
109
+ | **review** | 심층 분석, 솔직 리뷰 | 높음 | 낮음 |
110
+ | **qa** | 개념 설명, FAQ | 중간 | 중간 |
111
+
112
+ **기본 추천: story형** — 체류시간 최고, AI 탐지 회피 최적.
113
+
114
+ ### 제목
115
+ - **네이버**: 15~25자, 핵심 키워드 앞배치
116
+ - **티스토리**: 25~35자, 숫자/연도 포함 시 CTR +23%
117
+ - 키워드는 제목 앞쪽에 — 뒤에 오면 검색 가중치 낮음
118
+
119
+ ### 분량
120
+ - **네이버**: 1,500~2,500자 (경쟁 키워드 2,500~3,500자)
121
+ - **티스토리**: 3,000~5,000자 (구글 상위 10위 평균 5,000자)
122
+
123
+ ### 서론 (첫 3문장이 체류시간 결정)
124
+ - **공감형**: 독자 상황 공감 → 반전 → 이 글의 약속
125
+ - **손실 회피형**: 모르면 손해 + 수치 → 해결책 예고
126
+ - **질문형**: 검색 쿼리 그대로 → 데이터 → 내용 예고
127
+ - 도입부에 `<blockquote>`로 임팩트 한 줄 배치
128
+
129
+ ### 본문 구조
130
+ - **단락**: 모바일 기준 2~3문장 (최대 4문장). 공백 줄로 호흡 조절
131
+ - **소제목 간격**: 네이버 300~400자마다 `<h2>`, 티스토리 600~1,000자마다 `<h3>`
132
+ - **티스토리 H태그**: `<h2>` → `<h3>` → `<h4>` 계층 준수. 본문에 `<h1>` 사용 금지
133
+ - **네이버**: `<h2>`만 사용 (h3 불필요)
134
+ - **목차**: 티스토리는 3개 이상 섹션이면 앵커 링크 목차 필수
135
+ - **문장 리듬**: 짧은 문장과 긴 문장을 의도적으로 섞기 (균일하면 AI 탐지)
136
+
137
+ ### 이미지
138
+ - **네이버**: 소제목마다 1장, 총 5~10장 권장
139
+ - **티스토리**: 1~3장 + alt 태그 `핵심키워드 + 설명` 형식 필수
140
+ - 이미지는 설명 단락 **위**에 배치 — 시각 → 텍스트 순서
141
+
142
+ ### AI 탐지 회피 필수 규칙
143
+ - 직접 경험 기반 문장 단락마다 1개 이상
144
+ - "~에 대해 알아보겠습니다", "정리하자면", "마무리로" 금지
145
+ - 균일한 3단락 공식(도입→근거→요약) 반복 금지
146
+ - 모든 섹션을 같은 길이로 쓰지 말 것
147
+
148
+ ### 공통
149
+ - **강조**: `<strong>`으로 핵심 용어 (섹션당 2~3개 max)
150
+ - **근거**: 섹션마다 데이터, 수치, 실제 사례 중 하나 포함
151
+ - **내부 링크**: 티스토리는 관련 글 2~4개 연결 (체류시간 35% 연장)
152
+ - **마무리**: 구체적 행동 제안 + 댓글/공유 유도
153
+ - **태그**: 정확히 5개, 쉼표 구분, 글 언어와 일치
154
+ - **SEO**: 제목, 첫 단락, 소제목 최소 1곳에 핵심 키워드 배치
155
+
156
+ ## 공통 에러 처리
157
+
158
+ | 에러 | 조치 |
159
+ |------|------|
160
+ | `NOT_LOGGED_IN` / `SESSION_EXPIRED` | `login` 재실행 |
161
+ | `MISSING_CONTENT` | `--content` 또는 `--content-file` 확인 |
162
+ | `PROVIDER_NOT_FOUND` | `list-providers`로 확인 |
163
+ | `INVALID_POST_ID` | `list-posts`로 ID 확인 |
164
+
165
+ ## 중요 사항
166
+
167
+ - 실제 발행 전 `--dry-run`으로 파라미터 검증
168
+ - 콘텐츠는 유효한 HTML이어야 함
169
+ - 기본 프로바이더는 `tistory`
170
+ - `--content-file`은 절대 경로 사용
@@ -0,0 +1,42 @@
1
+ ---
2
+ name: va-tistory
3
+ version: 1.0.0
4
+ description: "Tistory 블로그: 명령 개요 및 플랫폼 특화 규칙"
5
+ metadata:
6
+ category: "overview"
7
+ provider: "tistory"
8
+ requires:
9
+ bins: ["viruagent-cli"]
10
+ ---
11
+
12
+ # va-tistory — Tistory 블로그 개요
13
+
14
+ Tistory 블로그 퍼블리싱을 위한 viruagent-cli 가이드. 항상 `--provider tistory` 사용.
15
+
16
+ ## 명령 목록
17
+
18
+ | 명령 | 스킬 | 설명 |
19
+ |------|------|------|
20
+ | login | va-tistory-login | 카카오 로그인 (2FA 포함) |
21
+ | publish | va-tistory-publish | 글 발행 |
22
+ | save-draft | va-tistory-draft | 임시저장 |
23
+ | list-categories | va-tistory-categories | 카테고리 조회 |
24
+ | list-posts, read-post | va-tistory-posts | 글 목록/읽기 |
25
+
26
+ ## Tistory HTML 규칙
27
+
28
+ Tistory는 `data-ke-*` 속성을 사용합니다:
29
+ - 본문: `<p data-ke-size="size18">`
30
+ - 여백: `<p data-ke-size="size16">&nbsp;</p>`
31
+ - 인용: `<blockquote data-ke-style="style2">`
32
+
33
+ ## 환경변수
34
+
35
+ ```
36
+ TISTORY_USERNAME=
37
+ TISTORY_PASSWORD=
38
+ ```
39
+
40
+ ## See Also
41
+
42
+ va-shared, va-tistory-login, va-tistory-publish, va-tistory-draft, va-tistory-categories, va-tistory-posts
@@ -0,0 +1,37 @@
1
+ ---
2
+ name: va-tistory-categories
3
+ version: 1.0.0
4
+ description: "Tistory: 블로그 카테고리 목록 조회"
5
+ metadata:
6
+ category: "command"
7
+ provider: "tistory"
8
+ requires:
9
+ bins: ["viruagent-cli"]
10
+ cliHelp: "viruagent-cli list-categories --help"
11
+ ---
12
+
13
+ # va-tistory-categories — 카테고리 조회
14
+
15
+ ## 사용법
16
+
17
+ ```bash
18
+ npx viruagent-cli list-categories --provider tistory
19
+ ```
20
+
21
+ 카테고리가 지정되지 않은 경우, 사용자에게 어떤 카테고리를 사용할지 질문.
22
+
23
+ ## 응답 예시
24
+
25
+ ```json
26
+ {
27
+ "ok": true,
28
+ "data": [
29
+ { "id": "123", "name": "개발" },
30
+ { "id": "456", "name": "일상" }
31
+ ]
32
+ }
33
+ ```
34
+
35
+ ## See Also
36
+
37
+ va-tistory, va-tistory-publish
@@ -0,0 +1,31 @@
1
+ ---
2
+ name: va-tistory-draft
3
+ version: 1.0.0
4
+ description: "Tistory: 블로그 글 임시저장"
5
+ metadata:
6
+ category: "command"
7
+ provider: "tistory"
8
+ requires:
9
+ bins: ["viruagent-cli"]
10
+ cliHelp: "viruagent-cli save-draft --help"
11
+ ---
12
+
13
+ # va-tistory-draft — Tistory 임시저장
14
+
15
+ ## 사용법
16
+
17
+ ```bash
18
+ npx viruagent-cli save-draft \
19
+ --provider tistory \
20
+ --title "Draft Title" \
21
+ --content "<h2>...</h2><p>...</p>" \
22
+ --category <id> \
23
+ --tags "tag1,tag2,tag3,tag4,tag5" \
24
+ --related-image-keywords "keyword1,keyword2"
25
+ ```
26
+
27
+ `publish` 대신 `save-draft` 사용. 옵션은 동일.
28
+
29
+ ## See Also
30
+
31
+ va-tistory-publish, va-tistory, va-shared
@@ -0,0 +1,54 @@
1
+ ---
2
+ name: va-tistory-login
3
+ version: 1.0.0
4
+ description: "Tistory: 카카오 계정으로 로그인 (2FA 지원)"
5
+ metadata:
6
+ category: "command"
7
+ provider: "tistory"
8
+ requires:
9
+ bins: ["viruagent-cli"]
10
+ cliHelp: "viruagent-cli login --help"
11
+ ---
12
+
13
+ # va-tistory-login — Tistory 로그인
14
+
15
+ ## 인증 상태 확인
16
+
17
+ ```bash
18
+ npx viruagent-cli status --provider tistory
19
+ ```
20
+
21
+ ## 로그인
22
+
23
+ ```bash
24
+ npx viruagent-cli login --provider tistory --username <kakao_id> --password <pass> --headless
25
+ ```
26
+
27
+ ### 옵션
28
+
29
+ | 플래그 | 설명 | 기본값 |
30
+ |--------|------|--------|
31
+ | `--username` | 카카오 아이디 | - |
32
+ | `--password` | 카카오 비밀번호 | - |
33
+ | `--headless` | 헤드리스 브라우저 모드 | false |
34
+ | `--two-factor-code` | 2FA 인증 코드 | - |
35
+
36
+ ### 2FA 처리
37
+
38
+ 로그인 결과가 `pending_2fa`인 경우:
39
+ 1. 사용자에게 카카오 앱에서 인증 승인 요청
40
+ 2. 승인 후 `status` 재확인
41
+
42
+ ### 환경변수
43
+
44
+ `TISTORY_USERNAME` / `TISTORY_PASSWORD` 설정 시 자동 사용.
45
+
46
+ ## 로그아웃
47
+
48
+ ```bash
49
+ npx viruagent-cli logout --provider tistory
50
+ ```
51
+
52
+ ## See Also
53
+
54
+ va-tistory, va-shared
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: va-tistory-posts
3
+ version: 1.0.0
4
+ description: "Tistory: 글 목록 조회 및 개별 글 읽기"
5
+ metadata:
6
+ category: "command"
7
+ provider: "tistory"
8
+ requires:
9
+ bins: ["viruagent-cli"]
10
+ cliHelp: "viruagent-cli list-posts --help"
11
+ ---
12
+
13
+ # va-tistory-posts — 글 목록 & 읽기
14
+
15
+ ## 글 목록
16
+
17
+ ```bash
18
+ npx viruagent-cli list-posts --provider tistory --limit 10
19
+ ```
20
+
21
+ | 플래그 | 설명 | 기본값 |
22
+ |--------|------|--------|
23
+ | `--limit` | 조회할 글 수 | 20 |
24
+
25
+ ## 글 읽기
26
+
27
+ ```bash
28
+ npx viruagent-cli read-post --provider tistory --post-id <id>
29
+ ```
30
+
31
+ | 플래그 | 설명 |
32
+ |--------|------|
33
+ | `--post-id` | 글 ID |
34
+ | `--include-draft` | 임시저장 포함 |
35
+
36
+ ## See Also
37
+
38
+ va-tistory, va-shared