skyloom 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/.github/workflows/ci.yml +36 -0
  2. package/CONVERSION_PLAN.md +191 -0
  3. package/README.md +67 -0
  4. package/dist/agents/dew.d.ts +15 -0
  5. package/dist/agents/dew.d.ts.map +1 -0
  6. package/dist/agents/dew.js +74 -0
  7. package/dist/agents/dew.js.map +1 -0
  8. package/dist/agents/fair.d.ts +15 -0
  9. package/dist/agents/fair.d.ts.map +1 -0
  10. package/dist/agents/fair.js +106 -0
  11. package/dist/agents/fair.js.map +1 -0
  12. package/dist/agents/fog.d.ts +15 -0
  13. package/dist/agents/fog.d.ts.map +1 -0
  14. package/dist/agents/fog.js +52 -0
  15. package/dist/agents/fog.js.map +1 -0
  16. package/dist/agents/frost.d.ts +15 -0
  17. package/dist/agents/frost.d.ts.map +1 -0
  18. package/dist/agents/frost.js +54 -0
  19. package/dist/agents/frost.js.map +1 -0
  20. package/dist/agents/rain.d.ts +15 -0
  21. package/dist/agents/rain.d.ts.map +1 -0
  22. package/dist/agents/rain.js +54 -0
  23. package/dist/agents/rain.js.map +1 -0
  24. package/dist/agents/snow.d.ts +27 -0
  25. package/dist/agents/snow.d.ts.map +1 -0
  26. package/dist/agents/snow.js +226 -0
  27. package/dist/agents/snow.js.map +1 -0
  28. package/dist/cli/main.d.ts +7 -0
  29. package/dist/cli/main.d.ts.map +1 -0
  30. package/dist/cli/main.js +402 -0
  31. package/dist/cli/main.js.map +1 -0
  32. package/dist/cli/mode.d.ts +17 -0
  33. package/dist/cli/mode.d.ts.map +1 -0
  34. package/dist/cli/mode.js +56 -0
  35. package/dist/cli/mode.js.map +1 -0
  36. package/dist/core/agent.d.ts +174 -0
  37. package/dist/core/agent.d.ts.map +1 -0
  38. package/dist/core/agent.js +1332 -0
  39. package/dist/core/agent.js.map +1 -0
  40. package/dist/core/agent_helpers.d.ts +51 -0
  41. package/dist/core/agent_helpers.d.ts.map +1 -0
  42. package/dist/core/agent_helpers.js +477 -0
  43. package/dist/core/agent_helpers.js.map +1 -0
  44. package/dist/core/bus.d.ts +99 -0
  45. package/dist/core/bus.d.ts.map +1 -0
  46. package/dist/core/bus.js +191 -0
  47. package/dist/core/bus.js.map +1 -0
  48. package/dist/core/cache.d.ts +63 -0
  49. package/dist/core/cache.d.ts.map +1 -0
  50. package/dist/core/cache.js +121 -0
  51. package/dist/core/cache.js.map +1 -0
  52. package/dist/core/checkpoint.d.ts +19 -0
  53. package/dist/core/checkpoint.d.ts.map +1 -0
  54. package/dist/core/checkpoint.js +120 -0
  55. package/dist/core/checkpoint.js.map +1 -0
  56. package/dist/core/circuit_breaker.d.ts +46 -0
  57. package/dist/core/circuit_breaker.d.ts.map +1 -0
  58. package/dist/core/circuit_breaker.js +99 -0
  59. package/dist/core/circuit_breaker.js.map +1 -0
  60. package/dist/core/config.d.ts +97 -0
  61. package/dist/core/config.d.ts.map +1 -0
  62. package/dist/core/config.js +281 -0
  63. package/dist/core/config.js.map +1 -0
  64. package/dist/core/constants.d.ts +78 -0
  65. package/dist/core/constants.d.ts.map +1 -0
  66. package/dist/core/constants.js +84 -0
  67. package/dist/core/constants.js.map +1 -0
  68. package/dist/core/factory.d.ts +63 -0
  69. package/dist/core/factory.d.ts.map +1 -0
  70. package/dist/core/factory.js +537 -0
  71. package/dist/core/factory.js.map +1 -0
  72. package/dist/core/icons.d.ts +28 -0
  73. package/dist/core/icons.d.ts.map +1 -0
  74. package/dist/core/icons.js +86 -0
  75. package/dist/core/icons.js.map +1 -0
  76. package/dist/core/index.d.ts +29 -0
  77. package/dist/core/index.d.ts.map +1 -0
  78. package/dist/core/index.js +54 -0
  79. package/dist/core/index.js.map +1 -0
  80. package/dist/core/llm.d.ts +121 -0
  81. package/dist/core/llm.d.ts.map +1 -0
  82. package/dist/core/llm.js +532 -0
  83. package/dist/core/llm.js.map +1 -0
  84. package/dist/core/logger.d.ts +57 -0
  85. package/dist/core/logger.d.ts.map +1 -0
  86. package/dist/core/logger.js +122 -0
  87. package/dist/core/logger.js.map +1 -0
  88. package/dist/core/mcp.d.ts +190 -0
  89. package/dist/core/mcp.d.ts.map +1 -0
  90. package/dist/core/mcp.js +822 -0
  91. package/dist/core/mcp.js.map +1 -0
  92. package/dist/core/mcp_server.d.ts +26 -0
  93. package/dist/core/mcp_server.d.ts.map +1 -0
  94. package/dist/core/mcp_server.js +211 -0
  95. package/dist/core/mcp_server.js.map +1 -0
  96. package/dist/core/memory.d.ts +190 -0
  97. package/dist/core/memory.d.ts.map +1 -0
  98. package/dist/core/memory.js +988 -0
  99. package/dist/core/memory.js.map +1 -0
  100. package/dist/core/middleware.d.ts +114 -0
  101. package/dist/core/middleware.d.ts.map +1 -0
  102. package/dist/core/middleware.js +248 -0
  103. package/dist/core/middleware.js.map +1 -0
  104. package/dist/core/pipelines.d.ts +87 -0
  105. package/dist/core/pipelines.d.ts.map +1 -0
  106. package/dist/core/pipelines.js +301 -0
  107. package/dist/core/pipelines.js.map +1 -0
  108. package/dist/core/profile.d.ts +23 -0
  109. package/dist/core/profile.d.ts.map +1 -0
  110. package/dist/core/profile.js +289 -0
  111. package/dist/core/profile.js.map +1 -0
  112. package/dist/core/router.d.ts +24 -0
  113. package/dist/core/router.d.ts.map +1 -0
  114. package/dist/core/router.js +111 -0
  115. package/dist/core/router.js.map +1 -0
  116. package/dist/core/schemas.d.ts +82 -0
  117. package/dist/core/schemas.d.ts.map +1 -0
  118. package/dist/core/schemas.js +200 -0
  119. package/dist/core/schemas.js.map +1 -0
  120. package/dist/core/semantic.d.ts +92 -0
  121. package/dist/core/semantic.d.ts.map +1 -0
  122. package/dist/core/semantic.js +175 -0
  123. package/dist/core/semantic.js.map +1 -0
  124. package/dist/core/skill.d.ts +68 -0
  125. package/dist/core/skill.d.ts.map +1 -0
  126. package/dist/core/skill.js +350 -0
  127. package/dist/core/skill.js.map +1 -0
  128. package/dist/core/tool.d.ts +99 -0
  129. package/dist/core/tool.d.ts.map +1 -0
  130. package/dist/core/tool.js +341 -0
  131. package/dist/core/tool.js.map +1 -0
  132. package/dist/core/tool_router.d.ts +29 -0
  133. package/dist/core/tool_router.d.ts.map +1 -0
  134. package/dist/core/tool_router.js +172 -0
  135. package/dist/core/tool_router.js.map +1 -0
  136. package/dist/core/workspace.d.ts +48 -0
  137. package/dist/core/workspace.d.ts.map +1 -0
  138. package/dist/core/workspace.js +179 -0
  139. package/dist/core/workspace.js.map +1 -0
  140. package/dist/plugins/loader.d.ts +17 -0
  141. package/dist/plugins/loader.d.ts.map +1 -0
  142. package/dist/plugins/loader.js +96 -0
  143. package/dist/plugins/loader.js.map +1 -0
  144. package/dist/skills/loader.d.ts +9 -0
  145. package/dist/skills/loader.d.ts.map +1 -0
  146. package/dist/skills/loader.js +78 -0
  147. package/dist/skills/loader.js.map +1 -0
  148. package/dist/tools/builtin.d.ts +10 -0
  149. package/dist/tools/builtin.d.ts.map +1 -0
  150. package/dist/tools/builtin.js +414 -0
  151. package/dist/tools/builtin.js.map +1 -0
  152. package/dist/tools/computer.d.ts +12 -0
  153. package/dist/tools/computer.d.ts.map +1 -0
  154. package/dist/tools/computer.js +326 -0
  155. package/dist/tools/computer.js.map +1 -0
  156. package/dist/tools/delegate.d.ts +10 -0
  157. package/dist/tools/delegate.d.ts.map +1 -0
  158. package/dist/tools/delegate.js +45 -0
  159. package/dist/tools/delegate.js.map +1 -0
  160. package/dist/web/server.d.ts +5 -0
  161. package/dist/web/server.d.ts.map +1 -0
  162. package/dist/web/server.js +647 -0
  163. package/dist/web/server.js.map +1 -0
  164. package/dist/web/tts.d.ts +33 -0
  165. package/dist/web/tts.d.ts.map +1 -0
  166. package/dist/web/tts.js +69 -0
  167. package/dist/web/tts.js.map +1 -0
  168. package/package.json +60 -0
  169. package/scripts/install.js +48 -0
  170. package/scripts/link.js +10 -0
  171. package/setup.bat +79 -0
  172. package/skill-test-ty2fOA/test.md +10 -0
  173. package/src/agents/dew.ts +70 -0
  174. package/src/agents/fair.ts +102 -0
  175. package/src/agents/fog.ts +48 -0
  176. package/src/agents/frost.ts +50 -0
  177. package/src/agents/rain.ts +50 -0
  178. package/src/agents/snow.ts +239 -0
  179. package/src/cli/main.ts +405 -0
  180. package/src/cli/mode.ts +58 -0
  181. package/src/core/agent.ts +1506 -0
  182. package/src/core/agent_helpers.ts +461 -0
  183. package/src/core/bus.ts +221 -0
  184. package/src/core/cache.ts +153 -0
  185. package/src/core/checkpoint.ts +94 -0
  186. package/src/core/circuit_breaker.ts +119 -0
  187. package/src/core/config.ts +341 -0
  188. package/src/core/constants.ts +95 -0
  189. package/src/core/factory.ts +627 -0
  190. package/src/core/icons.ts +53 -0
  191. package/src/core/index.ts +31 -0
  192. package/src/core/llm.ts +724 -0
  193. package/src/core/logger.ts +144 -0
  194. package/src/core/mcp.ts +953 -0
  195. package/src/core/mcp_server.ts +176 -0
  196. package/src/core/memory.ts +1169 -0
  197. package/src/core/middleware.ts +350 -0
  198. package/src/core/pipelines.ts +424 -0
  199. package/src/core/profile.ts +255 -0
  200. package/src/core/router.ts +124 -0
  201. package/src/core/schemas.ts +282 -0
  202. package/src/core/semantic.ts +211 -0
  203. package/src/core/skill.ts +342 -0
  204. package/src/core/tool.ts +427 -0
  205. package/src/core/tool_router.ts +193 -0
  206. package/src/core/workspace.ts +150 -0
  207. package/src/plugins/loader.ts +66 -0
  208. package/src/skills/loader.ts +46 -0
  209. package/src/sql.js.d.ts +29 -0
  210. package/src/tools/builtin.ts +382 -0
  211. package/src/tools/computer.ts +269 -0
  212. package/src/tools/delegate.ts +49 -0
  213. package/src/web/server.ts +634 -0
  214. package/src/web/tts.ts +93 -0
  215. package/tests/bus.test.ts +121 -0
  216. package/tests/icons.test.ts +45 -0
  217. package/tests/router.test.ts +86 -0
  218. package/tests/schemas.test.ts +51 -0
  219. package/tests/semantic.test.ts +83 -0
  220. package/tests/setup.ts +10 -0
  221. package/tests/skill.test.ts +172 -0
  222. package/tests/tool.test.ts +108 -0
  223. package/tests/tool_router.test.ts +71 -0
  224. package/tsconfig.json +37 -0
  225. package/vitest.config.ts +17 -0
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+ /**
3
+ * Lightweight semantic retrieval — zero external dependencies.
4
+ *
5
+ * Why: The existing `recall_for_injection` uses SQL LIKE on tokens, which
6
+ * misses semantically related facts that share few literal characters (e.g.
7
+ * query "deploy" vs. stored fact "release_command"). This module provides
8
+ * a character n-gram Jaccard similarity scorer that catches those cross-
9
+ * lingual and synonym relationships without adding PyTorch / sentence-transformers.
10
+ *
11
+ * Design:
12
+ * - Character n-grams (size 2-4) naturally handle CJK, mixed-language, and
13
+ * code identifiers better than word-level tokenization.
14
+ * - Jaccard similarity on n-gram sets is fast (< 10 µs per pair) and
15
+ * well-correlated with human relevance judgments for short text.
16
+ * - Zero dependencies beyond stdlib.
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.SemanticScorer = void 0;
20
+ exports.getScorer = getScorer;
21
+ /**
22
+ * Character n-gram semantic similarity scorer.
23
+ *
24
+ * Usage:
25
+ * ```
26
+ * const scorer = new SemanticScorer();
27
+ * const score = scorer.similarity("deploy to prod", "release_command");
28
+ * // score ≈ 0.15 (low but non-zero — catches partial overlap)
29
+ *
30
+ * const ranked = scorer.rank(
31
+ * "search query",
32
+ * [{value: "candidate A"}, {value: "candidate B"}]
33
+ * );
34
+ * // ranked → [[0.85, {value: "candidate A"}], [0.30, {value: "candidate B"}]]
35
+ * ```
36
+ */
37
+ class SemanticScorer {
38
+ /**
39
+ * Initialize scorer with n-gram range.
40
+ * @param nRange - Tuple of [minSize, maxSize] for n-grams (default [2, 4])
41
+ */
42
+ constructor(nRange = [2, 4]) {
43
+ this.maxCacheSize = 512;
44
+ this.nRange = nRange;
45
+ this.cache = new Map();
46
+ }
47
+ /**
48
+ * Generate character n-gram fingerprint (cached).
49
+ * @param text - Input text to fingerprint
50
+ * @returns Set of n-grams for the text
51
+ */
52
+ fingerprint(text) {
53
+ // Return cached result if available
54
+ if (this.cache.has(text)) {
55
+ return this.cache.get(text);
56
+ }
57
+ const lowered = text.toLowerCase();
58
+ const ngrams = new Set();
59
+ // Generate n-grams for each size in range
60
+ for (let n = this.nRange[0]; n <= this.nRange[1]; n++) {
61
+ if (lowered.length < n) {
62
+ continue;
63
+ }
64
+ for (let i = 0; i <= lowered.length - n; i++) {
65
+ ngrams.add(lowered.slice(i, i + n));
66
+ }
67
+ }
68
+ // Cache result if we haven't hit size limit
69
+ if (this.cache.size < this.maxCacheSize) {
70
+ this.cache.set(text, ngrams);
71
+ }
72
+ return ngrams;
73
+ }
74
+ /**
75
+ * Calculate Jaccard similarity between two texts using character n-grams.
76
+ * @param a - First text
77
+ * @param b - Second text
78
+ * @returns Similarity score between 0 and 1
79
+ */
80
+ similarity(a, b) {
81
+ if (!a || !b) {
82
+ return 0.0;
83
+ }
84
+ const fpA = this.fingerprint(a);
85
+ const fpB = this.fingerprint(b);
86
+ if (fpA.size === 0 || fpB.size === 0) {
87
+ return 0.0;
88
+ }
89
+ // Calculate intersection
90
+ let intersection = 0;
91
+ for (const ngram of fpA) {
92
+ if (fpB.has(ngram)) {
93
+ intersection++;
94
+ }
95
+ }
96
+ // Calculate union
97
+ const union = fpA.size + fpB.size - intersection;
98
+ return union > 0 ? intersection / union : 0.0;
99
+ }
100
+ /**
101
+ * Rank candidates by semantic similarity to the query.
102
+ *
103
+ * Each candidate is a dict. The scorer reads `candidate[keyField]`
104
+ * for text to compare. Also scores the "key" field if present.
105
+ * Returns `[score, candidate]` tuples sorted descending, filtered by `minScore`.
106
+ *
107
+ * @param query - Query string to match against
108
+ * @param candidates - Array of candidate objects
109
+ * @param keyField - Field name to extract text from (default "value")
110
+ * @param topK - Maximum number of results to return (default 3)
111
+ * @param minScore - Minimum similarity threshold (default 0.02)
112
+ * @returns Array of [score, candidate] tuples, sorted by score descending
113
+ */
114
+ rank(query, candidates, keyField = "value", topK = 3, minScore = 0.02) {
115
+ const scored = [];
116
+ for (const candidate of candidates) {
117
+ let text = candidate[keyField];
118
+ // Skip if field is missing or empty
119
+ if (!text) {
120
+ continue;
121
+ }
122
+ // Convert objects to string representation
123
+ if (typeof text === "object") {
124
+ text = JSON.stringify(text);
125
+ }
126
+ else {
127
+ text = String(text);
128
+ }
129
+ // Calculate similarity with the candidate's value field
130
+ let score = this.similarity(query, text);
131
+ // Also score the "key" field if present — often more discriminative
132
+ const keyText = candidate.key;
133
+ if (keyText) {
134
+ const keyScore = this.similarity(query, String(keyText));
135
+ score = Math.max(score, keyScore);
136
+ }
137
+ // Add to results if above threshold
138
+ if (score >= minScore) {
139
+ scored.push([score, candidate]);
140
+ }
141
+ }
142
+ // Sort descending by score
143
+ scored.sort((a, b) => b[0] - a[0]);
144
+ // Return top K results
145
+ return scored.slice(0, topK);
146
+ }
147
+ /**
148
+ * Clear the fingerprint cache.
149
+ */
150
+ clearCache() {
151
+ this.cache.clear();
152
+ }
153
+ /**
154
+ * Get current cache size.
155
+ */
156
+ getCacheSize() {
157
+ return this.cache.size;
158
+ }
159
+ }
160
+ exports.SemanticScorer = SemanticScorer;
161
+ /**
162
+ * Module-level singleton instance (lazy initialization).
163
+ */
164
+ let scorer = null;
165
+ /**
166
+ * Get or create the module-level semantic scorer singleton.
167
+ * @returns SemanticScorer instance
168
+ */
169
+ function getScorer() {
170
+ if (scorer === null) {
171
+ scorer = new SemanticScorer();
172
+ }
173
+ return scorer;
174
+ }
175
+ //# sourceMappingURL=semantic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic.js","sourceRoot":"","sources":["../../src/core/semantic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Skill system — Anthropic-compatible composable capability modules.
3
+ *
4
+ * Skills use Markdown + YAML frontmatter format. When activated, a skill
5
+ * injects its system prompt and can register custom handler tools.
6
+ */
7
+ /**
8
+ * A composable capability module for an agent.
9
+ */
10
+ export declare class Skill {
11
+ name: string;
12
+ description: string;
13
+ systemPrompt: string;
14
+ requiredTools: string[];
15
+ tools: any[];
16
+ handler: ((agent: any, toolRegistry: any) => any[]) | null;
17
+ model: string | null;
18
+ temperature: number | null;
19
+ maxTokens: number | null;
20
+ triggers: string[];
21
+ resourceDir: string | null;
22
+ license: string | null;
23
+ allowedTools: string[] | null;
24
+ sourcePath: string | null;
25
+ bodyTruncated: boolean;
26
+ metadata: Record<string, any>;
27
+ constructor(config: Partial<SkillConfig>);
28
+ /**
29
+ * Load a skill from a Markdown file with YAML frontmatter.
30
+ */
31
+ static fromMarkdown(filePath: string): Skill | null;
32
+ }
33
+ interface SkillConfig {
34
+ name: string;
35
+ description: string;
36
+ systemPrompt?: string;
37
+ requiredTools?: string[];
38
+ tools?: any[];
39
+ handler?: ((agent: any, toolRegistry: any) => any[]) | null;
40
+ model?: string | null;
41
+ temperature?: number | null;
42
+ maxTokens?: number | null;
43
+ triggers?: string[];
44
+ resourceDir?: string | null;
45
+ license?: string | null;
46
+ allowedTools?: string[] | null;
47
+ sourcePath?: string | null;
48
+ bodyTruncated?: boolean;
49
+ metadata?: Record<string, any>;
50
+ }
51
+ /**
52
+ * Central registry for all available skills.
53
+ */
54
+ export declare class SkillRegistry {
55
+ private _skills;
56
+ register(skill: Skill): void;
57
+ get(name: string): Skill | undefined;
58
+ getSkills(names?: string[]): Skill[];
59
+ listNames(): string[];
60
+ merge(other: SkillRegistry): void;
61
+ /**
62
+ * Load all .md skill files from a directory (Anthropic format).
63
+ */
64
+ loadSkillsFromDirectory(directory: string): Skill[];
65
+ }
66
+ export declare const globalSkillRegistry: SkillRegistry;
67
+ export {};
68
+ //# sourceMappingURL=skill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../src/core/skill.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA8BH;;GAEG;AACH,qBAAa,KAAK;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAM;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAM;IAC7B,KAAK,EAAE,GAAG,EAAE,CAAM;IAClB,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC,GAAG,IAAI,CAAQ;IAClE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAClC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAM;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAClC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC9B,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,CAAQ;IACrC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAQ;IACjC,aAAa,EAAE,OAAO,CAAS;IAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAM;gBAEvB,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC;IAmBxC;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;CA+FpD;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;IAC5D,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAoFD;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAiC;IAEhD,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAI5B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAIpC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE;IAKpC,SAAS,IAAI,MAAM,EAAE;IAIrB,KAAK,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAMjC;;OAEG;IACH,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,EAAE;CA8BpD;AAGD,eAAO,MAAM,mBAAmB,eAAsB,CAAC"}
@@ -0,0 +1,350 @@
1
+ "use strict";
2
+ /**
3
+ * Skill system — Anthropic-compatible composable capability modules.
4
+ *
5
+ * Skills use Markdown + YAML frontmatter format. When activated, a skill
6
+ * injects its system prompt and can register custom handler tools.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.globalSkillRegistry = exports.SkillRegistry = exports.Skill = void 0;
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ const yaml_1 = require("yaml");
46
+ // Tuning for lazy skill loading
47
+ const SKILL_BODY_LITE_THRESHOLD = 2000;
48
+ const SKILL_BODY_LITE_MAX_CHARS = 1500;
49
+ // Claude Code -> sky tool-name aliases
50
+ const CLAUDE_TOOL_ALIASES = {
51
+ read: 'read_file',
52
+ write: 'write_file',
53
+ edit: 'edit_file',
54
+ multiedit: 'edit_file',
55
+ delete: 'delete_file',
56
+ bash: 'run_bash',
57
+ shell: 'run_bash',
58
+ grep: 'grep',
59
+ glob: 'file_search',
60
+ search: 'code_search',
61
+ websearch: 'web_search',
62
+ webfetch: 'fetch_page',
63
+ ls: 'list_directory',
64
+ tree: 'tree',
65
+ fetch: 'http_get',
66
+ taskdone: 'task_done',
67
+ };
68
+ /**
69
+ * A composable capability module for an agent.
70
+ */
71
+ class Skill {
72
+ constructor(config) {
73
+ this.systemPrompt = '';
74
+ this.requiredTools = [];
75
+ this.tools = [];
76
+ this.handler = null;
77
+ this.model = null;
78
+ this.temperature = null;
79
+ this.maxTokens = null;
80
+ this.triggers = [];
81
+ this.resourceDir = null;
82
+ this.license = null;
83
+ this.allowedTools = null;
84
+ this.sourcePath = null;
85
+ this.bodyTruncated = false;
86
+ this.metadata = {};
87
+ this.name = config.name || '';
88
+ this.description = config.description || '';
89
+ this.systemPrompt = config.systemPrompt || '';
90
+ this.requiredTools = config.requiredTools || [];
91
+ this.tools = config.tools || [];
92
+ this.handler = config.handler || null;
93
+ this.model = config.model || null;
94
+ this.temperature = config.temperature ?? null;
95
+ this.maxTokens = config.maxTokens ?? null;
96
+ this.triggers = config.triggers || [];
97
+ this.resourceDir = config.resourceDir || null;
98
+ this.license = config.license || null;
99
+ this.allowedTools = config.allowedTools || null;
100
+ this.sourcePath = config.sourcePath || null;
101
+ this.bodyTruncated = config.bodyTruncated || false;
102
+ this.metadata = config.metadata || {};
103
+ }
104
+ /**
105
+ * Load a skill from a Markdown file with YAML frontmatter.
106
+ */
107
+ static fromMarkdown(filePath) {
108
+ const p = path.resolve(filePath);
109
+ let text;
110
+ try {
111
+ text = fs.readFileSync(p, 'utf-8');
112
+ }
113
+ catch {
114
+ return null;
115
+ }
116
+ const parsed = parseFrontmatter(text);
117
+ if (!parsed)
118
+ return null;
119
+ const { fm, body } = parsed;
120
+ const name = fm.name || path.basename(p, '.md');
121
+ const description = fm.description || '';
122
+ const toolsRaw = fm.tools;
123
+ const requiredTools = Array.isArray(toolsRaw)
124
+ ? toolsRaw.filter((t) => typeof t === 'string')
125
+ : [];
126
+ // Config overrides
127
+ const model = fm.model;
128
+ const temperature = fm.temperature;
129
+ const maxTokens = (fm.maxTokens ?? fm.max_tokens);
130
+ // Triggers
131
+ const triggersRaw = fm.triggers;
132
+ const triggers = Array.isArray(triggersRaw)
133
+ ? triggersRaw.filter((t) => typeof t === 'string')
134
+ : [];
135
+ // Auto-derive triggers from description if not specified
136
+ const finalTriggers = triggers.length > 0 ? triggers
137
+ : (description ? deriveTriggersFromDescription(description) : []);
138
+ // License and allowed-tools
139
+ const licenseRaw = fm.license;
140
+ const license = licenseRaw?.trim() || null;
141
+ const allowedRaw = fm['allowed-tools'] ?? fm.allowed_tools;
142
+ let allowedTools = null;
143
+ if (Array.isArray(allowedRaw)) {
144
+ allowedTools = allowedRaw.filter((t) => typeof t === 'string');
145
+ if (allowedTools.length === 0)
146
+ allowedTools = null;
147
+ }
148
+ else if (typeof allowedRaw === 'string' && allowedRaw.trim()) {
149
+ allowedTools = allowedRaw.split(',').map((t) => t.trim()).filter(Boolean);
150
+ }
151
+ if (allowedTools) {
152
+ allowedTools = allowedTools.map(t => normalizeClaudeToolName(t));
153
+ // Dedupe preserving order
154
+ const seen = new Set();
155
+ const deduped = [];
156
+ for (const t of allowedTools) {
157
+ if (!seen.has(t)) {
158
+ seen.add(t);
159
+ deduped.push(t);
160
+ }
161
+ }
162
+ allowedTools = deduped;
163
+ }
164
+ // Preserve metadata fields
165
+ const knownKeys = new Set([
166
+ 'name', 'description', 'tools', 'model', 'temperature', 'maxTokens', 'max_tokens',
167
+ 'triggers', 'license', 'allowed-tools', 'allowed_tools',
168
+ ]);
169
+ const extraMetadata = {};
170
+ for (const [k, v] of Object.entries(fm)) {
171
+ if (!knownKeys.has(k) && !k.startsWith('_')) {
172
+ extraMetadata[k] = v;
173
+ }
174
+ }
175
+ // Lazy-load large skill bodies
176
+ let bodyStripped = body.trim();
177
+ let bodyTruncated = false;
178
+ if (bodyStripped.length > SKILL_BODY_LITE_THRESHOLD) {
179
+ bodyStripped = extractSkillHead(bodyStripped, SKILL_BODY_LITE_MAX_CHARS);
180
+ bodyTruncated = true;
181
+ }
182
+ return new Skill({
183
+ name,
184
+ description,
185
+ systemPrompt: bodyStripped,
186
+ requiredTools,
187
+ model: typeof model === 'string' ? model : null,
188
+ temperature: typeof temperature === 'number' ? temperature : null,
189
+ maxTokens: typeof maxTokens === 'number' ? maxTokens : null,
190
+ triggers: finalTriggers,
191
+ license,
192
+ allowedTools,
193
+ sourcePath: p,
194
+ bodyTruncated,
195
+ metadata: extraMetadata,
196
+ });
197
+ }
198
+ }
199
+ exports.Skill = Skill;
200
+ /**
201
+ * Parse YAML frontmatter from markdown text.
202
+ * Returns { fm, body } or null.
203
+ */
204
+ function parseFrontmatter(text) {
205
+ const match = text.match(/^---\s*\n(.*?)\n---\s*\n?(.*)/s);
206
+ if (!match)
207
+ return null;
208
+ try {
209
+ const fm = (0, yaml_1.parse)(match[1]) || {};
210
+ return { fm, body: match[2] };
211
+ }
212
+ catch {
213
+ return null;
214
+ }
215
+ }
216
+ /**
217
+ * Normalize a Claude Code tool name into sky's registry name.
218
+ */
219
+ function normalizeClaudeToolName(raw) {
220
+ let s = raw.trim();
221
+ if (!s)
222
+ return s;
223
+ // Strip permission scoping: Bash(ls *) -> Bash
224
+ const paren = s.indexOf('(');
225
+ if (paren > 0)
226
+ s = s.slice(0, paren).trim();
227
+ // Check if it's already a valid sky name
228
+ const aliasValues = new Set(Object.values(CLAUDE_TOOL_ALIASES));
229
+ if (aliasValues.has(s))
230
+ return s;
231
+ return CLAUDE_TOOL_ALIASES[s.toLowerCase()] ?? s;
232
+ }
233
+ /**
234
+ * Extract the head of a SKILL.md body — title plus first major section.
235
+ */
236
+ function extractSkillHead(body, maxChars) {
237
+ const out = [];
238
+ let charCount = 0;
239
+ let h2Count = 0;
240
+ for (const line of body.split('\n')) {
241
+ const isH2 = line.startsWith('## ') && !line.startsWith('### ');
242
+ if (isH2) {
243
+ h2Count++;
244
+ if (h2Count > 1)
245
+ break;
246
+ }
247
+ if (out.length > 0 && charCount + line.length + 1 > maxChars)
248
+ break;
249
+ out.push(line);
250
+ charCount += line.length + 1;
251
+ }
252
+ return out.join('\n').trimEnd();
253
+ }
254
+ // Patterns for auto-deriving triggers
255
+ const TRIGGER_QUOTED = /["'"'""]([^"'""\n]{1,40})["'""']/g;
256
+ const TRIGGER_EXT = /(?<![A-Za-z0-9])\.[A-Za-z0-9]{2,6}\b/g;
257
+ const TRIGGER_STRIP = " \t,.;:!?,。、;:!?、。";
258
+ /**
259
+ * Pull candidate trigger phrases out of a skill description.
260
+ */
261
+ function deriveTriggersFromDescription(description) {
262
+ const raw = [];
263
+ let m;
264
+ while ((m = TRIGGER_QUOTED.exec(description)) !== null) {
265
+ raw.push(m[1]);
266
+ }
267
+ while ((m = TRIGGER_EXT.exec(description)) !== null) {
268
+ raw.push(m[0]);
269
+ }
270
+ const seen = new Set();
271
+ const out = [];
272
+ for (let token of raw) {
273
+ token = token.replace(/[ \t,.;:!?,。、;:!?、。]+$/, '').replace(/^[ \t]+/, '');
274
+ if (!token || token.length < 2)
275
+ continue;
276
+ const key = token.toLowerCase();
277
+ if (seen.has(key))
278
+ continue;
279
+ seen.add(key);
280
+ out.push(token);
281
+ if (out.length >= 12)
282
+ break;
283
+ }
284
+ return out;
285
+ }
286
+ /**
287
+ * Central registry for all available skills.
288
+ */
289
+ class SkillRegistry {
290
+ constructor() {
291
+ this._skills = new Map();
292
+ }
293
+ register(skill) {
294
+ this._skills.set(skill.name, skill);
295
+ }
296
+ get(name) {
297
+ return this._skills.get(name);
298
+ }
299
+ getSkills(names) {
300
+ if (!names)
301
+ return Array.from(this._skills.values());
302
+ return names.map(n => this._skills.get(n)).filter(Boolean);
303
+ }
304
+ listNames() {
305
+ return Array.from(this._skills.keys());
306
+ }
307
+ merge(other) {
308
+ for (const [name, skill] of other._skills) {
309
+ this._skills.set(name, skill);
310
+ }
311
+ }
312
+ /**
313
+ * Load all .md skill files from a directory (Anthropic format).
314
+ */
315
+ loadSkillsFromDirectory(directory) {
316
+ const loaded = [];
317
+ let dirPath;
318
+ try {
319
+ dirPath = path.resolve(directory.replace(/^~/, process.env.HOME || process.env.USERPROFILE || ''));
320
+ }
321
+ catch {
322
+ return loaded;
323
+ }
324
+ if (!fs.existsSync(dirPath))
325
+ return loaded;
326
+ let entries;
327
+ try {
328
+ entries = fs.readdirSync(dirPath);
329
+ }
330
+ catch {
331
+ return loaded;
332
+ }
333
+ for (const entry of entries.sort()) {
334
+ if (entry.startsWith('_') || entry.startsWith('.') || !entry.endsWith('.md'))
335
+ continue;
336
+ const fullPath = path.join(dirPath, entry);
337
+ const skill = Skill.fromMarkdown(fullPath);
338
+ if (skill) {
339
+ skill.resourceDir = dirPath;
340
+ this.register(skill);
341
+ loaded.push(skill);
342
+ }
343
+ }
344
+ return loaded;
345
+ }
346
+ }
347
+ exports.SkillRegistry = SkillRegistry;
348
+ // Global skill registry singleton
349
+ exports.globalSkillRegistry = new SkillRegistry();
350
+ //# sourceMappingURL=skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/core/skill.ts"],"names":[],"mappings":"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"}