@jungjaehoon/mama-os 0.1.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 (356) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/README.md +643 -0
  3. package/dist/agent/agent-loop.d.ts +98 -0
  4. package/dist/agent/agent-loop.d.ts.map +1 -0
  5. package/dist/agent/agent-loop.js +417 -0
  6. package/dist/agent/agent-loop.js.map +1 -0
  7. package/dist/agent/auto-recall.d.ts +48 -0
  8. package/dist/agent/auto-recall.d.ts.map +1 -0
  9. package/dist/agent/auto-recall.js +178 -0
  10. package/dist/agent/auto-recall.js.map +1 -0
  11. package/dist/agent/claude-cli-wrapper.d.ts +130 -0
  12. package/dist/agent/claude-cli-wrapper.d.ts.map +1 -0
  13. package/dist/agent/claude-cli-wrapper.js +227 -0
  14. package/dist/agent/claude-cli-wrapper.js.map +1 -0
  15. package/dist/agent/claude-client.d.ts +50 -0
  16. package/dist/agent/claude-client.d.ts.map +1 -0
  17. package/dist/agent/claude-client.js +214 -0
  18. package/dist/agent/claude-client.js.map +1 -0
  19. package/dist/agent/gateway-tool-executor.d.ts +75 -0
  20. package/dist/agent/gateway-tool-executor.d.ts.map +1 -0
  21. package/dist/agent/gateway-tool-executor.js +348 -0
  22. package/dist/agent/gateway-tool-executor.js.map +1 -0
  23. package/dist/agent/index.d.ts +13 -0
  24. package/dist/agent/index.d.ts.map +1 -0
  25. package/dist/agent/index.js +18 -0
  26. package/dist/agent/index.js.map +1 -0
  27. package/dist/agent/mcp-executor.d.ts +75 -0
  28. package/dist/agent/mcp-executor.d.ts.map +1 -0
  29. package/dist/agent/mcp-executor.js +307 -0
  30. package/dist/agent/mcp-executor.js.map +1 -0
  31. package/dist/agent/session-pool.d.ts +148 -0
  32. package/dist/agent/session-pool.d.ts.map +1 -0
  33. package/dist/agent/session-pool.js +272 -0
  34. package/dist/agent/session-pool.js.map +1 -0
  35. package/dist/agent/streaming-callback-manager.d.ts +85 -0
  36. package/dist/agent/streaming-callback-manager.d.ts.map +1 -0
  37. package/dist/agent/streaming-callback-manager.js +103 -0
  38. package/dist/agent/streaming-callback-manager.js.map +1 -0
  39. package/dist/agent/types.d.ts +437 -0
  40. package/dist/agent/types.d.ts.map +1 -0
  41. package/dist/agent/types.js +29 -0
  42. package/dist/agent/types.js.map +1 -0
  43. package/dist/api/cron-handler.d.ts +44 -0
  44. package/dist/api/cron-handler.d.ts.map +1 -0
  45. package/dist/api/cron-handler.js +195 -0
  46. package/dist/api/cron-handler.js.map +1 -0
  47. package/dist/api/error-handler.d.ts +22 -0
  48. package/dist/api/error-handler.d.ts.map +1 -0
  49. package/dist/api/error-handler.js +104 -0
  50. package/dist/api/error-handler.js.map +1 -0
  51. package/dist/api/heartbeat-handler.d.ts +49 -0
  52. package/dist/api/heartbeat-handler.d.ts.map +1 -0
  53. package/dist/api/heartbeat-handler.js +91 -0
  54. package/dist/api/heartbeat-handler.js.map +1 -0
  55. package/dist/api/index.d.ts +61 -0
  56. package/dist/api/index.d.ts.map +1 -0
  57. package/dist/api/index.js +145 -0
  58. package/dist/api/index.js.map +1 -0
  59. package/dist/api/types.d.ts +156 -0
  60. package/dist/api/types.d.ts.map +1 -0
  61. package/dist/api/types.js +62 -0
  62. package/dist/api/types.js.map +1 -0
  63. package/dist/auth/index.d.ts +7 -0
  64. package/dist/auth/index.d.ts.map +1 -0
  65. package/dist/auth/index.js +11 -0
  66. package/dist/auth/index.js.map +1 -0
  67. package/dist/auth/oauth-manager.d.ts +59 -0
  68. package/dist/auth/oauth-manager.d.ts.map +1 -0
  69. package/dist/auth/oauth-manager.js +237 -0
  70. package/dist/auth/oauth-manager.js.map +1 -0
  71. package/dist/auth/types.d.ts +92 -0
  72. package/dist/auth/types.d.ts.map +1 -0
  73. package/dist/auth/types.js +23 -0
  74. package/dist/auth/types.js.map +1 -0
  75. package/dist/cli/commands/init.d.ts +19 -0
  76. package/dist/cli/commands/init.d.ts.map +1 -0
  77. package/dist/cli/commands/init.js +155 -0
  78. package/dist/cli/commands/init.js.map +1 -0
  79. package/dist/cli/commands/run.d.ts +19 -0
  80. package/dist/cli/commands/run.d.ts.map +1 -0
  81. package/dist/cli/commands/run.js +89 -0
  82. package/dist/cli/commands/run.js.map +1 -0
  83. package/dist/cli/commands/setup.d.ts +19 -0
  84. package/dist/cli/commands/setup.d.ts.map +1 -0
  85. package/dist/cli/commands/setup.js +134 -0
  86. package/dist/cli/commands/setup.js.map +1 -0
  87. package/dist/cli/commands/start.d.ts +24 -0
  88. package/dist/cli/commands/start.d.ts.map +1 -0
  89. package/dist/cli/commands/start.js +1073 -0
  90. package/dist/cli/commands/start.js.map +1 -0
  91. package/dist/cli/commands/status.d.ts +10 -0
  92. package/dist/cli/commands/status.d.ts.map +1 -0
  93. package/dist/cli/commands/status.js +85 -0
  94. package/dist/cli/commands/status.js.map +1 -0
  95. package/dist/cli/commands/stop.d.ts +10 -0
  96. package/dist/cli/commands/stop.d.ts.map +1 -0
  97. package/dist/cli/commands/stop.js +65 -0
  98. package/dist/cli/commands/stop.js.map +1 -0
  99. package/dist/cli/config/config-manager.d.ts +51 -0
  100. package/dist/cli/config/config-manager.d.ts.map +1 -0
  101. package/dist/cli/config/config-manager.js +216 -0
  102. package/dist/cli/config/config-manager.js.map +1 -0
  103. package/dist/cli/config/types.d.ts +172 -0
  104. package/dist/cli/config/types.d.ts.map +1 -0
  105. package/dist/cli/config/types.js +48 -0
  106. package/dist/cli/config/types.js.map +1 -0
  107. package/dist/cli/index.d.ts +8 -0
  108. package/dist/cli/index.d.ts.map +1 -0
  109. package/dist/cli/index.js +92 -0
  110. package/dist/cli/index.js.map +1 -0
  111. package/dist/cli/utils/pid-manager.d.ts +66 -0
  112. package/dist/cli/utils/pid-manager.d.ts.map +1 -0
  113. package/dist/cli/utils/pid-manager.js +167 -0
  114. package/dist/cli/utils/pid-manager.js.map +1 -0
  115. package/dist/concurrency/index.d.ts +13 -0
  116. package/dist/concurrency/index.d.ts.map +1 -0
  117. package/dist/concurrency/index.js +22 -0
  118. package/dist/concurrency/index.js.map +1 -0
  119. package/dist/concurrency/lane-manager.d.ts +113 -0
  120. package/dist/concurrency/lane-manager.d.ts.map +1 -0
  121. package/dist/concurrency/lane-manager.js +245 -0
  122. package/dist/concurrency/lane-manager.js.map +1 -0
  123. package/dist/concurrency/session-key.d.ts +41 -0
  124. package/dist/concurrency/session-key.d.ts.map +1 -0
  125. package/dist/concurrency/session-key.js +61 -0
  126. package/dist/concurrency/session-key.js.map +1 -0
  127. package/dist/concurrency/types.d.ts +69 -0
  128. package/dist/concurrency/types.d.ts.map +1 -0
  129. package/dist/concurrency/types.js +16 -0
  130. package/dist/concurrency/types.js.map +1 -0
  131. package/dist/gateways/channel-history.d.ts +102 -0
  132. package/dist/gateways/channel-history.d.ts.map +1 -0
  133. package/dist/gateways/channel-history.js +181 -0
  134. package/dist/gateways/channel-history.js.map +1 -0
  135. package/dist/gateways/context-injector.d.ts +74 -0
  136. package/dist/gateways/context-injector.d.ts.map +1 -0
  137. package/dist/gateways/context-injector.js +121 -0
  138. package/dist/gateways/context-injector.js.map +1 -0
  139. package/dist/gateways/discord.d.ts +122 -0
  140. package/dist/gateways/discord.d.ts.map +1 -0
  141. package/dist/gateways/discord.js +602 -0
  142. package/dist/gateways/discord.js.map +1 -0
  143. package/dist/gateways/index.d.ts +30 -0
  144. package/dist/gateways/index.d.ts.map +1 -0
  145. package/dist/gateways/index.js +49 -0
  146. package/dist/gateways/index.js.map +1 -0
  147. package/dist/gateways/message-router.d.ts +116 -0
  148. package/dist/gateways/message-router.d.ts.map +1 -0
  149. package/dist/gateways/message-router.js +315 -0
  150. package/dist/gateways/message-router.js.map +1 -0
  151. package/dist/gateways/message-splitter.d.ts +54 -0
  152. package/dist/gateways/message-splitter.d.ts.map +1 -0
  153. package/dist/gateways/message-splitter.js +146 -0
  154. package/dist/gateways/message-splitter.js.map +1 -0
  155. package/dist/gateways/plugin-loader.d.ts +76 -0
  156. package/dist/gateways/plugin-loader.d.ts.map +1 -0
  157. package/dist/gateways/plugin-loader.js +221 -0
  158. package/dist/gateways/plugin-loader.js.map +1 -0
  159. package/dist/gateways/session-store.d.ts +77 -0
  160. package/dist/gateways/session-store.d.ts.map +1 -0
  161. package/dist/gateways/session-store.js +233 -0
  162. package/dist/gateways/session-store.js.map +1 -0
  163. package/dist/gateways/slack.d.ts +90 -0
  164. package/dist/gateways/slack.d.ts.map +1 -0
  165. package/dist/gateways/slack.js +281 -0
  166. package/dist/gateways/slack.js.map +1 -0
  167. package/dist/gateways/telegram.d.ts +79 -0
  168. package/dist/gateways/telegram.d.ts.map +1 -0
  169. package/dist/gateways/telegram.js +207 -0
  170. package/dist/gateways/telegram.js.map +1 -0
  171. package/dist/gateways/types.d.ts +340 -0
  172. package/dist/gateways/types.d.ts.map +1 -0
  173. package/dist/gateways/types.js +6 -0
  174. package/dist/gateways/types.js.map +1 -0
  175. package/dist/index.d.ts +7 -0
  176. package/dist/index.d.ts.map +1 -0
  177. package/dist/index.js +26 -0
  178. package/dist/index.js.map +1 -0
  179. package/dist/memory/memory-logger.d.ts +47 -0
  180. package/dist/memory/memory-logger.d.ts.map +1 -0
  181. package/dist/memory/memory-logger.js +126 -0
  182. package/dist/memory/memory-logger.js.map +1 -0
  183. package/dist/onboarding/all-tools.d.ts +18 -0
  184. package/dist/onboarding/all-tools.d.ts.map +1 -0
  185. package/dist/onboarding/all-tools.js +149 -0
  186. package/dist/onboarding/all-tools.js.map +1 -0
  187. package/dist/onboarding/autonomous-discovery-tools.d.ts +13 -0
  188. package/dist/onboarding/autonomous-discovery-tools.d.ts.map +1 -0
  189. package/dist/onboarding/autonomous-discovery-tools.js +268 -0
  190. package/dist/onboarding/autonomous-discovery-tools.js.map +1 -0
  191. package/dist/onboarding/bootstrap-template.d.ts +5 -0
  192. package/dist/onboarding/bootstrap-template.d.ts.map +1 -0
  193. package/dist/onboarding/bootstrap-template.js +142 -0
  194. package/dist/onboarding/bootstrap-template.js.map +1 -0
  195. package/dist/onboarding/complete-autonomous-prompt.d.ts +13 -0
  196. package/dist/onboarding/complete-autonomous-prompt.d.ts.map +1 -0
  197. package/dist/onboarding/complete-autonomous-prompt.js +1220 -0
  198. package/dist/onboarding/complete-autonomous-prompt.js.map +1 -0
  199. package/dist/onboarding/onboarding-state.d.ts +70 -0
  200. package/dist/onboarding/onboarding-state.d.ts.map +1 -0
  201. package/dist/onboarding/onboarding-state.js +184 -0
  202. package/dist/onboarding/onboarding-state.js.map +1 -0
  203. package/dist/onboarding/personality-quiz.d.ts +35 -0
  204. package/dist/onboarding/personality-quiz.d.ts.map +1 -0
  205. package/dist/onboarding/personality-quiz.js +219 -0
  206. package/dist/onboarding/personality-quiz.js.map +1 -0
  207. package/dist/onboarding/phase-5-summary.d.ts +22 -0
  208. package/dist/onboarding/phase-5-summary.d.ts.map +1 -0
  209. package/dist/onboarding/phase-5-summary.js +151 -0
  210. package/dist/onboarding/phase-5-summary.js.map +1 -0
  211. package/dist/onboarding/phase-6-security.d.ts +33 -0
  212. package/dist/onboarding/phase-6-security.d.ts.map +1 -0
  213. package/dist/onboarding/phase-6-security.js +473 -0
  214. package/dist/onboarding/phase-6-security.js.map +1 -0
  215. package/dist/onboarding/phase-7-integrations.d.ts +66 -0
  216. package/dist/onboarding/phase-7-integrations.d.ts.map +1 -0
  217. package/dist/onboarding/phase-7-integrations.js +619 -0
  218. package/dist/onboarding/phase-7-integrations.js.map +1 -0
  219. package/dist/onboarding/phase-8-demo.d.ts +43 -0
  220. package/dist/onboarding/phase-8-demo.d.ts.map +1 -0
  221. package/dist/onboarding/phase-8-demo.js +346 -0
  222. package/dist/onboarding/phase-8-demo.js.map +1 -0
  223. package/dist/onboarding/phase-9-finalization.d.ts +22 -0
  224. package/dist/onboarding/phase-9-finalization.d.ts.map +1 -0
  225. package/dist/onboarding/phase-9-finalization.js +375 -0
  226. package/dist/onboarding/phase-9-finalization.js.map +1 -0
  227. package/dist/onboarding/ritual-prompt.d.ts +2 -0
  228. package/dist/onboarding/ritual-prompt.d.ts.map +1 -0
  229. package/dist/onboarding/ritual-prompt.js +285 -0
  230. package/dist/onboarding/ritual-prompt.js.map +1 -0
  231. package/dist/onboarding/ritual-tools.d.ts +13 -0
  232. package/dist/onboarding/ritual-tools.d.ts.map +1 -0
  233. package/dist/onboarding/ritual-tools.js +93 -0
  234. package/dist/onboarding/ritual-tools.js.map +1 -0
  235. package/dist/runners/cli-runner.d.ts +59 -0
  236. package/dist/runners/cli-runner.d.ts.map +1 -0
  237. package/dist/runners/cli-runner.js +190 -0
  238. package/dist/runners/cli-runner.js.map +1 -0
  239. package/dist/runners/index.d.ts +11 -0
  240. package/dist/runners/index.d.ts.map +1 -0
  241. package/dist/runners/index.js +15 -0
  242. package/dist/runners/index.js.map +1 -0
  243. package/dist/runners/types.d.ts +81 -0
  244. package/dist/runners/types.d.ts.map +1 -0
  245. package/dist/runners/types.js +31 -0
  246. package/dist/runners/types.js.map +1 -0
  247. package/dist/scheduler/cron-scheduler.d.ts +115 -0
  248. package/dist/scheduler/cron-scheduler.d.ts.map +1 -0
  249. package/dist/scheduler/cron-scheduler.js +320 -0
  250. package/dist/scheduler/cron-scheduler.js.map +1 -0
  251. package/dist/scheduler/heartbeat.d.ts +53 -0
  252. package/dist/scheduler/heartbeat.d.ts.map +1 -0
  253. package/dist/scheduler/heartbeat.js +160 -0
  254. package/dist/scheduler/heartbeat.js.map +1 -0
  255. package/dist/scheduler/index.d.ts +22 -0
  256. package/dist/scheduler/index.d.ts.map +1 -0
  257. package/dist/scheduler/index.js +31 -0
  258. package/dist/scheduler/index.js.map +1 -0
  259. package/dist/scheduler/job-lock.d.ts +85 -0
  260. package/dist/scheduler/job-lock.d.ts.map +1 -0
  261. package/dist/scheduler/job-lock.js +137 -0
  262. package/dist/scheduler/job-lock.js.map +1 -0
  263. package/dist/scheduler/recovery.d.ts +78 -0
  264. package/dist/scheduler/recovery.d.ts.map +1 -0
  265. package/dist/scheduler/recovery.js +124 -0
  266. package/dist/scheduler/recovery.js.map +1 -0
  267. package/dist/scheduler/schedule-store.d.ts +112 -0
  268. package/dist/scheduler/schedule-store.d.ts.map +1 -0
  269. package/dist/scheduler/schedule-store.js +259 -0
  270. package/dist/scheduler/schedule-store.js.map +1 -0
  271. package/dist/scheduler/token-keep-alive.d.ts +49 -0
  272. package/dist/scheduler/token-keep-alive.d.ts.map +1 -0
  273. package/dist/scheduler/token-keep-alive.js +102 -0
  274. package/dist/scheduler/token-keep-alive.js.map +1 -0
  275. package/dist/scheduler/types.d.ts +96 -0
  276. package/dist/scheduler/types.d.ts.map +1 -0
  277. package/dist/scheduler/types.js +21 -0
  278. package/dist/scheduler/types.js.map +1 -0
  279. package/dist/setup/setup-prompt.d.ts +2 -0
  280. package/dist/setup/setup-prompt.d.ts.map +1 -0
  281. package/dist/setup/setup-prompt.js +138 -0
  282. package/dist/setup/setup-prompt.js.map +1 -0
  283. package/dist/setup/setup-server.d.ts +8 -0
  284. package/dist/setup/setup-server.d.ts.map +1 -0
  285. package/dist/setup/setup-server.js +71 -0
  286. package/dist/setup/setup-server.js.map +1 -0
  287. package/dist/setup/setup-tools.d.ts +13 -0
  288. package/dist/setup/setup-tools.d.ts.map +1 -0
  289. package/dist/setup/setup-tools.js +103 -0
  290. package/dist/setup/setup-tools.js.map +1 -0
  291. package/dist/setup/setup-websocket.d.ts +6 -0
  292. package/dist/setup/setup-websocket.d.ts.map +1 -0
  293. package/dist/setup/setup-websocket.js +312 -0
  294. package/dist/setup/setup-websocket.js.map +1 -0
  295. package/dist/skills/index.d.ts +10 -0
  296. package/dist/skills/index.d.ts.map +1 -0
  297. package/dist/skills/index.js +26 -0
  298. package/dist/skills/index.js.map +1 -0
  299. package/dist/skills/skill-executor.d.ts +48 -0
  300. package/dist/skills/skill-executor.d.ts.map +1 -0
  301. package/dist/skills/skill-executor.js +483 -0
  302. package/dist/skills/skill-executor.js.map +1 -0
  303. package/dist/skills/skill-loader.d.ts +40 -0
  304. package/dist/skills/skill-loader.d.ts.map +1 -0
  305. package/dist/skills/skill-loader.js +225 -0
  306. package/dist/skills/skill-loader.js.map +1 -0
  307. package/dist/skills/skill-matcher.d.ts +33 -0
  308. package/dist/skills/skill-matcher.d.ts.map +1 -0
  309. package/dist/skills/skill-matcher.js +190 -0
  310. package/dist/skills/skill-matcher.js.map +1 -0
  311. package/dist/skills/types.d.ts +123 -0
  312. package/dist/skills/types.d.ts.map +1 -0
  313. package/dist/skills/types.js +12 -0
  314. package/dist/skills/types.js.map +1 -0
  315. package/dist/tools/browser-tool.d.ts +149 -0
  316. package/dist/tools/browser-tool.d.ts.map +1 -0
  317. package/dist/tools/browser-tool.js +257 -0
  318. package/dist/tools/browser-tool.js.map +1 -0
  319. package/package.json +84 -0
  320. package/public/favicon.ico +0 -0
  321. package/public/setup.html +1026 -0
  322. package/public/viewer/icons/icon-192.png +0 -0
  323. package/public/viewer/icons/icon-512.png +0 -0
  324. package/public/viewer/js/modules/chat.js +1587 -0
  325. package/public/viewer/js/modules/dashboard.js +275 -0
  326. package/public/viewer/js/modules/graph.js +997 -0
  327. package/public/viewer/js/modules/memory.js +353 -0
  328. package/public/viewer/js/modules/settings.js +255 -0
  329. package/public/viewer/js/utils/api.js +169 -0
  330. package/public/viewer/js/utils/dom.js +92 -0
  331. package/public/viewer/js/utils/format.js +192 -0
  332. package/public/viewer/manifest.json +26 -0
  333. package/public/viewer/sw.js +131 -0
  334. package/public/viewer/viewer.css +500 -0
  335. package/public/viewer/viewer.html +1535 -0
  336. package/scripts/postinstall.js +118 -0
  337. package/templates/skills/document-analyze.md +63 -0
  338. package/templates/skills/heartbeat-report.md +75 -0
  339. package/templates/skills/image-translate.md +67 -0
  340. package/templates/workspace/skill-forge/DESIGN.md +115 -0
  341. package/templates/workspace/skill-forge/agents/architect.ts +295 -0
  342. package/templates/workspace/skill-forge/agents/developer.ts +364 -0
  343. package/templates/workspace/skill-forge/agents/qa.ts +313 -0
  344. package/templates/workspace/skill-forge/claude-api.ts +353 -0
  345. package/templates/workspace/skill-forge/discord-ui.ts +580 -0
  346. package/templates/workspace/skill-forge/error-handler.ts +354 -0
  347. package/templates/workspace/skill-forge/mama-integration.ts +357 -0
  348. package/templates/workspace/skill-forge/orchestrator.ts +495 -0
  349. package/templates/workspace/skill-forge/output/generated-skills/skills/hello-world/README.md +24 -0
  350. package/templates/workspace/skill-forge/output/generated-skills/skills/hello-world/index.ts +79 -0
  351. package/templates/workspace/skill-forge/output/generated-skills/skills/hello-world/types.ts +17 -0
  352. package/templates/workspace/skill-forge/package.json +21 -0
  353. package/templates/workspace/skill-forge/state/session.json +132 -0
  354. package/templates/workspace/skill-forge/test-e2e.ts +139 -0
  355. package/templates/workspace/skill-forge/tsconfig.json +20 -0
  356. package/templates/workspace/skill-forge/types.ts +159 -0
