@octo-cyber/ai 0.5.6 → 0.5.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/dist/BranchDecisionEngine.d.ts +73 -0
  2. package/dist/BranchDecisionEngine.d.ts.map +1 -0
  3. package/dist/BranchDecisionEngine.js +195 -0
  4. package/dist/BranchDecisionEngine.js.map +1 -0
  5. package/dist/agent/coding-tools.d.ts +7 -0
  6. package/dist/agent/coding-tools.d.ts.map +1 -0
  7. package/dist/agent/coding-tools.js +181 -0
  8. package/dist/agent/coding-tools.js.map +1 -0
  9. package/dist/ai.module.d.ts +16 -0
  10. package/dist/ai.module.d.ts.map +1 -0
  11. package/dist/ai.module.js +106 -0
  12. package/dist/ai.module.js.map +1 -0
  13. package/dist/cli/adapters/antigravity.adapter.d.ts +31 -0
  14. package/dist/cli/adapters/antigravity.adapter.d.ts.map +1 -0
  15. package/dist/cli/adapters/antigravity.adapter.js +248 -0
  16. package/dist/cli/adapters/antigravity.adapter.js.map +1 -0
  17. package/dist/cli/adapters/claude-cli.adapter.d.ts +23 -0
  18. package/dist/cli/adapters/claude-cli.adapter.d.ts.map +1 -0
  19. package/dist/cli/adapters/claude-cli.adapter.js +81 -0
  20. package/dist/cli/adapters/claude-cli.adapter.js.map +1 -0
  21. package/dist/cli/adapters/cli-proxy-api.adapter.d.ts +32 -0
  22. package/dist/cli/adapters/cli-proxy-api.adapter.d.ts.map +1 -0
  23. package/dist/cli/adapters/cli-proxy-api.adapter.js +239 -0
  24. package/dist/cli/adapters/cli-proxy-api.adapter.js.map +1 -0
  25. package/dist/cli/adapters/codex-cli.adapter.d.ts +22 -0
  26. package/dist/cli/adapters/codex-cli.adapter.d.ts.map +1 -0
  27. package/dist/cli/adapters/codex-cli.adapter.js +76 -0
  28. package/dist/cli/adapters/codex-cli.adapter.js.map +1 -0
  29. package/dist/cli/adapters/detect-cli.d.ts +11 -0
  30. package/dist/cli/adapters/detect-cli.d.ts.map +1 -0
  31. package/dist/cli/adapters/detect-cli.js +40 -0
  32. package/dist/cli/adapters/detect-cli.js.map +1 -0
  33. package/dist/cli/adapters/gemini-cli.adapter.d.ts +21 -0
  34. package/dist/cli/adapters/gemini-cli.adapter.d.ts.map +1 -0
  35. package/dist/cli/adapters/gemini-cli.adapter.js +72 -0
  36. package/dist/cli/adapters/gemini-cli.adapter.js.map +1 -0
  37. package/dist/cli/adapters/index.d.ts +4 -0
  38. package/dist/cli/adapters/index.d.ts.map +1 -0
  39. package/dist/cli/adapters/index.js +10 -0
  40. package/dist/cli/adapters/index.js.map +1 -0
  41. package/dist/cli/cli-executor.service.d.ts +25 -0
  42. package/dist/cli/cli-executor.service.d.ts.map +1 -0
  43. package/dist/cli/cli-executor.service.js +170 -0
  44. package/dist/cli/cli-executor.service.js.map +1 -0
  45. package/dist/cli/cli-registry.service.d.ts +38 -0
  46. package/dist/cli/cli-registry.service.d.ts.map +1 -0
  47. package/dist/cli/cli-registry.service.js +114 -0
  48. package/dist/cli/cli-registry.service.js.map +1 -0
  49. package/dist/cli/controllers/ai-cli.controller.d.ts +40 -0
  50. package/dist/cli/controllers/ai-cli.controller.d.ts.map +1 -0
  51. package/dist/cli/controllers/ai-cli.controller.js +208 -0
  52. package/dist/cli/controllers/ai-cli.controller.js.map +1 -0
  53. package/dist/cli/index.d.ts +8 -0
  54. package/dist/cli/index.d.ts.map +1 -0
  55. package/dist/cli/index.js +17 -0
  56. package/dist/cli/index.js.map +1 -0
  57. package/dist/cli/types.d.ts +153 -0
  58. package/dist/cli/types.d.ts.map +1 -0
  59. package/dist/cli/types.js +9 -0
  60. package/dist/cli/types.js.map +1 -0
  61. package/dist/cli/workspace.service.d.ts +42 -0
  62. package/dist/cli/workspace.service.d.ts.map +1 -0
  63. package/dist/cli/workspace.service.js +249 -0
  64. package/dist/cli/workspace.service.js.map +1 -0
  65. package/dist/index.d.ts +10 -0
  66. package/dist/index.d.ts.map +1 -0
  67. package/dist/index.js +44 -0
  68. package/dist/index.js.map +1 -0
  69. package/dist/session/claude-code-session-manager.service.d.ts +28 -0
  70. package/dist/session/claude-code-session-manager.service.d.ts.map +1 -0
  71. package/dist/session/claude-code-session-manager.service.js +177 -0
  72. package/dist/session/claude-code-session-manager.service.js.map +1 -0
  73. package/dist/skill/controllers/skill-market.controller.d.ts +18 -0
  74. package/dist/skill/controllers/skill-market.controller.d.ts.map +1 -0
  75. package/dist/skill/controllers/skill-market.controller.js +128 -0
  76. package/dist/skill/controllers/skill-market.controller.js.map +1 -0
  77. package/dist/skill/controllers/skill.controller.d.ts +37 -0
  78. package/dist/skill/controllers/skill.controller.d.ts.map +1 -0
  79. package/dist/skill/controllers/skill.controller.js +295 -0
  80. package/dist/skill/controllers/skill.controller.js.map +1 -0
  81. package/dist/skill/entities/octo-skill.entity.d.ts +22 -0
  82. package/dist/skill/entities/octo-skill.entity.d.ts.map +1 -0
  83. package/dist/skill/entities/octo-skill.entity.js +91 -0
  84. package/dist/skill/entities/octo-skill.entity.js.map +1 -0
  85. package/dist/skill/index.d.ts +9 -0
  86. package/dist/skill/index.d.ts.map +1 -0
  87. package/dist/skill/index.js +21 -0
  88. package/dist/skill/index.js.map +1 -0
  89. package/dist/skill/services/skill-generator.service.d.ts +47 -0
  90. package/dist/skill/services/skill-generator.service.d.ts.map +1 -0
  91. package/dist/skill/services/skill-generator.service.js +232 -0
  92. package/dist/skill/services/skill-generator.service.js.map +1 -0
  93. package/dist/skill/services/skill-installer.service.d.ts +65 -0
  94. package/dist/skill/services/skill-installer.service.d.ts.map +1 -0
  95. package/dist/skill/services/skill-installer.service.js +258 -0
  96. package/dist/skill/services/skill-installer.service.js.map +1 -0
  97. package/dist/skill/services/skill-market.service.d.ts +60 -0
  98. package/dist/skill/services/skill-market.service.d.ts.map +1 -0
  99. package/dist/skill/services/skill-market.service.js +244 -0
  100. package/dist/skill/services/skill-market.service.js.map +1 -0
  101. package/dist/skill/services/skill-registry.service.d.ts +61 -0
  102. package/dist/skill/services/skill-registry.service.d.ts.map +1 -0
  103. package/dist/skill/services/skill-registry.service.js +159 -0
  104. package/dist/skill/services/skill-registry.service.js.map +1 -0
  105. package/dist/skill/types.d.ts +76 -0
  106. package/dist/skill/types.d.ts.map +1 -0
  107. package/dist/skill/types.js +6 -0
  108. package/dist/skill/types.js.map +1 -0
  109. package/dist/src/agent/agent-run-persistence.service.d.ts +82 -0
  110. package/dist/src/agent/agent-run-persistence.service.d.ts.map +1 -0
  111. package/dist/src/agent/agent-run-persistence.service.js +171 -0
  112. package/dist/src/agent/agent-run-persistence.service.js.map +1 -0
  113. package/dist/src/agent/agent-run-step.entity.d.ts +23 -0
  114. package/dist/src/agent/agent-run-step.entity.d.ts.map +1 -0
  115. package/dist/src/agent/agent-run-step.entity.js +76 -0
  116. package/dist/src/agent/agent-run-step.entity.js.map +1 -0
  117. package/dist/src/skill/services/skill-market-utils.d.ts +25 -0
  118. package/dist/src/skill/services/skill-market-utils.d.ts.map +1 -0
  119. package/dist/src/skill/services/skill-market-utils.js +22 -0
  120. package/dist/src/skill/services/skill-market-utils.js.map +1 -0
  121. package/dist/src/workflow-design/WorkflowAssembler.d.ts +10 -0
  122. package/dist/src/workflow-design/WorkflowAssembler.d.ts.map +1 -0
  123. package/dist/src/workflow-design/WorkflowAssembler.js +81 -0
  124. package/dist/src/workflow-design/WorkflowAssembler.js.map +1 -0
  125. package/dist/src/workflow-design/n8n-node-templates-data.d.ts +4 -0
  126. package/dist/src/workflow-design/n8n-node-templates-data.d.ts.map +1 -0
  127. package/dist/src/workflow-design/n8n-node-templates-data.js +290 -0
  128. package/dist/src/workflow-design/n8n-node-templates-data.js.map +1 -0
  129. package/dist/workflow-design/DocumentExtractorAgent.d.ts +47 -0
  130. package/dist/workflow-design/DocumentExtractorAgent.d.ts.map +1 -0
  131. package/dist/workflow-design/DocumentExtractorAgent.js +118 -0
  132. package/dist/workflow-design/DocumentExtractorAgent.js.map +1 -0
  133. package/dist/workflow-design/N8nNodeKnowledgeBase.d.ts +26 -0
  134. package/dist/workflow-design/N8nNodeKnowledgeBase.d.ts.map +1 -0
  135. package/dist/workflow-design/N8nNodeKnowledgeBase.js +320 -0
  136. package/dist/workflow-design/N8nNodeKnowledgeBase.js.map +1 -0
  137. package/dist/workflow-design/OctoAgentClient.d.ts +42 -0
  138. package/dist/workflow-design/OctoAgentClient.d.ts.map +1 -0
  139. package/dist/workflow-design/OctoAgentClient.js +166 -0
  140. package/dist/workflow-design/OctoAgentClient.js.map +1 -0
  141. package/dist/workflow-design/WorkflowDesignOrchestrator.d.ts +45 -0
  142. package/dist/workflow-design/WorkflowDesignOrchestrator.d.ts.map +1 -0
  143. package/dist/workflow-design/WorkflowDesignOrchestrator.js +265 -0
  144. package/dist/workflow-design/WorkflowDesignOrchestrator.js.map +1 -0
  145. package/dist/workflow-design/agents/ActionChainAgent.d.ts +9 -0
  146. package/dist/workflow-design/agents/ActionChainAgent.d.ts.map +1 -0
  147. package/dist/workflow-design/agents/ActionChainAgent.js +79 -0
  148. package/dist/workflow-design/agents/ActionChainAgent.js.map +1 -0
  149. package/dist/workflow-design/agents/CodeScriptAgent.d.ts +15 -0
  150. package/dist/workflow-design/agents/CodeScriptAgent.d.ts.map +1 -0
  151. package/dist/workflow-design/agents/CodeScriptAgent.js +96 -0
  152. package/dist/workflow-design/agents/CodeScriptAgent.js.map +1 -0
  153. package/dist/workflow-design/agents/LogicFlowAgent.d.ts +9 -0
  154. package/dist/workflow-design/agents/LogicFlowAgent.d.ts.map +1 -0
  155. package/dist/workflow-design/agents/LogicFlowAgent.js +78 -0
  156. package/dist/workflow-design/agents/LogicFlowAgent.js.map +1 -0
  157. package/dist/workflow-design/agents/TriggerAnalystAgent.d.ts +9 -0
  158. package/dist/workflow-design/agents/TriggerAnalystAgent.d.ts.map +1 -0
  159. package/dist/workflow-design/agents/TriggerAnalystAgent.js +65 -0
  160. package/dist/workflow-design/agents/TriggerAnalystAgent.js.map +1 -0
  161. package/dist/workflow-design/agents/WorkflowValidatorAgent.d.ts +9 -0
  162. package/dist/workflow-design/agents/WorkflowValidatorAgent.d.ts.map +1 -0
  163. package/dist/workflow-design/agents/WorkflowValidatorAgent.js +117 -0
  164. package/dist/workflow-design/agents/WorkflowValidatorAgent.js.map +1 -0
  165. package/dist/workflow-design/index.d.ts +12 -0
  166. package/dist/workflow-design/index.d.ts.map +1 -0
  167. package/dist/workflow-design/index.js +23 -0
  168. package/dist/workflow-design/index.js.map +1 -0
  169. package/dist/workflow-design/types.d.ts +155 -0
  170. package/dist/workflow-design/types.d.ts.map +1 -0
  171. package/dist/workflow-design/types.js +6 -0
  172. package/dist/workflow-design/types.js.map +1 -0
  173. package/package.json +2 -1
  174. package/web/dist/module.iife.js +254 -0
  175. package/web/dynamic-entry.tsx +94 -0
