@marifold/core 0.71.1 → 0.73.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/dist/agent/AgentRunner.d.ts +3 -0
- package/dist/agent/AgentRunner.d.ts.map +1 -1
- package/dist/agent/AgentRunner.js +10 -11
- package/dist/agent/AgentRunner.js.map +1 -1
- package/dist/agent/ArtifactPreview.d.ts +6 -0
- package/dist/agent/ArtifactPreview.d.ts.map +1 -0
- package/dist/agent/ArtifactPreview.js +78 -0
- package/dist/agent/ArtifactPreview.js.map +1 -0
- package/dist/agent/RunArtifacts.d.ts +2 -0
- package/dist/agent/RunArtifacts.d.ts.map +1 -1
- package/dist/agent/RunArtifacts.js.map +1 -1
- package/dist/agent/RunWorkspace.d.ts.map +1 -1
- package/dist/agent/RunWorkspace.js +12 -1
- package/dist/agent/RunWorkspace.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -3
- package/dist/index.js.map +1 -1
- package/dist/runs/RunRegistry.d.ts +5 -1
- package/dist/runs/RunRegistry.d.ts.map +1 -1
- package/dist/runs/RunRegistry.js +24 -7
- package/dist/runs/RunRegistry.js.map +1 -1
- package/dist/runtime/MarifoldRuntime.d.ts +2 -0
- package/dist/runtime/MarifoldRuntime.d.ts.map +1 -1
- package/dist/runtime/MarifoldRuntime.js +6 -0
- package/dist/runtime/MarifoldRuntime.js.map +1 -1
- package/dist/runtime/MarifoldTypes.d.ts +2 -0
- package/dist/runtime/MarifoldTypes.d.ts.map +1 -1
- package/dist/runtime/RuntimeEnvironment.d.ts +15 -0
- package/dist/runtime/RuntimeEnvironment.d.ts.map +1 -0
- package/dist/runtime/RuntimeEnvironment.js +58 -0
- package/dist/runtime/RuntimeEnvironment.js.map +1 -0
- package/dist/workspace/DeviceDelegateTool.js +1 -1
- package/dist/workspace/DeviceDelegateTool.js.map +1 -1
- package/dist/workspace/WorkspaceDevicesTool.d.ts +22 -0
- package/dist/workspace/WorkspaceDevicesTool.d.ts.map +1 -0
- package/dist/workspace/WorkspaceDevicesTool.js +20 -0
- package/dist/workspace/WorkspaceDevicesTool.js.map +1 -0
- package/dist/workspace/WorkspaceExecutor.d.ts.map +1 -1
- package/dist/workspace/WorkspaceExecutor.js +5 -0
- package/dist/workspace/WorkspaceExecutor.js.map +1 -1
- package/dist/workspace/WorkspaceManager.d.ts +1 -0
- package/dist/workspace/WorkspaceManager.d.ts.map +1 -1
- package/dist/workspace/WorkspaceManager.js +1 -0
- package/dist/workspace/WorkspaceManager.js.map +1 -1
- package/dist/workspace/WorkspaceRuns.d.ts.map +1 -1
- package/dist/workspace/WorkspaceRuns.js +11 -4
- package/dist/workspace/WorkspaceRuns.js.map +1 -1
- package/dist/workspace/WorkspaceStore.d.ts +2 -0
- package/dist/workspace/WorkspaceStore.d.ts.map +1 -1
- package/dist/workspace/WorkspaceStore.js +18 -0
- package/dist/workspace/WorkspaceStore.js.map +1 -1
- package/package.json +2 -2
- package/dist/app/AppActionResolver.d.ts +0 -15
- package/dist/app/AppActionResolver.d.ts.map +0 -1
- package/dist/app/AppActionResolver.js +0 -98
- package/dist/app/AppActionResolver.js.map +0 -1
- package/dist/app/AppSchema.d.ts +0 -83
- package/dist/app/AppSchema.d.ts.map +0 -1
- package/dist/app/AppSchema.js +0 -17
- package/dist/app/AppSchema.js.map +0 -1
- package/dist/app/AppValidator.d.ts +0 -10
- package/dist/app/AppValidator.d.ts.map +0 -1
- package/dist/app/AppValidator.js +0 -503
- package/dist/app/AppValidator.js.map +0 -1
- package/dist/skill/SkillVars.d.ts +0 -10
- package/dist/skill/SkillVars.d.ts.map +0 -1
- package/dist/skill/SkillVars.js +0 -65
- package/dist/skill/SkillVars.js.map +0 -1
- package/dist/skillapp/SkillAppActionResolver.d.ts +0 -13
- package/dist/skillapp/SkillAppActionResolver.d.ts.map +0 -1
- package/dist/skillapp/SkillAppActionResolver.js +0 -95
- package/dist/skillapp/SkillAppActionResolver.js.map +0 -1
- package/dist/skillapp/SkillAppSchema.d.ts +0 -79
- package/dist/skillapp/SkillAppSchema.d.ts.map +0 -1
- package/dist/skillapp/SkillAppSchema.js +0 -20
- package/dist/skillapp/SkillAppSchema.js.map +0 -1
- package/dist/skillapp/SkillAppStore.d.ts +0 -11
- package/dist/skillapp/SkillAppStore.d.ts.map +0 -1
- package/dist/skillapp/SkillAppStore.js +0 -98
- package/dist/skillapp/SkillAppStore.js.map +0 -1
- package/dist/skillapp/SkillAppValidator.d.ts +0 -10
- package/dist/skillapp/SkillAppValidator.d.ts.map +0 -1
- package/dist/skillapp/SkillAppValidator.js +0 -522
- package/dist/skillapp/SkillAppValidator.js.map +0 -1
package/dist/app/AppValidator.js
DELETED
|
@@ -1,503 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.validateAppToml = validateAppToml;
|
|
4
|
-
exports.validateApp = validateApp;
|
|
5
|
-
const smol_toml_1 = require("smol-toml");
|
|
6
|
-
const AppSchema_1 = require("./AppSchema");
|
|
7
|
-
const KEBAB_CASE = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
8
|
-
const SNAKE_CASE = /^[a-z0-9]+(?:_[a-z0-9]+)*$/;
|
|
9
|
-
const SKILL_NAME = /^[a-z0-9][a-z0-9_-]*$/;
|
|
10
|
-
const PROFILE_NAME = /^[A-Za-z0-9_-]+$/;
|
|
11
|
-
const SEMVER = /^(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)(?:-[0-9A-Za-z.-]+)?$/;
|
|
12
|
-
const TEMPLATE_PLACEHOLDER = /\{\{\s*([a-z0-9_]+)\s*\}\}/g;
|
|
13
|
-
const VARIABLE_TYPES = new Set(['string', 'number', 'boolean', 'enum']);
|
|
14
|
-
const VARIABLE_ROLES = new Set(['input', 'output', 'state']);
|
|
15
|
-
const COMPONENTS = new Set([
|
|
16
|
-
'row', 'column', 'spacer', 'text', 'text_input', 'textarea', 'select', 'preview', 'tabs', 'file_picker', 'button',
|
|
17
|
-
'download_button',
|
|
18
|
-
]);
|
|
19
|
-
const ACTION_KINDS = new Set(['skill']);
|
|
20
|
-
const FILES_PERMISSIONS = new Set(['none', 'read', 'write']);
|
|
21
|
-
const LAYOUT_GAPS = new Set(['none', 'small', 'medium', 'large']);
|
|
22
|
-
const RESPONSIVE_BEHAVIORS = new Set(['stack']);
|
|
23
|
-
const MAX_LAYOUT_DEPTH = 4;
|
|
24
|
-
const MAX_LAYOUT_ITEMS = 100;
|
|
25
|
-
/** Parse and validate an App TOML document (docs/app.md, v0 rules). */
|
|
26
|
-
function validateAppToml(source) {
|
|
27
|
-
let raw;
|
|
28
|
-
try {
|
|
29
|
-
raw = (0, smol_toml_1.parse)(source);
|
|
30
|
-
}
|
|
31
|
-
catch (error) {
|
|
32
|
-
return { ok: false, errors: [`Invalid TOML: ${error instanceof Error ? error.message : String(error)}`] };
|
|
33
|
-
}
|
|
34
|
-
return validateApp(raw);
|
|
35
|
-
}
|
|
36
|
-
function validateApp(raw) {
|
|
37
|
-
const errors = [];
|
|
38
|
-
if (raw.schema !== AppSchema_1.APP_SCHEMA) {
|
|
39
|
-
errors.push(`schema must be "${AppSchema_1.APP_SCHEMA}".`);
|
|
40
|
-
}
|
|
41
|
-
const app = readApp(raw.app, errors);
|
|
42
|
-
const actors = readActors(raw.actors, errors);
|
|
43
|
-
const variables = readVariables(raw.variables, errors);
|
|
44
|
-
const execution = readExecution(raw.execution, errors);
|
|
45
|
-
const permissions = readPermissions(raw.permissions, errors);
|
|
46
|
-
const actions = readActions(raw.actions, actors, variables, permissions, errors);
|
|
47
|
-
const layout = readLayout(raw.layout, variables, actions, permissions, errors, {
|
|
48
|
-
depth: 0,
|
|
49
|
-
insideTabs: false,
|
|
50
|
-
count: { value: 0 },
|
|
51
|
-
path: 'layout',
|
|
52
|
-
});
|
|
53
|
-
if (errors.length > 0)
|
|
54
|
-
return { ok: false, errors };
|
|
55
|
-
return {
|
|
56
|
-
ok: true,
|
|
57
|
-
errors: [],
|
|
58
|
-
definition: { schema: AppSchema_1.APP_SCHEMA, app: app, actors, variables, layout, actions, execution, permissions },
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
function readApp(value, errors) {
|
|
62
|
-
const app = asTable(value);
|
|
63
|
-
if (!app) {
|
|
64
|
-
errors.push('[app] table is required.');
|
|
65
|
-
return undefined;
|
|
66
|
-
}
|
|
67
|
-
const name = asString(app.name);
|
|
68
|
-
const title = asString(app.title);
|
|
69
|
-
if (!name || !KEBAB_CASE.test(name))
|
|
70
|
-
errors.push('app.name is required and must be kebab-case.');
|
|
71
|
-
if (!title)
|
|
72
|
-
errors.push('app.title is required.');
|
|
73
|
-
const version = asString(app.version);
|
|
74
|
-
if (version && !SEMVER.test(version))
|
|
75
|
-
errors.push('app.version must use Semantic Versioning without a "v" prefix.');
|
|
76
|
-
const description = asString(app.description);
|
|
77
|
-
if (!name || !title)
|
|
78
|
-
return undefined;
|
|
79
|
-
return {
|
|
80
|
-
name,
|
|
81
|
-
title,
|
|
82
|
-
...(version ? { version } : {}),
|
|
83
|
-
...(description ? { description } : {}),
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
function readActors(value, errors) {
|
|
87
|
-
const items = asArrayOfTables(value);
|
|
88
|
-
if (!items)
|
|
89
|
-
return [];
|
|
90
|
-
const seen = new Set();
|
|
91
|
-
const actors = [];
|
|
92
|
-
items.forEach((item, index) => {
|
|
93
|
-
const label = `actors[${index}]`;
|
|
94
|
-
const name = asString(item.name);
|
|
95
|
-
if (!name || !SNAKE_CASE.test(name)) {
|
|
96
|
-
errors.push(`${label}.name is required and must be snake_case.`);
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
if (seen.has(name)) {
|
|
100
|
-
errors.push(`Duplicate actor name '${name}'.`);
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
seen.add(name);
|
|
104
|
-
const profile = asString(item.profile);
|
|
105
|
-
if (!profile || !PROFILE_NAME.test(profile)) {
|
|
106
|
-
errors.push(`${label}.profile is required and must be a valid profile name.`);
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
actors.push({
|
|
110
|
-
name,
|
|
111
|
-
profile,
|
|
112
|
-
...(asString(item.label) ? { label: asString(item.label) } : {}),
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
return actors;
|
|
116
|
-
}
|
|
117
|
-
function readVariables(value, errors) {
|
|
118
|
-
const items = asArrayOfTables(value);
|
|
119
|
-
if (!items || items.length === 0) {
|
|
120
|
-
errors.push('At least one [[variables]] entry is required.');
|
|
121
|
-
return [];
|
|
122
|
-
}
|
|
123
|
-
const seen = new Set();
|
|
124
|
-
const variables = [];
|
|
125
|
-
items.forEach((item, index) => {
|
|
126
|
-
const label = `variables[${index}]`;
|
|
127
|
-
const name = asString(item.name);
|
|
128
|
-
if (!name || !SNAKE_CASE.test(name)) {
|
|
129
|
-
errors.push(`${label}.name is required and must be snake_case.`);
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
if (seen.has(name)) {
|
|
133
|
-
errors.push(`Duplicate variable name '${name}'.`);
|
|
134
|
-
return;
|
|
135
|
-
}
|
|
136
|
-
seen.add(name);
|
|
137
|
-
const type = asString(item.type);
|
|
138
|
-
if (!type || !VARIABLE_TYPES.has(type)) {
|
|
139
|
-
errors.push(`${label}.type must be string, number, boolean, or enum.`);
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
const role = asString(item.role);
|
|
143
|
-
if (!role || !VARIABLE_ROLES.has(role)) {
|
|
144
|
-
errors.push(`${label}.role must be input, output, or state.`);
|
|
145
|
-
return;
|
|
146
|
-
}
|
|
147
|
-
const options = item.options;
|
|
148
|
-
if (type === 'enum') {
|
|
149
|
-
if (!Array.isArray(options) || options.length === 0 || !options.every(o => typeof o === 'string')) {
|
|
150
|
-
errors.push(`${label}.options must be a non-empty string array for enum variables.`);
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
else if (options !== undefined) {
|
|
155
|
-
errors.push(`${label}.options is only allowed for enum variables.`);
|
|
156
|
-
return;
|
|
157
|
-
}
|
|
158
|
-
const variable = {
|
|
159
|
-
name,
|
|
160
|
-
type,
|
|
161
|
-
role,
|
|
162
|
-
...(asString(item.label) ? { label: asString(item.label) } : {}),
|
|
163
|
-
...(typeof item.required === 'boolean' ? { required: item.required } : {}),
|
|
164
|
-
...(item.default !== undefined ? { default: item.default } : {}),
|
|
165
|
-
...(type === 'enum' ? { options: options } : {}),
|
|
166
|
-
};
|
|
167
|
-
if (item.required !== undefined && typeof item.required !== 'boolean') {
|
|
168
|
-
errors.push(`${label}.required must be a boolean.`);
|
|
169
|
-
return;
|
|
170
|
-
}
|
|
171
|
-
if (variable.default !== undefined && !defaultMatchesType(variable)) {
|
|
172
|
-
errors.push(`${label}.default does not match type '${type}'.`);
|
|
173
|
-
return;
|
|
174
|
-
}
|
|
175
|
-
variables.push(variable);
|
|
176
|
-
});
|
|
177
|
-
return variables;
|
|
178
|
-
}
|
|
179
|
-
function defaultMatchesType(variable) {
|
|
180
|
-
const value = variable.default;
|
|
181
|
-
switch (variable.type) {
|
|
182
|
-
case 'string': return typeof value === 'string';
|
|
183
|
-
case 'number': return typeof value === 'number';
|
|
184
|
-
case 'boolean': return typeof value === 'boolean';
|
|
185
|
-
case 'enum': return typeof value === 'string' && (variable.options ?? []).includes(value);
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
function readExecution(value, errors) {
|
|
189
|
-
const table = asTable(value);
|
|
190
|
-
if (!table)
|
|
191
|
-
return { ...AppSchema_1.DEFAULT_APP_EXECUTION };
|
|
192
|
-
const readBool = (key, fallback) => {
|
|
193
|
-
const raw = table[key];
|
|
194
|
-
if (raw === undefined)
|
|
195
|
-
return fallback;
|
|
196
|
-
if (typeof raw !== 'boolean') {
|
|
197
|
-
errors.push(`execution.${key} must be a boolean.`);
|
|
198
|
-
return fallback;
|
|
199
|
-
}
|
|
200
|
-
return raw;
|
|
201
|
-
};
|
|
202
|
-
if (table.history !== undefined) {
|
|
203
|
-
errors.push('execution.history is not supported; App actions never use Agent transcripts.');
|
|
204
|
-
}
|
|
205
|
-
return {
|
|
206
|
-
think: readBool('think', AppSchema_1.DEFAULT_APP_EXECUTION.think),
|
|
207
|
-
memory: readBool('memory', AppSchema_1.DEFAULT_APP_EXECUTION.memory),
|
|
208
|
-
profileContext: readBool('profile_context', AppSchema_1.DEFAULT_APP_EXECUTION.profileContext),
|
|
209
|
-
};
|
|
210
|
-
}
|
|
211
|
-
function readPermissions(value, errors) {
|
|
212
|
-
const table = asTable(value);
|
|
213
|
-
if (!table)
|
|
214
|
-
return { ...AppSchema_1.DEFAULT_APP_PERMISSIONS };
|
|
215
|
-
const files = table.files === undefined ? AppSchema_1.DEFAULT_APP_PERMISSIONS.files : asString(table.files);
|
|
216
|
-
if (!FILES_PERMISSIONS.has(files)) {
|
|
217
|
-
errors.push('permissions.files must be "none", "read", or "write".');
|
|
218
|
-
}
|
|
219
|
-
const readBool = (key, fallback) => {
|
|
220
|
-
const raw = table[key];
|
|
221
|
-
if (raw === undefined)
|
|
222
|
-
return fallback;
|
|
223
|
-
if (typeof raw !== 'boolean') {
|
|
224
|
-
errors.push(`permissions.${key} must be a boolean.`);
|
|
225
|
-
return fallback;
|
|
226
|
-
}
|
|
227
|
-
return raw;
|
|
228
|
-
};
|
|
229
|
-
return {
|
|
230
|
-
providerCalls: readBool('provider_calls', AppSchema_1.DEFAULT_APP_PERMISSIONS.providerCalls),
|
|
231
|
-
files: FILES_PERMISSIONS.has(files) ? files : AppSchema_1.DEFAULT_APP_PERMISSIONS.files,
|
|
232
|
-
shell: readBool('shell', AppSchema_1.DEFAULT_APP_PERMISSIONS.shell),
|
|
233
|
-
network: readBool('network', AppSchema_1.DEFAULT_APP_PERMISSIONS.network),
|
|
234
|
-
export: readBool('export', AppSchema_1.DEFAULT_APP_PERMISSIONS.export),
|
|
235
|
-
};
|
|
236
|
-
}
|
|
237
|
-
function readActions(value, actors, variables, permissions, errors) {
|
|
238
|
-
const items = asArrayOfTables(value);
|
|
239
|
-
if (!items)
|
|
240
|
-
return [];
|
|
241
|
-
const actorNames = new Set(actors.map(actor => actor.name));
|
|
242
|
-
const variableNames = new Set(variables.map(v => v.name));
|
|
243
|
-
const writableNames = new Set(variables.filter(v => v.role !== 'input').map(v => v.name));
|
|
244
|
-
const seen = new Set();
|
|
245
|
-
const actions = [];
|
|
246
|
-
items.forEach((item, index) => {
|
|
247
|
-
const label = `actions[${index}]`;
|
|
248
|
-
const name = asString(item.name);
|
|
249
|
-
if (!name || !SNAKE_CASE.test(name)) {
|
|
250
|
-
errors.push(`${label}.name is required and must be snake_case.`);
|
|
251
|
-
return;
|
|
252
|
-
}
|
|
253
|
-
if (seen.has(name)) {
|
|
254
|
-
errors.push(`Duplicate action name '${name}'.`);
|
|
255
|
-
return;
|
|
256
|
-
}
|
|
257
|
-
seen.add(name);
|
|
258
|
-
const kind = asString(item.kind);
|
|
259
|
-
if (!kind || !ACTION_KINDS.has(kind)) {
|
|
260
|
-
errors.push(`${label}.kind must be skill.`);
|
|
261
|
-
return;
|
|
262
|
-
}
|
|
263
|
-
const output = asString(item.output);
|
|
264
|
-
if (!output || !variableNames.has(output)) {
|
|
265
|
-
errors.push(`${label}.output must reference a declared variable.`);
|
|
266
|
-
return;
|
|
267
|
-
}
|
|
268
|
-
if (!writableNames.has(output)) {
|
|
269
|
-
errors.push(`${label}.output must reference an output or state variable, not an input.`);
|
|
270
|
-
return;
|
|
271
|
-
}
|
|
272
|
-
if (!permissions.providerCalls) {
|
|
273
|
-
errors.push(`${label} requires permissions.provider_calls = true.`);
|
|
274
|
-
return;
|
|
275
|
-
}
|
|
276
|
-
const actor = asString(item.actor);
|
|
277
|
-
if (!actor || !actorNames.has(actor)) {
|
|
278
|
-
errors.push(`${label}.actor must reference a declared actor.`);
|
|
279
|
-
return;
|
|
280
|
-
}
|
|
281
|
-
const skill = asString(item.skill);
|
|
282
|
-
if (!skill || !SKILL_NAME.test(skill)) {
|
|
283
|
-
errors.push(`${label}.skill is required and must be a valid skill name.`);
|
|
284
|
-
return;
|
|
285
|
-
}
|
|
286
|
-
const argumentsTable = asTable(item.arguments);
|
|
287
|
-
if (!argumentsTable) {
|
|
288
|
-
errors.push(`${label}.arguments is required for skill actions.`);
|
|
289
|
-
return;
|
|
290
|
-
}
|
|
291
|
-
const actionArguments = {};
|
|
292
|
-
for (const [key, argumentValue] of Object.entries(argumentsTable)) {
|
|
293
|
-
if (!SNAKE_CASE.test(key)) {
|
|
294
|
-
errors.push(`${label}.arguments key '${key}' must be snake_case.`);
|
|
295
|
-
continue;
|
|
296
|
-
}
|
|
297
|
-
if (!isVariableValue(argumentValue)) {
|
|
298
|
-
errors.push(`${label}.arguments.${key} must be a string, number, or boolean.`);
|
|
299
|
-
continue;
|
|
300
|
-
}
|
|
301
|
-
if (typeof argumentValue === 'string') {
|
|
302
|
-
checkTemplate(argumentValue, variableNames, `${label}.arguments.${key}`, errors);
|
|
303
|
-
}
|
|
304
|
-
actionArguments[key] = argumentValue;
|
|
305
|
-
}
|
|
306
|
-
actions.push({ name, kind, actor, skill, arguments: actionArguments, output });
|
|
307
|
-
});
|
|
308
|
-
return actions;
|
|
309
|
-
}
|
|
310
|
-
function readLayout(value, variables, actions, permissions, errors, context) {
|
|
311
|
-
if (context.depth > MAX_LAYOUT_DEPTH) {
|
|
312
|
-
errors.push(`${context.path} exceeds the maximum layout depth of ${MAX_LAYOUT_DEPTH}.`);
|
|
313
|
-
return [];
|
|
314
|
-
}
|
|
315
|
-
const items = asArrayOfTables(value);
|
|
316
|
-
if (!items || items.length === 0) {
|
|
317
|
-
errors.push(`${context.path} must contain at least one layout item.`);
|
|
318
|
-
return [];
|
|
319
|
-
}
|
|
320
|
-
const variableByName = new Map(variables.map(v => [v.name, v]));
|
|
321
|
-
const actionNames = new Set(actions.map(a => a.name));
|
|
322
|
-
const layout = [];
|
|
323
|
-
items.forEach((item, index) => {
|
|
324
|
-
const label = `${context.path}[${index}]`;
|
|
325
|
-
context.count.value += 1;
|
|
326
|
-
if (context.count.value > MAX_LAYOUT_ITEMS) {
|
|
327
|
-
if (context.count.value === MAX_LAYOUT_ITEMS + 1) {
|
|
328
|
-
errors.push(`Layout exceeds the maximum of ${MAX_LAYOUT_ITEMS} items.`);
|
|
329
|
-
}
|
|
330
|
-
return;
|
|
331
|
-
}
|
|
332
|
-
const component = asString(item.component);
|
|
333
|
-
if (!component || !COMPONENTS.has(component)) {
|
|
334
|
-
errors.push(`${label}.component must be one of: ${[...COMPONENTS].join(', ')}.`);
|
|
335
|
-
return;
|
|
336
|
-
}
|
|
337
|
-
const gap = asString(item.gap);
|
|
338
|
-
if (gap && !LAYOUT_GAPS.has(gap))
|
|
339
|
-
errors.push(`${label}.gap must be none, small, medium, or large.`);
|
|
340
|
-
const responsive = asString(item.responsive);
|
|
341
|
-
if (responsive && !RESPONSIVE_BEHAVIORS.has(responsive)) {
|
|
342
|
-
errors.push(`${label}.responsive must be stack.`);
|
|
343
|
-
}
|
|
344
|
-
if (item.grow !== undefined && typeof item.grow !== 'boolean') {
|
|
345
|
-
errors.push(`${label}.grow must be a boolean.`);
|
|
346
|
-
}
|
|
347
|
-
if (item.show_label !== undefined && typeof item.show_label !== 'boolean') {
|
|
348
|
-
errors.push(`${label}.show_label must be a boolean.`);
|
|
349
|
-
}
|
|
350
|
-
const labelControl = component === 'text_input' || component === 'textarea' || component === 'select';
|
|
351
|
-
if (item.show_label !== undefined && !labelControl) {
|
|
352
|
-
errors.push(`${label}.show_label is only allowed on text_input, textarea, or select.`);
|
|
353
|
-
}
|
|
354
|
-
const entry = {
|
|
355
|
-
component,
|
|
356
|
-
...(asString(item.bind) ? { bind: asString(item.bind) } : {}),
|
|
357
|
-
...(asString(item.label) ? { label: asString(item.label) } : {}),
|
|
358
|
-
...(asString(item.action) ? { action: asString(item.action) } : {}),
|
|
359
|
-
...(asString(item.content) ? { content: asString(item.content) } : {}),
|
|
360
|
-
...(asString(item.format) ? { format: asString(item.format) } : {}),
|
|
361
|
-
...(typeof item.show_label === 'boolean' ? { showLabel: item.show_label } : {}),
|
|
362
|
-
...(gap && LAYOUT_GAPS.has(gap) ? { gap } : {}),
|
|
363
|
-
...(responsive && RESPONSIVE_BEHAVIORS.has(responsive) ? { responsive } : {}),
|
|
364
|
-
...(typeof item.grow === 'boolean' ? { grow: item.grow } : {}),
|
|
365
|
-
};
|
|
366
|
-
switch (component) {
|
|
367
|
-
case 'row':
|
|
368
|
-
case 'column': {
|
|
369
|
-
const children = asArrayOfTables(item.children);
|
|
370
|
-
if (!children || children.length === 0) {
|
|
371
|
-
errors.push(`${label} (${component}) requires a non-empty children array.`);
|
|
372
|
-
break;
|
|
373
|
-
}
|
|
374
|
-
entry.children = readLayout(children, variables, actions, permissions, errors, {
|
|
375
|
-
...context,
|
|
376
|
-
depth: context.depth + 1,
|
|
377
|
-
path: `${label}.children`,
|
|
378
|
-
});
|
|
379
|
-
break;
|
|
380
|
-
}
|
|
381
|
-
case 'spacer':
|
|
382
|
-
break;
|
|
383
|
-
case 'text':
|
|
384
|
-
if (!entry.content)
|
|
385
|
-
errors.push(`${label} (text) requires content.`);
|
|
386
|
-
break;
|
|
387
|
-
case 'button':
|
|
388
|
-
if (!entry.action || !actionNames.has(entry.action)) {
|
|
389
|
-
errors.push(`${label} (button) requires action referencing a declared action.`);
|
|
390
|
-
}
|
|
391
|
-
break;
|
|
392
|
-
case 'tabs': {
|
|
393
|
-
if (context.insideTabs) {
|
|
394
|
-
errors.push(`${label}: tabs cannot be nested.`);
|
|
395
|
-
break;
|
|
396
|
-
}
|
|
397
|
-
if (!Array.isArray(item.tabs) || item.tabs.length === 0) {
|
|
398
|
-
errors.push(`${label} (tabs) requires a non-empty tabs array.`);
|
|
399
|
-
break;
|
|
400
|
-
}
|
|
401
|
-
entry.tabs = item.tabs.map((tab, tabIndex) => readLayout(tab, variables, actions, permissions, errors, {
|
|
402
|
-
...context,
|
|
403
|
-
depth: context.depth + 1,
|
|
404
|
-
insideTabs: true,
|
|
405
|
-
path: `${label}.tabs[${tabIndex}]`,
|
|
406
|
-
}));
|
|
407
|
-
break;
|
|
408
|
-
}
|
|
409
|
-
case 'file_picker': {
|
|
410
|
-
if (permissions.files === 'none')
|
|
411
|
-
errors.push(`${label} (file_picker) requires permissions.files of read or write.`);
|
|
412
|
-
const variable = requireBind(entry, variableByName, label, errors);
|
|
413
|
-
requireWritableVariable(variable, label, errors);
|
|
414
|
-
break;
|
|
415
|
-
}
|
|
416
|
-
case 'download_button':
|
|
417
|
-
if (!permissions.export)
|
|
418
|
-
errors.push(`${label} (download_button) requires permissions.export = true.`);
|
|
419
|
-
requireBind(entry, variableByName, label, errors);
|
|
420
|
-
break;
|
|
421
|
-
case 'select': {
|
|
422
|
-
const variable = requireBind(entry, variableByName, label, errors);
|
|
423
|
-
if (variable && variable.type !== 'enum')
|
|
424
|
-
errors.push(`${label} (select) must bind an enum variable.`);
|
|
425
|
-
requireWritableVariable(variable, label, errors);
|
|
426
|
-
break;
|
|
427
|
-
}
|
|
428
|
-
case 'textarea': {
|
|
429
|
-
const variable = requireBind(entry, variableByName, label, errors);
|
|
430
|
-
if (variable && variable.type !== 'string')
|
|
431
|
-
errors.push(`${label} (textarea) must bind a string variable.`);
|
|
432
|
-
requireWritableVariable(variable, label, errors);
|
|
433
|
-
break;
|
|
434
|
-
}
|
|
435
|
-
case 'text_input': {
|
|
436
|
-
const variable = requireBind(entry, variableByName, label, errors);
|
|
437
|
-
if (variable && variable.type !== 'string' && variable.type !== 'number') {
|
|
438
|
-
errors.push(`${label} (text_input) must bind a string or number variable.`);
|
|
439
|
-
}
|
|
440
|
-
requireWritableVariable(variable, label, errors);
|
|
441
|
-
break;
|
|
442
|
-
}
|
|
443
|
-
case 'preview':
|
|
444
|
-
if (entry.format && entry.format !== 'text' && entry.format !== 'markdown') {
|
|
445
|
-
errors.push(`${label} (preview) format must be text or markdown.`);
|
|
446
|
-
}
|
|
447
|
-
requireBind(entry, variableByName, label, errors);
|
|
448
|
-
break;
|
|
449
|
-
}
|
|
450
|
-
layout.push(entry);
|
|
451
|
-
});
|
|
452
|
-
return layout;
|
|
453
|
-
}
|
|
454
|
-
function requireWritableVariable(variable, label, errors) {
|
|
455
|
-
if (variable?.role === 'output') {
|
|
456
|
-
errors.push(`${label} cannot edit output variable '${variable.name}'. Use preview instead.`);
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
function requireBind(entry, variables, label, errors) {
|
|
460
|
-
if (!entry.bind) {
|
|
461
|
-
errors.push(`${label} (${entry.component}) requires bind.`);
|
|
462
|
-
return undefined;
|
|
463
|
-
}
|
|
464
|
-
const variable = variables.get(entry.bind);
|
|
465
|
-
if (!variable) {
|
|
466
|
-
errors.push(`${label}.bind references unknown variable '${entry.bind}'.`);
|
|
467
|
-
return undefined;
|
|
468
|
-
}
|
|
469
|
-
return variable;
|
|
470
|
-
}
|
|
471
|
-
function checkTemplate(template, variableNames, label, errors) {
|
|
472
|
-
for (const match of template.matchAll(TEMPLATE_PLACEHOLDER)) {
|
|
473
|
-
if (!variableNames.has(match[1])) {
|
|
474
|
-
errors.push(`${label} references unknown variable '{{${match[1]}}}'.`);
|
|
475
|
-
}
|
|
476
|
-
}
|
|
477
|
-
}
|
|
478
|
-
function isVariableValue(value) {
|
|
479
|
-
return typeof value === 'string'
|
|
480
|
-
|| typeof value === 'boolean'
|
|
481
|
-
|| (typeof value === 'number' && Number.isFinite(value));
|
|
482
|
-
}
|
|
483
|
-
function asTable(value) {
|
|
484
|
-
if (typeof value === 'object' && value !== null && !Array.isArray(value))
|
|
485
|
-
return value;
|
|
486
|
-
return undefined;
|
|
487
|
-
}
|
|
488
|
-
function asArrayOfTables(value) {
|
|
489
|
-
if (!Array.isArray(value))
|
|
490
|
-
return undefined;
|
|
491
|
-
const tables = [];
|
|
492
|
-
for (const item of value) {
|
|
493
|
-
const table = asTable(item);
|
|
494
|
-
if (!table)
|
|
495
|
-
return undefined;
|
|
496
|
-
tables.push(table);
|
|
497
|
-
}
|
|
498
|
-
return tables;
|
|
499
|
-
}
|
|
500
|
-
function asString(value) {
|
|
501
|
-
return typeof value === 'string' && value.trim() ? value : undefined;
|
|
502
|
-
}
|
|
503
|
-
//# sourceMappingURL=AppValidator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AppValidator.js","sourceRoot":"","sources":["../../src/app/AppValidator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/dist/skill/SkillVars.js
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|