monol-plugin-scout 2.1.3 → 4.1.0

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 (87) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/CHANGELOG.md +244 -0
  3. package/monol-plugin-scout-pkg/CLAUDE.md +125 -8
  4. package/monol-plugin-scout-pkg/api/mock/categories.json +81 -0
  5. package/monol-plugin-scout-pkg/api/mock/insights.json +111 -0
  6. package/monol-plugin-scout-pkg/api/mock/marketplace.json +501 -0
  7. package/monol-plugin-scout-pkg/api/mock/trending.json +96 -0
  8. package/monol-plugin-scout-pkg/commands/console.md +79 -0
  9. package/monol-plugin-scout-pkg/commands/frequency.md +32 -0
  10. package/monol-plugin-scout-pkg/commands/install.md +32 -0
  11. package/monol-plugin-scout-pkg/commands/priority.md +30 -0
  12. package/monol-plugin-scout-pkg/commands/quiet.md +32 -0
  13. package/monol-plugin-scout-pkg/commands/schedule.md +32 -0
  14. package/monol-plugin-scout-pkg/commands/scout.md +8 -5
  15. package/monol-plugin-scout-pkg/commands/skills.md +160 -0
  16. package/monol-plugin-scout-pkg/commands/team.md +32 -0
  17. package/monol-plugin-scout-pkg/commands/timing.md +32 -0
  18. package/monol-plugin-scout-pkg/commands/trust.md +85 -0
  19. package/monol-plugin-scout-pkg/commands/trusted-install.md +98 -0
  20. package/monol-plugin-scout-pkg/commands/uninstall.md +31 -0
  21. package/monol-plugin-scout-pkg/config.yaml +57 -0
  22. package/monol-plugin-scout-pkg/data/.cache/676d5ab664292155e5f509c69d4edae1 +10 -0
  23. package/monol-plugin-scout-pkg/data/.session +8 -0
  24. package/monol-plugin-scout-pkg/data/analytics.json +102 -0
  25. package/monol-plugin-scout-pkg/data/history.json +67 -11
  26. package/monol-plugin-scout-pkg/data/logs/scout.log +1 -0
  27. package/monol-plugin-scout-pkg/data/schedules.json +17 -0
  28. package/monol-plugin-scout-pkg/data/team.json +53 -0
  29. package/monol-plugin-scout-pkg/data/usage.json +100 -7
  30. package/monol-plugin-scout-pkg/docs/ARCHITECTURE.md +201 -0
  31. package/monol-plugin-scout-pkg/hooks/generate-insights.sh +102 -0
  32. package/monol-plugin-scout-pkg/hooks/hooks.json +36 -1
  33. package/monol-plugin-scout-pkg/hooks/on-session-end.sh +136 -0
  34. package/monol-plugin-scout-pkg/hooks/on-session-start.sh +43 -0
  35. package/monol-plugin-scout-pkg/hooks/on-stop.md +79 -0
  36. package/monol-plugin-scout-pkg/hooks/open-console.sh +111 -0
  37. package/monol-plugin-scout-pkg/hooks/open-dashboard.sh +61 -0
  38. package/monol-plugin-scout-pkg/hooks/track-usage.sh +59 -0
  39. package/monol-plugin-scout-pkg/lib/ai-recommender.sh +505 -0
  40. package/monol-plugin-scout-pkg/lib/cache.sh +194 -0
  41. package/monol-plugin-scout-pkg/lib/data-validator.sh +360 -0
  42. package/monol-plugin-scout-pkg/lib/error-handler.sh +296 -0
  43. package/monol-plugin-scout-pkg/lib/logger.sh +263 -0
  44. package/monol-plugin-scout-pkg/lib/plugin-manager.sh +239 -0
  45. package/monol-plugin-scout-pkg/lib/priority-scorer.sh +262 -0
  46. package/monol-plugin-scout-pkg/lib/profile-learner.sh +339 -0
  47. package/monol-plugin-scout-pkg/lib/project-analyzer.sh +281 -0
  48. package/monol-plugin-scout-pkg/lib/recommendation-controller.sh +290 -0
  49. package/monol-plugin-scout-pkg/lib/rejection-learner.sh +232 -0
  50. package/monol-plugin-scout-pkg/lib/scheduler.sh +275 -0
  51. package/monol-plugin-scout-pkg/lib/skill-scout.sh +729 -0
  52. package/monol-plugin-scout-pkg/lib/sync.sh +221 -0
  53. package/monol-plugin-scout-pkg/lib/team-learner.sh +450 -0
  54. package/monol-plugin-scout-pkg/lib/team-manager.sh +369 -0
  55. package/monol-plugin-scout-pkg/lib/trend-learner.sh +428 -0
  56. package/monol-plugin-scout-pkg/lib/trust-manager.sh +261 -0
  57. package/monol-plugin-scout-pkg/lib/trusted-installer.sh +738 -0
  58. package/monol-plugin-scout-pkg/plugin.json +3 -2
  59. package/monol-plugin-scout-pkg/skills/audit.md +6 -0
  60. package/monol-plugin-scout-pkg/skills/cleanup.md +6 -0
  61. package/monol-plugin-scout-pkg/skills/compare.md +6 -0
  62. package/monol-plugin-scout-pkg/skills/console.md +315 -0
  63. package/monol-plugin-scout-pkg/skills/explore.md +6 -0
  64. package/monol-plugin-scout-pkg/skills/fork.md +6 -0
  65. package/monol-plugin-scout-pkg/skills/frequency.md +93 -0
  66. package/monol-plugin-scout-pkg/skills/install.md +127 -0
  67. package/monol-plugin-scout-pkg/skills/priority.md +77 -0
  68. package/monol-plugin-scout-pkg/skills/quiet.md +73 -0
  69. package/monol-plugin-scout-pkg/skills/schedule.md +95 -0
  70. package/monol-plugin-scout-pkg/skills/scout.md +27 -17
  71. package/monol-plugin-scout-pkg/skills/skills.md +230 -0
  72. package/monol-plugin-scout-pkg/skills/team.md +117 -0
  73. package/monol-plugin-scout-pkg/skills/timing.md +97 -0
  74. package/monol-plugin-scout-pkg/skills/trust.md +120 -0
  75. package/monol-plugin-scout-pkg/skills/trusted-install.md +264 -0
  76. package/monol-plugin-scout-pkg/skills/uninstall.md +100 -0
  77. package/monol-plugin-scout-pkg/web/components/activity-chart.js +208 -0
  78. package/monol-plugin-scout-pkg/web/components/index.js +27 -0
  79. package/monol-plugin-scout-pkg/web/components/insight-card.js +365 -0
  80. package/monol-plugin-scout-pkg/web/components/overview.js +154 -0
  81. package/monol-plugin-scout-pkg/web/components/plugin-list.js +242 -0
  82. package/monol-plugin-scout-pkg/web/components/stats-card.js +126 -0
  83. package/monol-plugin-scout-pkg/web/components/team-list.js +346 -0
  84. package/monol-plugin-scout-pkg/web/console.html +2098 -0
  85. package/monol-plugin-scout-pkg/web/dashboard.html +2106 -0
  86. package/monol-plugin-scout-pkg/web/manifest.json +29 -0
  87. package/package.json +1 -1
