@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.
- package/CHANGELOG.md +67 -0
- package/README.md +643 -0
- package/dist/agent/agent-loop.d.ts +98 -0
- package/dist/agent/agent-loop.d.ts.map +1 -0
- package/dist/agent/agent-loop.js +417 -0
- package/dist/agent/agent-loop.js.map +1 -0
- package/dist/agent/auto-recall.d.ts +48 -0
- package/dist/agent/auto-recall.d.ts.map +1 -0
- package/dist/agent/auto-recall.js +178 -0
- package/dist/agent/auto-recall.js.map +1 -0
- package/dist/agent/claude-cli-wrapper.d.ts +130 -0
- package/dist/agent/claude-cli-wrapper.d.ts.map +1 -0
- package/dist/agent/claude-cli-wrapper.js +227 -0
- package/dist/agent/claude-cli-wrapper.js.map +1 -0
- package/dist/agent/claude-client.d.ts +50 -0
- package/dist/agent/claude-client.d.ts.map +1 -0
- package/dist/agent/claude-client.js +214 -0
- package/dist/agent/claude-client.js.map +1 -0
- package/dist/agent/gateway-tool-executor.d.ts +75 -0
- package/dist/agent/gateway-tool-executor.d.ts.map +1 -0
- package/dist/agent/gateway-tool-executor.js +348 -0
- package/dist/agent/gateway-tool-executor.js.map +1 -0
- package/dist/agent/index.d.ts +13 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +18 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/mcp-executor.d.ts +75 -0
- package/dist/agent/mcp-executor.d.ts.map +1 -0
- package/dist/agent/mcp-executor.js +307 -0
- package/dist/agent/mcp-executor.js.map +1 -0
- package/dist/agent/session-pool.d.ts +148 -0
- package/dist/agent/session-pool.d.ts.map +1 -0
- package/dist/agent/session-pool.js +272 -0
- package/dist/agent/session-pool.js.map +1 -0
- package/dist/agent/streaming-callback-manager.d.ts +85 -0
- package/dist/agent/streaming-callback-manager.d.ts.map +1 -0
- package/dist/agent/streaming-callback-manager.js +103 -0
- package/dist/agent/streaming-callback-manager.js.map +1 -0
- package/dist/agent/types.d.ts +437 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/types.js +29 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/api/cron-handler.d.ts +44 -0
- package/dist/api/cron-handler.d.ts.map +1 -0
- package/dist/api/cron-handler.js +195 -0
- package/dist/api/cron-handler.js.map +1 -0
- package/dist/api/error-handler.d.ts +22 -0
- package/dist/api/error-handler.d.ts.map +1 -0
- package/dist/api/error-handler.js +104 -0
- package/dist/api/error-handler.js.map +1 -0
- package/dist/api/heartbeat-handler.d.ts +49 -0
- package/dist/api/heartbeat-handler.d.ts.map +1 -0
- package/dist/api/heartbeat-handler.js +91 -0
- package/dist/api/heartbeat-handler.js.map +1 -0
- package/dist/api/index.d.ts +61 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +145 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/types.d.ts +156 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +62 -0
- package/dist/api/types.js.map +1 -0
- package/dist/auth/index.d.ts +7 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +11 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/oauth-manager.d.ts +59 -0
- package/dist/auth/oauth-manager.d.ts.map +1 -0
- package/dist/auth/oauth-manager.js +237 -0
- package/dist/auth/oauth-manager.js.map +1 -0
- package/dist/auth/types.d.ts +92 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +23 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/cli/commands/init.d.ts +19 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +155 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/run.d.ts +19 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +89 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/setup.d.ts +19 -0
- package/dist/cli/commands/setup.d.ts.map +1 -0
- package/dist/cli/commands/setup.js +134 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/commands/start.d.ts +24 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +1073 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/status.d.ts +10 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +85 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/stop.d.ts +10 -0
- package/dist/cli/commands/stop.d.ts.map +1 -0
- package/dist/cli/commands/stop.js +65 -0
- package/dist/cli/commands/stop.js.map +1 -0
- package/dist/cli/config/config-manager.d.ts +51 -0
- package/dist/cli/config/config-manager.d.ts.map +1 -0
- package/dist/cli/config/config-manager.js +216 -0
- package/dist/cli/config/config-manager.js.map +1 -0
- package/dist/cli/config/types.d.ts +172 -0
- package/dist/cli/config/types.d.ts.map +1 -0
- package/dist/cli/config/types.js +48 -0
- package/dist/cli/config/types.js.map +1 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +92 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils/pid-manager.d.ts +66 -0
- package/dist/cli/utils/pid-manager.d.ts.map +1 -0
- package/dist/cli/utils/pid-manager.js +167 -0
- package/dist/cli/utils/pid-manager.js.map +1 -0
- package/dist/concurrency/index.d.ts +13 -0
- package/dist/concurrency/index.d.ts.map +1 -0
- package/dist/concurrency/index.js +22 -0
- package/dist/concurrency/index.js.map +1 -0
- package/dist/concurrency/lane-manager.d.ts +113 -0
- package/dist/concurrency/lane-manager.d.ts.map +1 -0
- package/dist/concurrency/lane-manager.js +245 -0
- package/dist/concurrency/lane-manager.js.map +1 -0
- package/dist/concurrency/session-key.d.ts +41 -0
- package/dist/concurrency/session-key.d.ts.map +1 -0
- package/dist/concurrency/session-key.js +61 -0
- package/dist/concurrency/session-key.js.map +1 -0
- package/dist/concurrency/types.d.ts +69 -0
- package/dist/concurrency/types.d.ts.map +1 -0
- package/dist/concurrency/types.js +16 -0
- package/dist/concurrency/types.js.map +1 -0
- package/dist/gateways/channel-history.d.ts +102 -0
- package/dist/gateways/channel-history.d.ts.map +1 -0
- package/dist/gateways/channel-history.js +181 -0
- package/dist/gateways/channel-history.js.map +1 -0
- package/dist/gateways/context-injector.d.ts +74 -0
- package/dist/gateways/context-injector.d.ts.map +1 -0
- package/dist/gateways/context-injector.js +121 -0
- package/dist/gateways/context-injector.js.map +1 -0
- package/dist/gateways/discord.d.ts +122 -0
- package/dist/gateways/discord.d.ts.map +1 -0
- package/dist/gateways/discord.js +602 -0
- package/dist/gateways/discord.js.map +1 -0
- package/dist/gateways/index.d.ts +30 -0
- package/dist/gateways/index.d.ts.map +1 -0
- package/dist/gateways/index.js +49 -0
- package/dist/gateways/index.js.map +1 -0
- package/dist/gateways/message-router.d.ts +116 -0
- package/dist/gateways/message-router.d.ts.map +1 -0
- package/dist/gateways/message-router.js +315 -0
- package/dist/gateways/message-router.js.map +1 -0
- package/dist/gateways/message-splitter.d.ts +54 -0
- package/dist/gateways/message-splitter.d.ts.map +1 -0
- package/dist/gateways/message-splitter.js +146 -0
- package/dist/gateways/message-splitter.js.map +1 -0
- package/dist/gateways/plugin-loader.d.ts +76 -0
- package/dist/gateways/plugin-loader.d.ts.map +1 -0
- package/dist/gateways/plugin-loader.js +221 -0
- package/dist/gateways/plugin-loader.js.map +1 -0
- package/dist/gateways/session-store.d.ts +77 -0
- package/dist/gateways/session-store.d.ts.map +1 -0
- package/dist/gateways/session-store.js +233 -0
- package/dist/gateways/session-store.js.map +1 -0
- package/dist/gateways/slack.d.ts +90 -0
- package/dist/gateways/slack.d.ts.map +1 -0
- package/dist/gateways/slack.js +281 -0
- package/dist/gateways/slack.js.map +1 -0
- package/dist/gateways/telegram.d.ts +79 -0
- package/dist/gateways/telegram.d.ts.map +1 -0
- package/dist/gateways/telegram.js +207 -0
- package/dist/gateways/telegram.js.map +1 -0
- package/dist/gateways/types.d.ts +340 -0
- package/dist/gateways/types.d.ts.map +1 -0
- package/dist/gateways/types.js +6 -0
- package/dist/gateways/types.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/memory-logger.d.ts +47 -0
- package/dist/memory/memory-logger.d.ts.map +1 -0
- package/dist/memory/memory-logger.js +126 -0
- package/dist/memory/memory-logger.js.map +1 -0
- package/dist/onboarding/all-tools.d.ts +18 -0
- package/dist/onboarding/all-tools.d.ts.map +1 -0
- package/dist/onboarding/all-tools.js +149 -0
- package/dist/onboarding/all-tools.js.map +1 -0
- package/dist/onboarding/autonomous-discovery-tools.d.ts +13 -0
- package/dist/onboarding/autonomous-discovery-tools.d.ts.map +1 -0
- package/dist/onboarding/autonomous-discovery-tools.js +268 -0
- package/dist/onboarding/autonomous-discovery-tools.js.map +1 -0
- package/dist/onboarding/bootstrap-template.d.ts +5 -0
- package/dist/onboarding/bootstrap-template.d.ts.map +1 -0
- package/dist/onboarding/bootstrap-template.js +142 -0
- package/dist/onboarding/bootstrap-template.js.map +1 -0
- package/dist/onboarding/complete-autonomous-prompt.d.ts +13 -0
- package/dist/onboarding/complete-autonomous-prompt.d.ts.map +1 -0
- package/dist/onboarding/complete-autonomous-prompt.js +1220 -0
- package/dist/onboarding/complete-autonomous-prompt.js.map +1 -0
- package/dist/onboarding/onboarding-state.d.ts +70 -0
- package/dist/onboarding/onboarding-state.d.ts.map +1 -0
- package/dist/onboarding/onboarding-state.js +184 -0
- package/dist/onboarding/onboarding-state.js.map +1 -0
- package/dist/onboarding/personality-quiz.d.ts +35 -0
- package/dist/onboarding/personality-quiz.d.ts.map +1 -0
- package/dist/onboarding/personality-quiz.js +219 -0
- package/dist/onboarding/personality-quiz.js.map +1 -0
- package/dist/onboarding/phase-5-summary.d.ts +22 -0
- package/dist/onboarding/phase-5-summary.d.ts.map +1 -0
- package/dist/onboarding/phase-5-summary.js +151 -0
- package/dist/onboarding/phase-5-summary.js.map +1 -0
- package/dist/onboarding/phase-6-security.d.ts +33 -0
- package/dist/onboarding/phase-6-security.d.ts.map +1 -0
- package/dist/onboarding/phase-6-security.js +473 -0
- package/dist/onboarding/phase-6-security.js.map +1 -0
- package/dist/onboarding/phase-7-integrations.d.ts +66 -0
- package/dist/onboarding/phase-7-integrations.d.ts.map +1 -0
- package/dist/onboarding/phase-7-integrations.js +619 -0
- package/dist/onboarding/phase-7-integrations.js.map +1 -0
- package/dist/onboarding/phase-8-demo.d.ts +43 -0
- package/dist/onboarding/phase-8-demo.d.ts.map +1 -0
- package/dist/onboarding/phase-8-demo.js +346 -0
- package/dist/onboarding/phase-8-demo.js.map +1 -0
- package/dist/onboarding/phase-9-finalization.d.ts +22 -0
- package/dist/onboarding/phase-9-finalization.d.ts.map +1 -0
- package/dist/onboarding/phase-9-finalization.js +375 -0
- package/dist/onboarding/phase-9-finalization.js.map +1 -0
- package/dist/onboarding/ritual-prompt.d.ts +2 -0
- package/dist/onboarding/ritual-prompt.d.ts.map +1 -0
- package/dist/onboarding/ritual-prompt.js +285 -0
- package/dist/onboarding/ritual-prompt.js.map +1 -0
- package/dist/onboarding/ritual-tools.d.ts +13 -0
- package/dist/onboarding/ritual-tools.d.ts.map +1 -0
- package/dist/onboarding/ritual-tools.js +93 -0
- package/dist/onboarding/ritual-tools.js.map +1 -0
- package/dist/runners/cli-runner.d.ts +59 -0
- package/dist/runners/cli-runner.d.ts.map +1 -0
- package/dist/runners/cli-runner.js +190 -0
- package/dist/runners/cli-runner.js.map +1 -0
- package/dist/runners/index.d.ts +11 -0
- package/dist/runners/index.d.ts.map +1 -0
- package/dist/runners/index.js +15 -0
- package/dist/runners/index.js.map +1 -0
- package/dist/runners/types.d.ts +81 -0
- package/dist/runners/types.d.ts.map +1 -0
- package/dist/runners/types.js +31 -0
- package/dist/runners/types.js.map +1 -0
- package/dist/scheduler/cron-scheduler.d.ts +115 -0
- package/dist/scheduler/cron-scheduler.d.ts.map +1 -0
- package/dist/scheduler/cron-scheduler.js +320 -0
- package/dist/scheduler/cron-scheduler.js.map +1 -0
- package/dist/scheduler/heartbeat.d.ts +53 -0
- package/dist/scheduler/heartbeat.d.ts.map +1 -0
- package/dist/scheduler/heartbeat.js +160 -0
- package/dist/scheduler/heartbeat.js.map +1 -0
- package/dist/scheduler/index.d.ts +22 -0
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/index.js +31 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/scheduler/job-lock.d.ts +85 -0
- package/dist/scheduler/job-lock.d.ts.map +1 -0
- package/dist/scheduler/job-lock.js +137 -0
- package/dist/scheduler/job-lock.js.map +1 -0
- package/dist/scheduler/recovery.d.ts +78 -0
- package/dist/scheduler/recovery.d.ts.map +1 -0
- package/dist/scheduler/recovery.js +124 -0
- package/dist/scheduler/recovery.js.map +1 -0
- package/dist/scheduler/schedule-store.d.ts +112 -0
- package/dist/scheduler/schedule-store.d.ts.map +1 -0
- package/dist/scheduler/schedule-store.js +259 -0
- package/dist/scheduler/schedule-store.js.map +1 -0
- package/dist/scheduler/token-keep-alive.d.ts +49 -0
- package/dist/scheduler/token-keep-alive.d.ts.map +1 -0
- package/dist/scheduler/token-keep-alive.js +102 -0
- package/dist/scheduler/token-keep-alive.js.map +1 -0
- package/dist/scheduler/types.d.ts +96 -0
- package/dist/scheduler/types.d.ts.map +1 -0
- package/dist/scheduler/types.js +21 -0
- package/dist/scheduler/types.js.map +1 -0
- package/dist/setup/setup-prompt.d.ts +2 -0
- package/dist/setup/setup-prompt.d.ts.map +1 -0
- package/dist/setup/setup-prompt.js +138 -0
- package/dist/setup/setup-prompt.js.map +1 -0
- package/dist/setup/setup-server.d.ts +8 -0
- package/dist/setup/setup-server.d.ts.map +1 -0
- package/dist/setup/setup-server.js +71 -0
- package/dist/setup/setup-server.js.map +1 -0
- package/dist/setup/setup-tools.d.ts +13 -0
- package/dist/setup/setup-tools.d.ts.map +1 -0
- package/dist/setup/setup-tools.js +103 -0
- package/dist/setup/setup-tools.js.map +1 -0
- package/dist/setup/setup-websocket.d.ts +6 -0
- package/dist/setup/setup-websocket.d.ts.map +1 -0
- package/dist/setup/setup-websocket.js +312 -0
- package/dist/setup/setup-websocket.js.map +1 -0
- package/dist/skills/index.d.ts +10 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +26 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/skill-executor.d.ts +48 -0
- package/dist/skills/skill-executor.d.ts.map +1 -0
- package/dist/skills/skill-executor.js +483 -0
- package/dist/skills/skill-executor.js.map +1 -0
- package/dist/skills/skill-loader.d.ts +40 -0
- package/dist/skills/skill-loader.d.ts.map +1 -0
- package/dist/skills/skill-loader.js +225 -0
- package/dist/skills/skill-loader.js.map +1 -0
- package/dist/skills/skill-matcher.d.ts +33 -0
- package/dist/skills/skill-matcher.d.ts.map +1 -0
- package/dist/skills/skill-matcher.js +190 -0
- package/dist/skills/skill-matcher.js.map +1 -0
- package/dist/skills/types.d.ts +123 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +12 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/tools/browser-tool.d.ts +149 -0
- package/dist/tools/browser-tool.d.ts.map +1 -0
- package/dist/tools/browser-tool.js +257 -0
- package/dist/tools/browser-tool.js.map +1 -0
- package/package.json +84 -0
- package/public/favicon.ico +0 -0
- package/public/setup.html +1026 -0
- package/public/viewer/icons/icon-192.png +0 -0
- package/public/viewer/icons/icon-512.png +0 -0
- package/public/viewer/js/modules/chat.js +1587 -0
- package/public/viewer/js/modules/dashboard.js +275 -0
- package/public/viewer/js/modules/graph.js +997 -0
- package/public/viewer/js/modules/memory.js +353 -0
- package/public/viewer/js/modules/settings.js +255 -0
- package/public/viewer/js/utils/api.js +169 -0
- package/public/viewer/js/utils/dom.js +92 -0
- package/public/viewer/js/utils/format.js +192 -0
- package/public/viewer/manifest.json +26 -0
- package/public/viewer/sw.js +131 -0
- package/public/viewer/viewer.css +500 -0
- package/public/viewer/viewer.html +1535 -0
- package/scripts/postinstall.js +118 -0
- package/templates/skills/document-analyze.md +63 -0
- package/templates/skills/heartbeat-report.md +75 -0
- package/templates/skills/image-translate.md +67 -0
- package/templates/workspace/skill-forge/DESIGN.md +115 -0
- package/templates/workspace/skill-forge/agents/architect.ts +295 -0
- package/templates/workspace/skill-forge/agents/developer.ts +364 -0
- package/templates/workspace/skill-forge/agents/qa.ts +313 -0
- package/templates/workspace/skill-forge/claude-api.ts +353 -0
- package/templates/workspace/skill-forge/discord-ui.ts +580 -0
- package/templates/workspace/skill-forge/error-handler.ts +354 -0
- package/templates/workspace/skill-forge/mama-integration.ts +357 -0
- package/templates/workspace/skill-forge/orchestrator.ts +495 -0
- package/templates/workspace/skill-forge/output/generated-skills/skills/hello-world/README.md +24 -0
- package/templates/workspace/skill-forge/output/generated-skills/skills/hello-world/index.ts +79 -0
- package/templates/workspace/skill-forge/output/generated-skills/skills/hello-world/types.ts +17 -0
- package/templates/workspace/skill-forge/package.json +21 -0
- package/templates/workspace/skill-forge/state/session.json +132 -0
- package/templates/workspace/skill-forge/test-e2e.ts +139 -0
- package/templates/workspace/skill-forge/tsconfig.json +20 -0
- 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"}
|