@mistralys/persona-builder 2.4.0 → 2.5.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/README.md +1 -0
- package/dist/cli.cjs +34 -3
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +34 -3
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +35 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +30 -2
- package/dist/index.d.ts +30 -2
- package/dist/index.js +35 -4
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -179,6 +179,26 @@ declare function serializeTools(tools: string[]): string;
|
|
|
179
179
|
* serializeToolsList([]) // => ""
|
|
180
180
|
*/
|
|
181
181
|
declare function serializeToolsList(tools: string[]): string;
|
|
182
|
+
/**
|
|
183
|
+
* Serialize a tools array as a YAML block sequence.
|
|
184
|
+
*
|
|
185
|
+
* Output format (non-empty):
|
|
186
|
+
* `\n - tool1\n - tool2`
|
|
187
|
+
*
|
|
188
|
+
* Output format (empty):
|
|
189
|
+
* ` []`
|
|
190
|
+
*
|
|
191
|
+
* Designed for use in frontmatter templates as `tools:{{tools_block}}`
|
|
192
|
+
* (no space between the colon and the variable).
|
|
193
|
+
*
|
|
194
|
+
* @param tools - Array of tool name strings
|
|
195
|
+
* @returns YAML block sequence string (includes leading newline for non-empty arrays)
|
|
196
|
+
*
|
|
197
|
+
* @example
|
|
198
|
+
* serializeToolsBlock(['Bash', 'Read']) // => "\n - Bash\n - Read"
|
|
199
|
+
* serializeToolsBlock([]) // => " []"
|
|
200
|
+
*/
|
|
201
|
+
declare function serializeToolsBlock(tools: string[]): string;
|
|
182
202
|
|
|
183
203
|
/**
|
|
184
204
|
* src/loaders/partials-loader.ts
|
|
@@ -256,6 +276,14 @@ interface PersonaMetadata {
|
|
|
256
276
|
version?: string;
|
|
257
277
|
/** Ordered list of tool identifiers */
|
|
258
278
|
tools?: string[];
|
|
279
|
+
/**
|
|
280
|
+
* Optional list of persona slugs this persona delegates to as sub-agents.
|
|
281
|
+
*
|
|
282
|
+
* Each entry is a kebab-case slug referencing another persona in any
|
|
283
|
+
* configured suite. Validated during build against the cross-suite agent
|
|
284
|
+
* map — an unknown slug produces an error-severity `ValidationResult`.
|
|
285
|
+
*/
|
|
286
|
+
subagents?: string[];
|
|
259
287
|
/** Free-form context variables available during template rendering */
|
|
260
288
|
[key: string]: unknown;
|
|
261
289
|
}
|
|
@@ -740,7 +768,7 @@ declare const DEFAULT_FRONTMATTER_VSCODE = "---\nname: '{{name}} v{{version}}'\n
|
|
|
740
768
|
* Minimal fields that work for standalone personas. Projects using numbered
|
|
741
769
|
* workflows should inject a richer template via a plugin.
|
|
742
770
|
*/
|
|
743
|
-
declare const DEFAULT_FRONTMATTER_CLAUDE_CODE = "---\nname: {{cc_file_name_stem}}\
|
|
771
|
+
declare const DEFAULT_FRONTMATTER_CLAUDE_CODE = "---\nname: {{cc_file_name_stem}}\ndescription: {{description}}\nmodel: {{cc_model}}\nmemory: {{cc_memory}}\ntools:{{cc_tools_block}}\n---";
|
|
744
772
|
/**
|
|
745
773
|
* Default Deep Agents frontmatter template.
|
|
746
774
|
*
|
|
@@ -1308,4 +1336,4 @@ declare const defaultRegistry: TargetRegistry;
|
|
|
1308
1336
|
|
|
1309
1337
|
declare const VERSION: string;
|
|
1310
1338
|
|
|
1311
|
-
export { type BuildConfig, type BuildResult, type BuildSummary, DEFAULT_FRONTMATTER_CLAUDE_CODE, DEFAULT_FRONTMATTER_DEEP_AGENTS, DEFAULT_FRONTMATTER_VSCODE, type PersonaBuildPlugin, type PersonaMetadata, type SuiteConfig, TARGET_CLAUDE_CODE, TARGET_DEEP_AGENTS, TARGET_VSCODE, type TargetDefinition, TargetRegistry, type TargetType, VERSION, type ValidationResult, build, buildPersona, buildSuite, collapseBlankLines, defaultRegistry, discoverPersonaYamls, ensureBlankLineBeforeHeadings, escapeRegExp, loadContent, loadMetadata, loadPartials, normalizeNewlines, renderFrontmatter, resolveConditionals, resolveFrontmatterTemplate, resolvePartials, resolveVariables, runBuildContext, runPartials, runPersonaPartials, runPostRender, runSuiteInit, runValidate, serializeTools, serializeToolsList, validateFileName, validateStrictMarkers };
|
|
1339
|
+
export { type BuildConfig, type BuildResult, type BuildSummary, DEFAULT_FRONTMATTER_CLAUDE_CODE, DEFAULT_FRONTMATTER_DEEP_AGENTS, DEFAULT_FRONTMATTER_VSCODE, type PersonaBuildPlugin, type PersonaMetadata, type SuiteConfig, TARGET_CLAUDE_CODE, TARGET_DEEP_AGENTS, TARGET_VSCODE, type TargetDefinition, TargetRegistry, type TargetType, VERSION, type ValidationResult, build, buildPersona, buildSuite, collapseBlankLines, defaultRegistry, discoverPersonaYamls, ensureBlankLineBeforeHeadings, escapeRegExp, loadContent, loadMetadata, loadPartials, normalizeNewlines, renderFrontmatter, resolveConditionals, resolveFrontmatterTemplate, resolvePartials, resolveVariables, runBuildContext, runPartials, runPersonaPartials, runPostRender, runSuiteInit, runValidate, serializeTools, serializeToolsBlock, serializeToolsList, validateFileName, validateStrictMarkers };
|
package/dist/index.d.ts
CHANGED
|
@@ -179,6 +179,26 @@ declare function serializeTools(tools: string[]): string;
|
|
|
179
179
|
* serializeToolsList([]) // => ""
|
|
180
180
|
*/
|
|
181
181
|
declare function serializeToolsList(tools: string[]): string;
|
|
182
|
+
/**
|
|
183
|
+
* Serialize a tools array as a YAML block sequence.
|
|
184
|
+
*
|
|
185
|
+
* Output format (non-empty):
|
|
186
|
+
* `\n - tool1\n - tool2`
|
|
187
|
+
*
|
|
188
|
+
* Output format (empty):
|
|
189
|
+
* ` []`
|
|
190
|
+
*
|
|
191
|
+
* Designed for use in frontmatter templates as `tools:{{tools_block}}`
|
|
192
|
+
* (no space between the colon and the variable).
|
|
193
|
+
*
|
|
194
|
+
* @param tools - Array of tool name strings
|
|
195
|
+
* @returns YAML block sequence string (includes leading newline for non-empty arrays)
|
|
196
|
+
*
|
|
197
|
+
* @example
|
|
198
|
+
* serializeToolsBlock(['Bash', 'Read']) // => "\n - Bash\n - Read"
|
|
199
|
+
* serializeToolsBlock([]) // => " []"
|
|
200
|
+
*/
|
|
201
|
+
declare function serializeToolsBlock(tools: string[]): string;
|
|
182
202
|
|
|
183
203
|
/**
|
|
184
204
|
* src/loaders/partials-loader.ts
|
|
@@ -256,6 +276,14 @@ interface PersonaMetadata {
|
|
|
256
276
|
version?: string;
|
|
257
277
|
/** Ordered list of tool identifiers */
|
|
258
278
|
tools?: string[];
|
|
279
|
+
/**
|
|
280
|
+
* Optional list of persona slugs this persona delegates to as sub-agents.
|
|
281
|
+
*
|
|
282
|
+
* Each entry is a kebab-case slug referencing another persona in any
|
|
283
|
+
* configured suite. Validated during build against the cross-suite agent
|
|
284
|
+
* map — an unknown slug produces an error-severity `ValidationResult`.
|
|
285
|
+
*/
|
|
286
|
+
subagents?: string[];
|
|
259
287
|
/** Free-form context variables available during template rendering */
|
|
260
288
|
[key: string]: unknown;
|
|
261
289
|
}
|
|
@@ -740,7 +768,7 @@ declare const DEFAULT_FRONTMATTER_VSCODE = "---\nname: '{{name}} v{{version}}'\n
|
|
|
740
768
|
* Minimal fields that work for standalone personas. Projects using numbered
|
|
741
769
|
* workflows should inject a richer template via a plugin.
|
|
742
770
|
*/
|
|
743
|
-
declare const DEFAULT_FRONTMATTER_CLAUDE_CODE = "---\nname: {{cc_file_name_stem}}\
|
|
771
|
+
declare const DEFAULT_FRONTMATTER_CLAUDE_CODE = "---\nname: {{cc_file_name_stem}}\ndescription: {{description}}\nmodel: {{cc_model}}\nmemory: {{cc_memory}}\ntools:{{cc_tools_block}}\n---";
|
|
744
772
|
/**
|
|
745
773
|
* Default Deep Agents frontmatter template.
|
|
746
774
|
*
|
|
@@ -1308,4 +1336,4 @@ declare const defaultRegistry: TargetRegistry;
|
|
|
1308
1336
|
|
|
1309
1337
|
declare const VERSION: string;
|
|
1310
1338
|
|
|
1311
|
-
export { type BuildConfig, type BuildResult, type BuildSummary, DEFAULT_FRONTMATTER_CLAUDE_CODE, DEFAULT_FRONTMATTER_DEEP_AGENTS, DEFAULT_FRONTMATTER_VSCODE, type PersonaBuildPlugin, type PersonaMetadata, type SuiteConfig, TARGET_CLAUDE_CODE, TARGET_DEEP_AGENTS, TARGET_VSCODE, type TargetDefinition, TargetRegistry, type TargetType, VERSION, type ValidationResult, build, buildPersona, buildSuite, collapseBlankLines, defaultRegistry, discoverPersonaYamls, ensureBlankLineBeforeHeadings, escapeRegExp, loadContent, loadMetadata, loadPartials, normalizeNewlines, renderFrontmatter, resolveConditionals, resolveFrontmatterTemplate, resolvePartials, resolveVariables, runBuildContext, runPartials, runPersonaPartials, runPostRender, runSuiteInit, runValidate, serializeTools, serializeToolsList, validateFileName, validateStrictMarkers };
|
|
1339
|
+
export { type BuildConfig, type BuildResult, type BuildSummary, DEFAULT_FRONTMATTER_CLAUDE_CODE, DEFAULT_FRONTMATTER_DEEP_AGENTS, DEFAULT_FRONTMATTER_VSCODE, type PersonaBuildPlugin, type PersonaMetadata, type SuiteConfig, TARGET_CLAUDE_CODE, TARGET_DEEP_AGENTS, TARGET_VSCODE, type TargetDefinition, TargetRegistry, type TargetType, VERSION, type ValidationResult, build, buildPersona, buildSuite, collapseBlankLines, defaultRegistry, discoverPersonaYamls, ensureBlankLineBeforeHeadings, escapeRegExp, loadContent, loadMetadata, loadPartials, normalizeNewlines, renderFrontmatter, resolveConditionals, resolveFrontmatterTemplate, resolvePartials, resolveVariables, runBuildContext, runPartials, runPersonaPartials, runPostRender, runSuiteInit, runValidate, serializeTools, serializeToolsBlock, serializeToolsList, validateFileName, validateStrictMarkers };
|
package/dist/index.js
CHANGED
|
@@ -95,6 +95,10 @@ function serializeTools(tools) {
|
|
|
95
95
|
function serializeToolsList(tools) {
|
|
96
96
|
return tools.map((t) => `'${t}'`).join(", ");
|
|
97
97
|
}
|
|
98
|
+
function serializeToolsBlock(tools) {
|
|
99
|
+
if (tools.length === 0) return " []";
|
|
100
|
+
return "\n" + tools.map((t) => ` - ${t}`).join("\n");
|
|
101
|
+
}
|
|
98
102
|
async function loadPartials(dir) {
|
|
99
103
|
const entries = await readdir(dir, { withFileTypes: true });
|
|
100
104
|
const mdFiles = entries.filter(
|
|
@@ -203,10 +207,10 @@ tools: [{{tools_list}}]
|
|
|
203
207
|
---`;
|
|
204
208
|
var DEFAULT_FRONTMATTER_CLAUDE_CODE = `---
|
|
205
209
|
name: {{cc_file_name_stem}}
|
|
206
|
-
|
|
210
|
+
description: {{description}}
|
|
207
211
|
model: {{cc_model}}
|
|
208
212
|
memory: {{cc_memory}}
|
|
209
|
-
|
|
213
|
+
tools:{{cc_tools_block}}
|
|
210
214
|
---`;
|
|
211
215
|
var DEFAULT_FRONTMATTER_DEEP_AGENTS = `---
|
|
212
216
|
name: {{name}}
|
|
@@ -435,6 +439,12 @@ function buildContext(options) {
|
|
|
435
439
|
if (!("cc_tools_json" in merged)) {
|
|
436
440
|
merged["cc_tools_json"] = serializeTools(ccTools);
|
|
437
441
|
}
|
|
442
|
+
if (!("tools_block" in merged)) {
|
|
443
|
+
merged["tools_block"] = serializeToolsBlock(tools);
|
|
444
|
+
}
|
|
445
|
+
if (!("cc_tools_block" in merged)) {
|
|
446
|
+
merged["cc_tools_block"] = serializeToolsBlock(ccTools);
|
|
447
|
+
}
|
|
438
448
|
if (!("cc_file_name_stem" in merged) && typeof merged["cc_file_name"] === "string") {
|
|
439
449
|
const ccFileName = merged["cc_file_name"];
|
|
440
450
|
merged["cc_file_name_stem"] = ccFileName.replace(/\.md$/, "");
|
|
@@ -451,6 +461,9 @@ function buildContext(options) {
|
|
|
451
461
|
if (!("da_tools_json" in merged)) {
|
|
452
462
|
merged["da_tools_json"] = serializeTools(daTools);
|
|
453
463
|
}
|
|
464
|
+
if (!("da_tools_block" in merged)) {
|
|
465
|
+
merged["da_tools_block"] = serializeToolsBlock(daTools);
|
|
466
|
+
}
|
|
454
467
|
}
|
|
455
468
|
for (const [key, value] of Object.entries(agentMap)) {
|
|
456
469
|
if (!(key in merged)) {
|
|
@@ -469,6 +482,21 @@ function buildContext(options) {
|
|
|
469
482
|
}
|
|
470
483
|
return merged;
|
|
471
484
|
}
|
|
485
|
+
function validateSubagentRefs(persona, agentMap) {
|
|
486
|
+
const subagents = persona.subagents;
|
|
487
|
+
if (!Array.isArray(subagents) || subagents.length === 0) return [];
|
|
488
|
+
const results = [];
|
|
489
|
+
for (const slug of subagents) {
|
|
490
|
+
const key = `agent_slug_${slug.replace(/-/g, "_")}`;
|
|
491
|
+
if (!(key in agentMap)) {
|
|
492
|
+
results.push({
|
|
493
|
+
severity: "error",
|
|
494
|
+
message: `Persona '${persona.name}' declares subagent '${slug}' but no persona with that slug exists in any configured suite.`
|
|
495
|
+
});
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
return results;
|
|
499
|
+
}
|
|
472
500
|
async function buildPersona(personaYamlPath, suiteName, suiteConfig, sharedMeta, partialsMap, config, plugins, target, agentMap = {}, registry = defaultRegistry) {
|
|
473
501
|
const personaMeta = await loadPersonaYaml(personaYamlPath);
|
|
474
502
|
let context = buildContext({
|
|
@@ -507,7 +535,10 @@ async function buildPersona(personaYamlPath, suiteName, suiteConfig, sharedMeta,
|
|
|
507
535
|
${body}
|
|
508
536
|
`);
|
|
509
537
|
output = runPostRender(plugins, output, personaMetaTyped, target);
|
|
510
|
-
const validationResults =
|
|
538
|
+
const validationResults = [
|
|
539
|
+
...runValidate(plugins, personaMetaTyped, suiteConfig, target),
|
|
540
|
+
...validateSubagentRefs(personaMetaTyped, agentMap)
|
|
541
|
+
];
|
|
511
542
|
const def = registry.has(target) ? registry.get(target) : void 0;
|
|
512
543
|
const outputDir = resolveOutputDir(target, suiteConfig, def);
|
|
513
544
|
const fnKey = def?.filenameContextKey;
|
|
@@ -660,6 +691,6 @@ function escapeRegExp(str) {
|
|
|
660
691
|
var _pkgRequire = createRequire(import.meta.url);
|
|
661
692
|
var VERSION = _pkgRequire("../package.json").version;
|
|
662
693
|
|
|
663
|
-
export { DEFAULT_FRONTMATTER_CLAUDE_CODE, DEFAULT_FRONTMATTER_DEEP_AGENTS, DEFAULT_FRONTMATTER_VSCODE, TARGET_CLAUDE_CODE, TARGET_DEEP_AGENTS, TARGET_VSCODE, TargetRegistry, VERSION, build, buildPersona, buildSuite, collapseBlankLines, defaultRegistry, discoverPersonaYamls, ensureBlankLineBeforeHeadings, escapeRegExp, loadContent, loadMetadata, loadPartials, normalizeNewlines, renderFrontmatter, resolveConditionals, resolveFrontmatterTemplate, resolvePartials, resolveVariables, runBuildContext, runPartials, runPersonaPartials, runPostRender, runSuiteInit, runValidate, serializeTools, serializeToolsList, validateFileName, validateStrictMarkers };
|
|
694
|
+
export { DEFAULT_FRONTMATTER_CLAUDE_CODE, DEFAULT_FRONTMATTER_DEEP_AGENTS, DEFAULT_FRONTMATTER_VSCODE, TARGET_CLAUDE_CODE, TARGET_DEEP_AGENTS, TARGET_VSCODE, TargetRegistry, VERSION, build, buildPersona, buildSuite, collapseBlankLines, defaultRegistry, discoverPersonaYamls, ensureBlankLineBeforeHeadings, escapeRegExp, loadContent, loadMetadata, loadPartials, normalizeNewlines, renderFrontmatter, resolveConditionals, resolveFrontmatterTemplate, resolvePartials, resolveVariables, runBuildContext, runPartials, runPersonaPartials, runPostRender, runSuiteInit, runValidate, serializeTools, serializeToolsBlock, serializeToolsList, validateFileName, validateStrictMarkers };
|
|
664
695
|
//# sourceMappingURL=index.js.map
|
|
665
696
|
//# sourceMappingURL=index.js.map
|