@@ -0,0 +1,225 @@
1
+ "use strict";
2
+ /**
3
+ * Skill Loader
4
+ *
5
+ * Loads skill definitions from markdown files in the skills directory.
6
+ * Supports YAML frontmatter for metadata.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.SkillLoader = void 0;
10
+ exports.loadSkills = loadSkills;
11
+ const promises_1 = require("fs/promises");
12
+ const path_1 = require("path");
13
+ /**
14
+ * Parse YAML-like frontmatter from markdown
15
+ * Simple parser for basic key-value pairs and arrays
16
+ */
17
+ function parseFrontmatter(content) {
18
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
19
+ if (!frontmatterMatch) {
20
+ return { frontmatter: {}, body: content };
21
+ }
22
+ const [, yaml, body] = frontmatterMatch;
23
+ const frontmatter = {};
24
+ // Simple YAML parser
25
+ const lines = yaml.split('\n');
26
+ let currentKey = '';
27
+ let currentArray = null;
28
+ for (const line of lines) {
29
+ const trimmed = line.trim();
30
+ if (!trimmed)
31
+ continue;
32
+ // Array item
33
+ if (trimmed.startsWith('- ')) {
34
+ if (currentArray) {
35
+ currentArray.push(trimmed.slice(2).trim());
36
+ }
37
+ continue;
38
+ }
39
+ // Key-value pair
40
+ const kvMatch = trimmed.match(/^(\w+):\s*(.*)$/);
41
+ if (kvMatch) {
42
+ // Save previous array if any
43
+ if (currentArray && currentKey) {
44
+ frontmatter[currentKey] = currentArray;
45
+ }
46
+ const [, key, value] = kvMatch;
47
+ currentKey = key;
48
+ if (value === '') {
49
+ // Start of array or object
50
+ currentArray = [];
51
+ }
52
+ else {
53
+ // Simple value
54
+ currentArray = null;
55
+ // Parse booleans and numbers
56
+ if (value === 'true') {
57
+ frontmatter[key] = true;
58
+ }
59
+ else if (value === 'false') {
60
+ frontmatter[key] = false;
61
+ }
62
+ else if (/^\d+(\.\d+)?$/.test(value)) {
63
+ frontmatter[key] = parseFloat(value);
64
+ }
65
+ else {
66
+ // Remove quotes if present
67
+ frontmatter[key] = value.replace(/^["']|["']$/g, '');
68
+ }
69
+ }
70
+ }
71
+ }
72
+ // Save last array if any
73
+ if (currentArray && currentKey) {
74
+ frontmatter[currentKey] = currentArray;
75
+ }
76
+ return { frontmatter, body: body.trim() };
77
+ }
78
+ /**
79
+ * Parse trigger from frontmatter
80
+ */
81
+ function parseTrigger(fm) {
82
+ const trigger = {};
83
+ if (fm.keywords) {
84
+ trigger.keywords = Array.isArray(fm.keywords) ? fm.keywords : [String(fm.keywords)];
85
+ }
86
+ if (fm.patterns) {
87
+ trigger.patterns = Array.isArray(fm.patterns) ? fm.patterns : [String(fm.patterns)];
88
+ }
89
+ if (fm.requiredInputs) {
90
+ trigger.requiredInputs = Array.isArray(fm.requiredInputs)
91
+ ? fm.requiredInputs
92
+ : [fm.requiredInputs];
93
+ }
94
+ return trigger;
95
+ }
96
+ /**
97
+ * Parse output from frontmatter
98
+ */
99
+ function parseOutput(fm) {
100
+ if (!fm.output)
101
+ return undefined;
102
+ const outputStr = String(fm.output);
103
+ // Simple output type string
104
+ if (['text', 'html', 'html-screenshot', 'file'].includes(outputStr)) {
105
+ return {
106
+ type: outputStr,
107
+ discordScreenshot: fm.discordScreenshot === true,
108
+ };
109
+ }
110
+ return { type: 'text' };
111
+ }
112
+ /**
113
+ * Load a single skill from a markdown file
114
+ */
115
+ async function loadSkillFile(filePath) {
116
+ try {
117
+ const content = await (0, promises_1.readFile)(filePath, 'utf-8');
118
+ const { frontmatter: fm, body } = parseFrontmatter(content);
119
+ // Extract skill ID from filename
120
+ const id = (0, path_1.basename)(filePath, (0, path_1.extname)(filePath));
121
+ // Validate required fields
122
+ if (!fm.name) {
123
+ console.warn(`[SkillLoader] Skipping ${filePath}: missing 'name' in frontmatter`);
124
+ return null;
125
+ }
126
+ const skill = {
127
+ id,
128
+ name: String(fm.name),
129
+ description: String(fm.description || ''),
130
+ trigger: parseTrigger(fm),
131
+ output: parseOutput(fm),
132
+ systemPrompt: body,
133
+ allowedExtensions: fm.allowedExtensions
134
+ ? Array.isArray(fm.allowedExtensions)
135
+ ? fm.allowedExtensions
136
+ : [String(fm.allowedExtensions)]
137
+ : undefined,
138
+ enabled: fm.enabled !== false, // Default to enabled
139
+ filePath,
140
+ };
141
+ return skill;
142
+ }
143
+ catch (error) {
144
+ console.error(`[SkillLoader] Error loading ${filePath}:`, error);
145
+ return null;
146
+ }
147
+ }
148
+ /**
149
+ * Load all skills from a directory
150
+ */
151
+ async function loadSkills(skillsDir) {
152
+ const skills = [];
153
+ try {
154
+ // Check if directory exists
155
+ try {
156
+ await (0, promises_1.stat)(skillsDir);
157
+ }
158
+ catch {
159
+ console.log(`[SkillLoader] Skills directory not found: ${skillsDir}`);
160
+ return skills;
161
+ }
162
+ // Read all markdown files
163
+ const entries = await (0, promises_1.readdir)(skillsDir, { withFileTypes: true });
164
+ for (const entry of entries) {
165
+ if (entry.isFile() && (entry.name.endsWith('.md') || entry.name.endsWith('.markdown'))) {
166
+ const filePath = (0, path_1.join)(skillsDir, entry.name);
167
+ const skill = await loadSkillFile(filePath);
168
+ if (skill && skill.enabled) {
169
+ skills.push(skill);
170
+ console.log(`[SkillLoader] Loaded skill: ${skill.name} (${skill.id})`);
171
+ }
172
+ }
173
+ }
174
+ console.log(`[SkillLoader] Loaded ${skills.length} skills from ${skillsDir}`);
175
+ }
176
+ catch (error) {
177
+ console.error(`[SkillLoader] Error loading skills:`, error);
178
+ }
179
+ return skills;
180
+ }
181
+ /**
182
+ * Skill Loader class for managing skills
183
+ */
184
+ class SkillLoader {
185
+ skills = [];
186
+ skillsDir;
187
+ constructor(skillsDir) {
188
+ this.skillsDir = skillsDir;
189
+ }
190
+ /**
191
+ * Load all skills from the skills directory
192
+ */
193
+ async load() {
194
+ this.skills = await loadSkills(this.skillsDir);
195
+ }
196
+ /**
197
+ * Reload skills from disk
198
+ */
199
+ async reload() {
200
+ this.skills = [];
201
+ await this.load();
202
+ }
203
+ /**
204
+ * Get all loaded skills
205
+ */
206
+ getSkills() {
207
+ return [...this.skills];
208
+ }
209
+ /**
210
+ * Get a skill by ID
211
+ */
212
+ getSkill(id) {
213
+ return this.skills.find((s) => s.id === id);
214
+ }
215
+ /**
216
+ * Add a skill programmatically
217
+ */
218
+ addSkill(skill) {
219
+ // Remove existing skill with same ID
220
+ this.skills = this.skills.filter((s) => s.id !== skill.id);
221
+ this.skills.push(skill);
222
+ }
223
+ }
224
+ exports.SkillLoader = SkillLoader;
225
+ //# sourceMappingURL=skill-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-loader.js","sourceRoot":"","sources":["../../src/skills/skill-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Skill Matcher
3
+ *
4
+ * Matches incoming messages to appropriate skills based on:
5
+ * - Keywords in the message
6
+ * - Regex patterns
7
+ * - Required input types (attachments)
8
+ */
9
+ import type { SkillDefinition, SkillMatch, SkillInput } from './types.js';
10
+ /**
11
+ * Skill Matcher class
12
+ */
13
+ export declare class SkillMatcher {
14
+ private skills;
15
+ /**
16
+ * Set skills to match against
17
+ */
18
+ setSkills(skills: SkillDefinition[]): void;
19
+ /**
20
+ * Find matching skills for an input
21
+ * Returns matches sorted by confidence (highest first)
22
+ */
23
+ match(input: SkillInput): SkillMatch[];
24
+ /**
25
+ * Find the best matching skill
26
+ */
27
+ findBest(input: SkillInput): SkillMatch | null;
28
+ /**
29
+ * Check if any skill matches
30
+ */
31
+ hasMatch(input: SkillInput): boolean;
32
+ }
33
+ //# sourceMappingURL=skill-matcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-matcher.d.ts","sourceRoot":"","sources":["../../src/skills/skill-matcher.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAkB,MAAM,YAAY,CAAC;AAkK1F;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAyB;IAEvC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI;IAI1C;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,EAAE;IAgBtC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI;IAK9C;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;CAGrC"}
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+ /**
3
+ * Skill Matcher
4
+ *
5
+ * Matches incoming messages to appropriate skills based on:
6
+ * - Keywords in the message
7
+ * - Regex patterns
8
+ * - Required input types (attachments)
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.SkillMatcher = void 0;
12
+ /**
13
+ * Get input type from content type
14
+ */
15
+ function getInputType(contentType) {
16
+ if (!contentType)
17
+ return 'document';
18
+ if (contentType.startsWith('image/')) {
19
+ return 'image';
20
+ }
21
+ // Common document types
22
+ if (contentType.includes('spreadsheet') ||
23
+ contentType.includes('excel') ||
24
+ contentType.includes('csv') ||
25
+ contentType.includes('pdf') ||
26
+ contentType.includes('document') ||
27
+ contentType.includes('text/') ||
28
+ contentType.includes('json')) {
29
+ return 'document';
30
+ }
31
+ return 'document';
32
+ }
33
+ /**
34
+ * Check if a skill's required inputs are satisfied
35
+ */
36
+ function hasRequiredInputs(skill, input) {
37
+ const required = skill.trigger.requiredInputs;
38
+ if (!required || required.length === 0) {
39
+ return true; // No requirements
40
+ }
41
+ const attachments = input.attachments || [];
42
+ for (const requiredType of required) {
43
+ if (requiredType === 'any') {
44
+ // Any attachment will do
45
+ if (attachments.length === 0)
46
+ return false;
47
+ }
48
+ else if (requiredType === 'text') {
49
+ // Text is always present
50
+ continue;
51
+ }
52
+ else {
53
+ // Check for specific type
54
+ const hasType = attachments.some((a) => {
55
+ const inputType = getInputType(a.contentType);
56
+ return inputType === requiredType;
57
+ });
58
+ if (!hasType)
59
+ return false;
60
+ }
61
+ }
62
+ return true;
63
+ }
64
+ /**
65
+ * Check keyword match
66
+ */
67
+ function matchKeywords(skill, text) {
68
+ const keywords = skill.trigger.keywords;
69
+ if (!keywords || keywords.length === 0) {
70
+ return { matched: false, confidence: 0 };
71
+ }
72
+ const lowerText = text.toLowerCase();
73
+ for (const keyword of keywords) {
74
+ const lowerKeyword = keyword.toLowerCase();
75
+ if (lowerText.includes(lowerKeyword)) {
76
+ // Calculate confidence based on keyword position and length
77
+ const index = lowerText.indexOf(lowerKeyword);
78
+ const positionBonus = index === 0 ? 0.1 : 0;
79
+ const lengthRatio = keyword.length / text.length;
80
+ const confidence = Math.min(0.7 + positionBonus + lengthRatio * 0.2, 1.0);
81
+ return { matched: true, keyword, confidence };
82
+ }
83
+ }
84
+ return { matched: false, confidence: 0 };
85
+ }
86
+ /**
87
+ * Check pattern match
88
+ */
89
+ function matchPatterns(skill, text) {
90
+ const patterns = skill.trigger.patterns;
91
+ if (!patterns || patterns.length === 0) {
92
+ return { matched: false, confidence: 0 };
93
+ }
94
+ for (const pattern of patterns) {
95
+ try {
96
+ const regex = new RegExp(pattern, 'i');
97
+ if (regex.test(text)) {
98
+ return { matched: true, pattern, confidence: 0.8 };
99
+ }
100
+ }
101
+ catch (e) {
102
+ console.warn(`[SkillMatcher] Invalid pattern: ${pattern}`);
103
+ }
104
+ }
105
+ return { matched: false, confidence: 0 };
106
+ }
107
+ /**
108
+ * Match a single skill against input
109
+ */
110
+ function matchSkill(skill, input) {
111
+ // Check required inputs first
112
+ if (!hasRequiredInputs(skill, input)) {
113
+ return null;
114
+ }
115
+ // Try keyword match
116
+ const keywordResult = matchKeywords(skill, input.text);
117
+ if (keywordResult.matched) {
118
+ return {
119
+ skill,
120
+ confidence: keywordResult.confidence,
121
+ matchType: 'keyword',
122
+ matchedValue: keywordResult.keyword,
123
+ };
124
+ }
125
+ // Try pattern match
126
+ const patternResult = matchPatterns(skill, input.text);
127
+ if (patternResult.matched) {
128
+ return {
129
+ skill,
130
+ confidence: patternResult.confidence,
131
+ matchType: 'pattern',
132
+ matchedValue: patternResult.pattern,
133
+ };
134
+ }
135
+ // Check if skill matches purely based on input type
136
+ const required = skill.trigger.requiredInputs;
137
+ if (required && required.length > 0 && input.attachments?.length) {
138
+ // Has required inputs and attachments - partial match
139
+ return {
140
+ skill,
141
+ confidence: 0.5,
142
+ matchType: 'input_type',
143
+ matchedValue: required.join(', '),
144
+ };
145
+ }
146
+ return null;
147
+ }
148
+ /**
149
+ * Skill Matcher class
150
+ */
151
+ class SkillMatcher {
152
+ skills = [];
153
+ /**
154
+ * Set skills to match against
155
+ */
156
+ setSkills(skills) {
157
+ this.skills = skills;
158
+ }
159
+ /**
160
+ * Find matching skills for an input
161
+ * Returns matches sorted by confidence (highest first)
162
+ */
163
+ match(input) {
164
+ const matches = [];
165
+ for (const skill of this.skills) {
166
+ const match = matchSkill(skill, input);
167
+ if (match) {
168
+ matches.push(match);
169
+ }
170
+ }
171
+ // Sort by confidence
172
+ matches.sort((a, b) => b.confidence - a.confidence);
173
+ return matches;
174
+ }
175
+ /**
176
+ * Find the best matching skill
177
+ */
178
+ findBest(input) {
179
+ const matches = this.match(input);
180
+ return matches.length > 0 ? matches[0] : null;
181
+ }
182
+ /**
183
+ * Check if any skill matches
184
+ */
185
+ hasMatch(input) {
186
+ return this.match(input).length > 0;
187
+ }
188
+ }
189
+ exports.SkillMatcher = SkillMatcher;
190
+ //# sourceMappingURL=skill-matcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-matcher.js","sourceRoot":"","sources":["../../src/skills/skill-matcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * MAMA Skill System Types
3
+ *
4
+ * Skills are markdown-based definitions that specify:
5
+ * - When to activate (triggers)
6
+ * - What inputs they accept (text, images, documents)
7
+ * - How to process (system prompt)
8
+ * - What to output (text, html-screenshot, etc.)
9
+ */
10
+ /**
11
+ * Supported input types for skills
12
+ */
13
+ export type SkillInputType = 'text' | 'image' | 'document' | 'any';
14
+ /**
15
+ * Supported output types for skills
16
+ */
17
+ export type SkillOutputType = 'text' | 'html' | 'html-screenshot' | 'file';
18
+ /**
19
+ * Skill trigger definition
20
+ */
21
+ export interface SkillTrigger {
22
+ /** Keyword patterns that activate this skill */
23
+ keywords?: string[];
24
+ /** Regex patterns that activate this skill */
25
+ patterns?: string[];
26
+ /** Required input types (e.g., must have image attachment) */
27
+ requiredInputs?: SkillInputType[];
28
+ }
29
+ /**
30
+ * Skill output definition
31
+ */
32
+ export interface SkillOutput {
33
+ /** Output type */
34
+ type: SkillOutputType;
35
+ /** Output filename template (supports {{date}}, {{timestamp}}) */
36
+ filename?: string;
37
+ /** Whether to send screenshot to Discord */
38
+ discordScreenshot?: boolean;
39
+ }
40
+ /**
41
+ * Skill definition (parsed from markdown frontmatter)
42
+ */
43
+ export interface SkillDefinition {
44
+ /** Unique skill identifier */
45
+ id: string;
46
+ /** Display name */
47
+ name: string;
48
+ /** Description */
49
+ description: string;
50
+ /** Trigger conditions */
51
+ trigger: SkillTrigger;
52
+ /** Output configuration */
53
+ output?: SkillOutput;
54
+ /** System prompt / instructions for Claude */
55
+ systemPrompt: string;
56
+ /** Allowed file extensions for document input */
57
+ allowedExtensions?: string[];
58
+ /** Whether skill is enabled */
59
+ enabled: boolean;
60
+ /** Source file path */
61
+ filePath?: string;
62
+ }
63
+ /**
64
+ * Input attachment for skill execution
65
+ */
66
+ export interface SkillAttachment {
67
+ /** Attachment type */
68
+ type: 'image' | 'document';
69
+ /** Local file path */
70
+ localPath: string;
71
+ /** Original filename */
72
+ filename: string;
73
+ /** MIME type */
74
+ contentType?: string;
75
+ /** File size in bytes */
76
+ size?: number;
77
+ }
78
+ /**
79
+ * Skill execution input
80
+ */
81
+ export interface SkillInput {
82
+ /** User message text */
83
+ text: string;
84
+ /** Attached files */
85
+ attachments?: SkillAttachment[];
86
+ /** Channel ID for response */
87
+ channelId?: string;
88
+ /** Message source (discord, slack, etc.) */
89
+ source?: string;
90
+ }
91
+ /**
92
+ * Skill execution result
93
+ */
94
+ export interface SkillResult {
95
+ /** Whether execution succeeded */
96
+ success: boolean;
97
+ /** Text response */
98
+ response?: string;
99
+ /** Generated files */
100
+ files?: Array<{
101
+ path: string;
102
+ type: string;
103
+ description?: string;
104
+ }>;
105
+ /** Error message if failed */
106
+ error?: string;
107
+ /** Execution duration in ms */
108
+ duration?: number;
109
+ }
110
+ /**
111
+ * Skill match result
112
+ */
113
+ export interface SkillMatch {
114
+ /** Matched skill */
115
+ skill: SkillDefinition;
116
+ /** Match confidence (0-1) */
117
+ confidence: number;
118
+ /** Matched trigger type */
119
+ matchType: 'keyword' | 'pattern' | 'input_type';
120
+ /** Matched trigger value */
121
+ matchedValue?: string;
122
+ }
123
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/skills/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,KAAK,CAAC;AAEnE;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB,MAAM,GACN,MAAM,GACN,iBAAiB,GACjB,MAAM,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,8DAA8D;IAC9D,cAAc,CAAC,EAAE,cAAc,EAAE,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,kBAAkB;IAClB,IAAI,EAAE,eAAe,CAAC;IACtB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,OAAO,EAAE,YAAY,CAAC;IACtB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,8CAA8C;IAC9C,YAAY,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,+BAA+B;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,sBAAsB;IACtB,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;IAC3B,sBAAsB;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;IAChC,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,kCAAkC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sBAAsB;IACtB,KAAK,CAAC,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;IACH,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,oBAAoB;IACpB,KAAK,EAAE,eAAe,CAAC;IACvB,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,SAAS,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC;IAChD,4BAA4B;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ /**
3
+ * MAMA Skill System Types
4
+ *
5
+ * Skills are markdown-based definitions that specify:
6
+ * - When to activate (triggers)
7
+ * - What inputs they accept (text, images, documents)
8
+ * - How to process (system prompt)
9
+ * - What to output (text, html-screenshot, etc.)
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/skills/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG"}