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.
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +244 -0
- package/monol-plugin-scout-pkg/CLAUDE.md +125 -8
- package/monol-plugin-scout-pkg/api/mock/categories.json +81 -0
- package/monol-plugin-scout-pkg/api/mock/insights.json +111 -0
- package/monol-plugin-scout-pkg/api/mock/marketplace.json +501 -0
- package/monol-plugin-scout-pkg/api/mock/trending.json +96 -0
- package/monol-plugin-scout-pkg/commands/console.md +79 -0
- package/monol-plugin-scout-pkg/commands/frequency.md +32 -0
- package/monol-plugin-scout-pkg/commands/install.md +32 -0
- package/monol-plugin-scout-pkg/commands/priority.md +30 -0
- package/monol-plugin-scout-pkg/commands/quiet.md +32 -0
- package/monol-plugin-scout-pkg/commands/schedule.md +32 -0
- package/monol-plugin-scout-pkg/commands/scout.md +8 -5
- package/monol-plugin-scout-pkg/commands/skills.md +160 -0
- package/monol-plugin-scout-pkg/commands/team.md +32 -0
- package/monol-plugin-scout-pkg/commands/timing.md +32 -0
- package/monol-plugin-scout-pkg/commands/trust.md +85 -0
- package/monol-plugin-scout-pkg/commands/trusted-install.md +98 -0
- package/monol-plugin-scout-pkg/commands/uninstall.md +31 -0
- package/monol-plugin-scout-pkg/config.yaml +57 -0
- package/monol-plugin-scout-pkg/data/.cache/676d5ab664292155e5f509c69d4edae1 +10 -0
- package/monol-plugin-scout-pkg/data/.session +8 -0
- package/monol-plugin-scout-pkg/data/analytics.json +102 -0
- package/monol-plugin-scout-pkg/data/history.json +67 -11
- package/monol-plugin-scout-pkg/data/logs/scout.log +1 -0
- package/monol-plugin-scout-pkg/data/schedules.json +17 -0
- package/monol-plugin-scout-pkg/data/team.json +53 -0
- package/monol-plugin-scout-pkg/data/usage.json +100 -7
- package/monol-plugin-scout-pkg/docs/ARCHITECTURE.md +201 -0
- package/monol-plugin-scout-pkg/hooks/generate-insights.sh +102 -0
- package/monol-plugin-scout-pkg/hooks/hooks.json +36 -1
- package/monol-plugin-scout-pkg/hooks/on-session-end.sh +136 -0
- package/monol-plugin-scout-pkg/hooks/on-session-start.sh +43 -0
- package/monol-plugin-scout-pkg/hooks/on-stop.md +79 -0
- package/monol-plugin-scout-pkg/hooks/open-console.sh +111 -0
- package/monol-plugin-scout-pkg/hooks/open-dashboard.sh +61 -0
- package/monol-plugin-scout-pkg/hooks/track-usage.sh +59 -0
- package/monol-plugin-scout-pkg/lib/ai-recommender.sh +505 -0
- package/monol-plugin-scout-pkg/lib/cache.sh +194 -0
- package/monol-plugin-scout-pkg/lib/data-validator.sh +360 -0
- package/monol-plugin-scout-pkg/lib/error-handler.sh +296 -0
- package/monol-plugin-scout-pkg/lib/logger.sh +263 -0
- package/monol-plugin-scout-pkg/lib/plugin-manager.sh +239 -0
- package/monol-plugin-scout-pkg/lib/priority-scorer.sh +262 -0
- package/monol-plugin-scout-pkg/lib/profile-learner.sh +339 -0
- package/monol-plugin-scout-pkg/lib/project-analyzer.sh +281 -0
- package/monol-plugin-scout-pkg/lib/recommendation-controller.sh +290 -0
- package/monol-plugin-scout-pkg/lib/rejection-learner.sh +232 -0
- package/monol-plugin-scout-pkg/lib/scheduler.sh +275 -0
- package/monol-plugin-scout-pkg/lib/skill-scout.sh +729 -0
- package/monol-plugin-scout-pkg/lib/sync.sh +221 -0
- package/monol-plugin-scout-pkg/lib/team-learner.sh +450 -0
- package/monol-plugin-scout-pkg/lib/team-manager.sh +369 -0
- package/monol-plugin-scout-pkg/lib/trend-learner.sh +428 -0
- package/monol-plugin-scout-pkg/lib/trust-manager.sh +261 -0
- package/monol-plugin-scout-pkg/lib/trusted-installer.sh +738 -0
- package/monol-plugin-scout-pkg/plugin.json +3 -2
- package/monol-plugin-scout-pkg/skills/audit.md +6 -0
- package/monol-plugin-scout-pkg/skills/cleanup.md +6 -0
- package/monol-plugin-scout-pkg/skills/compare.md +6 -0
- package/monol-plugin-scout-pkg/skills/console.md +315 -0
- package/monol-plugin-scout-pkg/skills/explore.md +6 -0
- package/monol-plugin-scout-pkg/skills/fork.md +6 -0
- package/monol-plugin-scout-pkg/skills/frequency.md +93 -0
- package/monol-plugin-scout-pkg/skills/install.md +127 -0
- package/monol-plugin-scout-pkg/skills/priority.md +77 -0
- package/monol-plugin-scout-pkg/skills/quiet.md +73 -0
- package/monol-plugin-scout-pkg/skills/schedule.md +95 -0
- package/monol-plugin-scout-pkg/skills/scout.md +27 -17
- package/monol-plugin-scout-pkg/skills/skills.md +230 -0
- package/monol-plugin-scout-pkg/skills/team.md +117 -0
- package/monol-plugin-scout-pkg/skills/timing.md +97 -0
- package/monol-plugin-scout-pkg/skills/trust.md +120 -0
- package/monol-plugin-scout-pkg/skills/trusted-install.md +264 -0
- package/monol-plugin-scout-pkg/skills/uninstall.md +100 -0
- package/monol-plugin-scout-pkg/web/components/activity-chart.js +208 -0
- package/monol-plugin-scout-pkg/web/components/index.js +27 -0
- package/monol-plugin-scout-pkg/web/components/insight-card.js +365 -0
- package/monol-plugin-scout-pkg/web/components/overview.js +154 -0
- package/monol-plugin-scout-pkg/web/components/plugin-list.js +242 -0
- package/monol-plugin-scout-pkg/web/components/stats-card.js +126 -0
- package/monol-plugin-scout-pkg/web/components/team-list.js +346 -0
- package/monol-plugin-scout-pkg/web/console.html +2098 -0
- package/monol-plugin-scout-pkg/web/dashboard.html +2106 -0
- package/monol-plugin-scout-pkg/web/manifest.json +29 -0
- 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,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": "
|
|
3
|
-
"lastUpdated": "2026-01-
|
|
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": "
|
|
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": [
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
21
|
+
"lastUsed": "2026-01-19"
|
|
22
22
|
},
|
|
23
23
|
"sentry": {
|
|
24
24
|
"installed": "2026-01-07",
|
|
25
25
|
"usageCount": 5,
|
|
26
|
-
"lastUsed": "2026-01-
|
|
26
|
+
"lastUsed": "2026-01-18"
|
|
27
27
|
},
|
|
28
28
|
"slack": {
|
|
29
29
|
"installed": "2026-01-07",
|
|
30
30
|
"usageCount": 3,
|
|
31
|
-
"lastUsed": "2026-01-
|
|
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-
|
|
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
|
+
```
|