@@ -0,0 +1,10 @@
1
+ {
2
+ "projectRoot": "/Users/kent/Work/monol/monol-plugin-scout/monol-plugin-scout-pkg",
3
+ "analyzedAt": "2026-01-21T23:41:49Z",
4
+ "projectTypes": ["claude-plugin"],
5
+ "frameworks": [],
6
+ "dependencies": [],
7
+ "complexity": {"files": 7, "directories": 18, "size": "small"},
8
+ "suggestedCategories": ["productivity"],
9
+ "recommendedPlugins": []
10
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "started": "2026-01-21T23:16:11Z",
3
+ "user": "Taehun Kim",
4
+ "recommended": false,
5
+ "skills_used": [
6
+ "scout"
7
+ ]
8
+ }
@@ -0,0 +1,102 @@
1
+ {
2
+ "version": "1.0.0",
3
+ "lastUpdated": "2026-01-18T19:46:25Z",
4
+ "summary": {
5
+ "totalPlugins": 11,
6
+ "activePlugins": 9,
7
+ "dormantPlugins": 2,
8
+ "totalUsageCount": 62,
9
+ "avgDailyUsage": 4.7
10
+ },
11
+ "trends": {
12
+ "weekly": [
13
+ {
14
+ "week": "2026-W02",
15
+ "usageCount": 25,
16
+ "activePlugins": 5
17
+ },
18
+ {
19
+ "week": "2026-W03",
20
+ "usageCount": 31,
21
+ "activePlugins": 6
22
+ }
23
+ ],
24
+ "monthly": [
25
+ {
26
+ "month": "2026-01",
27
+ "usageCount": 56,
28
+ "newInstalls": 2,
29
+ "uninstalls": 0
30
+ }
31
+ ]
32
+ },
33
+ "pluginStats": {
34
+ "commit-commands": {
35
+ "usageCount": 23,
36
+ "usageShare": 41.1,
37
+ "trend": "up",
38
+ "lastWeekUsage": 12
39
+ },
40
+ "code-review": {
41
+ "usageCount": 15,
42
+ "usageShare": 26.8,
43
+ "trend": "stable",
44
+ "lastWeekUsage": 8
45
+ },
46
+ "typescript-lsp": {
47
+ "usageCount": 8,
48
+ "usageShare": 14.3,
49
+ "trend": "up",
50
+ "lastWeekUsage": 3
51
+ },
52
+ "scout": {
53
+ "usageCount": 5,
54
+ "usageShare": 8.9,
55
+ "trend": "up",
56
+ "lastWeekUsage": 2
57
+ },
58
+ "audit": {
59
+ "usageCount": 3,
60
+ "usageShare": 5.4,
61
+ "trend": "stable",
62
+ "lastWeekUsage": 2
63
+ },
64
+ "console": {
65
+ "usageCount": 2,
66
+ "usageShare": 3.6,
67
+ "trend": "new",
68
+ "lastWeekUsage": 0
69
+ }
70
+ },
71
+ "userStats": {},
72
+ "insights": [
73
+ {
74
+ "type": "cleanup",
75
+ "severity": "warning",
76
+ "message": "plugin-dev이 오래 미사용 상태입니다 (마지막: never)",
77
+ "action": "/scout cleanup",
78
+ "generated": "2026-01-18T19:46:25Z"
79
+ },
80
+ {
81
+ "type": "cleanup",
82
+ "severity": "warning",
83
+ "message": "old-unused-plugin이 오래 미사용 상태입니다 (마지막: 2025-10-15)",
84
+ "action": "/scout cleanup",
85
+ "generated": "2026-01-18T19:46:25Z"
86
+ },
87
+ {
88
+ "type": "trend-up",
89
+ "severity": "info",
90
+ "message": "commit-commands이 가장 활발히 사용됩니다 (23회)",
91
+ "action": "",
92
+ "generated": "2026-01-18T19:46:25Z"
93
+ },
94
+ {
95
+ "type": "cleanup",
96
+ "severity": "warning",
97
+ "message": "plugin-dev이 설치 후 한 번도 사용되지 않았습니다",
98
+ "action": "/scout cleanup",
99
+ "generated": "2026-01-18T19:46:25Z"
100
+ }
101
+ ]
102
+ }
@@ -1,36 +1,92 @@
1
1
  {
2
- "version": "1.0.0",
3
- "lastUpdated": "2026-01-07T00:00:00.000Z",
4
-
2
+ "version": "2.0.0",
3
+ "lastUpdated": "2026-01-21T17:51:30Z",
5
4
  "declined": {
6
5
  "pyright-lsp": {
7
6
  "count": 2,
8
7
  "lastDeclined": "2026-01-06",
9
- "reason": "Python 프로젝트 아님"
8
+ "reason": "not-relevant",
9
+ "category": "development",
10
+ "declinedAt": [
11
+ "2026-01-05T10:00:00Z",
12
+ "2026-01-06T14:30:00Z"
13
+ ]
14
+ },
15
+ "ruby-lsp": {
16
+ "count": 1,
17
+ "lastDeclined": "2026-01-10",
18
+ "reason": "wrong-language",
19
+ "category": "development",
20
+ "declinedAt": [
21
+ "2026-01-10T09:00:00Z"
22
+ ]
10
23
  }
11
24
  },
12
-
13
25
  "installed": {
14
26
  "typescript-lsp": {
15
27
  "date": "2026-01-07",
16
28
  "context": "typescript-project",
17
- "source": "recommendation"
29
+ "source": "recommendation",
30
+ "installedAt": "2026-01-07T10:00:00Z"
18
31
  },
19
32
  "code-review": {
20
33
  "date": "2026-01-07",
21
34
  "context": "productivity",
22
- "source": "recommendation"
35
+ "source": "recommendation",
36
+ "installedAt": "2026-01-07T10:05:00Z"
23
37
  },
24
38
  "sentry": {
25
39
  "date": "2026-01-07",
26
40
  "context": "existing-integration",
27
- "source": "project-scan"
41
+ "source": "project-scan",
42
+ "installedAt": "2026-01-07T10:10:00Z"
43
+ },
44
+ "commit-commands": {
45
+ "date": "2026-01-07",
46
+ "context": "productivity",
47
+ "source": "manual",
48
+ "installedAt": "2026-01-07T10:15:00Z"
28
49
  }
29
50
  },
30
-
31
51
  "preferences": {
32
- "favoriteCategories": ["development", "productivity"],
52
+ "favoriteCategories": [
53
+ "development",
54
+ "productivity"
55
+ ],
56
+ "blockedCategories": [],
33
57
  "autoRecommend": true,
34
- "quietMode": false
58
+ "quietMode": false,
59
+ "recommendationCooldown": 30,
60
+ "maxRejectionsBeforeBlock": 3,
61
+ "maxRecommendationsPerSession": 2,
62
+ "maxRecommendationsPerDay": 5,
63
+ "smartTiming": {
64
+ "onlyAfterCommit": false,
65
+ "onlyAfterPR": false
66
+ },
67
+ "trustedAutoInstall": false
68
+ },
69
+ "trustedInstallLog": [],
70
+ "skills": {
71
+ "installed": [],
72
+ "declined": []
73
+ },
74
+ "rejectionPatterns": {
75
+ "byCategory": {
76
+ "development": 4
77
+ },
78
+ "byReason": {
79
+ "not-relevant": 1,
80
+ "wrong-language": 3
81
+ }
82
+ },
83
+ "rejectionReasons": {
84
+ "not-relevant": "프로젝트와 관련 없음",
85
+ "wrong-language": "사용하지 않는 언어",
86
+ "already-have": "유사한 플러그인 이미 있음",
87
+ "too-complex": "너무 복잡함",
88
+ "not-trusted": "신뢰할 수 없음",
89
+ "later": "나중에 설치",
90
+ "other": "기타"
35
91
  }
36
92
  }
