devforge-skillsmp 0.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.
@@ -0,0 +1,35 @@
1
+ export interface SkillsMPSkill {
2
+ id: string;
3
+ name: string;
4
+ author: string;
5
+ authorAvatar?: string;
6
+ description: string;
7
+ githubUrl: string;
8
+ skillUrl?: string;
9
+ stars: number;
10
+ updatedAt: string;
11
+ path?: string;
12
+ branch?: string;
13
+ }
14
+ export declare class SkillsMPClient {
15
+ private apiKey;
16
+ private dailyUsage;
17
+ private dailyLimit;
18
+ constructor(apiKey: string, dailyLimit?: number);
19
+ get remaining(): number;
20
+ /** 关键词搜索 */
21
+ search(params: {
22
+ q?: string;
23
+ page?: number;
24
+ limit?: number;
25
+ sortBy?: 'recent' | 'stars';
26
+ category?: string;
27
+ }): Promise<{
28
+ skills: SkillsMPSkill[];
29
+ total: number;
30
+ hasMore: boolean;
31
+ }>;
32
+ /** AI 语义搜索 */
33
+ aiSearch(q: string): Promise<SkillsMPSkill[]>;
34
+ }
35
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AA0BD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,UAAU,CAAQ;gBAEd,MAAM,EAAE,MAAM,EAAE,UAAU,SAAM;IAK5C,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,YAAY;IACN,MAAM,CAAC,MAAM,EAAE;QACnB,CAAC,CAAC,EAAE,MAAM,CAAA;QACV,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;QAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,aAAa,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IA4CzE,cAAc;IACR,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAyBpD"}
package/dist/client.js ADDED
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SkillsMPClient = void 0;
4
+ const devforge_shared_1 = require("devforge-shared");
5
+ const BASE = 'https://skillsmp.com/api/v1';
6
+ class SkillsMPClient {
7
+ apiKey;
8
+ dailyUsage = 0;
9
+ dailyLimit;
10
+ constructor(apiKey, dailyLimit = 500) {
11
+ this.apiKey = apiKey;
12
+ this.dailyLimit = dailyLimit;
13
+ }
14
+ get remaining() {
15
+ return Math.max(0, this.dailyLimit - this.dailyUsage);
16
+ }
17
+ /** 关键词搜索 */
18
+ async search(params) {
19
+ if (this.dailyUsage >= this.dailyLimit) {
20
+ devforge_shared_1.logger.warn({ module: 'skillsmp' }, 'Daily API limit reached');
21
+ return { skills: [], total: 0, hasMore: false };
22
+ }
23
+ const query = new URLSearchParams();
24
+ if (params.q)
25
+ query.set('q', params.q);
26
+ if (params.page)
27
+ query.set('page', String(params.page));
28
+ if (params.limit)
29
+ query.set('limit', String(params.limit));
30
+ if (params.sortBy)
31
+ query.set('sortBy', params.sortBy);
32
+ if (params.category)
33
+ query.set('category', params.category);
34
+ try {
35
+ const res = await fetch(`${BASE}/skills/search?${query}`, {
36
+ headers: {
37
+ Authorization: `Bearer ${this.apiKey}`,
38
+ 'User-Agent': 'claude-code-discovery/0.1',
39
+ },
40
+ });
41
+ this.dailyUsage++;
42
+ if (!res.ok) {
43
+ devforge_shared_1.logger.warn({ status: res.status, module: 'skillsmp' }, 'SkillsMP search failed');
44
+ return { skills: [], total: 0, hasMore: false };
45
+ }
46
+ const body = (await res.json());
47
+ if (!body.success) {
48
+ return { skills: [], total: 0, hasMore: false };
49
+ }
50
+ return {
51
+ skills: body.data.skills,
52
+ total: body.data.pagination.total,
53
+ hasMore: body.data.pagination.hasNext,
54
+ };
55
+ }
56
+ catch (err) {
57
+ devforge_shared_1.logger.error({ err, module: 'skillsmp' }, 'SkillsMP search error');
58
+ return { skills: [], total: 0, hasMore: false };
59
+ }
60
+ }
61
+ /** AI 语义搜索 */
62
+ async aiSearch(q) {
63
+ if (this.dailyUsage >= this.dailyLimit) {
64
+ devforge_shared_1.logger.warn({ module: 'skillsmp' }, 'Daily API limit reached');
65
+ return [];
66
+ }
67
+ try {
68
+ const res = await fetch(`${BASE}/skills/ai-search?q=${encodeURIComponent(q)}`, {
69
+ headers: {
70
+ Authorization: `Bearer ${this.apiKey}`,
71
+ 'User-Agent': 'claude-code-discovery/0.1',
72
+ },
73
+ });
74
+ this.dailyUsage++;
75
+ if (!res.ok)
76
+ return [];
77
+ const body = (await res.json());
78
+ return body.success ? body.data.skills : [];
79
+ }
80
+ catch (err) {
81
+ devforge_shared_1.logger.error({ err, module: 'skillsmp' }, 'SkillsMP AI search error');
82
+ return [];
83
+ }
84
+ }
85
+ }
86
+ exports.SkillsMPClient = SkillsMPClient;
87
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { SkillsMPClient } from './client';
2
+ export type { SkillsMPSkill } from './client';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACzC,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SkillsMPClient = void 0;
4
+ var client_1 = require("./client");
5
+ Object.defineProperty(exports, "SkillsMPClient", { enumerable: true, get: function () { return client_1.SkillsMPClient; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAAyC;AAAhC,wGAAA,cAAc,OAAA"}
package/package.json ADDED
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "devforge-skillsmp",
3
+ "version": "0.1.0",
4
+ "main": "dist/index.js",
5
+ "types": "dist/index.d.ts",
6
+ "files": [
7
+ "dist"
8
+ ],
9
+ "scripts": {
10
+ "build": "tsc -b",
11
+ "dev": "tsc --watch"
12
+ },
13
+ "dependencies": {
14
+ "devforge-shared": "^0.1.0"
15
+ }
16
+ }