@squads-sh/validator 0.1.2 → 0.2.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.
@@ -8,4 +8,12 @@ import type { FileTree } from "../types.js";
8
8
  * @returns FileTree ready for validateSquad()
9
9
  */
10
10
  export declare function buildFileTreeFromFS(dirPath: string): Promise<FileTree>;
11
+ /**
12
+ * Write a fixed FileTree back to disk.
13
+ * Only writes files that exist in the FileTree (does not delete missing files).
14
+ *
15
+ * @param dirPath Absolute path to the squad directory
16
+ * @param fileTree FileTree with fixed contents
17
+ */
18
+ export declare function writeFileTreeToFS(dirPath: string, fileTree: FileTree): Promise<void>;
11
19
  //# sourceMappingURL=filesystem.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../../src/adapters/filesystem.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAI5E"}
1
+ {"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../../src/adapters/filesystem.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAI5E;AAID;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,IAAI,CAAC,CAMf"}
@@ -1,5 +1,5 @@
1
- import { readFile, readdir } from "node:fs/promises";
2
- import { join, relative } from "node:path";
1
+ import { readFile, readdir, writeFile, mkdir } from "node:fs/promises";
2
+ import { join, relative, dirname } from "node:path";
3
3
  /**
4
4
  * Build a FileTree from a local filesystem directory.
5
5
  * Recursively reads all files and returns a Map<relativePath, content>.
@@ -14,6 +14,20 @@ export async function buildFileTreeFromFS(dirPath) {
14
14
  return fileTree;
15
15
  }
16
16
  const TEXT_EXTENSIONS = new Set([".yaml", ".yml", ".md", ".json", ".txt"]);
17
+ /**
18
+ * Write a fixed FileTree back to disk.
19
+ * Only writes files that exist in the FileTree (does not delete missing files).
20
+ *
21
+ * @param dirPath Absolute path to the squad directory
22
+ * @param fileTree FileTree with fixed contents
23
+ */
24
+ export async function writeFileTreeToFS(dirPath, fileTree) {
25
+ for (const [relativePath, content] of fileTree) {
26
+ const fullPath = join(dirPath, relativePath);
27
+ await mkdir(dirname(fullPath), { recursive: true });
28
+ await writeFile(fullPath, content, "utf-8");
29
+ }
30
+ }
17
31
  async function walkDir(basePath, currentPath, fileTree) {
18
32
  const entries = await readdir(currentPath, { withFileTypes: true });
19
33
  for (const entry of entries) {
@@ -1 +1 @@
1
- {"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../src/adapters/filesystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAQ,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAG3C;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAAe;IACvD,MAAM,QAAQ,GAAa,IAAI,GAAG,EAAE,CAAC;IACrC,MAAM,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC1C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAE3E,KAAK,UAAU,OAAO,CACpB,QAAgB,EAChB,WAAmB,EACnB,QAAkB;IAElB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAE/C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,2CAA2C;YAC3C,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc;gBAAE,SAAS;YAC1E,MAAM,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC9C,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9D,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAExC,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACtE,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAClD,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../src/adapters/filesystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAAe;IACvD,MAAM,QAAQ,GAAa,IAAI,GAAG,EAAE,CAAC;IACrC,MAAM,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC1C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAE3E;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAe,EACf,QAAkB;IAElB,KAAK,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAC7C,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,OAAO,CACpB,QAAgB,EAChB,WAAmB,EACnB,QAAkB;IAElB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAE/C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,2CAA2C;YAC3C,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc;gBAAE,SAAS;YAC1E,MAAM,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC9C,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9D,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAExC,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACtE,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAClD,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/categories/agents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAO5E;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,QAAQ,GACjB;IAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAAC,MAAM,EAAE,WAAW,EAAE,CAAA;CAAE,CA2N1D"}
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/categories/agents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAO5E;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,QAAQ,GACjB;IAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAAC,MAAM,EAAE,WAAW,EAAE,CAAA;CAAE,CAoN1D"}
@@ -169,17 +169,9 @@ export function validateAgents(fileTree) {
169
169
  file,
170
170
  });
171
171
  }