@@ -0,0 +1 @@
1
+ [2026-01-21T23:43:59Z] [INFO] Plugin Scout started | version=3.1
@@ -0,0 +1,17 @@
1
+ {
2
+ "version": "1.0.0",
3
+ "tasks": [
4
+ {
5
+ "id": "779653a6",
6
+ "type": "cleanup",
7
+ "interval": "weekly",
8
+ "target": "all",
9
+ "message": "Weekly cleanup task",
10
+ "createdAt": "2026-01-22T00:19:35Z",
11
+ "nextRun": "2026-01-29T00:19:35Z",
12
+ "lastRun": null,
13
+ "enabled": true
14
+ }
15
+ ],
16
+ "lastRun": null
17
+ }
@@ -0,0 +1,53 @@
1
+ {
2
+ "version": "1.0.0",
3
+ "teamName": "Plugin Scout Team",
4
+ "members": {
5
+ "kent": {
6
+ "name": "Taehun Kim",
7
+ "email": "thkim@nextedition.co.kr",
8
+ "joinedAt": "2026-01-21T23:11:28Z",
9
+ "lastActive": "2026-01-21T23:11:28Z",
10
+ "sessions": 1,
11
+ "pluginsUsed": [],
12
+ "topPlugins": []
13
+ },
14
+ "Taehun Kim": {
15
+ "name": "Taehun Kim",
16
+ "email": "thkim@nextedition.co.kr",
17
+ "joinedAt": "2026-01-21T23:16:11Z",
18
+ "lastActive": "2026-01-21T23:16:34Z",
19
+ "sessions": 1,
20
+ "pluginsUsed": [
21
+ "scout"
22
+ ],
23
+ "topPlugins": []
24
+ }
25
+ },
26
+ "sharedRecommendations": [
27
+ {
28
+ "plugin": "eslint-fix",
29
+ "reason": "코드 품질 향상 필수!",
30
+ "sharedBy": "kent",
31
+ "sharedAt": "2026-01-21T23:13:23Z",
32
+ "votes": 1
33
+ }
34
+ ],
35
+ "sharedSettings": {
36
+ "defaultPlugins": [],
37
+ "blockedPlugins": [],
38
+ "categories": []
39
+ },
40
+ "stats": {
41
+ "totalMembers": 2,
42
+ "activeMembers": 2,
43
+ "totalPluginsUsed": 1,
44
+ "topPlugins": [
45
+ {
46
+ "plugin": "scout",
47
+ "count": 1
48
+ }
49
+ ]
50
+ },
51
+ "createdAt": "2026-01-21T23:11:28Z",
52
+ "updatedAt": "2026-01-21T23:22:39Z"
53
+ }
@@ -1,5 +1,5 @@
1
1
  {
2
- "lastUpdated": "2026-01-07T00:00:00.000Z",
2
+ "lastUpdated": "2026-01-18T19:43:41Z",
3
3
  "config": {
4
4
  "unusedThresholdDays": 30,
5
5
  "lowUsageThreshold": 3
@@ -8,27 +8,27 @@
8
8
  "typescript-lsp": {
9
9
  "installed": "2026-01-07",
10
10
  "usageCount": 8,
11
- "lastUsed": "2026-01-07"
11
+ "lastUsed": "2026-01-19"
12
12
  },
13
13
  "code-review": {
14
14
  "installed": "2026-01-07",
15
15
  "usageCount": 15,
16
- "lastUsed": "2026-01-07"
16
+ "lastUsed": "2026-01-19"
17
17
  },
18
18
  "commit-commands": {
19
19
  "installed": "2026-01-07",
20
20
  "usageCount": 23,
21
- "lastUsed": "2026-01-07"
21
+ "lastUsed": "2026-01-19"
22
22
  },
23
23
  "sentry": {
24
24
  "installed": "2026-01-07",
25
25
  "usageCount": 5,
26
- "lastUsed": "2026-01-06"
26
+ "lastUsed": "2026-01-18"
27
27
  },
28
28
  "slack": {
29
29
  "installed": "2026-01-07",
30
30
  "usageCount": 3,
31
- "lastUsed": "2026-01-05"
31
+ "lastUsed": "2026-01-15"
32
32
  },
33
33
  "plugin-dev": {
34
34
  "installed": "2025-11-15",
@@ -38,12 +38,105 @@
38
38
  "hookify": {
39
39
  "installed": "2026-01-07",
40
40
  "usageCount": 1,
41
- "lastUsed": "2026-01-07"
41
+ "lastUsed": "2026-01-10"
42
42
  },
43
43
  "old-unused-plugin": {
44
44
  "installed": "2025-10-01",
45
45
  "usageCount": 2,
46
46
  "lastUsed": "2025-10-15"
47
+ },
48
+ "scout": {
49
+ "installed": "2026-01-19",
50
+ "usageCount": 3,
51
+ "lastUsed": "2026-01-19"
52
+ },
53
+ "audit": {
54
+ "installed": "2026-01-19",
55
+ "usageCount": 1,
56
+ "lastUsed": "2026-01-19"
57
+ },
58
+ "console": {
59
+ "installed": "2026-01-19",
60
+ "usageCount": 1,
61
+ "lastUsed": "2026-01-19"
47
62
  }
63
+ },
64
+ "users": {
65
+ "kent": {
66
+ "plugins": {
67
+ "commit-commands": {
68
+ "usageCount": 15,
69
+ "lastUsed": "2026-01-19"
70
+ },
71
+ "code-review": {
72
+ "usageCount": 10,
73
+ "lastUsed": "2026-01-19"
74
+ },
75
+ "typescript-lsp": {
76
+ "usageCount": 5,
77
+ "lastUsed": "2026-01-19"
78
+ },
79
+ "scout": {
80
+ "usageCount": 3,
81
+ "lastUsed": "2026-01-19"
82
+ }
83
+ },
84
+ "sessions": 12,
85
+ "lastActive": "2026-01-19",
86
+ "firstSeen": "2026-01-07"
87
+ },
88
+ "john": {
89
+ "plugins": {
90
+ "commit-commands": {
91
+ "usageCount": 5,
92
+ "lastUsed": "2026-01-18"
93
+ },
94
+ "code-review": {
95
+ "usageCount": 3,
96
+ "lastUsed": "2026-01-18"
97
+ },
98
+ "sentry": {
99
+ "usageCount": 3,
100
+ "lastUsed": "2026-01-18"
101
+ }
102
+ },
103
+ "sessions": 8,
104
+ "lastActive": "2026-01-18",
105
+ "firstSeen": "2026-01-10"
106
+ },
107
+ "jane": {
108
+ "plugins": {
109
+ "commit-commands": {
110
+ "usageCount": 3,
111
+ "lastUsed": "2026-01-17"
112
+ },
113
+ "typescript-lsp": {
114
+ "usageCount": 3,
115
+ "lastUsed": "2026-01-17"
116
+ },
117
+ "code-review": {
118
+ "usageCount": 2,
119
+ "lastUsed": "2026-01-17"
120
+ }
121
+ },
122
+ "sessions": 5,
123
+ "lastActive": "2026-01-17",
124
+ "firstSeen": "2026-01-12"
125
+ },
126
+ "김태훈": {
127
+ "plugins": {
128
+ "console": {
129
+ "usageCount": 1,
130
+ "lastUsed": "2026-01-19"
131
+ }
132
+ },
133
+ "sessions": 1,
134
+ "lastActive": "2026-01-19",
135
+ "firstSeen": "2026-01-19"
136
+ }
137
+ },
138
+ "sessions": {
139
+ "total": 26,
140
+ "thisWeek": 15
48
141
  }
49
142
  }
@@ -0,0 +1,201 @@
1
+ # Plugin Scout Console - 아키텍처
2
+
3
+ ## 역할 분리
4
+
5
+ ### 플러그인 (로컬)
6
+ 클라이언트 사이드에서 처리되는 기능
7
+
8
+ | 기능 | 데이터 소스 | 설명 |
9
+ |------|-------------|------|
10
+ | 설치된 플러그인 목록 | `~/.claude/plugins/installed_plugins.json` | 로컬에 설치된 플러그인 |
11
+ | 플러그인 활성화 상태 | `~/.claude/settings.json` | 활성/비활성 상태 |
12
+ | 사용량 추적 | `${PLUGIN_ROOT}/data/usage.json` | 로컬 사용 기록 |
13
+ | 세션 기록 | `${PLUGIN_ROOT}/data/sessions/` | 세션별 사용 로그 |
14
+ | 사용자 정보 | `$USER`, `git config user.name` | 현재 사용자 |
15
+ | 콘솔 UI 렌더링 | `web/console.html` | 브라우저에서 표시 |
16
+ | 데이터 내보내기 | 로컬 JSON 생성 | Export 기능 |
17
+
18
+ ### 서버 (API)
19
+ 원격 서버에서 제공해야 하는 기능
20
+
21
+ | API | 엔드포인트 | 설명 |
22
+ |-----|-----------|------|
23
+ | 마켓플레이스 목록 | `GET /api/marketplace` | 전체 플러그인 카탈로그 |
24
+ | 플러그인 검색 | `GET /api/marketplace/search?q=` | 마켓플레이스 검색 |
25
+ | 플러그인 상세 | `GET /api/marketplace/{name}` | 플러그인 상세 정보 |
26
+ | 카테고리 목록 | `GET /api/categories` | 카테고리 분류 |
27
+ | 트렌딩 | `GET /api/marketplace/trending` | 인기 플러그인 |
28
+ | 다운로드 수 | `GET /api/stats/{name}` | 플러그인 통계 |
29
+ | 팀 통계 | `GET /api/team/{teamId}/stats` | 팀 사용 현황 (옵션) |
30
+ | 인사이트 | `GET /api/insights` | 추천/알림 |
31
+
32
+ ## API 스키마
33
+
34
+ ### GET /api/marketplace
35
+ ```json
36
+ {
37
+ "plugins": [
38
+ {
39
+ "name": "string",
40
+ "description": "string",
41
+ "version": "string",
42
+ "author": "string",
43
+ "category": "string",
44
+ "downloads": "number",
45
+ "rating": "number",
46
+ "trending": "boolean",
47
+ "tags": ["string"],
48
+ "createdAt": "ISO8601",
49
+ "updatedAt": "ISO8601"
50
+ }
51
+ ],
52
+ "total": "number",
53
+ "page": "number",
54
+ "pageSize": "number"
55
+ }
56
+ ```
57
+
58
+ ### GET /api/marketplace/search?q={query}&category={category}
59
+ ```json
60
+ {
61
+ "results": [/* plugin objects */],
62
+ "total": "number",
63
+ "query": "string"
64
+ }
65
+ ```
66
+
67
+ ### GET /api/marketplace/{name}
68
+ ```json
69
+ {
70
+ "name": "string",
71
+ "description": "string",
72
+ "longDescription": "string",
73
+ "version": "string",
74
+ "author": "string",
75
+ "repository": "string",
76
+ "homepage": "string",
77
+ "category": "string",
78
+ "tags": ["string"],
79
+ "downloads": "number",
80
+ "rating": "number",
81
+ "reviewCount": "number",
82
+ "trending": "boolean",
83
+ "screenshots": ["string"],
84
+ "changelog": "string",
85
+ "dependencies": ["string"],
86
+ "createdAt": "ISO8601",
87
+ "updatedAt": "ISO8601"
88
+ }
89
+ ```
90
+
91
+ ### GET /api/categories
92
+ ```json
93
+ {
94
+ "categories": [
95
+ {
96
+ "id": "string",
97
+ "name": "string",
98
+ "icon": "string",
99
+ "count": "number"
100
+ }
101
+ ]
102
+ }
103
+ ```
104
+
105
+ ### GET /api/marketplace/trending
106
+ ```json
107
+ {
108
+ "trending": [/* plugin objects with trendScore */],
109
+ "period": "week|month"
110
+ }
111
+ ```
112
+
113
+ ### GET /api/insights
114
+ ```json
115
+ {
116
+ "insights": [
117
+ {
118
+ "type": "recommendation|warning|info|security",
119
+ "severity": "low|medium|high",
120
+ "message": "string",
121
+ "action": "string|null",
122
+ "plugin": "string|null",
123
+ "createdAt": "ISO8601"
124
+ }
125
+ ]
126
+ }
127
+ ```
128
+
129
+ ## 데이터 흐름
130
+
131
+ ```
132
+ ┌─────────────────────────────────────────────────────────────┐
133
+ │ Plugin Scout Console │
134
+ ├─────────────────────────────────────────────────────────────┤
135
+ │ │
136
+ │ ┌──────────────┐ ┌──────────────────────────┐ │
137
+ │ │ 로컬 데이터 │ │ 서버 API (Mock) │ │
138
+ │ ├──────────────┤ ├──────────────────────────┤ │
139
+ │ │ usage.json │◄────┐ │ GET /api/marketplace │ │
140
+ │ │ sessions/ │ │ │ GET /api/search │ │
141
+ │ │ analytics.json│ │ │ GET /api/categories │ │
142
+ │ └──────┬───────┘ │ │ GET /api/trending │ │
143
+ │ │ │ │ GET /api/insights │ │
144
+ │ ▼ │ └───────────┬──────────────┘ │
145
+ │ ┌──────────────┐ │ │ │
146
+ │ │ open-console │ │ │ │
147
+ │ │ .sh │────┼────────────────┤ │
148
+ │ └──────┬───────┘ │ │ │
149
+ │ │ │ ▼ │
150
+ │ ▼ │ ┌──────────────────────────┐ │
151
+ │ ┌──────────────┐ │ │ console.html │ │
152
+ │ │ /tmp/console │ │ │ ┌────────────────────┐ │ │
153
+ │ │ .html │◄───┼────┤ │ 로컬 데이터 주입 │ │ │
154
+ │ └──────┬───────┘ │ │ │ (USAGE_DATA) │ │ │
155
+ │ │ │ │ └────────────────────┘ │ │
156
+ │ ▼ │ │ ┌────────────────────┐ │ │
157
+ │ ┌──────────────┐ │ │ │ API fetch │ │ │
158
+ │ │ Browser │ │ │ │ (Marketplace) │ │ │
159
+ │ └──────────────┘ │ │ └────────────────────┘ │ │
160
+ │ │ └──────────────────────────┘ │
161
+ └─────────────────────────────────────────────────────────────┘
162
+ ```
163
+
164
+ ## 목업 API 사용
165
+
166
+ 개발 환경에서는 `api/mock/` 폴더의 JSON 파일을 사용:
167
+
168
+ ```javascript
169
+ // console.html 내 API 호출
170
+ const API_BASE = '__API_BASE__'; // 주입되는 값
171
+
172
+ // 프로덕션: https://api.scout.monol.dev
173
+ // 개발/목업: file:///path/to/api/mock/
174
+
175
+ async function fetchMarketplace() {
176
+ const res = await fetch(`${API_BASE}/marketplace.json`);
177
+ return res.json();
178
+ }
179
+ ```
180
+
181
+ ## 파일 구조
182
+
183
+ ```
184
+ monol-plugin-scout-pkg/
185
+ ├── api/
186
+ │ └── mock/
187
+ │ ├── marketplace.json # 마켓플레이스 전체 목록
188
+ │ ├── categories.json # 카테고리 목록
189
+ │ ├── trending.json # 트렌딩 플러그인
190
+ │ ├── insights.json # 인사이트/추천
191
+ │ └── plugins/
192
+ │ ├── commit-commands.json
193
+ │ └── ...
194
+ ├── data/
195
+ │ ├── usage.json # 로컬 사용량
196
+ │ └── analytics.json # 로컬 분석
197
+ ├── web/
198
+ │ └── console.html # 콘솔 UI
199
+ └── hooks/
200
+ └── open-console.sh # 콘솔 실행 스크립트
201
+ ```