@marifold/core 0.60.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +674 -0
- package/dist/agent/AgentEvents.d.ts +106 -0
- package/dist/agent/AgentEvents.d.ts.map +1 -0
- package/dist/agent/AgentEvents.js +3 -0
- package/dist/agent/AgentEvents.js.map +1 -0
- package/dist/agent/AgentHistory.d.ts +27 -0
- package/dist/agent/AgentHistory.d.ts.map +1 -0
- package/dist/agent/AgentHistory.js +42 -0
- package/dist/agent/AgentHistory.js.map +1 -0
- package/dist/agent/AgentRunner.d.ts +149 -0
- package/dist/agent/AgentRunner.d.ts.map +1 -0
- package/dist/agent/AgentRunner.js +727 -0
- package/dist/agent/AgentRunner.js.map +1 -0
- package/dist/agent/ApprovalPolicy.d.ts +71 -0
- package/dist/agent/ApprovalPolicy.d.ts.map +1 -0
- package/dist/agent/ApprovalPolicy.js +29 -0
- package/dist/agent/ApprovalPolicy.js.map +1 -0
- package/dist/agent/ControlBlockTools.d.ts +9 -0
- package/dist/agent/ControlBlockTools.d.ts.map +1 -0
- package/dist/agent/ControlBlockTools.js +49 -0
- package/dist/agent/ControlBlockTools.js.map +1 -0
- package/dist/agent/RunWorkspace.d.ts +92 -0
- package/dist/agent/RunWorkspace.d.ts.map +1 -0
- package/dist/agent/RunWorkspace.js +328 -0
- package/dist/agent/RunWorkspace.js.map +1 -0
- package/dist/agent/ScopedProcess.d.ts +35 -0
- package/dist/agent/ScopedProcess.d.ts.map +1 -0
- package/dist/agent/ScopedProcess.js +280 -0
- package/dist/agent/ScopedProcess.js.map +1 -0
- package/dist/agent/ToolRegistry.d.ts +80 -0
- package/dist/agent/ToolRegistry.d.ts.map +1 -0
- package/dist/agent/ToolRegistry.js +45 -0
- package/dist/agent/ToolRegistry.js.map +1 -0
- package/dist/agent/UserInput.d.ts +59 -0
- package/dist/agent/UserInput.d.ts.map +1 -0
- package/dist/agent/UserInput.js +203 -0
- package/dist/agent/UserInput.js.map +1 -0
- package/dist/agent/tools/AskUserTool.d.ts +71 -0
- package/dist/agent/tools/AskUserTool.d.ts.map +1 -0
- package/dist/agent/tools/AskUserTool.js +70 -0
- package/dist/agent/tools/AskUserTool.js.map +1 -0
- package/dist/agent/tools/DelegateTool.d.ts +49 -0
- package/dist/agent/tools/DelegateTool.d.ts.map +1 -0
- package/dist/agent/tools/DelegateTool.js +62 -0
- package/dist/agent/tools/DelegateTool.js.map +1 -0
- package/dist/agent/tools/InspectAttachmentTool.d.ts +25 -0
- package/dist/agent/tools/InspectAttachmentTool.d.ts.map +1 -0
- package/dist/agent/tools/InspectAttachmentTool.js +129 -0
- package/dist/agent/tools/InspectAttachmentTool.js.map +1 -0
- package/dist/agent/tools/PythonPackageTool.d.ts +26 -0
- package/dist/agent/tools/PythonPackageTool.d.ts.map +1 -0
- package/dist/agent/tools/PythonPackageTool.js +105 -0
- package/dist/agent/tools/PythonPackageTool.js.map +1 -0
- package/dist/agent/tools/ReadFileTool.d.ts +24 -0
- package/dist/agent/tools/ReadFileTool.d.ts.map +1 -0
- package/dist/agent/tools/ReadFileTool.js +112 -0
- package/dist/agent/tools/ReadFileTool.js.map +1 -0
- package/dist/agent/tools/ShellExecTool.d.ts +23 -0
- package/dist/agent/tools/ShellExecTool.d.ts.map +1 -0
- package/dist/agent/tools/ShellExecTool.js +75 -0
- package/dist/agent/tools/ShellExecTool.js.map +1 -0
- package/dist/agent/tools/WebSearchTool.d.ts +26 -0
- package/dist/agent/tools/WebSearchTool.d.ts.map +1 -0
- package/dist/agent/tools/WebSearchTool.js +52 -0
- package/dist/agent/tools/WebSearchTool.js.map +1 -0
- package/dist/agent/tools/WriteFileTool.d.ts +30 -0
- package/dist/agent/tools/WriteFileTool.d.ts.map +1 -0
- package/dist/agent/tools/WriteFileTool.js +155 -0
- package/dist/agent/tools/WriteFileTool.js.map +1 -0
- package/dist/app/AppActionResolver.d.ts +15 -0
- package/dist/app/AppActionResolver.d.ts.map +1 -0
- package/dist/app/AppActionResolver.js +98 -0
- package/dist/app/AppActionResolver.js.map +1 -0
- package/dist/app/AppSchema.d.ts +83 -0
- package/dist/app/AppSchema.d.ts.map +1 -0
- package/dist/app/AppSchema.js +17 -0
- package/dist/app/AppSchema.js.map +1 -0
- package/dist/app/AppStore.d.ts +14 -0
- package/dist/app/AppStore.d.ts.map +1 -0
- package/dist/app/AppStore.js +146 -0
- package/dist/app/AppStore.js.map +1 -0
- package/dist/app/AppValidator.d.ts +10 -0
- package/dist/app/AppValidator.d.ts.map +1 -0
- package/dist/app/AppValidator.js +503 -0
- package/dist/app/AppValidator.js.map +1 -0
- package/dist/app/SkillAppCompiler.d.ts +5 -0
- package/dist/app/SkillAppCompiler.d.ts.map +1 -0
- package/dist/app/SkillAppCompiler.js +632 -0
- package/dist/app/SkillAppCompiler.js.map +1 -0
- package/dist/app/SkillAppDsl.d.ts +93 -0
- package/dist/app/SkillAppDsl.d.ts.map +1 -0
- package/dist/app/SkillAppDsl.js +72 -0
- package/dist/app/SkillAppDsl.js.map +1 -0
- package/dist/app/SkillAppInstanceRegistry.d.ts +25 -0
- package/dist/app/SkillAppInstanceRegistry.d.ts.map +1 -0
- package/dist/app/SkillAppInstanceRegistry.js +218 -0
- package/dist/app/SkillAppInstanceRegistry.js.map +1 -0
- package/dist/app/SkillAppResolver.d.ts +12 -0
- package/dist/app/SkillAppResolver.d.ts.map +1 -0
- package/dist/app/SkillAppResolver.js +89 -0
- package/dist/app/SkillAppResolver.js.map +1 -0
- package/dist/app/SkillAppSchema.d.ts +116 -0
- package/dist/app/SkillAppSchema.d.ts.map +1 -0
- package/dist/app/SkillAppSchema.js +5 -0
- package/dist/app/SkillAppSchema.js.map +1 -0
- package/dist/channels/TelegramBridge.d.ts +103 -0
- package/dist/channels/TelegramBridge.d.ts.map +1 -0
- package/dist/channels/TelegramBridge.js +565 -0
- package/dist/channels/TelegramBridge.js.map +1 -0
- package/dist/channels/respond.d.ts +46 -0
- package/dist/channels/respond.d.ts.map +1 -0
- package/dist/channels/respond.js +41 -0
- package/dist/channels/respond.js.map +1 -0
- package/dist/config/ChatGptTokenRefresh.d.ts +18 -0
- package/dist/config/ChatGptTokenRefresh.d.ts.map +1 -0
- package/dist/config/ChatGptTokenRefresh.js +63 -0
- package/dist/config/ChatGptTokenRefresh.js.map +1 -0
- package/dist/config/ConfigBackup.d.ts +20 -0
- package/dist/config/ConfigBackup.d.ts.map +1 -0
- package/dist/config/ConfigBackup.js +197 -0
- package/dist/config/ConfigBackup.js.map +1 -0
- package/dist/config/ConfigLoader.d.ts +28 -0
- package/dist/config/ConfigLoader.d.ts.map +1 -0
- package/dist/config/ConfigLoader.js +335 -0
- package/dist/config/ConfigLoader.js.map +1 -0
- package/dist/config/ConfigManager.d.ts +55 -0
- package/dist/config/ConfigManager.d.ts.map +1 -0
- package/dist/config/ConfigManager.js +707 -0
- package/dist/config/ConfigManager.js.map +1 -0
- package/dist/config/ConfigSchema.d.ts +231 -0
- package/dist/config/ConfigSchema.d.ts.map +1 -0
- package/dist/config/ConfigSchema.js +15 -0
- package/dist/config/ConfigSchema.js.map +1 -0
- package/dist/config/GitHubCopilotAuth.d.ts +7 -0
- package/dist/config/GitHubCopilotAuth.d.ts.map +1 -0
- package/dist/config/GitHubCopilotAuth.js +40 -0
- package/dist/config/GitHubCopilotAuth.js.map +1 -0
- package/dist/config/MarifoldOpenAICompatProvider.d.ts +39 -0
- package/dist/config/MarifoldOpenAICompatProvider.d.ts.map +1 -0
- package/dist/config/MarifoldOpenAICompatProvider.js +158 -0
- package/dist/config/MarifoldOpenAICompatProvider.js.map +1 -0
- package/dist/config/OpenAICompatUrls.d.ts +7 -0
- package/dist/config/OpenAICompatUrls.d.ts.map +1 -0
- package/dist/config/OpenAICompatUrls.js +47 -0
- package/dist/config/OpenAICompatUrls.js.map +1 -0
- package/dist/config/ProviderFactory.d.ts +12 -0
- package/dist/config/ProviderFactory.d.ts.map +1 -0
- package/dist/config/ProviderFactory.js +61 -0
- package/dist/config/ProviderFactory.js.map +1 -0
- package/dist/config/ProviderInspector.d.ts +46 -0
- package/dist/config/ProviderInspector.d.ts.map +1 -0
- package/dist/config/ProviderInspector.js +356 -0
- package/dist/config/ProviderInspector.js.map +1 -0
- package/dist/config/ProviderRegistry.d.ts +19 -0
- package/dist/config/ProviderRegistry.d.ts.map +1 -0
- package/dist/config/ProviderRegistry.js +301 -0
- package/dist/config/ProviderRegistry.js.map +1 -0
- package/dist/config/XaiTokenRefresh.d.ts +15 -0
- package/dist/config/XaiTokenRefresh.d.ts.map +1 -0
- package/dist/config/XaiTokenRefresh.js +73 -0
- package/dist/config/XaiTokenRefresh.js.map +1 -0
- package/dist/errors/MarifoldError.d.ts +34 -0
- package/dist/errors/MarifoldError.d.ts.map +1 -0
- package/dist/errors/MarifoldError.js +100 -0
- package/dist/errors/MarifoldError.js.map +1 -0
- package/dist/images/ImageOptimizer.d.ts +34 -0
- package/dist/images/ImageOptimizer.d.ts.map +1 -0
- package/dist/images/ImageOptimizer.js +225 -0
- package/dist/images/ImageOptimizer.js.map +1 -0
- package/dist/index.d.ts +96 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +193 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/MemoryControls.d.ts +26 -0
- package/dist/memory/MemoryControls.d.ts.map +1 -0
- package/dist/memory/MemoryControls.js +388 -0
- package/dist/memory/MemoryControls.js.map +1 -0
- package/dist/memory/MemoryStore.d.ts +122 -0
- package/dist/memory/MemoryStore.d.ts.map +1 -0
- package/dist/memory/MemoryStore.js +1096 -0
- package/dist/memory/MemoryStore.js.map +1 -0
- package/dist/profiles/ProfileManager.d.ts +139 -0
- package/dist/profiles/ProfileManager.d.ts.map +1 -0
- package/dist/profiles/ProfileManager.js +475 -0
- package/dist/profiles/ProfileManager.js.map +1 -0
- package/dist/profiles/ProfileResolver.d.ts +18 -0
- package/dist/profiles/ProfileResolver.d.ts.map +1 -0
- package/dist/profiles/ProfileResolver.js +280 -0
- package/dist/profiles/ProfileResolver.js.map +1 -0
- package/dist/runs/RunRegistry.d.ts +140 -0
- package/dist/runs/RunRegistry.d.ts.map +1 -0
- package/dist/runs/RunRegistry.js +432 -0
- package/dist/runs/RunRegistry.js.map +1 -0
- package/dist/runtime/MarifoldRuntime.d.ts +244 -0
- package/dist/runtime/MarifoldRuntime.d.ts.map +1 -0
- package/dist/runtime/MarifoldRuntime.js +1099 -0
- package/dist/runtime/MarifoldRuntime.js.map +1 -0
- package/dist/runtime/MarifoldTypes.d.ts +70 -0
- package/dist/runtime/MarifoldTypes.d.ts.map +1 -0
- package/dist/runtime/MarifoldTypes.js +3 -0
- package/dist/runtime/MarifoldTypes.js.map +1 -0
- package/dist/schedule/ScheduleStore.d.ts +60 -0
- package/dist/schedule/ScheduleStore.d.ts.map +1 -0
- package/dist/schedule/ScheduleStore.js +212 -0
- package/dist/schedule/ScheduleStore.js.map +1 -0
- package/dist/schedule/Scheduler.d.ts +28 -0
- package/dist/schedule/Scheduler.d.ts.map +1 -0
- package/dist/schedule/Scheduler.js +65 -0
- package/dist/schedule/Scheduler.js.map +1 -0
- package/dist/search/DuckDuckGoBackend.d.ts +18 -0
- package/dist/search/DuckDuckGoBackend.d.ts.map +1 -0
- package/dist/search/DuckDuckGoBackend.js +37 -0
- package/dist/search/DuckDuckGoBackend.js.map +1 -0
- package/dist/search/FirecrawlBackend.d.ts +28 -0
- package/dist/search/FirecrawlBackend.d.ts.map +1 -0
- package/dist/search/FirecrawlBackend.js +76 -0
- package/dist/search/FirecrawlBackend.js.map +1 -0
- package/dist/search/SearchBackend.d.ts +18 -0
- package/dist/search/SearchBackend.d.ts.map +1 -0
- package/dist/search/SearchBackend.js +24 -0
- package/dist/search/SearchBackend.js.map +1 -0
- package/dist/search/createSearchBackend.d.ts +16 -0
- package/dist/search/createSearchBackend.d.ts.map +1 -0
- package/dist/search/createSearchBackend.js +30 -0
- package/dist/search/createSearchBackend.js.map +1 -0
- package/dist/sessions/ResponseMetrics.d.ts +17 -0
- package/dist/sessions/ResponseMetrics.d.ts.map +1 -0
- package/dist/sessions/ResponseMetrics.js +3 -0
- package/dist/sessions/ResponseMetrics.js.map +1 -0
- package/dist/sessions/SessionResolver.d.ts +135 -0
- package/dist/sessions/SessionResolver.d.ts.map +1 -0
- package/dist/sessions/SessionResolver.js +1173 -0
- package/dist/sessions/SessionResolver.js.map +1 -0
- package/dist/skill/BuiltInSkillManager.d.ts +11 -0
- package/dist/skill/BuiltInSkillManager.d.ts.map +1 -0
- package/dist/skill/BuiltInSkillManager.js +98 -0
- package/dist/skill/BuiltInSkillManager.js.map +1 -0
- package/dist/skill/SkillInvocation.d.ts +30 -0
- package/dist/skill/SkillInvocation.d.ts.map +1 -0
- package/dist/skill/SkillInvocation.js +135 -0
- package/dist/skill/SkillInvocation.js.map +1 -0
- package/dist/skill/SkillSchema.d.ts +37 -0
- package/dist/skill/SkillSchema.d.ts.map +1 -0
- package/dist/skill/SkillSchema.js +26 -0
- package/dist/skill/SkillSchema.js.map +1 -0
- package/dist/skill/SkillStore.d.ts +41 -0
- package/dist/skill/SkillStore.d.ts.map +1 -0
- package/dist/skill/SkillStore.js +184 -0
- package/dist/skill/SkillStore.js.map +1 -0
- package/dist/skill/SkillTemplater.d.ts +19 -0
- package/dist/skill/SkillTemplater.d.ts.map +1 -0
- package/dist/skill/SkillTemplater.js +36 -0
- package/dist/skill/SkillTemplater.js.map +1 -0
- package/dist/skill/SkillValidator.d.ts +10 -0
- package/dist/skill/SkillValidator.d.ts.map +1 -0
- package/dist/skill/SkillValidator.js +131 -0
- package/dist/skill/SkillValidator.js.map +1 -0
- package/dist/skill/SkillVars.d.ts +10 -0
- package/dist/skill/SkillVars.d.ts.map +1 -0
- package/dist/skill/SkillVars.js +65 -0
- package/dist/skill/SkillVars.js.map +1 -0
- package/dist/skill/index.d.ts +10 -0
- package/dist/skill/index.d.ts.map +1 -0
- package/dist/skill/index.js +22 -0
- package/dist/skill/index.js.map +1 -0
- package/dist/skillapp/SkillAppActionResolver.d.ts +13 -0
- package/dist/skillapp/SkillAppActionResolver.d.ts.map +1 -0
- package/dist/skillapp/SkillAppActionResolver.js +95 -0
- package/dist/skillapp/SkillAppActionResolver.js.map +1 -0
- package/dist/skillapp/SkillAppSchema.d.ts +79 -0
- package/dist/skillapp/SkillAppSchema.d.ts.map +1 -0
- package/dist/skillapp/SkillAppSchema.js +20 -0
- package/dist/skillapp/SkillAppSchema.js.map +1 -0
- package/dist/skillapp/SkillAppStore.d.ts +11 -0
- package/dist/skillapp/SkillAppStore.d.ts.map +1 -0
- package/dist/skillapp/SkillAppStore.js +98 -0
- package/dist/skillapp/SkillAppStore.js.map +1 -0
- package/dist/skillapp/SkillAppValidator.d.ts +10 -0
- package/dist/skillapp/SkillAppValidator.d.ts.map +1 -0
- package/dist/skillapp/SkillAppValidator.js +522 -0
- package/dist/skillapp/SkillAppValidator.js.map +1 -0
- package/dist/tasks/TaskStore.d.ts +110 -0
- package/dist/tasks/TaskStore.d.ts.map +1 -0
- package/dist/tasks/TaskStore.js +371 -0
- package/dist/tasks/TaskStore.js.map +1 -0
- package/dist/util/fetchRetry.d.ts +11 -0
- package/dist/util/fetchRetry.d.ts.map +1 -0
- package/dist/util/fetchRetry.js +48 -0
- package/dist/util/fetchRetry.js.map +1 -0
- package/dist/util/idToken.d.ts +12 -0
- package/dist/util/idToken.d.ts.map +1 -0
- package/dist/util/idToken.js +32 -0
- package/dist/util/idToken.js.map +1 -0
- package/dist/util/proxy.d.ts +18 -0
- package/dist/util/proxy.d.ts.map +1 -0
- package/dist/util/proxy.js +28 -0
- package/dist/util/proxy.js.map +1 -0
- package/dist/workspace/Workspace.d.ts +9 -0
- package/dist/workspace/Workspace.d.ts.map +1 -0
- package/dist/workspace/Workspace.js +55 -0
- package/dist/workspace/Workspace.js.map +1 -0
- package/dist/workspace/WorkspaceInitializer.d.ts +40 -0
- package/dist/workspace/WorkspaceInitializer.d.ts.map +1 -0
- package/dist/workspace/WorkspaceInitializer.js +212 -0
- package/dist/workspace/WorkspaceInitializer.js.map +1 -0
- package/dist/workspace/WorkspacePaths.d.ts +11 -0
- package/dist/workspace/WorkspacePaths.d.ts.map +1 -0
- package/dist/workspace/WorkspacePaths.js +82 -0
- package/dist/workspace/WorkspacePaths.js.map +1 -0
- package/package.json +36 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.SkillStore = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const MarifoldError_1 = require("../errors/MarifoldError");
|
|
40
|
+
const SkillValidator_1 = require("./SkillValidator");
|
|
41
|
+
const SAFE_SKILL_NAME = /^[a-z0-9][a-z0-9_-]*$/;
|
|
42
|
+
/**
|
|
43
|
+
* Loads `marifold.skill.v0` skills from the shared skills dir and the active
|
|
44
|
+
* profile's skills/ dir. Each skill is a folder `<name>/SKILL.md` (the Claude
|
|
45
|
+
* Code layout), so a skill can carry bundled files. A profile skill shadows a
|
|
46
|
+
* global one of the same name. Skills are the TUI's `$name` primitive and a
|
|
47
|
+
* future App's source.
|
|
48
|
+
*/
|
|
49
|
+
class SkillStore {
|
|
50
|
+
options;
|
|
51
|
+
constructor(options) {
|
|
52
|
+
this.options = options;
|
|
53
|
+
}
|
|
54
|
+
/** Loadable skills, sorted by name. With no scope, profile skills shadow
|
|
55
|
+
* global ones (the merged, runnable set); pass a scope to list just that
|
|
56
|
+
* layer. Folders that fail to parse are skipped — use get() for a precise
|
|
57
|
+
* error on a single named skill. */
|
|
58
|
+
list(scope) {
|
|
59
|
+
const byName = new Map();
|
|
60
|
+
if (scope !== 'profile') {
|
|
61
|
+
for (const skill of this.loadDir(this.options.globalDir, 'global'))
|
|
62
|
+
byName.set(skill.name, skill);
|
|
63
|
+
}
|
|
64
|
+
if (scope !== 'global' && this.options.profileDir) {
|
|
65
|
+
for (const skill of this.loadDir(this.options.profileDir, 'profile'))
|
|
66
|
+
byName.set(skill.name, skill);
|
|
67
|
+
}
|
|
68
|
+
return [...byName.values()].sort((a, b) => a.name.localeCompare(b.name));
|
|
69
|
+
}
|
|
70
|
+
get(name) {
|
|
71
|
+
assertSafeName(name);
|
|
72
|
+
// Profile takes precedence over global.
|
|
73
|
+
for (const [dir, scope] of this.scopedDirs().reverse()) {
|
|
74
|
+
const skillMd = path.join(dir, name, 'SKILL.md');
|
|
75
|
+
if (fs.existsSync(skillMd)) {
|
|
76
|
+
return { ...(0, SkillValidator_1.parseSkill)(fs.readFileSync(skillMd, 'utf-8'), skillMd), scope };
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
require(name) {
|
|
82
|
+
const skill = this.get(name);
|
|
83
|
+
if (!skill)
|
|
84
|
+
throw MarifoldError_1.MarifoldError.skillNotFound(name);
|
|
85
|
+
return skill;
|
|
86
|
+
}
|
|
87
|
+
/** Validate then write a skill into the target scope as `<name>/SKILL.md`. */
|
|
88
|
+
installFromText(text, scope = 'global') {
|
|
89
|
+
const skill = (0, SkillValidator_1.parseSkill)(text);
|
|
90
|
+
const skillDir = path.join(this.dirForScope(scope), skill.name);
|
|
91
|
+
fs.mkdirSync(skillDir, { recursive: true });
|
|
92
|
+
const skillMd = path.join(skillDir, 'SKILL.md');
|
|
93
|
+
fs.writeFileSync(skillMd, text.endsWith('\n') ? text : `${text}\n`);
|
|
94
|
+
return { ...skill, source: skillMd, scope };
|
|
95
|
+
}
|
|
96
|
+
/** Install from a `.md` file or a Claude Code-style skill folder containing
|
|
97
|
+
* `SKILL.md`. Either way the skill lands at `<scope>/<name>/SKILL.md`; a
|
|
98
|
+
* folder source is copied whole (bundled files travel, though marifold
|
|
99
|
+
* currently only uses SKILL.md). */
|
|
100
|
+
installFromFile(filePath, scope = 'global') {
|
|
101
|
+
const { skillMd, folder } = resolveSkillSource(filePath);
|
|
102
|
+
const text = fs.readFileSync(skillMd, 'utf-8');
|
|
103
|
+
if (!folder)
|
|
104
|
+
return this.installFromText(text, scope);
|
|
105
|
+
const skill = (0, SkillValidator_1.parseSkill)(text, skillMd); // validate before writing
|
|
106
|
+
const destDir = path.join(this.dirForScope(scope), skill.name);
|
|
107
|
+
fs.rmSync(destDir, { recursive: true, force: true });
|
|
108
|
+
fs.cpSync(folder, destDir, { recursive: true });
|
|
109
|
+
return { ...skill, source: path.join(destDir, 'SKILL.md'), scope };
|
|
110
|
+
}
|
|
111
|
+
/** Remove a skill (its whole `<name>/` folder). With no scope, deletes it
|
|
112
|
+
* from every layer; pass a scope to delete only that layer (e.g. the profile
|
|
113
|
+
* copy, revealing a global one). */
|
|
114
|
+
remove(name, scope) {
|
|
115
|
+
assertSafeName(name);
|
|
116
|
+
let removed = false;
|
|
117
|
+
for (const [dir, dirScope] of this.scopedDirs()) {
|
|
118
|
+
if (scope !== undefined && dirScope !== scope)
|
|
119
|
+
continue;
|
|
120
|
+
const skillDir = path.join(dir, name);
|
|
121
|
+
if (fs.existsSync(path.join(skillDir, 'SKILL.md'))) {
|
|
122
|
+
fs.rmSync(skillDir, { recursive: true, force: true });
|
|
123
|
+
removed = true;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return removed;
|
|
127
|
+
}
|
|
128
|
+
scopedDirs() {
|
|
129
|
+
const dirs = [[this.options.globalDir, 'global']];
|
|
130
|
+
if (this.options.profileDir)
|
|
131
|
+
dirs.push([this.options.profileDir, 'profile']);
|
|
132
|
+
return dirs;
|
|
133
|
+
}
|
|
134
|
+
dirForScope(scope) {
|
|
135
|
+
if (scope === 'profile') {
|
|
136
|
+
if (!this.options.profileDir) {
|
|
137
|
+
throw MarifoldError_1.MarifoldError.skillInvalid('No profile skills directory is configured for this store.');
|
|
138
|
+
}
|
|
139
|
+
return this.options.profileDir;
|
|
140
|
+
}
|
|
141
|
+
return this.options.globalDir;
|
|
142
|
+
}
|
|
143
|
+
loadDir(dir, scope) {
|
|
144
|
+
if (!fs.existsSync(dir))
|
|
145
|
+
return [];
|
|
146
|
+
const skills = [];
|
|
147
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
148
|
+
if (!entry.isDirectory())
|
|
149
|
+
continue;
|
|
150
|
+
const skillMd = path.join(dir, entry.name, 'SKILL.md');
|
|
151
|
+
if (!fs.existsSync(skillMd))
|
|
152
|
+
continue;
|
|
153
|
+
try {
|
|
154
|
+
skills.push({ ...(0, SkillValidator_1.parseSkill)(fs.readFileSync(skillMd, 'utf-8'), skillMd), scope });
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
// Skip unparseable skill folders; get() surfaces the precise error.
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return skills;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
exports.SkillStore = SkillStore;
|
|
164
|
+
function assertSafeName(name) {
|
|
165
|
+
if (!SAFE_SKILL_NAME.test(name)) {
|
|
166
|
+
throw MarifoldError_1.MarifoldError.skillInvalid(`Invalid skill name '${name}'.`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/** Resolve an install target to its `SKILL.md` and, for a folder source, the
|
|
170
|
+
* folder to copy: a `.md` file directly, or a `SKILL.md` inside a skill folder. */
|
|
171
|
+
function resolveSkillSource(target) {
|
|
172
|
+
if (!fs.existsSync(target)) {
|
|
173
|
+
throw MarifoldError_1.MarifoldError.skillInvalid(`Skill not found: ${target}`);
|
|
174
|
+
}
|
|
175
|
+
if (fs.statSync(target).isDirectory()) {
|
|
176
|
+
const skillMd = path.join(target, 'SKILL.md');
|
|
177
|
+
if (!fs.existsSync(skillMd)) {
|
|
178
|
+
throw MarifoldError_1.MarifoldError.skillInvalid(`Skill folder has no SKILL.md: ${target}`);
|
|
179
|
+
}
|
|
180
|
+
return { skillMd, folder: target };
|
|
181
|
+
}
|
|
182
|
+
return { skillMd: target };
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=SkillStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SkillStore.js","sourceRoot":"","sources":["../../src/skill/SkillStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { MarifoldSkill } from './SkillSchema';
|
|
2
|
+
export interface SkillRenderResult {
|
|
3
|
+
/** The expanded prompt with every `{{var}}` resolved. */
|
|
4
|
+
prompt: string;
|
|
5
|
+
/** Required variables that had neither a supplied value nor a default. */
|
|
6
|
+
missing: string[];
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Effective value for each declared variable: the supplied value, else the
|
|
10
|
+
* declared default. Required variables with neither are reported as missing so
|
|
11
|
+
* the caller (TUI inline prompt, or an App form) can collect them.
|
|
12
|
+
*/
|
|
13
|
+
export declare function resolveSkillValues(skill: MarifoldSkill, supplied: Record<string, string>): {
|
|
14
|
+
values: Record<string, string>;
|
|
15
|
+
missing: string[];
|
|
16
|
+
};
|
|
17
|
+
/** Expand a skill's prompt template against supplied variable values. */
|
|
18
|
+
export declare function renderSkillPrompt(skill: MarifoldSkill, supplied: Record<string, string>): SkillRenderResult;
|
|
19
|
+
//# sourceMappingURL=SkillTemplater.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SkillTemplater.d.ts","sourceRoot":"","sources":["../../src/skill/SkillTemplater.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,WAAW,iBAAiB;IAChC,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAgBvD;AAED,yEAAyE;AACzE,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,iBAAiB,CAOnB"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveSkillValues = resolveSkillValues;
|
|
4
|
+
exports.renderSkillPrompt = renderSkillPrompt;
|
|
5
|
+
/**
|
|
6
|
+
* Effective value for each declared variable: the supplied value, else the
|
|
7
|
+
* declared default. Required variables with neither are reported as missing so
|
|
8
|
+
* the caller (TUI inline prompt, or an App form) can collect them.
|
|
9
|
+
*/
|
|
10
|
+
function resolveSkillValues(skill, supplied) {
|
|
11
|
+
const values = {};
|
|
12
|
+
const missing = [];
|
|
13
|
+
for (const variable of skill.variables) {
|
|
14
|
+
const provided = supplied[variable.name];
|
|
15
|
+
if (provided !== undefined && provided !== '') {
|
|
16
|
+
values[variable.name] = provided;
|
|
17
|
+
}
|
|
18
|
+
else if (variable.default !== undefined) {
|
|
19
|
+
values[variable.name] = variable.default;
|
|
20
|
+
}
|
|
21
|
+
else if (variable.required) {
|
|
22
|
+
missing.push(variable.name);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
values[variable.name] = '';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return { values, missing };
|
|
29
|
+
}
|
|
30
|
+
/** Expand a skill's prompt template against supplied variable values. */
|
|
31
|
+
function renderSkillPrompt(skill, supplied) {
|
|
32
|
+
const { values, missing } = resolveSkillValues(skill, supplied);
|
|
33
|
+
const prompt = skill.prompt.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*\}\}/g, (_match, name) => values[name] ?? '');
|
|
34
|
+
return { prompt, missing };
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=SkillTemplater.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SkillTemplater.js","sourceRoot":"","sources":["../../src/skill/SkillTemplater.ts"],"names":[],"mappings":";;;;AASA;;;;GAIG;AACH,4BACE,KAAoB,EACpB,QAAgC;IAEhC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;YAC9C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;QACnC,CAAC;aAAM,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC3C,CAAC;aAAM,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC;AAED,yEAAyE;AACzE,2BACE,KAAoB,EACpB,QAAgC;IAEhC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CACjC,gCAAgC,EAChC,CAAC,MAAM,EAAE,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAC7C,CAAC;IACF,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { MarifoldSkill } from './SkillSchema';
|
|
2
|
+
type RawRecord = Record<string, unknown>;
|
|
3
|
+
/**
|
|
4
|
+
* Parse and validate a `marifold.skill.v0` markdown skill — a YAML frontmatter
|
|
5
|
+
* block (`--- … ---`) carrying the metadata, followed by the prompt body.
|
|
6
|
+
*/
|
|
7
|
+
export declare function parseSkill(text: string, source?: string): MarifoldSkill;
|
|
8
|
+
export declare function validateSkill(raw: RawRecord, source?: string): MarifoldSkill;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=SkillValidator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SkillValidator.d.ts","sourceRoot":"","sources":["../../src/skill/SkillValidator.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,aAAa,EAId,MAAM,eAAe,CAAC;AAOvB,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEzC;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,aAAa,CAmBvE;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,aAAa,CA+C5E"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseSkill = parseSkill;
|
|
4
|
+
exports.validateSkill = validateSkill;
|
|
5
|
+
const yaml_1 = require("yaml");
|
|
6
|
+
const MarifoldError_1 = require("../errors/MarifoldError");
|
|
7
|
+
const SkillSchema_1 = require("./SkillSchema");
|
|
8
|
+
const SAFE_SKILL_NAME = /^[a-z0-9][a-z0-9_-]*$/;
|
|
9
|
+
const SAFE_VARIABLE_NAME = /^[a-zA-Z0-9_]+$/;
|
|
10
|
+
// A markdown skill: a YAML frontmatter block, then the prompt body.
|
|
11
|
+
const FRONTMATTER = /^---\n([\s\S]*?)\n---\n?([\s\S]*)$/;
|
|
12
|
+
/**
|
|
13
|
+
* Parse and validate a `marifold.skill.v0` markdown skill — a YAML frontmatter
|
|
14
|
+
* block (`--- … ---`) carrying the metadata, followed by the prompt body.
|
|
15
|
+
*/
|
|
16
|
+
function parseSkill(text, source) {
|
|
17
|
+
const normalized = text.replace(/^/, '').replace(/\r\n/g, '\n');
|
|
18
|
+
const match = normalized.match(FRONTMATTER);
|
|
19
|
+
if (!match) {
|
|
20
|
+
throw MarifoldError_1.MarifoldError.skillInvalid('A skill must start with a YAML frontmatter block (--- … ---) followed by the prompt body.', source);
|
|
21
|
+
}
|
|
22
|
+
let front;
|
|
23
|
+
try {
|
|
24
|
+
front = (0, yaml_1.parse)(match[1]);
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
throw MarifoldError_1.MarifoldError.skillInvalid(`Could not parse skill frontmatter: ${String(error)}`, source);
|
|
28
|
+
}
|
|
29
|
+
if (typeof front !== 'object' || front === null || Array.isArray(front)) {
|
|
30
|
+
throw MarifoldError_1.MarifoldError.skillInvalid('Skill frontmatter must be a YAML mapping.', source);
|
|
31
|
+
}
|
|
32
|
+
return validateSkill({ ...front, prompt: match[2].trim() }, source);
|
|
33
|
+
}
|
|
34
|
+
function validateSkill(raw, source) {
|
|
35
|
+
// `schema` is optional now (markdown skills don't need a marker); if present
|
|
36
|
+
// it must still name this schema, to catch a misplaced App definition.
|
|
37
|
+
if (raw.schema !== undefined) {
|
|
38
|
+
const schema = requireString(raw.schema, 'schema', source);
|
|
39
|
+
if (schema !== SkillSchema_1.SKILL_SCHEMA_ID) {
|
|
40
|
+
throw MarifoldError_1.MarifoldError.skillInvalid(`Expected schema "${SkillSchema_1.SKILL_SCHEMA_ID}" but found "${schema}".`, source);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const name = requireString(raw.name, 'name', source).trim();
|
|
44
|
+
if (!SAFE_SKILL_NAME.test(name)) {
|
|
45
|
+
throw MarifoldError_1.MarifoldError.skillInvalid(`Invalid skill name '${name}'. Use lowercase letters, numbers, underscores, or hyphens (starting alphanumeric).`, source);
|
|
46
|
+
}
|
|
47
|
+
const description = optionalString(raw.description, 'description', source)?.trim() ?? '';
|
|
48
|
+
const prompt = requireString(raw.prompt, 'prompt', source).trim();
|
|
49
|
+
if (prompt.length === 0) {
|
|
50
|
+
throw MarifoldError_1.MarifoldError.skillInvalid('A skill prompt cannot be empty.', source);
|
|
51
|
+
}
|
|
52
|
+
const mode = normalizeMode(raw.mode, source);
|
|
53
|
+
const variables = normalizeVariables(raw.variables, source);
|
|
54
|
+
// Every variable referenced in the prompt must be declared, so the TUI and a
|
|
55
|
+
// graphical App resolve the same set before running the skill.
|
|
56
|
+
const declared = new Set(variables.map(variable => variable.name));
|
|
57
|
+
const referenced = (0, SkillSchema_1.extractTemplateVariables)(prompt);
|
|
58
|
+
const undeclared = referenced.filter(variable => !declared.has(variable));
|
|
59
|
+
if (undeclared.length > 0) {
|
|
60
|
+
throw MarifoldError_1.MarifoldError.skillInvalid(`Prompt references undeclared variable(s): ${undeclared.join(', ')}. Declare them in the frontmatter "variables:" list.`, source);
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
name,
|
|
64
|
+
description,
|
|
65
|
+
prompt,
|
|
66
|
+
mode,
|
|
67
|
+
variables,
|
|
68
|
+
...(source ? { source } : {}),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function normalizeMode(value, source) {
|
|
72
|
+
// Undefined when not declared: the run follows the session's mode (agent →
|
|
73
|
+
// agentic with tools; chat → plain turn). A skill pins a mode by declaring it.
|
|
74
|
+
if (value === undefined)
|
|
75
|
+
return undefined;
|
|
76
|
+
const mode = requireString(value, 'mode', source);
|
|
77
|
+
if (mode === 'agent' || mode === 'chat')
|
|
78
|
+
return mode;
|
|
79
|
+
throw MarifoldError_1.MarifoldError.skillInvalid('Expected mode to be "agent" or "chat".', source);
|
|
80
|
+
}
|
|
81
|
+
function normalizeVariables(value, source) {
|
|
82
|
+
if (value === undefined)
|
|
83
|
+
return [];
|
|
84
|
+
if (!Array.isArray(value)) {
|
|
85
|
+
throw MarifoldError_1.MarifoldError.skillInvalid('Expected "variables" to be a list.', source);
|
|
86
|
+
}
|
|
87
|
+
const seen = new Set();
|
|
88
|
+
return value.map((entry, index) => {
|
|
89
|
+
if (typeof entry !== 'object' || entry === null || Array.isArray(entry)) {
|
|
90
|
+
throw MarifoldError_1.MarifoldError.skillInvalid(`Expected variables[${index}] to be a mapping.`, source);
|
|
91
|
+
}
|
|
92
|
+
const variable = entry;
|
|
93
|
+
const name = requireString(variable.name, `variables[${index}].name`, source).trim();
|
|
94
|
+
if (!SAFE_VARIABLE_NAME.test(name)) {
|
|
95
|
+
throw MarifoldError_1.MarifoldError.skillInvalid(`Invalid variable name '${name}'. Use letters, numbers, or underscores.`, source);
|
|
96
|
+
}
|
|
97
|
+
if (seen.has(name)) {
|
|
98
|
+
throw MarifoldError_1.MarifoldError.skillInvalid(`Duplicate variable '${name}'.`, source);
|
|
99
|
+
}
|
|
100
|
+
seen.add(name);
|
|
101
|
+
const description = optionalString(variable.description, `variables[${index}].description`, source);
|
|
102
|
+
const required = optionalBoolean(variable.required, `variables[${index}].required`, source) ?? false;
|
|
103
|
+
const defaultValue = optionalString(variable.default, `variables[${index}].default`, source);
|
|
104
|
+
return {
|
|
105
|
+
name,
|
|
106
|
+
...(description !== undefined ? { description } : {}),
|
|
107
|
+
required,
|
|
108
|
+
...(defaultValue !== undefined ? { default: defaultValue } : {}),
|
|
109
|
+
};
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
function requireString(value, label, source) {
|
|
113
|
+
if (typeof value === 'string')
|
|
114
|
+
return value;
|
|
115
|
+
throw MarifoldError_1.MarifoldError.skillInvalid(`Expected ${label} to be a string.`, source);
|
|
116
|
+
}
|
|
117
|
+
function optionalString(value, label, source) {
|
|
118
|
+
if (value === undefined)
|
|
119
|
+
return undefined;
|
|
120
|
+
if (typeof value === 'string')
|
|
121
|
+
return value;
|
|
122
|
+
throw MarifoldError_1.MarifoldError.skillInvalid(`Expected ${label} to be a string.`, source);
|
|
123
|
+
}
|
|
124
|
+
function optionalBoolean(value, label, source) {
|
|
125
|
+
if (value === undefined)
|
|
126
|
+
return undefined;
|
|
127
|
+
if (typeof value === 'boolean')
|
|
128
|
+
return value;
|
|
129
|
+
throw MarifoldError_1.MarifoldError.skillInvalid(`Expected ${label} to be a boolean.`, source);
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=SkillValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SkillValidator.js","sourceRoot":"","sources":["../../src/skill/SkillValidator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { MarifoldSkill } from './SkillSchema';
|
|
2
|
+
/**
|
|
3
|
+
* Expand `#name` tokens in `text` using the skill's sibling `vars.toml`
|
|
4
|
+
* (reusable prompt fragments defined as `name = "value"`). Only names defined
|
|
5
|
+
* in the file are replaced; unknown `#name` tokens and Midjourney-style
|
|
6
|
+
* `{a, b}` permutations are left untouched. Missing/unreadable `vars.toml`
|
|
7
|
+
* returns the text unchanged.
|
|
8
|
+
*/
|
|
9
|
+
export declare function expandSkillVars(text: string, skill: MarifoldSkill): string;
|
|
10
|
+
//# sourceMappingURL=SkillVars.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SkillVars.d.ts","sourceRoot":"","sources":["../../src/skill/SkillVars.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,CAc1E"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.expandSkillVars = expandSkillVars;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const smol_toml_1 = require("smol-toml");
|
|
40
|
+
/**
|
|
41
|
+
* Expand `#name` tokens in `text` using the skill's sibling `vars.toml`
|
|
42
|
+
* (reusable prompt fragments defined as `name = "value"`). Only names defined
|
|
43
|
+
* in the file are replaced; unknown `#name` tokens and Midjourney-style
|
|
44
|
+
* `{a, b}` permutations are left untouched. Missing/unreadable `vars.toml`
|
|
45
|
+
* returns the text unchanged.
|
|
46
|
+
*/
|
|
47
|
+
function expandSkillVars(text, skill) {
|
|
48
|
+
if (!skill.source)
|
|
49
|
+
return text;
|
|
50
|
+
const varsPath = path.join(path.dirname(skill.source), 'vars.toml');
|
|
51
|
+
let table;
|
|
52
|
+
try {
|
|
53
|
+
if (!fs.existsSync(varsPath))
|
|
54
|
+
return text;
|
|
55
|
+
table = (0, smol_toml_1.parse)(fs.readFileSync(varsPath, 'utf-8'));
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return text;
|
|
59
|
+
}
|
|
60
|
+
return text.replace(/#([A-Za-z0-9_]+)/g, (match, name) => {
|
|
61
|
+
const value = table[name];
|
|
62
|
+
return typeof value === 'string' ? value : match;
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=SkillVars.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SkillVars.js","sourceRoot":"","sources":["../../src/skill/SkillVars.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,0CAcC;AA1BD,uCAAyB;AACzB,2CAA6B;AAC7B,yCAAkC;AAGlC;;;;;;GAMG;AACH,SAAgB,eAAe,CAAC,IAAY,EAAE,KAAoB;IAChE,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC;IACpE,IAAI,KAA8B,CAAC;IACnC,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1C,KAAK,GAAG,IAAA,iBAAK,EAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAA4B,CAAC;IAC/E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { SKILL_SCHEMA_ID, extractTemplateVariables, } from './SkillSchema';
|
|
2
|
+
export type { MarifoldSkill, SkillMode, SkillVariable } from './SkillSchema';
|
|
3
|
+
export { parseSkill, validateSkill } from './SkillValidator';
|
|
4
|
+
export { renderSkillPrompt, resolveSkillValues } from './SkillTemplater';
|
|
5
|
+
export type { SkillRenderResult } from './SkillTemplater';
|
|
6
|
+
export { bindSkillArgs, parseSkillInvocation, resolveSkillInvocation, resolveSkillValuesInvocation, skillUsage, tokenizeSkillArgs, } from './SkillInvocation';
|
|
7
|
+
export type { ParsedSkillInvocation, ResolvedSkillInvocation } from './SkillInvocation';
|
|
8
|
+
export { SkillStore } from './SkillStore';
|
|
9
|
+
export type { SkillScope, SkillStoreOptions } from './SkillStore';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skill/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,wBAAwB,GACzB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACzE,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,sBAAsB,EACtB,4BAA4B,EAC5B,UAAU,EACV,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SkillStore = exports.tokenizeSkillArgs = exports.skillUsage = exports.resolveSkillValuesInvocation = exports.resolveSkillInvocation = exports.parseSkillInvocation = exports.bindSkillArgs = exports.resolveSkillValues = exports.renderSkillPrompt = exports.validateSkill = exports.parseSkill = exports.extractTemplateVariables = exports.SKILL_SCHEMA_ID = void 0;
|
|
4
|
+
var SkillSchema_1 = require("./SkillSchema");
|
|
5
|
+
Object.defineProperty(exports, "SKILL_SCHEMA_ID", { enumerable: true, get: function () { return SkillSchema_1.SKILL_SCHEMA_ID; } });
|
|
6
|
+
Object.defineProperty(exports, "extractTemplateVariables", { enumerable: true, get: function () { return SkillSchema_1.extractTemplateVariables; } });
|
|
7
|
+
var SkillValidator_1 = require("./SkillValidator");
|
|
8
|
+
Object.defineProperty(exports, "parseSkill", { enumerable: true, get: function () { return SkillValidator_1.parseSkill; } });
|
|
9
|
+
Object.defineProperty(exports, "validateSkill", { enumerable: true, get: function () { return SkillValidator_1.validateSkill; } });
|
|
10
|
+
var SkillTemplater_1 = require("./SkillTemplater");
|
|
11
|
+
Object.defineProperty(exports, "renderSkillPrompt", { enumerable: true, get: function () { return SkillTemplater_1.renderSkillPrompt; } });
|
|
12
|
+
Object.defineProperty(exports, "resolveSkillValues", { enumerable: true, get: function () { return SkillTemplater_1.resolveSkillValues; } });
|
|
13
|
+
var SkillInvocation_1 = require("./SkillInvocation");
|
|
14
|
+
Object.defineProperty(exports, "bindSkillArgs", { enumerable: true, get: function () { return SkillInvocation_1.bindSkillArgs; } });
|
|
15
|
+
Object.defineProperty(exports, "parseSkillInvocation", { enumerable: true, get: function () { return SkillInvocation_1.parseSkillInvocation; } });
|
|
16
|
+
Object.defineProperty(exports, "resolveSkillInvocation", { enumerable: true, get: function () { return SkillInvocation_1.resolveSkillInvocation; } });
|
|
17
|
+
Object.defineProperty(exports, "resolveSkillValuesInvocation", { enumerable: true, get: function () { return SkillInvocation_1.resolveSkillValuesInvocation; } });
|
|
18
|
+
Object.defineProperty(exports, "skillUsage", { enumerable: true, get: function () { return SkillInvocation_1.skillUsage; } });
|
|
19
|
+
Object.defineProperty(exports, "tokenizeSkillArgs", { enumerable: true, get: function () { return SkillInvocation_1.tokenizeSkillArgs; } });
|
|
20
|
+
var SkillStore_1 = require("./SkillStore");
|
|
21
|
+
Object.defineProperty(exports, "SkillStore", { enumerable: true, get: function () { return SkillStore_1.SkillStore; } });
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skill/index.ts"],"names":[],"mappings":";;;AAAA,6CAGuB;AAFrB,8GAAA,eAAe,OAAA;AACf,uHAAA,wBAAwB,OAAA;AAG1B,mDAA6D;AAApD,4GAAA,UAAU,OAAA;AAAE,+GAAA,aAAa,OAAA;AAClC,mDAAyE;AAAhE,mHAAA,iBAAiB,OAAA;AAAE,oHAAA,kBAAkB,OAAA;AAE9C,qDAO2B;AANzB,gHAAA,aAAa,OAAA;AACb,uHAAA,oBAAoB,OAAA;AACpB,yHAAA,sBAAsB,OAAA;AACtB,+HAAA,4BAA4B,OAAA;AAC5B,6GAAA,UAAU,OAAA;AACV,oHAAA,iBAAiB,OAAA;AAGnB,2CAA0C;AAAjC,wGAAA,UAAU,OAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { MarifoldSkill } from '../skill/SkillSchema';
|
|
2
|
+
import { ResolvedSkillInvocation } from '../skill/SkillInvocation';
|
|
3
|
+
import { SkillAppDefinition, SkillAppExecution } from './SkillAppSchema';
|
|
4
|
+
export interface ResolvedSkillAppAction extends ResolvedSkillInvocation {
|
|
5
|
+
appName: string;
|
|
6
|
+
actionName: string;
|
|
7
|
+
output: string;
|
|
8
|
+
execution: SkillAppExecution;
|
|
9
|
+
}
|
|
10
|
+
/** Validate renderer state and resolve one server-owned Skill action. Clients
|
|
11
|
+
* send values only; they cannot replace the Skill, prompt, or execution policy. */
|
|
12
|
+
export declare function resolveSkillAppAction(definition: SkillAppDefinition, actionName: string, supplied: Record<string, unknown>, skill: MarifoldSkill): ResolvedSkillAppAction;
|
|
13
|
+
//# sourceMappingURL=SkillAppActionResolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SkillAppActionResolver.d.ts","sourceRoot":"","sources":["../../src/skillapp/SkillAppActionResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EACL,uBAAuB,EAExB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAEL,kBAAkB,EAClB,iBAAiB,EAGlB,MAAM,kBAAkB,CAAC;AAI1B,MAAM,WAAW,sBAAuB,SAAQ,uBAAuB;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,iBAAiB,CAAC;CAC9B;AAED;mFACmF;AACnF,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,kBAAkB,EAC9B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,KAAK,EAAE,aAAa,GACnB,sBAAsB,CA4CxB"}
|