@@ -0,0 +1,60 @@
1
+ import type { MarketSkillInfo, MarketSearchResult, SkillRepo } from '../types.js';
2
+ /**
3
+ * Search and browse skills from GitHub repositories (Skill Market).
4
+ */
5
+ export declare class SkillMarketService {
6
+ private readonly logger;
7
+ private readonly treeCache;
8
+ private readonly repoInfoCache;
9
+ private configuredToken;
10
+ /** Set GitHub token for API requests. Clears cache to use new token. */
11
+ setGithubToken(token: string | null): void;
12
+ /** Get token status (masked for safe display). */
13
+ getTokenStatus(): {
14
+ hasToken: boolean;
15
+ maskedToken?: string;
16
+ source?: string;
17
+ };
18
+ private resolveToken;
19
+ /**
20
+ * Search skills across featured repos by keyword.
21
+ */
22
+ search(query: string, limit?: number): Promise<MarketSearchResult>;
23
+ /**
24
+ * List all skills in a specific GitHub repo.
25
+ */
26
+ browseRepo(owner: string, repo: string): Promise<MarketSkillInfo[]>;
27
+ /**
28
+ * Download a SKILL.md content from GitHub.
29
+ */
30
+ downloadSkill(downloadUrl: string): Promise<string>;
31
+ /**
32
+ * List featured/popular skill repositories.
33
+ */
34
+ listFeaturedRepos(): Promise<SkillRepo[]>;
35
+ /**
36
+ * Parse skills from a repo tree, building MarketSkillInfo from SKILL.md paths.
37
+ */
38
+ private getRepoSkills;
39
+ /**
40
+ * Fetch repo tree with in-memory cache.
41
+ */
42
+ private getTreeCached;
43
+ /**
44
+ * Fetch repo info with in-memory cache.
45
+ */
46
+ private getRepoInfoCached;
47
+ /**
48
+ * Fetch the full recursive tree from GitHub API.
49
+ */
50
+ private fetchRepoTree;
51
+ /**
52
+ * Fetch basic repo info from GitHub API.
53
+ */
54
+ private fetchRepoInfo;
55
+ /**
56
+ * Wrapper for fetch with GitHub headers.
57
+ */
58
+ private githubFetch;
59
+ }
60
+ //# sourceMappingURL=skill-market.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-market.service.d.ts","sourceRoot":"","sources":["../../../src/skill/services/skill-market.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAwClF;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiD;IAC3E,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkD;IAChF,OAAO,CAAC,eAAe,CAAuB;IAE9C,wEAAwE;IACxE,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAO1C,kDAAkD;IAClD,cAAc,IAAI;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IAW9E,OAAO,CAAC,YAAY;IAIpB;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA2CpE;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAKzE;;OAEG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQzD;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAkC/C;;OAEG;YACW,aAAa;IA8B3B;;OAEG;YACW,aAAa;IAc3B;;OAEG;YACW,iBAAiB;IAW/B;;OAEG;YACW,aAAa;IAgB3B;;OAEG;YACW,aAAa;IAW3B;;OAEG;YACW,WAAW;CAa1B"}
@@ -0,0 +1,244 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SkillMarketService = void 0;
4
+ const core_1 = require("@octo-cyber/core");
5
+ const FEATURED_REPOS = [
6
+ 'davila7/claude-code-templates',
7
+ 'VoltAgent/awesome-agent-skills',
8
+ 'microsoft/skills',
9
+ 'google-gemini/gemini-skills',
10
+ 'anthropic/skills',
11
+ ];
12
+ const GITHUB_API_BASE = 'https://api.github.com';
13
+ const RAW_CONTENT_BASE = 'https://raw.githubusercontent.com';
14
+ /** TTL for cached repo trees (10 minutes). */
15
+ const TREE_CACHE_TTL_MS = 10 * 60 * 1000;
16
+ /** TTL for cached repo info (30 minutes). */
17
+ const REPO_INFO_CACHE_TTL_MS = 30 * 60 * 1000;
18
+ /**
19
+ * Search and browse skills from GitHub repositories (Skill Market).
20
+ */
21
+ class SkillMarketService {
22
+ logger = core_1.Container.get(core_1.LoggerService);
23
+ treeCache = new Map();
24
+ repoInfoCache = new Map();
25
+ configuredToken = null;
26
+ /** Set GitHub token for API requests. Clears cache to use new token. */
27
+ setGithubToken(token) {
28
+ this.configuredToken = token || null;
29
+ this.treeCache.clear();
30
+ this.repoInfoCache.clear();
31
+ this.logger.info(`[SkillMarket] GitHub token ${token ? 'configured' : 'cleared'}`);
32
+ }
33
+ /** Get token status (masked for safe display). */
34
+ getTokenStatus() {
35
+ const envToken = process.env.GITHUB_TOKEN;
36
+ if (this.configuredToken) {
37
+ return { hasToken: true, maskedToken: maskToken(this.configuredToken), source: 'config' };
38
+ }
39
+ if (envToken) {
40
+ return { hasToken: true, maskedToken: maskToken(envToken), source: 'env' };
41
+ }
42
+ return { hasToken: false };
43
+ }
44
+ resolveToken() {
45
+ return this.configuredToken || process.env.GITHUB_TOKEN || undefined;
46
+ }
47
+ /**
48
+ * Search skills across featured repos by keyword.
49
+ */
50
+ async search(query, limit = 20) {
51
+ const lowerQuery = query.toLowerCase();
52
+ const allSkills = [];
53
+ const treePromises = FEATURED_REPOS.map((repoFullName) => this.getRepoSkills(repoFullName).catch((err) => {
54
+ this.logger.warn(`Failed to fetch tree for ${repoFullName}: ${String(err)}`);
55
+ return [];
56
+ }));
57
+ const results = await Promise.all(treePromises);
58
+ for (const skills of results) {
59
+ allSkills.push(...skills);
60
+ }
61
+ const filtered = allSkills.filter((s) => s.name.toLowerCase().includes(lowerQuery) ||
62
+ (s.category?.toLowerCase().includes(lowerQuery) ?? false) ||
63
+ s.path.toLowerCase().includes(lowerQuery));
64
+ // Sort by relevance: exact name match first, then name-contains, then path-contains
65
+ filtered.sort((a, b) => {
66
+ const aExact = a.name.toLowerCase() === lowerQuery ? 0 : 1;
67
+ const bExact = b.name.toLowerCase() === lowerQuery ? 0 : 1;
68
+ if (aExact !== bExact)
69
+ return aExact - bExact;
70
+ const aNameMatch = a.name.toLowerCase().includes(lowerQuery) ? 0 : 1;
71
+ const bNameMatch = b.name.toLowerCase().includes(lowerQuery) ? 0 : 1;
72
+ return aNameMatch - bNameMatch;
73
+ });
74
+ const limited = filtered.slice(0, limit);
75
+ return {
76
+ skills: limited,
77
+ total: filtered.length,
78
+ source: 'github',
79
+ };
80
+ }
81
+ /**
82
+ * List all skills in a specific GitHub repo.
83
+ */
84
+ async browseRepo(owner, repo) {
85
+ const repoFullName = `${owner}/${repo}`;
86
+ return this.getRepoSkills(repoFullName);
87
+ }
88
+ /**
89
+ * Download a SKILL.md content from GitHub.
90
+ */
91
+ async downloadSkill(downloadUrl) {
92
+ const response = await fetch(downloadUrl);
93
+ if (!response.ok) {
94
+ throw new Error(`Failed to download skill: ${response.status} ${response.statusText}`);
95
+ }
96
+ return response.text();
97
+ }
98
+ /**
99
+ * List featured/popular skill repositories.
100
+ */
101
+ async listFeaturedRepos() {
102
+ const repoPromises = FEATURED_REPOS.map((repoFullName) => this.getRepoInfoCached(repoFullName).catch((err) => {
103
+ this.logger.warn(`Failed to fetch repo info for ${repoFullName}: ${String(err)}`);
104
+ return null;
105
+ }));
106
+ const results = await Promise.all(repoPromises);
107
+ const repos = [];
108
+ for (let i = 0; i < FEATURED_REPOS.length; i++) {
109
+ const info = results[i];
110
+ const [owner, repo] = FEATURED_REPOS[i].split('/');
111
+ if (info) {
112
+ repos.push({
113
+ owner,
114
+ repo,
115
+ description: info.description || '',
116
+ stars: info.stargazers_count,
117
+ });
118
+ }
119
+ else {
120
+ repos.push({
121
+ owner,
122
+ repo,
123
+ description: '',
124
+ stars: 0,
125
+ });
126
+ }
127
+ }
128
+ return repos;
129
+ }
130
+ /**
131
+ * Parse skills from a repo tree, building MarketSkillInfo from SKILL.md paths.
132
+ */
133
+ async getRepoSkills(repoFullName) {
134
+ const tree = await this.getTreeCached(repoFullName);
135
+ const repoInfo = await this.getRepoInfoCached(repoFullName).catch(() => null);
136
+ const stars = repoInfo?.stargazers_count;
137
+ const skillFiles = tree.filter((entry) => entry.type === 'blob' && entry.path.endsWith('/SKILL.md'));
138
+ return skillFiles.map((entry) => {
139
+ const parentDir = entry.path.substring(0, entry.path.lastIndexOf('/'));
140
+ const name = parentDir.includes('/')
141
+ ? parentDir.substring(parentDir.lastIndexOf('/') + 1)
142
+ : parentDir;
143
+ const category = extractCategory(entry.path);
144
+ const downloadUrl = `${RAW_CONTENT_BASE}/${repoFullName}/main/${entry.path}`;
145
+ return {
146
+ name,
147
+ description: '',
148
+ repo: repoFullName,
149
+ path: entry.path,
150
+ downloadUrl,
151
+ category,
152
+ stars,
153
+ };
154
+ });
155
+ }
156
+ /**
157
+ * Fetch repo tree with in-memory cache.
158
+ */
159
+ async getTreeCached(repoFullName) {
160
+ const cached = this.treeCache.get(repoFullName);
161
+ if (cached && Date.now() - cached.timestamp < TREE_CACHE_TTL_MS) {
162
+ return cached.data;
163
+ }
164
+ const tree = await this.fetchRepoTree(repoFullName);
165
+ // Only cache non-empty results to avoid persisting rate-limit failures
166
+ if (tree.length > 0) {
167
+ this.treeCache.set(repoFullName, { data: tree, timestamp: Date.now() });
168
+ }
169
+ return tree;
170
+ }
171
+ /**
172
+ * Fetch repo info with in-memory cache.
173
+ */
174
+ async getRepoInfoCached(repoFullName) {
175
+ const cached = this.repoInfoCache.get(repoFullName);
176
+ if (cached && Date.now() - cached.timestamp < REPO_INFO_CACHE_TTL_MS) {
177
+ return cached.data;
178
+ }
179
+ const info = await this.fetchRepoInfo(repoFullName);
180
+ this.repoInfoCache.set(repoFullName, { data: info, timestamp: Date.now() });
181
+ return info;
182
+ }
183
+ /**
184
+ * Fetch the full recursive tree from GitHub API.
185
+ */
186
+ async fetchRepoTree(repoFullName) {
187
+ const url = `${GITHUB_API_BASE}/repos/${repoFullName}/git/trees/main?recursive=1`;
188
+ const response = await this.githubFetch(url);
189
+ if (!response.ok) {
190
+ if (response.status === 403) {
191
+ this.logger.warn(`GitHub rate limit hit for ${repoFullName}, returning empty tree`);
192
+ return [];
193
+ }
194
+ throw new Error(`GitHub API error: ${response.status} ${response.statusText}`);
195
+ }
196
+ const data = (await response.json());
197
+ return data.tree;
198
+ }
199
+ /**
200
+ * Fetch basic repo info from GitHub API.
201
+ */
202
+ async fetchRepoInfo(repoFullName) {
203
+ const url = `${GITHUB_API_BASE}/repos/${repoFullName}`;
204
+ const response = await this.githubFetch(url);
205
+ if (!response.ok) {
206
+ throw new Error(`GitHub API error: ${response.status} ${response.statusText}`);
207
+ }
208
+ return (await response.json());
209
+ }
210
+ /**
211
+ * Wrapper for fetch with GitHub headers.
212
+ */
213
+ async githubFetch(url) {
214
+ const headers = {
215
+ Accept: 'application/vnd.github.v3+json',
216
+ 'User-Agent': 'Octo-SkillMarket',
217
+ };
218
+ const token = this.resolveToken();
219
+ if (token) {
220
+ headers['Authorization'] = `Bearer ${token}`;
221
+ }
222
+ return fetch(url, { headers });
223
+ }
224
+ }
225
+ exports.SkillMarketService = SkillMarketService;
226
+ function maskToken(token) {
227
+ if (token.length <= 8)
228
+ return '****';
229
+ return `${token.slice(0, 4)}${'*'.repeat(Math.min(token.length - 8, 20))}${token.slice(-4)}`;
230
+ }
231
+ /**
232
+ * Extract category from a SKILL.md path.
233
+ * e.g. "skills/enterprise-communication/excel-analysis/SKILL.md" -> "enterprise-communication"
234
+ */
235
+ function extractCategory(filePath) {
236
+ const parts = filePath.split('/');
237
+ // Need at least 3 parts: {prefix}/{category}/{skill}/SKILL.md
238
+ if (parts.length >= 4) {
239
+ return parts[parts.length - 3];
240
+ }
241
+ return undefined;
242
+ }
243
+ core_1.Container.register(SkillMarketService);
244
+ //# sourceMappingURL=skill-market.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-market.service.js","sourceRoot":"","sources":["../../../src/skill/services/skill-market.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { OctoSkill } from '../entities/octo-skill.entity.js';
2
+ import type { SkillSourceType } from '../types.js';
3
+ /**
4
+ * Manages OctoSkill CRUD and orchestrates skill (re)generation.
5
+ */
6
+ export declare class SkillRegistryService {
7
+ private repo;
8
+ private readonly logger;
9
+ private readonly generator;
10
+ initialize(): void;
11
+ /**
12
+ * Regenerate skills for all modules from RouteRegistry.
13
+ * Skips skills that have been manually edited (isEdited=true).
14
+ */
15
+ regenerateSkills(baseUrl: string, apiKey?: string): Promise<{
16
+ created: string[];
17
+ updated: string[];
18
+ skipped: string[];
19
+ removed: string[];
20
+ }>;
21
+ /**
22
+ * List all skills with optional filter.
23
+ */
24
+ listSkills(filter?: {
25
+ isEnabled?: boolean;
26
+ sourceType?: SkillSourceType;
27
+ }): Promise<OctoSkill[]>;
28
+ /**
29
+ * Get a single skill by ID.
30
+ */
31
+ getSkill(id: string): Promise<OctoSkill | null>;
32
+ /**
33
+ * Create a custom skill.
34
+ */
35
+ createCustomSkill(data: {
36
+ name: string;
37
+ description: string;
38
+ content: string;
39
+ }): Promise<OctoSkill>;
40
+ /**
41
+ * Update skill content (marks as edited to prevent auto-overwrite).
42
+ */
43
+ updateSkillContent(id: string, content: string): Promise<OctoSkill>;
44
+ /**
45
+ * Update skill metadata (name, description).
46
+ */
47
+ updateSkill(id: string, data: Partial<Pick<OctoSkill, 'name' | 'description' | 'content'>>): Promise<OctoSkill>;
48
+ /**
49
+ * Toggle skill enabled state.
50
+ */
51
+ toggleSkill(id: string): Promise<OctoSkill>;
52
+ /**
53
+ * Delete a skill.
54
+ */
55
+ deleteSkill(id: string): Promise<void>;
56
+ /**
57
+ * Update install targets for a skill (called by installer).
58
+ */
59
+ updateInstallTargets(id: string, targets: string[]): Promise<void>;
60
+ }
61
+ //# sourceMappingURL=skill-registry.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-registry.service.d.ts","sourceRoot":"","sources":["../../../src/skill/services/skill-registry.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAE7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,IAAI,CAAyB;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwC;IAElE,UAAU,IAAI,IAAI;IAKlB;;;OAGG;IACG,gBAAgB,CACpB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAsD1F;;OAEG;IACG,UAAU,CAAC,MAAM,CAAC,EAAE;QACxB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,UAAU,CAAC,EAAE,eAAe,CAAC;KAC9B,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAOxB;;OAEG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAIrD;;OAEG;IACG,iBAAiB,CAAC,IAAI,EAAE;QAC5B,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,SAAS,CAAC;IAYtB;;OAEG;IACG,kBAAkB,CACtB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,SAAS,CAAC;IAQrB;;OAEG;IACG,WAAW,CACf,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC,CAAC,GACjE,OAAO,CAAC,SAAS,CAAC;IAYrB;;OAEG;IACG,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAOjD;;OAEG;IACG,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C;;OAEG;IACG,oBAAoB,CACxB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,IAAI,CAAC;CAOjB"}
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SkillRegistryService = void 0;
4
+ const core_1 = require("@octo-cyber/core");
5
+ const octo_skill_entity_js_1 = require("../entities/octo-skill.entity.js");
6
+ const skill_generator_service_js_1 = require("./skill-generator.service.js");
7
+ /**
8
+ * Manages OctoSkill CRUD and orchestrates skill (re)generation.
9
+ */
10
+ class SkillRegistryService {
11
+ repo;
12
+ logger = core_1.Container.get(core_1.LoggerService);
13
+ generator = core_1.Container.get(skill_generator_service_js_1.SkillGeneratorService);
14
+ initialize() {
15
+ const db = core_1.Container.get(core_1.DatabaseService);
16
+ this.repo = db.getRepository(octo_skill_entity_js_1.OctoSkill);
17
+ }
18
+ /**
19
+ * Regenerate skills for all modules from RouteRegistry.
20
+ * Skips skills that have been manually edited (isEdited=true).
21
+ */
22
+ async regenerateSkills(baseUrl, apiKey) {
23
+ const results = this.generator.generateAll(baseUrl, apiKey);
24
+ const created = [];
25
+ const updated = [];
26
+ const skipped = [];
27
+ for (const result of results) {
28
+ const existing = await this.repo.findOneBy({ name: result.name });
29
+ if (existing) {
30
+ if (existing.isEdited) {
31
+ skipped.push(result.name);
32
+ continue;
33
+ }
34
+ existing.description = result.description;
35
+ existing.content = result.content;
36
+ existing.version = result.version;
37
+ await this.repo.save(existing);
38
+ updated.push(result.name);
39
+ }
40
+ else {
41
+ const skill = this.repo.create({
42
+ name: result.name,
43
+ description: result.description,
44
+ sourceModule: result.sourceModule,
45
+ sourceType: 'module',
46
+ content: result.content,
47
+ version: result.version,
48
+ isEnabled: true,
49
+ isEdited: false,
50
+ });
51
+ await this.repo.save(skill);
52
+ created.push(result.name);
53
+ }
54
+ }
55
+ // Clean up stale module-generated skills that no longer have a matching module
56
+ const generatedNames = new Set(results.map((r) => r.name));
57
+ const allModuleSkills = await this.repo.find({
58
+ where: { sourceType: 'module' },
59
+ });
60
+ const removed = [];
61
+ for (const skill of allModuleSkills) {
62
+ if (!generatedNames.has(skill.name)) {
63
+ await this.repo.delete(skill.id);
64
+ removed.push(skill.name);
65
+ }
66
+ }
67
+ this.logger.info(`Skill regeneration: ${created.length} created, ${updated.length} updated, ${skipped.length} skipped, ${removed.length} removed`);
68
+ return { created, updated, skipped, removed };
69
+ }
70
+ /**
71
+ * List all skills with optional filter.
72
+ */
73
+ async listSkills(filter) {
74
+ const where = {};
75
+ if (filter?.isEnabled !== undefined)
76
+ where.isEnabled = filter.isEnabled;
77
+ if (filter?.sourceType)
78
+ where.sourceType = filter.sourceType;
79
+ return this.repo.find({ where, order: { name: 'ASC' } });
80
+ }
81
+ /**
82
+ * Get a single skill by ID.
83
+ */
84
+ async getSkill(id) {
85
+ return this.repo.findOneBy({ id });
86
+ }
87
+ /**
88
+ * Create a custom skill.
89
+ */
90
+ async createCustomSkill(data) {
91
+ const skill = this.repo.create({
92
+ ...data,
93
+ sourceModule: 'custom',
94
+ sourceType: 'custom',
95
+ version: '1.0',
96
+ isEnabled: true,
97
+ isEdited: true,
98
+ });
99
+ return this.repo.save(skill);
100
+ }
101
+ /**
102
+ * Update skill content (marks as edited to prevent auto-overwrite).
103
+ */
104
+ async updateSkillContent(id, content) {
105
+ const skill = await this.repo.findOneBy({ id });
106
+ if (!skill)
107
+ throw core_1.AppError.notFound(`Skill not found: ${id}`);
108
+ skill.content = content;
109
+ skill.isEdited = true;
110
+ return this.repo.save(skill);
111
+ }
112
+ /**
113
+ * Update skill metadata (name, description).
114
+ */
115
+ async updateSkill(id, data) {
116
+ const skill = await this.repo.findOneBy({ id });
117
+ if (!skill)
118
+ throw core_1.AppError.notFound(`Skill not found: ${id}`);
119
+ if (data.name !== undefined)
120
+ skill.name = data.name;
121
+ if (data.description !== undefined)
122
+ skill.description = data.description;
123
+ if (data.content !== undefined) {
124
+ skill.content = data.content;
125
+ skill.isEdited = true;
126
+ }
127
+ return this.repo.save(skill);
128
+ }
129
+ /**
130
+ * Toggle skill enabled state.
131
+ */
132
+ async toggleSkill(id) {
133
+ const skill = await this.repo.findOneBy({ id });
134
+ if (!skill)
135
+ throw core_1.AppError.notFound(`Skill not found: ${id}`);
136
+ skill.isEnabled = !skill.isEnabled;
137
+ return this.repo.save(skill);
138
+ }
139
+ /**
140
+ * Delete a skill.
141
+ */
142
+ async deleteSkill(id) {
143
+ await this.repo.delete(id);
144
+ }
145
+ /**
146
+ * Update install targets for a skill (called by installer).
147
+ */
148
+ async updateInstallTargets(id, targets) {
149
+ const skill = await this.repo.findOneBy({ id });
150
+ if (!skill)
151
+ throw core_1.AppError.notFound(`Skill not found: ${id}`);
152
+ skill.installTargets = targets.length > 0 ? JSON.stringify(targets) : null;
153
+ skill.lastInstalledAt = new Date();
154
+ await this.repo.save(skill);
155
+ }
156
+ }
157
+ exports.SkillRegistryService = SkillRegistryService;
158
+ core_1.Container.register(SkillRegistryService);
159
+ //# sourceMappingURL=skill-registry.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-registry.service.js","sourceRoot":"","sources":["../../../src/skill/services/skill-registry.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Skill-related type definitions for the SKILL.md generation system.
3
+ */
4
+ /** Supported AI tool targets for skill installation. */
5
+ export type SkillTarget = 'claude' | 'cursor' | 'codex' | 'gemini';
6
+ /** Information about an AI tool installation target. */
7
+ export interface SkillTargetInfo {
8
+ id: SkillTarget;
9
+ name: string;
10
+ /** Base directory for skills (e.g. ~/.claude/skills/) */
11
+ skillsDir: string;
12
+ /** How to detect if the tool is installed */
13
+ detectDir: string;
14
+ isInstalled: boolean;
15
+ }
16
+ /** Source type for a skill. */
17
+ export type SkillSourceType = 'module' | 'custom';
18
+ /** Parameters for generating a skill from a module. */
19
+ export interface SkillGenerateParams {
20
+ /** Module name (e.g. 'auth', 'erp'). */
21
+ module: string;
22
+ /** Base URL of the Octo server (e.g. 'http://localhost:9988'). */
23
+ baseUrl: string;
24
+ /** API Key to embed in the skill (full key string). */
25
+ apiKey?: string;
26
+ }
27
+ /** Result of skill generation. */
28
+ export interface SkillGenerateResult {
29
+ name: string;
30
+ description: string;
31
+ content: string;
32
+ sourceModule: string;
33
+ version: string;
34
+ }
35
+ /** Endpoint info extracted from RouteRegistry for skill generation. */
36
+ export interface EndpointInfo {
37
+ method: string;
38
+ path: string;
39
+ summary: string;
40
+ permission?: string;
41
+ controller: string;
42
+ controllerName?: string;
43
+ tags?: string[];
44
+ }
45
+ /** A skill discovered from an external market/GitHub repo. */
46
+ export interface MarketSkillInfo {
47
+ /** Skill name (directory name) */
48
+ name: string;
49
+ /** Skill description from SKILL.md frontmatter */
50
+ description: string;
51
+ /** GitHub owner/repo */
52
+ repo: string;
53
+ /** Path within repo to SKILL.md */
54
+ path: string;
55
+ /** Raw download URL */
56
+ downloadUrl: string;
57
+ /** Category/group inferred from path */
58
+ category?: string;
59
+ /** Stars of the repo */
60
+ stars?: number;
61
+ }
62
+ /** Search result from the skill market. */
63
+ export interface MarketSearchResult {
64
+ skills: MarketSkillInfo[];
65
+ total: number;
66
+ source: string;
67
+ }
68
+ /** Known skill repositories that can be browsed. */
69
+ export interface SkillRepo {
70
+ owner: string;
71
+ repo: string;
72
+ description: string;
73
+ stars: number;
74
+ skillCount?: number;
75
+ }
76
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/skill/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wDAAwD;AACxD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEnE,wDAAwD;AACxD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,WAAW,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,+BAA+B;AAC/B,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAElD,uDAAuD;AACvD,MAAM,WAAW,mBAAmB;IAClC,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,kCAAkC;AAClC,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,uEAAuE;AACvE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,8DAA8D;AAC9D,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,2CAA2C;AAC3C,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,oDAAoD;AACpD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Skill-related type definitions for the SKILL.md generation system.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/skill/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}