@octo-cyber/ai 0.5.1 → 0.5.3
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/ai.module.d.ts +1 -0
- package/dist/ai.module.d.ts.map +1 -1
- package/dist/ai.module.js +21 -2
- package/dist/ai.module.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/skill/controllers/skill.controller.d.ts +33 -0
- package/dist/skill/controllers/skill.controller.d.ts.map +1 -0
- package/dist/skill/controllers/skill.controller.js +264 -0
- package/dist/skill/controllers/skill.controller.js.map +1 -0
- package/dist/skill/entities/octo-skill.entity.d.ts +22 -0
- package/dist/skill/entities/octo-skill.entity.d.ts.map +1 -0
- package/dist/skill/entities/octo-skill.entity.js +91 -0
- package/dist/skill/entities/octo-skill.entity.js.map +1 -0
- package/dist/skill/index.d.ts +7 -0
- package/dist/skill/index.d.ts.map +1 -0
- package/dist/skill/index.js +17 -0
- package/dist/skill/index.js.map +1 -0
- package/dist/skill/services/skill-generator.service.d.ts +47 -0
- package/dist/skill/services/skill-generator.service.d.ts.map +1 -0
- package/dist/skill/services/skill-generator.service.js +232 -0
- package/dist/skill/services/skill-generator.service.js.map +1 -0
- package/dist/skill/services/skill-installer.service.d.ts +38 -0
- package/dist/skill/services/skill-installer.service.d.ts.map +1 -0
- package/dist/skill/services/skill-installer.service.js +150 -0
- package/dist/skill/services/skill-installer.service.js.map +1 -0
- package/dist/skill/services/skill-registry.service.d.ts +60 -0
- package/dist/skill/services/skill-registry.service.d.ts.map +1 -0
- package/dist/skill/services/skill-registry.service.js +147 -0
- package/dist/skill/services/skill-registry.service.js.map +1 -0
- package/dist/skill/types.d.ts +45 -0
- package/dist/skill/types.d.ts.map +1 -0
- package/dist/skill/types.js +6 -0
- package/dist/skill/types.js.map +1 -0
- package/package.json +4 -4
- package/web/components/SkillCard.tsx +139 -0
- package/web/components/SkillEditorDialog.tsx +77 -0
- package/web/components/SkillInstallDialog.tsx +134 -0
- package/web/index.ts +2 -0
- package/web/manifest.ts +5 -4
- package/web/messages/en-US.json +53 -0
- package/web/messages/zh-CN.json +53 -0
- package/web/pages/SkillsPage.tsx +206 -0
- package/web/services/skill-service.ts +89 -0
package/dist/ai.module.d.ts
CHANGED
package/dist/ai.module.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.module.d.ts","sourceRoot":"","sources":["../src/ai.module.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"ai.module.d.ts","sourceRoot":"","sources":["../src/ai.module.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,kBAAkB,CAAC;AAkBhE,OAAO,6CAA6C,CAAC;AAErD,eAAO,MAAM,QAAQ,EAAE,OA6CtB,CAAC"}
|
package/dist/ai.module.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AiModule = void 0;
|
|
4
4
|
const core_1 = require("@octo-cyber/core");
|
|
5
|
+
const auth_1 = require("@octo-cyber/auth");
|
|
5
6
|
// CLI integration
|
|
6
7
|
const cli_registry_service_js_1 = require("./cli/cli-registry.service.js");
|
|
7
8
|
const workspace_service_js_1 = require("./cli/workspace.service.js");
|
|
@@ -10,9 +11,16 @@ const gemini_cli_adapter_js_1 = require("./cli/adapters/gemini-cli.adapter.js");
|
|
|
10
11
|
const codex_cli_adapter_js_1 = require("./cli/adapters/codex-cli.adapter.js");
|
|
11
12
|
const antigravity_adapter_js_1 = require("./cli/adapters/antigravity.adapter.js");
|
|
12
13
|
const ai_cli_controller_js_1 = require("./cli/controllers/ai-cli.controller.js");
|
|
14
|
+
// Skill system
|
|
15
|
+
const octo_skill_entity_js_1 = require("./skill/entities/octo-skill.entity.js");
|
|
16
|
+
const skill_registry_service_js_1 = require("./skill/services/skill-registry.service.js");
|
|
17
|
+
const skill_installer_service_js_1 = require("./skill/services/skill-installer.service.js");
|
|
18
|
+
const skill_controller_js_1 = require("./skill/controllers/skill.controller.js");
|
|
19
|
+
// Ensure SkillGeneratorService is registered in DI
|
|
20
|
+
require("./skill/services/skill-generator.service.js");
|
|
13
21
|
exports.AiModule = {
|
|
14
22
|
name: 'ai',
|
|
15
|
-
entities: [],
|
|
23
|
+
entities: [octo_skill_entity_js_1.OctoSkill],
|
|
16
24
|
async initialize(_ctx) {
|
|
17
25
|
// Initialize CLI registry with built-in adapters
|
|
18
26
|
const cliRegistry = core_1.Container.get(cli_registry_service_js_1.CliRegistryService);
|
|
@@ -24,14 +32,25 @@ exports.AiModule = {
|
|
|
24
32
|
const dataDir = process.env.DATA_DIR || './data';
|
|
25
33
|
const workspaceService = core_1.Container.get(workspace_service_js_1.WorkspaceService);
|
|
26
34
|
workspaceService.initialize(dataDir);
|
|
35
|
+
// Initialize skill services
|
|
36
|
+
const skillRegistry = core_1.Container.get(skill_registry_service_js_1.SkillRegistryService);
|
|
37
|
+
skillRegistry.initialize();
|
|
38
|
+
// Ensure installer is available in DI
|
|
39
|
+
core_1.Container.get(skill_installer_service_js_1.SkillInstallerService);
|
|
27
40
|
const logger = core_1.Container.get(core_1.LoggerService);
|
|
28
|
-
logger.info('[AiModule] CLI registry and
|
|
41
|
+
logger.info('[AiModule] CLI registry, workspace, and skill services initialized');
|
|
29
42
|
},
|
|
30
43
|
registerRoutes(app, _ctx) {
|
|
31
44
|
const controllers = [
|
|
32
45
|
core_1.Container.get(ai_cli_controller_js_1.AiCliController),
|
|
33
46
|
];
|
|
34
47
|
(0, core_1.registerControllers)(app, controllers);
|
|
48
|
+
// Skill routes (require auth for install/uninstall/generate)
|
|
49
|
+
const skillControllers = [core_1.Container.get(skill_controller_js_1.SkillController)];
|
|
50
|
+
(0, core_1.registerControllers)(app, skillControllers, {
|
|
51
|
+
module: 'ai',
|
|
52
|
+
middlewares: [(0, auth_1.authMiddleware)()],
|
|
53
|
+
});
|
|
35
54
|
},
|
|
36
55
|
async destroy() {
|
|
37
56
|
// No cleanup needed
|
package/dist/ai.module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.module.js","sourceRoot":"","sources":["../src/ai.module.ts"],"names":[],"mappings":";;;AAAA,2CAAiF;
|
|
1
|
+
{"version":3,"file":"ai.module.js","sourceRoot":"","sources":["../src/ai.module.ts"],"names":[],"mappings":";;;AAAA,2CAAiF;AAEjF,2CAAkD;AAElD,kBAAkB;AAClB,2EAAmE;AACnE,qEAA8D;AAC9D,gFAAwE;AACxE,gFAAwE;AACxE,8EAAsE;AACtE,kFAA2E;AAC3E,iFAAyE;AAEzE,eAAe;AACf,gFAAkE;AAClE,0FAAkF;AAClF,4FAAoF;AACpF,iFAA0E;AAC1E,mDAAmD;AACnD,uDAAqD;AAExC,QAAA,QAAQ,GAAY;IAC/B,IAAI,EAAE,IAAI;IAEV,QAAQ,EAAE,CAAC,gCAAS,CAAC;IAErB,KAAK,CAAC,UAAU,CAAC,IAAoB;QACnC,iDAAiD;QACjD,MAAM,WAAW,GAAG,gBAAS,CAAC,GAAG,CAAC,4CAAkB,CAAC,CAAC;QACtD,WAAW,CAAC,eAAe,CAAC,IAAI,wCAAgB,EAAE,CAAC,CAAC;QACpD,WAAW,CAAC,eAAe,CAAC,IAAI,wCAAgB,EAAE,CAAC,CAAC;QACpD,WAAW,CAAC,eAAe,CAAC,IAAI,sCAAe,EAAE,CAAC,CAAC;QACnD,WAAW,CAAC,eAAe,CAAC,IAAI,2CAAkB,EAAE,CAAC,CAAC;QAEtD,+BAA+B;QAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC;QACjD,MAAM,gBAAgB,GAAG,gBAAS,CAAC,GAAG,CAAC,uCAAgB,CAAC,CAAC;QACzD,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAErC,4BAA4B;QAC5B,MAAM,aAAa,GAAG,gBAAS,CAAC,GAAG,CAAC,gDAAoB,CAAC,CAAC;QAC1D,aAAa,CAAC,UAAU,EAAE,CAAC;QAC3B,sCAAsC;QACtC,gBAAS,CAAC,GAAG,CAAC,kDAAqB,CAAC,CAAC;QAErC,MAAM,MAAM,GAAG,gBAAS,CAAC,GAAG,CAAC,oBAAa,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;IACpF,CAAC;IAED,cAAc,CAAC,GAAG,EAAE,IAAI;QACtB,MAAM,WAAW,GAAG;YAClB,gBAAS,CAAC,GAAG,CAAC,sCAAe,CAAC;SAC/B,CAAC;QACF,IAAA,0BAAmB,EAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAEtC,6DAA6D;QAC7D,MAAM,gBAAgB,GAAG,CAAC,gBAAS,CAAC,GAAG,CAAC,qCAAe,CAAC,CAAC,CAAC;QAC1D,IAAA,0BAAmB,EAAC,GAAG,EAAE,gBAAgB,EAAE;YACzC,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,CAAC,IAAA,qBAAc,GAAE,CAAC;SAChC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO;QACX,oBAAoB;IACtB,CAAC;CACF,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { AiModule } from './ai.module.js';
|
|
2
2
|
export { CliRegistryService, CliExecutorService, WorkspaceService, ClaudeCliAdapter, GeminiCliAdapter, CodexCliAdapter, type CliToolName, type CliToolInfo, type CliExecuteOptions, type CliExecuteResult, type ICliAdapter, type FileInput, type FileOutput, type WorkspaceType, type Workspace, } from './cli/index.js';
|
|
3
3
|
export { AiCliController } from './cli/controllers/ai-cli.controller.js';
|
|
4
|
+
export { OctoSkill, SkillGeneratorService, SkillRegistryService, SkillInstallerService, SkillController, type SkillTarget, type SkillTargetInfo, type SkillSourceType, type SkillGenerateParams, type SkillGenerateResult, type EndpointInfo, } from './skill/index.js';
|
|
4
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,SAAS,GACf,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,SAAS,GACf,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAGzE,OAAO,EACL,SAAS,EACT,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,YAAY,GAClB,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AiCliController = exports.CodexCliAdapter = exports.GeminiCliAdapter = exports.ClaudeCliAdapter = exports.WorkspaceService = exports.CliExecutorService = exports.CliRegistryService = exports.AiModule = void 0;
|
|
3
|
+
exports.SkillController = exports.SkillInstallerService = exports.SkillRegistryService = exports.SkillGeneratorService = exports.OctoSkill = exports.AiCliController = exports.CodexCliAdapter = exports.GeminiCliAdapter = exports.ClaudeCliAdapter = exports.WorkspaceService = exports.CliExecutorService = exports.CliRegistryService = exports.AiModule = void 0;
|
|
4
4
|
var ai_module_js_1 = require("./ai.module.js");
|
|
5
5
|
Object.defineProperty(exports, "AiModule", { enumerable: true, get: function () { return ai_module_js_1.AiModule; } });
|
|
6
6
|
// CLI
|
|
@@ -13,4 +13,11 @@ Object.defineProperty(exports, "GeminiCliAdapter", { enumerable: true, get: func
|
|
|
13
13
|
Object.defineProperty(exports, "CodexCliAdapter", { enumerable: true, get: function () { return index_js_1.CodexCliAdapter; } });
|
|
14
14
|
var ai_cli_controller_js_1 = require("./cli/controllers/ai-cli.controller.js");
|
|
15
15
|
Object.defineProperty(exports, "AiCliController", { enumerable: true, get: function () { return ai_cli_controller_js_1.AiCliController; } });
|
|
16
|
+
// Skill system
|
|
17
|
+
var index_js_2 = require("./skill/index.js");
|
|
18
|
+
Object.defineProperty(exports, "OctoSkill", { enumerable: true, get: function () { return index_js_2.OctoSkill; } });
|
|
19
|
+
Object.defineProperty(exports, "SkillGeneratorService", { enumerable: true, get: function () { return index_js_2.SkillGeneratorService; } });
|
|
20
|
+
Object.defineProperty(exports, "SkillRegistryService", { enumerable: true, get: function () { return index_js_2.SkillRegistryService; } });
|
|
21
|
+
Object.defineProperty(exports, "SkillInstallerService", { enumerable: true, get: function () { return index_js_2.SkillInstallerService; } });
|
|
22
|
+
Object.defineProperty(exports, "SkillController", { enumerable: true, get: function () { return index_js_2.SkillController; } });
|
|
16
23
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,+CAA0C;AAAjC,wGAAA,QAAQ,OAAA;AAEjB,MAAM;AACN,2CAgBwB;AAftB,8GAAA,kBAAkB,OAAA;AAClB,8GAAA,kBAAkB,OAAA;AAClB,4GAAA,gBAAgB,OAAA;AAChB,4GAAA,gBAAgB,OAAA;AAChB,4GAAA,gBAAgB,OAAA;AAChB,2GAAA,eAAe,OAAA;AAYjB,+EAAyE;AAAhE,uHAAA,eAAe,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,+CAA0C;AAAjC,wGAAA,QAAQ,OAAA;AAEjB,MAAM;AACN,2CAgBwB;AAftB,8GAAA,kBAAkB,OAAA;AAClB,8GAAA,kBAAkB,OAAA;AAClB,4GAAA,gBAAgB,OAAA;AAChB,4GAAA,gBAAgB,OAAA;AAChB,4GAAA,gBAAgB,OAAA;AAChB,2GAAA,eAAe,OAAA;AAYjB,+EAAyE;AAAhE,uHAAA,eAAe,OAAA;AAExB,eAAe;AACf,6CAY0B;AAXxB,qGAAA,SAAS,OAAA;AACT,iHAAA,qBAAqB,OAAA;AACrB,gHAAA,oBAAoB,OAAA;AACpB,iHAAA,qBAAqB,OAAA;AACrB,2GAAA,eAAe,OAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Request, Response } from '@octo-cyber/core';
|
|
2
|
+
export declare class SkillController {
|
|
3
|
+
private get registry();
|
|
4
|
+
private get installer();
|
|
5
|
+
/** GET /api/v1/skills — List all skills. */
|
|
6
|
+
list(_req: Request, res: Response): Promise<void>;
|
|
7
|
+
/** GET /api/v1/skills/targets — List available install targets. */
|
|
8
|
+
targets(_req: Request, res: Response): Promise<void>;
|
|
9
|
+
/** GET /api/v1/skills/:id — Get skill details. */
|
|
10
|
+
getById(req: Request, res: Response): Promise<void>;
|
|
11
|
+
/** POST /api/v1/skills/generate — Regenerate skills from RouteRegistry. */
|
|
12
|
+
generate(req: Request, res: Response): Promise<void>;
|
|
13
|
+
/** POST /api/v1/skills — Create a custom skill. */
|
|
14
|
+
create(req: Request, res: Response): Promise<void>;
|
|
15
|
+
/** PUT /api/v1/skills/:id — Update skill. */
|
|
16
|
+
update(req: Request, res: Response): Promise<void>;
|
|
17
|
+
/** PUT /api/v1/skills/:id/toggle — Enable/disable skill. */
|
|
18
|
+
toggle(req: Request, res: Response): Promise<void>;
|
|
19
|
+
/** DELETE /api/v1/skills/:id — Delete skill. */
|
|
20
|
+
deleteSkill(req: Request, res: Response): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* POST /api/v1/skills/:id/install — Install skill to AI tools.
|
|
23
|
+
* Auto-creates an API Key if the user doesn't have one, and embeds it in SKILL.md.
|
|
24
|
+
*/
|
|
25
|
+
install(req: Request, res: Response): Promise<void>;
|
|
26
|
+
/** POST /api/v1/skills/:id/uninstall — Uninstall skill from AI tools. */
|
|
27
|
+
uninstall(req: Request, res: Response): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Replace placeholder API key and base URL in SKILL.md content.
|
|
30
|
+
*/
|
|
31
|
+
private embedApiKeyInContent;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=skill.controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.controller.d.ts","sourceRoot":"","sources":["../../../src/skill/controllers/skill.controller.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAM1D,qBACa,eAAe;IAC1B,OAAO,KAAK,QAAQ,GAEnB;IAED,OAAO,KAAK,SAAS,GAEpB;IAED,4CAA4C;IAKtC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAUvD,mEAAmE;IAK7D,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1D,kDAAkD;IAK5C,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzD,2EAA2E;IAKrE,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAO1D,mDAAmD;IAK7C,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBxD,6CAA6C;IAKvC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAcxD,4DAA4D;IAKtD,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxD,gDAAgD;IAK1C,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAc7D;;;OAGG;IAKG,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAmDzD,yEAAyE;IAKnE,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB3D;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAa7B"}
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.SkillController = void 0;
|
|
13
|
+
const core_1 = require("@octo-cyber/core");
|
|
14
|
+
const skill_registry_service_js_1 = require("../services/skill-registry.service.js");
|
|
15
|
+
const skill_installer_service_js_1 = require("../services/skill-installer.service.js");
|
|
16
|
+
const auth_1 = require("@octo-cyber/auth");
|
|
17
|
+
let SkillController = class SkillController {
|
|
18
|
+
get registry() {
|
|
19
|
+
return core_1.Container.get(skill_registry_service_js_1.SkillRegistryService);
|
|
20
|
+
}
|
|
21
|
+
get installer() {
|
|
22
|
+
return core_1.Container.get(skill_installer_service_js_1.SkillInstallerService);
|
|
23
|
+
}
|
|
24
|
+
/** GET /api/v1/skills — List all skills. */
|
|
25
|
+
async list(_req, res) {
|
|
26
|
+
const skills = await this.registry.listSkills();
|
|
27
|
+
// Enrich with actual install status from filesystem
|
|
28
|
+
const enriched = skills.map((s) => ({
|
|
29
|
+
...s,
|
|
30
|
+
installedTargets: this.installer.getInstalledTargets(s.name),
|
|
31
|
+
}));
|
|
32
|
+
res.json(core_1.ApiResponse.ok(enriched));
|
|
33
|
+
}
|
|
34
|
+
/** GET /api/v1/skills/targets — List available install targets. */
|
|
35
|
+
async targets(_req, res) {
|
|
36
|
+
const targets = this.installer.getTargets();
|
|
37
|
+
res.json(core_1.ApiResponse.ok(targets));
|
|
38
|
+
}
|
|
39
|
+
/** GET /api/v1/skills/:id — Get skill details. */
|
|
40
|
+
async getById(req, res) {
|
|
41
|
+
const skill = await this.registry.getSkill(req.params.id);
|
|
42
|
+
if (!skill)
|
|
43
|
+
throw core_1.AppError.notFound('Skill not found');
|
|
44
|
+
const installedTargets = this.installer.getInstalledTargets(skill.name);
|
|
45
|
+
res.json(core_1.ApiResponse.ok({ ...skill, installedTargets }));
|
|
46
|
+
}
|
|
47
|
+
/** POST /api/v1/skills/generate — Regenerate skills from RouteRegistry. */
|
|
48
|
+
async generate(req, res) {
|
|
49
|
+
const { baseUrl } = req.body;
|
|
50
|
+
const resolvedBaseUrl = baseUrl || `http://localhost:${process.env.PORT || 9988}`;
|
|
51
|
+
const result = await this.registry.regenerateSkills(resolvedBaseUrl);
|
|
52
|
+
res.json(core_1.ApiResponse.ok(result));
|
|
53
|
+
}
|
|
54
|
+
/** POST /api/v1/skills — Create a custom skill. */
|
|
55
|
+
async create(req, res) {
|
|
56
|
+
const { name, description, content } = req.body;
|
|
57
|
+
if (!name?.trim())
|
|
58
|
+
throw core_1.AppError.badRequest('Skill name is required');
|
|
59
|
+
if (!content?.trim())
|
|
60
|
+
throw core_1.AppError.badRequest('Skill content is required');
|
|
61
|
+
const skill = await this.registry.createCustomSkill({
|
|
62
|
+
name: name.trim(),
|
|
63
|
+
description: description?.trim() || name.trim(),
|
|
64
|
+
content: content.trim(),
|
|
65
|
+
});
|
|
66
|
+
res.json(core_1.ApiResponse.ok(skill));
|
|
67
|
+
}
|
|
68
|
+
/** PUT /api/v1/skills/:id — Update skill. */
|
|
69
|
+
async update(req, res) {
|
|
70
|
+
const { name, description, content } = req.body;
|
|
71
|
+
const skill = await this.registry.updateSkill(req.params.id, {
|
|
72
|
+
name,
|
|
73
|
+
description,
|
|
74
|
+
content,
|
|
75
|
+
});
|
|
76
|
+
res.json(core_1.ApiResponse.ok(skill));
|
|
77
|
+
}
|
|
78
|
+
/** PUT /api/v1/skills/:id/toggle — Enable/disable skill. */
|
|
79
|
+
async toggle(req, res) {
|
|
80
|
+
const skill = await this.registry.toggleSkill(req.params.id);
|
|
81
|
+
res.json(core_1.ApiResponse.ok(skill));
|
|
82
|
+
}
|
|
83
|
+
/** DELETE /api/v1/skills/:id — Delete skill. */
|
|
84
|
+
async deleteSkill(req, res) {
|
|
85
|
+
const id = req.params.id;
|
|
86
|
+
// Uninstall from all targets before deleting
|
|
87
|
+
const skill = await this.registry.getSkill(id);
|
|
88
|
+
if (skill) {
|
|
89
|
+
const installed = this.installer.getInstalledTargets(skill.name);
|
|
90
|
+
if (installed.length > 0) {
|
|
91
|
+
this.installer.uninstall(skill.name, installed);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
await this.registry.deleteSkill(id);
|
|
95
|
+
res.json(core_1.ApiResponse.ok(null));
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* POST /api/v1/skills/:id/install — Install skill to AI tools.
|
|
99
|
+
* Auto-creates an API Key if the user doesn't have one, and embeds it in SKILL.md.
|
|
100
|
+
*/
|
|
101
|
+
async install(req, res) {
|
|
102
|
+
if (!req.user)
|
|
103
|
+
throw core_1.AppError.unauthorized();
|
|
104
|
+
const { targets, baseUrl, apiKeyId } = req.body;
|
|
105
|
+
if (!targets?.length)
|
|
106
|
+
throw core_1.AppError.badRequest('At least one target is required');
|
|
107
|
+
const skill = await this.registry.getSkill(req.params.id);
|
|
108
|
+
if (!skill)
|
|
109
|
+
throw core_1.AppError.notFound('Skill not found');
|
|
110
|
+
// Resolve API Key — use provided one, or auto-create
|
|
111
|
+
const apiKeyService = core_1.Container.get(auth_1.ApiKeyService);
|
|
112
|
+
let fullKey;
|
|
113
|
+
if (apiKeyId) {
|
|
114
|
+
// User provided an existing key — we can't retrieve the full key,
|
|
115
|
+
// so the skill content should already have the key embedded.
|
|
116
|
+
// For new installs, users should let the system auto-create.
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
// Auto-create a new API Key for this skill installation
|
|
120
|
+
const result = await apiKeyService.create({
|
|
121
|
+
name: `Skill: ${skill.name}`,
|
|
122
|
+
userId: req.user.userId,
|
|
123
|
+
scopes: null,
|
|
124
|
+
expiresAt: null,
|
|
125
|
+
});
|
|
126
|
+
fullKey = result.fullKey;
|
|
127
|
+
}
|
|
128
|
+
// If we have a key, re-render the content with the key embedded
|
|
129
|
+
let content = skill.content;
|
|
130
|
+
if (fullKey) {
|
|
131
|
+
const resolvedBaseUrl = baseUrl || `http://localhost:${process.env.PORT || 9988}`;
|
|
132
|
+
content = this.embedApiKeyInContent(content, fullKey, resolvedBaseUrl);
|
|
133
|
+
}
|
|
134
|
+
const result = this.installer.install(skill.name, content, targets);
|
|
135
|
+
// Update install targets in DB
|
|
136
|
+
const allInstalled = this.installer.getInstalledTargets(skill.name);
|
|
137
|
+
await this.registry.updateInstallTargets(skill.id, allInstalled);
|
|
138
|
+
res.json(core_1.ApiResponse.ok({
|
|
139
|
+
...result,
|
|
140
|
+
apiKeyCreated: !!fullKey,
|
|
141
|
+
}));
|
|
142
|
+
}
|
|
143
|
+
/** POST /api/v1/skills/:id/uninstall — Uninstall skill from AI tools. */
|
|
144
|
+
async uninstall(req, res) {
|
|
145
|
+
const { targets } = req.body;
|
|
146
|
+
if (!targets?.length)
|
|
147
|
+
throw core_1.AppError.badRequest('At least one target is required');
|
|
148
|
+
const skill = await this.registry.getSkill(req.params.id);
|
|
149
|
+
if (!skill)
|
|
150
|
+
throw core_1.AppError.notFound('Skill not found');
|
|
151
|
+
const result = this.installer.uninstall(skill.name, targets);
|
|
152
|
+
// Update install targets in DB
|
|
153
|
+
const allInstalled = this.installer.getInstalledTargets(skill.name);
|
|
154
|
+
await this.registry.updateInstallTargets(skill.id, allInstalled);
|
|
155
|
+
res.json(core_1.ApiResponse.ok(result));
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Replace placeholder API key and base URL in SKILL.md content.
|
|
159
|
+
*/
|
|
160
|
+
embedApiKeyInContent(content, apiKey, baseUrl) {
|
|
161
|
+
let result = content;
|
|
162
|
+
// Replace auth header placeholders
|
|
163
|
+
result = result.replace(/Bearer <YOUR_API_KEY>/g, `Bearer ${apiKey}`);
|
|
164
|
+
result = result.replace(/Bearer octo_sk_[a-f0-9]+/g, `Bearer ${apiKey}`);
|
|
165
|
+
// Ensure base URL is correct
|
|
166
|
+
result = result.replace(/http:\/\/localhost:\d+/g, baseUrl);
|
|
167
|
+
return result;
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
exports.SkillController = SkillController;
|
|
171
|
+
__decorate([
|
|
172
|
+
(0, core_1.Get)('/', {
|
|
173
|
+
summary: 'Skill 列表',
|
|
174
|
+
tags: ['AI', 'Skill'],
|
|
175
|
+
}),
|
|
176
|
+
__metadata("design:type", Function),
|
|
177
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
178
|
+
__metadata("design:returntype", Promise)
|
|
179
|
+
], SkillController.prototype, "list", null);
|
|
180
|
+
__decorate([
|
|
181
|
+
(0, core_1.Get)('/targets', {
|
|
182
|
+
summary: '安装目标列表',
|
|
183
|
+
tags: ['AI', 'Skill'],
|
|
184
|
+
}),
|
|
185
|
+
__metadata("design:type", Function),
|
|
186
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
187
|
+
__metadata("design:returntype", Promise)
|
|
188
|
+
], SkillController.prototype, "targets", null);
|
|
189
|
+
__decorate([
|
|
190
|
+
(0, core_1.Get)('/:id', {
|
|
191
|
+
summary: 'Skill 详情',
|
|
192
|
+
tags: ['AI', 'Skill'],
|
|
193
|
+
}),
|
|
194
|
+
__metadata("design:type", Function),
|
|
195
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
196
|
+
__metadata("design:returntype", Promise)
|
|
197
|
+
], SkillController.prototype, "getById", null);
|
|
198
|
+
__decorate([
|
|
199
|
+
(0, core_1.Post)('/generate', {
|
|
200
|
+
summary: '生成/更新 Skills',
|
|
201
|
+
tags: ['AI', 'Skill'],
|
|
202
|
+
}),
|
|
203
|
+
__metadata("design:type", Function),
|
|
204
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
205
|
+
__metadata("design:returntype", Promise)
|
|
206
|
+
], SkillController.prototype, "generate", null);
|
|
207
|
+
__decorate([
|
|
208
|
+
(0, core_1.Post)('/', {
|
|
209
|
+
summary: '创建自定义 Skill',
|
|
210
|
+
tags: ['AI', 'Skill'],
|
|
211
|
+
}),
|
|
212
|
+
__metadata("design:type", Function),
|
|
213
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
214
|
+
__metadata("design:returntype", Promise)
|
|
215
|
+
], SkillController.prototype, "create", null);
|
|
216
|
+
__decorate([
|
|
217
|
+
(0, core_1.Put)('/:id', {
|
|
218
|
+
summary: '更新 Skill',
|
|
219
|
+
tags: ['AI', 'Skill'],
|
|
220
|
+
}),
|
|
221
|
+
__metadata("design:type", Function),
|
|
222
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
223
|
+
__metadata("design:returntype", Promise)
|
|
224
|
+
], SkillController.prototype, "update", null);
|
|
225
|
+
__decorate([
|
|
226
|
+
(0, core_1.Put)('/:id/toggle', {
|
|
227
|
+
summary: '启用/禁用 Skill',
|
|
228
|
+
tags: ['AI', 'Skill'],
|
|
229
|
+
}),
|
|
230
|
+
__metadata("design:type", Function),
|
|
231
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
232
|
+
__metadata("design:returntype", Promise)
|
|
233
|
+
], SkillController.prototype, "toggle", null);
|
|
234
|
+
__decorate([
|
|
235
|
+
(0, core_1.Delete)('/:id', {
|
|
236
|
+
summary: '删除 Skill',
|
|
237
|
+
tags: ['AI', 'Skill'],
|
|
238
|
+
}),
|
|
239
|
+
__metadata("design:type", Function),
|
|
240
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
241
|
+
__metadata("design:returntype", Promise)
|
|
242
|
+
], SkillController.prototype, "deleteSkill", null);
|
|
243
|
+
__decorate([
|
|
244
|
+
(0, core_1.Post)('/:id/install', {
|
|
245
|
+
summary: '安装 Skill 到 AI 工具',
|
|
246
|
+
tags: ['AI', 'Skill'],
|
|
247
|
+
}),
|
|
248
|
+
__metadata("design:type", Function),
|
|
249
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
250
|
+
__metadata("design:returntype", Promise)
|
|
251
|
+
], SkillController.prototype, "install", null);
|
|
252
|
+
__decorate([
|
|
253
|
+
(0, core_1.Post)('/:id/uninstall', {
|
|
254
|
+
summary: '从 AI 工具卸载 Skill',
|
|
255
|
+
tags: ['AI', 'Skill'],
|
|
256
|
+
}),
|
|
257
|
+
__metadata("design:type", Function),
|
|
258
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
259
|
+
__metadata("design:returntype", Promise)
|
|
260
|
+
], SkillController.prototype, "uninstall", null);
|
|
261
|
+
exports.SkillController = SkillController = __decorate([
|
|
262
|
+
(0, core_1.Controller)('/api/v1/skills', { name: 'Skill 管理' })
|
|
263
|
+
], SkillController);
|
|
264
|
+
//# sourceMappingURL=skill.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.controller.js","sourceRoot":"","sources":["../../../src/skill/controllers/skill.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare class OctoSkill {
|
|
2
|
+
id: string;
|
|
3
|
+
/** Skill name in kebab-case (e.g. 'octo-auth-api'). */
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
/** Source module name (e.g. 'auth', 'erp'). */
|
|
7
|
+
sourceModule: string;
|
|
8
|
+
/** 'module' = auto-generated from RouteRegistry, 'custom' = user-created. */
|
|
9
|
+
sourceType: 'module' | 'custom';
|
|
10
|
+
/** Full SKILL.md content. */
|
|
11
|
+
content: string;
|
|
12
|
+
version: string;
|
|
13
|
+
isEnabled: boolean;
|
|
14
|
+
/** Whether the user has manually edited the content (prevents auto-regeneration overwrite). */
|
|
15
|
+
isEdited: boolean;
|
|
16
|
+
/** JSON array of targets where this skill is installed (e.g. '["claude","cursor"]'). */
|
|
17
|
+
installTargets: string | null;
|
|
18
|
+
createdAt: Date;
|
|
19
|
+
updatedAt: Date;
|
|
20
|
+
lastInstalledAt: Date | null;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=octo-skill.entity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"octo-skill.entity.d.ts","sourceRoot":"","sources":["../../../src/skill/entities/octo-skill.entity.ts"],"names":[],"mappings":"AAQA,qBACa,SAAS;IAEpB,EAAE,EAAG,MAAM,CAAC;IAEZ,uDAAuD;IAEvD,IAAI,EAAG,MAAM,CAAC;IAGd,WAAW,EAAG,MAAM,CAAC;IAErB,+CAA+C;IAE/C,YAAY,EAAG,MAAM,CAAC;IAEtB,6EAA6E;IAE7E,UAAU,EAAG,QAAQ,GAAG,QAAQ,CAAC;IAEjC,6BAA6B;IAE7B,OAAO,EAAG,MAAM,CAAC;IAGjB,OAAO,EAAG,MAAM,CAAC;IAGjB,SAAS,EAAG,OAAO,CAAC;IAEpB,+FAA+F;IAE/F,QAAQ,EAAG,OAAO,CAAC;IAEnB,wFAAwF;IAExF,cAAc,EAAG,MAAM,GAAG,IAAI,CAAC;IAG/B,SAAS,EAAG,IAAI,CAAC;IAGjB,SAAS,EAAG,IAAI,CAAC;IAGjB,eAAe,EAAG,IAAI,GAAG,IAAI,CAAC;CAC/B"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.OctoSkill = void 0;
|
|
13
|
+
const core_1 = require("@octo-cyber/core");
|
|
14
|
+
let OctoSkill = class OctoSkill {
|
|
15
|
+
id;
|
|
16
|
+
/** Skill name in kebab-case (e.g. 'octo-auth-api'). */
|
|
17
|
+
name;
|
|
18
|
+
description;
|
|
19
|
+
/** Source module name (e.g. 'auth', 'erp'). */
|
|
20
|
+
sourceModule;
|
|
21
|
+
/** 'module' = auto-generated from RouteRegistry, 'custom' = user-created. */
|
|
22
|
+
sourceType;
|
|
23
|
+
/** Full SKILL.md content. */
|
|
24
|
+
content;
|
|
25
|
+
version;
|
|
26
|
+
isEnabled;
|
|
27
|
+
/** Whether the user has manually edited the content (prevents auto-regeneration overwrite). */
|
|
28
|
+
isEdited;
|
|
29
|
+
/** JSON array of targets where this skill is installed (e.g. '["claude","cursor"]'). */
|
|
30
|
+
installTargets;
|
|
31
|
+
createdAt;
|
|
32
|
+
updatedAt;
|
|
33
|
+
lastInstalledAt;
|
|
34
|
+
};
|
|
35
|
+
exports.OctoSkill = OctoSkill;
|
|
36
|
+
__decorate([
|
|
37
|
+
(0, core_1.PrimaryGeneratedColumn)('uuid'),
|
|
38
|
+
__metadata("design:type", String)
|
|
39
|
+
], OctoSkill.prototype, "id", void 0);
|
|
40
|
+
__decorate([
|
|
41
|
+
(0, core_1.Column)({ type: 'varchar', length: 128, unique: true }),
|
|
42
|
+
__metadata("design:type", String)
|
|
43
|
+
], OctoSkill.prototype, "name", void 0);
|
|
44
|
+
__decorate([
|
|
45
|
+
(0, core_1.Column)({ type: 'varchar', length: 256 }),
|
|
46
|
+
__metadata("design:type", String)
|
|
47
|
+
], OctoSkill.prototype, "description", void 0);
|
|
48
|
+
__decorate([
|
|
49
|
+
(0, core_1.Column)({ type: 'varchar', length: 64, name: 'source_module' }),
|
|
50
|
+
__metadata("design:type", String)
|
|
51
|
+
], OctoSkill.prototype, "sourceModule", void 0);
|
|
52
|
+
__decorate([
|
|
53
|
+
(0, core_1.Column)({ type: 'varchar', length: 16, default: 'module', name: 'source_type' }),
|
|
54
|
+
__metadata("design:type", String)
|
|
55
|
+
], OctoSkill.prototype, "sourceType", void 0);
|
|
56
|
+
__decorate([
|
|
57
|
+
(0, core_1.Column)({ type: 'text' }),
|
|
58
|
+
__metadata("design:type", String)
|
|
59
|
+
], OctoSkill.prototype, "content", void 0);
|
|
60
|
+
__decorate([
|
|
61
|
+
(0, core_1.Column)({ type: 'varchar', length: 16, default: '1.0' }),
|
|
62
|
+
__metadata("design:type", String)
|
|
63
|
+
], OctoSkill.prototype, "version", void 0);
|
|
64
|
+
__decorate([
|
|
65
|
+
(0, core_1.Column)({ type: 'boolean', default: true, name: 'is_enabled' }),
|
|
66
|
+
__metadata("design:type", Boolean)
|
|
67
|
+
], OctoSkill.prototype, "isEnabled", void 0);
|
|
68
|
+
__decorate([
|
|
69
|
+
(0, core_1.Column)({ type: 'boolean', default: false, name: 'is_edited' }),
|
|
70
|
+
__metadata("design:type", Boolean)
|
|
71
|
+
], OctoSkill.prototype, "isEdited", void 0);
|
|
72
|
+
__decorate([
|
|
73
|
+
(0, core_1.Column)({ type: 'text', nullable: true, name: 'install_targets' }),
|
|
74
|
+
__metadata("design:type", Object)
|
|
75
|
+
], OctoSkill.prototype, "installTargets", void 0);
|
|
76
|
+
__decorate([
|
|
77
|
+
(0, core_1.CreateDateColumn)({ name: 'created_at' }),
|
|
78
|
+
__metadata("design:type", Date)
|
|
79
|
+
], OctoSkill.prototype, "createdAt", void 0);
|
|
80
|
+
__decorate([
|
|
81
|
+
(0, core_1.UpdateDateColumn)({ name: 'updated_at' }),
|
|
82
|
+
__metadata("design:type", Date)
|
|
83
|
+
], OctoSkill.prototype, "updatedAt", void 0);
|
|
84
|
+
__decorate([
|
|
85
|
+
(0, core_1.Column)({ type: 'datetime', nullable: true, name: 'last_installed_at' }),
|
|
86
|
+
__metadata("design:type", Object)
|
|
87
|
+
], OctoSkill.prototype, "lastInstalledAt", void 0);
|
|
88
|
+
exports.OctoSkill = OctoSkill = __decorate([
|
|
89
|
+
(0, core_1.Entity)('octo_skill')
|
|
90
|
+
], OctoSkill);
|
|
91
|
+
//# sourceMappingURL=octo-skill.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"octo-skill.entity.js","sourceRoot":"","sources":["../../../src/skill/entities/octo-skill.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAM0B;AAGnB,IAAM,SAAS,GAAf,MAAM,SAAS;IAEpB,EAAE,CAAU;IAEZ,uDAAuD;IAEvD,IAAI,CAAU;IAGd,WAAW,CAAU;IAErB,+CAA+C;IAE/C,YAAY,CAAU;IAEtB,6EAA6E;IAE7E,UAAU,CAAuB;IAEjC,6BAA6B;IAE7B,OAAO,CAAU;IAGjB,OAAO,CAAU;IAGjB,SAAS,CAAW;IAEpB,+FAA+F;IAE/F,QAAQ,CAAW;IAEnB,wFAAwF;IAExF,cAAc,CAAiB;IAG/B,SAAS,CAAQ;IAGjB,SAAS,CAAQ;IAGjB,eAAe,CAAe;CAC/B,CAAA;AA7CY,8BAAS;AAEpB;IADC,IAAA,6BAAsB,EAAC,MAAM,CAAC;;qCACnB;AAIZ;IADC,IAAA,aAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;;uCACzC;AAGd;IADC,IAAA,aAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;8CACpB;AAIrB;IADC,IAAA,aAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;;+CACzC;AAItB;IADC,IAAA,aAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;;6CAC/C;AAIjC;IADC,IAAA,aAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;0CACR;AAGjB;IADC,IAAA,aAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;;0CACvC;AAGjB;IADC,IAAA,aAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;;4CAC3C;AAIpB;IADC,IAAA,aAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;;2CAC5C;AAInB;IADC,IAAA,aAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;;iDACnC;AAG/B;IADC,IAAA,uBAAgB,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;8BAC7B,IAAI;4CAAC;AAGjB;IADC,IAAA,uBAAgB,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;8BAC7B,IAAI;4CAAC;AAGjB;IADC,IAAA,aAAM,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;;kDAC1C;oBA5CnB,SAAS;IADrB,IAAA,aAAM,EAAC,YAAY,CAAC;GACR,SAAS,CA6CrB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { OctoSkill } from './entities/octo-skill.entity.js';
|
|
2
|
+
export { SkillGeneratorService } from './services/skill-generator.service.js';
|
|
3
|
+
export { SkillRegistryService } from './services/skill-registry.service.js';
|
|
4
|
+
export { SkillInstallerService } from './services/skill-installer.service.js';
|
|
5
|
+
export { SkillController } from './controllers/skill.controller.js';
|
|
6
|
+
export type { SkillTarget, SkillTargetInfo, SkillSourceType, SkillGenerateParams, SkillGenerateResult, EndpointInfo, } from './types.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skill/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAG5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAG9E,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAGpE,YAAY,EACV,WAAW,EACX,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,GACb,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SkillController = exports.SkillInstallerService = exports.SkillRegistryService = exports.SkillGeneratorService = exports.OctoSkill = void 0;
|
|
4
|
+
// Entities
|
|
5
|
+
var octo_skill_entity_js_1 = require("./entities/octo-skill.entity.js");
|
|
6
|
+
Object.defineProperty(exports, "OctoSkill", { enumerable: true, get: function () { return octo_skill_entity_js_1.OctoSkill; } });
|
|
7
|
+
// Services
|
|
8
|
+
var skill_generator_service_js_1 = require("./services/skill-generator.service.js");
|
|
9
|
+
Object.defineProperty(exports, "SkillGeneratorService", { enumerable: true, get: function () { return skill_generator_service_js_1.SkillGeneratorService; } });
|
|
10
|
+
var skill_registry_service_js_1 = require("./services/skill-registry.service.js");
|
|
11
|
+
Object.defineProperty(exports, "SkillRegistryService", { enumerable: true, get: function () { return skill_registry_service_js_1.SkillRegistryService; } });
|
|
12
|
+
var skill_installer_service_js_1 = require("./services/skill-installer.service.js");
|
|
13
|
+
Object.defineProperty(exports, "SkillInstallerService", { enumerable: true, get: function () { return skill_installer_service_js_1.SkillInstallerService; } });
|
|
14
|
+
// Controllers
|
|
15
|
+
var skill_controller_js_1 = require("./controllers/skill.controller.js");
|
|
16
|
+
Object.defineProperty(exports, "SkillController", { enumerable: true, get: function () { return skill_controller_js_1.SkillController; } });
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skill/index.ts"],"names":[],"mappings":";;;AAAA,WAAW;AACX,wEAA4D;AAAnD,iHAAA,SAAS,OAAA;AAElB,WAAW;AACX,oFAA8E;AAArE,mIAAA,qBAAqB,OAAA;AAC9B,kFAA4E;AAAnE,iIAAA,oBAAoB,OAAA;AAC7B,oFAA8E;AAArE,mIAAA,qBAAqB,OAAA;AAE9B,cAAc;AACd,yEAAoE;AAA3D,sHAAA,eAAe,OAAA"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { SkillGenerateParams, SkillGenerateResult } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generates SKILL.md content from RouteRegistry metadata.
|
|
4
|
+
*
|
|
5
|
+
* Generation granularity: one module → one Skill file.
|
|
6
|
+
* Handles sparse metadata by inferring summaries from multiple sources.
|
|
7
|
+
*/
|
|
8
|
+
export declare class SkillGeneratorService {
|
|
9
|
+
/**
|
|
10
|
+
* Generate a skill for a specific module.
|
|
11
|
+
*/
|
|
12
|
+
generateForModule(params: SkillGenerateParams): SkillGenerateResult;
|
|
13
|
+
/**
|
|
14
|
+
* Generate skills for all registered modules.
|
|
15
|
+
*/
|
|
16
|
+
generateAll(baseUrl: string, apiKey?: string): SkillGenerateResult[];
|
|
17
|
+
/**
|
|
18
|
+
* Convert a RegisteredRoute to a simpler EndpointInfo,
|
|
19
|
+
* inferring summary if not present.
|
|
20
|
+
*/
|
|
21
|
+
private routeToEndpoint;
|
|
22
|
+
/**
|
|
23
|
+
* Infer a human-readable summary when route.summary is missing.
|
|
24
|
+
*
|
|
25
|
+
* Priority:
|
|
26
|
+
* 1. controllerMeta.name + HTTP method (e.g. "物料管理" + POST → "创建物料")
|
|
27
|
+
* 2. permission code (e.g. "erp:material:create" → "Create material")
|
|
28
|
+
* 3. handlerName camelCase split (e.g. "createMaterial" → "Create material")
|
|
29
|
+
* 4. HTTP method + path last segment (e.g. POST /materials → "Create materials")
|
|
30
|
+
*/
|
|
31
|
+
private inferSummary;
|
|
32
|
+
private methodToChineseVerb;
|
|
33
|
+
private methodToEnglishVerb;
|
|
34
|
+
private camelToWords;
|
|
35
|
+
private capitalizeFirst;
|
|
36
|
+
private formatModuleName;
|
|
37
|
+
/**
|
|
38
|
+
* Group endpoints by controller name for organized output.
|
|
39
|
+
*/
|
|
40
|
+
private groupByController;
|
|
41
|
+
private buildDescription;
|
|
42
|
+
/**
|
|
43
|
+
* Render the full SKILL.md content.
|
|
44
|
+
*/
|
|
45
|
+
private renderSkillMd;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=skill-generator.service.d.ts.map
|