172
- // communication.tone
172
+ // communication.tone (optional — auto-fixer can add a default)
173
173
  const comm = personaBlock["communication"];
174
- if (!comm || !comm["tone"]) {
175
- findings.push({
176
- severity: "warning",
177
- category: CAT,
178
- message: "Missing 'persona_profile.communication.tone'",
179
- file,
180
- });
181
- }
182
- else if (typeof comm["tone"] === "string") {
174
+ if (comm && comm["tone"] && typeof comm["tone"] === "string") {
183
175
  // Accept compound tones like "strategic, decisive, clear"
184
176
  // Check if at least one known tone is present
185
177
  const toneValue = comm["tone"];
@@ -1 +1 @@
1
- {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/categories/agents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/categories/agents.ts"],"names":[],"mappings":"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"}
@@ -6,8 +6,8 @@ import type { FileTree, ValidationFinding, ParsedManifest } from "../types.js";
6
6
  * Validates:
7
7
  * - agents/ directory exists with at least 1 .md file
8
8
  * - tasks/ directory exists (warning if missing)
9
- * - workflows/ directory exists (warning if missing)
10
9
  * - config/ directory exists (warning if missing)
10
+ * - workflows/ directory is fully optional (no warning)
11
11
  * - Each file listed in components.* exists in the FileTree
12
12
  */
13
13
  export declare function validateStructure(fileTree: FileTree, manifest: ParsedManifest | null): ValidationFinding[];
@@ -6,8 +6,8 @@ const CAT = "structure";
6
6
  * Validates:
7
7
  * - agents/ directory exists with at least 1 .md file
8
8
  * - tasks/ directory exists (warning if missing)
9
- * - workflows/ directory exists (warning if missing)
10
9
  * - config/ directory exists (warning if missing)
10
+ * - workflows/ directory is fully optional (no warning)
11
11
  * - Each file listed in components.* exists in the FileTree
12
12
  */
13
13
  export function validateStructure(fileTree, manifest) {
@@ -27,8 +27,8 @@ export function validateStructure(fileTree, manifest) {
27
27
  message: "agents/ directory must contain at least one .md file",
28
28
  });
29
29
  }
30
- // Optional directories (warnings)
31
- for (const dir of ["tasks", "workflows", "config"]) {
30
+ // Optional directories (warnings — only for tasks/ and config/, not workflows/)
31
+ for (const dir of ["tasks", "config"]) {
32
32
  const hasFiles = [...fileTree.keys()].some((p) => p.startsWith(`${dir}/`));
33
33
  if (!hasFiles) {
34
34
  findings.push({
@@ -1 +1 @@
1
- {"version":3,"file":"structure.js","sourceRoot":"","sources":["../../src/categories/structure.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"structure.js","sourceRoot":"","sources":["../../src/categories/structure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { FileTree } from "./types.js";
2
+ export interface FixResult {
3
+ /** Updated file tree with fixed files */
4
+ fileTree: FileTree;
5
+ /** Summary of changes made */
6
+ changes: FixChange[];
7
+ /** Total files analyzed */
8
+ filesAnalyzed: number;
9
+ /** Total files modified */
10
+ filesModified: number;
11
+ }
12
+ export interface FixChange {
13
+ file: string;
14
+ description: string;
15
+ }
16
+ /**
17
+ * Auto-fix common validation issues in a squad FileTree.
18
+ * Returns a new FileTree with fixes applied + a change log.
19
+ *
20
+ * This is isomorphic — works in Node.js, browsers, Deno.
21
+ */
22
+ export declare function fixSquad(fileTree: FileTree): FixResult;
23
+ //# sourceMappingURL=fixer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixer.d.ts","sourceRoot":"","sources":["../src/fixer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAoC3C,MAAM,WAAW,SAAS;IACxB,yCAAyC;IACzC,QAAQ,EAAE,QAAQ,CAAC;IACnB,8BAA8B;IAC9B,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,2BAA2B;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,2BAA2B;IAC3B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,CA6OtD"}
package/dist/fixer.js ADDED
@@ -0,0 +1,377 @@
1
+ import yaml from "js-yaml";
2
+ import { ARCHETYPES, RESPONSAVEL_TYPES, ATOMIC_LAYERS } from "./utils/enums.js";
3
+ import { FRONTMATTER_BLOCK, CAMEL_CASE_PAREN } from "./utils/patterns.js";
4
+ /** Map of non-standard archetype values to valid ones */
5
+ const ARCHETYPE_MAP = {
6
+ Strategist: "Builder",
7
+ Connector: "Flow_Master",
8
+ Investigator: "Guardian",
9
+ Orchestrator: "Balancer",
10
+ strategist: "Builder",
11
+ connector: "Flow_Master",
12
+ investigator: "Guardian",
13
+ orchestrator: "Balancer",
14
+ builder: "Builder",
15
+ guardian: "Guardian",
16
+ balancer: "Balancer",
17
+ flow_master: "Flow_Master",
18
+ };
19
+ /** Map of non-standard responsavel_type values to valid ones */
20
+ const RESPONSAVEL_TYPE_MAP = {
21
+ agent: "Agente",
22
+ agente: "Agente",
23
+ worker: "Worker",
24
+ humano: "Humano",
25
+ human: "Humano",
26
+ clone: "Clone",
27
+ };
28
+ const DEFAULT_TONE = "professional, collaborative";
29
+ const DEFAULT_GREETING_LEVELS = {
30
+ brief: "Agent ready.",
31
+ standard: "Agent ready to help.",
32
+ detailed: "Agent ready with full context.",
33
+ };
34
+ /**
35
+ * Auto-fix common validation issues in a squad FileTree.
36
+ * Returns a new FileTree with fixes applied + a change log.
37
+ *
38
+ * This is isomorphic — works in Node.js, browsers, Deno.
39
+ */
40
+ export function fixSquad(fileTree) {
41
+ const fixed = new Map(fileTree);
42
+ const changes = [];
43
+ let filesAnalyzed = 0;
44
+ let filesModified = 0;
45
+ // Collect agent identity for task cross-reference fixing
46
+ const agentNameById = new Map();
47
+ const allAgentRefs = new Set();
48
+ // --- Pass 1: Fix agents ---
49
+ const agentFiles = [...fixed.keys()].filter((p) => p.startsWith("agents/") && p.endsWith(".md"));
50
+ for (const file of agentFiles) {
51
+ filesAnalyzed++;
52
+ const original = fixed.get(file);
53
+ let content = original;
54
+ // Fix: convert yaml code fence to frontmatter
55
+ content = convertCodeFenceToFrontmatter(content);
56
+ if (content !== original) {
57
+ changes.push({ file, description: "Converted YAML code fence to frontmatter block" });
58
+ }
59
+ // Parse frontmatter
60
+ const fmMatch = content.match(FRONTMATTER_BLOCK);
61
+ if (!fmMatch || !fmMatch[1]) {
62
+ fixed.set(file, content);
63
+ if (content !== original)
64
+ filesModified++;
65
+ continue;
66
+ }
67
+ let fmBlock = fmMatch[1];
68
+ const bodyAfterFm = content.slice(fmMatch[0].length);
69
+ let fmChanged = false;
70
+ // Parse YAML to inspect values
71
+ let parsed = null;
72
+ try {
73
+ parsed = yaml.load(fmBlock);
74
+ }
75
+ catch {
76
+ // Invalid YAML — skip fixes
77
+ }
78
+ if (parsed) {
79
+ // Collect agent identity
80
+ const agentBlock = parsed["agent"];
81
+ if (agentBlock) {
82
+ const id = agentBlock["id"];
83
+ const name = agentBlock["name"];
84
+ if (id)
85
+ allAgentRefs.add(id);
86
+ if (name)
87
+ allAgentRefs.add(name);
88
+ if (id && name)
89
+ agentNameById.set(id, name);
90
+ }
91
+ // Fix archetype
92
+ const personaBlock = parsed["persona_profile"];
93
+ if (personaBlock) {
94
+ const archetype = personaBlock["archetype"];
95
+ if (archetype && !ARCHETYPES.has(archetype)) {
96
+ const mapped = ARCHETYPE_MAP[archetype] || "Builder";
97
+ fmBlock = replaceYamlValue(fmBlock, "archetype", archetype, mapped);
98
+ fmChanged = true;
99
+ changes.push({
100
+ file,
101
+ description: `Fixed archetype: "${archetype}" → "${mapped}"`,
102
+ });
103
+ }
104
+ // Fix: add default tone if missing
105
+ const comm = personaBlock["communication"];
106
+ if (!comm || !comm["tone"]) {
107
+ fmBlock = ensureTone(fmBlock, parsed);
108
+ fmChanged = true;
109
+ changes.push({
110
+ file,
111
+ description: `Added default communication tone: "${DEFAULT_TONE}"`,
112
+ });
113
+ }
114
+ }
115
+ else {
116
+ // No persona_profile at all — add minimal one
117
+ fmBlock = fmBlock.trimEnd() + "\npersona_profile:\n archetype: Builder\n communication:\n tone: \"" + DEFAULT_TONE + "\"\n";
118
+ fmChanged = true;
119
+ changes.push({
120
+ file,
121
+ description: "Added default persona_profile with archetype and tone",
122
+ });
123
+ }
124
+ // Fix: ensure greeting_levels has at least 3 keys
125
+ const greetingBlock = parsed["greeting_levels"];
126
+ if (greetingBlock) {
127
+ const keys = Object.keys(greetingBlock);
128
+ const missing = [];
129
+ for (const [key, val] of Object.entries(DEFAULT_GREETING_LEVELS)) {
130
+ if (!keys.includes(key))
131
+ missing.push(key);
132
+ }
133
+ if (missing.length > 0) {
134
+ fmBlock = addMissingGreetingLevels(fmBlock, missing);
135
+ fmChanged = true;
136
+ changes.push({
137
+ file,
138
+ description: `Added missing greeting_levels: ${missing.join(", ")}`,
139
+ });
140
+ }
141
+ }
142
+ else {
143
+ // No greeting_levels at all — add default
144
+ fmBlock = fmBlock.trimEnd() + "\ngreeting_levels:\n brief: \"Agent ready.\"\n standard: \"Agent ready to help.\"\n detailed: \"Agent ready with full context.\"\n";
145
+ fmChanged = true;
146
+ changes.push({
147
+ file,
148
+ description: "Added default greeting_levels (brief, standard, detailed)",
149
+ });
150
+ }
151
+ }
152
+ if (fmChanged) {
153
+ content = `---\n${fmBlock.trim()}\n---\n${bodyAfterFm}`;
154
+ }
155
+ if (content !== original) {
156
+ fixed.set(file, content);
157
+ filesModified++;
158
+ }
159
+ }
160
+ // --- Pass 2: Fix tasks ---
161
+ const taskFiles = [...fixed.keys()].filter((p) => p.startsWith("tasks/") && p.endsWith(".md"));
162
+ for (const file of taskFiles) {
163
+ filesAnalyzed++;
164
+ const original = fixed.get(file);
165
+ let content = original;
166
+ // Fix: convert yaml code fence to frontmatter
167
+ content = convertCodeFenceToFrontmatter(content);
168
+ if (content !== original) {
169
+ changes.push({ file, description: "Converted YAML code fence to frontmatter block" });
170
+ }
171
+ const fmMatch = content.match(FRONTMATTER_BLOCK);
172
+ if (!fmMatch || !fmMatch[1]) {
173
+ fixed.set(file, content);
174
+ if (content !== original)
175
+ filesModified++;
176
+ continue;
177
+ }
178
+ let fmBlock = fmMatch[1];
179
+ const bodyAfterFm = content.slice(fmMatch[0].length);
180
+ let fmChanged = false;
181
+ let parsed = null;
182
+ try {
183
+ parsed = yaml.load(fmBlock);
184
+ }
185
+ catch {
186
+ // skip
187
+ }
188
+ if (parsed) {
189
+ // Fix: responsavel_type
190
+ const respType = parsed["responsavel_type"];
191
+ if (respType && !RESPONSAVEL_TYPES.has(respType)) {
192
+ const mapped = RESPONSAVEL_TYPE_MAP[respType.toLowerCase()] || "Agente";
193
+ fmBlock = replaceYamlValue(fmBlock, "responsavel_type", respType, mapped);
194
+ fmChanged = true;
195
+ changes.push({
196
+ file,
197
+ description: `Fixed responsavel_type: "${respType}" → "${mapped}"`,
198
+ });
199
+ }
200
+ // Fix: atomic_layer
201
+ const atomicLayer = parsed["atomic_layer"];
202
+ if (atomicLayer && !ATOMIC_LAYERS.has(atomicLayer)) {
203
+ fmBlock = replaceYamlValue(fmBlock, "atomic_layer", atomicLayer, "Molecule");
204
+ fmChanged = true;
205
+ changes.push({
206
+ file,
207
+ description: `Fixed atomic_layer: "${atomicLayer}" → "Molecule"`,
208
+ });
209
+ }
210
+ // Fix: task name to camelCase()
211
+ const taskName = parsed["task"];
212
+ if (taskName && !CAMEL_CASE_PAREN.test(taskName)) {
213
+ const fixedName = toCamelCaseFromFilename(file);
214
+ fmBlock = replaceYamlValue(fmBlock, "task", taskName, fixedName);
215
+ fmChanged = true;
216
+ changes.push({
217
+ file,
218
+ description: `Fixed task identifier: "${taskName}" → "${fixedName}"`,
219
+ });
220
+ }
221
+ // Fix: responsavel reference — try to map ID to agent name
222
+ const responsavel = parsed["responsavel"];
223
+ if (responsavel) {
224
+ const cleaned = responsavel.replace(/^@/, "").replace(/^"|"$/g, "");
225
+ if (agentNameById.has(cleaned) && agentNameById.get(cleaned) !== cleaned) {
226
+ const agentName = agentNameById.get(cleaned);
227
+ fmBlock = replaceYamlValue(fmBlock, "responsavel", responsavel, `"${agentName}"`);
228
+ fmChanged = true;
229
+ changes.push({
230
+ file,
231
+ description: `Fixed responsavel reference: "${responsavel}" → "${agentName}"`,
232
+ });
233
+ }
234
+ }
235
+ // Fix: Entrada/Saida that are pipe-strings instead of arrays
236
+ fmBlock = fixPipeToArrayMarker(fmBlock, "Entrada");
237
+ fmBlock = fixPipeToArrayMarker(fmBlock, "Saida");
238
+ if (fmBlock !== fmMatch[1] && !fmChanged) {
239
+ fmChanged = true;
240
+ }
241
+ }
242
+ if (fmChanged) {
243
+ content = `---\n${fmBlock.trim()}\n---\n${bodyAfterFm}`;
244
+ }
245
+ if (content !== original) {
246
+ fixed.set(file, content);
247
+ filesModified++;
248
+ }
249
+ }
250
+ return {
251
+ fileTree: fixed,
252
+ changes,
253
+ filesAnalyzed,
254
+ filesModified,
255
+ };
256
+ }
257
+ // --- Helpers ---
258
+ function convertCodeFenceToFrontmatter(content) {
259
+ if (/^---\s*\n/.test(content))
260
+ return content;
261
+ // Pattern: # Heading\n\n```yaml\n...\n```\n...
262
+ const withHeading = content.match(/^#\s+[^\r\n]+\r?\n\r?\n```yaml\r?\n([\s\S]*?)\r?\n```\r?\n?([\s\S]*)$/);
263
+ if (withHeading) {
264
+ return `---\n${withHeading[1].trimEnd()}\n---\n\n${withHeading[2] || ""}`;
265
+ }
266
+ // Pattern: ```yaml\n...\n```\n...
267
+ const plainFence = content.match(/^```yaml\r?\n([\s\S]*?)\r?\n```\r?\n?([\s\S]*)$/);
268
+ if (plainFence) {
269
+ return `---\n${plainFence[1].trimEnd()}\n---\n\n${plainFence[2] || ""}`;
270
+ }
271
+ return content;
272
+ }
273
+ function replaceYamlValue(fmBlock, key, oldValue, newValue) {
274
+ // Escape special regex chars in oldValue
275
+ const escaped = oldValue.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
276
+ const regex = new RegExp(`(^|\\n)(\\s*${key}:\\s*)(?:"${escaped}"|'${escaped}'|${escaped})`, "m");
277
+ const match = fmBlock.match(regex);
278
+ if (match) {
279
+ return fmBlock.replace(regex, `$1$2${newValue}`);
280
+ }
281
+ return fmBlock;
282
+ }
283
+ function ensureTone(fmBlock, parsed) {
284
+ const personaBlock = parsed["persona_profile"];
285
+ if (!personaBlock)
286
+ return fmBlock;
287
+ const comm = personaBlock["communication"];
288
+ if (!comm) {
289
+ // No communication block — add it under persona_profile
290
+ const lines = fmBlock.split("\n");
291
+ const personaIdx = lines.findIndex((l) => /^\s*persona_profile\s*:/.test(l));
292
+ if (personaIdx === -1)
293
+ return fmBlock;
294
+ // Find indent level
295
+ const personaIndent = (lines[personaIdx].match(/^\s*/) || [""])[0].length;
296
+ const childIndent = " ".repeat(personaIndent + 2);
297
+ // Find insertion point: after last child of persona_profile
298
+ let insertIdx = personaIdx + 1;
299
+ while (insertIdx < lines.length) {
300
+ const line = lines[insertIdx];
301
+ if (line.trim() === "") {
302
+ insertIdx++;
303
+ continue;
304
+ }
305
+ const indent = (line.match(/^\s*/) || [""])[0].length;
306
+ if (indent <= personaIndent)
307
+ break;
308
+ insertIdx++;
309
+ }
310
+ lines.splice(insertIdx, 0, `${childIndent}communication:`, `${childIndent} tone: "${DEFAULT_TONE}"`);
311
+ return lines.join("\n");
312
+ }
313
+ // Communication exists but no tone
314
+ const lines = fmBlock.split("\n");
315
+ const commIdx = lines.findIndex((l) => /^\s*communication\s*:/.test(l));
316
+ if (commIdx === -1)
317
+ return fmBlock;
318
+ const commIndent = (lines[commIdx].match(/^\s*/) || [""])[0].length;
319
+ const childIndent = " ".repeat(commIndent + 2);
320
+ // Find insertion point after communication children
321
+ let insertIdx = commIdx + 1;
322
+ while (insertIdx < lines.length) {
323
+ const line = lines[insertIdx];
324
+ if (line.trim() === "") {
325
+ insertIdx++;
326
+ continue;
327
+ }
328
+ const indent = (line.match(/^\s*/) || [""])[0].length;
329
+ if (indent <= commIndent)
330
+ break;
331
+ insertIdx++;
332
+ }
333
+ lines.splice(insertIdx, 0, `${childIndent}tone: "${DEFAULT_TONE}"`);
334
+ return lines.join("\n");
335
+ }
336
+ function addMissingGreetingLevels(fmBlock, missing) {
337
+ const lines = fmBlock.split("\n");
338
+ const idx = lines.findIndex((l) => /^\s*greeting_levels\s*:/.test(l));
339
+ if (idx === -1)
340
+ return fmBlock;
341
+ const baseIndent = (lines[idx].match(/^\s*/) || [""])[0].length;
342
+ const childIndent = " ".repeat(baseIndent + 2);
343
+ // Find end of greeting_levels block
344
+ let end = idx + 1;
345
+ while (end < lines.length) {
346
+ const line = lines[end];
347
+ if (line.trim() === "") {
348
+ end++;
349
+ continue;
350
+ }
351
+ const indent = (line.match(/^\s*/) || [""])[0].length;
352
+ if (indent <= baseIndent)
353
+ break;
354
+ end++;
355
+ }
356
+ const toAdd = [];
357
+ for (const key of missing) {
358
+ toAdd.push(`${childIndent}${key}: "${DEFAULT_GREETING_LEVELS[key]}"`);
359
+ }
360
+ lines.splice(end, 0, ...toAdd);
361
+ return lines.join("\n");
362
+ }
363
+ function toCamelCaseFromFilename(filePath) {
364
+ const base = filePath.split("/").pop()?.replace(/\.md$/, "") || "taskName";
365
+ const parts = base.split("-").filter(Boolean);
366
+ if (parts.length === 0)
367
+ return "taskName()";
368
+ const [head, ...rest] = parts;
369
+ const fn = head.toLowerCase() +
370
+ rest.map((p) => p.charAt(0).toUpperCase() + p.slice(1)).join("");
371
+ return `${fn}()`;
372
+ }
373
+ function fixPipeToArrayMarker(fmBlock, sectionName) {
374
+ // Fix: "Entrada: |" → "Entrada:" (remove pipe so YAML parses children as mapping)
375
+ return fmBlock.replace(new RegExp(`(^|\\n)(${sectionName}:\\s*)\\|\\s*$`, "m"), `$1$2`);
376
+ }
377
+ //# sourceMappingURL=fixer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixer.js","sourceRoot":"","sources":["../src/fixer.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -9,6 +9,8 @@ import type { FileTree, ValidationReport } from "./types.js";
9
9
  * @returns ValidationReport with score, status, and per-category results
10
10
  */
11
11
  export declare function validateSquad(fileTree: FileTree): ValidationReport;
12
+ export { fixSquad } from "./fixer.js";
13
+ export type { FixResult, FixChange } from "./fixer.js";
12
14
  export type { FileTree, ValidationReport, ValidationStatus, ValidationFinding, CategoryResult, CategoryName, Severity, ParsedManifest, ParsedAgent, ParsedTask, ParsedWorkflow, } from "./types.js";
13
15
  export { CATEGORY_WEIGHTS, CATEGORY_LABELS } from "./types.js";
14
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,gBAAgB,EAGjB,MAAM,YAAY,CAAC;AAcpB;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,gBAAgB,CA4DlE;AAGD,YAAY,EACV,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,WAAW,EACX,UAAU,EACV,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,gBAAgB,EAGjB,MAAM,YAAY,CAAC;AAcpB;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,gBAAgB,CA4DlE;AAGD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvD,YAAY,EACV,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,WAAW,EACX,UAAU,EACV,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -59,5 +59,7 @@ export function validateSquad(fileTree) {
59
59
  },
60
60
  };
61
61
  }
62
+ // Re-export fixer
63
+ export { fixSquad } from "./fixer.js";
62
64
  export { CATEGORY_WEIGHTS, CATEGORY_LABELS } from "./types.js";
63
65
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,GACd,MAAM,cAAc,CAAC;AAEtB;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,QAAkB;IAC9C,MAAM,WAAW,GAAwB,EAAE,CAAC;IAE5C,uBAAuB;IACvB,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,GACpD,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC7B,WAAW,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAC;IAEtC,wBAAwB;IACxB,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAChE,WAAW,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,CAAC;IAEvC,qBAAqB;IACrB,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACrE,WAAW,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;IAEnC,oBAAoB;IACpB,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAClE,WAAW,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;IAElC,wBAAwB;IACxB,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAE,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC9E,WAAW,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAC;IAEtC,+BAA+B;IAC/B,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAC3E,WAAW,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAC;IAEtC,yBAAyB;IACzB,MAAM,aAAa,GAAmB;QACpC,UAAU;QACV,WAAW;QACX,QAAQ;QACR,OAAO;QACP,WAAW;QACX,YAAY;KACb,CAAC;IAEF,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC5C,mBAAmB,CAAC,IAAI,EAAE,WAAW,CAAC,CACvC,CAAC;IAEF,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;IAC7E,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CACtC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAChC,CAAC,MAAM,CAAC;IAET,MAAM,KAAK,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAE/C,OAAO;QACL,KAAK;QACL,MAAM,EAAE,aAAa,CAAC,WAAW,EAAE,aAAa,EAAE,KAAK,CAAC;QACxD,UAAU;QACV,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE;YACP,WAAW;YACX,aAAa;YACb,SAAS,EAAE,QAAQ,CAAC,IAAI;SACzB;KACF,CAAC;AACJ,CAAC;AAiBD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@squads-sh/validator",
3
- "version": "0.1.2",
3
+ "version": "0.2.0",
4
4
  "description": "Deep validation engine for AIOS Squad packages",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",