borderless-agent 0.0.1-alpha.1

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 (90) hide show
  1. package/README.md +274 -0
  2. package/dist/agentBuilder.d.ts +51 -0
  3. package/dist/agentBuilder.d.ts.map +1 -0
  4. package/dist/agentBuilder.js +130 -0
  5. package/dist/agentBuilder.js.map +1 -0
  6. package/dist/agentInstance.d.ts +45 -0
  7. package/dist/agentInstance.d.ts.map +1 -0
  8. package/dist/agentInstance.js +501 -0
  9. package/dist/agentInstance.js.map +1 -0
  10. package/dist/agentsCore.d.ts +16 -0
  11. package/dist/agentsCore.d.ts.map +1 -0
  12. package/dist/agentsCore.js +50 -0
  13. package/dist/agentsCore.js.map +1 -0
  14. package/dist/cli/index.d.ts +5 -0
  15. package/dist/cli/index.d.ts.map +1 -0
  16. package/dist/cli/index.js +11 -0
  17. package/dist/cli/index.js.map +1 -0
  18. package/dist/cli/main.d.ts +36 -0
  19. package/dist/cli/main.d.ts.map +1 -0
  20. package/dist/cli/main.js +306 -0
  21. package/dist/cli/main.js.map +1 -0
  22. package/dist/config.d.ts +26 -0
  23. package/dist/config.d.ts.map +1 -0
  24. package/dist/config.js +98 -0
  25. package/dist/config.js.map +1 -0
  26. package/dist/contextCore.d.ts +97 -0
  27. package/dist/contextCore.d.ts.map +1 -0
  28. package/dist/contextCore.js +533 -0
  29. package/dist/contextCore.js.map +1 -0
  30. package/dist/index.d.ts +28 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +46 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/llmProtocol.d.ts +60 -0
  35. package/dist/llmProtocol.d.ts.map +1 -0
  36. package/dist/llmProtocol.js +202 -0
  37. package/dist/llmProtocol.js.map +1 -0
  38. package/dist/loopCore.d.ts +22 -0
  39. package/dist/loopCore.d.ts.map +1 -0
  40. package/dist/loopCore.js +288 -0
  41. package/dist/loopCore.js.map +1 -0
  42. package/dist/main.d.ts +9 -0
  43. package/dist/main.d.ts.map +1 -0
  44. package/dist/main.js +15 -0
  45. package/dist/main.js.map +1 -0
  46. package/dist/memoryCore.d.ts +37 -0
  47. package/dist/memoryCore.d.ts.map +1 -0
  48. package/dist/memoryCore.js +346 -0
  49. package/dist/memoryCore.js.map +1 -0
  50. package/dist/server/app.d.ts +13 -0
  51. package/dist/server/app.d.ts.map +1 -0
  52. package/dist/server/app.js +200 -0
  53. package/dist/server/app.js.map +1 -0
  54. package/dist/sessionCore.d.ts +54 -0
  55. package/dist/sessionCore.d.ts.map +1 -0
  56. package/dist/sessionCore.js +312 -0
  57. package/dist/sessionCore.js.map +1 -0
  58. package/dist/skillsCore.d.ts +23 -0
  59. package/dist/skillsCore.d.ts.map +1 -0
  60. package/dist/skillsCore.js +202 -0
  61. package/dist/skillsCore.js.map +1 -0
  62. package/dist/storage/cloudBackend.d.ts +48 -0
  63. package/dist/storage/cloudBackend.d.ts.map +1 -0
  64. package/dist/storage/cloudBackend.js +301 -0
  65. package/dist/storage/cloudBackend.js.map +1 -0
  66. package/dist/storage/fileBackend.d.ts +41 -0
  67. package/dist/storage/fileBackend.d.ts.map +1 -0
  68. package/dist/storage/fileBackend.js +240 -0
  69. package/dist/storage/fileBackend.js.map +1 -0
  70. package/dist/storage/index.d.ts +21 -0
  71. package/dist/storage/index.d.ts.map +1 -0
  72. package/dist/storage/index.js +58 -0
  73. package/dist/storage/index.js.map +1 -0
  74. package/dist/storage/protocols.d.ts +29 -0
  75. package/dist/storage/protocols.d.ts.map +1 -0
  76. package/dist/storage/protocols.js +20 -0
  77. package/dist/storage/protocols.js.map +1 -0
  78. package/dist/todoCore.d.ts +15 -0
  79. package/dist/todoCore.d.ts.map +1 -0
  80. package/dist/todoCore.js +52 -0
  81. package/dist/todoCore.js.map +1 -0
  82. package/dist/toolsCore.d.ts +31 -0
  83. package/dist/toolsCore.d.ts.map +1 -0
  84. package/dist/toolsCore.js +609 -0
  85. package/dist/toolsCore.js.map +1 -0
  86. package/dist/types.d.ts +144 -0
  87. package/dist/types.d.ts.map +1 -0
  88. package/dist/types.js +8 -0
  89. package/dist/types.js.map +1 -0
  90. package/package.json +48 -0
