@wayai/cli 0.3.40 → 0.3.42
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/index.js +16920 -310
- package/dist/index.js.map +1 -1
- package/package.json +6 -4
- package/dist/commands/admin.d.ts +0 -1
- package/dist/commands/admin.js +0 -913
- package/dist/commands/admin.js.map +0 -1
- package/dist/commands/analytics.d.ts +0 -34
- package/dist/commands/analytics.js +0 -605
- package/dist/commands/analytics.js.map +0 -1
- package/dist/commands/conversations.d.ts +0 -14
- package/dist/commands/conversations.js +0 -292
- package/dist/commands/conversations.js.map +0 -1
- package/dist/commands/create-credential.d.ts +0 -20
- package/dist/commands/create-credential.js +0 -146
- package/dist/commands/create-credential.js.map +0 -1
- package/dist/commands/delete-history.d.ts +0 -15
- package/dist/commands/delete-history.js +0 -56
- package/dist/commands/delete-history.js.map +0 -1
- package/dist/commands/eval-capture.d.ts +0 -1
- package/dist/commands/eval-capture.js +0 -135
- package/dist/commands/eval-capture.js.map +0 -1
- package/dist/commands/eval-results.d.ts +0 -10
- package/dist/commands/eval-results.js +0 -168
- package/dist/commands/eval-results.js.map +0 -1
- package/dist/commands/eval.d.ts +0 -1
- package/dist/commands/eval.js +0 -49
- package/dist/commands/eval.js.map +0 -1
- package/dist/commands/evals.d.ts +0 -21
- package/dist/commands/evals.js +0 -120
- package/dist/commands/evals.js.map +0 -1
- package/dist/commands/init.d.ts +0 -16
- package/dist/commands/init.js +0 -191
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/list.d.ts +0 -13
- package/dist/commands/list.js +0 -70
- package/dist/commands/list.js.map +0 -1
- package/dist/commands/login.d.ts +0 -8
- package/dist/commands/login.js +0 -145
- package/dist/commands/login.js.map +0 -1
- package/dist/commands/logout.d.ts +0 -1
- package/dist/commands/logout.js +0 -19
- package/dist/commands/logout.js.map +0 -1
- package/dist/commands/migrate.d.ts +0 -12
- package/dist/commands/migrate.js +0 -106
- package/dist/commands/migrate.js.map +0 -1
- package/dist/commands/observability.d.ts +0 -14
- package/dist/commands/observability.js +0 -124
- package/dist/commands/observability.js.map +0 -1
- package/dist/commands/org.d.ts +0 -19
- package/dist/commands/org.js +0 -186
- package/dist/commands/org.js.map +0 -1
- package/dist/commands/pull.d.ts +0 -31
- package/dist/commands/pull.js +0 -210
- package/dist/commands/pull.js.map +0 -1
- package/dist/commands/push.d.ts +0 -25
- package/dist/commands/push.js +0 -472
- package/dist/commands/push.js.map +0 -1
- package/dist/commands/report-create.d.ts +0 -18
- package/dist/commands/report-create.js +0 -143
- package/dist/commands/report-create.js.map +0 -1
- package/dist/commands/report.d.ts +0 -16
- package/dist/commands/report.js +0 -252
- package/dist/commands/report.js.map +0 -1
- package/dist/commands/run-eval.d.ts +0 -15
- package/dist/commands/run-eval.js +0 -187
- package/dist/commands/run-eval.js.map +0 -1
- package/dist/commands/send-message.d.ts +0 -11
- package/dist/commands/send-message.js +0 -63
- package/dist/commands/send-message.js.map +0 -1
- package/dist/commands/status.d.ts +0 -17
- package/dist/commands/status.js +0 -205
- package/dist/commands/status.js.map +0 -1
- package/dist/commands/sync-mcp.d.ts +0 -16
- package/dist/commands/sync-mcp.js +0 -51
- package/dist/commands/sync-mcp.js.map +0 -1
- package/dist/commands/sync-skills.d.ts +0 -10
- package/dist/commands/sync-skills.js +0 -49
- package/dist/commands/sync-skills.js.map +0 -1
- package/dist/commands/unlock.d.ts +0 -1
- package/dist/commands/unlock.js +0 -13
- package/dist/commands/unlock.js.map +0 -1
- package/dist/commands/update-credential.d.ts +0 -29
- package/dist/commands/update-credential.js +0 -156
- package/dist/commands/update-credential.js.map +0 -1
- package/dist/commands/update.d.ts +0 -6
- package/dist/commands/update.js +0 -36
- package/dist/commands/update.js.map +0 -1
- package/dist/commands/use.d.ts +0 -1
- package/dist/commands/use.js +0 -56
- package/dist/commands/use.js.map +0 -1
- package/dist/commands/whoami.d.ts +0 -11
- package/dist/commands/whoami.js +0 -30
- package/dist/commands/whoami.js.map +0 -1
- package/dist/index.d.ts +0 -28
- package/dist/lib/analytics-constants.d.ts +0 -6
- package/dist/lib/analytics-constants.js +0 -14
- package/dist/lib/analytics-constants.js.map +0 -1
- package/dist/lib/api-client.d.ts +0 -568
- package/dist/lib/api-client.js +0 -445
- package/dist/lib/api-client.js.map +0 -1
- package/dist/lib/auth.d.ts +0 -50
- package/dist/lib/auth.js +0 -230
- package/dist/lib/auth.js.map +0 -1
- package/dist/lib/config.d.ts +0 -34
- package/dist/lib/config.js +0 -69
- package/dist/lib/config.js.map +0 -1
- package/dist/lib/credential-utils.d.ts +0 -36
- package/dist/lib/credential-utils.js +0 -88
- package/dist/lib/credential-utils.js.map +0 -1
- package/dist/lib/diff-display.d.ts +0 -8
- package/dist/lib/diff-display.js +0 -37
- package/dist/lib/diff-display.js.map +0 -1
- package/dist/lib/eval-format.d.ts +0 -29
- package/dist/lib/eval-format.js +0 -44
- package/dist/lib/eval-format.js.map +0 -1
- package/dist/lib/hub-lock.d.ts +0 -7
- package/dist/lib/hub-lock.js +0 -116
- package/dist/lib/hub-lock.js.map +0 -1
- package/dist/lib/layout.d.ts +0 -79
- package/dist/lib/layout.js +0 -133
- package/dist/lib/layout.js.map +0 -1
- package/dist/lib/org-workspace.d.ts +0 -22
- package/dist/lib/org-workspace.js +0 -106
- package/dist/lib/org-workspace.js.map +0 -1
- package/dist/lib/parser.d.ts +0 -16
- package/dist/lib/parser.js +0 -306
- package/dist/lib/parser.js.map +0 -1
- package/dist/lib/repo-config.d.ts +0 -23
- package/dist/lib/repo-config.js +0 -91
- package/dist/lib/repo-config.js.map +0 -1
- package/dist/lib/report-edit-args.d.ts +0 -27
- package/dist/lib/report-edit-args.js +0 -56
- package/dist/lib/report-edit-args.js.map +0 -1
- package/dist/lib/report-inbox.d.ts +0 -19
- package/dist/lib/report-inbox.js +0 -73
- package/dist/lib/report-inbox.js.map +0 -1
- package/dist/lib/resource-files.d.ts +0 -29
- package/dist/lib/resource-files.js +0 -156
- package/dist/lib/resource-files.js.map +0 -1
- package/dist/lib/sentry.d.ts +0 -38
- package/dist/lib/sentry.js +0 -168
- package/dist/lib/sentry.js.map +0 -1
- package/dist/lib/skill-version.d.ts +0 -9
- package/dist/lib/skill-version.js +0 -53
- package/dist/lib/skill-version.js.map +0 -1
- package/dist/lib/sql-output.d.ts +0 -17
- package/dist/lib/sql-output.js +0 -48
- package/dist/lib/sql-output.js.map +0 -1
- package/dist/lib/token-store.d.ts +0 -37
- package/dist/lib/token-store.js +0 -354
- package/dist/lib/token-store.js.map +0 -1
- package/dist/lib/types.d.ts +0 -18
- package/dist/lib/types.js +0 -5
- package/dist/lib/types.js.map +0 -1
- package/dist/lib/utils.d.ts +0 -97
- package/dist/lib/utils.js +0 -288
- package/dist/lib/utils.js.map +0 -1
- package/dist/lib/version-cache.d.ts +0 -10
- package/dist/lib/version-cache.js +0 -34
- package/dist/lib/version-cache.js.map +0 -1
- package/dist/lib/workspace.d.ts +0 -112
- package/dist/lib/workspace.js +0 -387
- package/dist/lib/workspace.js.map +0 -1
- package/dist/lib/yaml-writer.d.ts +0 -18
- package/dist/lib/yaml-writer.js +0 -283
- package/dist/lib/yaml-writer.js.map +0 -1
package/dist/lib/yaml-writer.js
DELETED
|
@@ -1,283 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* YAML writer — converts HubAsCodePayload to hub.yaml + agents/<slug>.yaml + agents/<slug>.md files
|
|
3
|
-
* Reverse of parser.ts
|
|
4
|
-
*/
|
|
5
|
-
import * as fs from 'node:fs';
|
|
6
|
-
import * as path from 'node:path';
|
|
7
|
-
import * as yaml from 'js-yaml';
|
|
8
|
-
import { slugify } from './utils.js';
|
|
9
|
-
import { writeResourceFileTree } from './resource-files.js';
|
|
10
|
-
export const YAML_DUMP_OPTIONS = {
|
|
11
|
-
lineWidth: -1, // don't wrap lines
|
|
12
|
-
noRefs: true, // don't use YAML anchors
|
|
13
|
-
quotingType: '"',
|
|
14
|
-
forceQuotes: false,
|
|
15
|
-
sortKeys: false,
|
|
16
|
-
};
|
|
17
|
-
// Shared between writeEvalYamlFiles (pull) and `wayai eval capture` so the on-disk shape stays identical.
|
|
18
|
-
export function buildEvalYamlObject(evalEntry, slug) {
|
|
19
|
-
const out = {};
|
|
20
|
-
if (evalEntry.id)
|
|
21
|
-
out.id = evalEntry.id;
|
|
22
|
-
if (evalEntry.name !== slug)
|
|
23
|
-
out.name = evalEntry.name;
|
|
24
|
-
out.agent = evalEntry.agent;
|
|
25
|
-
if (evalEntry.agent_id)
|
|
26
|
-
out.agent_id = evalEntry.agent_id;
|
|
27
|
-
if (typeof evalEntry.runs === 'number' && evalEntry.runs !== 1) {
|
|
28
|
-
out.runs = evalEntry.runs;
|
|
29
|
-
}
|
|
30
|
-
if (evalEntry.enabled === false) {
|
|
31
|
-
out.enabled = false;
|
|
32
|
-
}
|
|
33
|
-
if (evalEntry.history && evalEntry.history.length > 0) {
|
|
34
|
-
out.history = evalEntry.history;
|
|
35
|
-
}
|
|
36
|
-
out.input = evalEntry.input;
|
|
37
|
-
out.expected = evalEntry.expected;
|
|
38
|
-
if (evalEntry.evaluator_instructions) {
|
|
39
|
-
out.evaluator_instructions = evalEntry.evaluator_instructions;
|
|
40
|
-
}
|
|
41
|
-
return out;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Write a HubAsCodePayload to disk as hub.yaml + agents/<slug>.yaml + agents/<slug>.md files.
|
|
45
|
-
*
|
|
46
|
-
* - Creates `hub.yaml` with hub config (no agents section)
|
|
47
|
-
* - Creates `agents/<slug>.yaml` for each agent (all config except instructions)
|
|
48
|
-
* - Creates `agents/<slug>.md` for each agent with instructions
|
|
49
|
-
* - Removes orphan .yaml and .md files in agents/ that don't match any current agent
|
|
50
|
-
* - Deletes old `wayai.yaml` if present (migration)
|
|
51
|
-
*/
|
|
52
|
-
export function writeHubFolder(hubFolder, payload) {
|
|
53
|
-
// Ensure directories exist
|
|
54
|
-
const agentsDir = path.join(hubFolder, 'agents');
|
|
55
|
-
if (!fs.existsSync(hubFolder)) {
|
|
56
|
-
fs.mkdirSync(hubFolder, { recursive: true });
|
|
57
|
-
}
|
|
58
|
-
if (!fs.existsSync(agentsDir)) {
|
|
59
|
-
fs.mkdirSync(agentsDir, { recursive: true });
|
|
60
|
-
}
|
|
61
|
-
// Build YAML-safe payload (no agents section)
|
|
62
|
-
const yamlPayload = buildYamlPayload(payload);
|
|
63
|
-
const agentFiles = extractAgentFiles(payload);
|
|
64
|
-
// Write hub.yaml
|
|
65
|
-
const yamlContent = yaml.dump(yamlPayload, YAML_DUMP_OPTIONS);
|
|
66
|
-
fs.writeFileSync(path.join(hubFolder, 'hub.yaml'), yamlContent, 'utf-8');
|
|
67
|
-
// Init-only: 1-line Claude Code shim that imports the hub's AGENTS.md.
|
|
68
|
-
// Skipped if the user has edited it. Other harnesses load AGENTS.md natively.
|
|
69
|
-
const claudeShimPath = path.join(hubFolder, 'CLAUDE.md');
|
|
70
|
-
if (!fs.existsSync(claudeShimPath)) {
|
|
71
|
-
fs.writeFileSync(claudeShimPath, '@AGENTS.md\n', 'utf-8');
|
|
72
|
-
}
|
|
73
|
-
// Delete old wayai.yaml if it exists (migration)
|
|
74
|
-
const oldYamlPath = path.join(hubFolder, 'wayai.yaml');
|
|
75
|
-
if (fs.existsSync(oldYamlPath)) {
|
|
76
|
-
fs.unlinkSync(oldYamlPath);
|
|
77
|
-
}
|
|
78
|
-
// Write agent YAML config files + instruction files
|
|
79
|
-
// Track .yaml and .md slugs separately so agents without instructions get their .md cleaned up
|
|
80
|
-
const yamlSlugs = writeAgentYamlFiles(agentsDir, payload.agents || []);
|
|
81
|
-
const mdSlugs = new Set();
|
|
82
|
-
for (const { slug, content } of agentFiles) {
|
|
83
|
-
mdSlugs.add(slug);
|
|
84
|
-
fs.writeFileSync(path.join(agentsDir, `${slug}.md`), content, 'utf-8');
|
|
85
|
-
}
|
|
86
|
-
// Remove orphan .yaml and .md files
|
|
87
|
-
const existingFiles = fs.readdirSync(agentsDir);
|
|
88
|
-
for (const file of existingFiles) {
|
|
89
|
-
if (file.endsWith('.yaml')) {
|
|
90
|
-
const slug = file.slice(0, -5);
|
|
91
|
-
if (!yamlSlugs.has(slug)) {
|
|
92
|
-
fs.unlinkSync(path.join(agentsDir, file));
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
else if (file.endsWith('.md')) {
|
|
96
|
-
const slug = file.slice(0, -3);
|
|
97
|
-
if (!mdSlugs.has(slug)) {
|
|
98
|
-
fs.unlinkSync(path.join(agentsDir, file));
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
// Write resource files
|
|
103
|
-
writeResourceFiles(hubFolder, payload.resources || []);
|
|
104
|
-
// Write eval scenario files (always run — handles transition from "evals exist" to "no evals")
|
|
105
|
-
writeEvalYamlFiles(hubFolder, payload.evals || []);
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Build the YAML-safe version of the payload (hub config only, no agents).
|
|
109
|
-
* Agents are written to separate files by writeAgentYamlFiles().
|
|
110
|
-
*/
|
|
111
|
-
function buildYamlPayload(payload) {
|
|
112
|
-
const result = {
|
|
113
|
-
version: payload.version,
|
|
114
|
-
hub_id: payload.hub_id,
|
|
115
|
-
hub_environment: payload.hub_environment,
|
|
116
|
-
};
|
|
117
|
-
// Include preview_label for preview hubs (read-only metadata)
|
|
118
|
-
if (payload.preview_label) {
|
|
119
|
-
result.preview_label = payload.preview_label;
|
|
120
|
-
}
|
|
121
|
-
result.hub = payload.hub;
|
|
122
|
-
// Agents are NOT included in hub.yaml — they live in agents/<slug>.yaml
|
|
123
|
-
if (payload.resources && payload.resources.length > 0) {
|
|
124
|
-
// Strip files from resource entries — filesystem is source of truth
|
|
125
|
-
result.resources = payload.resources.map((r) => {
|
|
126
|
-
const { files, ...rest } = r;
|
|
127
|
-
return rest;
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
if (payload.states && payload.states.length > 0) {
|
|
131
|
-
result.states = payload.states;
|
|
132
|
-
}
|
|
133
|
-
if (payload.teams && payload.teams.length > 0) {
|
|
134
|
-
result.teams = payload.teams;
|
|
135
|
-
}
|
|
136
|
-
if (payload.connections && payload.connections.length > 0) {
|
|
137
|
-
result.connections = payload.connections;
|
|
138
|
-
}
|
|
139
|
-
if (payload.outbound_contacts && payload.outbound_contacts.length > 0) {
|
|
140
|
-
result.outbound_contacts = payload.outbound_contacts;
|
|
141
|
-
}
|
|
142
|
-
if (payload.outbound_lists && payload.outbound_lists.length > 0) {
|
|
143
|
-
result.outbound_lists = payload.outbound_lists;
|
|
144
|
-
}
|
|
145
|
-
if (payload.outbound_schedules && payload.outbound_schedules.length > 0) {
|
|
146
|
-
result.outbound_schedules = payload.outbound_schedules;
|
|
147
|
-
}
|
|
148
|
-
return result;
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Write per-agent YAML config files to agents/ directory.
|
|
152
|
-
* Each agent gets agents/<slug>.yaml with all config except instructions.
|
|
153
|
-
* Returns the set of slugs written (for orphan cleanup).
|
|
154
|
-
*/
|
|
155
|
-
function writeAgentYamlFiles(agentsDir, agents) {
|
|
156
|
-
const slugs = new Set();
|
|
157
|
-
for (const agent of agents) {
|
|
158
|
-
const slug = slugify(agent.name);
|
|
159
|
-
slugs.add(slug);
|
|
160
|
-
const entry = { ...agent };
|
|
161
|
-
// Instructions go to .md file, not .yaml
|
|
162
|
-
delete entry.instructions;
|
|
163
|
-
const yamlContent = yaml.dump(entry, YAML_DUMP_OPTIONS);
|
|
164
|
-
fs.writeFileSync(path.join(agentsDir, `${slug}.yaml`), yamlContent, 'utf-8');
|
|
165
|
-
}
|
|
166
|
-
return slugs;
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Extract agent instruction files from the payload.
|
|
170
|
-
*/
|
|
171
|
-
function extractAgentFiles(payload) {
|
|
172
|
-
const files = [];
|
|
173
|
-
for (const agent of payload.agents || []) {
|
|
174
|
-
if (agent.instructions) {
|
|
175
|
-
files.push({
|
|
176
|
-
slug: slugify(agent.name),
|
|
177
|
-
content: agent.instructions,
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
return files;
|
|
182
|
-
}
|
|
183
|
-
// Writes evals/<slug>.yaml (root) or evals/<set>/<slug>.yaml; removes orphan .yaml files and empty set folders.
|
|
184
|
-
function writeEvalYamlFiles(hubFolder, evals) {
|
|
185
|
-
const evalsDir = path.join(hubFolder, 'evals');
|
|
186
|
-
// No evals: clean the directory if it exists, otherwise no-op.
|
|
187
|
-
if (evals.length === 0) {
|
|
188
|
-
if (fs.existsSync(evalsDir)) {
|
|
189
|
-
cleanEvalOrphans(evalsDir, new Set());
|
|
190
|
-
// Remove the now-empty top-level dir for tidiness.
|
|
191
|
-
try {
|
|
192
|
-
if (fs.readdirSync(evalsDir).length === 0)
|
|
193
|
-
fs.rmdirSync(evalsDir);
|
|
194
|
-
}
|
|
195
|
-
catch { /* keep dir if non-empty (e.g. user-added files) */ }
|
|
196
|
-
}
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
|
-
if (!fs.existsSync(evalsDir)) {
|
|
200
|
-
fs.mkdirSync(evalsDir, { recursive: true });
|
|
201
|
-
}
|
|
202
|
-
// Track relative paths written (e.g. "greeting.yaml", "set-a/foo.yaml") for orphan cleanup.
|
|
203
|
-
const writtenRelPaths = new Set();
|
|
204
|
-
for (const evalEntry of evals) {
|
|
205
|
-
const slug = slugify(evalEntry.name);
|
|
206
|
-
const setName = evalEntry.path && evalEntry.path.trim().length > 0 ? evalEntry.path : null;
|
|
207
|
-
const relPath = setName ? `${setName}/${slug}.yaml` : `${slug}.yaml`;
|
|
208
|
-
const targetPath = path.join(evalsDir, relPath);
|
|
209
|
-
// Defense-in-depth: the backend's `validateScenarioSetName` doesn't
|
|
210
|
-
// restrict path separators, so refuse to write any path that escapes
|
|
211
|
-
// evals/. Same pattern as `cleanOrphanFiles` for resource files.
|
|
212
|
-
if (!targetPath.startsWith(evalsDir + path.sep)) {
|
|
213
|
-
console.warn(` Warning: skipping eval "${evalEntry.name}" (scenario set "${setName}" escapes evals/ — possible bad backend data)`);
|
|
214
|
-
continue;
|
|
215
|
-
}
|
|
216
|
-
if (setName) {
|
|
217
|
-
const setDir = path.join(evalsDir, setName);
|
|
218
|
-
if (!fs.existsSync(setDir)) {
|
|
219
|
-
fs.mkdirSync(setDir, { recursive: true });
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
const yamlContent = yaml.dump(buildEvalYamlObject(evalEntry, slug), YAML_DUMP_OPTIONS);
|
|
223
|
-
fs.writeFileSync(targetPath, yamlContent, 'utf-8');
|
|
224
|
-
writtenRelPaths.add(relPath);
|
|
225
|
-
}
|
|
226
|
-
cleanEvalOrphans(evalsDir, writtenRelPaths);
|
|
227
|
-
}
|
|
228
|
-
// Only touches .yaml files (user-added READMEs/notes are preserved); empty set subfolders are pruned.
|
|
229
|
-
function cleanEvalOrphans(evalsDir, writtenRelPaths) {
|
|
230
|
-
const entries = fs.readdirSync(evalsDir, { withFileTypes: true });
|
|
231
|
-
for (const entry of entries) {
|
|
232
|
-
const fullPath = path.join(evalsDir, entry.name);
|
|
233
|
-
if (entry.isFile()) {
|
|
234
|
-
if (entry.name.endsWith('.yaml') && !writtenRelPaths.has(entry.name)) {
|
|
235
|
-
fs.unlinkSync(fullPath);
|
|
236
|
-
}
|
|
237
|
-
continue;
|
|
238
|
-
}
|
|
239
|
-
if (entry.isDirectory()) {
|
|
240
|
-
const setName = entry.name;
|
|
241
|
-
const subEntries = fs.readdirSync(fullPath, { withFileTypes: true });
|
|
242
|
-
for (const sub of subEntries) {
|
|
243
|
-
if (sub.isFile() && sub.name.endsWith('.yaml')) {
|
|
244
|
-
const relPath = `${setName}/${sub.name}`;
|
|
245
|
-
if (!writtenRelPaths.has(relPath)) {
|
|
246
|
-
fs.unlinkSync(path.join(fullPath, sub.name));
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
// Nested directories aren't valid eval layout — leave them alone.
|
|
250
|
-
}
|
|
251
|
-
// Remove now-empty scenario-set folder.
|
|
252
|
-
try {
|
|
253
|
-
if (fs.readdirSync(fullPath).length === 0)
|
|
254
|
-
fs.rmdirSync(fullPath);
|
|
255
|
-
}
|
|
256
|
-
catch { /* ignore — non-empty (e.g. user notes) */ }
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
/**
|
|
261
|
-
* Write resource files to disk and clean up orphan resource directories.
|
|
262
|
-
*/
|
|
263
|
-
function writeResourceFiles(hubFolder, resources) {
|
|
264
|
-
const resourcesDir = path.join(hubFolder, 'resources');
|
|
265
|
-
// Track current resource slugs for orphan cleanup
|
|
266
|
-
const currentSlugs = new Set();
|
|
267
|
-
for (const resource of resources) {
|
|
268
|
-
const resSlug = slugify(resource.name);
|
|
269
|
-
currentSlugs.add(resSlug);
|
|
270
|
-
const resDir = path.join(resourcesDir, resSlug);
|
|
271
|
-
writeResourceFileTree(resDir, resource.files || []);
|
|
272
|
-
}
|
|
273
|
-
// Remove orphan resource directories
|
|
274
|
-
if (fs.existsSync(resourcesDir)) {
|
|
275
|
-
const existingDirs = fs.readdirSync(resourcesDir, { withFileTypes: true });
|
|
276
|
-
for (const entry of existingDirs) {
|
|
277
|
-
if (entry.isDirectory() && !currentSlugs.has(entry.name)) {
|
|
278
|
-
fs.rmSync(path.join(resourcesDir, entry.name), { recursive: true, force: true });
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
//# sourceMappingURL=yaml-writer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"yaml-writer.js","sourceRoot":"","sources":["../../src/lib/yaml-writer.ts"],"names":[],"mappings":"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"}
|