devchain-cli 0.20.1 → 0.20.2
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/dist/server/modules/events/catalog/broadcast-registry.js +31 -0
- package/dist/server/modules/events/catalog/broadcast-registry.js.map +1 -1
- package/dist/server/modules/projects/controllers/projects.controller.d.ts +22 -8
- package/dist/server/modules/projects/controllers/projects.controller.js +74 -40
- package/dist/server/modules/projects/controllers/projects.controller.js.map +1 -1
- package/dist/server/modules/projects/dtos/template-upgrade.dto.d.ts +19 -0
- package/dist/server/modules/projects/dtos/template-upgrade.dto.js +60 -0
- package/dist/server/modules/projects/dtos/template-upgrade.dto.js.map +1 -1
- package/dist/server/modules/projects/helpers/project-export.d.ts +1 -0
- package/dist/server/modules/projects/helpers/project-export.js +2 -2
- package/dist/server/modules/projects/helpers/project-export.js.map +1 -1
- package/dist/server/modules/projects/helpers/project-import-sessions.d.ts +3 -0
- package/dist/server/modules/projects/helpers/project-import-sessions.js +11 -6
- package/dist/server/modules/projects/helpers/project-import-sessions.js.map +1 -1
- package/dist/server/modules/projects/helpers/project-import.d.ts +83 -8
- package/dist/server/modules/projects/helpers/project-import.js +161 -44
- package/dist/server/modules/projects/helpers/project-import.js.map +1 -1
- package/dist/server/modules/projects/services/project-template-upgrade.service.d.ts +16 -3
- package/dist/server/modules/projects/services/project-template-upgrade.service.js +115 -56
- package/dist/server/modules/projects/services/project-template-upgrade.service.js.map +1 -1
- package/dist/server/modules/projects/services/projects.service.d.ts +22 -8
- package/dist/server/modules/projects/services/projects.service.js +1 -1
- package/dist/server/modules/projects/services/projects.service.js.map +1 -1
- package/dist/server/modules/projects/template-codec/codecs/statuses.codec.js +4 -2
- package/dist/server/modules/projects/template-codec/codecs/statuses.codec.js.map +1 -1
- package/dist/server/modules/skills/adapters/community-skill-source.adapter.d.ts +2 -8
- package/dist/server/modules/skills/adapters/community-skill-source.adapter.js +3 -167
- package/dist/server/modules/skills/adapters/community-skill-source.adapter.js.map +1 -1
- package/dist/server/modules/skills/adapters/github-directory-skill-source.adapter.d.ts +21 -0
- package/dist/server/modules/skills/adapters/github-directory-skill-source.adapter.js +231 -0
- package/dist/server/modules/skills/adapters/github-directory-skill-source.adapter.js.map +1 -0
- package/dist/server/modules/skills/adapters/github-skill-source.base.d.ts +1 -0
- package/dist/server/modules/skills/adapters/github-skill-source.base.js +4 -4
- package/dist/server/modules/skills/adapters/github-skill-source.base.js.map +1 -1
- package/dist/server/modules/skills/adapters/skill-parsing.utils.d.ts +1 -0
- package/dist/server/modules/skills/adapters/skill-parsing.utils.js +41 -0
- package/dist/server/modules/skills/adapters/skill-parsing.utils.js.map +1 -1
- package/dist/server/modules/skills/skills.module.js +15 -1
- package/dist/server/modules/skills/skills.module.js.map +1 -1
- package/dist/server/templates/teams-dev.json +30 -21
- package/dist/server/tsconfig.tsbuildinfo +1 -1
- package/dist/server/ui/assets/{ReviewDetailPage-BZoAe0G2.js → ReviewDetailPage-BXLlZvPO.js} +1 -1
- package/dist/server/ui/assets/{ReviewsPage-J3XZDw7k.js → ReviewsPage-CmFUc6IP.js} +1 -1
- package/dist/server/ui/assets/{index-DoKUmi74.js → index-LNBfBNWF.js} +243 -248
- package/dist/server/ui/assets/index-NypjSmlZ.css +32 -0
- package/dist/server/ui/assets/{useReviewSubscription-CNUx-AWQ.js → useReviewSubscription-Ch8K_5xz.js} +1 -1
- package/dist/server/ui/index.html +2 -2
- package/dist/templates/teams-dev.json +30 -21
- package/package.json +8 -1
- package/dist/server/ui/assets/index-CxmSxl5f.css +0 -32
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statuses.codec.js","sourceRoot":"","sources":["../../../../../src/modules/projects/template-codec/codecs/statuses.codec.ts"],"names":[],"mappings":";;;AA+BA,kDAQC;AAzBD,8DAAiE;AAWjE,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,eAAe,CAAC,CAAC;AAC7C,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAKpC,SAAgB,mBAAmB,CAAC,WAA8C;IAChF,OAAO,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACxC,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,aAAa;IACR,WAAW,GAAG;QACrB,OAAO,EAAE,UAAU;QACnB,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,CAAC,aAAa,EAAE,yBAAyB,CAAC;QAClD,aAAa,EAAE,CAAC,qBAAqB,CAAC;QACtC,aAAa,EAAE,CAAC,mBAAmB,CAAC;QACpC,KAAK,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC;KACpB,CAAC;IAEX,IAAI,CAAC,OAA8B;QACjC,OAAO,OAAO,CAAC,QAAQ,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,GAAuB;QAC3B,OAAO,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,KAAK,CACT,gBAAiC,EACjC,GAAkB,EAClB,KAAmB,EACnB,EAAqB;QAErB,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;QAClC,MAAM,gBAAgB,GAAG,EAAE,CAAC,gBAAgB,IAAI,EAAE,CAAC;QAEnD,MAAM,WAAW,GAA2B,EAAE,CAAC;QAC/C,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAA6C,CAAC;QACnF,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,CAAC;YACtC,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,CAAC;QACvE,CAAC;
|
|
1
|
+
{"version":3,"file":"statuses.codec.js","sourceRoot":"","sources":["../../../../../src/modules/projects/template-codec/codecs/statuses.codec.ts"],"names":[],"mappings":";;;AA+BA,kDAQC;AAzBD,8DAAiE;AAWjE,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,eAAe,CAAC,CAAC;AAC7C,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAKpC,SAAgB,mBAAmB,CAAC,WAA8C;IAChF,OAAO,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACxC,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,aAAa;IACR,WAAW,GAAG;QACrB,OAAO,EAAE,UAAU;QACnB,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,CAAC,aAAa,EAAE,yBAAyB,CAAC;QAClD,aAAa,EAAE,CAAC,qBAAqB,CAAC;QACtC,aAAa,EAAE,CAAC,mBAAmB,CAAC;QACpC,KAAK,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC;KACpB,CAAC;IAEX,IAAI,CAAC,OAA8B;QACjC,OAAO,OAAO,CAAC,QAAQ,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,GAAuB;QAC3B,OAAO,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,KAAK,CACT,gBAAiC,EACjC,GAAkB,EAClB,KAAmB,EACnB,EAAqB;QAErB,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;QAClC,MAAM,gBAAgB,GAAG,EAAE,CAAC,gBAAgB,IAAI,EAAE,CAAC;QAEnD,MAAM,WAAW,GAA2B,EAAE,CAAC;QAC/C,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAA6C,CAAC;QACnF,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,CAAC;YACtC,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,CAAC;QACvE,CAAC;QAKD,MAAM,qBAAqB,GACzB,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC3E,oBAAoB,CAAC;QACvB,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC;YACzD,MAAM,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE;gBACpC,QAAQ,EAAE,qBAAqB,GAAG,KAAK;aACxC,CAAC,CAAC;QACL,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnF,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACnD,MAAM,QAAQ,GAAG,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAErD,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,EAAE;oBACtD,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,SAAS,EAAE,MAAM,CAAC,SAAS;iBAC5B,CAAC,CAAC;gBACH,IAAI,MAAM,CAAC,EAAE;oBAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC;gBACnD,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACvC,SAAS;YACX,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC;gBACzC,SAAS;gBACT,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,EAAE;gBAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC;QACrD,CAAC;QAED,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC1D,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QACvF,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;YACvC,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5E,CAAC;QAED,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QACpC,GAAG,CAAC,GAAG,CAAC,yBAAyB,EAAE,uBAAuB,CAAC,CAAC;QAE5D,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAClD,EAAE,CAAC,cAAc,EACjB,uBAAuB,EACvB,OAAO,CACR,CAAC;QAEF,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC;IACrD,CAAC;IAGO,KAAK,CAAC,mBAAmB,CAC/B,cAAmD,EACnD,uBAA4C,EAC5C,OAAqC;QAErC,IAAI,CAAC,cAAc,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChE,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC;QAChD,CAAC;QAED,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,eAAe,GAAG,CAAC,CAAC;QAExB,KAAK,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;YACxE,MAAM,cAAc,GAAG,uBAAuB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;YACrF,IAAI,CAAC,cAAc;gBAAE,SAAS;YAE9B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YAC9E,WAAW,IAAI,QAAQ,CAAC;YACxB,MAAM,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;YACxC,eAAe,EAAE,CAAC;QACpB,CAAC;QAED,MAAM,CAAC,IAAI,CACT,EAAE,WAAW,EAAE,eAAe,EAAE,EAChC,kEAAkE,CACnE,CAAC;QACF,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;IAC1C,CAAC;CACF;AAEY,QAAA,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC"}
|
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
import type { CommunitySkillSource } from '../../storage/models/domain.models';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
export declare class CommunitySkillSourceAdapter extends GitHubSkillSourceBase implements SkillSourceAdapter {
|
|
2
|
+
import { GitHubDirectorySkillSourceAdapter } from './github-directory-skill-source.adapter';
|
|
3
|
+
export declare class CommunitySkillSourceAdapter extends GitHubDirectorySkillSourceAdapter {
|
|
5
4
|
constructor(source: CommunitySkillSource);
|
|
6
|
-
listSkills(): Promise<Map<string, SkillManifest>>;
|
|
7
|
-
createSyncContext(): Promise<SkillSourceSyncContext>;
|
|
8
|
-
private listSkillNamesFromExtractedRepo;
|
|
9
|
-
protected resolveSkillDirectory(extractedRepoRoot: string, skillName: string): Promise<string>;
|
|
10
|
-
private toSkillManifest;
|
|
11
5
|
}
|
|
@@ -1,181 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
3
|
exports.CommunitySkillSourceAdapter = void 0;
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
const error_types_1 = require("../../../common/errors/error-types");
|
|
40
|
-
const logger_1 = require("../../../common/logging/logger");
|
|
41
|
-
const github_skill_source_base_1 = require("./github-skill-source.base");
|
|
42
|
-
const logger = (0, logger_1.createLogger)('CommunitySkillSourceAdapter');
|
|
43
|
-
const SKILLS_DIRECTORY = 'skills';
|
|
44
|
-
class CommunitySkillSourceAdapter extends github_skill_source_base_1.GitHubSkillSourceBase {
|
|
4
|
+
const github_directory_skill_source_adapter_1 = require("./github-directory-skill-source.adapter");
|
|
5
|
+
class CommunitySkillSourceAdapter extends github_directory_skill_source_adapter_1.GitHubDirectorySkillSourceAdapter {
|
|
45
6
|
constructor(source) {
|
|
46
7
|
super({
|
|
47
8
|
sourceName: source.name,
|
|
48
9
|
repoOwner: source.repoOwner,
|
|
49
10
|
repoName: source.repoName,
|
|
50
11
|
branch: source.branch,
|
|
12
|
+
skillsRoot: 'skills',
|
|
51
13
|
});
|
|
52
14
|
}
|
|
53
|
-
async listSkills() {
|
|
54
|
-
const context = await this.createSyncContext();
|
|
55
|
-
try {
|
|
56
|
-
return new Map(context.manifests);
|
|
57
|
-
}
|
|
58
|
-
finally {
|
|
59
|
-
await context.dispose();
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
async createSyncContext() {
|
|
63
|
-
const repoContext = await this.prepareExtractedRepository();
|
|
64
|
-
const manifests = new Map();
|
|
65
|
-
let disposed = false;
|
|
66
|
-
const dispose = async () => {
|
|
67
|
-
if (disposed) {
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
disposed = true;
|
|
71
|
-
await repoContext.dispose();
|
|
72
|
-
};
|
|
73
|
-
try {
|
|
74
|
-
const skillNames = await this.listSkillNamesFromExtractedRepo(repoContext.extractedRepoRoot);
|
|
75
|
-
for (const skillName of skillNames) {
|
|
76
|
-
try {
|
|
77
|
-
const skillDirectory = await this.resolveSkillDirectory(repoContext.extractedRepoRoot, skillName);
|
|
78
|
-
const parsedSkill = await this.parseSkillMarkdown(skillDirectory);
|
|
79
|
-
if (!parsedSkill) {
|
|
80
|
-
continue;
|
|
81
|
-
}
|
|
82
|
-
manifests.set(skillName, this.toSkillManifest(skillName, parsedSkill));
|
|
83
|
-
}
|
|
84
|
-
catch (error) {
|
|
85
|
-
logger.warn({
|
|
86
|
-
sourceName: this.sourceName,
|
|
87
|
-
skillName,
|
|
88
|
-
error: error instanceof Error ? error.message : String(error),
|
|
89
|
-
}, 'Failed processing community skill. Skipping.');
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
return {
|
|
93
|
-
manifests,
|
|
94
|
-
downloadSkill: async (skillName, targetPath) => this.downloadSkillFromExtractedRepo(skillName, targetPath, repoContext.extractedRepoRoot),
|
|
95
|
-
dispose,
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
catch (error) {
|
|
99
|
-
await dispose();
|
|
100
|
-
throw error;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
async listSkillNamesFromExtractedRepo(extractedRepoRoot) {
|
|
104
|
-
const skillsRoot = (0, node_path_1.join)(extractedRepoRoot, SKILLS_DIRECTORY);
|
|
105
|
-
let entries;
|
|
106
|
-
try {
|
|
107
|
-
entries = await fs.readdir(skillsRoot, { withFileTypes: true });
|
|
108
|
-
}
|
|
109
|
-
catch (error) {
|
|
110
|
-
if (error.code === 'ENOENT') {
|
|
111
|
-
throw new error_types_1.StorageError('Community skills directory not found in repository archive.', {
|
|
112
|
-
sourceName: this.sourceName,
|
|
113
|
-
skillsRoot,
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
throw new error_types_1.StorageError('Failed reading community skills directory in archive.', {
|
|
117
|
-
sourceName: this.sourceName,
|
|
118
|
-
skillsRoot,
|
|
119
|
-
cause: error instanceof Error ? error.message : String(error),
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
return entries
|
|
123
|
-
.filter((entry) => entry.isDirectory() && !entry.name.startsWith('.'))
|
|
124
|
-
.map((entry) => entry.name)
|
|
125
|
-
.sort((left, right) => left.localeCompare(right));
|
|
126
|
-
}
|
|
127
|
-
async resolveSkillDirectory(extractedRepoRoot, skillName) {
|
|
128
|
-
const strictSkillsPath = (0, node_path_1.join)(extractedRepoRoot, SKILLS_DIRECTORY, skillName);
|
|
129
|
-
try {
|
|
130
|
-
const stats = await fs.stat(strictSkillsPath);
|
|
131
|
-
if (stats.isDirectory()) {
|
|
132
|
-
return strictSkillsPath;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
catch (error) {
|
|
136
|
-
if (error.code !== 'ENOENT') {
|
|
137
|
-
throw new error_types_1.StorageError('Failed checking extracted community skill directory.', {
|
|
138
|
-
sourceName: this.sourceName,
|
|
139
|
-
skillName,
|
|
140
|
-
candidate: strictSkillsPath,
|
|
141
|
-
cause: error instanceof Error ? error.message : String(error),
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
throw new error_types_1.StorageError('Skill directory was not found in extracted repository tarball.', {
|
|
146
|
-
sourceName: this.sourceName,
|
|
147
|
-
skillName,
|
|
148
|
-
extractedRepoRoot,
|
|
149
|
-
candidate: strictSkillsPath,
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
toSkillManifest(skillName, parsedSkill) {
|
|
153
|
-
const frontmatter = parsedSkill.frontmatter;
|
|
154
|
-
const manifestName = this.pickString(frontmatter, ['name']) ?? skillName;
|
|
155
|
-
const displayName = this.pickString(frontmatter, ['displayName', 'display_name', 'title']);
|
|
156
|
-
const description = this.pickString(frontmatter, ['description', 'summary', 'shortDescription']) ??
|
|
157
|
-
`Skill instructions for ${skillName}`;
|
|
158
|
-
const shortDescription = this.pickString(frontmatter, [
|
|
159
|
-
'shortDescription',
|
|
160
|
-
'short_description',
|
|
161
|
-
'summary',
|
|
162
|
-
]);
|
|
163
|
-
const license = this.pickString(frontmatter, ['license']);
|
|
164
|
-
const compatibility = this.pickString(frontmatter, ['compatibility']);
|
|
165
|
-
const resources = this.pickStringArray(frontmatter, ['resources', 'references']);
|
|
166
|
-
return {
|
|
167
|
-
name: manifestName,
|
|
168
|
-
displayName,
|
|
169
|
-
description,
|
|
170
|
-
shortDescription,
|
|
171
|
-
license,
|
|
172
|
-
compatibility,
|
|
173
|
-
frontmatter,
|
|
174
|
-
instructionContent: parsedSkill.instructionContent,
|
|
175
|
-
resources,
|
|
176
|
-
sourceUrl: `${this.repoUrl}/tree/${encodeURIComponent(this.branch)}/${SKILLS_DIRECTORY}/${encodeURIComponent(skillName)}`,
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
15
|
}
|
|
180
16
|
exports.CommunitySkillSourceAdapter = CommunitySkillSourceAdapter;
|
|
181
17
|
//# sourceMappingURL=community-skill-source.adapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"community-skill-source.adapter.js","sourceRoot":"","sources":["../../../../src/modules/skills/adapters/community-skill-source.adapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"community-skill-source.adapter.js","sourceRoot":"","sources":["../../../../src/modules/skills/adapters/community-skill-source.adapter.ts"],"names":[],"mappings":";;;AACA,mGAA4F;AAE5F,MAAa,2BAA4B,SAAQ,yEAAiC;IAChF,YAAY,MAA4B;QACtC,KAAK,CAAC;YACJ,UAAU,EAAE,MAAM,CAAC,IAAI;YACvB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU,EAAE,QAAQ;SACrB,CAAC,CAAC;IACL,CAAC;CACF;AAVD,kEAUC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { GitHubSkillSourceBase, type GitHubSkillSourceBaseConfig } from './github-skill-source.base';
|
|
2
|
+
import type { SkillManifest, SkillSourceAdapter, SkillSourceSyncContext } from './skill-source.adapter';
|
|
3
|
+
export interface GitHubDirectorySkillSourceConfig extends GitHubSkillSourceBaseConfig {
|
|
4
|
+
sourceName: string;
|
|
5
|
+
repoOwner: string;
|
|
6
|
+
repoName: string;
|
|
7
|
+
branch: string;
|
|
8
|
+
skillsRoot: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class GitHubDirectorySkillSourceAdapter extends GitHubSkillSourceBase implements SkillSourceAdapter {
|
|
11
|
+
readonly skillsRoot: string;
|
|
12
|
+
private readonly skillsRootSegments;
|
|
13
|
+
constructor(config: GitHubDirectorySkillSourceConfig);
|
|
14
|
+
listSkills(): Promise<Map<string, SkillManifest>>;
|
|
15
|
+
createSyncContext(): Promise<SkillSourceSyncContext>;
|
|
16
|
+
protected resolveSkillDirectory(extractedRepoRoot: string, skillName: string): Promise<string>;
|
|
17
|
+
private listSkillNamesFromExtractedRepo;
|
|
18
|
+
private resolveSkillsRoot;
|
|
19
|
+
private assertContainedPath;
|
|
20
|
+
private toSkillManifest;
|
|
21
|
+
}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.GitHubDirectorySkillSourceAdapter = void 0;
|
|
37
|
+
const fs = __importStar(require("node:fs/promises"));
|
|
38
|
+
const node_path_1 = require("node:path");
|
|
39
|
+
const error_types_1 = require("../../../common/errors/error-types");
|
|
40
|
+
const logger_1 = require("../../../common/logging/logger");
|
|
41
|
+
const github_skill_source_base_1 = require("./github-skill-source.base");
|
|
42
|
+
const skill_parsing_utils_1 = require("./skill-parsing.utils");
|
|
43
|
+
const logger = (0, logger_1.createLogger)('GitHubDirectorySkillSourceAdapter');
|
|
44
|
+
class GitHubDirectorySkillSourceAdapter extends github_skill_source_base_1.GitHubSkillSourceBase {
|
|
45
|
+
skillsRoot;
|
|
46
|
+
skillsRootSegments;
|
|
47
|
+
constructor(config) {
|
|
48
|
+
super(config);
|
|
49
|
+
this.skillsRootSegments = (0, skill_parsing_utils_1.validateRepositoryRelativePath)(config.skillsRoot, 'skillsRoot');
|
|
50
|
+
this.skillsRoot = this.skillsRootSegments.join('/');
|
|
51
|
+
}
|
|
52
|
+
async listSkills() {
|
|
53
|
+
const context = await this.createSyncContext();
|
|
54
|
+
try {
|
|
55
|
+
return new Map(context.manifests);
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
await context.dispose();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
async createSyncContext() {
|
|
62
|
+
const repoContext = await this.prepareExtractedRepository();
|
|
63
|
+
const manifests = new Map();
|
|
64
|
+
let disposed = false;
|
|
65
|
+
const dispose = async () => {
|
|
66
|
+
if (disposed) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
disposed = true;
|
|
70
|
+
await repoContext.dispose();
|
|
71
|
+
};
|
|
72
|
+
try {
|
|
73
|
+
const skillNames = await this.listSkillNamesFromExtractedRepo(repoContext.extractedRepoRoot);
|
|
74
|
+
for (const skillName of skillNames) {
|
|
75
|
+
try {
|
|
76
|
+
const skillDirectory = await this.resolveSkillDirectory(repoContext.extractedRepoRoot, skillName);
|
|
77
|
+
const parsedSkill = await this.parseSkillMarkdown(skillDirectory);
|
|
78
|
+
if (!parsedSkill) {
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
manifests.set(skillName, this.toSkillManifest(skillName, parsedSkill));
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
logger.warn({
|
|
85
|
+
sourceName: this.sourceName,
|
|
86
|
+
skillName,
|
|
87
|
+
error: error instanceof Error ? error.message : String(error),
|
|
88
|
+
}, 'Failed processing GitHub directory skill. Skipping.');
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
manifests,
|
|
93
|
+
downloadSkill: async (skillName, targetPath) => this.downloadSkillFromExtractedRepo(skillName, targetPath, repoContext.extractedRepoRoot),
|
|
94
|
+
dispose,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
await dispose();
|
|
99
|
+
throw error;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
async resolveSkillDirectory(extractedRepoRoot, skillName) {
|
|
103
|
+
const skillsRoot = await this.resolveSkillsRoot(extractedRepoRoot);
|
|
104
|
+
const strictSkillPath = (0, node_path_1.resolve)(skillsRoot, skillName);
|
|
105
|
+
this.assertContainedPath(skillsRoot, strictSkillPath, 'skillName');
|
|
106
|
+
try {
|
|
107
|
+
const stats = await fs.stat(strictSkillPath);
|
|
108
|
+
if (!stats.isDirectory()) {
|
|
109
|
+
throw new error_types_1.StorageError('Skill path in repository archive is not a directory.', {
|
|
110
|
+
sourceName: this.sourceName,
|
|
111
|
+
skillName,
|
|
112
|
+
candidate: strictSkillPath,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
const realSkillPath = await fs.realpath(strictSkillPath);
|
|
116
|
+
this.assertContainedPath(await fs.realpath(skillsRoot), realSkillPath, 'skillName');
|
|
117
|
+
return strictSkillPath;
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
if (error instanceof error_types_1.StorageError || error instanceof error_types_1.ValidationError) {
|
|
121
|
+
throw error;
|
|
122
|
+
}
|
|
123
|
+
if (error.code === 'ENOENT') {
|
|
124
|
+
throw new error_types_1.StorageError('Skill directory was not found in extracted repository tarball.', {
|
|
125
|
+
sourceName: this.sourceName,
|
|
126
|
+
skillName,
|
|
127
|
+
extractedRepoRoot: (0, node_path_1.resolve)(extractedRepoRoot),
|
|
128
|
+
candidate: strictSkillPath,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
throw new error_types_1.StorageError('Failed checking extracted GitHub skill directory.', {
|
|
132
|
+
sourceName: this.sourceName,
|
|
133
|
+
skillName,
|
|
134
|
+
candidate: strictSkillPath,
|
|
135
|
+
cause: error instanceof Error ? error.message : String(error),
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
async listSkillNamesFromExtractedRepo(extractedRepoRoot) {
|
|
140
|
+
const skillsRoot = await this.resolveSkillsRoot(extractedRepoRoot);
|
|
141
|
+
let entries;
|
|
142
|
+
try {
|
|
143
|
+
entries = await fs.readdir(skillsRoot, { withFileTypes: true });
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
throw new error_types_1.StorageError('Failed reading configured skills directory in repository archive.', {
|
|
147
|
+
sourceName: this.sourceName,
|
|
148
|
+
skillsRoot,
|
|
149
|
+
cause: error instanceof Error ? error.message : String(error),
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
return entries
|
|
153
|
+
.filter((entry) => entry.isDirectory() && !entry.name.startsWith('.'))
|
|
154
|
+
.map((entry) => entry.name)
|
|
155
|
+
.sort((left, right) => left.localeCompare(right));
|
|
156
|
+
}
|
|
157
|
+
async resolveSkillsRoot(extractedRepoRoot) {
|
|
158
|
+
const safeExtractedRepoRoot = (0, node_path_1.resolve)(extractedRepoRoot);
|
|
159
|
+
const skillsRoot = (0, node_path_1.resolve)(safeExtractedRepoRoot, ...this.skillsRootSegments);
|
|
160
|
+
this.assertContainedPath(safeExtractedRepoRoot, skillsRoot, 'skillsRoot');
|
|
161
|
+
try {
|
|
162
|
+
const realExtractedRepoRoot = await fs.realpath(safeExtractedRepoRoot);
|
|
163
|
+
const realSkillsRoot = await fs.realpath(skillsRoot);
|
|
164
|
+
this.assertContainedPath(realExtractedRepoRoot, realSkillsRoot, 'skillsRoot');
|
|
165
|
+
const stats = await fs.stat(realSkillsRoot);
|
|
166
|
+
if (!stats.isDirectory()) {
|
|
167
|
+
throw new error_types_1.StorageError('Configured skills root in repository archive is not a directory.', {
|
|
168
|
+
sourceName: this.sourceName,
|
|
169
|
+
skillsRoot,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
return skillsRoot;
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
if (error instanceof error_types_1.StorageError || error instanceof error_types_1.ValidationError) {
|
|
176
|
+
throw error;
|
|
177
|
+
}
|
|
178
|
+
if (error.code === 'ENOENT') {
|
|
179
|
+
throw new error_types_1.StorageError('Configured skills root was not found in repository archive.', {
|
|
180
|
+
sourceName: this.sourceName,
|
|
181
|
+
skillsRoot,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
throw new error_types_1.StorageError('Failed checking configured skills root in repository archive.', {
|
|
185
|
+
sourceName: this.sourceName,
|
|
186
|
+
skillsRoot,
|
|
187
|
+
cause: error instanceof Error ? error.message : String(error),
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
assertContainedPath(rootPath, candidatePath, fieldName) {
|
|
192
|
+
const relativePath = (0, node_path_1.relative)(rootPath, candidatePath);
|
|
193
|
+
if (relativePath === '..' || relativePath.startsWith(`..${node_path_1.sep}`) || (0, node_path_1.isAbsolute)(relativePath)) {
|
|
194
|
+
throw new error_types_1.ValidationError(`Invalid ${fieldName}: resolved path escapes its allowed root.`, {
|
|
195
|
+
fieldName,
|
|
196
|
+
rootPath,
|
|
197
|
+
candidatePath,
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
toSkillManifest(skillName, parsedSkill) {
|
|
202
|
+
const frontmatter = parsedSkill.frontmatter;
|
|
203
|
+
const manifestName = this.pickString(frontmatter, ['name']) ?? skillName;
|
|
204
|
+
const displayName = this.pickString(frontmatter, ['displayName', 'display_name', 'title']);
|
|
205
|
+
const description = this.pickString(frontmatter, ['description', 'summary', 'shortDescription']) ??
|
|
206
|
+
`Skill instructions for ${skillName}`;
|
|
207
|
+
const shortDescription = this.pickString(frontmatter, [
|
|
208
|
+
'shortDescription',
|
|
209
|
+
'short_description',
|
|
210
|
+
'summary',
|
|
211
|
+
]);
|
|
212
|
+
const license = this.pickString(frontmatter, ['license']);
|
|
213
|
+
const compatibility = this.pickString(frontmatter, ['compatibility']);
|
|
214
|
+
const resources = this.pickStringArray(frontmatter, ['resources', 'references']);
|
|
215
|
+
const encodedSkillsRoot = this.skillsRootSegments.map(encodeURIComponent).join('/');
|
|
216
|
+
return {
|
|
217
|
+
name: manifestName,
|
|
218
|
+
displayName,
|
|
219
|
+
description,
|
|
220
|
+
shortDescription,
|
|
221
|
+
license,
|
|
222
|
+
compatibility,
|
|
223
|
+
frontmatter,
|
|
224
|
+
instructionContent: parsedSkill.instructionContent,
|
|
225
|
+
resources,
|
|
226
|
+
sourceUrl: `https://github.com/${this.repoOwner}/${this.repoName}/tree/${encodeURIComponent(this.branch)}/${encodedSkillsRoot}/${encodeURIComponent(skillName)}`,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
exports.GitHubDirectorySkillSourceAdapter = GitHubDirectorySkillSourceAdapter;
|
|
231
|
+
//# sourceMappingURL=github-directory-skill-source.adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-directory-skill-source.adapter.js","sourceRoot":"","sources":["../../../../src/modules/skills/adapters/github-directory-skill-source.adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ export interface GitHubSkillSourceBaseConfig {
|
|
|
8
8
|
userAgent?: string;
|
|
9
9
|
storageRootDir?: string;
|
|
10
10
|
githubToken?: string;
|
|
11
|
+
publicRepoUrl?: string;
|
|
11
12
|
}
|
|
12
13
|
export type { ParsedSkillMarkdown } from './skill-parsing.utils';
|
|
13
14
|
export interface ExtractedRepositoryContext {
|
|
@@ -68,10 +68,10 @@ class GitHubSkillSourceBase {
|
|
|
68
68
|
this.userAgent = config.userAgent ?? DEFAULT_USER_AGENT;
|
|
69
69
|
this.storageRootDir = config.storageRootDir ?? DEFAULT_SKILLS_ROOT;
|
|
70
70
|
this.githubToken = config.githubToken ?? process.env.GITHUB_TOKEN ?? null;
|
|
71
|
-
this.
|
|
72
|
-
this.repoOwner
|
|
73
|
-
|
|
74
|
-
|
|
71
|
+
const defaultRepoUrl = this.repoOwner && this.repoName
|
|
72
|
+
? `https://github.com/${this.repoOwner}/${this.repoName}`
|
|
73
|
+
: 'https://github.com';
|
|
74
|
+
this.repoUrl = config.publicRepoUrl ?? defaultRepoUrl;
|
|
75
75
|
}
|
|
76
76
|
async downloadSkill(skillName, targetPath) {
|
|
77
77
|
const context = await this.prepareExtractedRepository();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-skill-source.base.js","sourceRoot":"","sources":["../../../../src/modules/skills/adapters/github-skill-source.base.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAA4C;AAC5C,qDAAuC;AACvC,qCAA0C;AAC1C,yCAAwD;AACxD,6CAAuC;AACvC,mDAAgD;AAEhD,yCAA2B;AAC3B,oEAAiG;AACjG,2DAA8D;AAC9D,+DAO+B;AAG/B,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,uBAAuB,CAAC,CAAC;AAErD,MAAM,cAAc,GAAG,MAAM,CAAC;AAC9B,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,kBAAkB,GAAG,sBAAsB,CAAC;AAClD,MAAM,mBAAmB,GAAG,IAAA,gBAAI,EAAC,IAAA,iBAAO,GAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"github-skill-source.base.js","sourceRoot":"","sources":["../../../../src/modules/skills/adapters/github-skill-source.base.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,5 +28,6 @@ export declare class SkillDirectoryNotFoundError extends Error {
|
|
|
28
28
|
export declare function parseSkillMarkdown(skillDirectory: string, options?: ParseSkillMarkdownOptions): Promise<ParsedSkillMarkdown | null>;
|
|
29
29
|
export declare function resolveSkillDirectory(extractedRepoRoot: string, skillName: string, options?: ResolveSkillDirectoryOptions): Promise<string>;
|
|
30
30
|
export declare function validatePathSegment(segment: string, fieldName: string): string;
|
|
31
|
+
export declare function validateRepositoryRelativePath(repositoryPath: string, fieldName: string): readonly string[];
|
|
31
32
|
export declare function pickString(frontmatter: Record<string, unknown>, keys: readonly string[]): string | undefined;
|
|
32
33
|
export declare function pickStringArray(frontmatter: Record<string, unknown>, keys: readonly string[]): string[];
|
|
@@ -40,6 +40,7 @@ exports.SkillDirectoryNotFoundError = void 0;
|
|
|
40
40
|
exports.parseSkillMarkdown = parseSkillMarkdown;
|
|
41
41
|
exports.resolveSkillDirectory = resolveSkillDirectory;
|
|
42
42
|
exports.validatePathSegment = validatePathSegment;
|
|
43
|
+
exports.validateRepositoryRelativePath = validateRepositoryRelativePath;
|
|
43
44
|
exports.pickString = pickString;
|
|
44
45
|
exports.pickStringArray = pickStringArray;
|
|
45
46
|
const fs = __importStar(require("node:fs/promises"));
|
|
@@ -47,6 +48,7 @@ const node_path_1 = require("node:path");
|
|
|
47
48
|
const gray_matter_1 = __importDefault(require("gray-matter"));
|
|
48
49
|
const error_types_1 = require("../../../common/errors/error-types");
|
|
49
50
|
const CONTROL_CHAR_REGEX = /[\u0000-\u001f\u007f]/;
|
|
51
|
+
const WINDOWS_ABSOLUTE_PATH_REGEX = /^[A-Za-z]:\//;
|
|
50
52
|
const SAFE_SKILL_SEGMENT_REGEX = /^[A-Za-z0-9_-]+$/;
|
|
51
53
|
const DEFAULT_SKILL_MARKDOWN_FILE = 'SKILL.md';
|
|
52
54
|
const DEFAULT_SKILL_DIRECTORY_CANDIDATES = ['', 'skills', 'library'];
|
|
@@ -129,6 +131,45 @@ function validatePathSegment(segment, fieldName) {
|
|
|
129
131
|
}
|
|
130
132
|
return trimmed;
|
|
131
133
|
}
|
|
134
|
+
function validateRepositoryRelativePath(repositoryPath, fieldName) {
|
|
135
|
+
if (repositoryPath.length === 0) {
|
|
136
|
+
throw new error_types_1.ValidationError(`Invalid ${fieldName}: value cannot be empty.`, { fieldName });
|
|
137
|
+
}
|
|
138
|
+
if (repositoryPath.includes('\\')) {
|
|
139
|
+
throw new error_types_1.ValidationError(`Invalid ${fieldName}: backslashes are not allowed.`, {
|
|
140
|
+
fieldName,
|
|
141
|
+
repositoryPath,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
if ((0, node_path_1.isAbsolute)(repositoryPath) || WINDOWS_ABSOLUTE_PATH_REGEX.test(repositoryPath)) {
|
|
145
|
+
throw new error_types_1.ValidationError(`Invalid ${fieldName}: absolute paths are not allowed.`, {
|
|
146
|
+
fieldName,
|
|
147
|
+
repositoryPath,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
const segments = repositoryPath.split('/');
|
|
151
|
+
for (const segment of segments) {
|
|
152
|
+
if (segment.length === 0) {
|
|
153
|
+
throw new error_types_1.ValidationError(`Invalid ${fieldName}: empty path segments are not allowed.`, {
|
|
154
|
+
fieldName,
|
|
155
|
+
repositoryPath,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
if (segment === '.' || segment === '..') {
|
|
159
|
+
throw new error_types_1.ValidationError(`Invalid ${fieldName}: dot path segments are not allowed.`, {
|
|
160
|
+
fieldName,
|
|
161
|
+
repositoryPath,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
if (CONTROL_CHAR_REGEX.test(segment)) {
|
|
165
|
+
throw new error_types_1.ValidationError(`Invalid ${fieldName}: control characters are not allowed.`, {
|
|
166
|
+
fieldName,
|
|
167
|
+
repositoryPath,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return segments;
|
|
172
|
+
}
|
|
132
173
|
function pickString(frontmatter, keys) {
|
|
133
174
|
for (const key of keys) {
|
|
134
175
|
const value = toStringValue(frontmatter[key]);
|