@@ -0,0 +1,54 @@
1
+ /**
2
+ * sessionCore.ts - Session manager: lifecycle, conversation history, persistence.
3
+ */
4
+ import { SessionStore } from './storage/protocols';
5
+ export declare const SESSION_STATE_ACTIVE = "active";
6
+ export declare const SESSION_STATE_ARCHIVED = "archived";
7
+ export declare class Session {
8
+ id: string;
9
+ state: string;
10
+ history: Record<string, any>[];
11
+ context: Record<string, any>;
12
+ createdAt: number;
13
+ updatedAt: number;
14
+ constructor(options: {
15
+ id: string;
16
+ state?: string;
17
+ history?: Record<string, any>[];
18
+ context?: Record<string, any>;
19
+ createdAt?: number;
20
+ updatedAt?: number;
21
+ });
22
+ toDict(): Record<string, any>;
23
+ static fromDict(data: Record<string, any>): Session;
24
+ }
25
+ export declare class SessionManager {
26
+ private _storageDir;
27
+ private _store;
28
+ private _sessions;
29
+ private _activeSessionId;
30
+ constructor(options?: {
31
+ storageDir?: string;
32
+ store?: SessionStore | null;
33
+ });
34
+ private _ensureStorageDir;
35
+ private _sessionFile;
36
+ get sessions(): Map<string, Session>;
37
+ get activeSession(): Session | null;
38
+ createSession(options?: {
39
+ context?: Record<string, any>;
40
+ loadConversationHistory?: boolean;
41
+ }): Session;
42
+ restoreSession(sessionId: string): Session | null;
43
+ setActiveSession(sessionId: string): Session | null;
44
+ getActiveSession(): Session | null;
45
+ recordFileAccess(filePath: string): void;
46
+ saveSession(session: Session): void;
47
+ saveActive(): void;
48
+ private _loadFromDisk;
49
+ private _loadLatestFromDisk;
50
+ listSessionIds(): string[];
51
+ listSessionsSummary(limit?: number): Record<string, any>[];
52
+ archiveSession(sessionId: string): boolean;
53
+ }
54
+ //# sourceMappingURL=sessionCore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionCore.d.ts","sourceRoot":"","sources":["../src/sessionCore.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAInD,eAAO,MAAM,oBAAoB,WAAW,CAAC;AAC7C,eAAO,MAAM,sBAAsB,aAAa,CAAC;AAMjD,qBAAa,OAAO;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;gBAEN,OAAO,EAAE;QACjB,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;KACtB;IASD,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAW7B,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO;CAUtD;AAMD,qBAAa,cAAc;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,gBAAgB,CAAuB;gBAEnC,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,YAAY,GAAG,IAAI,CAAA;KAAE;IAQ1E,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,YAAY;IAIpB,IAAI,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAEnC;IAED,IAAI,aAAa,IAAI,OAAO,GAAG,IAAI,CAGlC;IAED,aAAa,CAAC,OAAO,CAAC,EAAE;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC9B,uBAAuB,CAAC,EAAE,OAAO,CAAC;KACrC,GAAG,OAAO;IAqBX,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAajD,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAQnD,gBAAgB,IAAI,OAAO,GAAG,IAAI;IAIlC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAqBxC,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAkBnC,UAAU,IAAI,IAAI;IAKlB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,mBAAmB;IA2B3B,cAAc,IAAI,MAAM,EAAE;IAY1B,mBAAmB,CAAC,KAAK,GAAE,MAAW,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;IA0C9D,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;CAe7C"}
@@ -0,0 +1,312 @@
1
+ "use strict";
2
+ /**
3
+ * sessionCore.ts - Session manager: lifecycle, conversation history, persistence.
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.SessionManager = exports.Session = exports.SESSION_STATE_ARCHIVED = exports.SESSION_STATE_ACTIVE = void 0;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const uuid_1 = require("uuid");
43
+ const config_1 = require("./config");
44
+ const SESSION_DIR = process.env.AGENT_SESSION_DIR ?? path.join(config_1.WORKDIR, 'data', 'sessions');
45
+ exports.SESSION_STATE_ACTIVE = 'active';
46
+ exports.SESSION_STATE_ARCHIVED = 'archived';
47
+ // ---------------------------------------------------------------------------
48
+ // Session
49
+ // ---------------------------------------------------------------------------
50
+ class Session {
51
+ id;
52
+ state;
53
+ history;
54
+ context;
55
+ createdAt;
56
+ updatedAt;
57
+ constructor(options) {
58
+ this.id = options.id;
59
+ this.state = options.state ?? exports.SESSION_STATE_ACTIVE;
60
+ this.history = options.history ?? [];
61
+ this.context = options.context ?? {};
62
+ this.createdAt = options.createdAt ?? Date.now() / 1000;
63
+ this.updatedAt = options.updatedAt ?? Date.now() / 1000;
64
+ }
65
+ toDict() {
66
+ return {
67
+ id: this.id,
68
+ state: this.state,
69
+ history: this.history,
70
+ context: this.context,
71
+ created_at: this.createdAt,
72
+ updated_at: this.updatedAt,
73
+ };
74
+ }
75
+ static fromDict(data) {
76
+ return new Session({
77
+ id: data.id,
78
+ state: data.state ?? exports.SESSION_STATE_ACTIVE,
79
+ history: data.history ?? [],
80
+ context: data.context ?? {},
81
+ createdAt: data.created_at ?? Date.now() / 1000,
82
+ updatedAt: data.updated_at ?? Date.now() / 1000,
83
+ });
84
+ }
85
+ }
86
+ exports.Session = Session;
87
+ // ---------------------------------------------------------------------------
88
+ // SessionManager
89
+ // ---------------------------------------------------------------------------
90
+ class SessionManager {
91
+ _storageDir;
92
+ _store;
93
+ _sessions = new Map();
94
+ _activeSessionId = null;
95
+ constructor(options) {
96
+ this._storageDir = options?.storageDir ?? SESSION_DIR;
97
+ this._store = options?.store ?? null;
98
+ if (!this._store) {
99
+ this._ensureStorageDir();
100
+ }
101
+ }
102
+ _ensureStorageDir() {
103
+ fs.mkdirSync(this._storageDir, { recursive: true });
104
+ }
105
+ _sessionFile(sessionId) {
106
+ return path.join(this._storageDir, `${sessionId}.json`);
107
+ }
108
+ get sessions() {
109
+ return this._sessions;
110
+ }
111
+ get activeSession() {
112
+ if (!this._activeSessionId)
113
+ return null;
114
+ return this._sessions.get(this._activeSessionId) ?? null;
115
+ }
116
+ createSession(options) {
117
+ const sessionId = (0, uuid_1.v4)();
118
+ let history = [];
119
+ if (options?.loadConversationHistory) {
120
+ const last = this._loadLatestFromDisk();
121
+ if (last) {
122
+ history = (last.history ?? []).slice(0, 50);
123
+ }
124
+ }
125
+ const session = new Session({
126
+ id: sessionId,
127
+ state: exports.SESSION_STATE_ACTIVE,
128
+ history,
129
+ context: options?.context ?? {},
130
+ });
131
+ this._sessions.set(sessionId, session);
132
+ this._activeSessionId = sessionId;
133
+ this.saveSession(session);
134
+ return session;
135
+ }
136
+ restoreSession(sessionId) {
137
+ if (this._sessions.has(sessionId)) {
138
+ this._activeSessionId = sessionId;
139
+ return this._sessions.get(sessionId);
140
+ }
141
+ const data = this._loadFromDisk(sessionId);
142
+ if (!data)
143
+ return null;
144
+ const session = Session.fromDict(data);
145
+ this._sessions.set(sessionId, session);
146
+ this._activeSessionId = sessionId;
147
+ return session;
148
+ }
149
+ setActiveSession(sessionId) {
150
+ if (!this._sessions.has(sessionId)) {
151
+ return this.restoreSession(sessionId);
152
+ }
153
+ this._activeSessionId = sessionId;
154
+ return this._sessions.get(sessionId);
155
+ }
156
+ getActiveSession() {
157
+ return this.activeSession;
158
+ }
159
+ recordFileAccess(filePath) {
160
+ const active = this.activeSession;
161
+ if (!active || !filePath?.trim())
162
+ return;
163
+ const now = Date.now() / 1000;
164
+ const recent = active.context.recent_files ?? [];
165
+ const normalized = filePath.trim();
166
+ const found = recent.find((f) => f.path === normalized);
167
+ if (found) {
168
+ found.access_count = (found.access_count ?? 0) + 1;
169
+ found.last_accessed = now;
170
+ }
171
+ else {
172
+ recent.push({ path: normalized, access_count: 1, last_accessed: now });
173
+ }
174
+ recent.sort((a, b) => -(a.access_count ?? 0) + (b.access_count ?? 0) ||
175
+ -(a.last_accessed ?? 0) + (b.last_accessed ?? 0));
176
+ active.context.recent_files = recent.slice(0, 100);
177
+ }
178
+ saveSession(session) {
179
+ session.updatedAt = Date.now() / 1000;
180
+ let data = session.toDict();
181
+ try {
182
+ const { sanitizeForStorage } = require('./memoryCore');
183
+ data = sanitizeForStorage(data);
184
+ }
185
+ catch {
186
+ // memoryCore not available
187
+ }
188
+ if (this._store) {
189
+ this._store.put(session.id, data);
190
+ return;
191
+ }
192
+ this._ensureStorageDir();
193
+ const filePath = this._sessionFile(session.id);
194
+ fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8');
195
+ }
196
+ saveActive() {
197
+ const s = this.activeSession;
198
+ if (s)
199
+ this.saveSession(s);
200
+ }
201
+ _loadFromDisk(sessionId) {
202
+ if (this._store)
203
+ return this._store.get(sessionId);
204
+ const filePath = this._sessionFile(sessionId);
205
+ if (!fs.existsSync(filePath))
206
+ return null;
207
+ try {
208
+ return JSON.parse(fs.readFileSync(filePath, 'utf-8'));
209
+ }
210
+ catch {
211
+ return null;
212
+ }
213
+ }
214
+ _loadLatestFromDisk() {
215
+ if (this._store) {
216
+ const summaries = this._store.listSummaries(1);
217
+ if (!summaries.length)
218
+ return null;
219
+ return this._store.get(summaries[0].id);
220
+ }
221
+ this._ensureStorageDir();
222
+ let latest = null;
223
+ if (fs.existsSync(this._storageDir)) {
224
+ for (const f of fs.readdirSync(this._storageDir)) {
225
+ if (!f.endsWith('.json'))
226
+ continue;
227
+ try {
228
+ const data = JSON.parse(fs.readFileSync(path.join(this._storageDir, f), 'utf-8'));
229
+ const updated = data.updated_at ?? 0;
230
+ if (!latest || updated > latest.time) {
231
+ latest = { time: updated, data };
232
+ }
233
+ }
234
+ catch {
235
+ continue;
236
+ }
237
+ }
238
+ }
239
+ return latest?.data ?? null;
240
+ }
241
+ listSessionIds() {
242
+ const ids = new Set(this._sessions.keys());
243
+ if (this._store) {
244
+ for (const id of this._store.listIds())
245
+ ids.add(id);
246
+ }
247
+ else if (fs.existsSync(this._storageDir)) {
248
+ for (const f of fs.readdirSync(this._storageDir)) {
249
+ if (f.endsWith('.json'))
250
+ ids.add(path.basename(f, '.json'));
251
+ }
252
+ }
253
+ return [...ids].sort();
254
+ }
255
+ listSessionsSummary(limit = 20) {
256
+ if (this._store)
257
+ return this._store.listSummaries(limit);
258
+ const entries = [];
259
+ const seen = new Set();
260
+ for (const [sid, session] of this._sessions) {
261
+ entries.push({
262
+ id: sid,
263
+ updated_at: session.updatedAt,
264
+ turns: session.history.filter((m) => m.role === 'user').length,
265
+ state: session.state,
266
+ });
267
+ seen.add(sid);
268
+ }
269
+ if (fs.existsSync(this._storageDir)) {
270
+ for (const f of fs.readdirSync(this._storageDir)) {
271
+ if (!f.endsWith('.json'))
272
+ continue;
273
+ const sid = path.basename(f, '.json');
274
+ if (seen.has(sid))
275
+ continue;
276
+ try {
277
+ const data = JSON.parse(fs.readFileSync(path.join(this._storageDir, f), 'utf-8'));
278
+ entries.push({
279
+ id: sid,
280
+ updated_at: data.updated_at ?? 0,
281
+ turns: (data.history ?? []).filter((m) => m.role === 'user').length,
282
+ state: data.state ?? 'unknown',
283
+ });
284
+ }
285
+ catch {
286
+ continue;
287
+ }
288
+ }
289
+ }
290
+ entries.sort((a, b) => b.updated_at - a.updated_at);
291
+ return entries.slice(0, limit);
292
+ }
293
+ archiveSession(sessionId) {
294
+ let s = this._sessions.get(sessionId) ?? null;
295
+ if (!s) {
296
+ const d = this._loadFromDisk(sessionId);
297
+ if (d)
298
+ s = Session.fromDict(d);
299
+ }
300
+ if (!s)
301
+ return false;
302
+ s.state = exports.SESSION_STATE_ARCHIVED;
303
+ this._sessions.set(sessionId, s);
304
+ this.saveSession(s);
305
+ if (this._activeSessionId === sessionId) {
306
+ this._activeSessionId = null;
307
+ }
308
+ return true;
309
+ }
310
+ }
311
+ exports.SessionManager = SessionManager;
312
+ //# sourceMappingURL=sessionCore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionCore.js","sourceRoot":"","sources":["../src/sessionCore.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAC7B,+BAAoC;AACpC,qCAAmC;AAGnC,MAAM,WAAW,GACb,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAC/D,QAAA,oBAAoB,GAAG,QAAQ,CAAC;AAChC,QAAA,sBAAsB,GAAG,UAAU,CAAC;AAEjD,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,MAAa,OAAO;IAChB,EAAE,CAAS;IACX,KAAK,CAAS;IACd,OAAO,CAAwB;IAC/B,OAAO,CAAsB;IAC7B,SAAS,CAAS;IAClB,SAAS,CAAS;IAElB,YAAY,OAOX;QACG,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,4BAAoB,CAAC;QACnD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QACxD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IAC5D,CAAC;IAED,MAAM;QACF,OAAO;YACH,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,SAAS;YAC1B,UAAU,EAAE,IAAI,CAAC,SAAS;SAC7B,CAAC;IACN,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAyB;QACrC,OAAO,IAAI,OAAO,CAAC;YACf,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,4BAAoB;YACzC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;YAC3B,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;YAC3B,SAAS,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI;YAC/C,SAAS,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI;SAClD,CAAC,CAAC;IACP,CAAC;CACJ;AA7CD,0BA6CC;AAED,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,MAAa,cAAc;IACf,WAAW,CAAS;IACpB,MAAM,CAAsB;IAC5B,SAAS,GAAyB,IAAI,GAAG,EAAE,CAAC;IAC5C,gBAAgB,GAAkB,IAAI,CAAC;IAE/C,YAAY,OAA8D;QACtE,IAAI,CAAC,WAAW,GAAG,OAAO,EAAE,UAAU,IAAI,WAAW,CAAC;QACtD,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7B,CAAC;IACL,CAAC;IAEO,iBAAiB;QACrB,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAEO,YAAY,CAAC,SAAiB;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,SAAS,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,IAAI,aAAa;QACb,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE,OAAO,IAAI,CAAC;QACxC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC;IAC7D,CAAC;IAED,aAAa,CAAC,OAGb;QACG,MAAM,SAAS,GAAG,IAAA,SAAM,GAAE,CAAC;QAC3B,IAAI,OAAO,GAA0B,EAAE,CAAC;QACxC,IAAI,OAAO,EAAE,uBAAuB,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACxC,IAAI,IAAI,EAAE,CAAC;gBACP,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChD,CAAC;QACL,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC;YACxB,EAAE,EAAE,SAAS;YACb,KAAK,EAAE,4BAAoB;YAC3B,OAAO;YACP,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE;SAClC,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAClC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,cAAc,CAAC,SAAiB;QAC5B,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;YAClC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;QAC1C,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAClC,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,gBAAgB,CAAC,SAAiB;QAC9B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAClC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;IAC1C,CAAC;IAED,gBAAgB;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAED,gBAAgB,CAAC,QAAgB;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;QAClC,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE;YAAE,OAAO;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QAC9B,MAAM,MAAM,GAA0B,MAAM,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;QACxE,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;QACxD,IAAI,KAAK,EAAE,CAAC;YACR,KAAK,CAAC,YAAY,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACnD,KAAK,CAAC,aAAa,GAAG,GAAG,CAAC;QAC9B,CAAC;aAAM,CAAC;YACJ,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,CAAC,IAAI,CACP,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACL,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC;YAC9C,CAAC,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,CACvD,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,CAAC;IAED,WAAW,CAAC,OAAgB;QACxB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QACtC,IAAI,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC5B,IAAI,CAAC;YACD,MAAM,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;YACvD,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACL,2BAA2B;QAC/B,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAClC,OAAO;QACX,CAAC;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC/C,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACvE,CAAC;IAED,UAAU;QACN,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;QAC7B,IAAI,CAAC;YAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IAEO,aAAa,CAAC,SAAiB;QACnC,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1C,IAAI,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1D,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAEO,mBAAmB;QACvB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YAC/C,IAAI,CAAC,SAAS,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;YACnC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,MAAM,GAAuD,IAAI,CAAC;QACtE,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAClC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC/C,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAAE,SAAS;gBACnC,IAAI,CAAC;oBACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CACnB,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAC3D,CAAC;oBACF,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;oBACrC,IAAI,CAAC,MAAM,IAAI,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;wBACnC,MAAM,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;oBACrC,CAAC;gBACL,CAAC;gBAAC,MAAM,CAAC;oBACL,SAAS;gBACb,CAAC;YACL,CAAC;QACL,CAAC;QACD,OAAO,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC;IAChC,CAAC;IAED,cAAc;QACV,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;gBAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxD,CAAC;aAAM,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACzC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC/C,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YAChE,CAAC;QACL,CAAC;QACD,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,mBAAmB,CAAC,QAAgB,EAAE;QAClC,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACzD,MAAM,OAAO,GAA0B,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC;gBACT,EAAE,EAAE,GAAG;gBACP,UAAU,EAAE,OAAO,CAAC,SAAS;gBAC7B,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,MAAM;gBAC9D,KAAK,EAAE,OAAO,CAAC,KAAK;aACvB,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAClC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC/C,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAAE,SAAS;gBACnC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACtC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,SAAS;gBAC5B,IAAI,CAAC;oBACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CACnB,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAC3D,CAAC;oBACF,OAAO,CAAC,IAAI,CAAC;wBACT,EAAE,EAAE,GAAG;wBACP,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC;wBAChC,KAAK,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAC9B,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAChC,CAAC,MAAM;wBACR,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS;qBACjC,CAAC,CAAC;gBACP,CAAC;gBAAC,MAAM,CAAC;oBACL,SAAS;gBACb,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;QACpD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,cAAc,CAAC,SAAiB;QAC5B,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;QAC9C,IAAI,CAAC,CAAC,EAAE,CAAC;YACL,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YACxC,IAAI,CAAC;gBAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QACrB,CAAC,CAAC,KAAK,GAAG,8BAAsB,CAAC;QACjC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACjC,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAvOD,wCAuOC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * skillsCore.ts - Skill loading and management.
3
+ *
4
+ * Loads skills from SKILL.md files or from a SkillStore.
5
+ */
6
+ export interface SkillStore {
7
+ listSkills(): string[];
8
+ getSkill(name: string): Record<string, any> | null;
9
+ }
10
+ export declare class SkillLoader {
11
+ skillsDir: string;
12
+ private _store;
13
+ skills: Record<string, Record<string, any>>;
14
+ constructor(skillsDir?: string, store?: SkillStore | null);
15
+ setStore(store: SkillStore | null): void;
16
+ parseSkillMd(filePath: string): Record<string, any> | null;
17
+ loadSkills(): void;
18
+ getDescriptions(): string;
19
+ getSkillContent(name: string): string | null;
20
+ listSkills(): string[];
21
+ }
22
+ export declare const SKILLS: SkillLoader;
23
+ //# sourceMappingURL=skillsCore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillsCore.d.ts","sourceRoot":"","sources":["../src/skillsCore.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,MAAM,WAAW,UAAU;IACvB,UAAU,IAAI,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;CACtD;AAMD,qBAAa,WAAW;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,MAAM,CAAoB;IAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAM;gBAErC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,IAAI;IAQzD,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI;IASxC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAoC1D,UAAU,IAAI,IAAI;IAelB,eAAe,IAAI,MAAM;IAkBzB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAsD5C,UAAU,IAAI,MAAM,EAAE;CAIzB;AAGD,eAAO,MAAM,MAAM,aAA8B,CAAC"}
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+ /**
3
+ * skillsCore.ts - Skill loading and management.
4
+ *
5
+ * Loads skills from SKILL.md files or from a SkillStore.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.SKILLS = exports.SkillLoader = void 0;
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const config_1 = require("./config");
45
+ // ---------------------------------------------------------------------------
46
+ // SkillLoader
47
+ // ---------------------------------------------------------------------------
48
+ class SkillLoader {
49
+ skillsDir;
50
+ _store;
51
+ skills = {};
52
+ constructor(skillsDir, store) {
53
+ this.skillsDir = skillsDir ?? config_1.SKILLS_DIR;
54
+ this._store = store ?? null;
55
+ if (!this._store) {
56
+ this.loadSkills();
57
+ }
58
+ }
59
+ setStore(store) {
60
+ this._store = store;
61
+ if (store) {
62
+ this.skills = {};
63
+ }
64
+ else {
65
+ this.loadSkills();
66
+ }
67
+ }
68
+ parseSkillMd(filePath) {
69
+ let content;
70
+ try {
71
+ content = fs.readFileSync(filePath, 'utf-8');
72
+ }
73
+ catch {
74
+ return null;
75
+ }
76
+ const match = content.match(/^---\s*\n([\s\S]*?)\n---\s*\n([\s\S]*)$/);
77
+ if (!match)
78
+ return null;
79
+ const [, frontmatter, body] = match;
80
+ const metadata = {};
81
+ for (const line of frontmatter.trim().split('\n')) {
82
+ const colonIndex = line.indexOf(':');
83
+ if (colonIndex >= 0) {
84
+ const key = line.slice(0, colonIndex).trim();
85
+ const value = line
86
+ .slice(colonIndex + 1)
87
+ .trim()
88
+ .replace(/^["']|["']$/g, '');
89
+ metadata[key] = value;
90
+ }
91
+ }
92
+ if (!metadata.name || !metadata.description)
93
+ return null;
94
+ return {
95
+ name: metadata.name,
96
+ description: metadata.description,
97
+ body: body.trim(),
98
+ path: filePath,
99
+ dir: path.dirname(filePath),
100
+ };
101
+ }
102
+ loadSkills() {
103
+ if (!fs.existsSync(this.skillsDir))
104
+ return;
105
+ const entries = fs.readdirSync(this.skillsDir, { withFileTypes: true });
106
+ for (const entry of entries) {
107
+ if (!entry.isDirectory())
108
+ continue;
109
+ const skillMd = path.join(this.skillsDir, entry.name, 'SKILL.md');
110
+ if (!fs.existsSync(skillMd))
111
+ continue;
112
+ const skill = this.parseSkillMd(skillMd);
113
+ if (skill) {
114
+ this.skills[skill.name] = skill;
115
+ }
116
+ }
117
+ }
118
+ getDescriptions() {
119
+ if (this._store) {
120
+ const names = this._store.listSkills();
121
+ if (!names.length)
122
+ return '(no skills available)';
123
+ return names
124
+ .map((name) => {
125
+ const skill = this._store.getSkill(name);
126
+ const desc = skill?.description ?? '';
127
+ return `- ${name}: ${desc}`;
128
+ })
129
+ .join('\n');
130
+ }
131
+ if (!Object.keys(this.skills).length)
132
+ return '(no skills available)';
133
+ return Object.entries(this.skills)
134
+ .map(([name, skill]) => `- ${name}: ${skill.description}`)
135
+ .join('\n');
136
+ }
137
+ getSkillContent(name) {
138
+ if (this._store) {
139
+ const skill = this._store.getSkill(name);
140
+ if (!skill)
141
+ return null;
142
+ let content = `# Skill: ${skill.name}\n\n${skill.body ?? ''}`;
143
+ const resources = [];
144
+ if (Array.isArray(skill.resources)) {
145
+ for (const r of skill.resources)
146
+ resources.push(String(r));
147
+ }
148
+ else if (skill.dir) {
149
+ for (const [folder, label] of [
150
+ ['scripts', 'Scripts'],
151
+ ['references', 'References'],
152
+ ['assets', 'Assets'],
153
+ ]) {
154
+ const folderPath = path.join(String(skill.dir), folder);
155
+ if (fs.existsSync(folderPath)) {
156
+ const files = fs.readdirSync(folderPath);
157
+ if (files.length) {
158
+ resources.push(`${label}: ${files.join(', ')}`);
159
+ }
160
+ }
161
+ }
162
+ }
163
+ if (resources.length) {
164
+ content += '\n\n**Available resources:**\n';
165
+ content += resources.map((r) => `- ${r}`).join('\n');
166
+ }
167
+ return content;
168
+ }
169
+ const skill = this.skills[name];
170
+ if (!skill)
171
+ return null;
172
+ let content = `# Skill: ${skill.name}\n\n${skill.body}`;
173
+ const resources = [];
174
+ for (const [folder, label] of [
175
+ ['scripts', 'Scripts'],
176
+ ['references', 'References'],
177
+ ['assets', 'Assets'],
178
+ ]) {
179
+ const folderPath = path.join(skill.dir, folder);
180
+ if (fs.existsSync(folderPath)) {
181
+ const files = fs.readdirSync(folderPath);
182
+ if (files.length) {
183
+ resources.push(`${label}: ${files.join(', ')}`);
184
+ }
185
+ }
186
+ }
187
+ if (resources.length) {
188
+ content += `\n\n**Available resources in ${skill.dir}:**\n`;
189
+ content += resources.map((r) => `- ${r}`).join('\n');
190
+ }
191
+ return content;
192
+ }
193
+ listSkills() {
194
+ if (this._store)
195
+ return this._store.listSkills();
196
+ return Object.keys(this.skills);
197
+ }
198
+ }
199
+ exports.SkillLoader = SkillLoader;
200
+ // Global instance
201
+ exports.SKILLS = new SkillLoader(config_1.SKILLS_DIR);
202
+ //# sourceMappingURL=skillsCore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillsCore.js","sourceRoot":"","sources":["../src/skillsCore.ts"],"names":[],"mappings":"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"}